**** Merged r41043 from MCS ****
[mono.git] / mcs / gmcs / ChangeLog
1 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
2             Anoob V E  <projectmonokochi@rediffmail.com>
3             Harilal P R  <projectmonokochi@rediffmail.com>
4
5         Fix #71134.
6         * pending.cs (PendingImplementation.GetAbstractMethods):
7         Find NonPublic members too.
8
9 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
10
11         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
12         Fixed error 217.
13         
14         * class.cs (MethodCore.CheckMethodAgainstBase):
15         Add error 239 report.
16
17 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
18
19         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
20         
21         * class.cs (Operator.Define): Add error 217 report.
22         
23 2005-02-21  Raja R Harinath  <rharinath@novell.com>
24
25         Fix #68955.
26         * expression.cs (Invocation.IsApplicable): Make public.
27         (Invocation.IsParamsMethodApplicable): Likewise.
28         * delegate.cs (Delegate.VerifyApplicability): Don't use
29         Invocation.VerifyArgumentCompat for parameter applicability
30         testing.  Use Invocation.IsApplicable and
31         Invocation.IsParamsMethodApplicable.
32
33 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
34
35         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
36         
37         * class.cs (Operator.Define): Add error 217 report.
38         
39 2005-02-21  Raja R Harinath  <rharinath@novell.com>
40
41         * namespace.cs (UsingEntry.Resolve): Undo change below.
42
43 2005-02-21  Raja R Harinath  <rharinath@novell.com>
44
45         Fix #72756.
46         * ecore.cs (Expression.MemberLookupFailed): Add argument to
47         disable the error message when the extended MemberLookup also
48         fails.
49         (Expression.MemberLookupFinal): Update.
50         (SimpleName.DoSimpleNameResolve): Update.
51         * expression.cs (MemberAccess.ResolveNamespaceOrType):
52         Don't use MemberLookupFinal.
53         (New.DoResolve): Update.
54         (BaseAccess.CommonResolve): Update.
55
56 2005-02-21  Raja R Harinath  <rharinath@novell.com>
57
58         Fix #72732.
59         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
60         occured previously, don't resolve again.
61
62 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
63
64         Fix #69949
65         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
66         argument. Call ResolveAttributeUsage for unresolved.
67         when types doesn't match ctor arguments.
68         
69         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
70         for nested attribute classes.
71         (Class.attribute_usage): Removed.
72         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
73         for attribute class.
74         
75         * ecore.cs (IsAttribute): Removed.
76         
77         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
78         
79         * rootcontext.cs (RegisterAttribute): Removed, attributes are
80         now normal types.
81         (attribute_types): Removed.
82         (EmitCode): Global attributes are emited as the latest.
83
84 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
85
86         * class.cs (EmitFieldInitializers): Don't emit field initializer
87         for default values when optimilization is on.
88         
89         * constant.cs (Constant.IsDefaultValue): New property.
90         
91         * driver.cs: Add /optimize handling.
92         
93         * constant.cs,
94         * ecore.cs,
95         * literal.cs: Implement new IsDefaultValue property.
96         
97         * rootcontext.cs (Optimize): New field, holds /optimize option.
98
99 2005-02-18  Raja R Harinath  <rharinath@novell.com>
100
101         Fix crasher in re-opened #72347.
102         * namespace.cs (Namespace.Lookup): Return null if
103         DeclSpace.DefineType returns null.
104
105         Fix #72678.
106         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
107
108 2005-02-18  Raja R Harinath  <rharinath@novell.com>
109
110         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
111         now returns null if it cannot resolve to an lvalue.
112         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
113         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
114         returned null.  Remove check for SimpleName.
115         (EventExpr.DoResolveLValue): New.
116         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
117         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
118         error from ...
119         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
120         avoid CS0131 error.
121         (Unary.ResolveOperator): Move CS0211 check ...
122         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
123         CS0131 error.
124         (Unary.DoResolveLValue): Simplify.
125         (AddressOf.DoResolveLValue): New.
126         (ArrayAccess.DoResolveLValue): New.
127
128 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
129
130         * attribute.cs (Attribute.Resolve): Add arguments casting for
131         when types doesn't match ctor arguments.
132
133 2005-02-16  Raja R Harinath  <rharinath@novell.com>
134
135         Fix parts of #63202.
136         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
137         lookup of operator in base type.  Ensure that all checks happen
138         when the operator resolves to an "op_..." method.
139
140 2005-02-15  Raja R Harinath  <rharinath@novell.com>
141
142         Fix #71992.
143         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
144         'ignore_cs0104' parameter.  Pass it to ...
145         (NamespaceEntry.Lookup): ... this.
146         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
147         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
148         (TypeLookupExpression.DoResolveAsTypeStep): Update.
149         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
150         Update.  Request that cs0104 errors be ignored.
151         (ComposedCast.ResolveAsTypeStep): Update.
152
153 2005-02-14  Raja R Harinath  <rharinath@novell.com>
154
155         Fix #59209.
156         * expression.cs (Invocation.BetterFunction): Remove support for
157         comparing virtual functions and their overrides.
158         (Invocation.IsOverride): New.
159         (Invocation.OverloadResolve): Don't consider 'override' functions
160         during candidate selection.  Store them in a lookaside list.
161         If the selected method is a 'virtual' function, use the list to
162         find any overrides that are closer to the LHS type.
163
164 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
165
166         * expression.cs (New.DoResolve): Add complex core type reduction.
167         (New.Constantify): Converts complex core type syntax like 'new int ()'
168         to simple constant.
169         
170 2005-02-14  Raja R Harinath  <rharinath@novell.com>
171
172         * decl.cs (EntryType.EntryType): New constructor to create an
173         updated copy of a cache entry.
174         (MemberCache.AddMethods): Use it.
175         (MemberCache.ClearDeclaredOnly): Remove.
176         (MemberCache.MemberCache): Update.
177
178 2005-02-11  Miguel de Icaza  <miguel@novell.com>
179
180         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
181         variable.  This one is represents the actual low-level declaration
182         of the method, as opposed to the semantic level `IsStatic'.   
183
184         An anonymous method which is hosted into a static method might be
185         actually an instance method.  IsStatic would reflect the
186         container, while MethodIsStatic represents the actual code
187         generated.
188
189         * expression.cs (ParameterReference): Use the new MethodIsStatic
190         instead of IsStatic.
191
192         * anonymous.cs (AnonymousMethod.Compatible): Pass the
193         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
194         set on the current EmitContext. 
195
196         * expression.cs (Cast): Overload DoResolveLValue so we can pass
197         resolve our casted expression as an LValue.  This triggers the
198         proper LValue processing that is later required by Assign.
199
200         This fixes 72347.
201
202         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
203
204 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
205
206         C# 2.0 Fixed buffer implementation
207
208         * anonymous.cs: Update after RegisterHelperClass renaming.
209
210         * attribute.cs (AttributeTester.fixed_buffer_cache):
211         Cache of external fixed buffers.
212         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
213         implementation if field is fixed buffer else null.
214
215         * class.cs
216         (TypeContainer.AddField): Accept FieldMember instead of Field.
217         (FieldBase.IsFieldClsCompliant): Extracted code from
218         VerifyClsCompliance descendant customization.
219         (FixedField): New class handles fixed buffer fields.
220         (FixedFieldExternal): Keeps information about imported fixed
221         buffer.
222         (IFixedField): Make access to internal or external fixed buffer
223         same.
224
225         * cs-parser.jay: Add fixed buffer parsing.
226
227         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
228         buffer.
229
230         * expression.cs (Indirection): Extended implementation to accept
231         fixed buffer field.
232         (PointerArithmetic.Emit): Get element from fixed buffer as well.
233         (ElementAccess.MakePointerAccess): Get type as parameter.
234         (DoResolve): Add fixed buffer field expression conversion.
235         (DoResolveLValue): Ditto.
236         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
237         (ArrayPtr): Derives from FixedBufferPtr.
238         (ArrayPtr.Emit): Add extra emit for array elements.
239
240         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
241
242         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
243         for compiler generated types.
244         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
245
246         * statement.cs (Fixed): Refactored to be easier add fixed buffer
247         and consume less memory.
248         (Fixed.Resolve): Add fixed buffer case.
249
250         * typemanager.cs (compiler_generated_attr_ctor,
251         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
252         (HasElementType): Add our own implementation to work on every
253         runtime.
254
255 2005-02-11  Miguel de Icaza  <miguel@novell.com>
256
257         * anonymous.cs (CaptureContext): Track whether `this' has been
258         referenced.   
259
260         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
261         only captured `this' if it was implicitly done (instance
262         methods/variables were used). 
263
264         * codegen.cs (EmitContext.CaptureThis): New method to flag that
265         `this' must be captured.
266
267 2005-01-30  Miguel de Icaza  <miguel@novell.com>
268  
269         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
270         is null it means that there has been no need to capture anything,
271         so we just create a sibling.
272
273         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
274
275         Just a partial fix.  The other half is fairly elusive.
276         
277 2005-02-10  Raja R Harinath  <rharinath@novell.com>
278
279         Fix #52586, cs0121-4.cs.
280         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
281         and return a hashtable.
282         (MemberCache.ClearDeclaredOnly): New.
283         (MemberCache.MemberCache): Update to change.  Make a deep copy of
284         the method_hash of a base type too.
285         (MemberCache.AddMethods): Adapt to having a deep copy of the base
286         type methods.  Overwrite entries with the same MethodHandle so
287         that the ReflectedType is correct.  The process leaves in base
288         virtual functions and their overrides as distinct entries.
289         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
290         matters since it was boxed in a ArrayList before.
291         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
292         modifier.
293         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
294         case of a virtual function and its override (choose the overload
295         as better).
296         (Invocation.OverloadResolve): Avoid 'override' members during
297         'applicable_type' calculation.
298
299 2005-03-28  Raja R Harinath  <rharinath@novell.com>
300
301         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
302         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
303         GetTypeHandle.  It is possible for a reflected type to derive from
304         a TypeBuilder (e.g., int[] derives from the TypeBuilder
305         System.Array during mscorlib compilation).
306         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
307         contain a method_hash, don't create one either.  Don't create a
308         deep copy of the base cache's method_hash.
309         (MemberCache.SetupCache): Rename back from DeepCopy.
310         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
311         already initialized.  If we see an override function, add its
312         underlying base virtual function to the member_hash too.
313
314 2005-02-09  Raja R Harinath  <rharinath@novell.com>
315
316         Combine two near-redundant caches.
317         * typemanager.cs (method_params): Rename from method_internal_params.
318         (TypeManager.GetParameterData): New.  Replace
319         Invocation.GetParameterData.
320         (TypeManager.LookupParametersByBuilder): Remove.
321         * expression.cs (Invocation.method_parameter_cache): Remove.
322         (Invocation.GetParameterData): Remove.
323         Update to changes.
324         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
325         Update to changes.
326
327 2005-02-08  Raja R Harinath  <rharinath@novell.com>
328
329         Fix #72015.
330         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
331         TypeManager.multicast_delegate_type is null, resolve it by looking
332         up "System.MulticastDelegate".
333         * rootcontext.cs (RootContext.ResolveCore): Simplify.
334
335 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
336             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
337             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
338
339         Fix cs0164.cs.
340         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
341         (LabeledStatement.AddReference): New.  Set 'referenced'.
342         (Goto.Resolve): Use it.
343
344 2005-02-05  John Luke  <john.luke@gmail.com>
345
346         * driver.cs: remove duplicate -doc line in Usage ()
347
348 2005-02-04  Raja R Harinath  <rharinath@novell.com>
349
350         * location.cs (Location.AddFile): Fix CS2002 error report.
351
352 2005-02-02  Martin Baulig  <martin@ximian.com>
353
354         * delegate.cs (Delegate.DefineType): Report an internal error if
355         TypeManager.multicast_delegate_type is null.  See bug #72015 for
356         details.        
357
358 2005-02-02  Raja R Harinath  <rharinath@novell.com>
359
360         Fix a crasher in a variant of #31984.
361         * const.cs (Constant.CheckBase): New override that defers the
362         new-or-override check in case the base type hasn't been populated
363         yet.
364         (Constant.Define): Ensure the new-or-override check is performed.
365
366 2005-02-01  Duncan Mak  <duncan@ximian.com>
367
368         * const.cs (LookupConstantValue): Check that `ce' is not null
369         before calling GetValue ().
370
371 2005-02-01  Raja R Harinath  <rharinath@novell.com>
372
373         Fix test-334.cs (#69519).
374         * cs-parser.jay (using_alias_directive): Pass in an expression to
375         NamespaceEntry.UsingAlias.
376         (using_namespace_directive): Pass in an expression to
377         NamespaceEntry.Using.
378         (namespace_name): Don't flatten to a string.
379         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
380         (NamespaceEntry.AliasEntry.Resolve): Lookup using
381         ResolveAsTypeStep.
382         (NamespaceEntry.UsingEntry): Likewise.
383         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
384         changes.
385         (NamespaceEntry.LookupForUsing): Remove.
386         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
387         names.
388         (NamespaceEntry.Lookup): Remove support for dotted names.
389
390 2005-02-01  Raja R Harinath  <rharinath@novell.com>
391
392         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
393         split into two.
394         (NamespaceEntry.ImplicitParent): Compute on demand.
395         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
396         parallels the current.
397         (NamespaceEntry.LookupForUsing): Use it.
398         (NamespaceEntry.Lookup): If the current namespace-entry is
399         implicit, don't search aliases and using tables.
400
401 2005-02-01  Raja R Harinath  <rharinath@novell.com>
402
403         Fix #31984.
404         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
405         BaseCache here.
406         (TypeContainer.BaseCache): Compute on demand.
407         (TypeContainer.FindMembers): Define constants and types if they're
408         not already created.
409         (FieldMember.Define): Move resetting of ec.InUnsafe before error
410         check.
411         * const.cs (Constant.Define): Make idempotent.
412
413 2005-01-29  Miguel de Icaza  <miguel@novell.com>
414
415         * pending.cs: Produce better code (no nops produced by using Ldarg
416         + value).
417         
418         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
419         i - 1' it should be arg + 1.
420
421         Fixes bug #71819.
422
423 2005-01-28  Raja R Harinath  <rharinath@novell.com>
424
425         * attribute.cs (Attribute.CheckAttributeType): Make private
426         non-virtual.
427         (Attribute.ResolveType): Make virtual.
428         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
429         handling of RootContext.Tree.Types.
430
431 2005-01-27  Raja R Harinath  <rharinath@novell.com>
432
433         Update attribute-handling to use the SimpleName/MemberAccess
434         mechanisms.
435         * cs-parser.jay (attribute): Pass in an expression to the
436         constructors of Attribute and GlobalAttribute.
437         * attribute.cs (Attribute): Take an expression for the name.
438         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
439         passed in attribute name expression.
440         (Attribute.CheckAttributeType): Use it.
441         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
442         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
443         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
444         argument to prevent error messages if the lookup fails.
445
446 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
447
448         * expression.cs (Indirection): Implemented IVariable interface
449         to support indirection in AddressOf operator.
450         (PointerArithmetic.Emit): Add optimalization for case where
451         result can be precomputed.
452
453 2005-01-26  Martin Baulig  <martin@ximian.com>
454
455         * class.cs (TypeContainer.AttributeTargets): Return the correct
456         AttributeTargets depending on our `Kind' instead of throwing an
457         exception; fixes #71632.
458
459 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
460
461         Fix #71257
462         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
463         constant members.
464
465 2005-03-17  Martin Baulig  <martin@ximian.com>
466
467         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
468         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
469
470 2005-03-17  Martin Baulig  <martin@ximian.com>
471
472         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
473         to bool so we can return an error condition.
474         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
475         returned an error.
476
477 2005-03-17  Martin Baulig  <martin@ximian.com>
478
479         * generic.cs (TypeMananager.IsIEnumerable): New public method.
480
481         * convert.cs (Convert.ImplicitReferenceConversion(Exists)): Allow
482         converting from an array-type of T to `IEnumerable<T>'.
483
484 2005-03-16  Martin Baulig  <martin@ximian.com>
485
486         * generic.cs (Nullable.Unwrap): Implement IAssignMethod.
487         (Nullable.LiftedUnaryMutator): New public class.
488
489         * expression.cs (UnaryMutator.DoResolve): Added support for
490         Nullable Types.
491
492 2005-03-14  Martin Baulig  <martin@ximian.com>
493
494         * generic.cs (Nullable.NullCoalescingOperator): Implemented.
495
496 2005-03-14  Martin Baulig  <martin@ximian.com>
497
498         * generic.cs (Nullable.LiftedBinaryOperator): Added support for
499         the comparision operators `<', `>', `<=' and `>='.
500
501 2005-03-13  Martin Baulig  <martin@ximian.com>
502
503         * generic.cs
504         (Nullable.NullLiteral): Renamed to `Nullable.NullableLiteral' to
505         avoid confusion with the `NullLiteral'.
506         (Nullable.LiftedBinaryOperator): Correctly implement `==' and '!='.
507
508 2005-03-13  Martin Baulig  <martin@ximian.com>
509
510         * expression.cs (Binary.ResolveOperator): For `==' and `!=', allow
511         comparing arbitrary types with the null literal.
512
513 2005-03-13  Martin Baulig  <martin@ximian.com>
514
515         * generic.cs (Nullable.LiftedBinaryOperator): Add support for the
516         boolean operators '&&', '||', '&' and '|'.
517         (Nullable.OperatorTrueOrFalse): New public class.
518
519         * ecore.cs (Expression.GetOperatorTrue/False): Return an `Expression'
520         instead of a `StaticCallExpr'; added support for nullables.
521
522 2005-03-10  Martin Baulig  <martin@ximian.com>
523
524         * expression.cs
525         (ArrayAccess.EmitDynamicInitializers): Use `etype.IsValueType'
526         rather than `etype.IsSubclassOf (TypeManager.value_type)'.      
527
528 2005-03-07  Martin Baulig  <martin@ximian.com>
529
530         * generic.cs (Nullable.Unwrap): Implement IMemoryLocation and make
531         it work if `expr' is not an IMemoryLocation.
532         (Nullable.Lifted): Implement IMemoryLocation.
533         (Nullable.LiftedConversion.ResolveUnderlying): Use the correct
534         target type.
535
536 2005-03-05  Martin Baulig  <martin@ximian.com>
537
538         * generic.cs (Nullable.Unwrap, Wrap): New protected classes.
539         (Nullable.Lifted): New abstract class; rewrote the lifted conversions.
540         (Nullable): Added support for lifted unary and binary operators.
541
542         * expression.cs (Unary.DoResolve): Added support for nullable types.
543         (Binary.DoResolve): Likewise.
544         (Conditional.DoResolve): Likewise.
545
546 2005-03-02  Martin Baulig  <martin@ximian.com>
547
548         * decl.cs (DeclSpace.SetParameterInfo): Make this virtual.
549
550         * class.cs (ClassPart.SetParameterInfo): Override this.
551         (PartialContainer.SetParameterInfo): Override this.
552         (TypeContainer.CheckConstraints): New protected method.
553         (PartialContainer.CheckConstraints): Override this and check
554         whether the same contraints were specified in all parts of a
555         partial generic type definition.
556         (PartialContainer.UpdateConstraints): New public method.
557
558         * generic.cs (TypeParameter.UpdateConstraints): New public method.
559
560 2005-03-02  Martin Baulig  <martin@ximian.com>
561
562         Committing a patch from Carlos Alberto Cortez to fix #72887.
563
564         * convert.cs (Convert.ExplicitReferenceConversionExists): Allow
565         casts from `T []' to `int []'.
566
567 2005-03-02  Martin Baulig  <martin@ximian.com>
568
569         * generic.cs (TypeManager.IsEqual): Make this symmetric.
570
571         * expression.cs (Binary.ResolveOperator): When resolving a
572         BinaryDelegate, use `TypeManager.IsEqual (l, r)' rather than just
573         `=='.  Fixes #71866.  See gen-127.cs.
574
575 2005-03-02  Martin Baulig  <martin@ximian.com>
576
577         * class.cs (TypeContainer.DoDefineMembers): We also need a default
578         static constructor in static classes.
579
580 2005-03-02  Martin Baulig  <martin@ximian.com>
581
582         * generic.cs
583         (NullableType.Name, NullableType.FullName): Add a "?" to the name.
584         (Nullable.LiftedConversion): Added support for user-defined
585         conversions.
586
587         * cs-tokenizer.cs (Tokenizer.PutbackCloseParens): New public method.
588
589         * cs-parser.jay: Use ComposedCast everywhere instead of
590         NullableType, so we don't need to check for NullableType
591         everywhere.
592         (conditional_expression): Added `INTERR CLOSE_PARENS' rule for the
593         case where we'll be resolved into a `parenthesized_expression_0'
594         afterwards.
595
596         * convert.cs
597         (Convert.UserDefinedConversion): Added nullable conversions.
598
599 2005-02-28  Martin Baulig  <martin@ximian.com>
600
601         * generic.cs (TypeManager.IsNullableType): New static method.
602         (Nullable): New abstract class.
603         (Nullable.NullLiteral): New public class.
604         (Nullable.LiftedConversion): New public class.
605
606         * cs-parser.jay (non_expression_type): Changed `builtin_types' to
607         `builtin_types opt_nullable'.
608
609         * convert.cs
610         (Convert.ImplicitConversionStandard): Added nullable conversions.
611         (Convert.ExplicitConversionStandard): Likewise.
612         (Convert.ExplicitConversion): Likewise.
613
614 2005-02-26  Martin Baulig  <martin@ximian.com>
615
616         * expression.cs (ComposedCast.DoResolveAsTypeStep): Allow `dim' to
617         begin with a "?", for instance "?[]".  Don't do a type lookup if
618         `dim' is empty.
619
620 2005-02-25  Martin Baulig  <martin@ximian.com>
621
622         The first part of Nullable Types :-)
623
624         * generic.cs (NullableType): New public class.
625         (NullCoalescingOperator): New public class.
626         (TypeArguments.Resolve): Add a CS0306 check.
627
628         * cs-parser.jay (opt_error_modifier): Removed, this was unused.
629         (opt_nullable): New rule.
630         (type): Added `opt_nullable' to `namespace_or_type_name',
631         `builtin_types' and `pointer_type'.
632         (array_type): Added `opt_nullable'.
633         (opt_rank_specifier_or_nullable): New rule; this is the
634         combination of `opt_rank_specifier' and `opt_nullable'.
635         (opt_error): New rule; catch errors here.
636         (nullable_type_or_conditional): New rule; we use this to check for
637         nullable and still detect the conditional operator.
638         (local_variable_type): Use `opt_rank_specifier_or_nullable'
639         instead `opt_rank_specifier'.
640
641         * expression.cs (ComposedCast.DoResolveAsTypeStep): Added support
642         for nullables.
643
644 2005-02-24  Martin Baulig  <martin@ximian.com>
645
646         * README, README.Changes: Removed; they're old and obsolete.
647
648 2005-02-22  Martin Baulig  <martin@ximian.com>
649
650         * generic.cs (TypeParameter.Resolve): If resolving the constraints
651         returned an error, set `constraints' to null to avoid a crash
652         later on.
653         (TypeParameter.ResolveType): Likewise.
654
655 2005-02-22  Martin Baulig  <martin@ximian.com>
656
657         * generic.cs
658         (Constraints.ResolveTypes): Protect against being called twice.
659         (Constraints.CheckInterfaceMethod): Don't call ResolveTypes().
660         (TypeParameter.ResolveType): New public method; calls
661         constraints.ResolveTypes().
662         (TypeParameter.DefineType): Moved constraints.ResolveType() out
663         into the new ResolveType().
664         (GenericMethod.Define): Call ResolveType() on all our
665         TypeParameter's.        
666
667 2005-02-21  Martin Baulig  <martin@ximian.com>
668
669         * generic.cs
670         (TypeManager.generic_nullable_type): New static public field.
671         (TypeManager.InitGenericCoreType): Lookup "System.Nullable`1".
672
673         * rootcontext.cs
674         (RootContext.ResolveCore): Resolve "System.Nullable`1".
675
676 2005-02-15  Martin Baulig  <martin@ximian.com>
677
678         * generic.cs (ConstructedType.Constraints): Correctly check
679         constraints if the argument type is a type parameter; fixes
680         #72326. 
681
682 2005-02-02  Martin Baulig  <martin@ximian.com>
683
684         * delegate.cs (Delegate.DefineType): Report an internal error if
685         TypeManager.multicast_delegate_type is null.  See bug #72015 for
686         details.        
687
688 2005-01-29  Miguel de Icaza  <miguel@novell.com>
689
690         * pending.cs: Produce better code (no nops produced by using Ldarg
691         + value).
692         
693         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
694         i - 1' it should be arg + 1.
695
696         Fixes bug #71819.
697         
698 2005-01-26  Martin Baulig  <martin@ximian.com>
699
700         * cs-parser.jay (indexer_declarator): Don't report an error if we
701         have type parameters since we can be an explicit interface
702         implementation; fixes #71449.
703
704 2005-01-26  Martin Baulig  <martin@ximian.com>
705
706         * class.cs (TypeContainer.AttributeTargets): Return the correct
707         AttributeTargets depending on our `Kind' instead of throwing an
708         exception; fixes #71632.
709
710 2005-01-26  Martin Baulig  <martin@ximian.com>
711
712         * delegate.cs (Delegate.DefineType): Correctly define our type
713         parameters.  Fixes #71483.
714
715 2005-01-25  Raja R Harinath  <rharinath@novell.com>
716
717         Fix #71602.
718         * expression.cs (MemberAccess.DoResolve): Don't complain with
719         cs0572 when the LHS of a member access has identical name and type
720         name.
721
722 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
723
724         Fix #71651, #71675
725         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
726         CreatePermission.
727         Create custom PermissionSet only for PermissionSetAttribute.
728
729 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
730
731         Fix #71649
732         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
733         delegates in static class.
734
735 2005-01-24  Martin Baulig  <martin@ximian.com>
736
737         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
738         merging an implicit block, just use its reachability.
739
740         * statement.cs (Block.Resolve): Make the unreachable code check
741         work wrt. implicit blocks; see test-337 from #63842.
742
743 2005-01-21  Alp Toker  <alp@atoker.com>
744  
745         * cs-parser.jay: destructor_declaration's container is PartialContainer
746         not Class when partial types are used, so use Kind prop instead of
747         'is'.
748         
749 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
750
751         * cs-parser.jay: Improve error reporting when an interface
752         declares new types.
753
754 2005-01-20  Dick Porter  <dick@ximian.com>
755
756         * support.cs: SeekableStreamReader fix from Sandor Dobos
757         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
758         chars are read.  Fixes bug 70369.
759
760 2005-01-20  Raja R Harinath  <rharinath@novell.com>
761
762         * cs-parser.jay (catch_clause): Simplify current_block handling
763         somewhat.
764
765 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
766
767         * convert.cs (ImplicitStandardConversionExists): Synchronize the
768         code with ImplicitStandardConversion to handle the implicit
769         conversion of method groups into valid delegate invocations. 
770
771         The problem is that in parameter handling we were using this code
772         path.  Fixes bug #64698
773
774 2005-01-19  Raja R Harinath  <rharinath@novell.com>
775
776         * cs-parser.jay: Fix several infelicities.
777         - Avoid assigning to the parser value stack.  Code like 
778           '$3 = null' is unclean.  Synthesize a value for the code block
779           instead. 
780         - Avoid using oob_stack for storing location information.  Use ...
781         (_mark_): ... this.  New (empty) rule.  Saves the current location
782         in $$.
783         (foreach_statement): Avoid using oob_stack for current_block
784         handling.  Use technique used in for_statement and
785         using_statement.  Synthesize a value for the code block to store
786         additional intermediate information.
787
788 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
789
790         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
791         of a different type is only allowed to private fields of a
792         containing type, not on fields of a base class.
793
794         See test-174.cs and error cs0122-9.cs
795
796 2005-01-13  Raja R Harinath  <rharinath@novell.com>
797
798         Fix test-335.cs (bug #58126).
799         * cs-parser.jay (argument): Split out non-expression parts of the
800         rule into 'non_simple_argument'.
801         (invocation_expression): Support parenthesized invocations with
802         multiple arguments, and with single non-simple arguments.
803
804 2005-01-13  Raja R Harinath  <rharinath@novell.com>
805
806         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
807         places.
808
809 2005-01-12  Raja R Harinath  <rharinath@novell.com>
810
811         Fix cs0038-1.cs, cs1640-6.cs.
812         * ecore.cs (Expression.Resolve): Remove special-case for
813         SimpleName in error-handling.
814         (Expression.almostMatchedMembers): Relax access permission to
815         protected.
816         (Expression.MemberLookupFailed): Handle duplicates in
817         almostMatchedMembers list.
818         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
819         * expression.cs (New.DoResolve): Report CS1540 for more cases.
820         * typemanager.cs (GetFullNameSignature): Use the MethodBase
821         overload if the passed in MemberInfo is a MethodBase.
822
823 2005-01-25  Martin Baulig  <martin@ximian.com>
824
825         * doc.cs
826         (DocUtil.emptyParamList): Removed; use `Type.EmptyTypes' instead.
827
828 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
829
830         Fix #70749
831         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
832         for non-CAS & merge permission sets properly.
833
834 2005-01-11  Raja R Harinath  <rharinath@novell.com>
835
836         Improve standard-compliance of simple name and member access 
837         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
838         * ecore.cs (FullNamedExpression): New abstract base class 
839         for Namespaces and TypeExpressions.
840         (ResolveFlags.SimpleName): Remove.
841         (SimpleName): Remove support for dotted names.
842         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
843         DeclSpace.FindType and DeclSpace.LookupType.
844         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
845         (Expression.ExprClassName): Make member function.
846         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
847         a namespace.  Remove creation of dotted "SimpleName"s.
848         (MemberAccess.DoResolve): Likewise.
849         * decl.cs (DeclSpace.Cache): Make private.
850         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
851         (DeclSpace.FindType): Update.
852         (DeclSpace.LookupType): Move here from RootContext.  Return a 
853         FullNamedExpression.
854         * namespace.cs (Namespace): Derive from FullNamedExpression
855         so that it can be part of expression resolution.
856         (Namespace.Lookup): Return an FullNamedExpression.
857         (NamespaceEntry.LookupAlias): Lookup aliases only in current
858         namespace.
859         * rootcontext.cs (NamespaceLookup): Remove.
860         (LookupType): Move to DeclSpace.
861         * attribute.cs (CheckAttributeType): Update.
862         * doc.cs (FindDocumentedType): Remove allowAlias argument.
863         (FindDocumentedTypeNonArray): Likewise.
864
865 2005-01-11  Raja R Harinath  <rharinath@novell.com>
866
867         Fix cs0509.cs, cs1632.cs.
868         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
869         is the same as IsInterface.
870         (TypeContainer.GetClassBases): Likewise.
871         * statement.cs (LabeledStatement.ig): New field.
872         (LabeledStatement.LabelTarget): Save ILGenerator which created the
873         label.
874         (LabeledStatement.DoEmit): Check that the label was created with
875         the same ILGenerator.
876
877 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
878
879         Fix #71058
880         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
881         accessors to its properties.
882
883         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
884         from accessors to property.
885         
886 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
887
888         Fix #70722
889         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
890         only for overrides.
891         
892 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
893
894         * attribute.cs: Check for null and empty strings.  
895
896         I have lost another battle to Paolo.
897
898 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
899
900         Fix #70942
901         * class.cs (PropertyMethod): Set Parent field in ctors.
902         (SetMethod.InternalParameters): Add unsafe switch hack.
903         Override MarkForDuplicationCheck where it is appropriate.
904
905         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
906         It says whether container allows members with the same name.
907         Base default is no.
908         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
909         Removed is_method parameter.
910
911 2005-01-06  Duncan Mak  <duncan@ximian.com>
912
913         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
914         because the previous change led to incorrect reporting of CS1032
915         ("Cannot define/undefine preprocessor symbols after first token in
916         file"). Instead of using `tokens_seen' as the only flag that
917         triggers CS1040, introduce `comments_seen'. This new flag is used
918         to signify having seen comments on the current line, so it is
919         unset after a newline.
920
921 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
922
923         * doc.cs : When searching for a type, find nested type too.
924           This fixes bug #71040.
925
926 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
927
928         * doc.cs :
929           - Warn missing member comment on those classes which also does not
930             have doc comments. Fixed bug #71041.
931           - Don't warn missing doc comment on default constructor.
932             Fixed bug #71042.
933
934 2005-01-06  Duncan Mak  <duncan@ximian.com>
935
936         * cs-tokenizer.cs (xtoken): After handling traditional C-style
937         comments, set `tokens_seen' to true. This allows us to detect
938         misplaced preprocessor directives (i.e. not at the beginning of
939         the a line, nor after whitespaces). In that case, report error
940         CS1040. This fixes bug #56460.
941
942         * cs-parser.jay (interface_member_declaration): Add checks for
943         IsExplicitImpl, and report CS0541 error if an interface member is
944         defined as an explicit interface declaration.
945
946 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
947
948         Fix #70817
949         * class.cs (PropertyMethod): Set Parent field in ctors.
950         (SetMethod.InternalParameters): Add unsafe switch hack.
951         
952         * decl.cs (MemberCore.Parent): Cannot be readonly.
953
954 2005-01-06  Raja R Harinath  <rharinath@novell.com>
955
956         * decl.cs (DeclSpace.ResolveType): Remove.
957         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
958         Merge in code from ...
959         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
960         * class.cs, enum.cs: Update to changes.
961
962 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
963
964         * anonymous.cs: Ensure that we init the scope of our parent if it
965         has not been initialized yet.
966
967 2004-12-30  Duncan Mak  <duncan@ximian.com>
968
969         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
970         if field.FieldBuilder is null. Fixes #70758.
971
972         * convert.cs: Fixed some typos and updated some of the comments.
973         (ImplicitStandardConversionExists):
974         (TryImplicitIntConversion): If `target_type' is an interface and
975         the type of `ic' implements this interface, return true or a new
976         BoxedCast instead of null. This fixes #70468.
977
978 2004-12-29  Duncan Mak  <duncan@ximian.com>
979
980         * expression.cs (Argument.Emit): Check that Expr is
981         IMemoryLocation before casting to it, and report CS1510 otherwise.
982
983         This fixes #70402.
984
985 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
986
987         * statement.cs (Block.ThisVariable): remove the recursion here, to
988         make the --profile more sane.
989
990 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
991
992         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
993         assembly, by JB Evain.
994
995 2004-12-17  Raja R Harinath  <rharinath@novell.com>
996
997         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
998           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
999         "parent" refers to enclosing type/class.  "base" refers to superclass.
1000
1001 2004-12-17  Raja R Harinath  <rharinath@novell.com>
1002
1003         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
1004         Ensure that we only have GlobalAttributes.
1005         * attribute.cs (Attribute.Emit): Make non-virtual.
1006         (GlobalAttribute.Emit): Remove.
1007         (Attribute.Resolve): Make virtual.
1008         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
1009         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
1010         the argument. Don't create one.
1011         (Attribute.GetObsoleteAttribute): Likewise.
1012         (Attribute.GetClsCompliantAttributeValue): Likewise.
1013         * class.cs, decl.cs: Update to changes.
1014
1015 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
1016
1017         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
1018         
1019         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
1020         
1021         * statement.cs (Foreach.Resolve): Add error 186 report.
1022
1023 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
1024
1025         * expression.cs (Conditional.DoResolve): Add warning 429.
1026         
1027         * statement.cs (If.Resolve): Add warning 665.
1028
1029 2004-12-16  Raja R Harinath  <rharinath@novell.com>
1030
1031         New invariant: RootContext.Tree.Types.NamespaceEntry == null
1032         except when in the parser, and in GlobalAttribute.
1033         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
1034         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
1035         RootContext.Tree.Types.NamespaceEntry once work is done.
1036         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
1037         and resets RootContext.Tree.Types.NamespaceEntry.
1038
1039 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
1040
1041         * cs-parser.jay: Don't create a block for every variable.
1042
1043 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
1044
1045         * location.cs: Provide extra information.
1046
1047         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
1048         variables from the captured environment, it is the ldarg_0.
1049
1050 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
1051
1052         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
1053         find a conclusion.
1054         
1055         * class.cs: Changed warning level for 169 to avoid developer
1056         displeasure from warning flooding. It will be changed back when they
1057         fix most of current BCL warnings.
1058         
1059         * RootContext.cs: Pushed default WarningLevel to 3.
1060         
1061         * statement.cs: Removed unused variable.
1062
1063 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
1064
1065         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
1066         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
1067         Add error 502 report.
1068         (StaticClass.DefineType): Add error 441 report.
1069         (Class.AllowedModifiersProp): New virtual property as temporary
1070         extension to AllowedModifiers.
1071         (Class.DefineType): Add error 418 report. Moved ModFlags check here
1072         to share implementation with StaticClass and don't call virtual
1073         methods from ctor.
1074         
1075         * driver.cs (MainDriver): Add error 1558 test.
1076
1077         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
1078         report. Moved error 36 test here.
1079
1080         * statement.cs (Throw.Resolve): Add error 724 report.
1081
1082         * typemanager.cs: Add out_attribute_type core type.
1083         
1084 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
1085
1086         * class.cs (TypeContainer.VerifyClsCompliance): Add error
1087         3018 report.
1088         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
1089
1090         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
1091         3017 report.
1092         
1093         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
1094
1095         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
1096         Add error 3023 report.
1097         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
1098
1099         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
1100         implementation.
1101
1102 2004-12-12  John Luke  <john.luke@gmail.com>
1103
1104         * driver.cs (AddArgs): take -- into account when
1105         adding arguments, fixes bug 65710 
1106
1107 2004-12-12  Martin Baulig  <martin@ximian.com>
1108
1109         * expression.cs (Unary.TryReduceNegative): Added support for
1110         SByteConstant and ByteConstant.
1111         (Unary.Reduce): Check error values from TryReduceNegative().
1112
1113 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
1114
1115         * attributes.cs (Attribute.Resolve): Avoid multiple error report
1116         and report exception as error 182.
1117
1118 2004-12-10  Raja R Harinath  <rharinath@novell.com>
1119
1120         * driver.cs (Main): Fix message when there are warnings.
1121
1122 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
1123
1124         * delegate.cs: Fixed my fix from yesterday, sorry about that.
1125
1126 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
1127
1128         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
1129         Reduced number of warnings.
1130         
1131         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
1132
1133 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
1134
1135         * driver.cs: Removed message.
1136
1137         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
1138
1139 2004-12-08    <vargaz@freemail.hu>
1140
1141         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
1142
1143 2004-12-08  Martin Baulig  <martin@ximian.com>
1144
1145         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
1146         instead of a CS3002 for properties and indexer.
1147
1148 2004-12-08  Martin Baulig  <martin@ximian.com>
1149
1150         * decl.cs (MemberName.ToString): Make this work again.
1151
1152 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
1153
1154         * attribute.cs (Resolve): Add error 591 detection.
1155
1156         * class.cs (FieldMember.Define): Add error 1547 detection.
1157         (Indexer.Define): Add error 620 detection.
1158         (Operator.Define): Add error 590 detection.
1159
1160         * ecore.cs: Missing argument for error 79.
1161
1162         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
1163         detection.
1164
1165 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
1166
1167         Fix #70106
1168         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
1169         only.
1170
1171 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
1172
1173         * cs-parser.jay : handle doc comments on implicit/explicit operators.
1174           Some operator comments were suppressed.
1175         * doc.cs : Implicit/explicit operator name in doc comments are like
1176           "op_Explicit(type)~returnType", so added suffix handling.
1177
1178 2005-01-21  Alp Toker  <alp@atoker.com>
1179
1180         * cs-parser.jay: destructor_declaration's container is PartialContainer
1181         not Class when partial types are used, so use Kind prop instead of 'is'.
1182
1183 2004-12-12  Martin Baulig  <martin@ximian.com>
1184
1185         * expression.cs (Unary.TryReduceNegative): Added support for
1186         SByteConstant and ByteConstant.
1187         (Unary.Reduce): Check error values from TryReduceNegative().
1188
1189 2004-12-11  Martin Baulig  <martin@ximian.com>
1190
1191         * support.cs (ReflectionParameters.ParameterName): If we have a
1192         `gpd', call `ParameterName' on it.
1193
1194         * parameter.cs (Parameter.GetParameterAttributes): New static method.
1195
1196         * pending.cs (PendingImplementation.DefineProxy): Call
1197         DefineParameter() for all of the MethodBuilder's arguments.
1198
1199 2004-12-09  Martin Baulig  <martin@ximian.com>
1200
1201         * doc.cs (DocUtil): Make this a static class.
1202
1203 2004-12-09  Martin Baulig  <martin@ximian.com>
1204
1205         * expression.cs (Invocation.InferType): Moved the type inference
1206         implementation into TypeManager.
1207
1208         * generics.cs (TypeManager): Moved the type inference
1209         implementation here.
1210
1211 2004-12-09  Martin Baulig  <martin@ximian.com>
1212
1213         * typemanager.cs (TypeManager): Make this a partial class.
1214
1215         * generics.cs
1216         (TypeManager): Move the generics part of `TypeManager' here.
1217
1218 2004-12-08  Martin Baulig  <martin@ximian.com>
1219
1220         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
1221         instead of a CS3002 for properties and indexer.  Added CS3024
1222         check for generic interfaces.
1223
1224         * attributes.cs (AttributeTester.AnalyzeTypeCompliance): Generic
1225         instances are not CLS-compliant.
1226
1227 2004-12-08  Martin Baulig  <martin@ximian.com>
1228
1229         * cs-parser.jay
1230         (void_pointer_expression): New rule for `void*', `void**' etc.
1231         (typeof_expression): Add `void_pointer_expression'; fixes #66846.       
1232
1233 2004-12-08  Martin Baulig  <martin@ximian.com>
1234
1235         * expression.cs (Invocation.InferType): Removed the hack for
1236         MethodCore.MayUnify().  
1237
1238         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Make
1239         this actually work.
1240
1241         * class.cs (MethodCore.MayUnify): Use
1242         TypeManager.MayBecomeEqualGenericTypes().       
1243
1244 2004-12-08  Martin Baulig  <martin@ximian.com>
1245
1246         * expression.cs (Is.DoResolve, As.DoResolve): If we're a type
1247         parameter, box it.  Fixes #69233.
1248
1249 2004-12-08  Martin Baulig  <martin@ximian.com>
1250
1251         * generic.cs (ConstructedType.CheckConstraints): Valuetypes always
1252         have the ctor constraint.  Fixes #68326.
1253
1254 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
1255
1256         * cs-parser.jay : interface comment was not consumed because of
1257           extra opt_semicolon before doc handling.
1258
1259 2004-12-03  Raja R Harinath  <rharinath@novell.com>
1260
1261         Fix test-327.cs, test-328.cs, and put in early infrastructure
1262         for eventually fixing #52697.
1263         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
1264         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
1265         from other methods.
1266         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
1267         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
1268         (VerifyUsing, error246): Update.
1269         * rootcontext.cs (RootContext.NamespaceLookup): Just use
1270         'NamespaceEntry.LookupNamespaceOrType'.
1271
1272 2004-12-07  Martin Baulig  <martin@ximian.com>
1273
1274         * driver.cs: Call it "BETA SOFTWARE" :-)
1275
1276 2004-12-06  Raja R Harinath  <rharinath@novell.com>
1277
1278         Fix crash on cs0657-17.cs.
1279         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
1280         Use RootContext.Tree.Types, not 'new RootTypes ()'.
1281         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
1282         the case where the NamespaceEntry gets overwritten.
1283
1284 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
1285
1286         Fixed #69195, #56821
1287         * ecore.cs (ResolveBoolean): Tiny refactoring.
1288
1289         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
1290         of right expression resolving when left is false constant and
1291         operator is LogicalAnd OR true constant and operator is LogicalOr.
1292
1293         * statement.cs (ResolveUnreachable): Always reports warning.
1294
1295 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
1296
1297         * class.cs: Distinguish between 1721 and 1722 (just a little help
1298         for the programmer).
1299
1300 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
1301
1302         * delegate.cs: Only allow this on new versions of the language. 
1303
1304 2004-12-02  Duncan Mak  <duncan@ximian.com>
1305
1306         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
1307         Expression class.
1308         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
1309         here as a static method. Take an additional bool out parameter
1310         `must_do_cs1540_check' for signaling to InstanceResolve.
1311         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
1312         member field from PropertyExpr class and made it an argument of
1313         the method instead.
1314         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
1315         check for MarshalByRefObject, and report CS0122 instead of CS1540.
1316         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
1317         and `remove_accessor' as well as InstanceResolve: report CS0122
1318         where applicable.
1319
1320         Fixes #70129.
1321
1322 2004-12-07  Martin Baulig  <martin@ximian.com>
1323
1324         * decl.cs (DeclSpace.AddToContainer): Report correct errors CS0694
1325         and CS0692 where appropriate.
1326
1327 2004-12-06  Martin Baulig  <martin@ximian.com>
1328
1329         * class.cs (MethodCore.MayUnify): Moved the CS0408 check here from
1330         IsDuplicateImplementation() and improved it.
1331
1332         * expression.cs (Invocation.InferTypeArguments): Added
1333         `Type[] inferred_class_types' argument (for MethodCore.MayUnify)
1334         and removed the "ref" modifier from `infered_types'.
1335
1336         * decl.cs (MemberName.ToString): Removed the exception.
1337
1338 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
1339
1340         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
1341           comments are allowed.
1342
1343 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
1344
1345         * delegate.cs: Add checks for subtypes in paramaters and return values
1346         in VerifyMethod () to add support for Covariance/Contravariance
1347         in delegates.
1348         
1349 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
1350
1351         * report.cs: Remove extra closing parenthesis.
1352
1353         * convert.cs (Error_CannotImplicitConversion): If the name of the
1354         types are the same, provide some extra information.
1355
1356 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
1357
1358         Fix bug #70102
1359         * attribute.cs (Resolve): Improved implementation of params
1360         attribute arguments.
1361
1362         * support.cs (ParameterData): Add HasParams to be faster.
1363
1364 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
1365
1366         all things are for /doc support:
1367
1368         * doc.cs: new file that supports XML documentation generation.
1369         * mcs.exe.sources: added doc.cs.
1370         * driver.cs:
1371           Handle /doc command line option.
1372           Report error 2006 instead of 5 for missing file name for /doc.
1373           Generate XML documentation when required, after type resolution.
1374         * cs-tokenizer.cs:
1375           Added support for picking up documentation (/// and /** ... */),
1376           including a new XmlCommentState enumeration.
1377         * cs-parser.jay:
1378           Added lines to fill Documentation element for field, constant,
1379           property, indexer, method, constructor, destructor, operator, event
1380           and class, struct, interface, delegate, enum.
1381           Added lines to warn incorrect comment.
1382         * rootcontext.cs :
1383           Added Documentation field (passed only when /doc was specified).
1384         * decl.cs:
1385           Added DocComment, DocCommentHeader, GenerateDocComment() and
1386           OnGenerateDocComment() and some supporting private members for
1387           /doc feature to MemberCore.
1388         * class.cs:
1389           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
1390         * delegate.cs:
1391           Added overriden DocCommentHeader.
1392         * enum.cs:
1393           Added overriden DocCommentHeader and GenerateDocComment().
1394
1395 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
1396
1397         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
1398         unwrapping the enumeration values, chain to
1399         DoConstantNumericPromotions again, so we can promote things to the
1400         fundamental types (takes care of enums that are bytes, sbytes).
1401
1402         Fixes bug #62054.
1403
1404 2004-12-01  Raja R Harinath  <rharinath@novell.com>
1405
1406         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
1407         Fix long-standing bug in type-lookup.  Use FindType instead of
1408         LookupType when ec.ResolvingTypeTree.
1409         (Attribute.ResolveType, Attribute.Resolve)
1410         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
1411         Update to changes.
1412         (Attributes.Search): Remove internal version.  Update.
1413         (Attributes.SearchMulti): Update.
1414         (Attributes.GetClsCompliantAttribute): Remove.
1415         (Attributes.GetIndexerNameAttribute): Remove.
1416         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
1417         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
1418         * class.cs (Indexer.Define): Likewise.
1419
1420 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
1421
1422         Fix bug #68790
1423         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
1424         MarshallByReference members access.
1425
1426         * expression.cs: Use CheckMarshallByRefAccess;
1427         Better error CS0197 message.
1428
1429         * report.cs: Print whole related error message.
1430
1431 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
1432
1433         * class (GetClassBases): Better error 60 report.
1434         (EventProperty): Disabled warning 67 detection.
1435
1436 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
1437
1438         Fix bug #60324
1439         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
1440
1441         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
1442         precise values.
1443
1444 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
1445
1446         Fix bug #49488
1447         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
1448
1449         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
1450
1451 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
1452
1453         * attribute.cs (Attribute.Resolve): Refine error reporting and
1454         report a cs0117 if the identifier does not exist, to distinguish
1455         from 0617 which is a miss-use of the actual identifier.
1456
1457         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
1458         between cs0070 and cs0079.
1459
1460         * class.cs (MemberBase.DoDefine): When reporting a wrong
1461         accessibility level, we use MethodCore to compare instead of
1462         Method (this was a regression in some refactoring effort).
1463
1464         So now we correctly report cs0056 again.
1465
1466         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
1467         testing the target_type (which was known to be object_type) and
1468         not the source type (which is anonymous_method).
1469
1470         Fixed reporting of error cs1660.
1471
1472         * expression.cs (UserCast.Source): Expose the underlying cast.
1473
1474         * statement.cs (Switch.SwitchGoverningType): Sort the list of
1475         allowed types to find a match to int32 first (most common).
1476
1477         In addition, it ignores any ImplicitUserConversions that did an
1478         internal implicit conversion (as the switch statement allows only
1479         one integral conversion to exist).
1480
1481         * class.cs (PartialContainer.Create): rename `name' to
1482         `member_name' for clarity.  Then replace the string calls with a
1483         call to MemberName.GetPartialName, as now using
1484         MemberName.ToString is an error (this is due to the side effects
1485         it had, that were fixed in the past).
1486
1487         This will restore the error reporting on a number of partial class
1488         errors that were missusing this (and getting an exception as a
1489         results, which is now just a plain textual warning, because
1490         yyparse debug output would crash otherwise).
1491
1492 2004-11-26  Raja R Harinath  <rharinath@novell.com>
1493
1494         * Makefile (PROGRAM_INSTALL_DIR): Remove.
1495
1496 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
1497
1498         * rootcontext.cs (LookupType): Make sure to cache lookups that
1499         don't give us a negative result. This saves about 5% of corlib
1500         compilation time.
1501
1502 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
1503
1504         * report.cs (AbstractMessage.Print): messages are sent to stderr
1505
1506         * class.cs (TypeContainer.GetClassBases): It is an error to have a
1507         non-interface in the list of interfaces (at this point, either
1508         parent was properly set, or a base class is being listed in the
1509         interfaces section).
1510
1511         This flags error 1722, and resolves the crash from bug 69259.
1512
1513 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
1514
1515         * statement.cs (Using.EmitExpressionFinally): make this work right
1516         for valuetypes. Fixes 69926.
1517
1518 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
1519
1520         * const.cs (Const.ChangeType): Cope with the "0 literal can be
1521         converted to an enum" here, before we try to change the underlying
1522         type.  This code exists, but it is a different code path than the
1523         one used while encoding constants.
1524
1525         (ImplicitReferenceConversionExists): In addition, resynchronized
1526         the code here, so it matches the same code in
1527         ImplicitReferenceConversionExists for the `from any class-type S
1528         to any interface-type T'.       
1529
1530 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
1531
1532         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
1533
1534 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
1535
1536         * cs-parser.jay: Use verbosity accordingly. 
1537
1538 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
1539
1540         * expression.cs (Unary.ResolveOperator): Do not report warning;
1541         AddressOf reads from variable.
1542         
1543         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
1544
1545 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
1546
1547         Fix bug #69462
1548
1549         * attribute.cs (Attributable): Removed CheckTargets.
1550         (Attributes.Emit): Explicit attribute targets are tested here.
1551
1552         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
1553         not enabled for interfaces.
1554
1555         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
1556         (GetAssemblyName): Ouch next bug there.
1557
1558 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
1559
1560         * expression.cs: Error 275 added.
1561         
1562 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
1563
1564         Fix bug #69177 (Implemented decimal constant support)
1565
1566         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
1567         (BinaryFold): Add DecimalConstant.
1568
1569         * const.cs (Define): Decimal constant 
1570         (is not constant.
1571         (ChangeType): Add decimal type handling.
1572         (LookupConstantValue): Don't set value for decimal type but
1573         emit DecimalConstantAttribute. Needed for constant optimization.
1574
1575         * constant.cs (ToDecimal): New method.
1576         (ConvertToDecimal): New method.
1577         (IntConstant): Implemented ConvertToDecimal.
1578         (DecimalConstant.Emit): Emit optimized version for decimals in
1579         int range.
1580
1581         * expression.cs (ResolveOperator): Changed order of constant
1582         reduction to work correctly with native types which have
1583         overloaded operators.
1584         (ResolveMemberAccess): Extract constant value from attribute
1585         for decimal type.
1586
1587         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
1588
1589         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
1590         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
1591         (ChangeType): Decimal is special.
1592         (TypeToCoreType): Add decimal type.
1593
1594 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
1595
1596         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
1597         decimal types.
1598
1599 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
1600
1601         * class.cs (EventField.ApplyAttributeBuilder): Fix error
1602         test cs1667-5.cs.
1603
1604 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
1605
1606         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
1607
1608         * pending.cs (PendingImplementation): Grab only interfaces.
1609
1610 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
1611
1612         * statement.cs (ForeachHelperMethods): Add location member and
1613         error 202 detection.
1614
1615 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
1616
1617         * expression.cs (DoResolveBase): Fixed wrong warning for out
1618         variables.
1619
1620 2004-12-04  Martin Baulig  <martin@ximian.com>
1621
1622         * convert.cs (Convert.TypeParameter_to_Null): Use the constraints
1623         to check whether the conversion is ok.
1624
1625         * typemanager.cs (TypeManager.GetTypeArguments): Just return
1626         `Type.EmptyTypes' if we're not a generic TypeContainer.
1627
1628 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
1629
1630         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
1631         old bug: when converting from the null literal to a pointer,
1632         return an EmptyCast, not the NullLiteral.
1633
1634         This fixes #69921, the recent null_type changes probably made this
1635         bug more prominent.
1636
1637 2004-12-03  Martin Baulig  <martin@ximian.com>
1638
1639         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
1640         method as our child, call AnonymousMethod.Compatible() on it.
1641
1642 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
1643
1644         * class.cs (FieldBase): Use an unused bit field from the field to
1645         encode the `has_offset' property from the FieldMember.  This saves
1646         a couple of Ks on bootstrap compilation.
1647
1648         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
1649         method as our child, return the AnonymousMethod resolved
1650         expression.
1651
1652         * expression.cs (New.DoResolve): Allow return values from
1653         NewDelegate to also include AnonymousMethods.
1654
1655         Fixes #70150.
1656
1657 2004-11-29  Raja R Harinath  <rharinath@novell.com>
1658
1659         * decl.cs (MemberCore.MemberName): Remove readonly to fix an error
1660         cs1648 report.
1661         * rootcontext.cs (ResolveCore::interfaces_first_stage): Add
1662         System.Runtime.InteropServices._Exception, since it's a base
1663         interface of the core type System.Exception in the net_2_0 profile.
1664
1665 2004-11-27  Martin Baulig  <martin@ximian.com>
1666
1667         * ecore.cs (Expression.StoreFromPtr): Use `stobj' for generic parameters.
1668
1669 2004-11-26  Raja R Harinath  <rharinath@novell.com>
1670
1671         * Makefile: Convert to use executable.make.
1672         * gmcs.exe.sources: New.
1673
1674 2004-11-25  Martin Baulig  <martin@ximian.com>
1675
1676         * expression.cs (Invocation.InferType): Added support for byref types.
1677
1678 2004-11-25  Martin Baulig  <martin@ximian.com>
1679
1680         * statement.cs (Foreach.FetchMethodMoveNext): Wrap `mi.ReturnType'
1681         in TypeManager.TypeToCoreType().
1682
1683 2004-11-25  Martin Baulig  <martin@ximian.com>
1684
1685         * iterators.cs (Iterator.DoDefineMembers): Override and lookup the
1686         "Dispose" method from the `current_type'.
1687         (Iterator.EmitMoveNext): Use the `dispose_method' we looked up in
1688         DoDefineMembers() instead of using the MethodBuilder; this is
1689         required for generic iterators.
1690
1691         * class.cs (TypeContainer.DoDefineMembers): Make this virtual.
1692
1693 2004-11-24  Martin Baulig  <martin@ximian.com>
1694
1695         * ecore.cs (Expression.LoadFromPtr): Use `ldobj' for generic parameters.
1696
1697 2004-11-20  Martin Baulig  <martin@ximian.com>
1698
1699         * expression.cs (Invocation.InferType): Correctly infer generic
1700         instances; see gen-103.cs.
1701         (Invocation.InferTypeArguments): If a generic method doesn't have
1702         any unbound type parameters, we don't need to infer anything.
1703
1704 2004-11-19  Raja R Harinath  <rharinath@novell.com>
1705
1706         * Makefile (gmcs.exe): Update to new location of bootstrap mcs.exe.
1707
1708 2004-11-17  Raja R Harinath  <rharinath@novell.com>
1709
1710         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
1711         (TypeHandle.GetMemberCache): New.
1712         (TypeHandle.TypeHandle): Update.
1713         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
1714         (TypeManager.LookupParentInterfacesCache):
1715         Rename from LookupInterfaceCache.  Optimize slightly.
1716         (TypeManager.MemberLookup_FindMembers): Update.
1717         * decl.cs (MemberCache.MemberCache): Set Container to null in the
1718         multi-type variant.
1719         (AddCacheContents): Rename from AddHashtable.
1720         * class.cs (TypeContainer.parent_container): Remove.
1721         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
1722         (TypeContainer.DoDefineMembers): Don't initialize it.
1723         Update to name changes.
1724         
1725 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
1726
1727         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
1728         that factors the code to check access modifiers on override.  
1729
1730         (PropertyBase): Use the code here.
1731
1732         Patch from Lluis S'anchez, fixes bug #69361.
1733
1734 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
1735
1736         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
1737         routine that is used to report the use of a captured variable
1738         whose address has been taken.
1739
1740         There are two checks: one when variables are being captured and
1741         the other check is when the address of a variable is taken. 
1742         
1743         (because an anonymous methods might be resolved before *or* after
1744         the address has been taken) and 
1745
1746         * expression.cs (Conditional.DoResolve): Remove the special
1747         casing that Martin added to trueExpr and falseExpr being both
1748         NullLiteral.  We get the right behavior now just by introducing
1749         the null_type into the compiler. 
1750
1751         * convert.cs (ExplicitConversion): Change the code to use
1752         null_type instead of testing `expr is NullLiteral'.
1753         (ImplicitConversionStandard): use null_type too.
1754         (ImplicitReferenceConversionExists): use null_type too.
1755         (ImplicitReferenceConversion): use null_type too.
1756
1757         * literal.cs: The type of `NullLiteral' is now null_type instead
1758         of object_type. 
1759         (Resolve): Set the type here.
1760
1761         * typemanager.cs: Introduce null_type.
1762
1763 2004-11-18  Martin Baulig  <martin@ximian.com>
1764
1765         * rootcontext.cs
1766         (RootContext.LookupType): Return a `Type', not a `TypeExpr'.
1767
1768 2004-11-18  Martin Baulig  <martin@ximian.com>
1769
1770         * ecore.cs (TypeExpr.DoResolveAsTypeStep): Make this protected.
1771
1772 2004-11-18  Martin Baulig  <martin@ximian.com>
1773
1774         * generic.cs (Constraints.Resolve): Take an `EmitContext' instead
1775         of a `DeclSpace'.  If one of our constraints is a `ConstructedType',
1776         call ResolveConstructedType() on it to resolve it without checking
1777         constraints.
1778         (Constraints.ResolveTypes): Check them here.
1779         (ConstructedType.DoResolveAsTypeStep): Fully resolve ourselves,
1780         but don't check constraints.
1781         (ConstructedType.ResolveAsTypeTerminal): Override this and also
1782         check constraints here.
1783         (ConstructedType.ResolveConstructedType): New public method.  This
1784         is called from DoResolveAsTypeStep() and Constraints.Resolve() to
1785         resolve ourselves without checking constraints.
1786
1787         * ecore.cs (Expression.ResolveAsTypeTerminal): Make this virtual.
1788
1789 2004-11-18  Martin Baulig  <martin@ximian.com>
1790
1791         * decl.cs
1792         (DeclSpace.CurrentType): Changed type from `TypeExpr' to `Type'.
1793
1794         * delegate.cs (Delegate.DefineType): Always create the EmitContext.
1795
1796 2004-11-18  Martin Baulig  <martin@ximian.com>
1797
1798         * ecore.cs (TypeExpr.ResolveType): Removed.
1799         (Expression.ResolveAsTypeTerminal): We always return a fully
1800         resolved `TypeExpr', so we can just access its `Type'.
1801
1802         * class.cs (TypeContainer.DefineType): Resolve `CurrentType' here.
1803
1804 2004-11-17  Martin Baulig  <martin@ximian.com>
1805
1806         * ecore.cs (IAlias.Type): Replaced with ResolveAsType() to make
1807         sure we don't return any unresolved TypeExpr's.
1808         (TypeAliasExpression): The .ctor now takes an `IAlias' instead of
1809         a `TypeExpr'.
1810         (Expression.ResolveAsTypeTerminal): Make sure `te.Type != null'.
1811
1812         * expression.cs (MemberAccess.ResolveAsTypeStep): Don't return any
1813         unresolved `ConstructedType's.
1814
1815 2004-11-17  Martin Baulig  <martin@ximian.com>
1816
1817         * ecore.cs (TypeExpr.ResolveType): Don't make this virtual.
1818
1819 2004-11-17  Martin Baulig  <martin@ximian.com>
1820
1821         * ecore.cs
1822         (Expression.ResolveAsTypeTerminal): Removed the `bool silent' argument.
1823
1824         * decl.cs (DeclSpace.ResolveType): Removed.
1825         (DeclSpace.ResolveTypeExpr): Removed the `bool silent' argument.
1826
1827 2004-11-17  Martin Baulig  <martin@ximian.com>
1828
1829         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
1830         direction, like FindMembers() does.  Fixes #69546, testcase is in
1831         test-315.cs.    
1832
1833 2004-11-16  Martin Baulig  <martin@ximian.com>
1834
1835         This is based on a patch from Marek Safar, see bug #69082.
1836         Fixes bugs #63705 and #67130.
1837
1838         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
1839         method; create a MemberCache for an interface type and cache the
1840         result.
1841
1842         * decl.cs (IMemberContainer.ParentContainer): Removed.
1843         (IMemberContainer.ParentCache): New property.
1844         (MemberCache.SetupCacheForInterface): Removed.
1845         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
1846         to create a cache for an interface's "parent".
1847
1848         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
1849         interfaces too.
1850
1851 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
1852
1853         * statement.cs: Avoid adding bools to a hashtable.
1854
1855 2004-11-15  Martin Baulig  <martin@ximian.com>
1856
1857         * decl.cs (MemberName.GetPartialName): Removed, use GetTypeName() instead.
1858
1859 2004-11-11  Martin Baulig  <martin@ximian.com>
1860
1861         * typemanager.cs (TypeManager.GetMethodName): New method.
1862
1863         * class.cs (MethodData.Define): Include the generic arity in the
1864         name of an explicit interface; also add it to the method name.
1865
1866         * pending.cs (PendingImplementation.InterfaceMethod): The method
1867         name now includes the generic arity.
1868
1869 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
1870
1871         * expression.cs (Invocation.OverloadResolve): Flag error if we are
1872         calling an unsafe method from a safe location.
1873
1874 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
1875
1876         Fix #69167
1877         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
1878
1879 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
1880
1881         * namespace.cs (VerifyUsing): use GetPartialName instead of
1882         ToString. 
1883
1884 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
1885
1886         * statement.cs (Return.Resolve): Fix regression in typo: if
1887         `in_exc', we have to request a NeedReturnLabel, this was a typo
1888         introduced in the anonymous method check-in.  Fixes #69131.
1889
1890         * Indexers were using the ShortName when defining themselves,
1891         causing a regression in the compiler bootstrap when applying the
1892         patch from 2004-11-02 (first part), now they use their full name
1893         and the bug is gone.
1894
1895 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
1896
1897         * driver.cs: Strip the path from the names of embedded resources. Fixes
1898         #68519.
1899
1900 2004-11-04  Raja R Harinath  <rharinath@novell.com>
1901
1902         Fix error message regression: cs0104-2.cs.
1903         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
1904         (AliasEntry.Resolve): Update.
1905         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
1906         'silent' flag.
1907         (RootContext.LookupType): Update.
1908
1909 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
1910
1911         * cs-parser.jay: Add support for handling accessor modifiers
1912         * class: Add support port accessor modifiers and error checking,
1913         define PropertyMethod.Define as virtual (not abstract anymore)
1914         * ecore.cs: Add checking for proeprties access with access modifiers
1915         * iterators.cs: Modify Accessor constructor call based in the modified
1916         constructor
1917 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
1918
1919         * expression.cs (StringConcat): Handle being called twice,
1920         as when we have a concat in a field init with more than two
1921         ctors in the class
1922
1923 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
1924
1925         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
1926         special case explicit implementations, we should always produce
1927         the .property or .event declaration.
1928         
1929         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
1930         since it will not return correct data if people use this
1931         unresolved in the presence of using statements (see test-313).
1932
1933         * class.cs (MethodData.Define): If we are an explicit interface
1934         implementation, set the method name to the full name of the
1935         interface plus the name of the method.  
1936
1937         Notice that using the method.MethodName.GetFullName() does not
1938         work, as it will only contain the name as declared on the source
1939         file (it can be a shorthand in the presence of using statements)
1940         and not the fully qualifed type name, for example:
1941
1942         using System;
1943
1944         class D : ICloneable {
1945                 object ICloneable.Clone ()  {
1946                 }
1947         }
1948
1949         Would produce a method called `ICloneable.Clone' instead of
1950         `System.ICloneable.Clone'.
1951
1952         * namespace.cs (Alias.Resolve): Use GetPartialName.
1953         
1954 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
1955
1956         * cs-parser.jay: Add error 1055 report.
1957
1958 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
1959
1960         * assign.cs (Assign.DoResolve): Only do the transform of
1961         assignment into a New if the types are compatible, if not, fall
1962         through and let the implicit code deal with the errors and with
1963         the necessary conversions. 
1964
1965 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
1966
1967         * cs-parser.jay: Add error 1031 report.
1968
1969         * cs-tokenizer.cs: Add location for error 1038.
1970
1971 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1972
1973         * cs-parser.jay: Add error 1016 report.
1974
1975 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1976
1977         * cs-parser.jay: Add errors 1575,1611 report.
1978
1979 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1980
1981         * cs-parser.jay: Add error 1001 report.
1982
1983 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1984
1985         Fix #68850
1986         * attribute.cs (GetMarshal): Add method argument for
1987         caller identification.
1988
1989         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
1990         agument for GetMarshal and RuntimeMissingSupport.
1991
1992 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1993
1994         * attribute.cs (ExtractSecurityPermissionSet): Removed
1995         TypeManager.code_access_permission_type.
1996
1997         * typemanager.cs: Removed TypeManager.code_access_permission_type.
1998
1999 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
2000
2001         * expression.cs (LocalVariableReference.DoResolveLValue): Check
2002         for obsolete use of a variable here.   Fixes regression on errors
2003         cs0619-25 and cs0619-26.
2004
2005 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
2006
2007         Fix #62358, implemented security attribute encoding.
2008
2009         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
2010         Tests permitted SecurityAction for assembly or other types.
2011         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
2012         data from SecurityPermissionAttribute to PermisionSet class.
2013
2014         * class.cs (ApplyAttributeBuilder): Added special handling
2015         for System.Security.Permissions.SecurityAttribute based types.
2016
2017         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
2018         special handling for System.Security.Permissions.SecurityAttribute
2019         based types.
2020
2021         * enum.cs (ApplyAttributeBuilder): Added special handling
2022         for System.Security.Permissions.SecurityAttribute based types.
2023
2024         * parameter.cs (ApplyAttributeBuilder): Added special handling
2025         for System.Security.Permissions.SecurityAttribute based types.
2026
2027         * rootcontext.cs: Next 2 core types.
2028
2029         * typemanager.cs (TypeManager.security_permission_attr_type):
2030         Built in type for the SecurityPermission Attribute.
2031         (code_access_permission_type): Build in type.
2032
2033 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
2034
2035         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
2036         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
2037         all of this information into
2038         EmitContext.EmitCapturedVariableInstance.
2039         
2040         * codegen.cs (EmitCapturedVariableInstance): move here the
2041         funcionality of emitting an ldarg.0 in the presence of a
2042         remapping.   This centralizes the instance emit code.
2043
2044         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
2045         then emit a load of this: it means that we have reached the
2046         topmost ScopeInfo: the one that contains the pointer to the
2047         instance of the class hosting the anonymous method.
2048
2049         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
2050         captures to the topmost CaptureContext.
2051
2052 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
2053
2054         * expression.cs (LocalVariableReference): Move the knowledge about
2055         the iterators into codegen's EmitCapturedVariableInstance.
2056
2057 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
2058
2059         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
2060         all code paths return a value from an anonymous method (it is the
2061         same as the 161 error, but for anonymous methods).
2062
2063 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
2064
2065         The introduction of anonymous methods in the compiler changed
2066         various ways of doing things in the compiler.  The most
2067         significant one is the hard split between the resolution phase
2068         and the emission phases of the compiler.
2069
2070         For instance, routines that referenced local variables no
2071         longer can safely create temporary variables during the
2072         resolution phase: they must do so from the emission phase,
2073         since the variable might have been "captured", hence access to
2074         it can not be done with the local-variable operations from the runtime.
2075         
2076         * statement.cs 
2077
2078         (Block.Flags): New flag `IsTopLevel' to indicate that this block
2079         is a toplevel block.
2080
2081         (ToplevelBlock): A new kind of Block, these are the blocks that
2082         are created by the parser for all toplevel method bodies.  These
2083         include methods, accessors and anonymous methods.
2084
2085         These contain some extra information not found in regular blocks:
2086         A pointer to an optional CaptureContext (for tracking captured
2087         local variables and parameters).  A pointer to the parent
2088         ToplevelBlock.
2089         
2090         (Return.Resolve): Catch missmatches when returning a value from an
2091         anonymous method (error 1662).
2092         Invoke NeedReturnLabel from the Resolve phase instead of the emit
2093         phase.
2094
2095         (Break.Resolve): ditto.
2096
2097         (SwitchLabel): instead of defining the labels during the
2098         resolution phase, we now turned the public ILLabel and ILLabelCode
2099         labels into methods called GetILLabelCode() and GetILLabel() that
2100         only define the label during the Emit phase.
2101
2102         (GotoCase): Track the SwitchLabel instead of the computed label
2103         (its contained therein).  Emit the code by using
2104         SwitchLabel.GetILLabelCode ().
2105
2106         (LocalInfo.Flags.Captured): A new flag has been introduce to track
2107         whether the Local has been captured or not.
2108
2109         (LocalInfo.IsCaptured): New property, used to tell whether the
2110         local has been captured.
2111         
2112         * anonymous.cs: Vastly updated to contain the anonymous method
2113         support.
2114
2115         The main classes here are: CaptureContext which tracks any
2116         captured information for a toplevel block and ScopeInfo used to
2117         track the activation frames for various local variables.   
2118
2119         Each toplevel block has an optional capture context associated
2120         with it.  When a method contains an anonymous method both the
2121         toplevel method and the anonymous method will create a capture
2122         context.   When variables or parameters are captured, they are
2123         recorded on the CaptureContext that owns them, for example:
2124
2125         void Demo () {
2126              int a;
2127              MyDelegate d = delegate {
2128                  a = 1;
2129              }
2130         }
2131
2132         Here `a' will be recorded as captured on the toplevel
2133         CapturedContext, the inner captured context will not have anything
2134         (it will only have data if local variables or parameters from it
2135         are captured in a nested anonymous method.
2136
2137         The ScopeInfo is used to track the activation frames for local
2138         variables, for example:
2139
2140         for (int i = 0; i < 10; i++)
2141                 for (int j = 0; j < 10; j++){
2142                    MyDelegate d = delegate {
2143                         call (i, j);
2144                    }
2145                 }
2146
2147         At runtime this captures a single captured variable `i', but it
2148         captures 10 different versions of the variable `j'.  The variable
2149         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
2150         recorded on a child.  
2151
2152         The toplevel ScopeInfo will also track information like the `this'
2153         pointer if instance variables were referenced (this is necessary
2154         as the anonymous method lives inside a nested class in the host
2155         type of the method). 
2156
2157         (AnonymousMethod): Expanded to track the Toplevel, implement
2158         `AnonymousMethod.Compatible' to tell whether an anonymous method
2159         can be converted to a target delegate type. 
2160
2161         The routine now also produces the anonymous method content
2162
2163         (AnonymousDelegate): A helper class that derives from
2164         DelegateCreation, this is used to generate the code necessary to
2165         produce the delegate for the anonymous method that was created. 
2166
2167         * assign.cs: API adjustments for new changes in
2168         Convert.ImplicitStandardConversionExists.
2169
2170         * class.cs: Adjustments to cope with the fact that now toplevel
2171         blocks are of type `ToplevelBlock'. 
2172
2173         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
2174         insteda of standard blocks.
2175
2176         Flag errors if params arguments are passed to anonymous methods.
2177
2178         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
2179         `CurrentAnonymousMethod' which points to the current Anonymous
2180         Method.  The variable points to the AnonymousMethod class that
2181         holds the code being compiled.  It is set in the new EmitContext
2182         created for the anonymous method.
2183
2184         (EmitContext.Phase): Introduce a variable and an enumeration to
2185         assist in enforcing some rules about when and where we are allowed
2186         to invoke certain methods (EmitContext.NeedsReturnLabel is the
2187         only one that enfonces this right now).
2188
2189         (EmitContext.HaveCaptureInfo): new helper method that returns
2190         whether we have a CapturedContext initialized.
2191
2192         (EmitContext.CaptureVariable): New method used to register that a
2193         LocalInfo must be flagged for capturing. 
2194
2195         (EmitContext.CapturedParameter): New method used to register that a
2196         parameters must be flagged for capturing. 
2197         
2198         (EmitContext.CapturedField): New method used to register that a
2199         field must be flagged for capturing. 
2200
2201         (EmitContext.HaveCapturedVariables,
2202         EmitContext.HaveCapturedFields): Return whether there are captured
2203         variables or fields. 
2204
2205         (EmitContext.EmitMethodHostInstance): This is used to emit the
2206         instance for the anonymous method.  The instance might be null
2207         (static methods), this (for anonymous methods that capture nothing
2208         and happen to live side-by-side with the current method body) or a
2209         more complicated expression if the method has a CaptureContext.
2210
2211         (EmitContext.EmitTopBlock): Routine that drives the emission of
2212         code: it will first resolve the top block, then emit any metadata
2213         and then emit the code.  The split is done so that we can extract
2214         any anonymous methods and flag any captured variables/parameters.
2215         
2216         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
2217         during this phase, the ILGenerator should not be used as labels
2218         and local variables declared here might not be accessible to any
2219         code that is part of an anonymous method.  
2220
2221         Exceptions to this include the temporary variables that are
2222         created by some statements internally for holding temporary
2223         variables. 
2224         
2225         (EmitContext.EmitMeta): New routine, in charge of emitting all the
2226         metadata for a cb
2227
2228         (EmitContext.TemporaryReturn): This method is typically called
2229         from the Emit phase, and its the only place where we allow the
2230         ReturnLabel to be defined other than the EmitMeta.  The reason is
2231         that otherwise we would have to duplicate a lot of logic in the
2232         Resolve phases of various methods that today is on the Emit
2233         phase. 
2234
2235         (EmitContext.NeedReturnLabel): This no longer creates the label,
2236         as the ILGenerator is not valid during the resolve phase.
2237
2238         (EmitContext.EmitThis): Extended the knowledge in this class to
2239         work in anonymous methods in addition to iterators. 
2240
2241         (EmitContext.EmitCapturedVariableInstance): This emits whatever
2242         code is necessary on the stack to access the instance to a local
2243         variable (the variable will be accessed as a field).
2244
2245         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
2246         EmitContext.EmitAddressOfParameter): Routines to support
2247         parameters (not completed at this point). 
2248         
2249         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
2250         will also remove the parameters.
2251
2252         * convert.cs (Convert): Define a `ConstantEC' which points to a
2253         null.  This is just to prefity some code that uses
2254         ImplicitStandardConversion code and do not have an EmitContext
2255         handy.
2256
2257         The idea is to flag explicitly that at that point in time, it is
2258         known that the conversion will not trigger the delegate checking
2259         code in implicit conversions (which requires a valid
2260         EmitContext). 
2261
2262         Everywhere: pass new EmitContext parameter since
2263         ImplicitStandardConversionExists now requires it to check for
2264         anonymous method conversions. 
2265
2266         (Convert.ImplicitStandardConversionExists): If the type of an
2267         expression is the anonymous_method_type, and the type is a
2268         delegate, we invoke the AnonymousMethod.Compatible method to check
2269         whether an implicit conversion is possible. 
2270
2271         (Convert.ImplicitConversionStandard): Only do implicit method
2272         group conversions if the language level is not ISO_1.
2273
2274         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
2275         MethodInfo for the Invoke method.  used by Delegate and
2276         AnonymousDelegate.
2277
2278         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
2279         method conversions if the target type is a delegate.
2280
2281         Removed extra debugging nops.
2282
2283         (LocalVariableReference): Turn the `local_info' into a public
2284         field. 
2285
2286         Add `prepared' field, the same hack used for FieldExprs to cope
2287         with composed assignments, as Local variables do not necessarily
2288         operate purely on the stack as they used to: they can be captured
2289         fields. 
2290
2291         Add `temp' for a temporary result, like fields.
2292
2293         Refactor DoResolve and DoResolveLValue into DoResolveBase.
2294
2295         It now copes with Local variables that are captured and emits the
2296         proper instance variable to load it from a field in the captured
2297         case. 
2298
2299         (ParameterReference.DoResolveBase): During the resolve phase,
2300         capture parameters if we are in an anonymous method.
2301
2302         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
2303         anonymous method, use the EmitContext helper routines to emit the
2304         parameter reference.
2305
2306         * iterators.cs: Set RemapToProxy to true/false during the
2307         EmitDispose class.
2308
2309         * parameters.cs (GetParameterByName): New helper method. 
2310
2311         * typemanager.cs (anonymous_method_type) a new type that
2312         represents an anonyous method.  This is always an internal type,
2313         used as a fencepost to test against the anonymous-methodness of an
2314         expression. 
2315         
2316 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
2317
2318         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
2319         561 report.
2320         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
2321
2322 2004-11-10  Martin Baulig  <martin@ximian.com>
2323
2324         * expression.cs (Invocation.BetterFunction): If two methods have
2325         equal parameter types, but only one of them is generic, the
2326         non-generic one wins.
2327         (New.DoResolve): Don't set `is_struct' to false if we're a generic
2328         instance; just use `Type.IsValueType' to determine whether
2329         something is a struct or not.
2330         (MemberAccess.DoResolveAsTypeStep): Don't modify the `args' field,
2331         so we can be called multiple times.
2332
2333 2004-11-10  Martin Baulig  <martin@ximian.com>
2334
2335         * generic.cs (TypeParameter.DefineConstraints): New public method.
2336         (TypeParameter.CheckAccessLevel): Override this and return true.
2337         (ConstructedType.ResolveType): Renamed to DoResolveType(), don't
2338         override ResolveType() anymore.
2339         (ConstructedType.DoResolveAsTypeStep): Call DoResolveType() here.
2340
2341 2004-11-10  Martin Baulig  <martin@ximian.com>
2342
2343         * rootcontext.cs (RootContext.LookupType): If we're a nested type,
2344         call DeclSpace.ResolveNestedType() on it.
2345
2346 2004-11-10  Martin Baulig  <martin@ximian.com>
2347
2348         * support.cs (ReflectionParameters.ParameterModifier): If `gpd' is
2349         non-null, call ParameterModifier() on it.
2350
2351 2004-11-10  Martin Baulig  <martin@ximian.com>
2352
2353         * iterators.cs
2354         (Iterators): Added `current_type' and `this_type' fields.
2355         (Iterators.DefineIterator): Create a new EmitContext and store it
2356         in `ec'; compute `this_type'.
2357
2358 2004-11-10  Martin Baulig  <martin@ximian.com>
2359
2360         * typemanager.cs
2361         (TypeManager.IsPrivateAccessible): New public method.
2362         (Closure.Filter): Use IsPrivateAccessible() instead of IsEqual().
2363
2364 2004-11-10  Martin Baulig  <martin@ximian.com>
2365
2366         * class.cs (TypeContainer.DefineType): Call
2367         TypeBuilder.DefineGenericParameters() before resolving the type
2368         parameters.
2369         (MethodData.parent_method): New protected field.
2370         (MethodData..ctor): Added `MethodInfo parent_method' argument.
2371         (MethodData.Define): Compute `parent_method'.
2372
2373         * decl.cs
2374         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
2375         (MemberCore.GetClsCompliantAttributeValue): Likewise.
2376         (DeclSpace.ec): New protected field; store the EmitContext here.
2377         (DeclSpace.EmitContext): New public property.
2378         (DeclSpace.ResolveType): Un-comment from the [Obsolte] attribute.
2379         (DeclSpace.ResolveNestedType): New public method.
2380         (DeclSpace.ResolveTypeExpr): Just call ResolveAsTypeTerminal() here.
2381         (DeclSpace.NestedAccessible): Added `Type tb' argument.
2382         (DeclSpace.FamilyAccessible): Likewise.
2383         (DeclSpace.FindType): Call ResolveNestedType() for nested types.
2384         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
2385         EmitContext.
2386
2387         * delegate.cs (Delegate.Define): Store the EmitContext in the `ec'
2388         field.
2389
2390         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
2391         (Enum.Emit): Don't create a new EmitContext.
2392
2393 2004-10-18  Martin Baulig  <martin@ximian.com>
2394
2395         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
2396         `Type' directly, but call ResolveType() on it.
2397         (Catch.Resolve): Likewise.
2398         (Foreach.Resolve): Likewise.
2399
2400 2004-10-18  Martin Baulig  <martin@ximian.com>
2401
2402         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
2403         `Type' directly, but call ResolveType() on it.
2404         (Probe.DoResolve): Likewise.
2405         (ArrayCreation.LookupType): Likewise.
2406         (TypeOf.DoResolve): Likewise.
2407         (SizeOf.DoResolve): Likewise.
2408
2409 2004-10-18  Raja R Harinath  <rharinath@novell.com>
2410
2411         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
2412         the ResolveType.
2413
2414 2004-10-17  John Luke  <john.luke@gmail.com>
2415
2416         * class.cs (Operator.GetSignatureForError): use CSharpName
2417
2418         * parameter.cs (Parameter.GetSignatureForError): Returns
2419         correct name even if was not defined.
2420
2421 2004-10-13  Raja R Harinath  <rharinath@novell.com>
2422
2423         Fix #65816.
2424         * class.cs (TypeContainer.EmitContext): New property.
2425         (DefineNestedTypes): Create an emitcontext for each part.
2426         (MethodCore.DoDefineParameters): Use container's emitcontext.
2427         Pass type array to InternalParameters.
2428         (MemberBase.DoDefine): Use container's emitcontext.
2429         (FieldMember.Define): Likewise.
2430         (Event.Define): Likewise.
2431         (SetMethod.GetParameterInfo): Change argument to EmitContext.
2432         Pass type array to InternalParameters.
2433         (SetIndexerMethod.GetParameterInfo): Likewise.
2434         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
2435         * delegate.cs (Define): Pass emitcontext to
2436         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
2437         array to InternalParameters.
2438         * expression.cs (ParameterReference.DoResolveBase): Pass
2439         emitcontext to GetParameterInfo.
2440         (ComposedCast.DoResolveAsTypeStep): Remove check on
2441         ec.ResolvingTypeTree.
2442         * parameter.cs (Parameter.Resolve): Change argument to
2443         EmitContext.  Use ResolveAsTypeTerminal.
2444         (Parameter.GetSignature): Change argument to EmitContext.
2445         (Parameters.ComputeSignature): Likewise.
2446         (Parameters.ComputeParameterTypes): Likewise.
2447         (Parameters.GetParameterInfo): Likewise.
2448         (Parameters.ComputeAndDefineParameterTypes): Likewise.
2449         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
2450         * support.cs (InternalParameters..ctor): Remove variant that takes
2451         a DeclSpace.
2452         * typemanager.cs (system_intptr_expr): New.
2453         (InitExpressionTypes): Initialize it.
2454
2455 2004-10-12  Chris Toshok  <toshok@ximian.com>
2456
2457         * cs-parser.jay: fix location for try_statement and catch_clause.
2458
2459 2004-10-18  Martin Baulig  <martin@ximian.com>
2460
2461         * class.cs (FieldMember.Define): Don't access the TypeExpr's
2462         `Type' directly, but call ResolveType() on it.
2463         (MemberBase.DoDefine): Likewise.
2464
2465         * expression.cs (New.DoResolve): Don't access the TypeExpr's
2466         `Type' directly, but call ResolveType() on it.
2467         (ComposedCast.DoResolveAsTypeStep): Likewise.
2468
2469         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
2470         `Type' directly, but call ResolveType() on it.
2471
2472 2004-10-17  John Luke  <john.luke@gmail.com>
2473
2474         * class.cs (Operator.GetSignatureForError): use CSharpName
2475
2476         * parameter.cs (Parameter.GetSignatureForError): Returns
2477         correct name even if was not defined.
2478
2479 2004-10-13  Raja R Harinath  <rharinath@novell.com>
2480
2481         Fix #65816.
2482         * class.cs (TypeContainer.EmitContext): New property.
2483         (DefineNestedTypes): Create an emitcontext for each part.
2484         (MethodCore.DoDefineParameters): Use container's emitcontext.
2485         Pass type array to InternalParameters.
2486         (MemberBase.DoDefine): Use container's emitcontext.
2487         (FieldMember.Define): Likewise.
2488         (Event.Define): Likewise.
2489         (SetMethod.GetParameterInfo): Change argument to EmitContext.
2490         Pass type array to InternalParameters.
2491         (SetIndexerMethod.GetParameterInfo): Likewise.
2492         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
2493         * delegate.cs (Define): Pass emitcontext to
2494         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
2495         array to InternalParameters.
2496         * expression.cs (ParameterReference.DoResolveBase): Pass
2497         emitcontext to GetParameterInfo.
2498         (ComposedCast.DoResolveAsTypeStep): Remove check on
2499         ec.ResolvingTypeTree.
2500         * parameter.cs (Parameter.Resolve): Change argument to
2501         EmitContext.  Use ResolveAsTypeTerminal.
2502         (Parameter.GetSignature): Change argument to EmitContext.
2503         (Parameters.ComputeSignature): Likewise.
2504         (Parameters.ComputeParameterTypes): Likewise.
2505         (Parameters.GetParameterInfo): Likewise.
2506         (Parameters.ComputeAndDefineParameterTypes): Likewise.
2507         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
2508         * support.cs (InternalParameters..ctor): Remove variant that takes
2509         a DeclSpace.
2510         * typemanager.cs (system_intptr_expr): New.
2511         (InitExpressionTypes): Initialize it.
2512
2513 2004-10-12  Chris Toshok  <toshok@ximian.com>
2514
2515         * cs-parser.jay: fix location for try_statement and catch_clause.
2516
2517 2004-10-07  Raja R Harinath  <rharinath@novell.com>
2518
2519         More DeclSpace.ResolveType avoidance.
2520         * decl.cs (MemberCore.InUnsafe): New property.
2521         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
2522         with newly created EmitContext.
2523         (FieldMember.Define): Likewise.
2524         * delegate.cs (Delegate.Define): Likewise.
2525         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
2526         only if normal name-lookup fails.
2527         (TypeExpr.DoResolve): Enable error-checking.
2528         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
2529         (SizeOf.DoResolve): Likewise.
2530         (ComposedCast.DoResolveAsTypeStep): Likewise.
2531         (StackAlloc.DoResolve): Likewise.
2532         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
2533         (Block.Unsafe): New property.
2534         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
2535         (Unsafe): Set 'unsafe' flag of contained block.
2536         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
2537         (Fixed.Resolve): Likewise.
2538         (Catch.Resolve): Likewise.
2539         (Using.ResolveLocalVariableDecls): Likewise.
2540         (Foreach.Resolve): Likewise.
2541
2542 2004-10-05  John Luke <john.luke@gmail.com>
2543
2544         * cs-parser.jay: add location to error CS0175
2545
2546 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
2547
2548         * ecore.cs (Expression.Constantity): Add support for turning null
2549         into a constant.
2550
2551         * const.cs (Const.Define): Allow constants to be reference types
2552         as long as the value is Null.
2553
2554 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
2555
2556         * namespace.cs (NamespaceEntry.Using): No matter which warning
2557         level is set, check if this namespace name has already been added.
2558
2559 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
2560
2561         * expression.cs: reftype [!=]= null should always use br[true,false].
2562         # 67410
2563
2564 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
2565
2566         Fix #67108
2567         * attribute.cs: Enum conversion moved to 
2568         GetAttributeArgumentExpression to be applied to the all
2569         expressions.
2570
2571 2004-10-01  Raja R Harinath  <rharinath@novell.com>
2572
2573         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
2574         * class.c (TypeContainer.DefineType): Flag error if
2575         base types aren't accessible due to access permissions.
2576         * decl.cs (DeclSpace.ResolveType): Move logic to
2577         Expression.ResolveAsTypeTerminal.
2578         (DeclSpace.ResolveTypeExpr): Thin layer over
2579         Expression.ResolveAsTypeTerminal.
2580         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
2581         Refactor code into NestedAccess.  Use it.
2582         (DeclSpace.NestedAccess): New.
2583         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
2584         argument to silence errors.  Check access permissions.
2585         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
2586         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
2587         (Cast.DoResolve): Likewise.
2588         (New.DoResolve): Likewise.
2589         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
2590         (TypeOf.DoResolve): Likewise.
2591
2592         * expression.cs (Invocation.BetterConversion): Return the Type of
2593         the better conversion.  Implement section 14.4.2.3 more faithfully.
2594         (Invocation.BetterFunction): Make boolean.  Make correspondence to
2595         section 14.4.2.2 explicit.
2596         (Invocation.OverloadResolve): Update.
2597         (Invocation): Remove is_base field.
2598         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
2599         (Invocation.Emit): Likewise.
2600
2601 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
2602
2603         * cs-parser.jay: Reverted 642 warning fix.
2604
2605 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
2606
2607         Fix bug #66615
2608         * decl.cs (FindMemberWithSameName): Indexer can have more than
2609         1 argument.
2610
2611 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
2612
2613         * expression.cs (LocalVariableReference.DoResolveLValue):
2614         Do not report warning 219 for out values.
2615         (EmptyExpression.Null): New member to avoid extra allocations.
2616
2617 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
2618
2619         * cs-parser.jay: Fix wrong warning 642 report.
2620
2621         * cs-tokenizer.cs (CheckNextToken): New helper;
2622         Inspect next character if is same as expected.
2623
2624 2004-09-23  Martin Baulig  <martin@ximian.com>
2625
2626         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
2627         (Convert.ImplicitReferenceConversionExists): Likewise.
2628
2629 2004-11-09  Raja R Harinath  <rharinath@novell.com>
2630
2631         * Makefile (DISTFILES): Comment out a few missing files.
2632
2633 2004-10-29  Raja R Harinath  <rharinath@novell.com>
2634
2635         * Makefile (bootstrap_libs,bootstrap_libfiles): New.
2636         (bootstrap-libs): New target.  Invokes the net_2_0_bootstrap profile.
2637         (gmcs.exe): Invoke bootstrap-libs.
2638         (clean-local): Clean the net_2_0_bootstrap profile too.
2639         (PROGRAM_INSTALL_DIR): New.
2640         (install-local): Use it.
2641
2642 2004-10-13  Martin Baulig  <martin@ximian.com>
2643
2644         * generic.cs (TypeManager.InflatedConstraints): New nested class.
2645         (TypeParameter.DefineType): If we're a method type parameter and
2646         that method is overriding something, "inflate" its constraints.
2647
2648 2004-10-12  Martin Baulig  <martin@ximian.com>
2649
2650         * expression.cs (MemberAccess.DoResolve): If we're a SimpleName
2651         and have type arguments, create and resolve a ConstructedType.
2652
2653 2004-10-12  Martin Baulig  <martin@ximian.com>
2654
2655         * decl.cs (MemberCache.FindMemberToOverride): Use
2656         TypeManager.IsEqual() to compare the parameters and Type.Equals()
2657         to compare the invocationType.
2658
2659         * typemanager.cs (TypeManager.IsEqual): Added support for arrays.
2660         When comparing two type parameters, only do the signature-only
2661         comparision for method type parameters.
2662
2663 2004-10-11  Martin Baulig  <martin@ximian.com>
2664
2665         * report.cs: Don't make --fatal abort on warnings, we have
2666         -warnaserror for that.
2667
2668 2004-10-11  Martin Baulig  <martin@ximian.com>
2669
2670         * typemanager.cs
2671         (TypeManager.IsEqualGenericType): Removed, use IsEqual() instead.
2672         (TypeManager.IsEqual): Call ourself recursively instead of using
2673         Type.IsEqual(). 
2674
2675 2004-10-11  Martin Baulig  <martin@ximian.com>
2676
2677         * class.cs (TypeContainer.DefineType): Only call TypeParameter.Define()
2678         on our own type parameters, not on the ones we inherit from a containing
2679         class.
2680
2681         * expression.cs (Invocation.InferType): Use `==', not `Equals()' for
2682         the comparision.
2683
2684         * generic.cs (TypeParameter.Define): We may only be called once.
2685
2686         * pending.cs (Pending.InterfaceMethod): Call TypeManager.Real_IsEqual()
2687         instead of TypeManager.IsEqual().
2688
2689 2004-09-28  Martin Baulig  <martin@ximian.com>
2690
2691         * generic.cs
2692         (GenericConstraints.EffectiveBaseClass): New public property.
2693         (TypeParameter.GenericConstraints): New public property.
2694         (ConstructedType.CheckConstraints): Improved.
2695
2696         * convert.cs (Convert.TypeParam_EffectiveBaseType): New private method.
2697         (Convert.TypeParameterConversion): New private method; use this in
2698         ImplicitReferenceConversion() and ImplicitReferenceConversionExists()
2699         for all conversions related to type parameters.
2700
2701 2004-09-24  Martin Baulig  <martin@ximian.com>
2702
2703         * convert.cs (Convert.ImplicitReferenceConversion): Added implicit
2704         type parameter conversions for type parameters which are known to
2705         be reference types.
2706
2707 2004-09-24  Martin Baulig  <martin@ximian.com>
2708
2709         * generic.cs (GenericConstraints): Added `IsReferenceType' and
2710         `IsValueType' properties.
2711
2712         * support.cs (ReflectionConstraints): Use
2713         Type.GetGenericParameterConstraints() instead of the old hack.
2714
2715 2004-09-24  Martin Baulig  <martin@ximian.com>
2716
2717         * generic.cs (GenericConstraints): Moved here and made it an
2718         abstract class.
2719
2720         * support.cs (GenericConstraints): Moved to generic.cs.
2721
2722 2004-09-24  Martin Baulig  <martin@ximian.com>
2723
2724         * support.cs
2725         (ReflectionConstraints): Un-nested this class and made it public.
2726
2727         * typemanager.cs
2728         (TypeManager.GetTypeParameterConstraints): New public method.
2729         (TypeManager.HasConstructorConstraint): Use the attributes.
2730
2731 2004-09-24  Martin Baulig  <martin@ximian.com>
2732
2733         * support.cs (GenericConstraints): Replaced `HasConstructor',
2734         `IsReferenceType' and `IsValueType' with `Attributes'.
2735         (ReflectionParameters.ReflectionConstraints): Removed the Create()
2736         method and made the .ctor public.
2737
2738         * generic.cs (Constraints.Attributes): New public property.
2739         (Constraints): Renamed `HasConstructor' -> `HasConstructorConstraint',
2740         `IsReferenceType' -> `HasReferenceTypeConstraint' and
2741         `IsValueType' -> `HasValueTypeConstraint'.
2742
2743 2004-09-23  Martin Baulig  <martin@ximian.com>
2744
2745         * generic.cs (Constraints): Reflect latest runtime changes.
2746
2747 2004-09-23  Martin Baulig  <martin@ximian.com>
2748
2749         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
2750         (Convert.ImplicitReferenceConversionExists): Likewise.
2751
2752 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
2753
2754         * class.cs (Operator.Define): Add error 448 and 559 report.
2755         
2756 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
2757
2758         * class.cs (MemberBase.IsTypePermitted): New protected
2759         method for checking error CS0610.
2760
2761 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
2762
2763         * class.cs (TypeContainer.HasExplicitLayout): New property
2764         Returns whether container has StructLayout attribute set Explicit.
2765         (FieldMember): New abstract class for consts and fields.
2766         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
2767         (Field): Reuse FieldMember.
2768
2769         * const.cs (Const): Reuse FieldMember.
2770
2771         * rootcontext.cs: EmitConstants call moved to class.
2772
2773 2004-09-22  Martin Baulig  <martin@ximian.com>
2774
2775         Marek and me just fixed one of our oldest bugs: #28562 :-)
2776
2777         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
2778
2779         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
2780         we're an EnumConstant, just return that.
2781         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
2782         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
2783         to get the value which'll actually be written into the attribute.
2784         However, we have to use GetValue() to access the attribute's value
2785         in the compiler.        
2786
2787 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
2788
2789         * constant.cs (Constant.IsNegative): New abstract property
2790         IsNegative.
2791
2792         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
2793         (StackAlloc.DoResolve): Reused IsNegative.
2794
2795 2004-09-22  Martin Baulig  <martin@ximian.com>
2796
2797         * typemanager.cs (TypeManager.LookupGenericTypeContainer): New
2798         public method; like LookupTypeContainer, but also works for
2799         generic instances.
2800
2801         * report.cs (Report.SymbolRelatedToPreviousError): Use
2802         TypeManager.LookupGenericTypeContainer().       
2803
2804 2004-09-22  Martin Baulig  <martin@ximian.com>
2805
2806         Thanks to Peter Sestoft for this bug report.
2807
2808         * expression.cs (Conditional): If both the `trueExpr' and the
2809         `falseExpr' is a NullLiteral, return a NullLiteral.
2810
2811 2004-09-22  Martin Baulig  <martin@ximian.com>
2812
2813         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
2814         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
2815         for the "get_Current" call.
2816
2817 2004-09-21  Martin Baulig  <martin@ximian.com>
2818
2819         * convert.cs (Convert.ImplicitReferenceConversion): When
2820         converting to an interface type, first check whether we're
2821         converting from a reference type.
2822
2823 2004-09-14  Martin Baulig  <martin@ximian.com>
2824
2825         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
2826
2827 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
2828
2829         Fixed bug #61902
2830         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
2831         called and is obsolete then this member suppress message
2832         when call is inside next [Obsolete] method or type.
2833
2834         * expression.cs: Use TestObsoleteMethodUsage member.
2835
2836 2004-09-14  Martin Baulig  <martin@ximian.com>
2837
2838         * genericparser.cs: Removed.
2839
2840 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
2841
2842         * class.cs (MethodCore.CheckBase): Fix bug #65757.
2843
2844 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
2845
2846         * attribute.cs (Attribute.Resolve): Add error 653 report.
2847
2848         * class.cs (Class.ApplyAttributeBuilder): Add error 641
2849         report.
2850         (Method.ApplyAttributeBuilder): Add error 685 report.
2851         (Operator.Define): Add error 564 report.
2852
2853         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
2854
2855         * expression.cs (Invocation.DoResolve): Add error
2856         245 and 250 report.
2857
2858         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
2859         error 674 report.
2860
2861 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
2862
2863         * class.cs (ConstructorInitializer.Resolve):
2864         Wrong error number (515->516).
2865
2866 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
2867
2868         * class.cs (Indexer.Define): Add error 631 report.
2869
2870 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
2871
2872         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
2873
2874 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
2875
2876         * expression.cs (Probe.DoResolve): Add error CS0241 report.
2877
2878 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
2879
2880         * cs-parser.jay: Added error CS0241 report.
2881
2882 2004-09-10  Raja R Harinath  <rharinath@novell.com>
2883
2884         * cs-parser.jay (fixed_statement): Introduce a scope for the
2885         declaration in the 'fixed' statement.
2886
2887 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
2888
2889         * cs-parser.jay: Added CS0230 error report.
2890
2891 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
2892
2893         * cs-parser.jay: Added errors CS0231 and CS0257 report.
2894
2895 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
2896
2897         * expression.cs (Argument.Resolve): Added error CS0192 and
2898         CS0199 report.
2899
2900 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
2901
2902         C# 2.0 #pragma warning feature
2903
2904         * cs-tokenizer.cs (PreProcessPragma): New method; 
2905         Handles #pragma directive.
2906
2907         * report.cs (WarningRegions): New class; Support
2908         class for #pragma warning directive. It tests whether
2909         warning is enabled for a given line.
2910
2911 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
2912
2913         * const.cs: Add more descriptive error report, tahnks to
2914         Sebastien. 
2915
2916 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
2917
2918         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
2919
2920 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
2921
2922         * expression.cs: Apply patch from Ben: Remove dead code from
2923         ArrayCreation, and remove the TurnintoConstant call in const.cs,
2924         as that code just threw an exception anwyays.
2925
2926         * const.cs: Remove the call to the turnintoconstant, for details
2927         see bug: #63144
2928         
2929         * literal.cs: The type of the null-literal is the null type;  So
2930         we use a placeholder type (literal.cs:System.Null, defined here)
2931         for it.
2932
2933         * expression.cs (Conditional.DoResolve): Remove some old code that
2934         is no longer needed, conversions have been fixed.
2935
2936         (ArrayCreationExpression.DoResolve): Return false if we fail to
2937         resolve the inner expression.
2938
2939 2004-09-07  Raja R Harinath  <rharinath@novell.com>
2940
2941         Fix test-290.cs.
2942         * cs-parser.jay (delegate_declaration): Record a delegate
2943         declaration as a type declaration.
2944         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
2945
2946 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
2947
2948         * parameter.cs: Do not crash if the type can not be resolved. 
2949
2950         * expression.cs: Report errors with unsafe pointers, fixes #64896
2951
2952 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
2953
2954         * expression.cs: Pointer arith always needs to do a conv.i
2955         if the operand is a long. fix 65320
2956
2957 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
2958
2959         Fixed cs0619-37.cs, cs0619-38.cs
2960
2961         * enum.cs (GetObsoleteAttribute): Removed.
2962
2963         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
2964         on Enum member is double staged. The first is tested member
2965         and then enum.
2966
2967 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
2968
2969         Fixed #56986, #63631, #65231
2970
2971         * class.cs: (TypeContainer.AddToMemberContainer): New method,
2972         adds member to name container.
2973         (TypeContainer.AddToTypeContainer): New method, adds type to
2974         name container.
2975         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
2976         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
2977         AddOperator): Simplified by reusing AddToMemberContainer.
2978         (TypeContainer.UserDefinedStaticConstructor): Changed to property
2979         instead of field.
2980         (Method.CheckForDuplications): Fixed implementation to test all
2981         possibilities.
2982         (MemberBase): Detection whether member is explicit interface
2983         implementation is now in constructor.
2984         (MemberBase.UpdateMemberName): Handles IndexerName.
2985         (Accessor): Changed to keep also location information.
2986         (AbstractPropertyEventMethod): Is derived from MemberCore.
2987         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
2988         will be emited or not.
2989         (PropertyBase.AreAccessorsDuplicateImplementation):
2990         Tests whether accessors are not in collision with some method.
2991         (Operator): Is derived from MethodCore to simplify common
2992         operations.
2993
2994         * decl.cs (Flags.TestMethodDuplication): Test for duplication
2995         must be performed.
2996         (DeclSpace.AddToContainer): Adds the member to defined_names
2997         table. It tests for duplications and enclosing name conflicts.
2998
2999         * enum.cs (EnumMember): Clean up to reuse the base structures
3000
3001 2004-09-03  Martin Baulig  <martin@ximian.com>
3002
3003         Merged latest changes into gmcs.  Please keep this comment in
3004         here, it makes it easier for me to see what changed in MCS since
3005         the last time I merged.
3006
3007 2004-09-03  Martin Baulig  <martin@ximian.com>
3008
3009         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
3010         into TypeContainer, to make partial classes work again.
3011
3012 2004-09-03  Martin Baulig  <martin@ximian.com>
3013
3014         * rootcontext.cs (RootContext.V2): Removed.
3015
3016 2004-03-23  Martin Baulig  <martin@ximian.com>
3017
3018         * expression.cs (Invocation.OverloadResolve): Added `bool
3019         may_fail' argument and use it instead of the Location.IsNull() hack.
3020
3021 2004-09-09  Martin Baulig  <martin@ximian.com>
3022
3023         * cs-parser.jay (namespace_declaration): Fixed CS0134 reporting.
3024
3025 2004-09-09  Martin Baulig  <martin@ximian.com>
3026
3027         * generic.cs (TypeParameter.DefineType): Added support for
3028         explicit interface methods.
3029
3030 2004-09-09  Martin Baulig  <martin@ximian.com>
3031
3032         * README.Changes: New document.  Started to list important changes
3033         between MCS and GMCS here.
3034
3035 2004-09-08  Martin Baulig  <martin@ximian.com>
3036
3037         * class.cs
3038         (TypeContainer.CheckRecursiveDefinition): New protected method.
3039         (TypeContainer.DefineType): Move the CS0146 check into
3040         CheckRecursiveDefinition().     
3041
3042 2004-09-06  Martin Baulig  <martin@ximian.com>
3043
3044         * generic.cs (ConstructedType.CheckConstraints): Allow builtin
3045         types for the constructor constraint.
3046
3047 2004-09-03  Martin Baulig  <martin@ximian.com>
3048
3049         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
3050         into TypeContainer, to make partial classes work again.
3051
3052 2004-09-03  Martin Baulig  <martin@ximian.com>
3053
3054         * rootcontext.cs (RootContext.V2): Removed.
3055
3056 2004-03-23  Martin Baulig  <martin@ximian.com>
3057
3058         * expression.cs (Invocation.OverloadResolve): Added `bool
3059         may_fail' argument and use it instead of the Location.IsNull() hack.
3060
3061 2004-09-03  Martin Baulig  <martin@ximian.com>
3062
3063         Merged latest changes into gmcs.  Please keep this comment in
3064         here, it makes it easier for me to see what changed in MCS since
3065         the last time I merged.
3066
3067 2004-09-03  Raja R Harinath  <rharinath@novell.com>
3068
3069         Fix #61128.
3070         * expression.cs (BetterConversion): Don't allow either conversion 
3071         to be null.  Remove redundant implicit conversion test when 'q ==
3072         null' -- when this function is invoked, we already know that the
3073         implicit conversion exists.
3074         (BetterFunction): Assume that 'best' is non-null.  Remove
3075         redundant reimplementation of IsApplicable when 'best' is null.
3076         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
3077         number of arguments.
3078         (IsAncestralType): Extract from OverloadResolve.
3079         (OverloadResolve): Make robust to the MethodGroupExpr being
3080         unsorted.  Implement all the logic of Section 14.5.5.1, and
3081         support overloading of methods from multiple applicable types.
3082         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
3083
3084         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
3085         (RealError, Warning): Append type of report to related symbol.
3086
3087 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
3088
3089         * enum.cs: Fixed CLS-Compliance checks for enum members.
3090         Error tests cs3008-8.cs, cs3014-8.cs
3091
3092 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
3093
3094         Fixed bug #62342, #63102
3095         * class.cs: ImplementIndexer uses member.IsExplicitImpl
3096         like ImplementMethod.
3097
3098 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
3099
3100         * attribute.cs (Attribute.GetAttributeArgumentExpression):
3101         Fixed bug #65170.
3102
3103 2004-09-02  Martin Baulig  <martin@ximian.com>
3104
3105         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
3106         TypeManager.GetArgumentTypes() rather than calling GetParameters()
3107         on the MethodBase.
3108
3109 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
3110
3111         C# 2.0 Static classes implemented
3112
3113         * class.cs (TypeContainer): instance_constructors,
3114         initialized_fields, initialized_static_fields,
3115         default_constructor, base_inteface_types are protected to be
3116         accessible from StaticClass.
3117         (TypeContainer.DefineDefaultConstructor): New virtual method
3118         for custom default constructor generating
3119         (StaticClass): New class to handle "Static classes" feature.
3120
3121         * cs-parser.jay: Handle static keyword on class like instance
3122         of StaticClass.
3123
3124         * driver.cs: Added "/langversion" command line switch with two
3125         options (iso-1, default).
3126
3127 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
3128
3129         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
3130
3131 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
3132
3133         * delegate.cs: Style.
3134
3135 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
3136
3137         * delegate.cs: Add seperate instance expr field for miguel.
3138
3139 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
3140
3141         * PointerArithmetic (Resolve): make sure we are not doing
3142         pointer arith on void*. Also, make sure we are resolved
3143         by not setting eclass until resolve.
3144
3145         All callers: Make sure that PointerArithmetic gets resolved.
3146
3147 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
3148
3149         * ArrayCreation (LookupType): If the type does not resolve 
3150         to an array, give an error.
3151
3152 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
3153
3154         * statement.cs (Try.Resolve): Fixed bug #64222
3155
3156 2004-08-27  Martin Baulig  <martin@ximian.com>
3157
3158         * class.cs
3159         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
3160         crash here.     
3161
3162 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
3163
3164         * ecore.cs (Constantify): Get underlying type via
3165         System.Enum.GetUnderlyingType to avoid StackOverflow on the
3166         Windows in special cases.
3167
3168 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
3169
3170         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
3171         for obtaining also private methods.
3172         (GetRemoveMethod): Used GetRemoveMethod (true)
3173         for obtaining also private methods.
3174
3175 2004-09-02  Martin Baulig  <martin@ximian.com>
3176
3177         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
3178         TypeManager.GetArgumentTypes() rather than calling GetParameters()
3179         on the MethodBase.
3180
3181 2004-08-27  Martin Baulig  <martin@ximian.com>
3182
3183         * class.cs
3184         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
3185         crash here.     
3186
3187 2004-08-25  Martin Baulig  <martin@ximian.com>
3188
3189         * support.cs (ReflectionParameters..ctor): If this is a generic
3190         method, retrieve and store its type parameters.
3191         (InternalParameters..ctor): Added `TypeParameter[]' argument.
3192         (ReflectionParameters.GenericConstraints): The argument specifies
3193         the type parameter, not the method parameter.
3194         (InternalParameters.GenericConstraints): Likewise.
3195
3196         * generic.cs (TypeParameter.DefineType): Correctly handle
3197         constraints wrt. generic methods in interfaces and their
3198         implementations.        
3199
3200 2004-08-24  Martin Baulig  <martin@ximian.com>
3201
3202         * generic.cs (TypeParameter.IsSubclassOf): New public method.
3203         (Constraints.IsSubclassOf): New internal method.
3204
3205         * typemanager.cs (TypeManager.FindMembers): Added special support
3206         for GenericTypeParameterBuilder's.      
3207         (TypeManager.IsSubclassOf, IsFamilyAccessible): Added support for
3208         type parameters.
3209
3210 2004-08-24  Martin Baulig  <martin@ximian.com>
3211
3212         * typemanager.cs
3213         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
3214         this for accessibility checks.
3215         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
3216         IsNestedFamilyAccessible.
3217         (TypeManager.IsSubclassOf): New method, do what the name actually
3218         says.   
3219
3220 2004-08-24  Martin Baulig  <martin@ximian.com>
3221
3222         * expression.cs (MemberAccess.DoResolve): When resolving ourselves
3223         as a SimpleName, include the generic arity.
3224
3225 2004-08-24  Martin Baulig  <martin@ximian.com>
3226
3227         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
3228         MethodAttributes.HideBySig for operators.
3229
3230 2004-08-23  Martin Baulig  <martin@ximian.com>
3231
3232         Back to the old error reporting system :-)
3233
3234         * report.cs (Message): Removed.
3235         (Report.MessageData, ErrorData, WarningData): Removed.
3236         (Report.Error, Warning): Back to the old system.
3237
3238 2004-08-23  Martin Baulig  <martin@ximian.com>
3239
3240         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
3241
3242         * class.cs (TypeContainer.ParentContainer): New public virtual
3243         method; replaces the explicit interface implementation.
3244         (ClassPart.ParentContainer): Override.
3245
3246 2004-08-23  Martin Baulig  <martin@ximian.com>
3247
3248         * statement.cs (Switch): Added support for constant switches; see
3249         #59428 or test-285.cs.
3250
3251 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
3252
3253         Fixed bug #62740.
3254         * statement.cs (GetEnumeratorFilter): Removed useless
3255         logic because C# specs is strict. GetEnumerator must be
3256         public.
3257
3258 2004-08-22  Martin Baulig  <martin@ximian.com>
3259
3260         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
3261         a switch and may break, reset the barrier.  Fixes #59867.
3262
3263 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
3264
3265         CLS-Compliance speed up (~5% for corlib)
3266
3267         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
3268         New method. Tests container for CLS-Compliant names
3269
3270         * class.cs (TypeContainer.VerifyClsName): New method.
3271         Checks whether container name is CLS Compliant.
3272         (Constructor): Implements IMethodData.
3273
3274         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
3275         low-case table for CLS Compliance test.
3276         (MemberCache.VerifyClsParameterConflict): New method.
3277         Checks method parameters for CS3006 error.
3278
3279         * enum.cs (EnumMember): Is derived from MemberCore.
3280         (Enum.VerifyClsName): Optimized for better performance.
3281
3282 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
3283
3284         * report.cs: Renamed Error_T to Error and changed all
3285         references.
3286
3287 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
3288
3289         * class.cs (TypeContainer.IndexerArrayList): New inner class
3290         container for indexers.
3291         (TypeContainer.DefaultIndexerName): New constant for default
3292         indexer name. Replaced all "Item" with this constant.
3293         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
3294
3295         * typemanager.cs (TypeManager.default_member_ctor): Cache here
3296         DefaultMemberAttribute constructor.
3297
3298 2004-08-05  Martin Baulig  <martin@ximian.com>
3299
3300         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
3301         Fix bug #59429.
3302
3303 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
3304
3305         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
3306         multi platforms problem.
3307
3308         * compiler.csproj: Included shared files.
3309
3310 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
3311
3312         Fix bug 60333, 55971 in the more general way
3313         * attribute.cs (Attribute.GetAttributeArgumentExpression):
3314         Added arg_type argument for constant conversion.
3315         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
3316
3317 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
3318
3319         Fix bug #59760
3320         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
3321         OperatorArrayList, MethodCoreArrayList for typecontainer
3322         containers. Changed class member types to these new types.
3323         (MethodArrayList.DefineMembers): Added test for CS0659.
3324
3325 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
3326
3327         * cfold.cs: Synchronize the folding with the code in expression.cs
3328         Binary.DoNumericPromotions for uint operands.
3329
3330         * attribute.cs: Revert patch from Raja, it introduced a regression
3331         while building Blam-1.2.1 (hard to isolate a test case).
3332
3333 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
3334
3335         Fix for #55382
3336         * class.cs:
3337         (TypeContainer.Define): Renamed to DefineContainerMembers because of
3338         name collision.
3339         (MethodCore.parent_method): New member. The method we're overriding
3340         if this is an override method.
3341         (MethodCore.CheckBase): Moved from Method class and made common.
3342         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
3343         private.
3344         (MethodCore.CheckForDuplications): New abstract method. For custom
3345         member duplication search in a container
3346         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
3347         method and its return type.
3348         (Event.conflict_symbol): New member. Symbol with same name in the
3349         parent class.
3350
3351         * decl.cs:
3352         (MemberCache.FindMemberWithSameName): New method. The method
3353         is looking for conflict with inherited symbols.
3354
3355 2004-08-04  Martin Baulig  <martin@ximian.com>
3356
3357         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
3358
3359         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
3360
3361 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
3362
3363         * report.cs (Message): New enum for better error, warning reference in
3364         the code.
3365         (MessageData): New inner abstract class. It generally handles printing of
3366         error and warning messages.
3367         Removed unused Error, Warning, Message methods.
3368
3369 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
3370
3371         Fix for cs0592-8.cs test
3372         * attribute.cs
3373         (Attributable.ValidAttributeTargets): Made public.
3374         (Attribute.ExplicitTarget): New member for explicit target value.
3375         (Attribute.CheckTargets): Now we translate explicit attribute
3376         target to Target here.
3377
3378 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
3379
3380         * ecore.cs (MethodGroupExpr): new IsBase property.
3381
3382         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
3383
3384         * delegate.cs (DelegateCreation): store a MethodGroupExpr
3385         rather than an instance expr.
3386
3387         (DelegateCreation.Emit): Use the method group rather than
3388         the instance expression. Also, if you have base.Foo as the
3389         method for a delegate, make sure to emit ldftn, not ldftnvirt.
3390
3391         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
3392
3393         (NewDelegate.DoResolve): Only check for the existance of Invoke
3394         if the method is going to be needed. Use MethodGroupExpr.
3395
3396         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
3397
3398         * expression.cs: For pointer arith., make sure to use
3399         the size of the type, not the size of the pointer to
3400         the type.
3401
3402 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
3403
3404         Fix for #60722
3405         * class.cs (Class): Added error CS0502 test.
3406
3407 2004-08-03  John Luke  <jluke@cfl.rr.com>
3408             Raja R Harinath  <rharinath@novell.com>
3409
3410         Fix for #60997.
3411         * attribute.cs (Attribute.complained_before): New flag.
3412         (Attribute.ResolveType, Attribute.Resolve),
3413         (Attribute.DefinePInvokeMethod): Set it.
3414         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
3415         
3416 2004-08-03  Martin Baulig  <martin@ximian.com>
3417
3418         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
3419         use a user-defined operator; we still need to do numeric
3420         promotions in case one argument is a builtin type and the other
3421         one has an implicit conversion to that type.  Fixes #62322.
3422
3423 2004-08-18  Martin Baulig  <martin@ximian.com>
3424
3425         * class.cs (Method.Define): Use the correct method name when
3426         creating the MethodBuilder for a generic method.
3427
3428 2004-08-17  Martin Baulig  <martin@ximian.com>
3429
3430         * generic.cs (Constraints): Support type parameter constraints.
3431
3432 2004-08-16  Martin Baulig  <martin@ximian.com>
3433
3434         * cs-tokenizer.cs (Tokenizer.TypeOfParsing): New public property.
3435         (Token.GENERIC_DIMENSION): New token; this is returned if we
3436         encounter an unbound generic type in a typeof() expression.
3437
3438         * cs-parser.jay (opt_type_argument_list): Added GENERIC_DIMENSION;
3439         this token is only generated while parsing a typeof() expression.
3440         (typeof_expression): Removed the old unbound_type hack.
3441
3442         * generic.cs (TypeArguments.IsUnbound): New public property.
3443
3444         * decl.cs (MemberName): Added support for unbound types.
3445
3446 2004-08-14  Martin Baulig  <martin@ximian.com>
3447
3448         * typemanager.cs
3449         (TypeManager.IsEqualGenericInstance): New static method.
3450         (TypeManager.IsSubclassOrNestedChildOf, IsSubclassOf): This is
3451         just used to check accessibility, so follow the rules of 26.1.6.        
3452
3453         * expression.cs (MemberAccess.ResolveAsTypeStep): Return a
3454         ConstructedType instead of a TypeExpression if we have type arguments.
3455
3456         * cs-parser.jay (typeof_expression): Support unbound generic types.
3457
3458         * ecore.cs (UnboundTypeExpression): New public class.
3459
3460 2004-08-12  Martin Baulig  <martin@ximian.com>
3461
3462         * typemanager.cs (TypeManager.IsNestedChildOf): Use
3463         TypeManager.IsEqual() rather than `=='.
3464
3465         * decl.cs (DeclSpace.CheckAccessLevel): Use `tb.FullName' for
3466         generic instances as well.
3467
3468 2004-08-12  Martin Baulig  <martin@ximian.com>
3469
3470         * expression.cs (Invocation.InferType): We can only infer method
3471         type parameters.  Fixes #62647.
3472
3473 2004-08-11  Martin Baulig  <martin@ximian.com>
3474
3475         * class.cs (TypeContainer.DefineType): Create the TypeBuilder
3476         before resolving the base classes.
3477
3478 2004-08-06 Gonzalo Paniagua Javier <gonzalo@ximian.com>
3479
3480         * Makefile: install .mdb file too.
3481
3482 2004-08-05  Martin Baulig  <martin@ximian.com>
3483
3484         * ecore.cs (FieldExpr.DoResolveLValue): If we're resolving a field
3485         initializer, the current type is just the TypeBuilder, not the
3486         instantiated generic type.
3487         (FieldExpr.IsFieldInitializer): New public property.
3488
3489 2004-08-04  Martin Baulig  <martin@ximian.com>
3490
3491         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
3492
3493         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
3494
3495 2004-08-03  Martin Baulig  <martin@ximian.com>
3496
3497         * class.cs (MethodData.Define): If we're an explicit
3498         implementation, remove the generic arity from the type name.
3499
3500 2004-08-03  Martin Baulig  <martin@ximian.com>
3501
3502         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
3503         use a user-defined operator; we still need to do numeric
3504         promotions in case one argument is a builtin type and the other
3505         one has an implicit conversion to that type.  Fixes #62322.
3506
3507 2004-08-02  Martin Baulig  <martin@ximian.com>
3508
3509         * class.cs (TypeContainer.ifaces): Make this a `Type[]', not a
3510         `TypeExpr[]' array.
3511         (TypeContainer.GetClassBases): Return the unexpanded list of
3512         interfaces; we expand them later.
3513         (TypeContainer.DefineType): After creating the TypeBuilder, call
3514         TypeManager.ExpandInterfaces() to get an expanded and resolved
3515         list of interfaces.
3516
3517         * ecore.cs (TypeExpr.GetInterfaces): Removed
3518
3519         * generics.cs (Constraints.InterfaceConstraints): Remove.
3520         (TypeParameter.DefineType): Call TypeManager.RegisterBuilder() to
3521         register the interface constraints.
3522
3523         * typemanager.cs
3524         (TypeManager.AddUserType): Removed the `ifaces' argument.
3525         (TypeManager.AddTypeParameter): Likewise.
3526         (TypeManager.AddUserInterface): Removed, was unused.
3527         (TypeManager.RegisterBuilder): Take a `Type[]' instead of a
3528         `TypeExpr[]' array for the interfaces.
3529         (TypeManager.ExpandInterfaces): Call this after the TypeBuilder
3530         has been defined, returns a list of the resolved interfaces types.
3531         (TypeManager.GetInterfaces): Return a `Type[]', not a `TypeExpr[]'.
3532         (TypeManager.GetExplicitInterfaces): Likewise.  
3533
3534 2004-08-02  Martin Baulig  <martin@ximian.com>
3535
3536         * expression.cs (Invocation.EmitCall): If we're invoking a method
3537         on a type parameter, use the new `Constrained' prefix opcode.
3538
3539 2004-08-02  Martin Baulig  <martin@ximian.com>
3540
3541         * statement.cs (LocalInfo.Flags): Added `IsThis'.
3542         (LocalInfo.IsThis): New public property.
3543         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
3544
3545 2004-08-01  Martin Baulig  <martin@ximian.com>
3546
3547         * class.cs (TypeContainer.GetClassBases): Don't set the default
3548         here since we may get called from GetPartialBases().
3549         (TypeContainer.DefineType): If GetClassBases() didn't return a
3550         parent, use the default one.
3551
3552 2004-07-30  Martin Baulig  <martin@ximian.com>
3553
3554         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
3555
3556         * class.cs (SourceMethod): New public class, derive from the
3557         symbol writer's ISourceMethod.
3558         (Method): Use the new symbol writer API.
3559
3560         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
3561         as argument and use the new symbol writer.
3562
3563         * location.cs
3564         (SourceFile): Implement the symbol writer's ISourceFile.
3565         (Location.SymbolDocument): Removed.
3566         (Location.SourceFile): New public property.
3567
3568         * symbolwriter.cs: Use the new symbol writer API.
3569
3570 2004-07-30  Raja R Harinath  <rharinath@novell.com>
3571
3572         * Makefile (install-local): Remove.  Functionality moved to
3573         executable.make.
3574
3575 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
3576
3577         * Makefile: Install mcs.exe.config file together with mcs.exe.
3578         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
3579         correct runtime version.
3580         
3581 2004-07-25  Martin Baulig  <martin@ximian.com>
3582
3583         * class.cs
3584         (TypeContainer.RegisterOrder): Removed, this was unused.
3585         (TypeContainer, interface_order): Removed.
3586         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
3587         TypeContainer as argument since we can also be called with a
3588         `PartialContainer' for a partial class/struct/interface.
3589         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
3590         of checking whether we're an `Interface' - we could be a
3591         `PartialContainer'.
3592         (PartialContainer.Register): Override; call
3593         AddClass()/AddStruct()/AddInterface() on our parent.
3594
3595         * cs-parser.jay (interface_member_declaration): Add things to the
3596         `current_container', not the `current_class'.
3597
3598         * rootcontext.cs (RegisterOrder): The overloaded version which
3599         takes an `Interface' was unused, removed.
3600
3601         * typemanager.cs (TypeManager.LookupInterface): Return a
3602         `TypeContainer', not an `Interface'.
3603         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
3604         contain a `PartialContainer' for an interface, so check it's
3605         `Kind' to figure out what it is.
3606
3607 2004-07-25  Martin Baulig  <martin@ximian.com>
3608
3609         * class.cs (Class.DefaultTypeAttributes): New public constant.
3610         (Struct.DefaultTypeAttributes): Likewise.
3611         (Interface.DefaultTypeAttributes): Likewise.
3612         (PartialContainer.TypeAttr): Override this and add the
3613         DefaultTypeAttributes.
3614
3615 2004-07-25  Martin Baulig  <martin@ximian.com>
3616
3617         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
3618         we can just use the `Parent' field instead.
3619
3620 2004-07-25  Martin Baulig  <martin@ximian.com>
3621
3622         * class.cs (TypeContainer.Emit): Renamed to EmitType().
3623
3624 2004-07-25  Martin Baulig  <martin@ximian.com>
3625
3626         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
3627         our parts before defining any methods.
3628         (TypeContainer.VerifyImplements): Make this virtual.
3629         (ClassPart.VerifyImplements): Override and call VerifyImplements()
3630         on our PartialContainer.
3631
3632 2004-07-25  Martin Baulig  <martin@ximian.com>
3633
3634         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
3635
3636         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
3637         argument, we can just use the `Parent' field instead.
3638
3639         * class.cs
3640         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
3641         (MemberBase.DoDefine): Likewise.
3642
3643 2004-07-24  Martin Baulig  <martin@ximian.com>
3644
3645         * decl.cs (MemberCore.Parent): New public field.
3646         (DeclSpace.Parent): Moved to MemberCore.
3647
3648         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
3649         (MemberBase.ctor): Added TypeContainer argument, pass it to our
3650         parent's .ctor.
3651         (FieldBase, Field, Operator): Likewise.
3652         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
3653         (EventField, Event): Likewise.
3654
3655 2004-07-23  Martin Baulig  <martin@ximian.com>
3656
3657         * class.cs (PartialContainer): New public class.
3658         (ClassPart): New public class.
3659         (TypeContainer): Added support for partial classes.
3660         (TypeContainer.GetClassBases): Splitted some of the functionality
3661         out into GetNormalBases() and GetPartialBases().
3662
3663         * cs-tokenizer.cs (Token.PARTIAL): New token.
3664         (Tokenizer.consume_identifier): Added some hacks to recognize
3665         `partial', but only if it's immediately followed by `class',
3666         `struct' or `interface'.
3667
3668         * cs-parser.jay: Added support for partial clases.
3669
3670 2004-07-23  Martin Baulig  <martin@ximian.com>
3671
3672         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
3673         a `DeclSpace' and also made it readonly.
3674         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
3675         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
3676         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
3677
3678         * cs-parser.jay: Pass the `current_class', not the
3679         `current_container' (at the moment, this is still the same thing)
3680         to a new Method, Property, Event, Indexer or Constructor.
3681
3682 2004-07-23  Martin Baulig  <martin@ximian.com>
3683
3684         * cs-parser.jay (CSharpParser): Added a new `current_class' field
3685         and removed the `current_interface' one.
3686         (struct_declaration, class_declaration, interface_declaration):
3687         Set `current_class' to the newly created class/struct/interface;
3688         set their `Bases' and call Register() before parsing their body.
3689
3690 2004-07-23  Martin Baulig  <martin@ximian.com>
3691
3692         * class.cs (Kind): New public enum.
3693         (TypeContainer): Made this class abstract.
3694         (TypeContainer.Kind): New public readonly field.
3695         (TypeContainer.CheckDef): New public method; moved here from
3696         cs-parser.jay.
3697         (TypeContainer.Register): New public abstract method.
3698         (TypeContainer.GetPendingImplementations): New public abstract
3699         method.
3700         (TypeContainer.GetClassBases): Removed the `is_class' and
3701         `is_iface' parameters.
3702         (TypeContainer.DefineNestedTypes): Formerly known as
3703         DoDefineType().
3704         (ClassOrStruct): Made this class abstract.
3705
3706         * tree.cs (RootTypes): New public type. 
3707
3708 2004-07-20  Martin Baulig  <martin@ximian.com>
3709
3710         * tree.cs (Tree.RecordNamespace): Removed.
3711         (Tree.Namespaces): Removed.
3712
3713         * rootcontext.cs (RootContext.IsNamespace): Removed.
3714
3715         * cs-parser.jay (namespace_declaration): Just create a new
3716         NamespaceEntry here.
3717
3718 2004-07-21  Lluis Sanchez Gual  <lluis@novell.com>
3719
3720         * Makefile: Install gmcs.exe.config file together with gmcs.exe.
3721         * gmcs.exe.config: Renamed from mcs.exe.config. Added supportedRuntime
3722         entry to make sure it runs in the correct runtime version.
3723         
3724 2004-07-18  Martin Baulig  <martin@ximian.com>
3725
3726         * generic.cs (ConstructedType.CheckConstraints): Improved
3727         constraints checking.
3728
3729 2004-07-18  Martin Baulig  <martin@ximian.com>
3730
3731         * expression.cs (Invocation.BetterMethod): Call
3732         TypeManager.TypeToCoreType() on all types and removed my previous
3733         hack; we're already doig the right thing here.
3734
3735 2004-07-17  Martin Baulig  <martin@ximian.com>
3736
3737         * decl.cs (MemberName.MakeName): Create the "class`1" names here.
3738
3739 2004-07-16  Martin Baulig  <martin@ximian.com>
3740
3741         * iterators.cs: Added generics support.
3742
3743 2004-07-16  Martin Baulig  <martin@ximian.com>
3744
3745         * iterators.cs: Rewrote this.  We're now using one single Proxy
3746         class for both the IEnumerable and the IEnumerator interface and
3747         `Iterator' derives from Class so we can use the high-level API.
3748
3749         * class.cs (TypeContainer.AddIterator): New method.
3750         (TypeContainer.DoDefineType): New protected virtual method, which
3751         is called from DefineType().
3752         (TypeContainer.DoDefineMembers): Call DefineType() and
3753         DefineMembers() on all our iterators.
3754         (TypeContainer.Emit): Call Emit() on all our iterators.
3755         (TypeContainer.CloseType): Call CloseType() on all our iterators.
3756
3757         * codegen.cs (EmitContext.CurrentIterator): New public field.
3758
3759 2004-07-15  Martin Baulig  <martin@ximian.com>
3760
3761         * typemanager.cs
3762         (TypeManager.not_supported_exception_type): New type.   
3763
3764 2004-07-14  Martin Baulig  <martin@ximian.com>
3765
3766         * typemanager.cs
3767         (TypeManager.generic_ienumerable_type): New type.
3768         (TypeManager.generic_ienumerator_type): New type.
3769
3770         * rootcontext.cs
3771         (RootContext.interfaces_first_stage): Added
3772         "System.Collections.Generic.IEnumerator`1" and
3773         "System.Collections.Generic.IEnumerable`1".     
3774
3775 2004-07-14  Martin Baulig  <martin@ximian.com>
3776
3777         * iterators.cs: Use real error numbers.
3778
3779 2004-07-14  Martin Baulig  <martin@ximian.com>
3780
3781         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
3782         requires this to be a System.Collection.IEnumerable and not a
3783         class implementing that interface.
3784         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
3785
3786 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
3787
3788         * class.cs: Fixed previous fix, it broke some error tests.
3789
3790 2004-07-12  Martin Baulig  <martin@ximian.com>
3791
3792         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
3793         Fixes #61293.
3794
3795 2004-07-14  Martin Baulig  <martin@ximian.com>
3796
3797         * decl.cs, expression.cs, generic.cs: Use a backqoute (`) and not
3798         an exclamation mark (!) for the generic arity to reflect the
3799         latest spec changes; ie. use "System.Collections.Generic.IList`1".
3800
3801 2004-07-13  Martin Baulig  <martin@ximian.com>
3802
3803         * cs-tokenizer.cs (Tokenizer.parse_less_than): Allow array rank
3804         specifiers being part of a type argument.
3805
3806 2004-07-13  Martin Baulig  <martin@ximian.com>
3807
3808         * expression.cs (MemberAccess.ResolveAsTypeStep): Use the full `!'
3809         name for generic types.
3810
3811 2004-07-13  Martin Baulig  <martin@ximian.com>
3812
3813         * assign.cs (Assign.DoResolve): Moved the CS0131 check up a little
3814         bit to fix #60119.
3815
3816 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
3817
3818         * assign.cs (LocalTemporary): Add new argument: is_address,If
3819         `is_address' is true, then the value that we store is the address
3820         to the real value, and not the value itself.
3821         
3822         * ecore.cs (PropertyExpr): use the new local temporary
3823         stuff to allow us to handle X.Y += z (where X is a struct)
3824
3825 2004-07-08  Martin Baulig  <martin@ximian.com>
3826
3827         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
3828         not always return, just like we're doing in Using.Resolve().
3829
3830 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
3831
3832         * cs-parser.jay (fixed_statement): flag this as Pinned.
3833
3834 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
3835
3836         * typemanager.cs (TypeManager): Removed MakePinned method, this
3837         mechanism is replaced with the .NET 2.x compatible mechanism of
3838         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
3839
3840         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
3841         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
3842         `IsFixed' property which has a different meaning.
3843
3844 2004-07-02  Raja R Harinath  <rharinath@novell.com>
3845
3846         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
3847         visible from inside a nested class, not just the names of the
3848         immediately enclosing class.
3849         Fix for bug #60730.
3850
3851 2004-06-24  Raja R Harinath  <rharinath@novell.com>
3852
3853         * expression.cs (BetterConversion): Remove buggy special-case
3854         handling of "implicit constant expression conversions".  At this
3855         point, we already know that the conversion is possible -- we're
3856         only checking to see which is better.
3857
3858 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
3859
3860         * cs-parser.jay: Added error CS0210 test.
3861
3862 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
3863
3864         * cs-parser.jay: Added error CS0134 test.
3865
3866 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
3867
3868         Fix bug #52507
3869         * cs-parser.jay: Added error CS0145 test.
3870
3871 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
3872
3873         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
3874
3875 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
3876         
3877         * expression.cs (StackAlloc.Resolve): The argument may not
3878         be a constant; deal with this case.
3879         
3880 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
3881
3882         * attribute.cs (IndexerName_GetIndexerName): Renamed to
3883         GetIndexerAttributeValue.
3884         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
3885
3886         * class.cs (Indexer.Define): Added error tests for CS0415,
3887         CS0609.
3888
3889 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
3890
3891         * attribute.cs (Attribute.Resolve): Keep field code in sync with
3892         property code.
3893
3894 2004-06-23  Martin Baulig  <martin@ximian.com>
3895
3896         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
3897         neither return nor throw, reset the barrier as well.  Fixes #60457.
3898
3899 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
3900
3901         * class.cs : EventAttributes is now set to None by default.
3902           This fixes bug #60459.
3903
3904 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
3905
3906         Fix bug #60219
3907         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
3908         Don't throw exception but return null (it's sufficient now).
3909
3910 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
3911
3912         * typemanager.cs (GetArgumentTypes): Faster implementation.
3913
3914 2004-06-18  Martin Baulig  <martin@ximian.com>
3915
3916         * attribute.cs (Attribute.Resolve): Check whether we're an
3917         EmptyCast which a Constant child.  Fixes #60333.
3918
3919 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
3920
3921         * statement.cs (EmitCollectionForeach): Account for the fact that
3922         not all valuetypes are in areas which we can take the address of.
3923         For these variables, we store to a temporary variable. Also, make
3924         sure that we dont emit a `callvirt' on a valuetype method.
3925
3926 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
3927
3928         * expression.cs (StackAlloc.DoReSolve): Added test for
3929         negative parameter (CS0247).
3930
3931 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
3932
3933         Fix bug #59792
3934         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
3935
3936 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
3937
3938         Fix bug #59781
3939         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
3940         ulong.
3941
3942 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
3943
3944         Fix bug #58254 & cs1555.cs, cs1556.cs
3945         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
3946
3947 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
3948
3949         * cs-parser.jay: Added error CS1669 test for indexers.
3950
3951 2004-06-18  Martin Baulig  <martin@ximian.com>
3952
3953         * generics.cs (GenericMethod.ctor): Don't take an Attributes
3954         argument.  Fixes #60441.
3955
3956 2004-06-16  Ben Maurer  <bmaurer@ximian.com>
3957         * ecore.cs (MethodGroupExpr.Name): Revert Martin's patch.
3958         The name needs to have the actual name of the method in order
3959         for other tests (such as the one in OverloadResolve for Invoke
3960         on a delegate) to work. As well, it does not really help
3961         error reporting because the method group had multiple methods.
3962         * Makefile: Remove MCS_DEBUG, you can enable with the DEBUG_FLAGS.
3963         Make profiling work.
3964         
3965 2004-06-13  Martin Baulig  <martin@ximian.com>
3966
3967         * cs-parser.jay: Don't allow generic attributes.
3968
3969 2004-06-13  Martin Baulig  <martin@ximian.com>
3970
3971         * class.cs (MemberBase.DoDefineBase): New protected method.
3972         (MemberBase.DoDefine): Compute the `flags' in the new
3973         DoDefineBase() which must be called first.
3974         (Method.Define): Call DoDefineBase() first so we have the flags
3975         when defining the generic method.
3976
3977         * cs-parser.jay (interface_method_declaration): Support generic methods.
3978
3979 2004-06-13  Martin Baulig  <martin@ximian.com>
3980
3981         * decl.cs (TypeName): Removed.
3982         (MemberName): Removed TypeName and MemberNow; now we just have
3983         MemberName.
3984
3985         * cs-parser.jay: Don't distinguish between type arguments and type
3986         parameters in the grammar and simplified the rules a bit.  The
3987         reduce/reduce conflicts are now gone (except the one we inherited
3988         from mcs).
3989
3990 2004-06-11  Martin Baulig  <martin@ximian.com>
3991
3992         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
3993         call this twice: for params and varargs methods.
3994
3995 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
3996
3997         * class.cs:
3998         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
3999
4000 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
4001
4002         * attribute.cs (Attribute.GetValidTargets): Made public.
4003
4004         * class.cs: 
4005         (AbstractPropertyEventMethod): New class for better code sharing.
4006         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
4007         CS1667 report.
4008         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
4009
4010 2004-06-09  Martin Baulig  <martin@ximian.com>
4011
4012         * cs-parser.jay: Removed a reduce/reduce conflict.
4013
4014 2004-06-03  Martin Baulig  <martin@ximian.com>
4015
4016         * generic.cs (ConstructedType.GetMemberAccess): Renamed to
4017         GetSimpleName() and return a SimpleName.
4018
4019         * ecore.cs (SimpleName.Arguments): New public field.
4020         (SimpleName): Added overloaded ctor which takes an additional
4021         TypeArguments argument.
4022         (SimpleName.SimpleNameResolve): Added support for generic methods.
4023         (MethodGroupExpr.ResolveGeneric): New public method.  The code was
4024         formerly in MemberAccess.DoResolve(), but we also need it in
4025         SimpleNameResolve().
4026
4027         * expression.cs (MemberAccess.DoResolve): Use the new
4028         MethodGroupExpr.ResolveGeneric().       
4029
4030 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
4031
4032         * decl.cs: If possible, use lookuptypedirect here. We can only do
4033         this if there is no `.' after the namespace. Avoids using
4034         LookupType, which does lots of slow processing.
4035         (FindNestedType) New method, does what it says :-).
4036         * namespace.cs: use LookupTypeDirect.
4037         * rootcontext.cs: use membercache, if possible.
4038         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
4039
4040 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
4041
4042         * expression.cs:
4043         According to the spec, 
4044
4045         In a member access of the form E.I, if E is a single identifier,
4046         and if the meaning of E as a simple-name (§7.5.2) is a constant,
4047         field, property, localvariable, or parameter with the same type as
4048         the meaning of E as a type-name (§3.8), then both possible
4049         meanings of E are permitted.
4050
4051         We did not check that E as a simple-name had the same type as E as
4052         a type name.
4053
4054         This trivial check gives us 5-7% on bootstrap time.
4055
4056 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
4057
4058         * expression.cs (Invocation.OverloadResolve): Avoid the
4059         use of hashtables and boxing here by allocating on demand.
4060
4061 2004-05-30  Martin Baulig  <martin@ximian.com>
4062
4063         * rootcontext.cs (RootContext.LookupType): Don't cache things if
4064         we're doing a silent lookup.  Don't try to lookup nested types in
4065         TypeManager.object_type (thanks to Ben Maurer).
4066
4067 2004-05-30  Martin Baulig  <martin@ximian.com>
4068
4069         Committing a patch from Ben Maurer.
4070
4071         * rootcontext.cs (RootContext.LookupType): Cache negative results.
4072
4073 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
4074
4075         * convert.cs: add a trivial cache for overload operator resolution.
4076
4077 2004-05-31  Marek Safar  <marek.safar@seznam.cz>
4078
4079         * attribute.cs
4080         (AttributeTester.GetObsoleteAttribute): Returns instance of
4081         ObsoleteAttribute when type is obsolete.
4082
4083         * class.cs
4084         (TypeContainer.VerifyObsoleteAttribute): Override.
4085         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
4086         (MethodCode.VerifyObsoleteAttribute): Override.
4087         (MemberBase.VerifyObsoleteAttribute): Override.
4088
4089         * decl.cs
4090         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
4091         and report proper error.
4092
4093         *delegate.cs
4094         (Delegate.VerifyObsoleteAttribute): Override.
4095
4096         * ecore.cs
4097         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
4098         and report proper error.
4099         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
4100
4101         * enum.cs
4102         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
4103         and enum member.
4104
4105         * expression.cs
4106         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
4107         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
4108         Added test for ObsoleteAttribute.
4109
4110         * statement.cs
4111         (Catch): Derived from Statement.
4112
4113 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
4114
4115         * decl.cs: If possible, use lookuptypedirect here. We can only do
4116         this if there is no `.' after the namespace. Avoids using
4117         LookupType, which does lots of slow processing.
4118         (FindNestedType) New method, does what it says :-).
4119         * namespace.cs: use LookupTypeDirect.
4120         * rootcontext.cs: use membercache, if possible.
4121         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
4122
4123 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
4124
4125         * expression.cs:
4126         According to the spec, 
4127
4128         In a member access of the form E.I, if E is a single identifier,
4129         and if the meaning of E as a simple-name (§7.5.2) is a constant,
4130         field, property, localvariable, or parameter with the same type as
4131         the meaning of E as a type-name (§3.8), then both possible
4132         meanings of E are permitted.
4133
4134         We did not check that E as a simple-name had the same type as E as
4135         a type name.
4136
4137         This trivial check gives us 5-7% on bootstrap time.
4138
4139 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
4140
4141         Fixed bug #59071 & cs0160.cs
4142         * statement.cs (Try.Resolve): Check here whether order of catch
4143         clauses matches their dependencies.
4144
4145 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
4146
4147         Fixed bug #58624
4148         * ecore.cs (SimpleName.SimpleNameResolve): Added test for
4149         unsafe type.
4150
4151 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
4152
4153         * expression.cs (Invocation.OverloadResolve): Avoid the
4154         use of hashtables and boxing here by allocating on demand.
4155
4156 2004-05-30  Martin Baulig  <martin@ximian.com>
4157
4158         * rootcontext.cs (RootContext.LookupType): Don't cache things if
4159         we're doing a silent lookup.  Don't try to lookup nested types in
4160         TypeManager.object_type (thanks to Ben Maurer).
4161
4162 2004-05-30  Martin Baulig  <martin@ximian.com>
4163
4164         Committing a patch from Ben Maurer.
4165
4166         * rootcontext.cs (RootContext.LookupType): Cache negative results.      
4167
4168 2004-05-29  Martin Baulig  <martin@ximian.com>
4169
4170         * class.cs (IMethodData.ShouldIgnore): New method.
4171
4172         * typemanager.cs (TypeManager.MethodFlags): Don't take a
4173         `Location' argument, we don't need it anywhere.  Use
4174         `IMethodData.ShouldIgnore ()' instead of
4175         `MethodData.GetMethodFlags ()'.
4176         (TypeManager.AddMethod): Removed.
4177         (TypeManager.AddMethod2): Renamed to AddMethod.
4178
4179 2004-05-29  Martin Baulig  <martin@ximian.com>
4180
4181         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
4182
4183         * convert.cs (Convert.ImplicitReferenceConversion): If we're
4184         converting from a class type S to an interface type and we already
4185         have an object on the stack, don't box it again.  Fixes #52578.
4186
4187 2004-05-29  Martin Baulig  <martin@ximian.com>
4188
4189         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
4190         Added support for `params' parameters.  Fixes #59267.
4191
4192 2004-05-29  Martin Baulig  <martin@ximian.com>
4193
4194         * literal.cs (NullPointer): Provide a private .ctor which sets
4195         `type' to TypeManager.object_type.  Fixes #59048.
4196
4197 2004-05-29  Martin Baulig  <martin@ximian.com>
4198
4199         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
4200         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
4201
4202         * ecore.cs (EventExpr.instance_expr): Make the field private.
4203
4204 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
4205
4206         Fixed bug #50080 & cs0214-2.cs
4207         * expression.cs (Cast.DoResolve): Check unsafe context here.
4208         
4209         * statement.cs (Resolve.DoResolve): Likewise.
4210
4211 2004-05-26  Martin Baulig  <martin@ximian.com>
4212
4213         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
4214
4215         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
4216         (RootContext.LookupType): Pass down the `silent' flag.
4217
4218 2004-05-25  Martin Baulig  <martin@ximian.com>
4219
4220         * expression.cs
4221         (MethodGroupExpr.IdenticalTypeName): New public property.
4222         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
4223         expression actually refers to a type.
4224
4225 2004-05-25  Martin Baulig  <martin@ximian.com>
4226
4227         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
4228         for #56176 and made it actually work.
4229
4230 2004-05-25  Martin Baulig  <martin@ximian.com>
4231
4232         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
4233         (FieldExpr, PropertyExpr): Override and implement
4234         CacheTemporaries.  Fixes #52279.
4235
4236 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
4237
4238         * location.cs: In the new compiler listing a file twice is a
4239         warning, not an error.
4240
4241 2004-05-24  Martin Baulig  <martin@ximian.com>
4242
4243         * enum.cs (Enum.DefineType): For the `BaseType' to be a
4244         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
4245
4246 2004-05-24  Martin Baulig  <martin@ximian.com>
4247
4248         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
4249         walking the `using' list.  Fixes #53921.
4250
4251 2004-05-24  Martin Baulig  <martin@ximian.com>
4252
4253         * const.cs (Const.LookupConstantValue): Added support for
4254         EmptyCast's; fixes #55251.
4255
4256 2004-05-24  Martin Baulig  <martin@ximian.com>
4257
4258         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
4259         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
4260         which does the CS0135 check.  The reason is that we first need to
4261         check whether the variable actually exists.
4262
4263 2004-05-24  Martin Baulig  <martin@ximian.com>
4264
4265         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
4266         than RootContext.LookupType() to find the explicit interface
4267         type.  Fixes #58584.
4268
4269 2004-05-24  Raja R Harinath  <rharinath@novell.com>
4270
4271         * Makefile: Simplify.  Use executable.make.
4272         * mcs.exe.sources: New file.  List of sources of mcs.exe.
4273
4274 2004-05-24  Anders Carlsson  <andersca@gnome.org>
4275
4276         * decl.cs:
4277         * enum.cs:
4278         Use the invariant culture when doing String.Compare for CLS case
4279         sensitivity.
4280         
4281 2004-05-23  Martin Baulig  <martin@ximian.com>
4282
4283         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
4284         don't have any dots.  Fixes #52622, added cs0246-8.cs.
4285
4286         * namespace.cs (NamespaceEntry.Lookup): Likewise.
4287
4288 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
4289
4290         * class.cs (MemberBase.Define): Reuse MemberType member for 
4291         resolved type. Other methods can use it too.
4292
4293 2004-05-23  Martin Baulig  <martin@ximian.com>
4294
4295         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
4296         the variable also exists in the current block (otherwise, we need
4297         to report a CS0103).  Fixes #58670.
4298
4299 2004-05-23  Martin Baulig  <martin@ximian.com>
4300
4301         * flowanalysis.cs (Reachability.Reachable): Compute this
4302         on-the-fly rather than storing it as a field.
4303
4304 2004-05-23  Martin Baulig  <martin@ximian.com>
4305
4306         * flowanalysis.cs (Reachability.And): Manually compute the
4307         resulting `barrier' from the reachability.      
4308        
4309 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
4310
4311         Fix bug #57835
4312         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
4313         instance of ObsoleteAttribute when symbol is obsolete.
4314
4315         * class.cs
4316         (IMethodData): Extended interface for ObsoleteAttribute support.
4317
4318 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
4319
4320         * attribute.cs: Fix bug #55970
4321
4322 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
4323
4324         Fix bug #52705
4325         * attribute.cs
4326         (GetObsoleteAttribute): New method. Creates the instance of
4327         ObsoleteAttribute.
4328         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
4329         ObsoleteAttribute when member is obsolete.
4330         (AttributeTester.Report_ObsoleteMessage): Common method for
4331         Obsolete error/warning reporting.
4332
4333         * class.cs
4334         (TypeContainer.base_classs_type): New member for storing parent type.
4335
4336         * decl.cs
4337         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
4338         for this MemberCore.
4339
4340 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
4341
4342         * attribute.cs, const.cs: Fix bug #58590
4343
4344 2004-05-21  Martin Baulig  <martin@ximian.com>
4345
4346         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
4347         out parameters if the end of the method is unreachable.  Fixes
4348         #58098. 
4349
4350 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
4351
4352         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
4353         Hari was right, why extra method.
4354
4355 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
4356
4357         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
4358
4359 2004-05-20  Martin Baulig  <martin@ximian.com>
4360
4361         * delegate.cs: Convert this file to Unix mode - like the original
4362         version in mcs is.
4363
4364 2004-05-20  Martin Baulig  <martin@ximian.com>
4365
4366         * attribute.cs: Convert this file to Unix mode - like the original
4367         version in mcs is.
4368
4369 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
4370
4371        Fix bug #58688 (MCS does not report error when the same attribute
4372        is assigned twice)
4373
4374        * attribute.cs (Attribute.Emit): Distinction between null and default.
4375
4376 2004-05-19  Raja R Harinath  <rharinath@novell.com>
4377
4378        * cs-parser.jay (attribute): Create a GlobalAttribute for the case
4379        of a top-level attribute without an attribute target.
4380        * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
4381        Make non-static.
4382        (Attribute.Conditional_GetConditionName), 
4383        (Attribute.Obsolete_GetObsoleteMessage): Update.
4384        (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
4385        part of ScanForIndexerName.
4386        (Attribute.CanIgnoreInvalidAttribute): New function.
4387        (Attribute.ScanForIndexerName): Move to ...
4388        (Attributes.ScanForIndexerName): ... here.
4389        (Attributes.Attrs): Rename from now-misnamed AttributeSections.
4390        (Attributes.Search): New internal variant that can choose not to
4391        complain if types aren't resolved.  The original signature now
4392        complains.
4393        (Attributes.GetClsCompliantAttribute): Use internal variant, with
4394        complaints suppressed.
4395        (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
4396        only if it not useful.
4397        (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
4398        top-level for attributes that are shared between the assembly
4399        and a top-level class.
4400        * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
4401        * class.cs: Update to reflect changes.
4402        (DefineIndexers): Fuse loops.
4403        * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
4404        a couple more variants of attribute names.
4405
4406 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
4407
4408         Fix bug #52585 (Implemented explicit attribute declaration)
4409
4410         * attribute.cs:
4411         (Attributable.ValidAttributeTargets): New abstract method. It gets
4412         list of valid attribute targets for explicit target declaration.
4413         (Attribute.Target): It holds target itself.
4414         (AttributeSection): Removed.
4415         (Attribute.CheckTargets): New method. It checks whether attribute
4416         target is valid for the current element.
4417
4418         * class.cs:
4419         (EventProperty): New class. For events that are declared like
4420         property (with add and remove accessors).
4421         (EventField): New class. For events that are declared like field.
4422         class.cs
4423
4424         * cs-parser.jay: Implemented explicit attribute target declaration.
4425
4426         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
4427         Override ValidAttributeTargets.
4428
4429         * parameter.cs:
4430         (ReturnParameter): Class for applying custom attributes on 
4431         the return type.
4432         (ParameterAtribute): New class. Class for applying custom
4433         attributes on the parameter type.
4434
4435 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
4436
4437         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
4438         definitions. 
4439
4440         (Method): Allow UNSAFE here.
4441
4442         * modifiers.cs: Support unsafe reporting.
4443
4444 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
4445
4446         * decl.cs: Fix bug #58478.
4447
4448 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
4449
4450         * statement.cs: When checking for unreachable code on an EmptyStatement,
4451         set the location. Fixes bug #58488.
4452
4453 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
4454
4455         * driver.cs: Add -pkg handling.
4456
4457         From Gonzalo: UseShelLExecute=false
4458
4459 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
4460
4461         * attribute.cs:
4462         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
4463         for attribute.
4464         (Attribute.IsClsCompliaceRequired): Moved to base for better
4465         accesibility.
4466         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
4467         when attribute is AttributeUsageAttribute.
4468         (Attribute.GetValidTargets): Simplified.
4469         (Attribute.GetAttributeUsage): New method returns AttributeUsage
4470         attribute for this type.
4471         (Attribute.ApplyAttributes): Method renamed to Emit and make
4472         non-static.
4473         (GlobalAttributeSection): New class for special handling of global
4474         attributes (assembly, module).
4475         (AttributeSection.Emit): New method.
4476
4477         * class.cs: Implemented Attributable abstract methods.
4478         (MethodCore.LabelParameters): Moved to Parameter class.
4479         (Accessor): Is back simple class.
4480         (PropertyMethod): Implemented Attributable abstract class.
4481         (DelegateMethod): Implemented Attributable abstract class.
4482         (Event): New constructor for disctintion between normal Event
4483         and Event with accessors.
4484
4485         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
4486
4487         * codegen.cs, const.cs, decl.cs, delegate.cs:
4488         (CommonAssemblyModulClass): Implemented Attributable abstract class
4489         and simplified.
4490
4491         * enum.cs: Implement IAttributeSupport interface.
4492         (EnumMember): New class for emum members. Implemented Attributable
4493         abstract class
4494
4495         * parameter.cs:
4496         (ParameterBase): Is abstract.
4497         (ReturnParameter): New class for easier [return:] attribute handling.
4498
4499         * typemanager.cs: Removed builder_to_attr.
4500
4501 2004-05-11  Raja R Harinath  <rharinath@novell.com>
4502
4503         Fix bug #57151.
4504         * attribute.cs (Attribute.GetPositionalValue): New function.
4505         * class.cs (TypeContainer.VerifyMembers): New function.
4506         (TypeContainer.Emit): Use it.
4507         (ClassOrStruct): New base class for Class and Struct.
4508         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
4509         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
4510         class.
4511         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
4512         then each non-static field should have a FieldOffset attribute.
4513         Otherwise, none of the fields should have a FieldOffset attribute.
4514         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
4515         and FieldOffset attributes.
4516         * typemanager.cs (TypeManager.struct_layout_attribute_type)
4517         (TypeManager.field_offset_attribute_type): New core types.
4518         (TypeManager.InitCoreTypes): Initialize them.
4519
4520 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
4521
4522         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
4523         Return correct type.
4524         From bug #58270.
4525
4526 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
4527
4528         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
4529         be implicitly converted to ulong.
4530         
4531         * expression.cs: The logic for allowing operator &, | and ^ worked
4532         was wrong, it worked before because we did not report an error in
4533         an else branch.  Fixes 57895.
4534
4535         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
4536         allow volatile fields to be reference types.
4537
4538 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
4539
4540         * driver.cs: Add support for /debug-
4541
4542 2004-05-07  Raja R Harinath  <rharinath@novell.com>
4543
4544         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
4545         Add a 'complain' parameter to silence errors.
4546         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
4547         silently overlooked type-resolutions.
4548         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
4549         to reflect changes.
4550         (Attributes.Search): New function.
4551         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
4552         (Attributes.GetAttributeFullName): Remove hack.
4553         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
4554         Update to reflect changes.
4555         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
4556         Use Attributes.Search instead of nested loops.
4557
4558 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
4559
4560         * decl.cs:
4561         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
4562         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
4563         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
4564
4565         * report.cs: (Report.Warning): Renamed to Warning_T because of
4566         parameter collision.
4567
4568 2004-05-05  Raja R Harinath  <rharinath@novell.com>
4569
4570         * expression.cs (MemberAccess.ResolveMemberAccess):
4571         Exit with non-zero status after Report.Error.
4572         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
4573         Likewise.
4574         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
4575
4576 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
4577
4578         * support.cs: Don't hang when the file is empty.
4579
4580 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
4581
4582         * support.cs: In SeekableStreamReader, compute the preamble size of the
4583           underlying stream. Position changes should take into account that initial
4584           count of bytes.
4585
4586 2004-05-03  Todd Berman  <tberman@sevenl.net>
4587
4588         * driver.cs: remove unused GetSysVersion function.
4589
4590 2004-05-03  Todd Berman  <tberman@sevenl.net>
4591
4592         * driver.cs: Remove the hack from saturday, as well as the hack
4593         from jackson (LoadAssemblyFromGac), also adds the CWD to the
4594         link_paths to get that bit proper.
4595
4596 2004-05-01  Todd Berman  <tberman@sevenl.net>
4597
4598         * driver.cs: Try a LoadFrom before a Load, this checks the current
4599         path. This is currently a bug in mono that is be fixed, however, this
4600         provides a workaround for now. This will be removed when the bug
4601         is fixed.
4602
4603 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
4604
4605         * CryptoConvert.cs: Updated to latest version. Fix issue with 
4606         incomplete key pairs (#57941).
4607
4608 2004-05-01  Todd Berman  <tberman@sevenl.net>
4609
4610         * driver.cs: Remove '.' from path_chars, now System.* loads properly
4611         from the GAC
4612
4613 2004-04-30  Jackson Harper  <jackson@ximian.com>
4614
4615         * codegen.cs: Open keys readonly.
4616         
4617 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
4618
4619         * typemanager.cs: don't report cyclic struct layout when a struct
4620         contains 2 or more fields of the same type. Failed for Pango.AttrShape
4621         which has 2 Pango.Rectangle fields.
4622
4623 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
4624
4625         * expression.cs: Handle IntPtr comparisons with IL code
4626         rather than a method call.
4627
4628 2004-04-29  Martin Baulig  <martin@ximian.com>
4629
4630         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
4631         the list of PropertyInfo's in class hierarchy and find the
4632         accessor.  Fixes #56013.
4633
4634 2004-04-29  Martin Baulig  <martin@ximian.com>
4635
4636         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
4637
4638 2004-04-29  Martin Baulig  <martin@ximian.com>
4639
4640         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
4641
4642         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
4643
4644 2004-04-29  Martin Baulig  <martin@ximian.com>
4645
4646         * class.cs (ConstructorInitializer.Resolve): Check whether the
4647         parent .ctor is accessible.  Fixes #52146.
4648
4649 2004-04-29  Martin Baulig  <martin@ximian.com>
4650
4651         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
4652
4653         * statement.cs (Using.EmitLocalVariableDecls): Use
4654         TypeManager.idisposable_type, not typeof (IDisposable).
4655         (Foreach.EmitCollectionForeach): Added support for valuetypes.
4656
4657 2004-04-29  Martin Baulig  <martin@ximian.com>
4658
4659         * class.cs (Event.Define): Don't emit the field and don't set
4660         RTSpecialName and SpecialName for events on interfaces.  Fixes
4661         #57703. 
4662
4663 2004-04-29  Raja R Harinath  <rharinath@novell.com>
4664
4665         Refactor Attribute.ApplyAttributes.
4666         * attribute.cs (Attributable): New base class for objects that can
4667         have Attributes applied on them.
4668         (Attribute): Make AttributeUsage fields public.
4669         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
4670         (Attribute.IsInternalCall): New property.
4671         (Attribute.UsageAttr): Convert to a public read-only property.
4672         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
4673         (Attribute.ResolveType, Attribute.Resolve)
4674         (Attribute.ScanForIndexerName): Update to reflect changes.
4675         (Attribute.CheckAttributeTarget): Re-format.
4676         (Attribute.ApplyAttributes): Refactor, to various
4677         Attributable.ApplyAttributeBuilder methods.
4678         * decl.cs (MemberCore): Make Attributable.
4679         * class.cs (Accessor): Make Attributable.
4680         (MethodData.ApplyAttributes): Use proper attribute types, not
4681         attribute names.
4682         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
4683         (TypeContainer.ApplyAttributeBuilder)
4684         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
4685         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
4686         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
4687         (Operator.ApplyAttributeBuilder): New factored-out methods.
4688         * const.cs (Const.ApplyAttributeBuilder): Likewise.
4689         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
4690         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
4691         * parameter.cs (ParameterBase): New Attributable base class
4692         that can also represent Return types.
4693         (Parameter): Update to the changes.
4694
4695 2004-04-29  Jackson Harper  <jackson@ximian.com>
4696
4697         * driver.cs: Prefer the corlib system version when looking for
4698         assemblies in the GAC. This is still a hack, but its a better hack
4699         now.
4700         
4701 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
4702
4703         * decl.cs, enum.cs: Improved error 3005 reporting.
4704   
4705         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
4706         (related_symbols): New private member for list of symbols
4707         related to reported error/warning.
4708         
4709         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
4710
4711 2004-04-29  Martin Baulig  <martin@ximian.com>
4712
4713         * ecore.cs (Expression.Constantify): If we're an enum and
4714         TypeManager.TypeToCoreType() doesn't give us another type, use
4715         t.UnderlyingSystemType.  Fixes #56178.  
4716
4717 2004-04-29  Martin Baulig  <martin@ximian.com>
4718
4719         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
4720         interfaces and for each interface, only add members directly
4721         declared in that interface.  Fixes #53255.
4722
4723 2004-04-28  Martin Baulig  <martin@ximian.com>
4724
4725         * expression.cs (ConditionalLogicalOperator): Use a temporary
4726         variable for `left' to avoid that we evaluate it more than once;
4727         bug #52588.
4728
4729 2004-04-28  Martin Baulig  <martin@ximian.com>
4730
4731         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
4732         `void[]' (CS1547).
4733
4734 2004-04-28  Martin Baulig  <martin@ximian.com>
4735
4736         * statement.cs (LocalInfo.Resolve): Check whether the type is not
4737         void (CS1547).
4738
4739         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
4740         whether the type is not void (CS1547).
4741
4742 2004-04-28  Martin Baulig  <martin@ximian.com>
4743
4744         * expression.cs (Unary.DoResolveLValue): Override this and report
4745         CS0131 for anything but Operator.Indirection.
4746
4747 2004-04-28  Martin Baulig  <martin@ximian.com>
4748
4749         Committing a patch from Ben Maurer; see bug #50820.
4750
4751         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
4752         check for classes.
4753
4754         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
4755         classes.        
4756
4757 2004-04-28  Martin Baulig  <martin@ximian.com>
4758
4759         Committing a patch from Ben Maurer; see bug #50820.
4760
4761         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
4762         check for classes.
4763
4764         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
4765         classes.        
4766
4767 2004-04-28  Martin Baulig  <martin@ximian.com>
4768
4769         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
4770         (Block.AddLabel): Call DoLookupLabel() to only search in the
4771         current block.
4772
4773 2004-04-28  Martin Baulig  <martin@ximian.com>
4774
4775         * cfold.cs (ConstantFold.BinaryFold): Added special support for
4776         comparing StringConstants and NullLiterals in Equality and Inequality.
4777
4778 2004-04-28  Jackson Harper  <jackson@ximian.com>
4779
4780         * driver.cs: Attempt to load referenced assemblies from the
4781         GAC. This is the quick and dirty version of this method that
4782         doesnt take into account versions and just takes the first
4783         canidate found. Will be good enough for now as we will not have more
4784         then one version installed into the GAC until I update this method.
4785
4786 2004-04-28  Martin Baulig  <martin@ximian.com>
4787
4788         * typemanager.cs (TypeManager.CheckStructCycles): New public
4789         static method to check for cycles in the struct layout.
4790
4791         * rootcontext.cs (RootContext.PopulateTypes): Call
4792         TypeManager.CheckStructCycles() for each TypeContainer.
4793         [Note: We only need to visit each type once.]
4794
4795 2004-04-28  Martin Baulig  <martin@ximian.com>
4796
4797         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
4798
4799         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
4800         success and added `out object value'.  Use a `bool resolved' field
4801         to check whether we've already been called rather than
4802         `ConstantValue != null' since this breaks for NullLiterals.
4803
4804 2004-04-28  Raja R Harinath  <rharinath@novell.com>
4805
4806         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
4807         setting of this flag, since the 'set' method may be non-public.
4808
4809 2004-04-28  Raja R Harinath  <rharinath@novell.com>
4810
4811         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
4812         check on current_vector.Block.
4813
4814 2004-04-27  Martin Baulig  <martin@ximian.com>
4815
4816         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
4817         a field initializer.  Fixes #56459.
4818
4819 2004-04-27  Martin Baulig  <martin@ximian.com>
4820
4821         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
4822         we're not attempting to use an indexer.  Fixes #52154.
4823
4824 2004-04-27  Martin Baulig  <martin@ximian.com>
4825
4826         * statement.cs (Return): Don't create a return label if we don't
4827         need it; reverts my change from January 20th.  Thanks to Ben
4828         Maurer for this.
4829
4830 2004-04-27  Martin Baulig  <martin@ximian.com>
4831
4832         According to the spec, `goto' can only leave a nested scope, but
4833         never enter it.
4834
4835         * statement.cs (Block.LookupLabel): Only lookup in the current
4836         block, don't recurse into parent or child blocks.
4837         (Block.AddLabel): Check in parent and child blocks, report
4838         CS0140/CS0158 if we find a duplicate.
4839         (Block): Removed this indexer for label lookups.
4840         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
4841         this already does the error reporting for us.
4842
4843         * flowanalysis.cs
4844         (FlowBranching.UsageVector.Block): New public variable; may be null.
4845         (FlowBranching.CreateSibling): Added `Block' argument.
4846         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
4847         label for the target of a `goto' and check whether we're not
4848         leaving a `finally'.
4849
4850 2004-04-27  Martin Baulig  <martin@ximian.com>
4851
4852         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
4853         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
4854         just for returns).
4855
4856 2004-04-27  Martin Baulig  <martin@ximian.com>
4857
4858         * statement.cs (Block.AddLabel): Also check for implicit blocks
4859         and added a CS0158 check.
4860
4861 2004-04-27  Martin Baulig  <martin@ximian.com>
4862
4863         * flowanalysis.cs (FlowBranchingLoop): New class.
4864         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
4865         UsageVector's instead of an ArrayList.
4866         (FlowBranching.Label): Likewise.
4867         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
4868         (FlowBranching.AddBreakVector): New method.
4869
4870 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
4871
4872         * attribute.cs: Small regression fix: only convert the type if we
4873         the type is different, fixes System.Drawing build.
4874
4875 2004-04-27  Martin Baulig  <martin@ximian.com>
4876
4877         * attribute.cs (Attribute.Resolve): If we have a constant value
4878         for a named field or property, implicity convert it to the correct
4879         type.
4880
4881 2004-04-27  Raja R Harinath  <rharinath@novell.com>
4882
4883         * statement.cs (Block.Block): Implicit blocks share
4884         'child_variable_names' fields with parent blocks.
4885         (Block.AddChildVariableNames): Remove.
4886         (Block.AddVariable): Mark variable as "used by a child block" in
4887         every surrounding block.
4888         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
4889         been used in a child block, complain about violation of "Invariant
4890         meaning in blocks" rule.
4891         * cs-parser.jay (declare_local_variables): Don't use
4892         AddChildVariableNames.
4893         (foreach_statement): Don't create an implicit block: 'foreach'
4894         introduces a scope.
4895
4896 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
4897
4898         * convert.cs (ImplicitNumericConversion): 0 is also positive when
4899         converting from 0L to ulong.  Fixes 57522.
4900
4901 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
4902
4903         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
4904         derived class hides via 'new' keyword field from base class (test-242.cs).
4905         TODO: Handle this in the more general way.
4906         
4907         * class.cs (CheckBase): Ditto.
4908
4909 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
4910
4911         * decl.cs (caching_flags): New member for storing cached values
4912         as bit flags.
4913         (MemberCore.Flags): New enum where bit flags for caching_flags
4914         are defined.
4915         (MemberCore.cls_compliance): Moved to caching_flags.
4916         (DeclSpace.Created): Moved to caching_flags.
4917
4918         * class.cs: Use caching_flags instead of DeclSpace.Created
4919         
4920 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
4921
4922         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
4923         if we are only a derived class, not a nested class.
4924
4925         * typemanager.cs: Same as above, but do this at the MemberLookup
4926         level (used by field and methods, properties are handled in
4927         PropertyExpr).   Allow for the qualified access if we are a nested
4928         method. 
4929
4930 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
4931
4932         * class.cs: Refactoring.
4933         (IMethodData): New inteface; Holds links to parent members
4934         to avoid member duplication (reduced memory allocation).
4935         (Method): Implemented IMethodData interface.
4936         (PropertyBase): New inner classes for get/set methods.
4937         (PropertyBase.PropertyMethod): Implemented IMethodData interface
4938         (Event): New inner classes for add/remove methods.
4939         (Event.DelegateMethod): Implemented IMethodData interface.
4940
4941         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
4942         EmitContext (related to class.cs refactoring).
4943
4944 2004-04-21  Raja R Harinath  <rharinath@novell.com>
4945
4946         * delegate.cs (Delegate.VerifyApplicability): If the number of
4947         arguments are the same as the number of parameters, first try to
4948         verify applicability ignoring  any 'params' modifier on the last
4949         parameter.
4950         Fixes #56442.
4951
4952 2004-04-08  Martin Baulig  <martin@ximian.com>
4953
4954         Merged latest changes into gmcs.  Please keep this comment in
4955         here, it makes it easier for me to see what changed in MCS since
4956         the last time I merged.
4957
4958 2004-04-16  Raja R Harinath  <rharinath@novell.com>
4959
4960         * class.cs (TypeContainer.AddIndexer): Use
4961         'ExplicitInterfaceName' to determine if interface name was
4962         explicitly specified.  'InterfaceType' is not initialized at this time.
4963         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
4964         Indexers array is already in the required order.  Initialize
4965         'IndexerName' only if there are normal indexers.
4966         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
4967         (TypeContainer.Emit): Emit DefaultMember attribute only if
4968         IndexerName is initialized.
4969         Fixes #56300.
4970
4971 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
4972
4973         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
4974         Fixes #57007
4975
4976 2004-04-15  Raja R Harinath  <rharinath@novell.com>
4977
4978         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
4979         attributes.
4980         Fix for #56456.
4981
4982         * attribute.cs (Attribute.Resolve): Check for duplicate named
4983         attributes.
4984         Fix for #56463.
4985
4986 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
4987
4988         * iterators.cs (MarkYield): track whether we are in an exception,
4989         and generate code accordingly.  Use a temporary value to store the
4990         result for our state.
4991
4992         I had ignored a bit the interaction of try/catch with iterators
4993         since their behavior was not entirely obvious, but now it is
4994         possible to verify that our behavior is the same as MS .NET 2.0
4995
4996         Fixes 54814
4997
4998 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
4999
5000         * iterators.cs: Avoid creating temporaries if there is no work to
5001         do. 
5002
5003         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
5004         Enumerations, use TypeManager.EnumToUnderlying and call
5005         recursively. 
5006
5007         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
5008         bug #57013
5009
5010         (This.Emit): Use EmitContext.EmitThis to emit our
5011         instance variable.
5012
5013         (This.EmitAssign): Ditto.
5014
5015         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
5016         codepaths, we will move all the functionality into
5017         Mono.CSharp.This 
5018
5019         (FieldExpr.EmitAssign): Ditto.
5020
5021         This fixes several hidden bugs that I uncovered while doing a code
5022         review of this today.
5023
5024         * codegen.cs (EmitThis): reworked so the semantics are more clear
5025         and also support value types "this" instances.
5026
5027         * iterators.cs: Changed so that for iterators in value types, we
5028         do not pass the value type as a parameter.  
5029
5030         Initialization of the enumerator helpers is now done in the caller
5031         instead of passing the parameters to the constructors and having
5032         the constructor set the fields.
5033
5034         The fields have now `assembly' visibility instead of private.
5035
5036 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
5037
5038         * expression.cs (Argument.Resolve): Check if fields passed as ref
5039         or out are contained in a MarshalByRefObject.
5040
5041         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
5042         another compiler type.
5043
5044 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
5045
5046         * class.cs (Indexer.Define): use the new name checking method.
5047         Also, return false on an error.
5048         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
5049         (is_identifier_[start/part]_character): make static.
5050
5051 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
5052
5053         * expression.cs (Binary.ResolveOperator): Do no append strings
5054         twice: since we can be invoked more than once (array evaluation)
5055         on the same concatenation, take care of this here.  Based on a fix
5056         from Ben (bug #56454)
5057
5058 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
5059
5060         * codegen.cs: Fix another case where CS1548 must be reported (when 
5061         delay-sign isn't specified and no private is available #56564). Fix
5062         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
5063         error when MCS is used on the MS runtime and we need to delay-sign 
5064         (which seems unsupported by AssemblyBuilder - see #56621).
5065
5066 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
5067
5068         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
5069         (TypeManager.ComputeNamespaces): Faster implementation for
5070         Microsoft runtime.
5071
5072         * compiler.csproj: Updated AssemblyName to mcs.
5073
5074 2004-05-11  Jackson Harper  <jackson@ximian.com>
5075
5076         * Makefile: Preserve MONO_PATH
5077         
5078 2004-05-11  Jackson Harper  <jackson@ximian.com>
5079
5080         * Makefile: Use mono and mcs to build gmcs
5081         
5082 2004-05-03  Miguel de Icaza  <miguel@ximian.com>
5083
5084         * codegen.cs: Add patch from Robert Shade
5085         <rshade@dvsconsulting.com>, use FileAccess.Read on the keyfile, to
5086         sync with mcs.
5087
5088 2004-05-02  Sebastien Pouliot  <sebastien@ximian.com>
5089
5090         * CryptoConvert.cs: Updated to latest version. Fix issue with 
5091         incomplete key pairs (#57941).
5092
5093 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
5094
5095         * codegen.cs: Fix another case where CS1548 must be reported (when 
5096         delay-sign isn't specified and no private is available #56564). Fix
5097         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
5098         error when MCS is used on the MS runtime and we need to delay-sign 
5099         (which seems unsupported by AssemblyBuilder - see #56621).
5100
5101 2004-04-29  Jackson Harper  <jackson@ximian.com>
5102
5103         * Makefile: Set MONO_PATH to use the bootstrap corlib
5104         * driver.cs: Check the GAC for referenced assemblies.
5105                 
5106 2004-04-29  Martin Baulig  <martin@ximian.com>
5107
5108         * Makefile (gmcs.exe): Set MONO_PATH to use `../class/lib/net_2_0'.
5109
5110 2004-04-07  Martin Baulig  <martin@ximian.com>
5111
5112         * expression.cs (Binary.ResolveOperator): Added special case for
5113         Equality/Inequality between a type parameter and a null literal.
5114
5115 2004-04-07  Martin Baulig  <martin@ximian.com>
5116
5117         * convert.cs: Check null literal -> type parameter conversions.
5118
5119 2004-04-07  Martin Baulig  <martin@ximian.com>
5120
5121         * generic.cs (ConstructedType.CheckConstraints): Enforce the
5122         `class' and `struct' constraints.
5123
5124 2004-04-07  Martin Baulig  <martin@ximian.com>
5125
5126         * generic.cs (SpecialConstraint): New public enum.
5127         (Constraints.Resolve): Added support for the `class' and `struct'
5128         constraints.
5129
5130         * cs-parser.jay (type_parameter_constraint): Added support for the
5131         `class' and `struct' constraints.
5132
5133 2004-04-07  Martin Baulig  <martin@ximian.com>
5134
5135         * support.cs (GenericConstraints): Replaced `Types' by
5136         `ClassConstraint' and `InterfaceConstraints'; added
5137         `HasClassConstraint'.   
5138
5139 2004-04-07  Martin Baulig  <martin@ximian.com>
5140
5141         * generic.cs
5142         (Constraints.InterfaceConstraints): New public property.
5143         (Constraints.Types): Make this property public
5144         (TypeParameter): Implement IMemberContainer.
5145         (TypeParameter.Define): Take a `GenericTypeParameterBuilder'
5146         instead of a TypeBuilder/MethodBuilder; pass the interface
5147         constraints to TypeManager.AddTypeParameter().
5148         (TypeParameter.DefineType): Just take an EmitContext and no
5149         TypeBuilder/MethodBuilder.  Use the new public API.
5150
5151         * typemanager.cs (TypeManager.AddTypeParameter): Added
5152         `TypeExpr[]' argument; add the interfaces to the
5153         `builder_to_ifaces' hash.
5154         (TypeManager.LookupMemberContainer): For
5155         GenericTypeParameterBuilders, get the TypeParameter from the
5156         `builder_to_type_param'.
5157         (TypeManager.FindMembers): For GenericTypeParameterBuilders, get
5158         the TypeParameter and call FindMembers on it.
5159
5160 2004-04-07  Martin Baulig  <martin@ximian.com>
5161
5162         * class.cs
5163         (MethodCore.GenericMethod): Moved this field here from Method.
5164         (MethodCore.IsDuplicateImplementation): Take the number of type
5165         parameters into account if we're a generic method.
5166
5167         * expression.cs (Invocation.InferTypeArguments): Don't return true
5168         if `arguments' is null; we still need to check whether we actually
5169         don't need to infer anything in this case.
5170         (MemberAccess): Merged the functionality from GenericMemberAccess
5171         into this class.
5172
5173         * generic.cs (GenericMemberAccess): Removed.
5174
5175 2004-04-05  Martin Baulig  <martin@ximian.com>
5176
5177         * decl.cs (MemberCore): For generic classes, interfaces and
5178         structs, `Name' now includes the number of type parameters
5179         ("Stack!1.Node!1").
5180         (DeclSpace.FindType): Removed the `num_type_args' argument; we now
5181         encode the number of type arguments in the type name.
5182
5183         * expression.cs (Expression.MemberLookup): Removed the
5184         `num_type_args' argument; we now encode the number of type
5185         arguments in the type name.
5186
5187         * ecore.cs (SimpleName): Encode the number of type arguments in
5188         the type name itself.
5189
5190         * generic.cs (ConstructedType): Likewise.
5191
5192         * tree.cs (Tree.RecordDecl): Take a `string' instead of a
5193         `MemberName'; we now include the number of type parameters in the
5194         type name.
5195
5196         * typemanager.cs (TypeManager.CheckGeneric): Removed.
5197         (TypeManager.MemberLookup): Removed the
5198         `num_type_args' argument; we now encode the number of type
5199         arguments in the type name.     
5200
5201 2004-04-03  Martin Baulig  <martin@ximian.com>
5202
5203         * decl.cs (MemberCore.ctor): Take a MemberName instead of a sting.
5204         (MemberCore.MemberName): Moved here from MemberBase.
5205         (DeclSpace.SetParameterInfo): Just take the constraints as an
5206         ArrayList; we already have the type parameters in our
5207         `MemberName'; also do the CS0080 reporting here.
5208
5209         * cs-parser.jay (struct_declaration): Use `member_name' instead of
5210         `IDENTIFIER opt_type_parameter_list'; when constructing our
5211         `MemberName', it'll already include our type parameters.
5212         (class_declaration, interface_declaration): Likewise.
5213         (delegate_declaration): Likewise.
5214         (MakeName): Take a MemberName and return a MemberName.
5215         The following two changes are required to avoid shift/reduce conflicts:
5216         (member_name): Don't include a TypeName anymore; ie. this is now
5217         just 'IDENTIFIER opt_type_parameter_list'.
5218         (property_declaration, event_declaration): Use a
5219         `namespace_or_type_name' instead of a `member_name'.            
5220
5221 2004-04-03  Martin Baulig  <martin@ximian.com>
5222
5223         * decl.cs (MemberName): Renamed to `TypeName' and created a new
5224         `MemberName' class.
5225         (TypeName): Formerly known as MemberName.
5226
5227         * namespace.cs (NamespaceEntry.UsingAlias): Take a `TypeName'
5228         instead of a `MemberName'.
5229
5230         * cs-parser.jay (namespace_or_type_name): Create a TypeName.
5231         (member_name): New rule; create a MemberName.
5232
5233 2004-04-02  Martin Baulig  <martin@ximian.com>
5234
5235         * namespace.cs (NamespaceEntry.VerifyUsing): Added error checking
5236         (CS0305 and CS0308).
5237
5238 2004-04-02  Martin Baulig  <martin@ximian.com>
5239
5240         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Added
5241         support for nested types.
5242
5243 2004-04-02  Martin Baulig  <martin@ximian.com>
5244
5245         * ecore.cs (IAlias): New public interface.
5246         (TypeExpr, TypeExpression): Implement IAlias.
5247         (TypeAliasExpression): New public class.
5248
5249         * namespace.cs (Namespace): Implement IAlias.
5250         (Namespace.Lookup): Return an IAlias instead on an object.
5251         (Namespace.DefineName): Take an IAlias instead of an object.
5252         (NamespaceEntry.AliasEntry.Resolve): Return an IAlias instead of
5253         an object.
5254         (NamespaceEntry.UsingAlias): Take a Membername instead of an
5255         Expression.
5256         (NamespaceEntry.LookupAlias): Return an IAlias instead on an
5257         object.
5258         (NamespaceEntry.Lookup): Likewise.
5259
5260         * rootcontext.cs (RootContext.LookupType): Return a TypeExpr
5261         instead of a Type.      
5262
5263         * decl.cs (DeclSpace): Implement IAlias.
5264         (DeclSpace.LookupAlias): Return an IAlias instead of a string.
5265
5266         * generic.cs (ConstructedType): Improved error checking.
5267
5268 2004-04-02  Martin Baulig  <martin@ximian.com>
5269
5270         * convert.cs: Added type parameter conversions.
5271
5272         * ecore.cs
5273         (UnboxCast.Emit): Emit an `unbox.any' for type params.
5274         (ClassCast.Emit): If the source type is a type parameter, box it.
5275         If the target type is a type parameter, emit an `unbox.any'
5276         instead of a `classcast'.1      
5277
5278 2004-04-01  Martin Baulig  <martin@ximian.com>
5279
5280         * cs-tokenizer.cs (parse_less_than): Allow Token.DOT.
5281
5282 2004-04-01  Martin Baulig  <martin@ximian.com>
5283
5284         * generic.cs (ConstructedType.CheckConstraints): Use
5285         Convert.ImplicitStandardConversionExists(); user-defined implicit
5286         conversions are not allowed according to the spec.
5287
5288 2004-03-30  Martin Baulig  <martin@ximian.com>
5289
5290         * expression.cs (New): Added support for type parameters.
5291
5292         * typemanager.cs
5293         (TypeManager.activator_type): New public static field.
5294         (TypeManager.activator_create_instance): Likewise.
5295
5296 2004-03-30  Martin Baulig  <martin@ximian.com>
5297
5298         * typemanager.cs (TypeManager.HasConstructorConstraint): New
5299         public method.
5300
5301 2004-03-30  Martin Baulig  <martin@ximian.com>
5302
5303         * generic.cs (ConstructedType.CheckConstraints): Actually follow
5304         the spec here: the argument type must be convertible to the
5305         constraints.
5306
5307 2004-03-30  Martin Baulig  <martin@ximian.com>
5308
5309         * generic.cs
5310         (TypeParameter.Define, TypeParameter.DefineMethod): Call
5311         TypeManager.AddTypeParameter().
5312         (ConstructedType.CheckConstraints): Re-enable this and actually
5313         check whether we have a constructor constraint.
5314
5315         * typemanager.cs
5316         (TypeManager.builder_to_type_param): New static field.
5317         (TypeManager.AddTypeParameter): New static method.
5318         (TypeManager.LookupTypeParameter): New public method.
5319
5320 2004-03-30  Martin Baulig  <martin@ximian.com>
5321
5322         * generic.cs (TypeParameter.DefineType): Return a boolean and use
5323         the new API to actually define the constructor constraint.
5324
5325         * typemanager.cs
5326         (TypeManager.new_constraint_attr_type): New static field.
5327         (TypeManager.InitCoreTypes): Initialize it.
5328
5329 2004-03-30  Martin Baulig  <martin@ximian.com>
5330
5331         * generic.cs (Constraints): Completed error checking, use correct
5332         error numbers.
5333
5334 2004-03-29  Martin Baulig  <martin@ximian.com>
5335
5336         * delegate.cs (Delegate.VerifyMethod): Infer type arguments.
5337
5338         * expression.cs (Invocation.InferTypeArguments): Added overloaded
5339         public version which takes a `ParameterData pd' instead of an
5340         `ArrayList args'.
5341
5342 2004-03-29  Martin Baulig  <martin@ximian.com>
5343
5344         * typemanager.cs (TypeManager.IsGenericMethod): Take a MethodBase,
5345         not a MethodInfo.       
5346
5347 2004-03-29  Martin Baulig  <martin@ximian.com>
5348
5349         * expression.cs (Argument.ResolveMethodGroup): If we're a
5350         ConstructedType, call GetMemberAccess() on it.  
5351
5352 2004-03-29  Martin Baulig  <martin@ximian.com>
5353
5354         * class.cs (MethodBase.CheckGenericOverride): New abstract method.
5355         (MethodCore.CheckGenericOverride): When overriding a generic
5356         method, check whether the constraints match.
5357
5358         * support.cs (GenericConstraints): New public interface.
5359         (ParameterData.GenericConstraints): New public method.
5360
5361         * parameter.cs (Parameter.Resolve): Check whether we're a generic
5362         method parameter and compute our constraints if appropriate.
5363         (Parameter.GenericConstraints): New public property.
5364
5365         * generic.cs (Constraints): Implement GenericConstraints.
5366
5367 2004-03-29  Martin Baulig  <martin@ximian.com>
5368
5369         * decl.cs (MemberCache.FindMemberToOverride): Use
5370         `paramTypes [j].Equals (cmpAttrs [j])' instead of `=='.
5371
5372 2004-03-29  Martin Baulig  <martin@ximian.com>
5373
5374         * generic.cs (GenericMethod.Define): Resolve our type parameters.
5375
5376 2004-03-29  Martin Baulig  <martin@ximian.com>
5377
5378         * cs-parser.jay: Report CS0080 instead of -200 ("Constraints are
5379         not allowed on non-generic declarations").
5380
5381 2004-03-29  Martin Baulig  <martin@ximian.com>
5382
5383         * expression.cs (Invocation.InferTypeArguments): Added overloaded
5384         public version of this method.
5385
5386         * class.cs (MethodCore.IsDuplicateImplementation): Use
5387         Invocation.InferTypeArguments() to check this.
5388
5389 2004-03-29  Martin Baulig  <martin@ximian.com>
5390
5391         * convert.cs: Use TypeManager.IsDelegateType() instead of
5392         comparing types correctly.
5393
5394 2004-03-29  Martin Baulig  <martin@ximian.com>
5395
5396         * convert.cs: Use TypeManager.IsSubclassOf() instead of comparing
5397         types directly to make it work for generic instances.
5398
5399         * typemanager.cs (TypeManager.IsSubclassOf): New static method.
5400
5401 2004-03-29  Martin Baulig  <martin@ximian.com>
5402
5403         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Added
5404         support for arrays.     
5405
5406 2004-03-24  Martin Baulig  <martin@ximian.com>
5407
5408         * decl.cs (DeclSpace.FindType): Also use
5409         TypeManager.CheckGeneric() for types from the using clauses.
5410
5411 2004-03-23  Martin Baulig  <martin@ximian.com>
5412
5413         * expression.cs (Invocation.OverloadResolve): Added `bool
5414         may_fail' argument and use it instead of the Location.IsNull() hack.
5415
5416 2004-03-23  Martin Baulig  <martin@ximian.com>
5417
5418         * expression.cs (Invocation.InferType): Use correct type inference
5419         rules here.     
5420
5421 2004-03-23  Martin Baulig  <martin@ximian.com>
5422
5423         * ecore.cs (MethodGroupExpr.Name): Use
5424         TypeManager.CSharpSignature() instead of just the name.
5425
5426         * expression.cs (Invocation.OverloadResolve): Provide better error
5427         reporting.
5428         (Invocation.DoResolve): OverloadResolve() never returns null
5429         without reporting an error, so removed the error -6 reporting here.
5430
5431 2004-03-23  Martin Baulig  <martin@ximian.com>
5432
5433         * typemanager.cs (TypeManager.GetMethodFlags): Fixed the FIXME for
5434         generic methods.
5435
5436         * cs-parser.jay (delegate_declaration): Support generic delegates.
5437
5438         * delegate.cs: Support generic delegates.
5439
5440 2004-03-22  Martin Baulig  <martin@ximian.com>
5441
5442         * expression.cs (Invocation.InferParamsTypeArguments): New static
5443         method; does type inference for params arguments.
5444
5445 2004-03-21  Martin Baulig  <martin@ximian.com>
5446
5447         * typemanager.cs (TypeManager.IsGenericMethod): New public static
5448         method; checks whether a method is a generic method.    
5449
5450         * expression.cs (Invocation.InferTypeArguments): New static method;
5451         infer type arguments for generic method invocation.
5452
5453         * ecore.cs (MethodGroupExpr.HasTypeArguments): New public
5454         property; we set this to true if we're resolving a generic method
5455         invocation and the user specified type arguments, ie. we're not
5456         doing type inference.
5457
5458 2004-03-20  Martin Baulig  <martin@ximian.com>
5459
5460         * class.cs (MethodData.DeclaringType): New public property.
5461         (MethodData.Define): Set DeclaringType here.
5462         (Operator.Define): Use OperatorMethod.MethodData.DeclaringType
5463         instead of OperatorMethodBuilder.DeclaringType.
5464
5465 2004-03-20  Martin Baulig  <martin@ximian.com>
5466
5467         * cs-tokenizer.cs (xtoken): Return a special
5468         Token.DEFAULT_OPEN_PARENS for "`default' followed by open parens".
5469
5470         * cs-parser.jay (default_value_expression): Switch to the new
5471         syntax (14.5.13).
5472
5473 2004-03-19  Martin Baulig  <martin@ximian.com>
5474
5475         * decl.cs (MemberName): New class.  We use this to "construct"
5476         namespace_or_type_name's.
5477
5478         * generics.cs (TypeArguments.GetDeclarations): New public method;
5479         returns the type arguments as a string[] and reports a CS0081 if
5480         one of them is not an identifier.
5481
5482         * class.cs (MemberBase): The .ctor now takes the name as a
5483         MemberName instead of a string.
5484         (MemberBase.ExplicitInterfaceName): Changed type from string to
5485         Expression.
5486         (MemberBase.DoDefine): If we're an explicit implementation, the
5487         InterfaceType may be a generic instance.
5488
5489         * cs-parser.jay (namespace_or_type_name): Return a MemberName.
5490         (namespace_name): Call MemberName.GetName () to transform the
5491         MemberName into a string and ensure we don't have any type
5492         arguments.
5493         (type_name): Call MemberName.GetTypeExpression() to transfrom the
5494         MemberName into an expression.
5495         (method_header): Use namespace_or_type_name instead of member_name.     
5496
5497 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
5498
5499         * rootcontext.cs: Add new types to the boot resolution.
5500
5501         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
5502         MulticastDelegate is not allowed.
5503
5504         * typemanager.cs: Add new types to lookup: System.TypedReference
5505         and ArgIterator.
5506
5507         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
5508         check for TypedReference or ArgIterator, they are not allowed. 
5509
5510         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
5511         makes us properly catch 1510 in some conditions (see bug 56016 for
5512         details). 
5513
5514 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
5515
5516         * CryptoConvert.cs: update from corlib version
5517         with endian fixes.
5518
5519 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
5520
5521         * class.cs (Indexer.Define): Check indexername declaration
5522
5523 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
5524
5525         * attribute.cs (IsClsCompliant): Fixed problem with handling
5526         all three states (compliant, not-compliant, undetected).
5527
5528 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
5529
5530         * attribute.cs (Attribute): Location is now public.
5531         (Resolve): Store resolved arguments (pos_values) in attribute class.
5532         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
5533         (GetClsCompliantAttributeValue): New method that gets
5534         CLSCompliantAttribute value.
5535         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
5536         if exists else null.
5537         (AttributeTester): New class for CLS-Compliant verification routines.
5538
5539         * class.cs (Emit): Add CLS-Compliant verification.
5540         (Method.GetSignatureForError): Implemented.
5541         (Constructor.GetSignatureForError): Implemented
5542         (Constructor.HasCompliantArgs): Returns if constructor has
5543         CLS-Compliant arguments.
5544         (Constructor.Emit): Override.
5545         (Construcor.IsIdentifierClsCompliant): New method; For constructors
5546         is needed to test only parameters.
5547         (FieldBase.GetSignatureForError): Implemented.
5548         (TypeContainer): New member for storing base interfaces.
5549         (TypeContainer.FindMembers): Search in base interfaces too.
5550
5551         * codegen.cs (GetClsComplianceAttribute): New method that gets
5552         assembly or module CLSCompliantAttribute value.
5553         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
5554         for assembly.
5555         (ModuleClass.Emit): Add error 3012 test.
5556
5557         * const.cs (Emit): Override and call base for CLS-Compliant tests.
5558
5559         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
5560         state for all decl types.
5561         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
5562         if CLS-Compliant tests are required.
5563         (IsClsCompliaceRequired): New method. Analyze whether code
5564         must be CLS-Compliant.
5565         (IsExposedFromAssembly): New method. Returns true when MemberCore
5566         is exposed from assembly.
5567         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
5568         value or gets cached value.
5569         (HasClsCompliantAttribute): New method. Returns true if MemberCore
5570         is explicitly marked with CLSCompliantAttribute.
5571         (IsIdentifierClsCompliant): New abstract method. This method is
5572         used to testing error 3005.
5573         (IsIdentifierAndParamClsCompliant): New method. Common helper method
5574         for identifier and parameters CLS-Compliant testing.
5575         (VerifyClsCompliance): New method. The main virtual method for
5576         CLS-Compliant verifications.
5577         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
5578         null. I don't know why is null (too many public members !).
5579         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
5580         and get value of first CLSCompliantAttribute that found.
5581
5582         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
5583         (VerifyClsCompliance): Override and add extra tests.
5584
5585         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
5586         clscheck- disable CLS-Compliant verification event if assembly is has
5587         CLSCompliantAttribute(true).
5588
5589         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
5590         ApllyAttribute is now called in emit section as in the other cases.
5591         Possible future Emit integration.
5592         (IsIdentifierClsCompliant): New override.
5593         (VerifyClsCompliance): New override.
5594         (GetEnumeratorName): Returns full enum name.
5595
5596         * parameter.cs (GetSignatureForError): Implemented.
5597
5598         * report.cs (WarningData): New struct for Warning message information.
5599         (LocationOfPreviousError): New method.
5600         (Warning): New method. Reports warning based on the warning table.
5601         (Error_T): New method. Reports error based on the error table.
5602
5603         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
5604         verifications are done here.
5605
5606         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
5607
5608         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
5609         CLSCompliantAttribute.
5610         (all_imported_types): New member holds all imported types from other
5611         assemblies.
5612         (LoadAllImportedTypes): New method fills static table with exported types
5613         from all referenced assemblies.
5614         (Modules): New property returns all assembly modules.
5615
5616 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
5617
5618         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
5619         throwing a parser error.
5620
5621         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
5622         which removes the hardcoded get_/set_ prefixes for properties, as
5623         IL allows for the properties to be named something else.  
5624
5625         Bug #56013
5626
5627         * expression.cs: Do not override operand before we know if it is
5628         non-null.  Fix 56207
5629
5630 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
5631
5632         * typemanager.cs: support for pinned variables.
5633
5634 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
5635
5636         * decl.cs, typemanager.cs: Avoid using an arraylist
5637         as a buffer if there is only one result set.
5638
5639 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
5640
5641         * expression.cs: Make sure you cant call a static method
5642         with an instance expression, bug #56174.
5643
5644 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
5645
5646         * class.cs (IsDuplicateImplementation): Improve error reporting to
5647         flag 663 (method only differs in parameter modifier).
5648
5649         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
5650         in preprocessor directives.
5651
5652         * location.cs (LookupFile): Allow for the empty path.
5653
5654         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
5655         better approach for some of that patch, but its failing with the
5656         CharSet enumeration.  For now try/catch will do.
5657
5658         * typemanager.cs: Do not crash if a struct does not have fields.
5659         Fixes 56150.
5660
5661 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
5662
5663         * expression.cs: cs0213, cant fix a fixed expression.
5664         fixes 50231.
5665
5666 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
5667
5668         * cs-parser.jay: detect invalid embeded statements gracefully.
5669         bug #51113.
5670
5671 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
5672
5673         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
5674         As a regex:
5675         s/
5676         the invocation type may not be a subclass of the tye of the item/
5677         The type of the item must be a subclass of the invocation item.
5678         /g
5679
5680         Fixes bug #50820.
5681
5682 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
5683
5684         * attribute.cs: Added methods to get a string and a bool from an
5685         attribute. Required to information from AssemblyKeyFileAttribute,
5686         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
5687         * codegen.cs: Modified AssemblyName creation to include support for
5688         strongnames. Catch additional exceptions to report them as CS1548.
5689         * compiler.csproj: Updated include CryptoConvert.cs.
5690         * compiler.csproj.user: Removed file - user specific configuration.
5691         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
5692         Mono.Security assembly. The original class is maintained and tested in
5693         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
5694         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
5695         like CSC 8.0 (C# v2) supports.
5696         * Makefile: Added CryptoConvert.cs to mcs sources.
5697         * rootcontext.cs: Added new options for strongnames.
5698
5699 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
5700
5701         * driver.cs: For --expect-error, report error code `2'
5702         if the program compiled with no errors, error code `1' if
5703         it compiled with an error other than the one expected.
5704
5705 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
5706
5707         * compiler.csproj: Updated for Visual Studio .NET 2003.
5708         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
5709         * compiler.sln: Updated for Visual Studio .NET 2003.
5710
5711 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
5712
5713         * expression.cs: Fix bug #47234. We basically need to apply the
5714         rule that we prefer the conversion of null to a reference type
5715         when faced with a conversion to 'object' (csc behaviour).
5716
5717 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
5718
5719         * statement.cs: Shorter form for foreach, eliminates
5720         a local variable. r=Martin.
5721
5722 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
5723
5724         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
5725         checks if we can use brtrue/brfalse to test for 0.
5726         * expression.cs: use the above in the test for using brtrue/brfalse.
5727         cleanup code a bit.
5728
5729 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
5730
5731         * expression.cs: Rewrite string concat stuff. Benefits:
5732
5733         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
5734         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
5735         rather than a concat chain.
5736
5737         * typemanager.cs: Add lookups for more concat overloads.
5738
5739 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
5740
5741         * expression.cs: Emit shorter il code for array init.
5742
5743         newarr
5744         dup
5745         // set 1
5746
5747         // set 2
5748
5749         newarr
5750         stloc.x
5751
5752         ldloc.x
5753         // set 1
5754
5755         ldloc.x
5756         // set 2
5757
5758 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
5759
5760         * statement.cs: Before, two switch blocks would be merged if the
5761         total size of the blocks (end_item - begin_item + 1) was less than
5762         two times the combined sizes of the blocks.
5763
5764         Now, it will only merge if after the merge at least half of the
5765         slots are filled.
5766
5767         fixes 55885.
5768
5769 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
5770
5771         * class.cs : csc build fix for GetMethods(). See bug #52503.
5772
5773 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
5774
5775         * expression.cs: Make sure fp comparisons work with NaN.
5776         This fixes bug #54303. Mig approved this patch a long
5777         time ago, but we were not able to test b/c the runtime
5778         had a related bug.
5779
5780 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
5781
5782         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
5783
5784 2004-03-19  Martin Baulig  <martin@ximian.com>
5785
5786         * class.cs (MemberCore.IsDuplicateImplementation): Check whether
5787         two overloads may unify for some type parameter substitutions and
5788         report a CS0408 if appropriate.
5789
5790 2004-03-19  Martin Baulig  <martin@ximian.com>
5791
5792         * class.cs (MemberCore.IsDuplicateImplementation): Report the
5793         error here and not in our caller.
5794
5795 2004-03-19  Martin Baulig  <martin@ximian.com>
5796
5797         * interface.cs: Completely killed this file.
5798         (Interface): We're now a TypeContainer and live in class.cs.
5799
5800         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
5801         argument; we're now also called for interfaces.
5802         (TypeContainer.DefineMembers): Allow this method being called
5803         multiple times.
5804         (TypeContainer.GetMethods): New public method; formerly known as
5805         Interface.GetMethod().  This is used by PendingImplementation.
5806         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
5807         it's now private and non-static.
5808         (Interface): Moved this here; it's now implemented similar to
5809         Class and Struct.
5810         (Method, Property, Event, Indexer): Added `bool is_interface'
5811         argument to their .ctor's.
5812         (MemberBase.IsInterface): New public field.
5813
5814         * cs-parser.jay: Create normal Method, Property, Event, Indexer
5815         instances instead of InterfaceMethod, InterfaceProperty, etc.
5816         (opt_interface_base): Removed; we now use `opt_class_base' instead.
5817         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
5818
5819 2004-03-19  Martin Baulig  <martin@ximian.com>
5820
5821         * class.cs (MethodCore.IsDuplicateImplementation): New private
5822         method which does the CS0111 checking.
5823         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
5824         Use IsDuplicateImplementation().
5825
5826 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
5827
5828         * decl.cs (FindMemberToOverride): New method to find the correct
5829         method or property to override in the base class.
5830         * class.cs
5831             - Make Method/Property use the above method to find the
5832               version in the base class.
5833             - Remove the InheritableMemberSignatureCompare as it is now
5834               dead code.
5835
5836         This patch makes large code bases much faster to compile, as it is
5837         O(n) rather than O(n^2) to do this validation.
5838
5839         Also, it fixes bug 52458 which is that nested classes are not
5840         taken into account when finding the base class member.
5841
5842         Reviewed/Approved by Martin.
5843
5844 2004-03-17  Martin Baulig  <martin@ximian.com>
5845
5846         * expression.cs (MemberAccess.DoResolve): Take the parent's number
5847         of type arguments into account; use the `real_num_type_args'
5848         approach like in DoResolveAsTypeStep().
5849
5850         * generic.cs (GenericMemberAccess.DoResolve): Make this work for
5851         nested types.
5852
5853 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
5854
5855         * interface.cs: In all interface classes removed redundant
5856         member initialization.
5857
5858 2004-03-16  Martin Baulig  <martin@ximian.com>
5859
5860         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
5861
5862 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
5863
5864         * decl.cs (DefineTypeAndParents): New helper method to define a
5865         type's containers before the type itself is defined;  This is a
5866         bug exposed by the recent changes to Windows.Forms when an
5867         implemented interface was defined inside a class that had not been
5868         built yet.   
5869
5870         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
5871
5872         (Check): Loop correctly to report errors modifiers
5873         (UNSAFE was not in the loop, since it was the same as TOP).
5874
5875         * interface.cs: Every interface member now takes a ModFlags,
5876         instead of a "is_new" bool, which we set on the base MemberCore. 
5877
5878         Every place where we called "UnsafeOk" in the interface, now we
5879         call the proper member (InterfaceMethod.UnsafeOK) instead to get
5880         the unsafe settings from the member declaration instead of the
5881         container interface. 
5882
5883         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
5884
5885         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
5886         `set_indexer_name' to the pending bits (one per type).
5887
5888         We fixed a bug today that was picking the wrong method to
5889         override, since for properties the existing InterfaceMethod code
5890         basically ignored the method name.  Now we make sure that the
5891         method name is one of the valid indexer names.
5892
5893 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
5894  
5895         * support.cs (SeekableStreamReader): Keep track of stream byte
5896         positions and don't mix them with character offsets to the buffer.
5897
5898         Patch from Gustavo Giráldez
5899
5900 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
5901
5902         * interface.cs (InterfaceSetGetBase): Removed double member
5903         initialization, base class does it as well.
5904
5905 2004-03-13  Martin Baulig  <martin@ximian.com>
5906
5907         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
5908         when compiling corlib.
5909
5910 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
5911
5912         * convert.cs (ExplicitConversion): We were reporting an error on
5913         certain conversions (object_type source to a value type, when the
5914         expression was `null') before we had a chance to pass it through
5915         the user defined conversions.
5916
5917         * driver.cs: Replace / and \ in resource specifications to dots.
5918         Fixes 50752
5919
5920         * class.cs: Add check for duplicate operators.  Fixes 52477
5921
5922 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
5923
5924         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
5925         that are in the middle of the statements, not only at the end.
5926         Fixes #54987
5927
5928         * class.cs (TypeContainer.AddField): No longer set the
5929         `HaveStaticConstructor' flag, now we call it
5930         `UserDefineStaticConstructor' to diferentiate the slightly
5931         semantic difference.
5932
5933         The situation is that we were not adding BeforeFieldInit (from
5934         Modifiers.TypeAttr) to classes that could have it.
5935         BeforeFieldInit should be set to classes that have no static
5936         constructor. 
5937
5938         See:
5939
5940         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
5941
5942         And most importantly Zoltan's comment:
5943
5944         http://bugzilla.ximian.com/show_bug.cgi?id=44229
5945
5946         "I think beforefieldinit means 'it's ok to initialize the type sometime 
5947          before its static fields are used', i.e. initialization does not need
5948          to be triggered by the first access to the type. Setting this flag
5949          helps the JIT to compile better code, since it can run the static
5950          constructor at JIT time, and does not need to generate code to call it
5951          (possibly lots of times) at runtime. Unfortunately, mcs does not set
5952          this flag for lots of classes like String. 
5953          
5954          csc sets this flag if the type does not have an explicit static 
5955          constructor. The reasoning seems to be that if there are only static
5956          initalizers for a type, and no static constructor, then the programmer
5957          does not care when this initialization happens, so beforefieldinit
5958          can be used.
5959          
5960          This bug prevents the AOT compiler from being usable, since it 
5961          generates so many calls to mono_runtime_class_init that the AOT code
5962          is much slower than the JITted code. The JITted code is faster, 
5963          because it does not generate these calls if the vtable is type is
5964          already initialized, which is true in the majority of cases. But the
5965          AOT compiler can't do this."
5966
5967 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
5968
5969         * class.cs (MethodData.Emit): Refactor the code so symbolic
5970         information is generated for destructors;  For some reasons we
5971         were taking a code path that did not generate symbolic information
5972         before. 
5973
5974 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
5975
5976         * class.cs: Create a Constructor.CheckBase method that
5977         takes care of all validation type code. The method
5978         contains some code that was moved from Define.
5979
5980         It also includes new code that checks for duplicate ctors.
5981         This fixes bug #55148.
5982
5983 2004-03-09  Joshua Tauberer <tauberer@for.net>
5984
5985         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
5986         a { ... }-style array creation invokes EmitStaticInitializers
5987         which is not good for reference-type arrays.  String, decimal
5988         and now null constants (NullCast) are not counted toward
5989         static initializers.
5990
5991 2004-03-05  Martin Baulig  <martin@ximian.com>
5992
5993         * location.cs (SourceFile.HasLineDirective): New public field;
5994         specifies whether the file contains or is referenced by a "#line"
5995         directive.
5996         (Location.DefineSymbolDocuments): Ignore source files which
5997         either contain or are referenced by a "#line" directive.        
5998
5999 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
6000
6001         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
6002         direct access to our parent, so check the method inline there.
6003
6004 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
6005
6006         * expression.cs (Invocation.EmitCall): Miguel's last commit
6007         caused a regression. If you had:
6008
6009             T t = null;
6010             t.Foo ();
6011
6012         In Foo the implict this would be null.
6013
6014 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
6015
6016         * expression.cs (Invocation.EmitCall): If the method is not
6017         virtual, do not emit a CallVirt to it, use Call.
6018
6019         * typemanager.cs (GetFullNameSignature): Improve the method to
6020         cope with ".ctor" and replace it with the type name.
6021
6022         * class.cs (ConstructorInitializer.Resolve): Now the method takes
6023         as an argument the ConstructorBuilder where it is being defined,
6024         to catch the recursive constructor invocations.
6025
6026 2004-03-16  Martin Baulig  <martin@ximian.com>
6027
6028         * expression.cs (MemberAccess.DoResolve): If `expr' resolved to a
6029         ConstructedType, call ResolveType() on it to get the type rather
6030         than just using `expr.Type'.
6031
6032 2004-03-16  Martin Baulig  <martin@ximian.com>
6033
6034         * generics.cs (ConstructedType.GetMemberAccess): Take the
6035         EmitContext instead on the TypeExpr and use
6036         ec.TypeContainer.CurrentType/ec.ContainerType.
6037
6038 2004-03-16  Martin Baulig  <martin@ximian.com>
6039
6040         * ecore.cs (SimpleName.DoResolveAsTypeStep): Lookup type
6041         parameters before aliases.
6042
6043 2004-03-16  Martin Baulig  <martin@ximian.com>
6044
6045         * typemanager.cs (TypeManager.MayBecomeEqualGenericInstances):
6046         New oublic function; checks whether two generic instances may become
6047         equal under some instantiations (26.3.1).
6048
6049         * class.cs (TypeContainer.Define): Call
6050         TypeManager.MayBecomeEqualGenericInstances() and report CS0695 on
6051         error.
6052
6053 2004-03-16  Martin Baulig  <martin@ximian.com>
6054
6055         * class.cs (TypeContainer.GetClassBases): Moved
6056         Error_TypeParameterAsBase() here and also check whether the base
6057         class is not an attribute.
6058
6059 2004-03-16  Martin Baulig  <martin@ximian.com>
6060
6061         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
6062
6063 2004-03-16  Martin Baulig  <martin@ximian.com>
6064
6065         * class.cs (Error_TypeParameterAsBase): Use correct error number
6066         here (CS0689).  
6067
6068 2004-03-16  Martin Baulig  <martin@ximian.com>
6069
6070         * decl.cs (DeclSpace.ResolveTypeExpr): Added more error checking
6071         for generics.
6072
6073         * generics.cs (ConstructedType.DoResolveAsTypeStep): Added better
6074         error reporting.
6075
6076 2004-03-15  Martin Baulig  <martin@ximian.com>
6077
6078         * typemanager.cs (TypeManager.GetFullName): New public method.
6079         (TypeManager.MemberLookup): Added `int_num_type_arguments'
6080         argument; only return members with the correct number of type
6081         arguments.
6082         (TypeManager.CheckGeneric): Allow -1 to bypass the check.
6083         (TypeManager.FilterWithClosure): Call CheckGeneric() to check
6084         whether the number of type arguments matches.
6085
6086         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Allow `expr'
6087         not being a ConstructedType; we can now do "typeof (Foo.Bar<U>)".
6088
6089         * expression.cs (MemberAccess): Added public `NumTypeArguments'
6090         field; it's set by the protected .ctor when we're actually a
6091         GenericMemberAccess.
6092         (MemberAccess.ResolveAsTypeStep): Compute the total number of type
6093         arguments and pass it to MemberLookupFinal ().
6094
6095         * ecore.cs (Expression.MemberLookup): Added `int
6096         num_type_arguments' argument; only return members with the correct
6097         number of type arguments.
6098         (Expression.MemberLookupFailed): Check whether the MemberLookup
6099         failed because we did not have the correct number of type
6100         arguments; report CS0305 in this case.
6101
6102         * decl.cs (DeclSpace.ResolveTypeExpr): Don't report an error if
6103         `e.ResolveAsTypeTerminal()' already did so.
6104
6105 2004-03-15  Martin Baulig  <martin@ximian.com>
6106
6107         * ecore.cs (Expression.ResolveLValue): Allow e.type being null if
6108         we're a ConstructedType; in this case, the caller must report an
6109         error (for instance CS0131).
6110
6111         * generic.cs (TypeArguments): Added Location argument to the .ctor.
6112         (TypeArguments.Resolve): Actually report errors here.
6113
6114 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
6115
6116         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
6117         `set_indexer_name' to the pending bits (one per type).
6118
6119         We fixed a bug today that was picking the wrong method to
6120         override, since for properties the existing InterfaceMethod code
6121         basically ignored the method name.  Now we make sure that the
6122         method name is one of the valid indexer names.
6123
6124 2004-03-15  Martin Baulig  <martin@ximian.com>
6125
6126         * typemanager.cs (TypeManager.IndexerPropertyName): Added support
6127         for generic instances.
6128
6129 2004-03-13  Martin Baulig  <martin@ximian.com>
6130
6131         * class.cs (TypeContainer.DefineType): Call
6132         TypeManager.AddUserType() immediately after creating the
6133         TypeBuilder; pass all type parameters when creating the
6134         CurrentType.
6135
6136         * decl.cs (DeclSpace.FindNestedType): New public method.
6137         (DeclSpace.FindType): Added `int num_type_args' argument; only
6138         return types with the correct number of type parameters.
6139         (DeclSpace.CountTypeParams): New public property.
6140
6141         * ecore.cs (SimpleName.ctor): Added overloaded version which takes
6142         the number of type parameters; defaults to zero.
6143
6144         * generic.cs (TypeArguments.Count): New public property.
6145         (ConstructedType.DoResolveAsTypeStep): First call
6146         ds.FindNestedType() to find out whether we're nested in the
6147         current generic type; in this case, we inherit all type parameters
6148         from the current class.
6149
6150         * rootcontext.cs (RootContext.NamespaceLookup): Added `int
6151         num_type_args' argument.
6152         (RootContext.LookupType): Added overloaded version which takes the
6153         number of type arguments; only return types with the correct
6154         number of type arguments.
6155
6156         * typemanager.cs (TypeManager.CheckGeneric): New public function;
6157         checks whether `Type t' has `int num_type_args'.
6158
6159 2004-03-13  Martin Baulig  <martin@ximian.com>
6160
6161         * generic.cs (GenericMethod.DefineType): New method; calls
6162         DefineType() on all the type parameters.
6163
6164         * class.cs (MethodData.ctor): Added `GenericMethod generic' argument.
6165         (MethodData.Define): If we're a generic method, call
6166         GenericMethod.DefineType() to define the type parameters.       
6167
6168 2004-03-10  Martin Baulig  <martin@ximian.com>
6169
6170         * pending.cs (Pending.InterfaceMethod): Use TypeManager.IsEqual()
6171         instead of IsAssignableFrom.    
6172
6173 2004-03-10  Martin Baulig  <martin@ximian.com>
6174
6175         * ecore.cs (FieldExpr.ctor): Use TypeManager.TypeToCoreType().
6176
6177         * support.cs (ParameterData.HasArrayParameter): New property.
6178         (ReflectionParameters.ctor): Take a MethodBase instead of a
6179         ParameterInfo[].  If we have any type parameters, get the generic
6180         method definition and ask it whether we have variable arguments.
6181
6182 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
6183
6184         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
6185         routines to check if a type is an enumerable/enumerator allow
6186         classes that implement the IEnumerable or IEnumerator interfaces.
6187
6188         * class.cs (Property, Operator): Implement IIteratorContainer, and
6189         implement SetYields.
6190
6191         (Property.Define): Do the block swapping for get_methods in the
6192         context of iterators.   We need to check if Properties also
6193         include indexers or not.
6194
6195         (Operator): Assign the Block before invoking the
6196         OperatorMethod.Define, so we can trigger the Iterator code
6197         replacement. 
6198
6199         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
6200         Property and Operator classes are not created when we parse the
6201         declarator but until we have the block completed, so we use a
6202         singleton SimpleIteratorContainer.Simple to flag whether the
6203         SetYields has been invoked.
6204
6205         We propagate this setting then to the Property or the Operator to
6206         allow the `yield' to function.
6207
6208 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
6209
6210         * codegen.cs: Implemented attribute support for modules.
6211         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
6212         Assembly/Module functionality.
6213
6214         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
6215         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
6216         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
6217
6218 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
6219
6220         * interface.cs (FindMembers): The operation is performed on all base
6221         interfaces and not only on the first. It is required for future CLS Compliance patch.
6222
6223 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
6224
6225         * statement.cs, codegen.cs:
6226         This patch deals with patterns such as:
6227
6228         public class List : IEnumerable {
6229
6230                 public MyEnumerator GetEnumerator () {
6231                         return new MyEnumerator(this);
6232                 }
6233
6234                 IEnumerator IEnumerable.GetEnumerator () {
6235                         ...
6236                 }
6237                 
6238                 public struct MyEnumerator : IEnumerator {
6239                         ...
6240                 }
6241         }
6242
6243         Before, there were a few things we did wrong:
6244         1) we would emit callvirt on a struct, which is illegal
6245         2) we emited ldarg when we needed to emit ldarga
6246         3) we would mistakenly call the interface methods on an enumerator
6247         type that derived from IEnumerator and was in another assembly. For example:
6248
6249         public class MyEnumerator : IEnumerator
6250
6251         Would have the interface methods called, even if there were public impls of the
6252         method. In a struct, this lead to invalid IL code.
6253
6254 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
6255
6256         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
6257           renamed to Emit.
6258
6259         * delegate.cs (Define): Fixed crash when delegate type is undefined.
6260
6261 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
6262
6263         * cs-parser.jay: Fix small regression: we were not testing V2
6264         compiler features correctly.
6265
6266         * interface.cs: If the emit context is null, then create one
6267
6268 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
6269
6270         * decl.cs (GetSignatureForError): New virtual method to get full name
6271           for error messages.
6272
6273         * attribute.cs (IAttributeSupport): New interface for attribute setting.
6274           Now it is possible to rewrite ApplyAttributes method to be less if/else.
6275
6276         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
6277           Duplicated members and code in these classes has been removed.
6278           Better encapsulation in these classes.
6279
6280 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
6281
6282         * assign.cs (Assign.DoResolve): When dealing with compound
6283         assignments, there is a new rule in ECMA C# 2.4 (might have been
6284         there before, but it is documented here) that states that in:
6285
6286         a op= b;
6287
6288         If b is of type int, and the `op' is a shift-operator, then the
6289         above is evaluated as:
6290
6291         a = (int) a op b 
6292
6293         * expression.cs (Binary.ResolveOperator): Instead of testing for
6294         int/uint/long/ulong, try to implicitly convert to any of those
6295         types and use that in pointer arithmetic.
6296
6297         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
6298         method to print information for from the type, not from the
6299         null-method we were given.
6300
6301 2004-02-01  Duncan Mak  <duncan@ximian.com>
6302
6303         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
6304         parsing for cmd, fixes bug #53694.
6305
6306 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
6307
6308         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
6309         in the member name duplication tests. Property and operator name duplication
6310         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
6311
6312 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
6313
6314         * interface.cs (PopulateMethod): Fixed crash when interface method
6315         returns not existing type (error test cs0246-3.cs).
6316
6317 2004-02-02  Ravi Pratap M <ravi@ximian.com>
6318
6319         * cs-parser.jay (interface_accessors): Re-write actions to also
6320         store attributes attached to get and set methods. Fix spelling
6321         while at it.
6322
6323         (inteface_property_declaration): Modify accordingly.
6324
6325         (InterfaceAccessorInfo): New helper class to store information to pass
6326         around between rules that use interface_accessors.
6327
6328         * interface.cs (Emit): Apply attributes on the get and set
6329         accessors of properties and indexers too.
6330
6331         * attribute.cs (ApplyAttributes): Modify accordingly to use the
6332         right MethodBuilder when applying attributes to the get and set accessors.
6333
6334 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
6335
6336         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
6337
6338 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
6339
6340         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
6341
6342 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
6343
6344         * cs-parser.jay: Remove YIELD token, instead use the new grammar
6345         changes that treat `yield' specially when present before `break'
6346         or `return' tokens.
6347
6348         * cs-tokenizer.cs: yield is no longer a keyword.
6349
6350 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
6351
6352         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
6353         setting for default constructors.
6354         For default constructors are almost every time set wrong Modifier. The
6355         generated IL code has been alright. But inside mcs this values was
6356         wrong and this was reason why several of my CLS Compliance tests
6357         failed.
6358
6359 2004-02-27  Martin Baulig  <martin@ximian.com>
6360
6361         * generics.cs (ConstructedType.ResolveType): Make the nested type
6362         stuff actually work.
6363
6364 2004-02-25  Martin Baulig  <martin@ximian.com>
6365
6366         * decl.cs (DeclSpace.CurrentTypeParameters): New protected
6367         property; returns the type parameters just from the current type,
6368         ie. with the ones from outer classes.
6369         (DeclSpace.LookupGeneric): First search in the current class, then
6370         in outer classes.
6371         (DeclSpace.initialize_type_params): When hiding a type parameter
6372         from an outer class, put it into the `type_param_list' anyways.
6373
6374         * expression.cs (MemberAccess.expr): Made this field protected.
6375
6376         * class.cs (TypeContainer.Define): The `CurrentType' just contains
6377         the type parameters from the current class.
6378
6379         * generic.cs (ConstructedType.ResolveType): Support nested generic
6380         types by taking the type parameters which we inherit from outer
6381         classes into account.
6382         (GenericMemberAccess.ResolveAsTypeStep): Override this and added
6383         support for nested generic types.
6384
6385 2004-02-23  Martin Baulig  <martin@ximian.com>
6386
6387         * decl.cs (DeclSpace.IsGeneric): Make this a property instead of a
6388         field and check whether we're nested inside a generic type.
6389         (DeclSpace.ResolveType): If we're resolving to a generic type
6390         definition, create a ConstructedType and return its resolved type.
6391         (DeclSpace.initialize_type_params): New private method;
6392         initializes the `type_param_list' field from the type parameters
6393         from this and all enclosing classes.
6394         (DeclSpace.TypeParameters): Call initialize_type_params() unless
6395         we're already initialized.
6396
6397 2004-02-23  Martin Baulig  <martin@ximian.com>
6398
6399         * class.cs (Method.Define): Create the generic method before
6400         calling DoDefine().
6401         (Memberbase.DoDefine): Added DeclSpace argument (in addition to
6402         the TypeContainer one); we use this for generic methods.
6403
6404         * decl.cs (CheckAccessLevel): If we're a GenericMethod, use our
6405         parent's TypeBuilder.
6406
6407 2004-02-18  Martin Baulig  <martin@ximian.com>
6408
6409         * ecore.cs (FieldExpr.DoResolveLValue): Use TypeManager.IsEqual()
6410         to check for equality.
6411
6412 2004-02-05  Martin Baulig  <martin@ximian.com>
6413
6414         * ecore.cs (FieldExpr.DoResolveLValue): If we have an
6415         `ec.TypeContainer.CurrentType', use it instead of
6416         `ec.ContainerType' to check whether we're in the type's ctor.
6417
6418 2004-01-29  Martin Baulig  <martin@ximian.com>
6419
6420         * expression.cs (Invocation.DoResolve): If we're a
6421         `ConstructedType', then we're actually a generic method, so
6422         rewrite the expr as a GenericMemberAccess.
6423
6424         * cs-parser.jay (member_name): Don't use `namespace_or_type_name'
6425         here; manually parse it into a string.
6426
6427 2004-01-28  Martin Baulig  <martin@ximian.com>
6428
6429         * typemanager.cs (TypeManager.IsEqual): New static method.
6430         (TypeManager.FilterWithClosure): Call TypeManager.IsEqual() to
6431         check for equality instead of using `=='.
6432
6433 2004-01-26  Martin Baulig  <martin@ximian.com>
6434
6435         * decl.cs (DeclSpace.CurrentType): New public field.
6436
6437         * expression.cs (This.ResolveBase): If we have an
6438         `ec.TypeContainer.CurrentType', use it instead of
6439         `ec.ContainerType'.
6440
6441         * class.cs (TypeContainer.DefineType): If we're a generic type,
6442         create the `CurrentType' (unresolved).
6443         (TypeContainer.GenericType): New private field.
6444         (TypeContainer.DefineMembers): If we have a `CurrentType', resolve
6445         it and store it in `GenericType' before creating the MemberCache.
6446         (TypeContainer.GetMembers): If we have a `GenericType', call
6447         TypeManager.FindMembers() on it.
6448
6449         * interface.cs (Interface.GenericType): New private field.
6450         (Interface.DefineType): If we're a generic type, create the
6451         `CurrentType' (unresolved).
6452         (Interface.DefineMembers): If we have a `CurrentType', resolve it
6453         and store it in `GenericType' before creating the MemberCache.
6454         (Interface.GetMembers): If we have a `GenericType', call
6455         TypeManager.FindMembers() on it.
6456
6457 2004-01-22  Martin Baulig  <martin@ximian.com>
6458
6459         * cs-parser.jay (namespace_or_type_name): Return an Expression,
6460         not a QualifiedIdentifier.  This is what `type_name_expression'
6461         was previously doing.
6462         (type_name_expression): Removed; the code is now in
6463         `namespace_or_type_name'.
6464         (qualified_identifier): Removed, use `namespace_or_type_name'
6465         instead.
6466         (QualifiedIdentifier): Removed this class.      
6467
6468 2004-01-22  Martin Baulig  <martin@ximian.com>
6469
6470         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
6471         not a string as alias name.
6472
6473 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
6474
6475         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
6476         #52730 bug, and instead compute correctly the need to use a
6477         temporary variable when requesting an address based on the
6478         static/instace modified of the field and the constructor.
6479  
6480 2004-01-21  Martin Baulig  <martin@ximian.com>
6481
6482         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
6483         class and namespace before looking up aliases.  Fixes #52517.
6484
6485 2004-01-21  Martin Baulig  <martin@ximian.com>
6486
6487         * flowanalysis.cs (UsageVector.Merge): Allow variables being
6488         assinged in a 'try'; fixes exception4.cs.
6489
6490 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
6491         * class.cs : Implemented parameter-less constructor for TypeContainer
6492
6493         * decl.cs: Attributes are now stored here. New property OptAttributes
6494
6495         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
6496
6497         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
6498
6499 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
6500
6501         * typemanager.cs (CSharpSignature): Now reports also inner class name.
6502           (CSharpSignature): New method for indexer and property signature.
6503
6504 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
6505
6506         * pending.cs (IsVirtualFilter): Faster implementation.
6507
6508 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
6509
6510         * typemanager.cs: Avoid inclusion of same assembly more than once.
6511
6512 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
6513
6514         * cs-parser.jay: Fixed problem where the last assembly attribute
6515           has been applied also to following declaration (class, struct, etc.)
6516           
6517 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
6518
6519         * class.cs: Added error CS0538, CS0539 reporting.
6520         Fixed crash on Microsoft runtime when field type is void.
6521
6522         * cs-parser.jay: Added error CS0537 reporting.
6523
6524         * pending.cs: Added error CS0535 reporting.
6525         Improved error report for errors CS0536, CS0534.
6526
6527 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
6528
6529         Merge a few bits from the Anonymous Method MCS tree.
6530
6531         * statement.cs (ToplevelBlock): New class for toplevel methods,
6532         will hold anonymous methods, lifted variables.
6533
6534         * cs-parser.jay: Create toplevel blocks for delegates and for
6535         regular blocks of code. 
6536
6537 2004-01-20  Martin Baulig  <martin@ximian.com>
6538
6539         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
6540         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
6541         and `NeedExplicitReturn'; added `IsLastStatement'.
6542         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
6543         have a `ReturnLabel' or we're not unreachable.
6544
6545         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
6546         child's reachability; don't just override ours with it.  Fixes
6547         #58058 (lluis's example).
6548         (FlowBranching): Added public InTryOrCatch(), InCatch(),
6549         InFinally(), InLoop(), InSwitch() and
6550         BreakCrossesTryCatchBoundary() methods.
6551
6552         * statement.cs (Return): Do all error checking in Resolve().
6553         Unless we are the last statement in a top-level block, always
6554         create a return label and jump to it.
6555         (Break, Continue): Do all error checking in Resolve(); also make
6556         sure we aren't leaving a `finally'.
6557         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
6558         statement in a top-level block.
6559         (Block.Flags): Added `IsDestructor'.
6560         (Block.IsDestructor): New public property.
6561
6562 2004-01-20  Martin Baulig  <martin@ximian.com>
6563
6564         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
6565
6566 2004-01-20  Martin Baulig  <martin@ximian.com>
6567
6568         * statement.cs (Statement.ResolveUnreachable): New public method.
6569         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
6570         (Block.Resolve): Resolve unreachable statements.
6571
6572 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
6573
6574         * expression.cs: We need to fix the case where we do
6575         not have a temp variable here.
6576
6577         * assign.cs: Only expression compound assignments need
6578         temporary variables.
6579
6580 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
6581
6582         * flowanalysis.cs: Reduce memory allocation in a few ways:
6583           - A block with no variables should not allocate a bit
6584             vector for itself.
6585           - A method with no out parameters does not need any tracking
6586             for assignment of the parameters, so we need not allocate
6587             any data for it.
6588           - The arrays:
6589                 public readonly Type[] VariableTypes;
6590                 public readonly string[] VariableNames;
6591             Are redundant. The data is already stored in the variable
6592             map, so we need not allocate another array for it.
6593           - We need to add alot of checks for if (params | locals) == null
6594             due to the first two changes.
6595
6596 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
6597
6598         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
6599         implement IMemoryLocation, we store a copy on a local variable and
6600         take the address of it.  Patch from Benjamin Jemlich
6601
6602         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
6603         to use a special "type_name_expression" rule which reduces the
6604         number of "QualifiedIdentifier" classes created, and instead
6605         directly creates MemberAccess expressions.
6606
6607 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
6608
6609         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
6610         that fixes #52853.  Null literal assignment to ValueType
6611
6612         * class.cs (MethodData.Emit): Instead of checking the name of the
6613         method to determine if its a destructor, create a new derived
6614         class from Method called Destructor, and test for that.  
6615
6616         * cs-parser.jay: Create a Destructor object instead of a Method.  
6617
6618         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
6619
6620         Fixes: 52933
6621
6622 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
6623
6624         * expression.cs (Binary.ResolveOperator): Perform an implicit
6625         conversion from MethodGroups to their delegate types on the
6626         Addition operation.
6627
6628         * delegate.cs: Introduce a new class DelegateCreation that is the
6629         base class for `NewDelegate' and `ImplicitDelegateCreation',
6630         factor some code in here.
6631
6632         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
6633         conversion from MethodGroups to compatible delegate types. 
6634
6635         * ecore.cs (Expression.Resolve): Do not flag error 654
6636         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
6637         we allow conversions from MethodGroups to delegate types now.
6638
6639         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
6640         assignments in v2 either.
6641
6642 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
6643
6644         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
6645         static read-only fields in ctors.
6646
6647         Applied patch from Benjamin Jemlich 
6648
6649         * expression.cs (UnaryMutator): Avoid leaking local variables. 
6650
6651 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
6652
6653         * cs-tokenizer.cs (IsCastToken): Allow the various native types
6654         here to return true, as they can be used like this:
6655
6656                 (XXX) int.MEMBER ()
6657
6658         Fixed 49836 and all the other dups
6659
6660 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
6661
6662         * driver.cs: Implement /win32res and /win32icon.
6663
6664 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
6665
6666         * cs-parser.jay: Add a rule to improve error handling for the
6667         common mistake of placing modifiers after the type.
6668
6669 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
6670
6671         * cs-parser.jay (interface_event_declaration): Catch
6672         initialization of events on interfaces, and report cs0068
6673
6674         * cs-parser.jay (interface_event_declaration): Catch
6675         initialization of events. 
6676
6677         * ecore.cs: Better report missing constructors.
6678
6679         * expression.cs (Binary.ResolveOperator): My previous bug fix had
6680         the error reporting done in the wrong place.  Fix.
6681
6682         * expression.cs (Binary.ResolveOperator): Catch the 
6683         operator + (E x, E y) error earlier, and later allow for implicit
6684         conversions in operator +/- (E e, U x) from U to the underlying
6685         type of E.
6686
6687         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
6688         52596, if the container class is abstract, the default constructor
6689         is protected otherwise its public (before, we were always public).
6690
6691         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
6692         fixed statement.
6693
6694         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
6695         Jemlich that fixes bug #52597, MCS was generating invalid code for
6696         idisposable structs.   Thanks to Ben for following up with this
6697         bug as well.
6698
6699 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
6700
6701         * driver.cs: Allow assemblies without code to be generated, fixes
6702         52230.
6703
6704 2004-01-07  Nick Drochak <ndrochak@gol.com>
6705
6706         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
6707
6708 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
6709
6710         * cs-parser.jay: Add rules to improve error reporting if fields or
6711         methods are declared at the namespace level (error 116)
6712
6713         * Add rules to catch event add/remove
6714
6715 2004-01-04  David Sheldon <dave-mono@earth.li>
6716
6717   * expression.cs: Added matching ")" to error message for 
6718   CS0077
6719
6720 2004-01-03 Todd Berman <tberman@gentoo.org>
6721
6722         * ecore.cs, attribute.cs:
6723         Applying fix from #52429.
6724
6725 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
6726
6727         * ecore.cs, expression.cs, statement.cs:
6728         Total rewrite of how we handle branching. We
6729         now handle complex boolean expressions with fewer
6730         jumps. As well if (x == 0) no longer emits a ceq.
6731
6732         if (x is Foo) is much faster now, because we generate
6733         better code.
6734
6735         Overall, we get a pretty big improvement on our benchmark
6736         tests. The code we generate is smaller and more readable.
6737
6738         I did a full two-stage bootstrap. The patch was reviewed
6739         by Martin and Miguel.
6740
6741 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
6742
6743         * cs-parser.jay: Make primary_expression not take a QI.
6744         we dont need this because the member_access rule covers
6745         us here. So we replace the rule with just IDENTIFIER.
6746
6747         This has two good effects. First, we remove a s/r conflict.
6748         Second, we allocate many fewer QualifiedIdentifier objects.
6749
6750 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
6751
6752         * attribute.cs: Handle MarshalAs attributes as pseudo, and
6753         set the correct information via SRE. This prevents
6754         hanging on the MS runtime. Fixes #29374.
6755
6756 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
6757
6758         * convert.cs: correctly handle conversions to value types
6759         from Enum and ValueType as unboxing conversions.
6760
6761         Fixes bug #52569. Patch by Benjamin Jemlich.
6762
6763 2004-01-02  Ravi Pratap  <ravi@ximian.com>
6764
6765         * expression.cs (BetterConversion): Prefer int -> uint
6766         over int -> ulong (csc's behaviour). This fixed bug #52046.
6767
6768 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
6769
6770         * decl.cs (MemberCache.FindMembers): now returns a
6771         MemberInfo [].
6772
6773         * typemanager.cs: In general, go with with ^^.
6774         (CopyNewMethods): take an IList.
6775         (RealMemberLookup): Only allocate an arraylist
6776         if we copy from two sets of methods.
6777
6778         This change basically does two things:
6779         1) Fewer array lists allocated due to CopyNewMethods.
6780         2) the explicit cast in MemberList costed ALOT.
6781
6782 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
6783
6784         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
6785         a hashtable to avoid needless string allocations when an identifier is
6786         used more than once (the common case).
6787
6788 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
6789
6790         * pending.cs: MS's TypeBuilder.GetInterfaces ()
6791         is broken, it will not return anything. So, we
6792         have to use the information we have in mcs to
6793         do the task.
6794
6795         * typemanager.cs: Add a cache for GetInterfaces,
6796         since this will now be used more often (due to ^^)
6797
6798         (GetExplicitInterfaces) New method that gets the
6799         declared, not effective, interfaces on a type
6800         builder (eg, if you have interface IFoo, interface
6801         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
6802         { IBar }.
6803
6804         This patch makes MCS able to bootstrap itself on
6805         Windows again.
6806
6807 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
6808
6809         * expression.cs: Remove the Nop's that Miguel put
6810         in by mistake.
6811
6812 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
6813
6814         * report.cs, codegen.cs: Give the real stack trace to
6815         the error when an exception is thrown.
6816
6817 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
6818
6819         * decl.cs: only allocate hashtables for ifaces if 
6820         it is an iface!
6821
6822 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
6823
6824         * expression.cs: fix the error from cs0121-2.cs
6825         (a parent interface has two child interfaces that
6826         have a function with the same name and 0 params
6827         and the function is called through the parent).
6828
6829 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
6830
6831         * class.cs, rootcontext.cs, typmanager.cs: do not
6832         leak pointers.
6833
6834 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
6835
6836         * codegen.cs: remove stack for the ec flow branching.
6837         It is already a linked list, so no need.
6838
6839 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
6840
6841         * Makefile: Allow custom profiler here.
6842
6843 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
6844
6845         * typemanager.cs (LookupType):
6846           - Use a static char [], because split takes
6847             a param array for args, so it was allocating
6848             every time.
6849           - Do not store true in a hashtable, it boxes.
6850
6851 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
6852
6853         * flowanalysis.cs: bytify common enums.
6854
6855 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
6856
6857         * modifiers.cs: Add a new set of flags for the
6858         flags allowed on explicit interface impls.
6859         * cs-parser.jay: catch the use of modifiers in
6860         interfaces correctly.
6861         * class.cs: catch private void IFoo.Blah ().
6862
6863         All related to bug #50572.
6864
6865 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
6866
6867         * decl.cs: Rewrite the consistant accessability checking.
6868         Accessability is not linear, it must be implemented in
6869         a tableish way. Fixes #49704.
6870
6871 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
6872
6873         * expression.cs: Handle negation in a checked context.
6874         We must use subtraction from zero. Fixes #38674.
6875
6876 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
6877
6878         * class.cs: Ignore static void main in DLLs.
6879         * rootcontext.cs: Handle the target type here,
6880         since we are have to access it from class.cs
6881         * driver.cs: account for the above.
6882
6883 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
6884
6885         * report.cs: Give line numbers and files if available.
6886
6887 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
6888
6889         * driver.cs: Implement /addmodule.
6890
6891         * typemanager.cs:  Change 'modules' field so it now contains Modules not
6892         ModuleBuilders.
6893
6894 2003-12-20  Martin Baulig  <martin@ximian.com>
6895
6896         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
6897         (FieldBase.IsAssigned): Removed this field.
6898         (FieldBase.SetAssigned): New public method.
6899         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
6900
6901 2003-12-20  Martin Baulig  <martin@ximian.com>
6902
6903         * expression.cs (LocalVariableReference.DoResolve): Don't set
6904         `vi.Used' if we're called from DoResolveLValue().
6905
6906         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
6907         returns the usage vector it just merged into the current one -
6908         pass this one to UsageWarning().
6909         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
6910         of the `EmitContext', don't call this recursively on our children.
6911
6912 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
6913
6914         * driver.cs: Implement /target:module.
6915
6916 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
6917
6918         * support.cs (CharArrayHashtable): New helper class.
6919
6920         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
6921         char arrays, not strings, so we can avoid creating a string in
6922         consume_identifier if the identifier is a keyword.
6923
6924 2003-12-16  Martin Baulig  <martin@ximian.com>
6925
6926         * statement.cs (LocalInfo.Assigned): Removed this property.
6927         (LocalInfo.Flags): Removed `Assigned'.
6928         (LocalInfo.IsAssigned): New public method; takes the EmitContext
6929         and uses flow analysis.
6930         (Block.UsageWarning): Made this method private.
6931         (Block.Resolve): Call UsageWarning() if appropriate.
6932
6933         * expression.cs (LocalVariableReference.DoResolve): Always set
6934         LocalInfo.Used here.
6935
6936 2003-12-13  Martin Baulig  <martin@ximian.com>
6937
6938         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
6939         any value here; we're now using flow analysis to figure out
6940         whether a statement/block returns a value.
6941
6942 2003-12-13  Martin Baulig  <martin@ximian.com>
6943
6944         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
6945         working again.
6946         (FlowBranching.MergeFinally): Don't call
6947         `branching.CheckOutParameters()' here, this is called in
6948         MergeTopBlock().
6949         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
6950         when adding the `finally' vector.       
6951
6952 2003-12-13  Martin Baulig  <martin@ximian.com>
6953
6954         * flowanalysis.cs
6955         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
6956         actually work and also fix #48962.
6957
6958 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
6959
6960         * decl.cs: Do not check System.Object for nested types,
6961         since we know it does not have any. Big bang for buck:
6962
6963         BEFORE:
6964            Run 1:   8.35 seconds
6965            Run 2:   8.32 seconds
6966            corlib:  17.99 seconds
6967         AFTER:
6968            Run 1:   8.17 seconds
6969            Run 2:   8.17 seconds
6970            corlib:  17.39 seconds
6971
6972 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
6973
6974         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
6975         time we are returning 0 members, so we save alot here.
6976
6977 2003-12-11  Martin Baulig  <martin@ximian.com>
6978
6979         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
6980         `MergeChild()', also just take the `FlowBranching' as argument;
6981         call Merge() on it and return the result.
6982         (FlowBranching.Merge): We don't need to do anything if we just
6983         have one sibling.
6984
6985 2003-12-11  Martin Baulig  <martin@ximian.com>
6986
6987         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
6988         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
6989         Maurer for this idea.
6990
6991 2003-12-11  Martin Baulig  <martin@ximian.com>
6992
6993         * flowanalysis.cs (MergeResult): This class is now gone; we now
6994         use the `UsageVector' for this.  The reason for this is that if a
6995         branching just has one sibling, we don't need to "merge" them at
6996         all - that's the next step to do.
6997         (FlowBranching.Merge): We now return a `UsageVector' instead of a
6998         `MergeResult'.
6999
7000 2003-12-11  Martin Baulig  <martin@ximian.com>
7001
7002         Reworked flow analyis and made it more precise and bug-free.  The
7003         most important change is that we're now using a special `Reachability'
7004         class instead of having "magic" meanings of `FlowReturns'.  I'll
7005         do some more cleanups and optimizations and also add some more
7006         documentation this week.
7007
7008         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
7009         largely reworked this class.
7010         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
7011         the new `Reachability' class instead of having "magic" values here.
7012         (FlowBranching): We're now using an instance of `Reachability'
7013         instead of having separate `Returns', `Breaks' etc. fields.
7014
7015         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
7016         based on flow analysis; ignore the return value of block.Emit ().
7017
7018 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
7019
7020         * driver.cs typemanager.cs: Find the mono extensions to corlib even
7021         if they are private.
7022
7023 2003-12-09  Martin Baulig  <martin@ximian.com>
7024
7025         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
7026         call them directly on the UsageVector.
7027
7028 2003-12-09  Martin Baulig  <martin@ximian.com>
7029
7030         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
7031         Changed return type from `FlowReturns' to `Reachability'.
7032
7033 2003-12-09  Martin Baulig  <martin@ximian.com>
7034
7035         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
7036         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
7037         `Reachable' fields with a single `Reachability' one.
7038
7039 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
7040
7041         * class.cs (FindMembers): Remove foreach's.
7042
7043         Bootstrap times:
7044
7045         BEFORE
7046                 Run 1:   8.74 seconds
7047                 Run 2:   8.71 seconds
7048
7049         AFTER
7050                 Run 1:   8.64 seconds
7051                 Run 2:   8.58 seconds
7052
7053
7054 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
7055
7056         * cs-parser.jay:
7057         * gen-treedump.cs:
7058         * statement.cs:
7059         This patch does a few things:
7060                 1. EmptyStatement is now a singleton, so it is never reallocated.
7061                 2. All blah is EmptyStatement constructs have been changed to
7062                    blah == EmptyStatement.Value, which is much faster and valid
7063                    now that EmptyStatement is a singleton.
7064                 3. When resolving a block, rather than allocating a new array for
7065                    the non-empty statements, empty statements are replaced with
7066                    EmptyStatement.Value
7067                 4. Some recursive functions have been made non-recursive.
7068         Mainly the performance impact is from (3), however (1) and (2) are needed for
7069         this to work. (4) does not make a big difference in normal situations, however
7070         it makes the profile look saner.
7071
7072         Bootstrap times:
7073
7074         BEFORE
7075         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
7076         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
7077         Total memory allocated: 56397 KB
7078
7079         AFTER
7080         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
7081         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
7082         Total memory allocated: 55666 KB
7083
7084 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
7085
7086         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
7087         than the hashtable in a hashtable version
7088
7089         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
7090         we always end up concating a string. This results in a huge perf
7091         loss, because many strings have to be tracked by the GC. In this
7092         patch, we first use a hashtable that works with two keys, so that
7093         the strings do not need to be concat'ed.
7094
7095         Bootstrap times:
7096         BEFORE
7097                 Run 1:   8.74 seconds
7098                 Run 2:   8.71 seconds
7099
7100         AFTER
7101                 Run 1:   8.65 seconds
7102                 Run 2:   8.56 seconds
7103
7104 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
7105
7106         * Makefile: Add a new target `do-time' that does a quick and simple
7107         profile, leaving easy to parse output.
7108
7109 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
7110
7111         * codegen.cs (Init): Create the dynamic assembly with 
7112         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
7113
7114 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
7115
7116         * support.cs: Make the PtrHashtable use only one
7117         instance of its comparer.
7118
7119 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
7120
7121         * typemanager.cs: Fix lookup of GetNamespaces.
7122
7123 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
7124
7125         * expression.cs: Removed redundant line.
7126
7127         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
7128         ArrayLists, use for loops with bounds.  
7129
7130         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
7131         arraylist.
7132
7133         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
7134         arraylists, use for loop with bounds.
7135
7136         The above three changes give us a 0.071 second performance
7137         improvement out of 3.294 seconds down to 3.223.  On my machine
7138         the above changes reduced the memory usage by 1,387 KB during
7139         compiler bootstrap.
7140
7141         * cs-parser.jay (QualifiedIdentifier): New class used to represent
7142         QualifiedIdentifiers.  Before we created a new string through
7143         concatenation, and mostly later on, the result would be
7144         manipulated by DecomposeQI through string manipulation.
7145
7146         This reduced the compiler memory usage for bootstrapping from
7147         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
7148         compile times in 0.05 seconds.
7149
7150 2003-11-28  Dick Porter  <dick@ximian.com>
7151
7152         * support.cs: Do string compares with the Invariant culture.
7153
7154         * rootcontext.cs: 
7155         * gen-treedump.cs: 
7156         * expression.cs: 
7157         * driver.cs: 
7158         * decl.cs: 
7159         * codegen.cs: 
7160         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
7161         the comparison is done with the Invariant culture.
7162
7163 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
7164
7165         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
7166         GetEnumerator method.
7167
7168         (ProbeCollectionType): Iterate starting at the most specific type
7169         upwards looking for a GetEnumerator
7170
7171         * expression.cs: Shift count can be up to 31 for int/uint and 63
7172         for long/ulong.
7173
7174 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
7175
7176         * statement.cs (Block.LookupLabel): Also look for the label on the
7177         children blocks.  Use a hash table to keep track of visited
7178         nodes. 
7179
7180         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
7181         we actually did transform the other operand, otherwise fall back
7182         to the common codepath that casts to long.
7183
7184         * cs-tokenizer.cs: Use the same code pattern as the int case.
7185         Maybe I should do the parsing myself, and avoid depending on the
7186         Parse routines to get this done.
7187
7188 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
7189
7190         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
7191         which fixes bug 51347.  This time test it.
7192
7193         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
7194         attributes for example can not tell the difference between these.
7195         The difference was only a syntax feature of the language. 
7196
7197         * attribute.cs: Apply attributes to delegates.
7198
7199         * delegate.cs: Call the apply attributes method.
7200
7201 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
7202
7203         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
7204         comparing 0 vs Byte.MinValue, not the value
7205
7206         (ImplicitConversionRequired): When reporting a conversion error,
7207         use error 31 to print out the constant error instead of the
7208         simpler 29.
7209
7210         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
7211         which fixes bug 51347.
7212
7213 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
7214
7215         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
7216         which fixes the -warnaserror command line option.
7217
7218 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
7219
7220         * cfold.cs (DoNumericPromotions): During constant folding of
7221         additions on UIntConstant, special case intconstants with
7222         IntConstants like we do on the expression binary operator. 
7223
7224 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
7225
7226         * convert.cs (ImplicitReferenceConversion): We were missing a case
7227         (System.Enum are not value types or class types, so we need to
7228         classify them separatedly).
7229
7230         * driver.cs: We do not support error 2007.
7231
7232 2003-11-12 Jackson Harper <jackson@ximian.com>
7233
7234         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
7235         system directory. Also use the full file name so users can
7236         libraries names mscorlib-o-tron.dll in a non system dir.
7237         
7238 2004-01-04  David Sheldon <dave-mono@earth.li>
7239
7240         * expression.cs: Added matching ")" to error message for CS0077.
7241
7242 2003-12-19  Martin Baulig  <martin@ximian.com>
7243
7244         * typemanager.cs (TypeManager.IsEqualGenericType): New public
7245         static method; see documentation in the method.
7246         (TypeManager.IsSubclassOrNestedChild): Allow IsEqualGenericType().
7247
7248         * convert.cs (Convert.ImplicitReferenceConversion,
7249         Convert.ImplicitReferenceConversionExists): Add support for
7250         generic type declarations; see gen-36.cs.
7251
7252 2003-12-19  Martin Baulig  <martin@ximian.com>
7253
7254         * pending.cs (Pending.InterfaceMethod): Use
7255         `Type.IsAssignableFrom()' instead of `=='.
7256
7257 2003-12-18  Martin Baulig  <martin@ximian.com>
7258
7259         * decl.cs (DeclSpace.AsAccessible): Check for array, pointer and
7260         byref types first.
7261
7262         * convert.cs (Convert.ImplicitStandardConversionExists): Use
7263         `expr_type.Equals (target_type)' instead of `=='.
7264
7265 2003-12-08  Martin Baulig  <martin@ximian.com>
7266
7267         * generics.cs (Constraints.Types): Removed.
7268         (Constraints.Resolve): Just resolve everything to TypeExpr's, not
7269         to Type's.
7270         (Constraints.ResolveTypes): New public method; resolves the
7271         TypeExpr's to Type's.
7272         (TypeParameter.Define): TypeBuilder.DefineGenericParameter() no
7273         longer takes the constraints.
7274         (TypeParameter.DefineMethod): Likewise.
7275         (TypeParameter.DefineType): New public method.  Calls
7276         `TypeBuilder/MethodBuilder.SetGenericParameterConstraints()' to set
7277         the constraints.
7278
7279 2003-12-08  Martin Baulig  <martin@ximian.com>
7280
7281         * convert.cs (Convert.ImplicitConversionStandard): Use
7282         `expr_type.Equals (target_type)' instead of `=='.
7283
7284 2003-12-08  Martin Baulig  <martin@ximian.com>
7285
7286         * typemanager.cs (TypeManager.GetReferenceType): Call
7287         `Type.MakeByRefType ()'.
7288
7289 2003-12-08  Martin Baulig  <martin@ximian.com>
7290
7291         * cs-parser.jay, cs-tokenizer.cs: `where' is not a keyword, it
7292         just has some special meaning in some situations.  For instance,
7293         it is allowed to use `where' as the name of a variable etc.
7294
7295 2003-12-04  Martin Baulig  <martin@ximian.com>
7296
7297         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
7298         `Type.MakeArrayType()' for array types.
7299
7300 2003-11-18  Miguel de Icaza  <miguel@ximian.com>
7301
7302         * expression.cs (Invocation.VerifyArgumentsCompat): Remove
7303         debugging message.
7304
7305         (SizeOf.DoResolve): assign the `type_queried' field.  This gets
7306         corlib to compile.
7307
7308 2003-11-16  Martin Baulig  <martin@ximian.com>
7309
7310         * codegen.cs (EmitContext.IsGeneric): Removed.
7311
7312         * ecore.cs (SimpleName.ResolveAsTypeStep): Always call
7313         ResolveGeneric() on the DeclSpace.
7314
7315 2003-11-16  Martin Baulig  <martin@ximian.com>
7316
7317         * generic.cs (TypeArguments.Resolve):
7318         `Expression.ResolveAsTypeTerminal()' returns a TypeExpr; call
7319         `ResolveType()' on it to get the Type.
7320
7321 2003-11-15  Martin Baulig  <martin@ximian.com>
7322
7323         * generic.cs (ConstructedType.GetInterfaces): Override this.
7324
7325 2003-11-14  Martin Baulig  <martin@ximian.com>
7326
7327         * interface.cs (Interface.DefineType): Define all type parameters
7328         before adding the interfaces we inherit.
7329
7330 2003-11-11  Martin Baulig  <martin@ximian.com>
7331
7332         * generic.cs (ConstructedType.ResolveType): Always call
7333         `gt.BindGenericParameters (atypes)'; also if `args.HasTypeArguments'.
7334
7335 2003-11-10  Martin Baulig  <martin@ximian.com>
7336
7337         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
7338         (TypeManager.InitCoreTypes): Initialize them here, but instead of
7339         calling `ResolveType()' on them, directly assign their `Type'.
7340
7341 2003-11-08  Martin Baulig  <martin@ximian.com>
7342
7343         * generic.cs (ConstructedType): Override `IsClass' etc.
7344
7345 2003-11-08  Martin Baulig  <martin@ximian.com>
7346
7347         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
7348         return value and the `out parent' parameter.
7349         (TypeContainer.DefineType): Moved the CS0644 check into
7350         GetClassBases().  Don't pass the interface types to the
7351         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
7352         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
7353
7354         * ecore.cs (TypeExpr.IsAttribute): New property.
7355         (TypeExpr.GetInterfaces): New method.
7356
7357         * interface.cs (Interface.GetInterfaceTypeByName): Return a
7358         TypeExpr instead of a Type.
7359         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
7360         (Interface.DefineType): Don't pass the interface types to the
7361         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
7362         them later and then call `TypeBulider.AddInterfaceImplementation()'.
7363
7364         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
7365         instead of a `Type[]'.
7366         (TypeManager.RegisterBuilder): Likewise.
7367         (TypeManager.AddUserInterface): Likewise.
7368         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
7369         `Type[]' and also return a `TypeExpr[]'.
7370         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
7371
7372 2003-11-08  Martin Baulig  <martin@ximian.com>
7373
7374         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
7375         Expression.     
7376
7377 2003-11-08  Martin Baulig  <martin@ximian.com>
7378
7379         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
7380         TypeManager.ResolveExpressionTypes().
7381
7382         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
7383         instead of an Expression.
7384         (TypeExpr): This is now an abstract base class for `TypeExpression'.
7385         (TypeExpression): New public class; formerly known as `TypeExpr'.
7386
7387         * expression.cs (ComposedCast): Derive from TypeExpr.
7388
7389         * typemanager.cs (TypeManager.system_*_expr): These are now
7390         TypExpr's instead of Expression's.
7391         (TypeManager.ResolveExpressionTypes): New public static function;
7392         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
7393         of them.        
7394
7395 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
7396
7397         * expression.cs (New.DoResolve): Do not dereference value that
7398         might be a null return.
7399
7400         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
7401         sure that the constant value has the right type.  Fixes an
7402         unreported bug, similar to 50425.
7403
7404         * const.cs (Const.LookupConstantValue): Call
7405         ImplicitStandardConversionExists before doing a conversion to
7406         avoid havng the TypeManager.ChangeType do conversions.
7407
7408         Reduced the number of casts used
7409
7410         (Const.ChangeType): New routine to enable reuse of the constant
7411         type changing code from statement.
7412
7413         * typemanager.cs (ChangeType): Move common initialization to
7414         static global variables.
7415
7416         Fixes #50425.
7417
7418         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
7419         every value type to go through, even if it was void.  Fix that. 
7420
7421         * cs-tokenizer.cs: Use is_identifier_start_character on the start
7422         character of the define, and the is_identifier_part_character for
7423         the rest of the string.
7424
7425 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
7426
7427         * expression.cs (UnaryMutator.EmitCode): When I updated
7428         LocalVariableReference.DoResolve, I overdid it, and dropped an
7429         optimization done on local variable references.
7430
7431 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
7432
7433         * ecore.cs: Convert the return from Ldlen into an int.
7434
7435 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
7436
7437         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
7438         the accessibility, this is a special case for toplevel non-public
7439         classes (internal for instance).
7440
7441 2003-10-20  Nick Drochak <ndrochak@gol.com>
7442
7443         * ecore.cs: Fix typo and build.  Needed another right paren.
7444
7445 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
7446
7447         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
7448         `internal' case regular and protected, but not allowing protected
7449         to be evaluated later.  Bug 49840
7450
7451 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
7452
7453         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
7454         to kb.Nlast, and not the kb.nFirst to isolate the switch
7455         statement.
7456
7457         Extract the underlying type, so enumerations of long/ulong are
7458         treated like long/ulong.
7459
7460 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
7461
7462         * expression.cs (New): Overload the meaning of RequestedType to
7463         track the possible creation of the NewDelegate type, since
7464         DoResolve is invoked more than once for new constructors on field
7465         initialization.
7466
7467         See bugs: #48800 and #37014
7468
7469         * cs-parser.jay (declare_local_constants): Take an arraylist
7470         instead of a single constant.
7471
7472         (local_constant_declaration): It should take a
7473         constant_declarators, not a constant_declarator.  Fixes 49487
7474
7475         * convert.cs: Fix error report.
7476
7477 2003-10-13 Jackson Harper <jackson@ximian.com>
7478
7479         * typemanager.cs (TypeToCoreType): Add float and double this fixes
7480         bug #49611
7481         
7482 2003-11-03  Martin Baulig  <martin@ximian.com>
7483
7484         * expression.cs (ArrayAccess.GetStoreOpcode): Added
7485         `out bool has_type_arg'; if set, we need to pass the type to
7486         ig.Emit().
7487         (ArrayAccess.GetStoreOpcode, ArrayAccess.EmitLoadOpcode): Use
7488         Stelem_Any/Ldelem_Any for generic parameters.   
7489
7490 2003-11-02  Martin Baulig  <martin@ximian.com>
7491
7492         * expression.cs (Invocation.EmitCall): Use
7493         `TypeManager.IsValueType()' to check whether it's a value type.
7494         Don't set `struct_call' when calling a method on a type parameter.
7495
7496 2003-11-02  Martin Baulig  <martin@ximian.com>
7497
7498         * generics.cs (ConstructedType.Resolve): Renamed to ResolveType()
7499         and removed the TypeBuilder argument.
7500
7501         * typemanager.cs (TypeManager.IsValueType): Return
7502         `t.IsGenericParameter || t.IsValueType'.
7503
7504 2003-10-25  Martin Baulig  <martin@ximian.com>
7505
7506         * decl.cs (DeclSpace.ResolveType): If we're a ConstructedType,
7507         call ConstructedType.Resolve() on it.
7508
7509         * generic.cs (ConstructedType.Resolve): Set `type' on success.
7510
7511 2003-10-25  Martin Baulig  <martin@ximian.com>
7512
7513         * class.cs (TypeContainer.GetClassBases): Changed
7514         `out Type parent' into `out TypeExpr parent'.  Moved CS0644 and
7515         CS8214 reporting here.
7516         (TypeContainer.DefineType): GetClassBases() gives us a `TypeExpr'
7517         instead of a `Type' for our parent.  In case of a recursive
7518         declaration (see tests/gen-23.cs for an example), our parent is a
7519         ConstructedType and it doesn't have its type set.  So, first
7520         create our own TypeBuilder, then call constructed.Resolve() to get
7521         the parent's type and finally TypeBuilder.SetParent() it.
7522
7523         * ecore.cs (TypeExpr.Name): New public virtual property.
7524
7525         * generic.cs
7526         (ConstructedType): We're now a TypeExpr and not just an Expression.
7527         (ConstructedType.ResolveAsTypeStep): Don't resolve our type
7528         arguments here; this is done later.
7529         (ConstructedType.Resolve): New public method to resolve the type
7530         arguments and bind them.
7531
7532 2003-10-21  Martin Baulig  <martin@ximian.com>
7533
7534         * convert.cs: Use `TypeManager.IsValueType' instead of
7535         'type.IsValueType' everywhere.
7536
7537         * typemanager.cs (TypeManager.IsValueType): Return true for type
7538         parameters.  The reason for this is that we need to box a type
7539         parameter when converting it to a reference type.
7540
7541         * cs-parser.jay: Added support for default value expressions.
7542
7543         * generics.cs (DefaultValueExpression): New public class.       
7544
7545 2003-10-17  Martin Baulig  <martin@ximian.com>
7546
7547         * generic.cs (Constraints.Resolve): Take a DecpSpace instead of a
7548         TypeContainer so we can also use this for Interfaces.
7549         (TypeParameter.Resolve): Likewise.
7550
7551         * interface.cs (Interface.DefineType): Added support for generic
7552         interfaces.
7553
7554         * cs-parser.jay: Added support for generic structs and interfaces.
7555
7556 2003-10-17  Martin Baulig  <martin@ximian.com>
7557
7558         * generic.cs (GenericMemberAccess.DoResolve): We can now actually
7559         call generic methods :-)
7560
7561 2003-10-16  Martin Baulig  <martin@ximian.com>
7562
7563         * cs-parser.jay (namespace_or_type_name): Only create a
7564         GenericMemberAccess if we actually have type arguments.
7565
7566 2003-10-13  Martin Baulig  <martin@ximian.com>
7567
7568         * class.cs (Method.Define): If we're a generic method, call
7569         TypeBuilder.DefineGenericMethod () before resolving
7570         the parameters.
7571         (MethodData): Added .ctor which takes an additional MethodBuilder
7572         argument; this is used for generic methods.
7573         (MethodData.Define): Call `builder.SetGenericMethodSignature()' if
7574         we already have a MethodBuilder.
7575
7576 2003-10-10  Martin Baulig  <martin@ximian.com>
7577
7578         * class.cs (Method): Added .ctor which takes a `GenericMethod'
7579         instead of a `DeclSpace'.  This is used for generic methods.
7580
7581         * cs-parser.jay (method_header): Added support for generic
7582         methods; create a `GenericMethod' instance and pass it to the
7583         `Method's .ctor; it'll be used as the `DeclSpace' to lookup
7584         parameters and locals.
7585
7586         * decl.cs (DeclSpace.SetParameterInfo): Removed Location argument
7587         since we already have the location.  Check whether we're a generic
7588         type declaration or a generic method and create the correct type
7589         parameter.
7590
7591         * generic.cs (TypeParameter.DefineMethod): New public method.
7592         (GenericMethod): New public class; derives from DeclSpace and is
7593         used for generic methods.       
7594
7595 2003-10-09  Martin Baulig  <martin@ximian.com>
7596
7597         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
7598         to the .ctor.
7599         (MethodCore.DoDefineParameters): Removed the TypeContainer
7600         argument; use the DeclSpace which was passed to the .ctor instead.
7601         (MethodCore.CheckParameter): Take a DeclSpace instead of a
7602         TypeContainer; we only need a DeclSpace here.
7603
7604 2003-10-09  Martin Baulig  <martin@ximian.com>
7605
7606         * class.cs (MethodData): Added additional `DeclSpace ds' argument
7607         to the .ctor.
7608         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
7609         EmitContext's .ctor.    
7610
7611 2003-10-09  Martin Baulig  <martin@ximian.com>
7612
7613         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
7614         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
7615         AsAccessible(), moved them as well.
7616
7617         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
7618
7619 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
7620
7621         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
7622         generation for >=, as spotted by Paolo, bug 48679.  
7623         Patch from David Waite.
7624
7625         * cs-tokenizer.cs: Add handling for #pragma.
7626
7627         * cs-parser.jay: Allow for both yield and yield return in the
7628         syntax.  The anti-cobolization of C# fight will go on!
7629
7630         * class.cs (TypeBuilder.DefineType): Catch error condition here
7631         (Parent.DefineType erroring out and returning null).
7632
7633         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
7634         coping with enumerations variables, we were mistakenly processing
7635         them as a regular value type instead of built-in types.  Fixes the
7636         bug #48063
7637
7638         * typemanager.cs (IsBuiltinOrEnum): New method.
7639
7640 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
7641
7642         * cs-parser.jay: Upgrade: yield now needs the return clause.
7643
7644 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
7645
7646         * cs-parser.jay : Renamed yyName to yyNames related to jay.
7647
7648 2003-09-29  Martin Baulig  <martin@ximian.com>
7649
7650         * typemanager.cs (TypeManager.GetMethodFlags): Added support for
7651         inflated generic methods.
7652
7653         * generics.cs (ConstructedType): Distinguish between open and
7654         closed constructed types; correctly resolve the arguments.
7655
7656 2003-09-22  Martin Baulig  <martin@ximian.com>
7657
7658         * generic.cs (ConstructedType.ResolveAsTypeCheck): Check whether
7659         all type arguments meet their constraints.
7660
7661 2003-09-19  Martin Baulig  <martin@ximian.com>
7662
7663         * decl.cs (MemberCache.SetupCacheForInterface): Take a
7664         `MemberCache parent' argument.  Normally, an interface doesn't
7665         have a parent type except System.Object, but we use this in gmcs
7666         for generic type parameters.
7667
7668 2003-09-18  Martin Baulig  <martin@ximian.com>
7669
7670         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
7671         on `type.IsInterface'; don't check whether the type has a parent
7672         to determine whether it's an interface.
7673
7674 2003-09-17  Martin Baulig  <martin@ximian.com>
7675
7676         * generic.cs (ConstructedType.ToString): Always use `name' as the
7677         type name.
7678
7679 2003-09-15  Martin Baulig  <martin@ximian.com>
7680
7681         * cs-parser.jay: Fix grammar wrt. type_parameter_constraints.
7682
7683         * generic.cs (Constraints.Resolve): New public method; this is
7684         called to resolve the constraint types and to check whether all
7685         the constraints are correct.
7686         (Constraints.Types): New public property.
7687         (TypeParameter.Resolve): New public method; resolves all the
7688         type's constraints.
7689
7690         * class.cs (TypeContainer.DefineType): Call
7691         TypeParameter.Resolve() before actually defining the type.
7692
7693 2003-09-15  Martin Baulig  <martin@ximian.com>
7694
7695         * class.cs (TypeContainer.DefineType): Added an error flag to
7696         avoid reporting duplicate CS0146's ("class definition is
7697         circular.").
7698
7699         * driver.cs (Driver.MainDriver): Abort if
7700         RootContext.ResolveTree() reported any errors.
7701
7702 2003-09-07  Martin Baulig  <martin@ximian.com>
7703
7704         * report.cs (Error, Warning): Added overloaded versions which take
7705         a `params object[] args' and call String.Format().
7706
7707 2003-09-07  Martin Baulig  <martin@ximian.com>
7708
7709         * decl.cs (DeclSpace..ctor): Don't call
7710         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
7711         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
7712         (DeclSpace.RecordDecl): New method.
7713
7714         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
7715
7716 2003-09-02  Ravi Pratap  <ravi@ximian.com>
7717
7718         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
7719         value attributes to be applied to ParameterBuilders.
7720
7721         * class.cs (MethodCore.LabelParameters): Make static and more
7722         generic so that it can be used from other places - like interface
7723         methods, for instance.
7724
7725         * interface.cs (Interface.Emit): Call LabelParameters before
7726         emitting attributes on the InterfaceMethod.
7727
7728 2003-09-07  Martin Baulig  <martin@ximian.com>
7729
7730         * generic.cs (ConstructedType.ResolveAsTypeStep): Report a CS8217
7731         if the number of type parameters doesn't match.
7732
7733 2003-09-04  Martin Baulig  <martin@ximian.com>
7734
7735         * expression.cs (ComposedCast.ResolveAsTypeStep): Added support
7736         for arrays of generic type params (ie. `!0[]').
7737
7738 2003-09-04  Martin Baulig  <martin@ximian.com>
7739
7740         * class.cs (TypeContainer.AsAccessible): Ignore generic parameters
7741         for the moment.
7742
7743 2003-09-04  Martin Baulig  <martin@ximian.com>
7744
7745         * decl.cs (DeclSpace.LookupGeneric): New method.
7746         (DeclSpace.CheckAccessLevel): Ignore generic parameters for the
7747         moment.
7748
7749         * generic.cs (TypeParameterExpr): Take a TypeParameter as
7750         argument, not just a string.
7751         (TypeParameter.Define): New public method; this is called to
7752         actually define the generic parameter; after this, you can use the
7753         new `Type' property to get the type.
7754
7755 2003-09-04  Martin Baulig  <martin@ximian.com>
7756
7757         * decl.cs (DeclSpace.SetParameterInfo): The `constraints' argument
7758         is now an ArrayList; initialize the result of the `TypeParameters'
7759         property here.
7760         (DeclSpace.GetGenericData): Removed.
7761         (DeclSpace.LookupGeneric): Temporarily removed; we need to
7762         implement this in a different way.
7763         (DeclSpace.GetTypeParameters): Removed; there's now a
7764         `TypeParameters' property.
7765         (DeclSpace.TypeParameters): New public property.
7766
7767         * generic.cs (Constraints): Make this class public.
7768         (TypeParameter): New public class.
7769
7770 2003-09-04  Martin Baulig  <martin@ximian.com>
7771
7772         * decl.cs (DeclSpace.GetTypeParameters): New method to return the
7773         generic parameters.
7774
7775         * class.cs (TypeContainer.DefineType): Call
7776         TypeBuilder.DefineGenericParameter () on all generic parameters if
7777         this is a generic type.
7778
7779 2003-08-28  Martin Baulig  <martin@ximian.com>
7780
7781         * sample-stack.il: Compile this with ilasm: "ilasm /dll
7782         sample-stack.il".
7783
7784         * sample-hello.cs: Compile this with gmcs: "gmcs
7785         /r:sample-stack.dll sample-hello.cs".
7786
7787 2003-08-28  Martin Baulig  <martin@ximian.com>
7788
7789         * generic.cs (ConstructedType.ResolveAsTypeStep): Actually bind
7790         the parameters to the generic type.
7791
7792 2003-08-28  Martin Baulig  <martin@ximian.com>
7793
7794         * cs-tokenizer.cs (parse_less_than): Also allow all builtin types.
7795
7796 2003-08-28  Martin Baulig  <martin@ximian.com>
7797
7798         * cs-parser.jay (opt_type_argument_list): Use
7799         `OP_GENERICS_LT type_arguments OP_GENERICS_GT'.
7800         (primary_expression): Replace `qualified_identifier' with `type_name'.
7801         (type_parameter_list): Use `OP_GENERICS_LT type_parameters OP_GENERICS_GT'.
7802
7803         * cs-tokenizer.cs (is_punct): When reading a `<', invoke a custom
7804         parser to check whether it is syntactically a type parameter list;
7805         return OP_GENERICS_LT/OP_GENERICS_GT instead of OP_LT/OP_GT in
7806         this case.
7807
7808 2003-08-26  Martin Baulig  <martin@ximian.com>
7809
7810         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
7811         resolving aliases; fixes #47927.
7812
7813 2003-08-26  Martin Baulig  <martin@ximian.com>
7814
7815         * statement.cs (Using.DoResolve): This is internally emitting a
7816         try/finally clause, so we need to set ec.NeedExplicitReturn if we
7817         do not always return.  Fixes #47681.
7818
7819 2003-08-26  Martin Baulig  <martin@ximian.com>
7820
7821         * decl.cs (MemberCore): Moved WarningNotHiding(),
7822         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
7823         into MemberBase.
7824         (AdditionResult): Make this nested in DeclSpace.
7825         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
7826         argument; call NamespaceEntry.Define() unless we're nested in a
7827         class or struct.
7828
7829         * namespace.cs (Namespace.DefineName): New public function.  This
7830         is called from DeclSpace's .ctor to add 
7831         (Namespace.Lookup): Include DeclSpaces in the lookup.
7832
7833         * class.cs (Operator): Derive from MemberBase, not MemberCore.
7834
7835         * const.cs (Const): Derive from MemberBase, not MemberCore.     
7836
7837 2003-08-25  Martin Baulig  <martin@ximian.com>
7838
7839         * convert.cs (Convert.ExplicitReferenceConversion): When
7840         converting from an interface type to a class, unbox if the target
7841         type is a struct type.  Fixes #47822.
7842
7843 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7844
7845         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
7846         #47854.
7847
7848 2003-08-22  Martin Baulig  <martin@ximian.com>
7849
7850         * class.cs (TypeManager.DefineType): When defining a nested type,
7851         call DefineType() on our parent; fixes #47801.
7852
7853 2003-08-22  Martin Baulig  <martin@ximian.com>
7854
7855         * class.cs (MethodData.Define): While checking if a method is an
7856         interface implementation, improve the test a bit more to fix #47654.
7857
7858 2003-08-22  Martin Baulig  <martin@ximian.com>
7859
7860         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
7861         correctly; fixes #47722.
7862
7863 2003-08-22  Martin Baulig  <martin@ximian.com>
7864
7865         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
7866         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
7867
7868         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
7869
7870 2003-08-22  Martin Baulig  <martin@ximian.com>
7871
7872         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
7873         can only be assigned in static constructors.  Fixes #47161.
7874
7875 2003-08-22  Martin Baulig  <martin@ximian.com>
7876
7877         Rewrote and improved the flow analysis code.
7878
7879         * flowbranching.cs (FlowBranching): Make this class abstract.
7880         (FlowBranching.CreateBranching): New static function to create a
7881         new flow branching.
7882         (FlowBranchingBlock, FlowBranchingException): New classes.
7883         (FlowBranching.UsageVector.Type): New public readonly field.
7884         (FlowBranching.UsageVector.Breaks): Removed the setter.
7885         (FlowBranching.UsageVector.Returns): Removed the setter.
7886         (FlowBranching.UsageVector): Added Break(), Return(),
7887         NeverReachable() and Throw() methods to modify the reachability.
7888         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
7889         done by FlowBranching.Merge().
7890         (FlowBranching.UsageVector.MergeChild): New method; merges the
7891         merge result into the current vector.
7892         (FlowBranching.Merge): New abstract method to merge a branching.
7893
7894 2003-08-12  Martin Baulig  <martin@ximian.com>
7895
7896         * expression.cs (Indirection.CacheTemporaries): Create the
7897         LocalTemporary with the pointer type, not its element type.
7898
7899 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
7900
7901         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
7902         token was a keyword or not.
7903
7904         Add `error' options where an IDENTIFIER was expected;  Provide
7905         CheckToken and CheckIdentifierToken convenience error reporting
7906         functions. 
7907
7908         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
7909
7910         * decl.cs: Rename `NamespaceEntry Namespace' public field into
7911         NameSpaceEntry NameSpaceEntry.
7912
7913         (LookupInterfaceOrClass): Avoid creating a full qualified name
7914         from namespace and name: avoid doing lookups when we know the
7915         namespace is non-existant.   Use new Tree.LookupByNamespace which
7916         looks up DeclSpaces based on their namespace, name pair.
7917
7918         * driver.cs: Provide a new `parser verbose' to display the
7919         exception thrown during parsing.  This is turned off by default
7920         now, so the output of a failure from mcs is more graceful.
7921
7922         * namespace.cs: Track all the namespaces defined in a hashtable
7923         for quick lookup.
7924
7925         (IsNamespace): New method
7926
7927 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
7928
7929         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
7930         we know that we need to concatenate (full typename can never be
7931         null). 
7932
7933         * class.cs: ditto.
7934
7935         * statement.cs: Use a bitfield;  Do not initialize to null things
7936         which are done by the constructor by default.
7937
7938         * cs-parser.jay: bug fix, parameter was 4, not 3.
7939
7940         * expression.cs: Just use the property;
7941
7942         * statement.cs: No need for GetVariableInfo method.
7943
7944 2003-08-08  Martin Baulig  <martin@ximian.com>
7945
7946         * flowanalysis.cs (FlowReturns): This is now nested in the
7947         `FlowBranching' class.
7948         (MyBitVector): Moved this here from statement.cs.
7949         (FlowBranching.SiblingType): New enum type.
7950         (FlowBranching.CreateSibling): Added `SiblingType' argument.
7951
7952 2003-08-07  Martin Baulig  <martin@ximian.com>
7953
7954         * flowanalysis.cs (FlowBranchingType): This is now nested in the
7955         `FlowBranching' class and called `BranchingType'.
7956
7957 2003-08-07  Martin Baulig  <martin@ximian.com>
7958
7959         * flowanalysis.cs: Moved all the control flow analysis code into
7960         its own file.
7961
7962 2003-08-07  Martin Baulig  <martin@ximian.com>
7963
7964         * assign.cs (Assign.DoResolve): `target' must either be an
7965         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
7966         #37319.
7967
7968 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
7969
7970         * expression.cs (BinaryMethod): This kind of expression is created by the
7971         Binary class if it determines that the operator has to be handled
7972         by a method.
7973
7974         (BinaryDelegate): This kind of expression is created if we are
7975         dealing with a + or - operator on delegates.
7976
7977         (Binary): remove method, argumetns, and DelegateOperator: when
7978         dealing with methods, 
7979
7980         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
7981
7982         * statement.cs (Block): use bitfields for the three extra booleans
7983         we had in use.   Remove unused topblock parameter.
7984
7985         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
7986
7987         * assign.cs: Drop extra unneeded tests.
7988
7989 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
7990
7991         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
7992
7993         * statement.cs (Foreach): Use VariableStorage instead of
7994         LocalBuilders.   
7995
7996         * codegen.cs (VariableStorage): New class used by clients that
7997         require a variable stored: locals or fields for variables that
7998         need to live across yield.
7999
8000         Maybe provide a convenience api for EmitThis+EmitLoad?
8001
8002         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
8003         these bad boys.
8004
8005 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
8006
8007         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
8008         RemapParameterLValue): New methods that are used to turn a
8009         precomputed FieldInfo into an expression like this:
8010
8011                 instance.FieldInfo
8012
8013         The idea is to use this instead of making LocalVariableReference
8014         have more than one meaning.
8015
8016         * cs-parser.jay: Add error production to BASE.
8017
8018         * ecore.cs: Deal with TypeManager.GetField returning null, which
8019         is now a valid return value.
8020
8021         (FieldExprNoAddress): New expression for Fields whose address can
8022         not be taken.
8023
8024         * expression.cs (LocalVariableReference): During the resolve
8025         phases, create new expressions if we are in a remapping context.
8026         Remove code that dealt with remapping here.
8027
8028         (ParameterReference): same.
8029
8030         (ProxyInstance): New expression, like the `This' expression, but
8031         it is born fully resolved.  We know what we are doing, so remove
8032         the errors that are targeted to user-provided uses of `this'.
8033
8034         * statement.cs (Foreach): our variable is now stored as an
8035         Expression;  During resolution, follow the protocol, dont just
8036         assume it will return this.
8037
8038 2003-08-06  Martin Baulig  <martin@ximian.com>
8039
8040         * support.cs (SeekableStreamReader.cs): New public class.
8041
8042         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
8043         SeekableStreamReader instead of the normal StreamReader.
8044
8045 2003-08-04  Martin Baulig  <martin@ximian.com>
8046
8047         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
8048         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
8049         deambiguate casts and delegate invocations.
8050         (parenthesized_expression): Use the new tokens to ensure this is
8051         not a cast of method invocation.
8052
8053         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
8054         when reading a `)' and Deambiguate_CloseParens () was previously
8055         called.
8056
8057         * expression.cs (ParenthesizedExpression): New class.  This is
8058         just used for the CS0075 test.
8059         (Binary.DoResolve): Check for CS0075.   
8060
8061 2003-07-29  Ravi Pratap  <ravi@ximian.com>
8062
8063         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
8064         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
8065         reference comparison.
8066
8067         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
8068         examine the ReturnType for equality - this is necessary in the
8069         cases of implicit and explicit operators whose signature also
8070         includes the return type.
8071
8072 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
8073
8074         * namespace.cs: Cache the result of the namespace computation,
8075         instead of computing it every time.
8076
8077 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
8078
8079         * decl.cs: Use a global arraylist that we reuse over invocations
8080         to avoid excesive memory consumption.  Reduces memory usage on an
8081         mcs compile by one meg (45 average).
8082
8083         * typemanager.cs (LookupTypeReflection): In .NET pointers are
8084         private, work around that.
8085
8086 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
8087
8088         * literal.cs (IntLiteral): Define Zero and One static literals. 
8089
8090         * cs-parser.jay (integer_literal): use static literals to reduce
8091         memory usage for the most used literals (0, 1 and -1).  211kb
8092         reduced in memory usage.
8093
8094         Replace all calls to `new ArrayList' with `new
8095         ArrayList(4)' which is a good average number for most allocations,
8096         and also requires only 16 bytes of memory for its buffer by
8097         default. 
8098
8099         This reduced MCS memory usage in seven megabytes for the RSS after
8100         bootstrapping.
8101
8102 2003-07-28  Ravi Pratap  <ravi@ximian.com>
8103
8104         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
8105         handle params methods the correct way by forming only one
8106         applicable set with params and normal methods in them. Earlier we
8107         were looking at params methods only if we found no normal methods
8108         which was not the correct thing to do.
8109
8110         (Invocation.BetterFunction): Take separate arguments indicating
8111         when candidate and the best method are params methods in their
8112         expanded form.
8113
8114         This fixes bugs #43367 and #46199.
8115
8116         * attribute.cs: Documentation updates.
8117
8118         (CheckAttribute): Rename to CheckAttributeTarget.
8119         (GetValidPlaces): Rename to GetValidTargets.
8120
8121         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
8122         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
8123
8124         Fixes bug #44468.
8125
8126 2003-07-28  Miguel de Icaza  <miguel@ximian.com>
8127
8128         * codegen.cs: Compute IsGeneric correctly.
8129
8130         * cs-parser.jay: Introduce OP_GENERIC_LT for the grammar ambiguity
8131         resolution. 
8132
8133         Bring back (temporarily) OP_LEFT_SHIFT, OP_RIGHT_SHIFT,
8134         OP_SHIFT_RIGHT_ASSIGN, OP_SHIFT_LEFT_ASSIGN.  There were too many
8135         regressions, and I was chasing more bugs than I required.
8136
8137         * interface.cs: Use expressions for base type names (like classes
8138         and structs have been doing for a while now), and resolve that.
8139         This patch should probably go into head as well.
8140
8141         This makes it one less user of FindType.
8142
8143 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
8144
8145         This compiler can not self host currently.  Need to fix that.
8146         
8147         * Makefile: compile to `gmcs.exe'
8148
8149         * driver.cs: Turn on v2 by default on gmcs.
8150
8151         * generic.cs (ConstructedType): Does no longer take a container
8152         type argument;  That will be taken care of later.
8153
8154         (ConstructedType.DoResolve, ConstructedType.ResolveAsTypeStep):
8155         Use SimpleName to resolve for now, so we can continue the work on
8156         the parser, until we get Type.GetType that understands generics.
8157
8158         (ConstructedType.ToString): Implement
8159
8160         (TypeArguments.Resolve): Resolve the child expressions as types. 
8161         
8162         * cs-parser.jay: Rename interface_constraints to
8163         type_parameter_constraints
8164
8165         (namespace_or_type_name): Only use constructed types for the basic
8166         construction, we will deal with identifier<...> later.
8167
8168         (type/type_name): No longer call DecomposeQI, as
8169         namespace_or_type_name is always decoded now.
8170         
8171 2003-07-22  Ravi Pratap  <ravi@ximian.com>
8172
8173         * expression.cs (Invocation.OverloadResolve): Follow the spec more
8174         closely: we eliminate methods in base types when we have an
8175         applicable method in a top-level type.
8176
8177         Please see section 14.5.5.1 for an exact description of what goes
8178         on. 
8179
8180         This fixes bug #45127 and a host of other related to corlib compilation.
8181
8182         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
8183         array is the method corresponding to the top-level type (this is
8184         because of the changes made to icall.c) so we change this
8185         accordingly.
8186
8187         (MethodGroupExpr.Name): This too.
8188
8189         * typemanager.cs (GetElementType): New method which does the right
8190         thing when compiling corlib. 
8191
8192         * everywhere: Make use of the above in the relevant places.
8193
8194 2003-07-22  Martin Baulig  <martin@ximian.com>
8195
8196         * cs-parser.jay (invocation_expression): Moved
8197         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
8198         `cast_expression', but create a InvocationOrCast which later
8199         resolves to either an Invocation or a Cast.
8200
8201         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
8202         method; call this before EmitStatement() to make sure that this
8203         expression can be used as a statement.
8204
8205         * expression.cs (InvocationOrCast): New class; resolves to either
8206         an Invocation or a Cast.
8207
8208         * statement.cs (StatementExpression): Call ResolveStatement() on
8209         the ExpressionStatement before emitting it.
8210
8211 2003-07-21  Martin Baulig  <martin@ximian.com>
8212
8213         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
8214         `ref' and `out' attributes match; fixes #46220.
8215         (MemberAccess.ResolveMemberAccess): You can't reference a type
8216         through an expression; fixes #33180.
8217         (Indexers.GetIndexersForType): Don't return the indexers from
8218         interfaces the class implements; fixes #46502.
8219
8220 2003-07-21  Martin Baulig  <martin@ximian.com>
8221
8222         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
8223         CS0661 checks; fixes bug #30442.
8224
8225 2003-07-21  Martin Baulig  <martin@ximian.com>
8226
8227         * decl.cs (AdditionResult): Added `Error'.
8228
8229         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
8230
8231         * typemanager.cs (TypeManager.ChangeType): Catch exceptions; makes
8232         cs0031.cs actually work.
8233
8234  2003-07-20  Miguel de Icaza  <miguel@ximian.com>
8235  
8236         * cs-parser.jay (namespace_name): do not use
8237         namespace_or_type_name, use qualified_identifier, because
8238         namespace_or_type_name will soon return a composed expression
8239         instead of a string.
8240  
8241         (namespace_or_type_name): Instead of returning a string, now this
8242         production returns an expression.
8243  
8244         * codegen.cs (EmitContext): Setup IsGeneric property based on
8245         whether our DeclSpace is generic, our the method is generic.
8246  
8247         * modifier.cs (Modifiers.METHOD_GENERIC): New definition, use if
8248         the method is generic.
8249  
8250         * cs-parser.jay (type_arguments, opt_type_argument_list,
8251         type_parameters, type_parameter_list, opt_type_parameter_list,
8252         type_parameter,, opt_type_parameter_constraints_clauses,
8253         type_parameter_constraints_clauses,
8254         type_parameter_constraint_clause, type_parameter_constraint,
8255         interface_constraints): Add new production
8256  
8257         * decl.cs (DeclSpace): IsGeneric, flag to track whether this
8258         DeclSpace is generic or not.
8259  
8260         (DeclSpace.SetParameterInfo): New routine, used to set the
8261         parameter info for a type.
8262  
8263         (DeclSpace.LookupGeneric): Lookups a name, and if it is a generic,
8264         returns a GenericTypeExpr
8265  
8266         * ecore.cs (SimpleName.ResolveAsTypeStep): If our container is
8267         generic, lookup the generic argument.
8268  
8269         * attribute.cs: Do not allow TypeParameterExpressions in
8270         Attributes.
8271  
8272         * class.cs: Do not allow the Main method to be defined in a
8273         Generic container.
8274  
8275         * expression.cs (SizeOf): Do not allow generic types to be used as
8276         arguments to sizeof.
8277  
8278         * typemanager.cs (IsGeneric): Wrapper for Reflection when we have
8279         it: whether a type is generic or not.  Only works for types we are
8280         currently building for now.
8281         
8282 2003-07-20  Martin Baulig  <martin@ximian.com>
8283
8284         * namespace.cs: Fixed that bug which caused a crash when compiling
8285         the debugger's GUI.
8286
8287 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
8288
8289         * typemanager.cs (LookupTypeReflection): Never expose types which
8290         are NotPublic, NestedPrivate, NestedAssembly, or
8291         NestedFamANDAssem.  We used to return these, and later do a check
8292         that would report a meaningful error, but the problem is that we
8293         would not get the real match, if there was a name override.
8294
8295 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
8296
8297         * namespace.cs (Namespace, Name): Do not compute the namespace
8298         name dynamically, compute it in the constructor.  This reduced
8299         memory usage by 1697 KB.
8300
8301         * driver.cs: Use --pause to pause at the end.
8302
8303 2003-07-17  Peter Williams  <peter@newton.cx>
8304
8305         * Makefile: Change the name of the test target so that it doesn't
8306         conflict with the recursive test target.
8307
8308 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
8309
8310         * expression.cs (LocalVariableReference.Emit, EmitAssign,
8311         AddressOf): Do not use EmitThis, that was wrong, use the actual
8312         this pointer.
8313
8314 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
8315
8316         * class.cs (MethodData.Define): While checking if a method is an
8317         interface implementation, improve the test: If we are not public
8318         (use new test here: use the computed MethodAttributes directly,
8319         instead of the parsed modifier flags) check if the `implementing'
8320         method comes from an interface or not.
8321
8322         * pending.cs (VerifyPendingMethods): Slightly better error
8323         message.
8324
8325         * makefile: add test target that does the mcs bootstrap.
8326
8327 2003-07-16  Ravi Pratap  <ravi@ximian.com>
8328
8329         * interface.cs (Define): Do nothing here since there are no
8330         members to populate etc. Move the attribute emission out of here
8331         since this was just totally the wrong place to put it. Attribute
8332         application happens during the 'Emit' phase, not in the 'Define'
8333         phase.
8334
8335         (Emit): Add this method and move the attribute emission here
8336
8337         * rootcontext.cs (EmitCode): Call the Emit method on interface
8338         types too.
8339
8340 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
8341
8342         * expression.cs (OverloadResolve): Report error only if Location
8343         is not 'Null' which means that there was a probe going on.
8344
8345 2003-07-14  Martin Baulig  <martin@ximian.com>
8346
8347         * expression.cs (ConditionalLogicalOperator): New public class to
8348         implement user defined conditional logical operators.
8349         This is section 14.11.2 in the spec and bug #40505.
8350
8351 2003-07-14  Martin Baulig  <martin@ximian.com>
8352
8353         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
8354
8355 2003-07-14  Martin Baulig  <martin@ximian.com>
8356
8357         * codegen.cs (EmitContext.InFixedInitializer): New public field.
8358
8359         * ecore.cs (IVariable.VerifyFixed): New interface method.
8360
8361         * expression.cs (Unary.ResolveOperator): When resolving the `&'
8362         operator, check whether the variable is actually fixed.  Fixes bug
8363         #36055.  Set a variable definitely assigned when taking its
8364         address as required by the spec.
8365
8366         * statement.cs (LocalInfo.IsFixed): New field.
8367         (LocalInfo.MakePinned): Set `IsFixed' to true.
8368
8369 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
8370
8371         * attribute.cs (Attribute.Resolve): While doing a Member lookup
8372         for .ctors, ensure that we only ask for members declared in the
8373         attribute type (BindingFlags.DeclaredOnly).
8374
8375         Fixes bug #43632.
8376
8377         * expression.cs (Error_WrongNumArguments): Report error 1501
8378         correctly the way CSC does.
8379
8380 2003-07-13  Martin Baulig  <martin@ximian.com>
8381
8382         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
8383         lookup on the fully qualified name, to make things like "X.X" work
8384         where "X.X" is a fully qualified type name, but we also have a
8385         namespace "X" in the using list.  Fixes #41975.
8386
8387 2003-07-13  Martin Baulig  <martin@ximian.com>
8388
8389         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
8390         function. If we're a CompoundAssign, we need to create an embedded
8391         CompoundAssign, not an embedded Assign.
8392         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
8393         Fixes #45854.
8394
8395 2003-07-13  Martin Baulig  <martin@ximian.com>
8396
8397         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
8398         work to fix bug #46088.
8399
8400 2003-07-13  Ravi Pratap <ravi@ximian.com>
8401
8402         * class.cs (Operator.Emit): Do not emit attributes here - it is
8403         taken care of by the Method class that we delegate too. This takes
8404         care of bug #45876.
8405
8406 2003-07-10  Martin Baulig  <martin@ximian.com>
8407
8408         * expression.cs (TypeOfVoid): New class.
8409         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
8410
8411 2003-07-10  Martin Baulig  <martin@ximian.com>
8412
8413         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
8414         bug #35957.
8415
8416 2003-07-10  Martin Baulig  <martin@ximian.com>
8417
8418         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
8419         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
8420
8421         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
8422
8423         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
8424
8425 2003-07-10  Martin Baulig  <martin@ximian.com>
8426
8427         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
8428         of decimal.  Fixes #42850.
8429
8430         NOTE: I also fixed the created byte blob, but this doesn't work on
8431         the MS runtime and csc never produces any byte blobs for decimal
8432         arrays.
8433
8434 2003-07-10  Martin Baulig  <martin@ximian.com>
8435
8436         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
8437         structs; fixes #32068.
8438         (Block.AddChildVariableNames): Fixed #44302.
8439
8440 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8441
8442         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
8443
8444 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
8445
8446         * attribute.cs: And this test is onger needed.
8447
8448 2003-07-08  Martin Baulig  <martin@ximian.com>
8449
8450         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
8451         inaccessible types.  Fixes #36313.
8452
8453         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
8454
8455         * namespace.cs (NamespaceEntry): Create implicit entries for all
8456         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
8457         implicit entries for N1.N2 and N1.
8458
8459 2003-07-08  Martin Baulig  <martin@ximian.com>
8460
8461         Rewrote the handling of namespaces to fix a lot of the issues
8462         wrt. `using' aliases etc.
8463
8464         * namespace.cs (Namespace): Splitted this class into a
8465         per-assembly `Namespace' and a per-file `NamespaceEntry'.
8466
8467         * typemanager.cs (TypeManager.IsNamespace): Removed.
8468         (TypeManager.ComputeNamespaces): Only compute namespaces from
8469         loaded assemblies here, not the namespaces from the assembly we're
8470         currently compiling.
8471
8472 2003-07-08  Martin Baulig  <martin@ximian.com>
8473
8474         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
8475
8476 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
8477
8478         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
8479         already fixed it.  
8480
8481         I thought about the memory savings here, but LookupTypeReflection
8482         is used under already very constrained scenarios.  Compiling
8483         corlib or mcs only exposes one hit, so it would not really reduce
8484         any memory consumption.
8485
8486 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8487
8488         * typemanager.cs: fixes bug #45889 by only adding public types from
8489         other assemblies to the list of known types.
8490
8491 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
8492
8493         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
8494         on the type we resolved.
8495
8496 2003-07-05  Martin Baulig  <martin@ximian.com>
8497
8498         * pending.cs (PendingImplementation.ParentImplements): Don't
8499         create the proxy if the parent is abstract.
8500
8501         * class.cs (TypeContainer.DefineIndexers): Process explicit
8502         interface implementations first.  Fixes #37714.
8503
8504 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
8505
8506         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
8507         defined recursively;  but since we modify the input parameters
8508         (left is set to `this' temporarily), we reset this value if the
8509         left_is_explicit is false, which gives the original semantics to
8510         the code.  
8511
8512         * literal.cs (NullPointer): new class used to represent a null
8513         literal in a pointer context.
8514
8515         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
8516         type is a pointer, use a NullPointer object instead of a
8517         NullLiteral.   Closes 43687
8518
8519         (ExplicitConversion): Convert pointer values using
8520         the conv opcode to the proper type.
8521
8522         * ecore.cs (New): change ValueTypeVariable property into a method,
8523         that returns whether the valuetype is suitable for being used.
8524
8525         * expression.cs (Binary.DoNumericPromotions): Only return if we
8526         the int constant was a valid uint, and we can return both left and
8527         right as uints.  If not, we continue processing, to trigger the
8528         type conversion.  This fixes 39018.
8529
8530         * statement.cs (Block.EmitMeta): During constant resolution, set
8531         the CurrentBlock property on the emitcontext, so that we resolve
8532         constants propertly.
8533
8534 2003-07-02  Martin Baulig  <martin@ximian.com>
8535
8536         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
8537         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
8538
8539         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
8540         than emitting it here.
8541
8542         * statement.cs: Fixed some more flow analysis bugs.
8543
8544 2003-07-02  Martin Baulig  <martin@ximian.com>
8545
8546         * class.cs (MethodData.Define): When implementing interface
8547         methods, set Final unless we're Virtual.
8548
8549         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
8550         check work for interface methods.
8551
8552 2003-07-01  Martin Baulig  <martin@ximian.com>
8553
8554         * ecore.cs (EmitContext.This): Replaced this property with a
8555         GetThis() method which takes a Location argument.  This ensures
8556         that we get the correct error location for a CS0188.
8557
8558 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
8559
8560         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
8561         ImplicitStandardConversion.
8562
8563         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
8564
8565 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
8566
8567         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
8568         optimization.
8569
8570 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
8571
8572         * class.cs (Constructor.Define): Turn off initlocals for unsafe
8573         constructors.
8574
8575         (MethodData.Define): Turn off initlocals for unsafe methods.
8576
8577 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
8578
8579         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
8580         complete;  Fixes #37521.
8581
8582         * delegate.cs: Use Modifiers.TypeAttr to compute the
8583         TypeAttributes, instead of rolling our own.  This makes the flags
8584         correct for the delegates.
8585
8586 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
8587
8588         * class.cs (Constructor.Define): Set the private flag for static
8589         constructors as well.
8590
8591         * cs-parser.jay (statement_expression): Set the return value to
8592         null, to avoid a crash when we catch an error.
8593
8594 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
8595
8596         * cs-parser.jay: Applied patch from Jackson that adds support for
8597         extern and unsafe modifiers to destructor declarations.
8598
8599         * expression.cs: Report error 21 if the user is trying to index a
8600         System.Array.
8601
8602         * driver.cs: Add an error message, suggested by the bug report.
8603
8604         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
8605         if we do not have a ": this ()" constructor initializer.  Fixes 45149
8606
8607 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
8608
8609         * namespace.cs: Add some information to reduce FAQs.
8610
8611 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
8612
8613         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
8614         underlying enumeration types.  Fixes #43915.
8615
8616         * expression.cs: Treat ushort/short as legal values to be used in
8617         bitwise operations.
8618
8619 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
8620
8621         * delegate.cs: transfer custom attributes for paramenters from
8622         the delegate declaration to Invoke and BeginInvoke.
8623
8624 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
8625
8626         * attribute.cs: handle custom marshalers and emit marshal info
8627         for fields, too.
8628
8629 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
8630
8631         * makefile.gnu: Added anonymous.cs to the compiler sources.
8632
8633 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
8634
8635         * iterators.cs: Change the name of the proxy class to include two
8636         underscores.
8637
8638         * cs-parser.jay: Update grammar to include anonymous methods.
8639
8640         * anonymous.cs: new file.
8641
8642 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
8643
8644         * class.cs (Field.Define): Add missing test for pointers and
8645         safety. 
8646
8647 2003-05-27  Ravi Pratap  <ravi@ximian.com>
8648
8649         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
8650         we use the stobj opcode.
8651
8652         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
8653         since it wasn't the correct fix. 
8654
8655         It still is puzzling that we are required to use stobj for IntPtr
8656         which seems to be a ValueType.
8657
8658 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
8659
8660         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
8661         during regular simple name resolution.   Now, the trick is that
8662         instead of returning for processing the simplename, we do a
8663         TypeManager.LookupType (ie, a rooted lookup as opposed to a
8664         contextual lookup type).   If a match is found, return that, if
8665         not, return for further composition.
8666
8667         This fixes long-standing 30485.
8668
8669         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
8670         using the address to initialize an object, do an Stobj instead of
8671         using the regular Stelem.
8672
8673         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
8674         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
8675         Because if we are a BaseIndexerAccess that value will be true.
8676         Fixes 43643.
8677
8678         * statement.cs (GotoCase.Resolve): Return after reporting an
8679         error, do not attempt to continue. 
8680
8681         * expression.cs (PointerArithmetic.Emit): If our operand is a
8682         long, convert our constants to match the operand before
8683         multiplying.  Convert to I type before adding.   Fixes 43670.
8684
8685 2003-05-14  Ravi Pratap  <ravi@ximian.com>
8686
8687         * enum.cs (ImplicitConversionExists) : Rename to
8688         ImplicitEnumConversionExists to remove ambiguity. 
8689
8690         * ecore.cs (NullCast): New type of cast expression class which
8691         basically is very similar to EmptyCast with the difference being
8692         it still is a constant since it is used only to cast a null to
8693         something else
8694         (eg. (string) null)
8695
8696         * convert.cs (ImplicitReferenceConversion): When casting a null
8697         literal, we return a NullCast.
8698
8699         * literal.cs (NullLiteralTyped): Remove - I don't see why this
8700         should be around anymore.
8701
8702         The renaming (reported was slightly wrong). Corrections:
8703
8704         ConvertImplicitStandard -> ImplicitConversionStandard
8705         ConvertExplicitStandard -> ExplicitConversionStandard
8706
8707         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
8708         before passing them in !
8709
8710         * convert.cs (ImplicitConversionStandard): When comparing for
8711         equal expr and target types, ensure that expr is not a
8712         NullLiteral.
8713
8714         In general, we must not be checking (expr_type ==
8715         target_type) in the top level conversion methods
8716         (ImplicitConversion, ExplicitConversion etc). This checking is
8717         done in the methods that they delegate to.
8718
8719 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
8720
8721         * convert.cs: Move Error_CannotConvertType,
8722         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
8723         ImplicitNumericConversion, ImplicitConversionExists,
8724         ImplicitUserConversionExists, StandardConversionExists,
8725         FindMostEncompassedType, FindMostSpecificSource,
8726         FindMostSpecificTarget, ImplicitUserConversion,
8727         ExplicitUserConversion, GetConversionOperators,
8728         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
8729         TryImplicitIntConversion, Error_CannotConvertImplicit,
8730         ConvertImplicitRequired, ConvertNumericExplicit,
8731         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
8732         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
8733         its own file.
8734
8735         Perform the following renames:
8736
8737         StandardConversionExists -> ImplicitStandardConversionExists
8738         ConvertImplicit -> ImplicitConversion
8739         ConvertImplicitStandard -> ImplicitStandardConversion
8740         TryImplicitIntConversion -> ImplicitIntConversion
8741         ConvertImplicitRequired -> ImplicitConversionRequired
8742         ConvertNumericExplicit -> ExplicitNumericConversion
8743         ConvertReferenceExplicit -> ExplicitReferenceConversion
8744         ConvertExplicit -> ExplicitConversion
8745         ConvertExplicitStandard -> ExplicitStandardConversion
8746
8747 2003-05-19  Martin Baulig  <martin@ximian.com>
8748
8749         * statement.cs (TypeInfo.StructInfo): Made this type protected.
8750         (TypeInfo): Added support for structs having structs as fields.
8751
8752         * ecore.cs (FieldExpr): Implement IVariable.
8753         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
8754         VariableInfo for the field.
8755
8756 2003-05-18  Martin Baulig  <martin@ximian.com>
8757
8758         * expression.cs (This.DoResolve): Report a CS0027 if we're
8759         emitting a field initializer.
8760
8761 2003-05-18  Martin Baulig  <martin@ximian.com>
8762
8763         * expression.cs (This.ResolveBase): New public function.
8764         (This.DoResolve): Check for CS0188.
8765
8766         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
8767         This.Resolve().
8768
8769         * ecore.cs (MethodGroupExpr.DoResolve): Set the
8770         `instance_expression' to null if we don't have any non-static
8771         methods.
8772
8773 2003-05-18  Martin Baulig  <martin@ximian.com>
8774
8775         Reworked the way how local variables and parameters are handled by
8776         the flow analysis code.
8777
8778         * statement.cs (TypeInfo, VariableMap): New public classes.
8779         (VariableInfo): New public class.  This is now responsible for
8780         checking whether a variable has been assigned.  It is used for
8781         parameters and local variables.
8782         (Block.EmitMeta): Take the InternalParameters as argument; compute
8783         the layout of the flow vectors here.
8784         (Block.LocalMap, Block.ParameterMap): New public properties.
8785         (FlowBranching): The .ctor doesn't get the InternalParameters
8786         anymore since Block.EmitMeta() now computes the layout of the flow
8787         vector.
8788         (MyStructInfo): This class is now known as `StructInfo' and nested
8789         in `TypeInfo'; we don't access this directly anymore.
8790
8791         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
8792         property and removed IsAssigned(), IsFieldAssigned(),
8793         SetAssigned() and SetFieldAssigned(); we now call them on the
8794         VariableInfo so we don't need to duplicate this code everywhere.
8795
8796         * expression.cs (ParameterReference): Added `Block block' argument
8797         to the .ctor.
8798         (LocalVariableReference, ParameterReference, This): The new
8799         VariableInfo class is now responsible for all the definite
8800         assignment stuff.
8801
8802         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
8803         IsParameterAssigned, SetParameterAssigned): Removed.
8804
8805 2003-05-18  Martin Baulig  <martin@ximian.com>
8806
8807         * typemanager.cs (InitCoreTypes): Try calling
8808         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
8809         the 3-args-version.  Corlib now also needs our `void_type'.
8810         (GetMethod): Added overloaded version which takes an optional
8811         `bool report_errors' to allow lookups of optional methods.
8812
8813 2003-05-12  Martin Baulig  <martin@ximian.com>
8814
8815         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
8816         only used for locals and not for parameters.
8817
8818 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
8819
8820         * support.cs (InternalParameters.ParameterType): Return the
8821         ExternalType of the parameter.
8822
8823         * parameter.cs (Parameter.ExternalType): drop the two arguments,
8824         they were unused.
8825
8826 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
8827
8828         * class.cs (MethodData.Define): Do not set the `newslot' on
8829         interface members, if they are also flagged as "override".
8830
8831         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
8832         better code for ++i and i++.  This only works for static fields
8833         and local variables.
8834
8835         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
8836         want to pull the DeclSpace out of the builder_to_declspace instead
8837         of the TypeBuilder (like in TypeContainer.FindMembers).
8838
8839         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
8840         instead of LookupTypeContainer.  Fixes the crash on .NET for
8841         looking up interface members.
8842
8843         * const.cs: Create our own emit context during the Definition
8844         stage, so that constants are evaluated in the proper context, when
8845         a recursive definition happens.
8846
8847 2003-05-11  Martin Baulig  <martin@ximian.com>
8848
8849         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
8850         new block for a switch section.
8851         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
8852         the adding/lookup in the switch block.  Fixes #39828.
8853
8854 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
8855
8856         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
8857         functionality: I needed to convert the data after I had performed
8858         the add/sub operation into the operands type size.
8859
8860         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
8861         pass the type for the box operation, otherwise the resulting
8862         object would have been of type object.
8863
8864         (BoxedCast): Add constructor to specify the type to box as.
8865
8866 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
8867
8868         * iterators.cs: I was reusing the `count' variable inadvertently,
8869         take steps to not allow this to happen.
8870
8871 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
8872
8873         * attribute.cs (Attribute.Resolve): Params attributes are encoded
8874         by creating an array at the point where the params starts and
8875         putting all those arguments there, then adjusting the size of the
8876         array.
8877
8878 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
8879
8880         * expression.cs (New.AddressOf): Implement interface
8881         IMemoryLocation.  This is used when the `new' operator is used in
8882         the context of an invocation to a method on a value type.
8883
8884         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
8885         example. 
8886
8887         * namespace.cs: Also check the using aliases here.
8888
8889         * driver.cs: Move the test for using validity after the types have
8890         been entered, so we do a single pass that also includes the using
8891         aliases. 
8892
8893         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
8894         in the regular case.   CreateSiblingForFinally is doing extra
8895         error checking.
8896
8897         * attribute.cs (GetAttributeArgumentExpression): Store the result
8898         on an out value, and use the return value to indicate failure
8899         instead of using null (which is a valid return for Constant.GetValue).
8900
8901         * statement.cs: Perform the analysis flow for the increment
8902         portion after the statement, because this will be the real flow of
8903         execution.  Fixes #42385
8904
8905         * codegen.cs (EmitContext.EmitArgument,
8906         EmitContext.EmitStoreArgument): New helper functions when the
8907         RemapToProxy flag is set.
8908
8909         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
8910         function.
8911
8912         Add support for remapping parameters. 
8913
8914         * iterators.cs: Propagate parameter values;  Store parameter
8915         values in the proxy classes.
8916
8917 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
8918
8919         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
8920         need a proxy reference;  I do not know what I was thinking
8921
8922         * cs-parser.jay (constructor_initializer): catch another error,
8923         and display nice message.
8924
8925         (field_declaration): catch void field declaration
8926         to flag a better error. 
8927
8928         * class.cs (MemberBase.CheckBase): Report an error instead of a
8929         warning if a new protected member is declared in a struct. 
8930         (Field.Define): catch the error of readonly/volatile.
8931
8932         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
8933
8934         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
8935         volatile variable is taken
8936
8937 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
8938
8939         * statement.cs (Fixed.Resolve): Report an error if we are not in
8940         an unsafe context.
8941
8942 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
8943
8944         * typemanager.cs: reuse the code that handles type clashes for
8945         delegates and enumerations.
8946
8947         * class.cs (Report28): Always report.
8948
8949         * expression.cs (EncodeAsAttribute): Allow nulls here.
8950
8951 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
8952
8953         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
8954         the functionality for testing whether an expression is valid for
8955         an attribute here.  Also handle the case of arrays of elements
8956         being stored. 
8957
8958         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
8959         encoding a linear array into an array of objects that are suitable
8960         to be passed to an CustomAttributeBuilder.
8961
8962         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
8963
8964         * ecore.cs: (FieldExpr): Handle field remapping here.
8965
8966         * iteratators.cs: Pass the instance variable (if the method is an
8967         instance method) to the constructors, so we can access the field
8968         variables on the class.
8969
8970         TODO: Test this with structs.  I think the THIS variable on
8971         structs might have to be a pointer, and not a refenrece
8972
8973 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
8974
8975         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
8976         local variables to fields in a proxy class.
8977
8978         * iterators.cs (PopulateProxy): Rename our internal fields to
8979         <XXX>.  
8980         Create a <THIS> field if we are an instance method, so we can
8981         reference our parent container variables.
8982         (MapVariable): Called back from the EmitContext code to enter a
8983         new variable to field mapping into the proxy class (we just create
8984         a FieldBuilder).
8985
8986         * expression.cs
8987         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
8988         for using the remapped locals to fields.
8989
8990         I placed the code here, because that gives the same semantics to
8991         local variables, and only changes the Emit code.
8992
8993         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
8994         statements inside iterators.
8995         (VariableInfo): Add a FieldBuilder for the cases when we are
8996         remapping local variables to fields in a proxy class
8997
8998         * ecore.cs (SimpleNameResolve): Avoid testing two times for
8999         current_block != null.
9000
9001         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
9002         not cope with strings, as it has been moved to the
9003         TableSwitchEmit.  Fixed bug in switch generation.
9004
9005         * expression.cs (New.DoResolve): Provide more context for the user
9006         when reporting an error.
9007
9008         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
9009         pointers. 
9010
9011         * expression.cs (MemberAccess.DoResolve): When we get a type back,
9012         check the permissions for it.  Note than in a type-resolution
9013         context the check was already present in DeclSpace.ResolveType,
9014         but was missing from the MemberAccess.
9015
9016         (ArrayCreation.CheckIndices): warn if the user has
9017         more nested levels of expressions, but there are no more
9018         dimensions specified.  Avoids crash on bug 41906.
9019
9020 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
9021
9022         * statement.cs (Block): replace Implicit bool, for a generic
9023         flags.   
9024         New flag: `Unchecked'.  This is used during the EmitMeta phase
9025         (which is out-of-line with the regular Resolve/Emit process for a
9026         statement, as this is done ahead of time, but still gets a chance
9027         to call constant resolve).
9028
9029         (Block.Flags): new enum for adding a new flag.
9030
9031         (Block.EmitMeta): track the state of unchecked.
9032
9033         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
9034         to enable constant resolution to work there as well.
9035
9036 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
9037
9038         * typemanager.cs (ienumerable_type): Also look up
9039         System.Collections.IEnumerable. 
9040
9041 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
9042
9043         TODO: Test more than one conditional per method.
9044
9045         * class.cs (Indexer.Define): Report the location where the user is
9046         referencing the unsupported feature.
9047
9048         (MethodData): Overload the use of `conditionals' to
9049         minimize the creation of needless ArrayLists.   This saves roughly
9050         212kb on my machine.
9051
9052         (Method): Implement the new IIteratorContainer interface.
9053         (Method.SetYields): Implement the method by setting the ModFlags
9054         to contain METHOD_YIELDS.
9055
9056         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
9057         which just got set to null.
9058
9059         * iterators.cs: New file.
9060
9061         (Yield, YieldBreak): New statements.
9062
9063         * statement.cs (Return.Resolve): Flag an error if we are used in
9064         an iterator method.
9065
9066         * codegen.cs (InIterator): New flag set if the code is being
9067         compiled in an iterator method.
9068
9069         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
9070         internal modifier, and we just use it to avoid adding extra
9071         fields, as this is seldom used.  
9072
9073         * cs-parser.jay: Add yield_statement (yield and yield break).
9074
9075         * driver.cs: New flag -v2 to turn on version 2 features. 
9076
9077         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
9078         hashtable when v2 is enabled.
9079
9080 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
9081
9082         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
9083         there is already a namespace defined with this name.
9084
9085         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
9086         people upgraded their corlibs.
9087
9088         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
9089         always use fully qualified types, no need to use the compiler
9090         front end.
9091
9092         (TypeManager.IsNamespace): Use binarysearch.
9093
9094         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
9095         AddDelegate): I did not quite use the new IsValid API properly: I
9096         have to pass the short-name and the fullname.  I was passing only
9097         the basename instead of the fullname sometimes. 
9098
9099         (TypeContainer.DefineType): call NamespaceClash.
9100
9101         * interface.cs (Interface.DefineType): use NamespaceClash before
9102         defining the type.
9103
9104         * delegate.cs (Delegate.DefineType): use NamespaceClash before
9105         defining the type.
9106
9107         * enum.cs: (Enum.DefineType): use NamespaceClash before
9108         defining the type.
9109
9110         * typemanager.cs (: 3-line patch that gives us some tasty 11%
9111         speed increase.  First, use the negative_hits cache when we get a
9112         negative.  Second, add the type with its full original name
9113         instead of the new . and + encoded name (reflection uses + to
9114         separate type from a nested type).  Use LookupTypeReflection
9115         directly which bypasses the type->name hashtable (that we already
9116         know does not contain the type.
9117
9118         * decl.cs (DeclSpace.ResolveTypeExpr): track the
9119         location/container type. 
9120
9121         * driver.cs: When passing utf8, use directly the UTF8Encoding.
9122
9123 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
9124
9125         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
9126
9127         * delegate.cs (NewDelegate.Resolve): Test whether an instance
9128         method is being referenced in the method group from a static
9129         context, and report error 120 if so.
9130
9131         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
9132         Error118. 
9133
9134         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
9135         is created, we create the A namespace).
9136
9137         * cs-parser.jay: A namespace also introduces a DeclarationFound.
9138         Fixes #41591
9139
9140 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
9141
9142         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
9143         invocation to ModuleBuilder.GetType with the same values will
9144         return a new type instance, so we need to cache its return
9145         values. 
9146
9147         * expression.cs (Binary.ResolveOperator): Only allow the compare
9148         operators on enums if they are of the same type.
9149
9150         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
9151         types of ValueType on their own case.  Before we were giving them
9152         the same treatment as objects.
9153
9154         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
9155         fullname.  Short name is used to compare against container name.
9156         Fullname is used to check against defined namespace names.
9157
9158         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
9159         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
9160
9161         (Method.CheckBase): Call parent.
9162         (MemberBase.CheckBase): Check for protected members on sealed
9163         classes.
9164         (PropertyBase.CheckBase): Call parent.
9165         (Field.Define): Call parent.
9166
9167         * report.cs: Negative error codes are now mapped to 8000 - code,
9168         so that the display is render more nicely.
9169
9170         * typemanager.cs: Do not use try/catch, instead report a regular
9171         error. 
9172
9173         (GetPointerType, GetReferenceType): These methods provide
9174         mechanisms to obtain the T* and T& from a T.  We had the code
9175         previously scattered around the code base, and it also used
9176         TypeManager.LookupType that would go through plenty of caches.
9177         This one goes directly to the type source.
9178
9179         In some places we did the Type.GetType followed by
9180         ModuleBuilder.GetType, but not in others, so this unifies the
9181         processing as well.
9182
9183         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
9184         statements now that we have namespace information.
9185
9186         * typemanager.cs (IsNamespace): New method, returns whether the
9187         string presented is a namespace or not.
9188
9189         (ComputeNamespaces): New public entry point, computes the list of
9190         available namespaces, using the GetNamespaces API call in Mono, or
9191         the slower version in MS.NET.   
9192
9193         Now before we start the semantic analysis phase, we have a
9194         complete list of namespaces including everything that the user has
9195         provided.
9196
9197         Deleted old code to cache namespaces in .nsc files.
9198
9199 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
9200
9201         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
9202         class/struct location definition Location for the implicit
9203         constructor location.
9204
9205         (Operator.Define): Use the location of the operator for the
9206         implicit Method definition.
9207
9208         (Constructor.Emit): use the constructor location for the implicit
9209         base initializer constructor.
9210
9211         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
9212         and the Expression class now contains two new methods:
9213
9214         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
9215         isolate type lookup from the rest of the resolution process.
9216
9217         Since we use Expressions to hold type definitions due to the way
9218         we parse the input we have historically overloaded Resolve to
9219         perform the Type lookups if a special flag is passed.  Now this is
9220         eliminated and two methods take their place. 
9221
9222         The differences in the two methods between xStep and xTerminal is
9223         that xStep is involved in our current lookup system that uses
9224         SimpleNames to compose a name, while xTerminal is used just to
9225         catch the case where the simplename lookup failed.
9226
9227 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
9228
9229         * expression.cs (ResolveMemberAccess): Remove redundant code.
9230         TypeExpr expressions are always born fully resolved.
9231
9232         * interface.cs (PopulateMethod): Do not lookup the types twice.
9233         We were doing it once during SemanticAnalysis and once during
9234         PopulateMethod.
9235
9236         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
9237         in local variable type definitions, were being returned as a
9238         SimpleName (we decomposed everything into a string), that is
9239         because primary_expression was being used instead of a type in the
9240         grammar (reduce/reduce conflicts).
9241
9242         The part that was wrong is that we converted the expression into a
9243         string (an oversimplification in one hand, compounded with primary
9244         expressions doing string concatenation).
9245
9246         So things like:
9247
9248         A.B.C [] x;
9249
9250         Would return "A.B.C[]" as a SimpleName.  This stopped things like
9251         using clauses from working on this particular context.  And a type
9252         was being matched directly against "A.B.C[]".
9253
9254         We now use the correct approach, and allow for ComposedCast to be
9255         part of the unary expression.  So the "A.B.C []" become a composed
9256         cast of "A.B.C" (as a nested group of MemberAccess with a
9257         SimpleName at the end) plus the rank composition "[]". 
9258
9259         Also fixes 35567
9260
9261 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
9262
9263         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
9264         for the access level checking.
9265
9266         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
9267         `TypeContainer container', because I kept getting confused when I
9268         was debugging this code.
9269
9270         * expression.cs (Indexers): Instead of tracking getters/setters,
9271         we now track them in parallel.  We create one arraylist less, but
9272         most importantly it is possible now for the LValue code to find a
9273         matching get for a set.
9274
9275         (IndexerAccess.DoResolveLValue): Update the code.
9276         GetIndexersForType has been modified already to extract all the
9277         indexers from a type.  The code assumed it did not.
9278
9279         Also make the code set the correct return type for the indexer.
9280         This was fixed a long time ago for properties, but was missing for
9281         indexers.  It used to be void_type.
9282
9283         (Binary.Emit): Test first for doubles instead of
9284         floats, as they are more common.
9285
9286         (Binary.EmitBranchable): Use the .un version of the branch opcodes
9287         when dealing with floats and the <=, >= operators.  This fixes bug
9288         #39314 
9289
9290         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
9291         to load the array value by emitting a load on the foreach variable
9292         type.  This was incorrect.  
9293
9294         We now emit the code to load an element using the the array
9295         variable type, and then we emit the conversion operator.
9296
9297         Fixed #40176
9298
9299 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
9300
9301         * attribute.cs: Avoid allocation of ArrayLists in the common case.
9302
9303 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
9304
9305         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
9306         test for protection before we test for signatures. 
9307
9308         (MethodSignature.ToString): implement.
9309
9310         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
9311         to the case where we reduced into a LongConstant.
9312
9313         * decl.cs (CheckAccessLevel): If the type is an array, we can not
9314         depend on whether the information is acurrate, because the
9315         Microsoft runtime will always claim that the array type is public,
9316         regardless of the real state.
9317
9318         If the type is a pointer, another problem happens: the type is
9319         reported as non-public in Microsoft.  
9320
9321         In both cases we have to call CheckAccessLevel recursively with
9322         the underlying type as the argument to be tested.
9323
9324 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
9325
9326         * assign.cs (Assign.Emit): If we are dealing with a compound
9327         assignment expression, we should use the code path that stores the
9328         intermediate result in a temporary value.  This fixes #40903.
9329
9330         *expression.cs (Indirection.ToString): Provide ToString method for
9331         debugging. 
9332
9333 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
9334
9335         * class.cs: Null out fields holding references to Block objects so
9336         they can be garbage collected.
9337
9338         * expression.cs (OverloadResolve): Remove unused local.
9339
9340 2003-04-07  Martin Baulig  <martin@ximian.com>
9341
9342         * codegen.cs (EmitContext.CurrentFile): New public field.
9343         (EmitContext.Mark): Use the CurrentFile to check whether the
9344         location is in the correct file.
9345         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
9346
9347 2003-04-07  Martin Baulig  <martin@ximian.com>
9348
9349         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
9350
9351         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
9352         location.  [FIXME: The location argument which gets passed to this
9353         method is sometimes wrong!]
9354
9355 2003-04-07  Nick Drochak <ndrochak@gol.com>
9356
9357         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
9358
9359 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
9360
9361         * expression.cs (Indirection.EmitAssign): We were using the
9362         temporary, but returning immediately instead of continuing the
9363         EmitAssing flow.
9364
9365 2003-04-06  Martin Baulig  <martin@ximian.com>
9366
9367         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
9368         if it's a nested child, but also deriving from the outer class.
9369         See test 190.cs.
9370
9371         * typemanager.cs (IsNestedChildOf): Make this work if it's a
9372         nested child, but also deriving from the outer class.  See
9373         test-190.cs.
9374         (FilterWithClosure): We may access private members of the outer
9375         class if we're a nested child and deriving from the outer class.
9376         (RealMemberLookup): Only set `closure_private_ok' if the
9377         `original_bf' contained BindingFlags.NonPublic.
9378
9379 2003-04-05  Martin Baulig  <martin@ximian.com>
9380
9381         * expression.cs (SizeOf.DoResolve): Use ResolveTypeExpr, so we can
9382         probe if its a type parameter, and if so, flag an error.
9383
9384         * decl.cs: Move here the SetParameterInfo code from class.cs.
9385         Handle IsGeneric here.
9386
9387         Handle a variety of errors in the parameter info definition.
9388
9389         * ecore.cs (SimpleName.DoResolveType): Handle look ups for generic
9390         type parameters here.
9391
9392         * cs-parser.jay (class_declaration): report errors for parameters
9393         here as well.
9394
9395 2003-01-21  Miguel de Icaza  <miguel@ximian.com>
9396
9397         * generic.cs: New file, contains support code for generics.
9398
9399         * cs-parser.jay: Remove OP_SHIFT_LEFT, OP_SHIFT_RIGHT,
9400         OP_SHIFT_LEFT_ASSIGN, OP_SHIFT_RIGHT_ASSIGN.
9401
9402         Update parser for the above removals.
9403
9404         * cs-tokenizer.cs: Do not handle <<= or >>= specially.  This is
9405         now taken care of in the parser.
9406
9407 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
9408
9409         * class.cs (Event.Define): Do not allow abstract events to have
9410         initializers. 
9411
9412 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
9413
9414         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
9415         block in event declarations.
9416
9417         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
9418         value type, get its address.
9419
9420         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
9421         leaving a class on the stack instead of a boolean value (int
9422         0/1).  Change the code so we compare against null, and then the
9423         result against zero.
9424
9425         * class.cs (TypeContainer.GetClassBases): We were checking for the
9426         parent class being sealed too late.
9427
9428         * expression.cs (Binary.Emit): For <= and >= when dealing with
9429         floating point values, use cgt.un and clt.un instead of cgt and
9430         clt alone.
9431
9432 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
9433
9434         * statement.cs: Apply the same optimization as MS: skip the 
9435         GetEnumerator returning an IEnumerator, and use the one returning a 
9436         CharEnumerator instead. This allows us to avoid the try-finally block 
9437         and the boxing.
9438
9439 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
9440
9441         * cs-parser.jay: Attributes cannot be applied to
9442                          namespaces. Fixes #40473
9443
9444 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9445
9446         * class.cs:
9447         (Add*): check if the name is valid using the full name for constants,
9448         fields, properties and events.
9449
9450 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
9451
9452         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
9453         char constants to be part of the enumeration.
9454
9455         * expression.cs (Conditional.DoResolve): Add support for operator
9456         true. Implements the missing functionality from 14.12
9457
9458         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
9459         operator true/false as required by the spec.
9460
9461         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
9462         implicit conversion to boolean.
9463
9464         * statement.cs (Statement.ResolveBoolean): A boolean expression is
9465         also one where the type implements `operator true'. 
9466
9467         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
9468         get an expression that will invoke operator true based on an
9469         expression.  
9470
9471         (GetConversionOperators): Removed the hack that called op_True
9472         here.  
9473
9474         (Expression.ResolveBoolean): Move this from Statement.
9475
9476 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
9477
9478         * ecore.cs (FieldExpr): do not allow initialization of initonly
9479         fields on derived classes
9480
9481 2003-03-13  Martin Baulig  <martin@ximian.com>
9482
9483         * statement.cs (Block.Emit): Call ig.BeginScope() and
9484         ig.EndScope() when compiling with debugging info; call
9485         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
9486
9487 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
9488
9489         * expression.cs (Indexers): Do not construct immediately, allow
9490         for new members to be appended as we go.  Fixes 38143
9491
9492 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9493
9494         * expression.cs: save/restore context when resolving an unchecked
9495         expression.
9496
9497 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
9498
9499         * cfold.cs: Catch division by zero in modulus operator during
9500         constant folding.
9501
9502 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
9503
9504         * interface.cs (Interface.DefineMembers): Avoid defining members
9505         twice. 
9506
9507 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
9508
9509         * driver.cs: handle the +/- options for -noconfig
9510
9511         * statement.cs (Unckeched.Resolve): Also track the state of
9512         unchecked in the Resolve phase.
9513
9514 2003-02-27  Martin Baulig  <martin@ximian.com>
9515
9516         * ecore.cs (Expression.MemberLookup): Don't create a
9517         MethodGroupExpr for something which is not a method.  Fixes #38291.
9518
9519 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
9520
9521         * class.cs (MemberBase.CheckParameters): Also check that the type
9522         is unmanaged if it is a pointer.
9523
9524         * expression.cs (SizeOf.Resolve): Add location information.
9525
9526         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
9527         a managed type is declared.
9528
9529         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
9530         parameter modifiers as well.  Fixes bug 38606
9531
9532         * class.cs: Very sad.  Am backing out the speed up changes
9533         introduced by the ArrayList -> Array in the TypeContainer, as they
9534         were not actually that much faster, and introduced a bug (no error
9535         reports on duplicated methods).
9536
9537         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
9538         source first, this will guarantee that we have a valid expression
9539         before calling in lower levels functions that will require a
9540         resolved object.  Then use this original_source in the
9541         target.ResolveLValue instead of the original source that was
9542         passed to us.
9543
9544         Another change.  Use target.Resolve instead of LValueResolve.
9545         Although we are resolving for LValues, we will let the Assign code
9546         take care of that (it will be called again from Resolve).  This
9547         basically allows code like this:
9548
9549         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
9550         class Y { void A (X x) { x [0] += o; }
9551
9552         The problem was that the indexer was trying to resolve for
9553         set_Item (idx, object o) and never finding one.  The real set_Item
9554         was set_Item (idx, X).  By delaying the process we get the right
9555         semantics. 
9556
9557         Fixes bug 36505
9558
9559 2003-02-23  Martin Baulig  <martin@ximian.com>
9560
9561         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
9562         while calling DoEmit ().
9563
9564         * codegen.cs (EmitContext.Mark): Don't mark locations in other
9565         source files; if you use the #line directive inside a method, the
9566         compiler stops emitting line numbers for the debugger until it
9567         reaches the end of the method or another #line directive which
9568         restores the original file.
9569
9570 2003-02-23  Martin Baulig  <martin@ximian.com>
9571
9572         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
9573
9574 2003-02-23  Martin Baulig  <martin@ximian.com>
9575
9576         * statement.cs (Block.AddChildVariableNames): We need to call this
9577         recursively, not just for our immediate children.
9578
9579 2003-02-23  Martin Baulig  <martin@ximian.com>
9580
9581         * class.cs (Event.Define): Always make the field private, like csc does.
9582
9583         * typemanager.cs (TypeManager.RealMemberLookup): Make events
9584         actually work, fixes bug #37521.
9585
9586 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
9587
9588         * delegate.cs: When creating the various temporary "Parameters"
9589         classes, make sure that we call the ComputeAndDefineParameterTypes
9590         on those new parameters (just like we do with the formal ones), to
9591         allow them to be resolved in the context of the DeclSpace.
9592
9593         This fixes the bug that Dick observed in Bugzilla #38530.
9594
9595 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
9596
9597         * expression.cs (ResolveMemberAccess): When resolving a constant,
9598         do not attempt to pull a constant if the value was not able to
9599         generate a valid constant.
9600
9601         * const.cs (LookupConstantValue): Do not report more errors than required.
9602
9603 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9604
9605         * expression.cs: fixes bug #38328.
9606
9607 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
9608
9609         * class.cs: Changed all the various members that can be part of a
9610         class from being an ArrayList to be an Array of the right type.
9611         During the DefineType type_list, interface_list, delegate_list and
9612         enum_list are turned into types, interfaces, delegates and enums
9613         arrays.  
9614
9615         And during the member population, indexer_list, event_list,
9616         constant_list, field_list, instance_constructor_list, method_list,
9617         operator_list and property_list are turned into their real arrays.
9618
9619         Although we could probably perform this operation earlier, for
9620         good error reporting we need to keep the lists and remove the
9621         lists for longer than required.
9622
9623         This optimization was triggered by Paolo profiling the compiler
9624         speed on the output of `gen-sample-program.pl' perl script. 
9625
9626         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
9627         not crash in methods like MemberLookupFailed that use this field.  
9628
9629         This problem arises when the compiler fails to resolve a type
9630         during interface type definition for example.
9631
9632 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
9633
9634         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
9635         inherit from System.Object, so we have to stop at null, not only
9636         when reaching System.Object.
9637
9638 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
9639
9640         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
9641         DeclaredOnly because the parent indexer might have had a different
9642         name, but did not loop until the top of the hierarchy was reached.
9643
9644         The problem this one fixes is 35492: when a class implemented an
9645         indexer from an interface, we were getting the interface method
9646         (which was abstract) and we were flagging an error (can not invoke
9647         abstract method).
9648
9649         This also keeps bug 33089 functioning, and test-148 functioning.
9650
9651         * typemanager.cs (IsSpecialMethod): The correct way of figuring
9652         out if a method is special is to see if it is declared in a
9653         property or event, or whether it is one of the predefined operator
9654         names.   This should fix correctly #36804.
9655
9656 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
9657
9658         The goal here is to remove the dependency on EmptyCast.Peel ().
9659         Killing it completely.
9660
9661         The problem is that currently in a number of places where
9662         constants are expected, we have to "probe" for an EmptyCast, and
9663         Peel, which is not the correct thing to do, as this will be
9664         repetitive and will likely lead to errors. 
9665
9666         The idea is to remove any EmptyCasts that are used in casts that
9667         can be reduced to constants, so we only have to cope with
9668         constants. 
9669
9670         This bug hunt was triggered by Bug 37363 and the desire to remove
9671         the duplicate pattern where we were "peeling" emptycasts to check
9672         whether they were constants.  Now constants will always be
9673         constants.
9674
9675         * ecore.cs: Use an enumconstant here instead of wrapping with
9676         EmptyCast.  
9677
9678         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
9679         throwing me off.  By handling this we can get rid of a few hacks.
9680
9681         * statement.cs (Switch): Removed Peel() code.
9682
9683 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
9684
9685         * class.cs: Location information for error 508
9686
9687         * expression.cs (New.DoResolve): Add a guard against double
9688         resolution of an expression.  
9689
9690         The New DoResolve might be called twice when initializing field
9691         expressions (see EmitFieldInitializers, the call to
9692         GetInitializerExpression will perform a resolve on the expression,
9693         and later the assign will trigger another resolution
9694
9695         This leads to bugs (#37014)
9696
9697         * delegate.cs: The signature for EndInvoke should contain any ref
9698         or out parameters as well.  We were not doing this in the past. 
9699
9700         * class.cs (Field.Define): Do not overwrite the type definition
9701         inside the `volatile' group.  Turns out that volatile enumerations
9702         were changing the type here to perform a validity test, which
9703         broke conversions. 
9704
9705 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
9706
9707         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
9708         and structs, we do not want to load the instance variable
9709
9710         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
9711         enum_type has to be handled like an object reference (implicit
9712         conversions exists from this to object), but the regular IsClass
9713         and IsValueType tests will never return true for this one.
9714
9715         Also we use TypeManager.IsValueType instead of type.IsValueType,
9716         just for consistency with the rest of the code (this is only
9717         needed if we ever use the construct exposed by test-180.cs inside
9718         corlib, which we dont today).
9719
9720 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
9721
9722         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
9723         just InternalCall.
9724
9725 2003-02-09  Martin Baulig  <martin@ximian.com>
9726
9727         * namespace.cs (Namespace..ctor): Added SourceFile argument.
9728         (Namespace.DefineNamespaces): New static public method; this is
9729         called when we're compiling with debugging to add all namespaces
9730         to the symbol file.
9731
9732         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
9733         pass it to the Namespace's .ctor.
9734
9735         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
9736         and MethodBase arguments; pass the namespace ID to the symwriter;
9737         pass the MethodBase instead of the token to the symwriter.
9738         (SymbolWriter.DefineNamespace): New method to add a namespace to
9739         the symbol file.
9740
9741 2003-02-09  Martin Baulig  <martin@ximian.com>
9742
9743         * symbolwriter.cs: New file.  This is a wrapper around
9744         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
9745         methods here in near future.
9746
9747 2003-02-09  Martin Baulig  <martin@ximian.com>
9748
9749         * codegen.cs (EmitContext.Mark): Just pass the arguments to
9750         ILGenerator.MarkSequencePoint() which are actually used by the
9751         symbol writer.
9752
9753 2003-02-09  Martin Baulig  <martin@ximian.com>
9754
9755         * location.cs (SourceFile): New public sealed class.  This
9756         contains the name and an index which is used in the location's token.
9757         (Location): Reserve an appropriate number of bits in the token for
9758         the source file instead of walking over that list, this gives us a
9759         really huge performance improvement when compiling with debugging.
9760
9761         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
9762         `SourceFile' argument instead of a string.
9763         (Driver.ProcessFile): Add all the files via Location.AddFile(),
9764         but don't parse/tokenize here, we need to generate the list of all
9765         source files before we do that.
9766         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
9767         the files.
9768
9769         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
9770         instead of a string.
9771
9772         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
9773         of a string.
9774
9775 2003-02-09  Martin Baulig  <martin@ximian.com>
9776
9777         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
9778         filename on `#line default'.
9779
9780 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
9781
9782         * statement.cs: don't clear the pinned var when the fixed statement
9783         returns from the method (fixes bug#37752).
9784
9785 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
9786
9787         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
9788         to IsValueType.
9789
9790 2003-02-07  Martin Baulig  <martin@ximian.com>
9791
9792         * driver.cs: Removed the `--debug-args' command line argument.
9793
9794         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
9795         automatically by the AsssemblyBuilder.
9796         (CodeGen.InitializeSymbolWriter): We don't need to call any
9797         initialization function on the symbol writer anymore.  This method
9798         doesn't take any arguments.
9799
9800 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
9801
9802         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
9803         from referenced assemblies as well.
9804
9805 2003-02-02  Martin Baulig  <martin@ximian.com>
9806
9807         * class.cs (MethodData.Emit): Generate debugging info for external methods.
9808
9809 2003-02-02  Martin Baulig  <martin@ximian.com>
9810
9811         * class.cs (Constructor.Emit): Open the symbol writer before
9812         emitting the constructor initializer.
9813         (ConstructorInitializer.Emit): Call ec.Mark() to allow
9814         single-stepping through constructor initializers.
9815
9816 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
9817
9818         * class.cs: Handle error 549: do not allow virtual methods in
9819         sealed classes. 
9820
9821 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
9822
9823         * decl.cs: Check access levels when resolving types
9824
9825 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
9826
9827         * statement.cs: Add parameters and locals set in catch blocks that might 
9828         return to set vector
9829
9830 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
9831
9832         * class.cs (Operator): Set the SpecialName flags for operators.
9833
9834         * expression.cs (Invocation.DoResolve): Only block calls to
9835         accessors and operators on SpecialName methods.
9836
9837         (Cast.TryReduce): Handle conversions from char constants.
9838
9839
9840 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
9841
9842         * statement.cs: small memory and time optimization in FlowBranching.
9843
9844 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
9845
9846         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
9847         problem that the last fix but in the other sid (Set).
9848
9849         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
9850         access when there is no indexer in the hierarchy.
9851
9852 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
9853
9854         * class.cs: Combine some if statements.
9855
9856 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9857
9858         * driver.cs: fixed bug #37187.
9859
9860 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
9861
9862         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
9863         any indexer, it's needed to build a list with all the indexers in the
9864         hierarchy (AllGetters), else we have problems. Fixes #35653.
9865
9866 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
9867
9868         * class.cs (MethodData.Define): It is wrong for an interface
9869         implementation to be static in both cases: explicit and implicit.
9870         We were only handling this in one case.
9871
9872         Improve the if situation there to not have negations.
9873
9874         * class.cs (Field.Define): Turns out that we do not need to check
9875         the unsafe bit on field definition, only on usage.  Remove the test.
9876
9877 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9878
9879         * driver.cs: use assembly.Location instead of Codebase (the latest
9880         patch made mcs fail when using MS assemblies).
9881
9882 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
9883
9884         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
9885         get the path to *corlib.dll.
9886
9887 2003-01-21  Nick Drochak <ndrochak@gol.com>
9888
9889         * cs-tokenizer.cs:
9890         * pending.cs:
9891         * typemanager.cs: Remove compiler warnings
9892
9893 2003-01-20  Duncan Mak  <duncan@ximian.com>
9894
9895         * AssemblyInfo.cs: Bump the version number to 0.19.
9896
9897 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9898
9899         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
9900
9901 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
9902
9903         * class.cs (Constructor::Emit): Emit debugging info for constructors.
9904
9905 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
9906
9907         * cs-parser.jay: Small fix: we were not comparing the constructor
9908         name correctly.   Thanks to Zoltan for the initial pointer.
9909
9910 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
9911
9912         * cs-tokenizer.cs: Set file name when specified with #line
9913
9914 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
9915
9916         * cs-parser.jay: Only perform the constructor checks here if we
9917         are named like the class;  This will help provider a better
9918         error.  The constructor path is taken when a type definition is
9919         not found, but most likely the user forgot to add the type, so
9920         report that rather than the constructor error.
9921
9922 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
9923
9924         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
9925         allocations.
9926
9927 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
9928
9929         * cs-parser.jay: Add cleanup call.
9930
9931 2003-01-13  Duncan Mak  <duncan@ximian.com>
9932
9933         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
9934         consistent with other methods.
9935
9936 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
9937
9938         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
9939
9940 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
9941
9942         * attribute.cs: only set GuidAttr to true when we have a
9943         GuidAttribute.
9944
9945 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9946
9947         * ecore.cs:
9948         * expression.cs:
9949         * typemanager.cs: fixes to allow mcs compile corlib with the new
9950         Type.IsSubclassOf fix.
9951
9952 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
9953
9954         * expression.cs (LocalVariableReference.DoResolve): Classify a
9955         constant as a value, not as a variable.   Also, set the type for
9956         the variable.
9957
9958         * cs-parser.jay (fixed_statement): take a type instead of a
9959         pointer_type, so we can produce a better error message later.
9960
9961         * statement.cs (Fixed.Resolve): Flag types that are not pointers
9962         as an error.  
9963
9964         (For.DoEmit): Make inifinite loops have a
9965         non-conditional branch back.
9966
9967         (Fixed.DoEmit): First populate the pinned variables, then emit the
9968         statement, then clear the variables.  Before I was emitting the
9969         code once for each fixed piece.
9970
9971
9972 2003-01-08  Martin Baulig  <martin@ximian.com>
9973
9974         * statement.cs (FlowBranching.MergeChild): A break in a
9975         SWITCH_SECTION does not leave a loop.  Fixes #36155.
9976
9977 2003-01-08  Martin Baulig  <martin@ximian.com>
9978
9979         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
9980         lives in the same number space than `param_map'.  Fixes #36154.
9981
9982 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
9983
9984         * cs-parser.jay (constructor_declaration): Set the
9985         Constructor.ModFlags before probing for it.  This makes the
9986         compiler report 514, 515 and 132 (the code was there, but got
9987         broken). 
9988
9989         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
9990         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
9991         (GotoCase.Resolve): Set `Returns' to ALWAYS.
9992
9993 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
9994
9995         * enum.cs: create the enum static fields using the enum type.
9996
9997 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
9998
9999         * class.cs: don't try to create the ParamBuilder for the return
10000         type if it's not needed (and handle it breaking for the ms runtime
10001         anyway).
10002
10003 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
10004
10005         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
10006
10007 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
10008
10009         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
10010         the command.   This showed up while compiling the JANET source
10011         code, which used \r as its only newline separator.
10012
10013 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
10014
10015         * class.cs (Method.Define): If we are an operator (because it
10016         reuses our code), then set the SpecialName and HideBySig.  #36128
10017
10018 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
10019
10020         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
10021         exception, report error 120 `object reference required'.
10022
10023         * driver.cs: Add --pause option, used during to measure the size
10024         of the process as it goes with --timestamp.
10025
10026         * expression.cs (Invocation.DoResolve): Do not allow methods with
10027         SpecialName to be invoked.
10028
10029 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
10030
10031         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
10032         number before adding it.
10033
10034 2002-12-21  Ravi Pratap  <ravi@ximian.com>
10035
10036         * ecore.cs (StandardImplicitConversion): When in an unsafe
10037         context, we allow conversion between void * to any other pointer
10038         type. This fixes bug #35973.
10039
10040 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
10041
10042         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
10043         is not thrown when extensionless outputs are used 
10044
10045 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10046
10047         * rootcontext.cs: fixed compilation of corlib.
10048
10049 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
10050
10051         * attribute.cs (Attributes.Contains): Add new method.
10052
10053         * class.cs (MethodCore.LabelParameters): if the parameter is an
10054         `out' parameter, check that no attribute `[In]' has been passed.
10055
10056         * enum.cs: Handle the `value__' name in an enumeration.
10057
10058 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
10059
10060         * decl.cs: Added special case to allow overrides on "protected
10061         internal" methods
10062
10063 2002-12-18  Ravi Pratap  <ravi@ximian.com>
10064
10065         * attribute.cs (Attributes.AddAttributeSection): Rename to this
10066         since it makes much more sense.
10067
10068         (Attributes.ctor): Don't require a Location parameter.
10069
10070         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
10071
10072         * attribute.cs (ApplyAttributes): Remove extra Location parameters
10073         since we already have that information per attribute.
10074
10075         * everywhere : make appropriate changes.
10076
10077         * class.cs (LabelParameters): Write the code which actually
10078         applies attributes to the return type. We can't do this on the MS
10079         .NET runtime so we flag a warning in the case an exception is
10080         thrown.
10081
10082 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
10083
10084         * const.cs: Handle implicit null conversions here too.
10085
10086 2002-12-17  Ravi Pratap  <ravi@ximian.com>
10087
10088         * class.cs (MethodCore.LabelParameters): Remove the extra
10089         Type [] parameter since it is completely unnecessary. Instead
10090         pass in the method's attributes so that we can extract
10091         the "return" attribute.
10092
10093 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
10094
10095         * cs-parser.jay (parse): Use Report.Error to flag errors instead
10096         of ignoring it and letting the compile continue.
10097
10098         * typemanager.cs (ChangeType): use an extra argument to return an
10099         error condition instead of throwing an exception.
10100
10101 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
10102
10103         * expression.cs (Unary.TryReduce): mimic the code for the regular
10104         code path.  Perform an implicit cast in the cases where we can
10105         implicitly convert to one of the integral types, and then reduce
10106         based on that constant.   This fixes bug #35483.
10107
10108 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10109
10110         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
10111
10112 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10113
10114         * namespace.cs: fixed bug #35489.
10115
10116 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
10117
10118         * class.cs: Remove some dead code.
10119
10120         * cs-parser.jay: Estimate the number of methods needed
10121         (RootContext.MethodCount);
10122
10123         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
10124         numbers instead of StringBuilders.
10125
10126         * support.cs (PtrHashtable): Add constructor with initial size;
10127         We can now reduce reallocations of the method table.
10128
10129 2002-12-10  Ravi Pratap  <ravi@ximian.com>
10130
10131         * attribute.cs (ApplyAttributes): Keep track of the emitted
10132         attributes on a per-target basis. This fixes bug #35413.
10133
10134 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
10135
10136         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
10137         default to the Windows 1252 encoding.
10138
10139         (UnixParseOption): Support version, thanks to Alp for the missing
10140         pointer. 
10141
10142         * AssemblyInfo.cs: Add nice assembly information.
10143
10144         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
10145         (bug 35169).
10146
10147         * cs-parser.jay: Allow a trailing comma before the close bracked
10148         in the attribute_section production.
10149
10150         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
10151         address of the instance was being taken, I will take this out,
10152         because we take the address of the object immediately here.
10153
10154 2002-12-09  Ravi Pratap  <ravi@ximian.com>
10155
10156         * typemanager.cs (AreMultipleAllowed): Take care of the most
10157         obvious case where attribute type is not in the current assembly -
10158         stupid me ;-)
10159
10160 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
10161
10162         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
10163         definitions, instead of doing that afterwards.  
10164
10165         Also we use a nice little hack, depending on the constructor, we
10166         know if we are a "composed" name or a simple name.  Hence, we
10167         avoid the IndexOf test, and we avoid 
10168
10169         * codegen.cs: Add code to assist in a bug reporter to track down
10170         the source of a compiler crash. 
10171
10172 2002-12-07  Ravi Pratap  <ravi@ximian.com>
10173
10174         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
10175         types have been emitted for a given element and flag an error
10176         if something which does not have AllowMultiple set is used more
10177         than once.
10178
10179         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
10180         attribute types and their corresponding AllowMultiple properties
10181
10182         (AreMultipleAllowed): Check the property for a given type.
10183
10184         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
10185         property in the case we have a TypeContainer.
10186
10187         (Attributes.AddAttribute): Detect duplicates and just skip on
10188         adding them. This trivial fix catches a pretty gross error in our
10189         attribute emission - global attributes were being emitted twice!
10190
10191         Bugzilla bug #33187 is now fixed.
10192
10193 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
10194
10195         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
10196         instead of pp_and).
10197
10198         * expression.cs (Binary.ResolveOperator): I can only use the
10199         Concat (string, string, string) and Concat (string, string,
10200         string, string) if the child is actually a concatenation of
10201         strings. 
10202
10203 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
10204
10205         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
10206         context where we need a 2-character lookahead.
10207
10208         * pending.cs (PendingImplementation): Rework so we can keep track
10209         of interface types all the time, and flag those which were
10210         implemented by parents as optional.
10211
10212 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
10213
10214         * expression.cs (Binary.ResolveOperator): Use
10215         String.Concat(string,string,string) or
10216         String.Concat(string,string,string,string) when possible. 
10217
10218         * typemanager: More helper methods.
10219
10220
10221 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
10222
10223         * pending.cs: remove the bogus return from GetMissingInterfaces()
10224         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
10225
10226 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10227
10228         * namespace.cs: avoid duplicated 'using xxx' being added to
10229         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
10230         when we get more than one 'using' statement for the same namespace.
10231         Report a CS0105 warning for it.
10232
10233 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
10234
10235         * cs-tokenizer.cs (consume_identifier): use read directly, instead
10236         of calling getChar/putback, uses internal knowledge of it.    
10237
10238         (xtoken): Reorder tokenizer so most common patterns are checked
10239         first.  This reduces the compilation time in another 5% (from 8.11s
10240         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
10241
10242         The parsing time is 22% of the compilation in mcs, and from that
10243         64% is spent on the tokenization process.  
10244
10245         I tried using a binary search for keywords, but this is slower
10246         than the hashtable.  Another option would be to do a couple of
10247         things:
10248
10249                 * Not use a StringBuilder, instead use an array of chars,
10250                   with a set value.  Notice that this way we could catch
10251                   the 645 error without having to do it *afterwards*.
10252
10253                 * We could write a hand-parser to avoid the hashtable
10254                   compares altogether.
10255
10256         The identifier consumption process takes 37% of the tokenization
10257         time.  Another 15% is spent on is_number.  56% of the time spent
10258         on is_number is spent on Int64.Parse:
10259
10260                 * We could probably choose based on the string length to
10261                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
10262                   computations. 
10263
10264         Another 3% is spend on wrapping `xtoken' in the `token' function.
10265
10266         Handle 0xa0 as whitespace (#34752)
10267
10268 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
10269
10270         * typemanager.cs (IsCLRType): New routine to tell whether a type
10271         is one of the builtin types.  
10272
10273         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
10274         typecode in more places instead of doing pointer comparissions.
10275         We could leverage some knowledge about the way the typecodes are
10276         laid out.
10277
10278         New code to cache namespaces in assemblies, it is currently not
10279         invoked, to be used soon.
10280
10281         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
10282
10283         * expression.cs (Binary.ResolveOperator): specially handle
10284         strings, and do not perform user-defined operator overloading for
10285         built-in types.
10286
10287 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
10288
10289         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
10290         internalcall as it is a pretty simple operation;  Avoid whenever
10291         possible to call Char.IsLetter.
10292
10293         (consume_identifier): Cut by half the number of
10294         hashtable calls by merging the is_keyword and GetKeyword behavior.
10295
10296         Do not short-circuit, because if we do, we
10297         report errors (ie, #if false && true would produce an invalid
10298         directive error);
10299
10300
10301 2002-11-24  Martin Baulig  <martin@ximian.com>
10302
10303         * expression.cs (Cast.TryReduce): If we're in checked syntax,
10304         check constant ranges and report a CS0221.  Fixes #33186.
10305
10306 2002-11-24  Martin Baulig  <martin@ximian.com>
10307
10308         * cs-parser.jay: Make this work for uninitialized variable
10309         declarations in the `for' initializer.  Fixes #32416.
10310
10311 2002-11-24  Martin Baulig  <martin@ximian.com>
10312
10313         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
10314         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
10315
10316 2002-11-24  Martin Baulig  <martin@ximian.com>
10317
10318         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
10319         argument; if true, we also check for user-defined conversions.
10320         This is only needed if both arguments are of a user-defined type.
10321         Fixes #30443, added test-175.cs.
10322         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
10323
10324         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
10325
10326 2002-11-24  Martin Baulig  <martin@ximian.com>
10327
10328         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
10329         function to get the store opcode.
10330         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
10331         only emit the Ldelema if the store opcode is Stobj.  You must run
10332         both test-34 and test-167 to test this.  Fixes #34529.
10333
10334 2002-11-23  Martin Baulig  <martin@ximian.com>
10335
10336         * ecore.cs (Expression.MemberLookup): Added additional
10337         `qualifier_type' argument which is used when we're being called
10338         from MemberAccess.DoResolve() and null if we're called from a
10339         SimpleName lookup.
10340         (Expression.MemberLookupFailed): New method to report errors; this
10341         does the CS1540 check and reports the correct error message.
10342
10343         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
10344         argument for the CS1540 check and redone the way how we're dealing
10345         with private members.  See the comment in the source code for details.
10346         (FilterWithClosure): Reverted this back to revision 1.197; renamed
10347         `closure_start_type' to `closure_qualifier_type' and check whether
10348         it's not null.  It was not this filter being broken, it was just
10349         being called with the wrong arguments.
10350
10351         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
10352         and pass it the correct `qualifier_type'; this also does the error
10353         handling for us.
10354
10355 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
10356
10357         * expression.cs (Invocation.EmitParams): If the we are dealing
10358         with a non-built-in value type, load its address as well.
10359
10360         (ArrayCreation): Use a a pretty constant instead
10361         of the hardcoded value 2.   Use 6 instead of 2 for the number of
10362         static initializers.  
10363
10364         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
10365         because they are not really value types, just glorified integers. 
10366
10367         * driver.cs: Do not append .exe, the CSC compiler does not do it.
10368
10369         * ecore.cs: Remove redundant code for enumerations, make them use
10370         the same code path as everything else, fixes the casting issue
10371         with enumerations in Windows.Forms.
10372
10373         * attribute.cs: Do only cast to string if it is a string, the
10374         validation happens later.
10375
10376         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
10377         people upgrade their corlibs.
10378
10379         * ecore.cs: Oops, enumerations were not following the entire code path
10380
10381 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
10382
10383         * typemanager.cs (FilterWithClosure): Commented out the test for
10384         1540 in typemanager.cs, as it has problems when accessing
10385         protected methods from a parent class (see test-174.cs). 
10386
10387         * attribute.cs (Attribute.ValidateGuid): new method.
10388         (Attribute.Resolve): Use above.
10389
10390 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
10391
10392         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
10393
10394         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
10395         handling for enumerations, as we only needed the TypeContainer
10396         functionality to begin with (this is required for the fix below to
10397         work for enums that reference constants in a container class for
10398         example). 
10399
10400         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
10401
10402         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
10403         a valid TypeBuilder to perform lookups on.o
10404
10405         * class.cs (InheritableMemberSignatureCompare): Use true in the
10406         call to GetGetMethod and GetSetMethod, because we are comparing
10407         the signature, and we need to get the methods *even* if they are
10408         private. 
10409
10410         (PropertyBase.CheckBase): ditto.
10411
10412         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
10413         GotoCase.Resolve): Use Peel on EmpytCasts.
10414
10415         * ecore.cs (EmptyCast): drop child, add Peel method.
10416
10417 2002-11-17  Martin Baulig  <martin@ximian.com>
10418
10419         * ecore.cs (EmptyCast.Child): New public property.
10420
10421         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
10422         label resolved to an EmptyCast.  Fixes #34162.
10423         (GotoCase.Resolve): Likewise.
10424         (Block.EmitMeta): Likewise.
10425
10426 2002-11-17  Martin Baulig  <martin@ximian.com>
10427
10428         * expression.cs (Invocation.BetterConversion): Prefer int over
10429         uint; short over ushort; long over ulong for integer literals.
10430         Use ImplicitConversionExists instead of StandardConversionExists
10431         since we also need to check for user-defined implicit conversions.
10432         Fixes #34165.  Added test-173.cs.
10433
10434 2002-11-16  Martin Baulig  <martin@ximian.com>
10435
10436         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
10437         with the `true' and `false' literals.  Fixes #33151.
10438
10439 2002-11-16  Martin Baulig  <martin@ximian.com>
10440
10441         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
10442         October 22nd; don't do the cs1540 check for static members.
10443
10444         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
10445         now using our own filter here and doing the cs1540 check again.
10446
10447 2002-11-16  Martin Baulig  <martin@ximian.com>
10448
10449         * support.cs (InternalParameters): Don't crash if we don't have
10450         any fixed parameters.  Fixes #33532.
10451
10452 2002-11-16  Martin Baulig  <martin@ximian.com>
10453
10454         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
10455         when looking up static methods to make this work on Windows.
10456         Fixes #33773.
10457
10458 2002-11-16  Martin Baulig  <martin@ximian.com>
10459
10460         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
10461         a setter rather than using PropertyInfo.CanWrite.
10462
10463 2002-11-15  Nick Drochak  <ndrochak@gol.com>
10464
10465         * class.cs: Allow acces to block member by subclasses. Fixes build
10466         breaker.
10467
10468 2002-11-14  Martin Baulig  <martin@ximian.com>
10469
10470         * class.cs (Constructor.Emit): Added the extern/block check.
10471         Fixes bug #33678.
10472
10473 2002-11-14  Martin Baulig  <martin@ximian.com>
10474
10475         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
10476         iteration while looking for indexers, this is needed because the
10477         indexer may have a different name in our base classes.  Fixed the
10478         error reporting (no indexers at all, not get accessor, no
10479         overloaded match).  Fixes bug #33089.
10480         (IndexerAccess.DoResolveLValue): Likewise.
10481
10482 2002-11-14  Martin Baulig  <martin@ximian.com>
10483
10484         * class.cs (PropertyBase.CheckBase): Make this work for multiple
10485         indexers.  Fixes the first part of bug #33089.
10486         (MethodSignature.InheritableMemberSignatureCompare): Added support
10487         for properties.
10488
10489 2002-11-13  Ravi Pratap  <ravi@ximian.com>
10490
10491         * attribute.cs (Attribute.Resolve): Catch the
10492         NullReferenceException and report it since it isn't supposed to
10493         happen. 
10494
10495 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
10496
10497         * expression.cs (Binary.EmitBranchable): Also handle the cases for
10498         LogicalOr and LogicalAnd that can benefit from recursively
10499         handling EmitBranchable.  The code now should be nice for Paolo.
10500
10501 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
10502
10503         * typemanager.cs (LookupType): Added a negative-hit hashtable for
10504         the Type lookups, as we perform quite a number of lookups on
10505         non-Types.  This can be removed once we can deterministically tell
10506         whether we have a type or a namespace in advance.
10507
10508         But this might require special hacks from our corlib.
10509
10510         * TODO: updated.
10511
10512         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
10513         and double which avoids a conversion from an integer to a double.
10514
10515         * expression.cs: tiny optimization, avoid calling IsConstant,
10516         because it effectively performs the lookup twice.
10517
10518 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
10519
10520         But a bogus return here to keep the semantics of the old code
10521         until the Mono runtime is fixed.
10522
10523         * pending.cs (GetMissingInterfaces): New method used to remove all
10524         the interfaces that are already implemented by our parent
10525         classes from the list of pending methods. 
10526
10527         * interface.cs: Add checks for calls after ResolveTypeExpr.
10528
10529 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
10530
10531         * class.cs (Class.Emit): Report warning 67: event not used if the
10532         warning level is beyond 3.
10533
10534         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
10535         being a NullLiteral.
10536
10537         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
10538         specifiers. 
10539
10540         * class.cs (TypeContainer.GetClassBases): Cover a missing code
10541         path that might fail if a type can not be resolved.
10542
10543         * expression.cs (Binary.Emit): Emit unsigned versions of the
10544         operators. 
10545
10546         * driver.cs: use error 5.
10547
10548 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
10549
10550         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
10551
10552 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
10553
10554         * cs-parser.jay (switch_section): A beautiful patch from Martin
10555         Baulig that fixed 33094.
10556
10557 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
10558
10559         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
10560         Check whether the base is abstract and report an error if so.
10561
10562         * expression.cs (IndexerAccess.DoResolveLValue,
10563         IndexerAccess.DoResolve): ditto. 
10564
10565         (Invocation.DoResolve): ditto.
10566
10567         (Invocation.FullMethodDesc): Improve the report string.
10568
10569         * statement.cs (Block): Eliminate IsVariableDefined as it is
10570         basically just a wrapper for GetVariableInfo.
10571
10572         * ecore.cs (SimpleName): Use new 
10573
10574         * support.cs (ReflectionParamter.ParameterType): We unwrap the
10575         type, as we return the actual parameter ref/unref state on a
10576         different call.
10577
10578 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
10579
10580         * support.cs: Return proper flags REF/OUT fixing the previous
10581         commit.  
10582
10583         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
10584         not used to mean `ref' but `ref or out' in ParameterReference
10585
10586         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
10587         full type signature instead of calling TypeManger.CSharpName
10588         ourselves. 
10589
10590         * support.cs (InternalParameters.ParameterDesc): Do not compare
10591         directly to the modflags, because REF/OUT will actually be bitsets
10592         if set. 
10593
10594         * delegate.cs (VerifyMethod): Check also the modifiers.
10595
10596         * cs-tokenizer.cs: Fix bug where floating point values with an
10597         exponent where a sign was missing was ignored.
10598
10599         * driver.cs: Allow multiple assemblies to be specified in a single
10600         /r: argument
10601
10602 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
10603
10604         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
10605         because identifiers after a parenthesis would end up in this kind
10606         of production, and we needed to desamiguate it for having casts
10607         like:
10608
10609                 (UserDefinedType *) xxx
10610
10611 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
10612
10613         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
10614         we should set on the Bindingflags.NonPublic, but not turn on
10615         private_ok.  private_ok controls whether a Private member is
10616         returned (this is chekced on the filter routine), while the
10617         BindingFlags.NonPublic just controls whether private/protected
10618         will be allowed.   This fixes the problem part of the problem of
10619         private properties being allowed to be used in derived classes.
10620
10621         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
10622         so we can call the children DoResolveLValue method (this will
10623         properly signal errors on lvalue assignments to base properties)
10624
10625         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
10626         getter are null, and we have a property info, we know that this
10627         happened because the lookup failed, so we report an error 122 for
10628         protection level violation.
10629
10630         We also silently return if setter and getter are null in the
10631         resolve functions, this condition only happens if we have flagged
10632         the error before.  This is the other half of the problem. 
10633
10634         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
10635         not have accessibility information, that is why we were returning
10636         true in the filter function in typemanager.cs.
10637
10638         To properly report 122 (property is inaccessible because of its
10639         protection level) correctly, we report this error in ResolveAccess
10640         by failing if both the setter and the getter are lacking (ie, the
10641         lookup failed). 
10642
10643         DoResolve and DoLResolve have been modified to check for both
10644         setter/getter being null and returning silently, the reason being
10645         that I did not want to put the knowledge about this error in upper
10646         layers, like:
10647
10648         int old = Report.Errors;
10649         x = new PropertyExpr (...);
10650         if (old != Report.Errors)
10651                 return null;
10652         else
10653                 return x;
10654
10655         So the property expr is returned, but it is invalid, so the error
10656         will be flagged during the resolve process. 
10657
10658         * class.cs: Remove InheritablePropertySignatureCompare from the
10659         class, as we no longer depend on the property signature to compute
10660         whether it is possible to implement a method or not.
10661
10662         The reason is that calling PropertyInfo.GetGetMethod will return
10663         null (in .NET, in Mono it works, and we should change this), in
10664         cases where the Get Method does not exist in that particular
10665         class.
10666
10667         So this code:
10668
10669         class X { public virtual int A { get { return 1; } } }
10670         class Y : X { }
10671         class Z : Y { public override int A { get { return 2; } } }
10672
10673         Would fail in Z because the parent (Y) would not have the property
10674         defined.  So we avoid this completely now (because the alternative
10675         fix was ugly and slow), and we now depend exclusively on the
10676         method names.
10677
10678         (PropertyBase.CheckBase): Use a method-base mechanism to find our
10679         reference method, instead of using the property.
10680
10681         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
10682         routines are gone now.
10683
10684         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
10685         names, they were incorrectly named.
10686
10687         * cs-tokenizer.cs: Return are more gentle token on failure. 
10688
10689         * pending.cs (PendingImplementation.InterfaceMethod): This routine
10690         had an out-of-sync index variable, which caused it to remove from
10691         the list of pending methods the wrong method sometimes.
10692
10693 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
10694
10695         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
10696         CanWrite, because those refer to this particular instance of the
10697         property, and do not take into account the fact that we can
10698         override single members of a property.
10699
10700         Constructor requires an EmitContext.  The resolution process does
10701         not happen here, but we need to compute the accessors before,
10702         because the resolution does not always happen for properties.
10703
10704         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
10705         subclass, before we did not update this flag, but we did update
10706         bindingflags. 
10707
10708         (GetAccessors): Drop this routine, as it did not work in the
10709         presence of partially overwritten set/get methods. 
10710
10711         Notice that this broke the cs1540 detection, but that will require
10712         more thinking. 
10713
10714 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10715
10716         * class.cs:
10717         * codegen.cs:
10718         * driver.cs: issue a warning instead of an error if we don't support
10719         debugging for the platform. Also ignore a couple of errors that may
10720         arise when trying to write the symbols. Undo my previous patch.
10721
10722 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10723
10724         * driver.cs: ignore /debug switch except for Unix platforms.
10725
10726 2002-10-23  Nick Drochak  <ndrochak@gol.com>
10727
10728         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
10729
10730 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
10731
10732         * driver.cs: Do not make mcs-debug conditional, so we do not break
10733         builds that use it.
10734
10735         * statement.cs (UsageVector.MergeChildren): I would like Martin to
10736         review this patch.  But basically after all the children variables
10737         have been merged, the value of "Breaks" was not being set to
10738         new_breaks for Switch blocks.  I think that it should be set after
10739         it has executed.  Currently I set this to the value of new_breaks,
10740         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
10741         conservative, but I do not understand this code very well.
10742
10743         I did not break anything in the build, so that is good ;-)
10744
10745         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
10746
10747 2002-10-20  Mark Crichton  <crichton@gimp.org>
10748
10749         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
10750
10751 2002-10-20  Nick Drochak  <ndrochak@gol.com>
10752
10753         * cfold.cs: Fixed compile blocker.
10754
10755 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
10756
10757         * driver.cs: I was chekcing the key, not the file.
10758
10759 2002-10-19  Ravi Pratap  <ravi@ximian.com>
10760
10761         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
10762         message that we were generating - we just need to silently return
10763         a null.
10764
10765 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
10766
10767         * class.cs (Event.Define): Change my previous commit, as this
10768         breaks the debugger.  This is a temporary hack, as it seems like
10769         the compiler is generating events incorrectly to begin with.
10770
10771         * expression.cs (Binary.ResolveOperator): Added support for 
10772         "U operator - (E x, E y)"
10773
10774         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
10775         y)".
10776
10777         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
10778         init-only variables, but this path did not take into account that
10779         there might be also instance readonly variables.  Correct this
10780         problem. 
10781
10782         This fixes bug 32253
10783
10784         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
10785         delegates as well.
10786
10787         * driver.cs: Change the extension for modules to `netmodule'
10788
10789         * cs-parser.jay: Improved slightly the location tracking for
10790         the debugger symbols.
10791
10792         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
10793         modifiers that were specified instead of the hardcoded value
10794         (FamAndAssem).  This was basically ignoring the static modifier,
10795         and others.  Fixes 32429.
10796
10797         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
10798         fixed a bug in the process (32476)
10799
10800         * expression.cs (ArrayAccess.EmitAssign): Patch from
10801         hwang_rob@yahoo.ca that fixes bug 31834.3
10802
10803 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
10804
10805         * driver.cs: Make the module extension .netmodule.
10806
10807 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
10808
10809         * driver.cs: Report an error if the resource file is not found
10810         instead of crashing.
10811
10812         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
10813         false, like Emit does.
10814
10815 2002-10-16  Nick Drochak  <ndrochak@gol.com>
10816
10817         * typemanager.cs: Remove unused private member.  Also reported mcs
10818         bug to report this as a warning like csc.
10819
10820 2002-10-15  Martin Baulig  <martin@gnome.org>
10821
10822         * statement.cs (Statement.Emit): Made this a virtual method; emits
10823         the line number info and calls DoEmit().
10824         (Statement.DoEmit): New protected abstract method, formerly knows
10825         as Statement.Emit().
10826
10827         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
10828
10829 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
10830
10831         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
10832         have fixed a remaining problem: not every AddXXXX was adding a
10833         fully qualified name.  
10834
10835         Now everyone registers a fully qualified name in the DeclSpace as
10836         being defined instead of the partial name.  
10837
10838         Downsides: we are slower than we need to be due to the excess
10839         copies and the names being registered this way.  
10840
10841         The reason for this is that we currently depend (on the corlib
10842         bootstrap for instance) that types are fully qualified, because
10843         we dump all the types in the namespace, and we should really have
10844         types inserted into the proper namespace, so we can only store the
10845         basenames in the defined_names array.
10846
10847 2002-10-10  Martin Baulig  <martin@gnome.org>
10848
10849         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
10850         from bug #31834, see the bug report for a testcase which is
10851         miscompiled.
10852
10853 2002-10-10  Martin Baulig  <martin@gnome.org>
10854
10855         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
10856         flow analysis code for this.
10857
10858         * statement.cs (Do, While, For): Tell the flow analysis code about
10859         infinite loops.
10860         (FlowBranching.UsageVector): Added support for infinite loops.
10861         (Block.Resolve): Moved the dead code elimination here and use flow
10862         analysis to do it.
10863
10864 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
10865
10866         * class.cs (Field.Define): Catch cycles on struct type
10867         definitions. 
10868
10869         * typemanager.cs (IsUnmanagedtype): Do not recursively check
10870         fields if the fields are static.  We only need to check instance
10871         fields. 
10872
10873         * expression.cs (As.DoResolve): Test for reference type.
10874
10875         * statement.cs (Using.ResolveExpression): Use
10876         ConvertImplicitRequired, not ConvertImplicit which reports an
10877         error on failture
10878         (Using.ResolveLocalVariableDecls): ditto.
10879
10880         * expression.cs (Binary.ResolveOperator): Report errors in a few
10881         places where we had to.
10882
10883         * typemanager.cs (IsUnmanagedtype): Finish implementation.
10884
10885 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
10886
10887         * expression.cs: Use StoreFromPtr instead of extracting the type
10888         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
10889
10890         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
10891         an enumeration value to a System.Enum, but System.Enum is not a
10892         value type, but an class type, so we need to box.
10893
10894         (Expression.ConvertExplicit): One codepath could return
10895         errors but not flag them.  Fix this.  Fixes #31853
10896
10897         * parameter.cs (Resolve): Do not allow void as a parameter type.
10898
10899 2002-10-06  Martin Baulig  <martin@gnome.org>
10900
10901         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
10902         if it's a class type and not a struct.  Fixes #31815.
10903
10904 2002-10-06  Martin Baulig  <martin@gnome.org>
10905
10906         * statement.cs: Reworked the flow analysis code a bit to make it
10907         usable for dead code elimination.
10908
10909 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10910
10911         * cs-parser.jay: allow empty source files. Fixes bug #31781.
10912
10913 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
10914
10915         * expression.cs (ComposedCast.DoResolveType): A quick workaround
10916         to fix the test 165, will investigate deeper.
10917
10918 2002-10-04  Martin Baulig  <martin@gnome.org>
10919
10920         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
10921         finally blocks actually work.
10922         (Try.Resolve): We don't need to create a sibling for `finally' if
10923         there is no finally block.
10924
10925 2002-10-04  Martin Baulig  <martin@gnome.org>
10926
10927         * class.cs (Constructor.Define): The default accessibility for a
10928         non-default constructor is private, not public.
10929
10930 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
10931
10932         * class.cs (Constructor): Make AllowedModifiers public, add
10933         EXTERN.
10934
10935         * cs-parser.jay: Perform the modifiers test here, as the
10936         constructor for the Constructor class usually receives a zero
10937         because of the way we create it (first we create, later we
10938         customize, and we were never checking the modifiers).
10939
10940         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
10941         is a version of LookupTypeReflection that includes the type-name
10942         cache.  This can be used as a fast path for functions that know
10943         the fully qualified name and are only calling into *.GetType() to
10944         obtain a composed type.
10945
10946         This is also used by TypeManager.LookupType during its type
10947         composition.
10948
10949         (LookupType): We now also track the real type name, as sometimes
10950         we can get a quey for the real type name from things like
10951         ComposedCast.  This fixes bug 31422.
10952
10953         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
10954         complete type fullname, it does not have to go through the type
10955         resolution system to obtain the composed version of the type (for
10956         obtaining arrays or pointers).
10957
10958         (Conditional.Emit): Use the EmitBoolExpression to
10959         generate nicer code, as requested by Paolo.
10960
10961         (ArrayCreation.CheckIndices): Use the patch from
10962         hwang_rob@yahoo.ca to validate the array initializers. 
10963
10964 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
10965
10966         * class.cs (ConstructorInitializer.Emit): simplify code by using
10967         Invocation.EmitCall, and at the same time, fix the bugs in calling
10968         parent constructors that took variable arguments. 
10969
10970         * ecore.cs (Expression.ConvertNumericExplicit,
10971         Expression.ImplicitNumericConversion): Remove the code that
10972         manually wrapped decimal (InternalTypeConstructor call is now gone
10973         as well).
10974
10975         * expression.cs (Cast.TryReduce): Also handle decimal types when
10976         trying to perform a constant fold on the type.
10977
10978         * typemanager.cs (IsUnmanagedtype): Partially implemented.
10979
10980         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
10981         that only turned off an error report, and did nothing else. 
10982
10983 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
10984
10985         * driver.cs: Handle and ignore /fullpaths
10986
10987 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
10988
10989         * expression.cs (Binary.ResolveOperator): Catch the case where
10990         DoNumericPromotions returns true, 
10991
10992         (Binary.DoNumericPromotions): Simplify the code, and the tests.
10993
10994 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
10995
10996         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
10997         report error 70.
10998
10999 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
11000
11001         * ecore.cs (ConvertNumericExplicit): It is not enough that the
11002         conversion exists, but it is also required that the conversion be
11003         performed.  This manifested in "(Type64Enum) 2".  
11004
11005         * class.cs (TypeManager.AddMethod): The fix is not to change
11006         AddEnum, because that one was using a fully qualified name (every
11007         DeclSpace derivative does), but to change the AddMethod routine
11008         that was using an un-namespaced name.  This now correctly reports
11009         the duplicated name.
11010
11011         Revert patch until I can properly fix it.  The issue
11012         is that we have a shared Type space across all namespaces
11013         currently, which is wrong.
11014
11015         Options include making the Namespace a DeclSpace, and merge
11016         current_namespace/current_container in the parser.
11017
11018 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
11019
11020         * cs-parser.jay: Improve error reporting when we get a different
11021         kind of expression in local_variable_type and
11022         local_variable_pointer_type. 
11023
11024         Propagate this to avoid missleading errors being reported.
11025
11026         * ecore.cs (ImplicitReferenceConversion): treat
11027         TypeManager.value_type as a target just like object_type.   As
11028         code like this:
11029
11030         ValueType v = 1;
11031
11032         Is valid, and needs to result in the int 1 being boxed before it
11033         is assigned to the value type v.
11034
11035         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
11036         to validate the enumeration name.
11037
11038         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
11039         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
11040         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
11041
11042         * ecore.cs (TryImplicitIntConversion): When doing an
11043         implicit-enumeration-conversion, check if the type is 64-bits and
11044         perform a conversion before passing to EnumConstant.
11045
11046 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
11047
11048         * decl.cs (Error_AmbiguousTypeReference); New routine used to
11049         report ambiguous type references.  Unlike the MS version, we
11050         report what the ambiguity is.   Innovation at work ;-)
11051
11052         (DeclSpace.FindType): Require a location argument to
11053         display when we display an ambiguous error.
11054
11055         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
11056
11057         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
11058
11059         * expression.cs (EmitDynamicInitializers): Apply patch from
11060         hwang_rob@yahoo.ca that fixes the order in which we emit our
11061         initializers. 
11062
11063 2002-09-21  Martin Baulig  <martin@gnome.org>
11064
11065         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
11066         delegate takes no arguments.
11067
11068 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
11069
11070         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
11071         from integers.
11072
11073         * expression.cs: Extract the underlying type.
11074
11075         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
11076
11077         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
11078
11079 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
11080
11081         * class.cs (TypeContainer.DefineType): We can not use the nice
11082         PackingSize with the size set to 1 DefineType method, because it
11083         will not allow us to define the interfaces that the struct
11084         implements.
11085
11086         This completes the fixing of bug 27287
11087
11088         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
11089         means also structs.  This fixes part of the problem. 
11090         (Expresion.ImplicitReferenceConversionExists): ditto.
11091
11092         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
11093         error if there were no errors reported during the type lookup
11094         process, to avoid duplicates or redundant errors.  Without this
11095         you would get an ambiguous errors plus a type not found.  We have
11096         beaten the user enough with the first error.  
11097
11098         (DeclSparce.FindType): Emit a warning if we have an ambiguous
11099         reference. 
11100
11101         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
11102         during the resolution process, stop the lookup, this avoids
11103         repeated error reports (same error twice).
11104
11105         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
11106
11107         * typemanager.cs (LookupType): Redo the type lookup code to match
11108         the needs of System.Reflection.  
11109
11110         The issue is that System.Reflection requires references to nested
11111         types to begin with a "+" sign instead of a dot.  So toplevel
11112         types look like: "NameSpace.TopLevelClass", and nested ones look
11113         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
11114         levels. 
11115
11116 2002-09-19  Martin Baulig  <martin@gnome.org>
11117
11118         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
11119         says that a method always returns or always throws an exception,
11120         don't report the CS0161.
11121
11122         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
11123         set `Returns = new_returns'.
11124
11125 2002-09-19  Martin Baulig  <martin@gnome.org>
11126
11127         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
11128         to an enum constant, check for a CS0176.
11129
11130 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
11131
11132         * class.cs (TypeContainer.CheckPairedOperators): Now we check
11133         for operators that must be in pairs and report errors.
11134
11135         * ecore.cs (SimpleName.DoResolveType): During the initial type
11136         resolution process, when we define types recursively, we must
11137         check first for types in our current scope before we perform
11138         lookups in the enclosing scopes.
11139
11140         * expression.cs (MakeByteBlob): Handle Decimal blobs.
11141
11142         (Invocation.VerifyArgumentsCompat): Call
11143         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
11144         I thought we were supposed to always call this, but there are a
11145         few places in the code where we dont do it.
11146
11147 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
11148
11149         * driver.cs: Add support in -linkres and -resource to specify the
11150         name of the identifier.
11151
11152 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
11153
11154         * ecore.cs (StandardConversionExists): Sync with the conversion
11155         code: allow anything-* to void* conversions.
11156
11157         (FindMostSpecificSource): Use an Expression argument
11158         instead of a Type, because we might be handed over a Literal which
11159         gets a few more implicit conversions that plain types do not.  So
11160         this information was being lost.
11161
11162         Also, we drop the temporary type-holder expression when not
11163         required.
11164
11165 2002-09-17  Martin Baulig  <martin@gnome.org>
11166
11167         * class.cs (PropertyBase.CheckBase): Don't check the base class if
11168         this is an explicit interface implementation.
11169
11170 2002-09-17  Martin Baulig  <martin@gnome.org>
11171
11172         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
11173         different `IndexerName' attributes.
11174
11175         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
11176         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
11177         virtual CommonResolve().
11178
11179 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
11180
11181         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
11182         and convert that to the UnderlyingType.
11183
11184         * statement.cs (Foreach.Resolve): Indexers are just like variables
11185         or PropertyAccesses.
11186
11187         * cs-tokenizer.cs (consume_string): Track line numbers and columns
11188         inside quoted strings, we were not doing this before.
11189
11190 2002-09-16  Martin Baulig  <martin@gnome.org>
11191
11192         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
11193         resolve it.  This is needed for the definite assignment check of the
11194         instance expression, fixes bug #29846.
11195         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
11196
11197 2002-09-16  Nick Drochak  <ndrochak@gol.com>
11198
11199         * parameter.cs: Fix compile error.  Cannot reference static member
11200         from an instance object.  Is this an mcs bug?
11201
11202 2002-09-14  Martin Baulig  <martin@gnome.org>
11203
11204         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
11205         multiple times.  Fixes bug #30295, added test-166.cs.
11206
11207 2002-09-14  Martin Baulig  <martin@gnome.org>
11208
11209         * statement.cs (Block.Emit): Don't emit unreachable code.
11210         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
11211         `break' statements.
11212         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
11213
11214 2002-09-14  Martin Baulig  <martin@gnome.org>
11215
11216         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
11217         is set.
11218
11219 2002-09-14  Martin Baulig  <martin@gnome.org>
11220
11221         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
11222         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
11223         be false on the ms runtime.
11224
11225 2002-09-13  Martin Baulig  <martin@gnome.org>
11226
11227         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
11228         the CS0038 error message.
11229
11230 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
11231
11232         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
11233         constant inside, return it.
11234
11235 2002-09-12  Martin Baulig  <martin@gnome.org>
11236
11237         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
11238         implicit conversion can be done between enum types.
11239
11240         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
11241         check whether an implicit conversion to the current enum's UnderlyingType
11242         exists and report an error if not.
11243
11244         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
11245         without debugging support.
11246
11247         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
11248         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
11249
11250 2002-09-12  Martin Baulig  <martin@gnome.org>
11251
11252         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
11253
11254         * ecore.cs (IMemberExpr.DeclaringType): New property.
11255         (SimpleName.SimpleNameResolve): Check whether we're accessing a
11256         nonstatic member of an outer type (CS0038).
11257
11258 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
11259
11260         * driver.cs: Activate the using-error detector at warning level
11261         4 (at least for MS-compatible APIs).
11262
11263         * namespace.cs (VerifyUsing): Small buglett fix.
11264
11265         * pending.cs (PendingImplementation): pass the container pointer. 
11266
11267         * interface.cs (GetMethods): Allow for recursive definition.  Long
11268         term, I would like to move every type to support recursive
11269         definitions, not the current ordering mechanism that we have right
11270         now.
11271
11272         The situation is this: Attributes are handled before interfaces,
11273         so we can apply attributes to interfaces.  But some attributes
11274         implement interfaces, we will now handle the simple cases
11275         (recursive definitions will just get an error).  
11276
11277         * parameter.cs: Only invalidate types at the end if we fail to
11278         lookup all types.  
11279
11280 2002-09-09  Martin Baulig  <martin@gnome.org>
11281
11282         * ecore.cs (PropertyExpr.Emit): Also check for
11283         TypeManager.system_int_array_get_length so this'll also work when
11284         compiling corlib.  Fixes #30003.
11285
11286 2002-09-09  Martin Baulig  <martin@gnome.org>
11287
11288         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
11289         and throw an exception if we can't get the type's size.  Fixed #30040,
11290         added test-165.cs.
11291
11292 2002-09-09  Martin Baulig  <martin@gnome.org>
11293
11294         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
11295
11296         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
11297         context.  Fixes bug #30027.
11298
11299         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
11300         virtual functions.  Fixes bug #30043, added test-164.cs.
11301
11302 2002-09-08  Ravi Pratap  <ravi@ximian.com>
11303
11304         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
11305
11306 2002-09-08  Nick Drochak  <ndrochak@gol.com>
11307
11308         * driver.cs: Use an object to get the windows codepage since it's not a
11309         static property.
11310
11311 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
11312
11313         * statement.cs (For.Emit): for infinite loops (test == null)
11314         return whether there is a break inside, not always "true".
11315
11316         * namespace.cs (UsingEntry): New struct to hold the name of the
11317         using definition, the location where it is defined, and whether it
11318         has been used in a successful type lookup.
11319
11320         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
11321         strings.
11322
11323         * decl.cs: ditto.
11324
11325 2002-09-06  Ravi Pratap  <ravi@ximian.com>
11326
11327         * attribute.cs : Fix incorrect code which relied on catching
11328         a NullReferenceException to detect a null being passed in
11329         where an object was expected.
11330
11331 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
11332
11333         * statement.cs (Try): flag the catch variable as assigned
11334
11335         * expression.cs (Cast): Simplified by using ResolveType instead of
11336         manually resolving.
11337
11338         * statement.cs (Catch): Fix bug by using ResolveType.
11339
11340 2002-09-06  Ravi Pratap  <ravi@ximian.com>
11341
11342         * expression.cs (BetterConversion): Special case for when we have
11343         a NullLiteral as the argument and we have to choose between string
11344         and object types - we choose string the way csc does.
11345
11346         * attribute.cs (Attribute.Resolve): Catch the
11347         NullReferenceException and report error #182 since the Mono
11348         runtime no more has the bug and having this exception raised means
11349         we tried to select a constructor which takes an object and is
11350         passed a null.
11351
11352 2002-09-05  Ravi Pratap  <ravi@ximian.com>
11353
11354         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
11355         message (1502, 1503) when we can't locate a method after overload
11356         resolution. This is much more informative and closes the bug
11357         Miguel reported.
11358
11359         * interface.cs (PopulateMethod): Return if there are no argument
11360         types. Fixes a NullReferenceException bug.
11361
11362         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
11363         expressions too. Previously we were checking only in one place for
11364         positional arguments leaving out named arguments.
11365
11366         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
11367         type to the enum type is not allowed. Remove code corresponding to
11368         that.
11369
11370         (ConvertNumericExplicit): Allow explicit conversions from
11371         the underlying type to enum type. This precisely follows the spec
11372         and closes a bug filed by Gonzalo.
11373
11374 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11375
11376         * compiler.csproj:
11377         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
11378
11379 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
11380
11381         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
11382         it was important that we stored the right value after the
11383         reduction in `converted'.
11384
11385 2002-09-04  Martin Baulig  <martin@gnome.org>
11386
11387         * location.cs (Location.SymbolDocument): Use full pathnames for the
11388         source files.
11389
11390 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
11391
11392         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
11393         of the expression resolve mechanism, because that will catch the
11394         SimpleName error failures.
11395
11396         (Conditional): If we can not resolve the
11397         expression, return, do not crash.
11398
11399 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11400
11401         * cs-tokenizer.cs:
11402         (location): display token name instead of its number.
11403
11404 2002-08-28  Martin Baulig  <martin@gnome.org>
11405
11406         * expression.cs (Binary.ResolveOperator): Don't silently return
11407         but return an error if an operator cannot be applied between two
11408         enum types.
11409
11410 2002-08-28  Martin Baulig  <martin@gnome.org>
11411
11412         * class.cs (Constructor.Define): Set the permission attributes
11413         correctly instead of making all constructors public.
11414
11415 2002-08-28  Martin Baulig  <martin@gnome.org>
11416
11417         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
11418         for private members before reporting a CS0103; if we find anything,
11419         it's a CS0122.
11420
11421 2002-08-28  Martin Baulig  <martin@gnome.org>
11422
11423         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
11424         to check whether `closure_start_type == closure_invocation_type',
11425         we also need to check whether `m.DeclaringType == closure_invocation_type'
11426         before bypassing the permission checks.  We might be accessing
11427         protected/private members from the base class.
11428         (TypeManager.RealMemberLookup): Only set private_ok if private
11429         members were requested via BindingFlags.NonPublic.
11430
11431         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
11432
11433         * expression.cs (MemberAccess.ResolveMemberAccess): Set
11434         MethodGroupExpr.IsExplicitImpl if appropriate.
11435         (Invocation.DoResolve): Don't report the CS0120 for explicit
11436         interface implementations.
11437
11438 2002-08-27  Martin Baulig  <martin@gnome.org>
11439
11440         * expression.cs (Invocation.DoResolve): If this is a static
11441         method and we don't have an InstanceExpression, we must report
11442         a CS0120.
11443
11444 2002-08-25  Martin Baulig  <martin@gnome.org>
11445
11446         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
11447         `==' between a valuetype and an object.
11448
11449 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
11450
11451         * ecore.cs (TypeExpr): Provide a ToString method.
11452
11453 2002-08-24  Martin Baulig  <martin@gnome.org>
11454
11455         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
11456         now called proggie.dbg and it's a binary file.
11457
11458 2002-08-23  Martin Baulig  <martin@gnome.org>
11459
11460         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
11461
11462 2002-08-23  Martin Baulig  <martin@gnome.org>
11463
11464         * struct.cs (MyStructInfo.ctor): Make this work with empty
11465         structs; it's not allowed to use foreach() on null.
11466
11467 2002-08-23  Martin Baulig  <martin@gnome.org>
11468
11469         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
11470         writer the full pathname of the generated assembly.
11471
11472 2002-08-23  Martin Baulig  <martin@gnome.org>
11473
11474         * statements.cs (FlowBranching.UsageVector.MergeChildren):
11475         A `finally' block never returns or breaks; improved handling of
11476         unreachable code.
11477
11478 2002-08-23  Martin Baulig  <martin@gnome.org>
11479
11480         * statement.cs (Throw.Resolve): Allow `throw null'.
11481
11482 2002-08-23  Martin Baulig  <martin@gnome.org>
11483
11484         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
11485         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
11486         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
11487         MemberLookup would return a wrong event if this is an explicit
11488         interface implementation and the class has an event with the same
11489         name.
11490
11491 2002-08-23  Martin Baulig  <martin@gnome.org>
11492
11493         * statement.cs (Block.AddChildVariableNames): New public method.
11494         (Block.AddChildVariableName): Likewise.
11495         (Block.IsVariableNameUsedInChildBlock): Likewise.
11496         (Block.AddVariable): Check whether a variable name has already
11497         been used in a child block.
11498
11499         * cs-parser.jay (declare_local_variables): Mark all variable names
11500         from the current block as being used in a child block in the
11501         implicit block.
11502
11503 2002-08-23  Martin Baulig  <martin@gnome.org>
11504
11505         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
11506         find the symbol writer.
11507
11508         * driver.cs: csc also allows the arguments to /define being
11509         separated by commas, not only by semicolons.
11510
11511 2002-08-23  Martin Baulig  <martin@gnome.org>
11512
11513         * interface.cs (Interface.GetMembers): Added static check for events.
11514
11515 2002-08-15  Martin Baulig  <martin@gnome.org>
11516
11517         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
11518         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
11519
11520         * ecore.cs (Expression.MemberLookup): Added documentation and explained
11521         why the MethodData.EmitDestructor() change was necessary.
11522
11523 2002-08-20  Martin Baulig  <martin@gnome.org>
11524
11525         * class.cs (TypeContainer.FindMembers): Added static check for events.
11526
11527         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
11528
11529         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
11530         use Type.GetEvents(), not Type.FindMembers().
11531
11532 2002-08-20  Martin Baulig  <martin@gnome.org>
11533
11534         * decl.cs (MemberCache): Added a special method cache which will
11535         be used for method-only searched.  This ensures that a method
11536         search will return a MethodInfo with the correct ReflectedType for
11537         inherited methods.      
11538
11539 2002-08-20  Martin Baulig  <martin@gnome.org>
11540
11541         * decl.cs (DeclSpace.FindMembers): Made this public.
11542
11543 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11544
11545         * delegate.cs: fixed build on windows.
11546         [FIXME:  Filed as bug #29150: MCS must report these errors.]
11547
11548 2002-08-19  Ravi Pratap  <ravi@ximian.com>
11549
11550         * ecore.cs (StandardConversionExists): Return a false
11551         if we are trying to convert the void type to anything else
11552         since that is not allowed.
11553
11554         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
11555         we flag error 70 in the event an event is trying to be accessed
11556         directly from outside the declaring type.
11557
11558 2002-08-20  Martin Baulig  <martin@gnome.org>
11559
11560         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
11561         MemberCache from typemanager.cs to decl.cs.
11562
11563 2002-08-19  Martin Baulig  <martin@gnome.org>
11564
11565         * class.cs (TypeContainer): Implement IMemberContainer.
11566         (TypeContainer.DefineMembers): Create the MemberCache.
11567         (TypeContainer.FindMembers): Do better BindingFlags checking; only
11568         return public members if BindingFlags.Public was given, check
11569         whether members are static.
11570
11571 2002-08-16  Martin Baulig  <martin@gnome.org>
11572
11573         * decl.cs (DeclSpace.Define): Splitted this in Define and
11574         DefineMembers.  DefineMembers is called first and initializes the
11575         MemberCache.
11576
11577         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
11578         DefineMembers() on all our DeclSpaces.
11579
11580         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
11581         but call DefineMembers() on all nested interfaces.  We call their
11582         Define() in our new Define() function.
11583
11584         * interface.cs (Interface): Implement IMemberContainer.
11585         (Interface.Define): Moved all code except the attribute stuf to
11586         DefineMembers().
11587         (Interface.DefineMembers): Initialize the member cache.
11588
11589         * typemanager.cs (IMemberFinder): Removed this interface, we don't
11590         need this anymore since we can use MemberCache.FindMembers directly.
11591
11592 2002-08-19  Martin Baulig  <martin@gnome.org>
11593
11594         * typemanager.cs (MemberCache): When creating the cache for an
11595         interface type, add all inherited members.
11596         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
11597         to `out bool used_cache' and documented it.
11598         (TypeManager.MemberLookup): If we already used the cache in the first
11599         iteration, we don't need to do the interfaces check.
11600
11601 2002-08-19  Martin Baulig  <martin@gnome.org>
11602
11603         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
11604         here from IMemberFinder and don't implement this interface anymore.
11605         (DeclSpace.MemberCache): Moved here from IMemberFinder.
11606
11607         * typemanager.cs (IMemberFinder): This interface is now only used by
11608         classes which actually support the member cache.
11609         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
11610         since we only put DeclSpaces into this Hashtable.
11611         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
11612         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
11613
11614 2002-08-16  Martin Baulig  <martin@gnome.org>
11615
11616         * typemanager.cs (ICachingMemberFinder): Removed.
11617         (IMemberFinder.MemberCache): New property.
11618         (TypeManager.FindMembers): Merged this with RealFindMembers().
11619         This function will never be called from TypeManager.MemberLookup()
11620         so we can't use the cache here, just the IMemberFinder.
11621         (TypeManager.MemberLookup_FindMembers): Check whether the
11622         IMemberFinder has a MemberCache and call the cache's FindMembers
11623         function.
11624         (MemberCache): Rewrote larger parts of this yet another time and
11625         cleaned it up a bit.
11626
11627 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
11628
11629         * driver.cs (LoadArgs): Support quoting.
11630
11631         (Usage): Show the CSC-like command line arguments.
11632
11633         Improved a few error messages.
11634
11635 2002-08-15  Martin Baulig  <martin@gnome.org>
11636
11637         * typemanager.cs (IMemberContainer.Type): New property.
11638         (IMemberContainer.IsInterface): New property.
11639
11640         The following changes are conditional to BROKEN_RUNTIME, which is
11641         defined at the top of the file.
11642
11643         * typemanager.cs (MemberCache.MemberCache): Don't add the base
11644         class'es members, but add all members from TypeHandle.ObjectType
11645         if we're an interface.
11646         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
11647         is the current type.
11648         (MemberCache.CacheEntry.Container): Removed this field.
11649         (TypeHandle.GetMembers): Include inherited members.
11650
11651 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11652
11653         * typemanager.cs: fixed compilation and added a comment on a field that
11654         is never used.
11655
11656 2002-08-15  Martin Baulig  <martin@gnome.org>
11657
11658         * class.cs (ConstructorInitializer.Resolve): In the
11659         Expression.MemberLookup call, use the queried_type as
11660         invocation_type.
11661
11662         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
11663         declared' attribute, it's always true.
11664         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
11665         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
11666         temporary wrapper for FindMembers which tells MemberLookup whether
11667         members from the base classes are included in the return value.
11668         This will go away soon.
11669         (TypeManager.MemberLookup): Use this temporary hack here; once the
11670         new MemberCache is completed, we don't need to do the DeclaredOnly
11671         looping here anymore since the MemberCache will take care of this.
11672         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
11673         (MemberCache): When creating the MemberCache for a class, get
11674         members from the current class and all its base classes.
11675         (MemberCache.CacheEntry.Container): New field.  This is a
11676         temporary hack until the Mono runtime is fixed to distinguish
11677         between ReflectedType and DeclaringType.  It allows us to use MCS
11678         with both the MS runtime and the unfixed Mono runtime without
11679         problems and without accecting performance.
11680         (MemberCache.SearchMembers): The DeclaredOnly looping from
11681         TypeManager.MemberLookup is now done here.      
11682
11683 2002-08-14  Martin Baulig  <martin@gnome.org>
11684
11685         * statement.cs (MyStructInfo.MyStructInfo): Don't call
11686         Type.GetFields on dynamic types but get the fields from the
11687         corresponding TypeContainer.
11688         (MyStructInfo.GetStructInfo): Added check for enum types.
11689
11690         * typemanager.cs (MemberList.IsSynchronized): Implemented.
11691         (MemberList.SyncRoot): Implemented.
11692         (TypeManager.FilterWithClosure): No need to check permissions if
11693         closure_start_type == closure_invocation_type, don't crash if
11694         closure_invocation_type is null.
11695
11696 2002-08-13  Martin Baulig  <martin@gnome.org>
11697
11698         Rewrote TypeContainer.FindMembers to use a member cache.  This
11699         gives us a speed increase of about 35% for the self-hosting MCS
11700         build and of about 15-20% for the class libs (both on GNU/Linux).
11701
11702         * report.cs (Timer): New class to get enhanced profiling.  This
11703         whole class is "TIMER" conditional since it remarkably slows down
11704         compilation speed.
11705
11706         * class.cs (MemberList): New class.  This is an IList wrapper
11707         which we're now using instead of passing MemberInfo[]'s around to
11708         avoid copying this array unnecessarily.
11709         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
11710         (ICachingMemberFinder, IMemberContainer): New interface.
11711         (TypeManager.FilterWithClosure): If `criteria' is null, the name
11712         has already been checked, otherwise use it for the name comparision.
11713         (TypeManager.FindMembers): Renamed to RealMemberFinder and
11714         provided wrapper which tries to use ICachingMemberFinder.FindMembers
11715         if possible.  Returns a MemberList, not a MemberInfo [].
11716         (TypeHandle): New class, implements IMemberContainer.  We create
11717         one instance of this class per type, it contains a MemberCache
11718         which is used to do the member lookups.
11719         (MemberCache): New class.  Each instance of this class contains
11720         all members of a type and a name-based hash table.
11721         (MemberCache.FindMembers): This is our new member lookup
11722         function.  First, it looks up all members of the requested name in
11723         the hash table.  Then, it walks this list and sorts out all
11724         applicable members and returns them.
11725
11726 2002-08-13  Martin Baulig  <martin@gnome.org>
11727
11728         In addition to a nice code cleanup, this gives us a performance
11729         increase of about 1.4% on GNU/Linux - not much, but it's already
11730         half a second for the self-hosting MCS compilation.
11731
11732         * typemanager.cs (IMemberFinder): New interface.  It is used by
11733         TypeManager.FindMembers to call FindMembers on a TypeContainer,
11734         Enum, Delegate or Interface.
11735         (TypeManager.finder_to_member_finder): New PtrHashtable.
11736         (TypeManager.finder_to_container): Removed.
11737         (TypeManager.finder_to_delegate): Removed.
11738         (TypeManager.finder_to_interface): Removed.
11739         (TypeManager.finder_to_enum): Removed.
11740
11741         * interface.cs (Interface): Implement IMemberFinder.
11742
11743         * delegate.cs (Delegate): Implement IMemberFinder.
11744
11745         * enum.cs (Enum): Implement IMemberFinder.
11746
11747         * class.cs (TypeContainer): Implement IMemberFinder.
11748
11749 2002-08-12  Martin Baulig  <martin@gnome.org>
11750
11751         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
11752
11753 2002-08-12  Martin Baulig  <martin@gnome.org>
11754
11755         * ecore.cs (ITypeExpression): New interface for expressions which
11756         resolve to a type.
11757         (TypeExpression): Renamed to TypeLookupExpression.
11758         (Expression.DoResolve): If we're doing a types-only lookup, the
11759         expression must implement the ITypeExpression interface and we
11760         call DoResolveType() on it.
11761         (SimpleName): Implement the new ITypeExpression interface.
11762         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
11763         hack, the situation that we're only looking up types can't happen
11764         anymore when this method is called.  Moved the type lookup code to
11765         DoResolveType() and call it.
11766         (SimpleName.DoResolveType): This ITypeExpression interface method
11767         is now doing the types-only lookup.
11768         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
11769         (ResolveFlags): Added MaskExprClass.
11770
11771         * expression.cs (MemberAccess): Implement the ITypeExpression
11772         interface.
11773         (MemberAccess.DoResolve): Added support for a types-only lookup
11774         when we're called via ITypeExpression.DoResolveType().
11775         (ComposedCast): Implement the ITypeExpression interface.
11776
11777         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
11778         Expression.Resolve() with ResolveFlags.Type instead.
11779
11780 2002-08-12  Martin Baulig  <martin@gnome.org>
11781
11782         * interface.cs (Interface.Define): Apply attributes.
11783
11784         * attribute.cs (Attribute.ApplyAttributes): Added support for
11785         interface attributes.
11786
11787 2002-08-11  Martin Baulig  <martin@gnome.org>
11788
11789         * statement.cs (Block.Emit): Only check the "this" variable if we
11790         do not always throw an exception.
11791
11792         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
11793         whether the property has a set accessor.
11794
11795 2002-08-11  Martin Baulig  <martin@gnome.org>
11796
11797         Added control flow analysis support for structs.
11798
11799         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
11800         with control flow analysis turned off.
11801         (IVariable): New interface.
11802         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
11803         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
11804         (FieldExpr.DoResolve): Resolve the instance expression with flow
11805         analysis turned off and do the definite assignment check after the
11806         resolving when we know what the expression will resolve to.
11807
11808         * expression.cs (LocalVariableReference, ParameterReference):
11809         Implement the new IVariable interface, only call the flow analysis
11810         code if ec.DoFlowAnalysis is true.
11811         (This): Added constructor which takes a Block argument.  Implement
11812         the new IVariable interface.
11813         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
11814         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
11815         This does the definite assignment checks for struct members.
11816
11817         * class.cs (Constructor.Emit): If this is a non-static `struct'
11818         constructor which doesn't have any initializer, call
11819         Block.AddThisVariable() to tell the flow analysis code that all
11820         struct elements must be initialized before control returns from
11821         the constructor.
11822
11823         * statement.cs (MyStructInfo): New public class.
11824         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
11825         argument to this indexer.  If non-zero, check an individual struct
11826         member, not the whole struct.
11827         (FlowBranching.CheckOutParameters): Check struct members.
11828         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
11829         overloaded versions of these methods which take an additional
11830         `int field_idx' argument to check struct members.
11831         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
11832         overloaded versions of these methods which take an additional
11833         `string field_name' argument to check struct member.s
11834         (VariableInfo): Implement the IVariable interface.
11835         (VariableInfo.StructInfo): New public property.  Returns the
11836         MyStructInfo instance of the variable if it's a struct or null.
11837         (Block.AddThisVariable): New public method.  This is called from
11838         Constructor.Emit() for non-static `struct' constructor which do
11839         not have any initializer.  It creates a special variable for the
11840         "this" instance variable which will be checked by the flow
11841         analysis code to ensure that all of the struct's fields are
11842         initialized before control returns from the constructor.
11843         (UsageVector): Added support for struct members.  If a
11844         variable/parameter is a struct with N members, we reserve a slot
11845         in the usage vector for each member.  A struct is considered fully
11846         initialized if either the struct itself (slot 0) or all its
11847         members are initialized.
11848
11849 2002-08-08  Martin Baulig  <martin@gnome.org>
11850
11851         * driver.cs (Driver.MainDriver): Only report an error CS5001
11852         if there were no compilation errors.
11853
11854         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
11855         `UnsafeContext' property to determine whether the parent is in
11856         unsafe context rather than checking the parent's ModFlags:
11857         classes nested in an unsafe class are unsafe as well.
11858
11859 2002-08-08  Martin Baulig  <martin@gnome.org>
11860
11861         * statement.cs (UsageVector.MergeChildren): Distinguish between
11862         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
11863         we return.  Added test17() and test18() to test-154.cs.
11864
11865 2002-08-08  Martin Baulig  <martin@gnome.org>
11866
11867         * typemanager.cs (TypeManager.FilterWithClosure): If we have
11868         Family access, make sure the invoking type isn't a subclass of the
11869         queried type (that'd be a CS1540).
11870
11871         * ecore.cs (Expression.MemberLookup): Added overloaded version of
11872         this method which takes an additional `Type invocation_type'.
11873
11874         * expression.cs (BaseAccess.DoResolve): Use the base type as
11875         invocation and query type.
11876         (MemberAccess.DoResolve): If the lookup failed and we're about to
11877         report a CS0122, try a lookup with the ec.ContainerType - if this
11878         succeeds, we must report a CS1540.
11879
11880 2002-08-08  Martin Baulig  <martin@gnome.org>
11881
11882         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
11883         (MethodGroupExpr): Implement the IMemberExpr interface.
11884
11885         * expression (MemberAccess.ResolveMemberAccess): No need to have
11886         any special code for MethodGroupExprs anymore, they're now
11887         IMemberExprs.   
11888
11889 2002-08-08  Martin Baulig  <martin@gnome.org>
11890
11891         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
11892         Family, FamANDAssem and FamORAssem permissions.
11893         (TypeManager.IsSubclassOrNestedChildOf): New public method.
11894
11895 2002-08-08  Martin Baulig  <martin@gnome.org>
11896
11897         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
11898         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
11899         or loop block.
11900
11901 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
11902
11903         * driver.cs: implemented /resource option to embed managed resources.
11904
11905 2002-08-07  Martin Baulig  <martin@gnome.org>
11906
11907         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
11908         (FieldBase.HasFieldInitializer): New public property.
11909         (FieldBase.GetInitializerExpression): New public method.  Resolves and
11910         returns the field initializer and makes sure it is only resolved once.
11911         (TypeContainer.EmitFieldInitializers): Call
11912         FieldBase.GetInitializerExpression to get the initializer, this ensures
11913         that it isn't resolved multiple times.
11914
11915         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
11916         the resolving process (SimpleName/MemberLookup) that we're currently
11917         emitting a field initializer (which must not access any instance members,
11918         this is an error CS0236).
11919
11920         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
11921         argument, if the `IsFieldInitializer' flag is set, we must report and
11922         error CS0236 and not an error CS0120.   
11923
11924 2002-08-07  Martin Baulig  <martin@gnome.org>
11925
11926         * ecore.cs (IMemberExpr): New public interface.
11927         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
11928         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
11929         if the expression is an IMemberExpr.
11930
11931         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
11932         to be null, implicitly default to `this' if we're non-static in
11933         this case.  Simplified the code a lot by using the new IMemberExpr
11934         interface.  Also fixed bug #28176 here.
11935
11936 2002-08-06  Martin Baulig  <martin@gnome.org>
11937
11938         * cs-parser.jay (SimpleLookup): Removed.  We need to create
11939         ParameterReferences during semantic analysis so that we can do a
11940         type-only search when resolving Cast, TypeOf and SizeOf.
11941         (block): Pass the `current_local_parameters' to the Block's
11942         constructor.
11943
11944         * class.cs (ConstructorInitializer): Added `Parameters parameters'
11945         argument to the constructor.
11946         (ConstructorInitializer.Resolve): Create a temporary implicit
11947         block with the parameters.
11948
11949         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
11950         references here if we aren't doing a type-only search.
11951
11952         * statement.cs (Block): Added constructor which takes a
11953         `Parameters parameters' argument.
11954         (Block.Parameters): New public property.
11955
11956         * support.cs (InternalParameters.Parameters): Renamed `parameters'
11957         to `Parameters' and made it public readonly.
11958
11959 2002-08-06  Martin Baulig  <martin@gnome.org>
11960
11961         * ecore.cs (Expression.Warning): Made this public as well.
11962
11963         * report.cs (Report.Debug): Print the contents of collections.
11964
11965 2002-08-06  Martin Baulig  <martin@gnome.org>
11966
11967         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
11968         used to tell Resolve() which kinds of expressions it may return.
11969         (Expression.Resolve): Added overloaded version of this method which
11970         takes a `ResolveFlags flags' argument.  This can be used to tell
11971         Resolve() which kinds of expressions it may return.  Reports a
11972         CS0118 on error.
11973         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
11974         ResolveFlags.SimpleName.
11975         (Expression.Error118): Added overloaded version of this method which
11976         takes a `ResolveFlags flags' argument.  It uses the flags to determine
11977         which kinds of expressions are allowed.
11978
11979         * expression.cs (Argument.ResolveMethodGroup): New public method.
11980         Resolves an argument, but allows a MethodGroup to be returned.
11981         This is used when invoking a delegate.
11982
11983         * TODO: Updated a bit.
11984
11985 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11986
11987         Fixed compilation with csc.
11988
11989         * ecore.cs: Expression.Error made public. Is this correct? Should
11990         Warning be made public too?
11991
11992         * expression.cs: use ea.Location instead of ea.loc.
11993         [FIXME:  Filed as bug #28607: MCS must report these errors.]
11994
11995 2002-08-06  Martin Baulig  <martin@gnome.org>
11996
11997         * ecore.cs (Expression.loc): Moved the location here instead of
11998         duplicating it in all derived classes.
11999         (Expression.Location): New public property.
12000         (Expression.Error, Expression.Warning): Made them non-static and
12001         removed the location argument.
12002         (Expression.Warning): Added overloaded version which takes an
12003         `int level' argument.
12004         (Expression.Error118): Make this non-static and removed the
12005         expression and location arguments.
12006         (TypeExpr): Added location argument to the constructor.
12007
12008         * expression.cs (StaticCallExpr): Added location argument to
12009         the constructor.
12010         (Indirection, PointerArithmetic): Likewise.
12011         (CheckedExpr, UnCheckedExpr): Likewise.
12012         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
12013         (StringPtr): Likewise.
12014
12015
12016 2002-08-05  Martin Baulig  <martin@gnome.org>
12017
12018         * expression.cs (BaseAccess.DoResolve): Actually report errors.
12019
12020         * assign.cs (Assign.DoResolve): Check whether the source
12021         expression is a value or variable.
12022
12023         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
12024         while resolving the corresponding blocks.
12025
12026         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
12027         an error, don't silently return null.
12028
12029         * statement.cs (Block.AddVariable): Do the error reporting here
12030         and distinguish between CS0128 and CS0136.
12031         (Block.DoResolve): Report all unused labels (warning CS0164).
12032         (LabeledStatement): Pass the location to the constructor.
12033         (LabeledStatement.HasBeenReferenced): New property.
12034         (LabeledStatement.Resolve): Set it to true here.
12035
12036         * statement.cs (Return.Emit): Return success even after reporting
12037         a type mismatch error (CS0126 or CS0127), this is what csc does and
12038         it avoids confusing the users with any consecutive errors.
12039
12040 2002-08-05  Martin Baulig  <martin@gnome.org>
12041
12042         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
12043
12044         * const.cs (Const.LookupConstantValue): Catch circular definitions.
12045
12046         * expression.cs (MemberAccess.DoResolve): Silently return if an
12047         error has already been reported.
12048
12049         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
12050         error has already been reported.
12051
12052 2002-08-05  Martin Baulig  <martin@gnome.org>
12053
12054         * statement.cs (UsageVector): Only initialize the `parameters'
12055         vector if we actually have any "out" parameters.
12056
12057 2002-08-05  Martin Baulig  <martin@gnome.org>
12058
12059         * expression.cs (Binary.ResolveOperator): When combining delegates,
12060         they must have the same type.
12061
12062 2002-08-05  Martin Baulig  <martin@gnome.org>
12063
12064         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
12065         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
12066         work with the ms runtime and we also don't need it: if we're a
12067         PropertyBuilder and not in the `indexer_arguments' hash, then we
12068         are a property and not an indexer.
12069
12070         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
12071         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
12072         since the latter one doesn't work with the ms runtime.
12073
12074 2002-08-03  Martin Baulig  <martin@gnome.org>
12075
12076         Fixed bugs #27998 and #22735.
12077
12078         * class.cs (Method.IsOperator): New public field.
12079         (Method.CheckBase): Report CS0111 if there's already a method
12080         with the same parameters in the current class.  Report CS0508 when
12081         attempting to change the return type of an inherited method.
12082         (MethodData.Emit): Report CS0179 if a method doesn't have a body
12083         and it's not marked abstract or extern.
12084         (PropertyBase): New abstract base class for Property and Indexer.
12085         (PropertyBase.CheckBase): Moved here from Property and made it work
12086         for indexers.
12087         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
12088         the same so we can reuse it there.
12089         (Property, Indexer): Derive from PropertyBase.
12090         (MethodSignature.inheritable_property_signature_filter): New delegate
12091         to find properties and indexers.
12092
12093         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
12094         argument and improved error reporting.
12095
12096         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
12097         EmptyReadOnlyParameters and made it a property.
12098
12099         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
12100         version of this method which takes a `PropertyInfo indexer'.
12101         (TypeManager.RegisterIndexer): New method.
12102
12103         * class.cs: Added myself as author of this file :-)
12104
12105 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12106
12107         * class.cs: fixed compilation on windoze.
12108
12109 2002-08-03  Martin Baulig  <martin@gnome.org>
12110
12111         * interface.cs (Interface.GetInterfaceBases): Check whether all
12112         base interfaces are at least as accessible than the current one.
12113
12114         * class.cs (TypeContainer.GetClassBases): Check whether base types
12115         are at least as accessible than the current type.
12116         (TypeContainer.AsAccessible): Implemented and made non-static.
12117         (MemberBase.CheckParameters): Report errors if the accessibility
12118         checks fail.
12119
12120         * delegate.cs (Delegate.Delegate): The default visibility is
12121         internal for top-level types and private for nested types.
12122         (Delegate.Define): Report errors if the accessibility checks fail.
12123
12124         * enum.cs (Enum.Enum): The default visibility is internal for
12125         top-level types and private for nested types.
12126         (Enum.DefineType): Compute the correct visibility.
12127
12128         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
12129         function which takes a `bool is_toplevel' instead of a TypeContainer.
12130
12131         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
12132         builtin type.
12133
12134 2002-08-02  Martin Baulig  <martin@gnome.org>
12135
12136         * expression.cs (LocalVariableReferenc): Added constructor which
12137         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
12138         (LocalVariableReference.IsReadOnly): New property.
12139         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
12140         variable is readonly, use our own readonly flag to do this; you can
12141         use the new constructor to get a writable reference to a read-only
12142         variable.
12143
12144         * cs-parser.jay (foreach_statement, using_statement): Get a writable
12145         reference to the local variable.
12146
12147 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
12148
12149         * rootcontext.cs (ResolveCore): Also include System.Exception
12150
12151         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
12152         we reach an EmptyStatement.
12153
12154         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
12155         is also fine.
12156
12157         * expression.cs (Binary.ResolveOperator): Check error result in
12158         two places.
12159
12160         use brtrue/brfalse directly and avoid compares to null.
12161
12162 2002-08-02  Martin Baulig  <martin@gnome.org>
12163
12164         * class.cs (TypeContainer.Define): Define all nested interfaces here.
12165         Fixes bug #28407, added test-155.cs.
12166
12167 2002-08-01  Martin Baulig  <martin@gnome.org>
12168
12169         * class.cs (Event.EmitDefaultMethod): Make this work with static
12170         events.  Fixes #28311, added verify-3.cs.
12171
12172 2002-08-01  Martin Baulig  <martin@gnome.org>
12173
12174         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
12175         `is_disposable' fields.
12176         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
12177         `hm.is_disposable' if we're using the collection pattern.
12178         (Foreach.EmitCollectionForeach): Use the correct type for the
12179         enumerator's local variable, only emit the try/finally block if
12180         necessary (fixes #27713).
12181
12182 2002-08-01  Martin Baulig  <martin@gnome.org>
12183
12184         * ecore.cs (Expression.report118): Renamed to Error118 and made
12185         it public static.
12186
12187         * statement.cs (Throw.Resolve): Check whether the expression is of
12188         the correct type (CS0118) and whether the type derives from
12189         System.Exception (CS0155).
12190         (Catch.Resolve): New method.  Do the type lookup here and check
12191         whether it derives from System.Exception (CS0155).
12192         (Catch.CatchType, Catch.IsGeneral): New public properties.
12193
12194         * typemanager.cs (TypeManager.exception_type): Added.
12195
12196 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
12197
12198         * driver.cs: Updated About function.
12199
12200 2002-07-31  Martin Baulig  <martin@gnome.org>
12201
12202         Implemented Control Flow Analysis.
12203
12204         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
12205         (EmitContext.CurrentBranching): Added.
12206         (EmitContext.StartFlowBranching): Added.
12207         (EmitContext.EndFlowBranching): Added.
12208         (EmitContext.KillFlowBranching): Added.
12209         (EmitContext.IsVariableAssigned): Added.
12210         (EmitContext.SetVariableAssigned): Added.
12211         (EmitContext.IsParameterAssigned): Added.
12212         (EmitContext.SetParameterAssigned): Added.
12213         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
12214         Added control flow analysis stuff here.
12215
12216         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
12217         resolve the expression as lvalue.
12218         (LocalVariableReference.DoResolve): Check whether the variable has
12219         already been assigned.
12220         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
12221         the parameter as assigned here.
12222         (ParameterReference.DoResolve): Check whether the parameter has already
12223         been assigned.
12224         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
12225         expression as lvalue.
12226
12227         * statement.cs (FlowBranching): New class for the flow analysis code.
12228         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
12229         (LabeledStatement.IsDefined): New public property.
12230         (LabeledStatement.AddUsageVector): New public method to tell flow
12231         analyis that the label may be reached via a forward jump.
12232         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
12233         flow analysis.
12234         (VariableInfo.Number): New public field.  This is used by flow analysis
12235         to number all locals of a block.
12236         (Block.CountVariables): New public property.  This is the number of
12237         local variables in this block (including the locals from all parent
12238         blocks).
12239         (Block.EmitMeta): Number all the variables.
12240
12241         * statement.cs: Added flow analysis support to all classes.
12242
12243 2002-07-31  Martin Baulig  <martin@gnome.org>
12244
12245         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
12246         To get debugging messages, compile mcs with /define:MCS_DEBUG and
12247         then use this argument.
12248
12249         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
12250
12251         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
12252         use this to specify /define options.
12253
12254 2002-07-29  Martin Baulig  <martin@gnome.org>
12255
12256         * statement.cs (Fixed): Moved all code that does variable lookups
12257         and resolvings from Emit to Resolve.
12258
12259         * statement.cs (For): Moved all code that does variable lookups
12260         and resolvings from Emit to Resolve.
12261
12262         * statement.cs (Using): Moved all code that does variable lookups
12263         and resolvings from Emit to Resolve.
12264
12265 2002-07-29  Martin Baulig  <martin@gnome.org>
12266
12267         * attribute.cs (Attribute.Resolve): Explicitly catch a
12268         System.NullReferenceException when creating the
12269         CustromAttributeBuilder and report a different warning message.
12270
12271 2002-07-29  Martin Baulig  <martin@gnome.org>
12272
12273         * support.cs (ParameterData.ParameterName): Added method to
12274         get the name of a parameter.
12275
12276         * typemanager.cs (TypeManager.IsValueType): New public method.
12277
12278 2002-07-29  Martin Baulig  <martin@gnome.org>
12279
12280         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
12281         is a flag which specifies that it's either ref or out.
12282         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
12283         the out parameter to `out Parameter.Modifier mod', also set the
12284         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
12285
12286         * support.cs (InternalParameters.ParameterModifier): Distinguish
12287         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
12288         Parameter.Modifier.ISBYREF flag if it's either ref or out.
12289
12290         * expression.cs (Argument.GetParameterModifier): Distinguish
12291         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
12292         Parameter.Modifier.ISBYREF flag if it's either ref or out.
12293
12294 2002-07-29  Martin Baulig  <martin@gnome.org>
12295
12296         * expression.cs (ParameterReference.ParameterReference): Added
12297         `Location loc' argument to the constructor.
12298
12299         * cs-parser.jay: Pass location to ParameterReference.
12300
12301 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
12302
12303         * statement.cs (Try): Initialize the location.
12304
12305         * cs-parser.jay: pass location to Try.
12306
12307         * expression.cs (Unary.Reduce): Change the prototype to return
12308         whether a constant fold could be performed or not.  The result is
12309         returned in an out parameters.  In the case of Indirection and
12310         AddressOf, we want to perform the full tests.
12311
12312 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
12313
12314         * statement.cs (Statement.Emit): Flag dead code.
12315
12316 2002-07-27  Andrew Birkett  <andy@nobugs.org>
12317
12318         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
12319
12320 2002-07-27  Martin Baulig  <martin@gnome.org>
12321
12322         * class.cs (MethodData.Define): Put back call to
12323         TypeManager.AddMethod(), accidentally commented this out.
12324
12325         * report.cs (Debug): New public method to print debugging information,
12326         this is `[Conditional ("DEBUG")]'.
12327
12328 2002-07-26  Martin Baulig  <martin@gnome.org>
12329
12330         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
12331         (switch_statement): Push the current_block to the switch_stack and
12332         pop it again when we're done with the switch.
12333         (switch_section): The new block is a child of the current_block.
12334         Fixes bug #24007, added test-152.cs.
12335
12336 2002-07-27  Martin Baulig  <martin@gnome.org>
12337
12338         * expression.cs (Invocation.EmitArguments): When calling a varargs
12339         function with only its fixed arguments, we need to pass an empty
12340         array.
12341
12342 2002-07-27  Martin Baulig  <martin@gnome.org>
12343
12344         Mono 0.13 has been released.
12345
12346 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
12347
12348         * driver.cs: Rename --resource to --linkres, because that is what
12349         we do currently, we dont support --resource yet.
12350
12351         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
12352
12353 2002-07-25  Martin Baulig  <martin@gnome.org>
12354
12355         * class.cs (MethodData): New public class.  This is a `method builder'
12356         class for a method or one accessor of a Property/Indexer/Event.
12357         (MethodData.GetMethodFlags): Moved here from MemberBase.
12358         (MethodData.ApplyAttributes): Likewise.
12359         (MethodData.ApplyObsoleteAttribute): Likewise.
12360         (MethodData.ApplyConditionalAttribute): Likewise.
12361         (MethodData.ApplyDllImportAttribute): Likewise.
12362         (MethodData.CheckAbstractAndExternal): Likewise.
12363         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
12364         (MethodData.Emit): Formerly known as Method.Emit().
12365         (MemberBase): Moved everything which was specific to a single
12366         accessor/method to MethodData.
12367         (Method): Create a new MethodData and call Define() and Emit() on it.
12368         (Property, Indexer, Event): Create a new MethodData objects for each
12369         accessor and call Define() and Emit() on them.
12370
12371 2002-07-25  Martin Baulig  <martin@gnome.org>
12372
12373         Made MethodCore derive from MemberBase to reuse the code from there.
12374         MemberBase now also checks for attributes.
12375
12376         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
12377         (MemberBase.GetMethodFlags): Moved here from class Method and marked
12378         as virtual.
12379         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
12380         `CallingConventions cc' and `Attributes opt_attrs' arguments.
12381         (MemberBase.ApplyAttributes): New virtual method; applies the
12382         attributes to a method or accessor.
12383         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
12384         (MemberBase.ApplyConditionalAttribute): Likewise.
12385         (MemberBase.ApplyDllImportAttribute): Likewise.
12386         (MemberBase.CheckAbstractAndExternal): Likewise.
12387         (MethodCore.ParameterTypes): This is now a property instead of a
12388         method, it's initialized from DoDefineParameters().
12389         (MethodCore.ParameterInfo): Removed the set accessor.
12390         (MethodCore.DoDefineParameters): New protected virtual method to
12391         initialize ParameterTypes and ParameterInfo.
12392         (Method.GetReturnType): We can now simply return the MemberType.
12393         (Method.GetMethodFlags): Override the MemberBase version and add
12394         the conditional flags.
12395         (Method.CheckBase): Moved some code from Define() here, call
12396         DoDefineParameters() here.
12397         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
12398         here to avoid some larger code duplication.
12399         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
12400         ensure that abstract and external accessors don't declare a body.
12401
12402         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
12403         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
12404         lookup in the attribute's parent classes, so we need to abort as soon
12405         as we found the first match.
12406         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
12407         the attribute has no arguments.
12408
12409         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
12410         of a Method.
12411
12412 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12413
12414         * cs-parser.jay: reverted previous patch.
12415
12416 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12417
12418         * cs-parser.jay: fixed bug #22119.
12419
12420 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12421
12422         * attribute.cs: fixed compilation. The error was:
12423         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
12424         be assigned to before control leaves the current method."
12425         [FIXME:  Filed as bug #28186: MCS must report this error.]
12426
12427 2002-07-25  Martin Baulig  <martin@gnome.org>
12428
12429         * attribute.cs (Attribute.Conditional_GetConditionName): New static
12430         method to pull the condition name ouf of a Conditional attribute.
12431         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
12432         the obsolete message and error flag out of an Obsolete attribute.
12433
12434         * class.cs (Method.GetMethodFlags): New public method to get the
12435         TypeManager.MethodFlags for this method.
12436         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
12437         private methods.
12438         (Method.Define): Get and apply the Obsolete and Conditional attributes;
12439         if we're overriding a virtual function, set the new private variable
12440         `parent_method'; call the new TypeManager.AddMethod().
12441
12442         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
12443         the MethodBuilder and the Method in a PtrHashtable.
12444         (TypeManager.builder_to_method): Added for this purpose.
12445         (TypeManager.MethodFlags): Added IsObsoleteError.
12446         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
12447         Obsolete and Conditional arguments in MethodBuilders.  If we discover
12448         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
12449         the message from the attribute.
12450
12451 2002-07-24  Martin Baulig  <martin@gnome.org>
12452
12453         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
12454         preprocessor directives, ensure that the argument to #define/#undef is
12455         exactly one identifier and that it's actually an identifier.
12456
12457         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
12458         did not work ....
12459
12460 2002-07-24  Martin Baulig  <martin@gnome.org>
12461
12462         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
12463         initialize it to TypeManager.object_type in the constructor.
12464         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
12465         of the `hm.get_current' method if we're using the collection pattern.
12466         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
12467         for the explicit conversion to make it work when we're using the collection
12468         pattern and the `Current' property has a different return type than `object'.
12469         Fixes #27713.
12470
12471 2002-07-24  Martin Baulig  <martin@gnome.org>
12472
12473         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
12474         does not match, but don't report any errors.  This method is called in
12475         order for all methods in a MethodGroupExpr until a matching method is
12476         found, so we don't want to bail out if the first method doesn't match.
12477         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
12478         matches, report the 123.  Fixes #28070.
12479
12480 2002-07-24  Martin Baulig  <martin@gnome.org>
12481
12482         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
12483         TypeManager.TypeToCoreType() to the top of the method so the
12484         following equality checks will work.  Fixes #28107.
12485
12486 2002-07-24  Martin Baulig  <martin@gnome.org>
12487
12488         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
12489         operand is of type uint, and the other operand is of type sbyte,
12490         short or int, the operands are converted to type long." -
12491         Actually do what this comment already told us.  Fixes bug #28106,
12492         added test-150.cs.
12493
12494 2002-07-24  Martin Baulig  <martin@gnome.org>
12495
12496         * class.cs (MethodBase): New abstract class.  This is now a base
12497         class for Property, Indexer and Event to avoid some code duplication
12498         in their Define() and DefineMethods() methods.
12499         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
12500         generic methods for Define() and DefineMethods().
12501         (FieldBase): Derive from MemberBase, not MemberCore.
12502         (Property): Derive from MemberBase, not MemberCore.
12503         (Property.DefineMethod): Moved all the code from this method to the
12504         new MethodBase.DefineAccessor(), just call it with appropriate
12505         argumetnts.
12506         (Property.Define): Call the new Property.DoDefine(), this does some
12507         sanity checks and we don't need to duplicate the code everywhere.
12508         (Event): Derive from MemberBase, not MemberCore.
12509         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
12510         accessors, this will also make them work with interface events.
12511         (Indexer): Derive from MemberBase, not MemberCore.
12512         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
12513         (Indexer.Define): Use the new MethodBase functions.
12514
12515         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
12516         argument to the constructor.
12517         (Interface.FindMembers): Added support for interface events.
12518         (Interface.PopluateEvent): Implemented.
12519
12520         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
12521
12522 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
12523
12524         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
12525         but this is required to check for a method name being the same as
12526         the containing class.  
12527
12528         Handle this now.
12529
12530 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12531
12532         * interface.cs: initialize variable.
12533
12534 2002-07-23  Martin Baulig  <martin@gnome.org>
12535
12536         Implemented the IndexerName attribute in interfaces.
12537
12538         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
12539         name if this is an explicit interface implementation.
12540         (Indexer.InterfaceIndexerName): New public variable.  If we're
12541         implementing an interface indexer, this is the IndexerName in that
12542         interface.  Otherwise, it's the IndexerName.
12543         (Indexer.DefineMethod): If we're implementing interface indexer,
12544         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
12545         and Pending.ImplementIndexer methods.
12546         (Indexer.Define): Also define the PropertyBuilder if we're
12547         implementing an interface indexer and this is neither an explicit
12548         interface implementation nor do the IndexerName match the one in
12549         the interface.
12550
12551         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
12552         If a method is defined here, then we always need to create a proxy
12553         for it.  This is used when implementing interface indexers.
12554         (Pending.IsInterfaceIndexer): New public method.
12555         (Pending.ImplementIndexer): New public method.
12556         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
12557         This is used when implementing interface indexers to define a proxy
12558         if necessary.
12559         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
12560         define a proxy if necessary.
12561
12562         * interface.cs (Interface.IndexerName): New public variable.
12563         (Interface.PopulateIndexer): Set the IndexerName.
12564         (Interface.DefineIndexers): New private method.  Populate all the
12565         indexers and make sure their IndexerNames match.
12566
12567         * typemanager.cs (IndexerPropertyName): Added support for interface
12568         indexers.
12569
12570 2002-07-22  Martin Baulig  <martin@gnome.org>
12571
12572         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
12573         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
12574         ret if HasReturnLabel.
12575         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
12576         variables.
12577
12578         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
12579         and set the ec.LoopBeginTryCatchLevel.
12580         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
12581         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
12582         the current ec.TryCatchLevel, the branch goes out of an exception
12583         block.  In this case, we need to use Leave and not Br.
12584
12585 2002-07-22  Martin Baulig  <martin@gnome.org>
12586
12587         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
12588         block unless the block does not always return or it is contained in
12589         another try { ... } catch { ... } block.  Fixes bug #26506.
12590         Added verify-1.cs to the test suite.
12591
12592 2002-07-22  Martin Baulig  <martin@gnome.org>
12593
12594         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
12595         then we do not always return.  Fixes bug #24985.
12596
12597 2002-07-22  Martin Baulig  <martin@gnome.org>
12598
12599         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
12600         lookup on a per-class level; ie. walk up the class hierarchy until we
12601         found at least one applicable method, then choose the best among them.
12602         Fixes bug #24463 and test-29.cs.
12603
12604 2002-07-22  Martin Baulig  <martin@gnome.org>
12605
12606         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
12607         return types of the methods.  The return type is not part of the
12608         signature and we must not check it to make the `new' modifier work.
12609         Fixes bug #27999, also added test-147.cs.
12610         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
12611
12612         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
12613         on the method's return type.
12614
12615 2002-07-21  Martin Baulig  <martin@gnome.org>
12616
12617         * assign.cs: Make this work if the rightmost source is a constant and
12618         we need to do an implicit type conversion.  Also adding a few more tests
12619         to test-38.cs which should have caught this.
12620
12621         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
12622         target in the makefile for this.  The makefile.gnu is primarily intended
12623         for end-users who don't want to debug the compiler.
12624
12625 2002-07-21  Martin Baulig  <martin@gnome.org>
12626
12627         * assign.cs: Improved the Assign class so it can now handle embedded
12628         assignments (X = Y = Z = something).  As a side-effect this'll now also
12629         consume less local variables.  test-38.cs now passes with MCS, added
12630         a few new test cases to that test.
12631
12632 2002-07-20  Martin Baulig  <martin@gnome.org>
12633
12634         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
12635         instructions.  Fixes bug #27977, also added test-146.cs.
12636
12637 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12638
12639         * cs-tokenizer.cs: fixed getHex ().
12640
12641 2002-07-19  Martin Baulig  <martin@gnome.org>
12642
12643         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
12644         not Type.GetType() to lookup the array type.  This is needed when
12645         we're constructing an array of a user-defined type.
12646         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
12647         single-dimensional arrays, but also for single-dimensial arrays of
12648         type decimal.
12649
12650 2002-07-19  Martin Baulig  <martin@gnome.org>
12651
12652         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
12653         this function is called, it's not allowed to share LocalBuilders
12654         among ILGenerators.
12655
12656 2002-07-19  Martin Baulig  <martin@gnome.org>
12657
12658         * expression.cs (Argument.Resolve): Report an error 118 when trying
12659         to pass a type as argument.
12660
12661 2002-07-18  Martin Baulig  <martin@gnome.org>
12662
12663         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
12664         Conv_R_Un for the signed `long' type.
12665
12666 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
12667
12668         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
12669         `expr' for the temporary result, as that will fail if we do
12670         multiple resolves on the same expression.
12671
12672 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
12673
12674         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
12675         ec.TypeContainer for looking up aliases. 
12676
12677         * class.cs (TypeContainer): Remove LookupAlias from here.
12678
12679         * decl.cs (DeclSpace); Move here.
12680
12681 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
12682
12683         * class.cs (FindMembers): Only call filter if the constructor
12684         bulider is not null.
12685
12686         Also handle delegates in `NestedTypes' now.  Now we will perform
12687         type lookups using the standard resolution process.  This also
12688         fixes a bug.
12689
12690         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
12691         This uses Expressions (the limited kind that can be parsed by the
12692         tree) instead of strings.
12693
12694         * expression.cs (ComposedCast.ToString): Implement, used to flag
12695         errors since now we have to render expressions.
12696
12697         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
12698         FormArrayType. 
12699
12700         * ecore.cs (SimpleName.ToString): ditto.
12701
12702         * cs-parser.jay: Instead of using strings to assemble types, use
12703         Expressions to assemble the type (using SimpleName, ComposedCast,
12704         MemberAccess).  This should fix the type lookups in declarations,
12705         because we were using a different code path for this.
12706
12707         * statement.cs (Block.Resolve): Continue processing statements
12708         even when there is an error.
12709
12710 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
12711
12712         * class.cs (Event.Define): Also remove the `remove' method from
12713         the list of pending items.
12714
12715         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
12716         generate more compact code. 
12717
12718 2002-07-17  Martin Baulig  <martin@gnome.org>
12719
12720         * const.cs (Const.LookupConstantValue): Add support for constant
12721         `unchecked' and `checked' expressions.
12722         Also adding test case test-140.cs for this.
12723
12724 2002-07-17  Martin Baulig  <martin@gnome.org>
12725
12726         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
12727         check whether mi.ReturnType implements the IEnumerator interface; the
12728         `==' and the IsAssignableFrom() will fail in this situation.
12729
12730 2002-07-16  Ravi Pratap  <ravi@ximian.com>
12731
12732         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
12733         here too.
12734
12735 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12736
12737         * expression.cs: fixed bug #27811.
12738
12739 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
12740
12741         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
12742         Molaro: when we are a ref, the value already contains a pointer
12743         value, do not take the address of it.
12744
12745 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
12746         * removed mb-parser.jay and mb-tokenizer.cs
12747
12748 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
12749
12750         * expression.cs: check against the building corlib void type.
12751
12752 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
12753
12754         * ecore.cs: fix for valuetype static readonly fields: when 
12755         initializing them, we need their address, not the address of a copy.
12756
12757 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
12758
12759         * typemanager.cs: register also enum_type in corlib.
12760
12761 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
12762
12763         * class.cs: allow calling this (but not base) initializers in structs.
12764
12765 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
12766
12767         * ecore.cs: make sure we compare against the building base types
12768         in GetTypeSize ().
12769
12770 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
12771
12772         * typemanager.cs: fix TypeToCoreType() to handle void and object
12773         (corlib gets no more typerefs after this change).
12774
12775 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
12776
12777         * expression.cs (ArrayCreation.EmitArrayArguments): use
12778         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
12779
12780         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
12781         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
12782         array indexes, the runtime actually forbids them.
12783
12784         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
12785         for array arguments here.
12786
12787         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
12788         instead of the default for ValueTypes.
12789
12790         (New.DoEmit): Use IsValueType instead of
12791         IsSubclassOf (value_type)
12792         (New.DoResolve): ditto.
12793         (Invocation.EmitCall): ditto.
12794
12795         * assign.cs (Assign): ditto.
12796
12797         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
12798         Statements *are* currently doing part of their resolution during
12799         Emit.  
12800
12801         Expressions do always resolve during resolve, but statements are
12802         only required to propagate resolution to their children.
12803
12804 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
12805
12806         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
12807
12808         (LoadAssembly): Do not add the dll if it is already specified
12809
12810         (MainDriver): Add the System directory to the link path at the end,
12811         after all the other -L arguments. 
12812
12813         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
12814         wrong opcode for loading bytes and bools (ldelem.i1 instead of
12815         ldelem.u1) and using the opposite for sbytes.
12816
12817         This fixes Digger, and we can finally run it.
12818
12819         * driver.cs (UnixParseOption): Move the option parsing here.  
12820         (CSCParseOption): Implement CSC-like parsing of options.
12821
12822         We now support both modes of operation, the old Unix way, and the
12823         new CSC-like way.  This should help those who wanted to make cross
12824         platform makefiles.
12825
12826         The only thing broken is that /r:, /reference: and /lib: are not
12827         implemented, because I want to make those have the same semantics
12828         as the CSC compiler has, and kill once and for all the confussion
12829         around this.   Will be doing this tomorrow.
12830
12831         * statement.cs (Unsafe.Resolve): The state is checked during
12832         resolve, not emit, so we have to set the flags for IsUnsfe here.
12833
12834 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
12835
12836         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
12837         not catch the Error_ObjectRefRequired in SimpleName (as it is
12838         possible to have a class/instance variable name that later gets
12839         deambiguated), we have to check this here.      
12840
12841 2002-07-10  Ravi Pratap  <ravi@ximian.com>
12842
12843         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
12844         make static and put into Expression.
12845
12846         (Event.Define): Register the private field of the event with the 
12847         TypeManager so that GetFieldFromEvent can get at it.
12848
12849         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
12850         keep track of the private field associated with an event which
12851         has no accessors.
12852
12853         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
12854         private field.
12855
12856         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
12857
12858 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
12859
12860         * expression.cs (Binary.EmitBranchable): this routine emits the
12861         Binary expression in a branchable context.  This basically means:
12862         we need to branch somewhere, not just get the value on the stack.
12863
12864         This works together with Statement.EmitBoolExpression.
12865
12866         * statement.cs (Statement.EmitBoolExpression): Use
12867         EmitBranchable. 
12868
12869 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
12870
12871         * statement.cs (For): Reduce the number of jumps in loops.
12872
12873         (For): Implement loop inversion for the For statement.
12874
12875         (Break): We can be breaking out of a Try/Catch controlled section
12876         (foreach might have an implicit try/catch clause), so we need to
12877         use Leave instead of Br.
12878
12879         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
12880         now).  If the instace expression supports IMemoryLocation, we use
12881         the AddressOf method from the IMemoryLocation to extract the
12882         address instead of emitting the instance.
12883
12884         This showed up with `This', as we were emitting the instance
12885         always (Emit) instead of the Address of This.  Particularly
12886         interesting when This is a value type, as we dont want the Emit
12887         effect (which was to load the object).
12888
12889 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
12890
12891         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
12892
12893         * statement.cs (Checked): Set the CheckedState during the resolve
12894         process too, as the ConvCast operations track the checked state on
12895         the resolve process, and not emit.
12896
12897         * cs-parser.jay (namespace_member_declaration): Flag that we have
12898         found a declaration when we do.  This is used to flag error 1529
12899
12900         * driver.cs: Report ok when we display the help only.
12901
12902 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
12903
12904         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
12905
12906 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
12907
12908         * cs-tokenizer.cs (define): We also have to track locally the
12909         defines.  AllDefines is just used for the Conditional Attribute,
12910         but we also need the local defines for the current source code. 
12911
12912 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
12913
12914         * statement.cs (While, For, Do): These loops can exit through a
12915         Break statement, use this information to tell whether the
12916         statement is the last piece of code.
12917
12918         (Break): Flag that we break.
12919
12920         * codegen.cs (EmitContexts): New `Breaks' state variable.
12921
12922 2002-07-03  Martin Baulig  <martin@gnome.org>
12923
12924         * class.cs (TypeContainer.MethodModifiersValid): Allow override
12925         modifiers in method declarations in structs.  Otherwise, you won't
12926         be able to override things like Object.Equals().
12927
12928 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
12929
12930         * class.cs (Method, Property, Indexer): Do not allow the public
12931         modifier to be used in explicit interface implementations.
12932
12933         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
12934         override modifiers in method declarations in structs
12935
12936 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
12937
12938         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
12939         integer or real overflow, report an error
12940
12941 2002-07-02  Martin Baulig  <martin@gnome.org>
12942
12943         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
12944         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
12945         to tell the runtime about our newly created System.Object and
12946         System.ValueType types.
12947
12948 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
12949
12950         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
12951         struct instead of Ldarg/Starg.
12952
12953 2002-07-02  Martin Baulig  <martin@gnome.org>
12954
12955         * expression.cs (Indirection.Indirection): Call
12956         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
12957
12958 2002-07-02  Martin Baulig  <martin@gnome.org>
12959
12960         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
12961         ValueType, call TypeManager.TypeToCoreType() on it.
12962         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
12963         the OpCodes.Newarr argument.
12964
12965 2002-07-02  Martin Baulig  <martin@gnome.org>
12966
12967         * expression.cs (Invocation.EmitCall): When compiling corlib,
12968         replace all calls to the system's System.Array type to calls to
12969         the newly created one.
12970
12971         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
12972         System.Array methods.
12973         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
12974         from the system's System.Array type which must be replaced.
12975
12976 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
12977
12978         * typemanager.cs: load unverifiable_code_ctor so we can build
12979         corlib using the correct type. Avoid using GetTypeCode() with
12980         TypeBuilders.
12981         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
12982         TypeManager.object_type to allow building corlib.
12983
12984 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
12985
12986         * ecore.cs: handle System.Enum separately in LoadFromPtr().
12987
12988 2002-07-01  Martin Baulig  <martin@gnome.org>
12989
12990         * class.cs: Make the last change actually work, we need to check
12991         whether `ifaces != null' to avoid a crash.
12992
12993 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
12994
12995         * class.cs: when we build structs without fields that implement
12996         interfaces, we need to add the interfaces separately, since there is
12997         no API to both set the size and add the interfaces at type creation
12998         time.
12999
13000 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
13001
13002         * expression.cs: the dimension arguments to the array constructors
13003         need to be converted if they are a long.
13004
13005 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
13006
13007         * class.cs: don't emit ldarg.0 if there is no parent constructor
13008         (fixes showstopper for corlib).
13009
13010 2002-06-29  Martin Baulig  <martin@gnome.org>
13011
13012         MCS now compiles corlib on GNU/Linux :-)
13013
13014         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
13015         ie. check for MethodImplOptions.InternalCall.
13016
13017         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
13018         and TypeManager.attribute_type are null, so we must explicitly check
13019         whether parent is not null to find out whether it's an attribute type.
13020         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
13021         and SetBuilder, not only if the property is neither abstract nor external.
13022         This is necessary to set the MethodImplOptions on the accessor methods.
13023         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
13024         SetBuilder, see Property.Emit().
13025
13026         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
13027         populate "System.Object", "System.ValueType" and "System.Attribute" since
13028         they've already been populated from BootCorlib_PopulateCoreTypes().
13029
13030 2002-06-29  Martin Baulig  <martin@gnome.org>
13031
13032         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
13033         is the NullLiteral, we also need to make sure that target_type is not
13034         an enum type.   
13035
13036 2002-06-29  Martin Baulig  <martin@gnome.org>
13037
13038         * rootcontext.cs (RootContext.ResolveCore): We must initialize
13039         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
13040         before calling BootstrapCorlib_ResolveDelegate ().
13041
13042 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
13043
13044         * statement.cs: fixed build-breaker. All tests passed ok.
13045
13046 2002-06-27  Martin Baulig  <martin@gnome.org>
13047
13048         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
13049         for System.Decimal when compiling corlib.
13050
13051 2002-06-27  Martin Baulig  <martin@gnome.org>
13052
13053         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
13054         switch blocks which contain nothing but a default clause.
13055
13056 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
13057
13058        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
13059
13060 2002-06-27  Martin Baulig  <martin@gnome.org>
13061
13062         * ecore.cs (PropertyExpr.PropertyExpr): Call
13063         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
13064
13065         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
13066         is already a TypeBuilder.
13067
13068 2002-06-27  Martin Baulig  <martin@gnome.org>
13069
13070         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
13071         `target_type == TypeManager.array_type', not IsAssignableFrom() in
13072         the "from an array-type to System.Array" case.  This makes it work
13073         when compiling corlib.
13074
13075 2002-06-27  Martin Baulig  <martin@gnome.org>
13076
13077         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
13078         non-static PropertyExpr, set its InstanceExpression.  This makes
13079         the `ICollection.Count' property work in System/Array.cs.
13080
13081 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
13082
13083         * driver.cs: Made error handling more consistent.  Errors now
13084         tracked by Report class, so many methods which used to return int
13085         now return void.  Main() now prints success/failure and 
13086         errors/warnings message.
13087
13088         Renamed '--probe' compiler argument to '--expect-error'.  Removed
13089         the magic number return values (123 and 124).  Now, if the
13090         expected error occurs, the compiler exits with success (exit value
13091         0).  If the compilation completes without seeing that particular
13092         error, the compiler exits with failure (exit value 1).  The
13093         makefile in mcs/errors has been changed to handle the new behaviour.
13094
13095         * report.cs: Made 'expected error' number a property and renamed
13096         it from 'Probe' to 'ExpectedError'.
13097
13098         * genericparser.cs: Removed error handling support, since it is
13099         now all done by Report class.
13100
13101         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
13102         class, so parse() no longer returns an int.
13103
13104         * namespace.cs: Use Report.Error instead of GenericParser.error
13105
13106 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
13107
13108         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
13109         TypeContainer.AddOperator): At the front of the list put the
13110         explicit implementations, so they get resolved/defined first. 
13111
13112 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
13113
13114         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
13115         interface type is implemented by this TypeContainer.  Used during
13116         explicit interface implementation.
13117
13118         (Property.Define, Indexer.Define, Method.Define): Validate that
13119         the given interface in the explicit implementation is one of the
13120         base classes for the containing type.
13121
13122         Also if we are explicitly implementing an interface, but there is
13123         no match in the pending implementation table, report an error.
13124
13125         (Property.Define): Only define the property if we are
13126         not explicitly implementing a property from an interface.  Use the
13127         correct name also for those properties (the same CSC uses,
13128         although that is really not needed).
13129
13130         (Property.Emit): Do not emit attributes for explicitly implemented
13131         properties, as there is no TypeBuilder.
13132
13133         (Indexer.Emit): ditto.
13134
13135         Hiding then means that we do not really *implement* a pending
13136         implementation, which makes code fail.
13137
13138 2002-06-22  Martin Baulig  <martin@gnome.org>
13139
13140         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
13141         the return value of Object.GetType().  [FIXME: we need to do this whenever
13142         we get a type back from the reflection library].
13143
13144 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
13145
13146         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
13147
13148 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
13149
13150         * attribute.cs: Return null if we can not look up the type.
13151
13152         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
13153         the interface types found.
13154
13155         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
13156         interface types found.
13157
13158         * typemanager.cs (GetInterfaces): Make this routine returns alll
13159         the interfaces and work around the lame differences between
13160         System.Type and System.Reflection.Emit.TypeBuilder in the results
13161         result for GetInterfaces.
13162
13163         (ExpandInterfaces): Given an array of interface types, expand and
13164         eliminate repeated ocurrences of an interface.  This expands in
13165         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
13166         be IA, IB, IC.
13167
13168 2002-06-21  Martin Baulig  <martin@gnome.org>
13169
13170         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
13171         on System.Enum.
13172
13173 2002-06-21  Martin Baulig  <martin@gnome.org>
13174
13175         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
13176         and called with one of the core types, return the corresponding typebuilder for
13177         that type.
13178
13179         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
13180         element type.
13181
13182 2002-06-21  Martin Baulig  <martin@gnome.org>
13183
13184         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
13185         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
13186         (Expression.ConvertReferenceExplicit): Likewise.
13187
13188         * expression.cs (ElementAccess.DoResolve): Likewise.
13189         (ElementAccess.DoResolveLValue): Likewise.
13190
13191 2002-06-10  Martin Baulig  <martin@gnome.org>
13192
13193         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
13194         add the "value" parameter to the parameter list.
13195
13196         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
13197         to our caller.
13198
13199 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
13200
13201         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
13202         the argument to an int, uint, long or ulong, per the spec.  Also
13203         catch negative constants in array creation.
13204
13205 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
13206
13207         * class.cs: do not allow the same interface to appear twice in
13208         the definition list.
13209
13210 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
13211
13212         * ecore.cs: don't use ldlen with System.Array.
13213
13214 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
13215
13216         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
13217
13218 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
13219
13220         * modifiers.cs: produce correct field attributes for protected
13221         internal. Easy fix so miguel can work on ther harder stuff:-)
13222
13223 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
13224
13225         * pending.cs: New file.  Move the code from class.cs here.
13226         Support clearning the pending flag for all methods (when not doing
13227         explicit interface implementation).
13228
13229 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
13230
13231         * rootcontext.cs: added a couple more types needed to bootstrap.
13232
13233 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
13234
13235         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
13236         constructor in the type, instead of any constructor in the type
13237         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
13238         a bug in the Mono runtime when applying the params attribute). 
13239
13240 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
13241         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
13242
13243 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
13244
13245         * expression.cs (Unary.ResolveOperator): Use TypeManager
13246         to resolve the type.
13247
13248 2002-06-13  Ravi Pratap  <ravi@ximian.com>
13249
13250         * cs-parser.jay (enum_member_declaration): Pass in the attributes
13251         attached.
13252
13253         * enum.cs (AddEnumMember): Add support to store the attributes associated 
13254         with each member too.
13255
13256         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
13257         field builders too - this takes care of the enum member case.
13258
13259 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
13260
13261         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
13262         address-of operator on both value types and pointers.
13263
13264 2002-06-10  Martin Baulig  <martin@gnome.org>
13265
13266         * interface.cs (Interface.PopulateIndexer): Add the indexer's
13267         PropertyBuilder to the `property_builders' list.
13268
13269         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
13270         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
13271         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
13272         find any indexers which are inherited from an interface.
13273
13274 2002-06-09  Martin Baulig  <martin@gnome.org>
13275
13276         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
13277         the same type as the constant if necessary.  There's also a test-130.cs
13278         for this.
13279
13280         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
13281
13282         * typemanager.cs (TypeManager.ChangeType): Previously known as
13283         Enum.ChangeEnumType().
13284
13285 2002-06-09  Martin Baulig  <martin@gnome.org>
13286
13287         * expression.cs (Cast.TryReduce): Added support for consts.
13288
13289 2002-06-08  Ravi Pratap  <ravi@ximian.com>
13290
13291         * class.cs (Accessor): Hold attributes information so we can pass
13292         it along.
13293
13294         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
13295         Modify to pass in attributes attached to the methods.
13296
13297         (add_accessor_declaration, remove_accessor_declaration): Ditto.
13298
13299         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
13300         to handle the Accessor kind :-)
13301
13302         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
13303
13304 2002-06-08  Martin Baulig  <martin@gnome.org>
13305
13306         * expression.cs (Unary.TryReduceNegative): Added support for
13307         ULongConstants.
13308
13309 2002-06-08  Martin Baulig  <martin@gnome.org>
13310
13311         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
13312         name can't be found in the `defined_names' - the caller will do a
13313         MemberLookup in this case and thus find methods in System.Enum
13314         such as Enum.IsDefined().
13315
13316 2002-06-08  Martin Baulig  <martin@gnome.org>
13317
13318         * enum.cs (Enum.ChangeEnumType): This is a custom version of
13319         Convert.ChangeType() which works with TypeBuilder created types.
13320         (Enum.LookupEnumValue, Enum.Define): Use it here.
13321
13322         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
13323         `TypeBuilder.BaseType != null' check.
13324         (TypeContainer.FindMembers): Only lookup parent members if we
13325         actually have a parent.
13326         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
13327         (ConstructorInitializer.Resolve): Likewise.
13328
13329         * interface.cs (Interface.FindMembers): Added
13330         `TypeBuilder.BaseType != null' check.
13331
13332         * rootcontext.cs (RootContext.ResolveCore): Added
13333         "System.Runtime.CompilerServices.IndexerNameAttribute" to
13334         classes_second_stage.
13335
13336         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
13337         debug_type and trace_type when compiling with --nostdlib.       
13338
13339 2002-06-07  Martin Baulig  <martin@gnome.org>
13340
13341         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
13342         (AddField): Set it to true when adding a non-static field.
13343         (DefineType): Use `have_nonstatic_fields' to find out whether we
13344         have non-static fields, not `Fields != null'.
13345
13346 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
13347
13348         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
13349         dereferencing a null on the static-field code path)
13350
13351 2002-05-30  Martin Baulig  <martin@gnome.org>
13352
13353         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
13354         to take command line arguments.  Use reflection to call the new
13355         custom `Initialize' function on the symbol writer and pass it the
13356         command line arguments.
13357
13358         * driver.cs (--debug-args): New command line argument to pass command
13359         line arguments to the symbol writer.
13360
13361 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
13362
13363         * assign.cs (DoResolve): Forgot to do the implicit conversion to
13364         the target type for indexers and properties.  Thanks to Joe for
13365         catching this.
13366
13367 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
13368
13369         * typemanager.cs (MethodFlags): returns the method flags
13370         (Obsolete/ShouldIgnore) that control warning emission and whether
13371         the invocation should be made, or ignored. 
13372
13373         * expression.cs (Invocation.Emit): Remove previous hack, we should
13374         not do this on matching a base type, we should do this based on an attribute
13375
13376         Only emit calls to System.Diagnostics.Debug and
13377         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
13378         on the command line.
13379
13380         * rootcontext.cs: Global settings for tracing and debugging.
13381
13382         * cs-tokenizer.cs (define): New utility function to track
13383         defines.   Set the global settings for TRACE and DEBUG if found.
13384
13385 2002-05-25  Ravi Pratap  <ravi@ximian.com>
13386
13387         * interface.cs (Populate*): Pass in the TypeContainer as well as
13388         the DeclSpace as parameters so that we can create EmitContexts and
13389         then use that to apply attributes etc.
13390
13391         (PopulateMethod, PopulateEvent, PopulateProperty)
13392         (PopulateIndexer): Apply attributes everywhere.
13393
13394         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
13395         etc.
13396
13397         (ApplyAttributes): Update accordingly.
13398
13399         We now apply interface attributes for all members too.
13400
13401 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
13402
13403         * class.cs (Indexer.Define); Correctly check if we are explicit
13404         implementation (instead of checking the Name for a ".", we
13405         directly look up if the InterfaceType was specified).
13406
13407         Delay the creation of the PropertyBuilder.
13408
13409         Only create the PropertyBuilder if we are not an explicit
13410         interface implementation.   This means that explicit interface
13411         implementation members do not participate in regular function
13412         lookups, and hence fixes another major ambiguity problem in
13413         overload resolution (that was the visible effect).
13414
13415         (DefineMethod): Return whether we are doing an interface
13416         implementation. 
13417
13418         * typemanager.cs: Temporary hack until we get attributes in
13419         interfaces (Ravi is working on that) and we get IndexerName
13420         support in interfaces.
13421
13422         * interface.cs: Register the indexers as properties.
13423
13424         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
13425         warning, I have verified that this is a bug in the .NET runtime
13426         (JavaScript suffers of the same problem).
13427
13428         * typemanager.cs (MemberLookup): When looking up members for
13429         interfaces, the parent of an interface is the implicit
13430         System.Object (so we succeed in searches of Object methods in an
13431         interface method invocation.  Example:  IEnumerable x;  x.ToString
13432         ()) 
13433
13434 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
13435
13436         * class.cs (Event): Events should also register if they do
13437         implement the methods that an interface requires.
13438
13439         * typemanager.cs (MemberLookup); use the new GetInterfaces
13440         method. 
13441
13442         (GetInterfaces): The code used to lookup interfaces for a type is
13443         used in more than one place, factor it here. 
13444
13445         * driver.cs: Track the errors at the bottom of the file, we kept
13446         on going.
13447
13448         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
13449         instance if the method we are calling is static!
13450
13451 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
13452
13453         * attribute.cs (ApplyAttributes): Make this function filter out
13454         the IndexerName attribute (as that attribute in reality is never
13455         applied) and return the string constant for the IndexerName
13456         attribute. 
13457
13458         * class.cs (TypeContainer.Emit): Validate that all the indexers
13459         have the same IndexerName attribute, and if so, set the
13460         DefaultName attribute on the class. 
13461
13462         * typemanager.cs: The return value might contain other stuff (not
13463         only methods).  For instance, consider a method with an "Item"
13464         property and an Item method.
13465
13466         * class.cs: If there is a problem with the parameter types,
13467         return. 
13468
13469 2002-05-24  Ravi Pratap  <ravi@ximian.com>
13470
13471         * ecore.cs (ImplicitConversionExists): Wrapper function which also
13472         looks at user defined conversion after making a call to 
13473         StandardConversionExists - we need this for overload resolution.
13474
13475         * expression.cs : Update accordingly the various method calls.
13476
13477         This fixes 2 bugs filed against implicit user defined conversions 
13478
13479 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
13480
13481         * statement.cs: Track the result of the assignment.
13482
13483 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
13484
13485         * expression.cs (MemberAccess): Improved error reporting for
13486         inaccessible members.
13487
13488 2002-05-22  Martin Baulig  <martin@gnome.org>
13489
13490         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
13491         itself with debugging support.
13492
13493 2002-05-22  Martin Baulig  <martin@gnome.org>
13494
13495         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
13496         Removed, this isn't needed anymore.
13497
13498 2002-05-20  Martin Baulig  <martin@gnome.org>
13499
13500         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
13501         be underlying type for an enum.
13502
13503 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
13504
13505         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
13506         that splits out the loading of just the core types.
13507
13508         * rootcontext.cs (ResolveCore): Split the struct resolution in
13509         two, so we can load the enumeration underlying types before any
13510         enums are used.
13511
13512         * expression.cs (Is): Bandaid until we fix properly Switch (see
13513         bug #24985 for details).
13514
13515         * typemanager.cs (ImplementsInterface): The hashtable will contain
13516         a null if there are no interfaces implemented.
13517
13518 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
13519
13520         * cs-parser.jay (indexer_declarator): It is fine to have array
13521         parameters
13522
13523 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
13524
13525         * typemanager.cs: (RegisterBuilder): New function used to register
13526         TypeBuilders that implement interfaces.  Since
13527         TypeBuilder.GetInterfaces (as usual) does not work with lame
13528         Reflection.Emit. 
13529         (AddUserType): register interfaces.
13530
13531         (ImplementsInterface): Use the builder_to_ifaces hash if we are
13532         dealing with TypeBuilder.  Also, arrays are showing up as
13533         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
13534         methods can not be invoked on them!
13535
13536         * ecore.cs (ExplicitReferenceConversionExists): Made public.
13537         (ImplicitReferenceConversionExists): Split out from
13538         StandardConversionExists. 
13539
13540         * expression.cs (As): We were only implementing one of the three
13541         cases for the as operator.  We now implement them all.
13542         (Is): Implement the various other cases for Is as well.
13543
13544         * typemanager.cs (CACHE): New define used to control if we want or
13545         not the FindMembers cache.  Seems to have a negative impact on
13546         performance currently
13547
13548         (MemberLookup): Nested types have full acess to
13549         enclosing type members
13550
13551         Remove code that coped with instance/static returns for events, we
13552         now catch this in RealFindMembers.
13553
13554         (RealFindMembers): only perform static lookup if the instance
13555         lookup did not return a type or an event.  
13556
13557 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
13558
13559         * assign.cs (CompoundAssign): We pass more semantic information
13560         now to Compound Assignments than we did before: now we have all
13561         the information at hand, and now we resolve the target *before* we
13562         do the expression expansion, which allows the "CacheValue" method
13563         to have the effect we intended (before, a [x] += 1 would generate
13564         two differen ArrayAccess expressions from the ElementAccess,
13565         during the resolution process).
13566
13567         (CompoundAssign.DoResolve): Resolve target and original_source here.
13568
13569 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
13570
13571         * expression.cs (ArrayAccess): dropped debugging information. 
13572
13573         * typemanager.cs: Small bug fix: I was always returning i_members,
13574         instead of one of i_members or s_members (depending on which had
13575         the content).
13576
13577         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
13578         method is invoked before any code generation takes place, and it
13579         is a mechanism to inform that the expression will be invoked more
13580         than once, and that the method should use temporary values to
13581         avoid having side effects
13582
13583         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
13584
13585         * ecore.cs (Expression.CacheTemporaries): Provide empty default
13586         implementation.
13587
13588         * expression.cs (Indirection, ArrayAccess): Add support for
13589         CacheTemporaries in these two bad boys. 
13590
13591         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
13592         ldobj or ldind_ref.  
13593         (StoreFromPtr): Handle stobj as well.
13594
13595         * expression.cs (UnaryMutator): Share more code.
13596
13597         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
13598         down: I was not tracking the Filter function as well, which
13599         was affecting the results of the cache.
13600
13601 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
13602
13603         * attribute.cs: Remove the hack to handle the CharSet property on
13604         StructLayouts. 
13605
13606 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
13607
13608         * attribute.cs (DoResolve): More uglyness, we now only try to
13609         resolve the attribute partially, to extract the CharSet
13610         information (only if we are a StructLayout attribute).  Otherwise 
13611
13612         (GetExtraTypeInfo): Add some code to conditionally kill in the
13613         future this.   I am more and more convinced that the .NET
13614         framework has special code to handle the attribute setting on
13615         certain elements.
13616
13617         * expression.cs (IsParamsMethodApplicable): Revert my previous
13618         foreach change here, it was wrong.
13619
13620 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
13621
13622         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
13623         (pp_expr): do not abort on unknown input, just return.
13624         (eval): abort if there are pending chars.
13625
13626         * attribute.cs (Attribute.Resolve): Positional parameters are
13627         optional.  Deal with that case.
13628
13629         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
13630         the Ansi/Unicode/Auto information for the type.
13631
13632         (TypeContainer.DefineType): instantiate the EmitContext here, as
13633         we will be using it during the type definition (to resolve
13634         attributes) and during the emit phase.
13635
13636         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
13637         to pull type information out of the attributes
13638
13639         (Attribute.Resolve): track the constructor builder, and allow for
13640         multiple invocations (structs and classes will use this).
13641
13642         * ecore.cs (MemberLookupFinal): new version with all the
13643         parameters customizable.
13644
13645         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
13646         constructors.  Return if the result value is null (as the error
13647         would have been flagged already by MemberLookupFinal)
13648
13649         Do not allow instances of abstract classes or interfaces to be
13650         created.
13651
13652         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
13653         We have to compare the assembly property here when dealing with
13654         FamANDAssem and Assembly access modifiers, because we might be
13655         creating an assembly from *modules* (that means that we are not
13656         getting TypeBuilders for types defined in other modules that are
13657         part of this assembly).
13658
13659         (Method.Emit): If the method is marked abstract and has a body,
13660         emit an error. 
13661
13662         (TypeContainer.DefineMembers): If both the defined member and the
13663         parent name match are methods, then do not emit any warnings: let
13664         the Method.Define routine take care of flagging warnings.  But if
13665         there is a mismatch (method overrides something else, or method is
13666         overriwritten by something, then emit warning).
13667
13668         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
13669         set to null, this means `do not check for the return type on the
13670         signature'. 
13671
13672         (Method.Define): set the return type for the method signature to
13673         null, so that we get methods with the same name and parameters and
13674         different return types.  This is used to flag warning 114 (you are
13675         hiding a method, and you probably want to use the new/override
13676         keywords instead).
13677
13678         * typemanager.cs (MemberLookup): Implemented proper access
13679         control, closing a long standing set of bug reports.  The problem
13680         was that the Framework only has two bits: Public and NonPublic,
13681         and NonPublic includes private and protected methods, but we need
13682         to enforce the FamANDAssem, FamOrAssem and Family. 
13683
13684 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
13685
13686         * statement.cs (GotoCase): Return true: Ammounts to giving up
13687         knowledge on whether we return or not, and letting the other case
13688         be responsible for it.
13689
13690 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
13691
13692         * driver.cs: Do not load directories for each file processed, only
13693         do it if there is a pattern.
13694
13695         * ecore.cs: Report readonly assigns here as well, as we might have
13696         been resolved only by MemberAccess.
13697
13698         (SimpleName.SimpleNameResolve): Also be useful for LValue
13699         resolution.   We need this to propagate assign to local readonly variables
13700
13701         * typemanager.cs: Use a ptrhashtable for the criteria, because we
13702         do not want to reuse potential criteria memory.
13703
13704         * class.cs (MyEventBuilder): Set reflected_type;
13705
13706         * ecore.cs (Constantify): Added support for constifying bools.
13707
13708         (RootContext.LookupType): Added a cache for values looked up in
13709         the declaration space.
13710
13711         * typemanager.cs (FindMembers): Now is a front-end to
13712         RealFindMembers, and provides a two-level hashtable-based cache to
13713         the request.  
13714
13715         15% performance improvement: from 22.5 to 19.2 seconds.
13716
13717         * expression.cs (IsParamsMethodApplicable): use foreach.
13718         (Invocation.DoResolve): ditto.
13719         (New.DoResolve): ditto.
13720         (ArrayCreation.DoResolve): ditto.
13721
13722         * ecore.cs (FindMostEncompassingType): use foreach.
13723
13724         * delegate.cs (NewDelegate.DoResolve): Use foreach
13725
13726         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
13727         (RemoveMethods): use foreach.
13728
13729         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
13730         nested foreach statements instead of for, and also break out of
13731         the inner loop once a match is found.
13732
13733         (Invocation.OverloadResolve): Use foreach, simplify the code. 
13734
13735 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
13736
13737         * cfold.cs (BinaryFold): During an enumeration evaluation context,
13738         we actually unwrap the expression to allow for extra information
13739         to be extracted. 
13740
13741         * expression.cs: Use Shr_Un on unsigned operations. 
13742
13743 2002-05-08  Ravi Pratap  <ravi@ximian.com>
13744
13745         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
13746         applicable operators was not being considered correctly. This closes
13747         the bug Miguel reported.
13748
13749 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
13750
13751         * attribute.cs: check that the type derives from System.Attribute
13752         and report the correct error in that case (moved the duplicate code to
13753         its own method, too).
13754
13755 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
13756
13757         * attribute.cs: lookup attribute type name as the spec says: first the
13758         bare attribute name and then name + "Attribute" (nant compiles with
13759         mcs after this fix).
13760
13761 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
13762
13763         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
13764         Because of the way we parse things, we should try to see if a
13765         UIntConstant can fit in an integer.
13766
13767 2002-05-07  Ravi Pratap  <ravi@ximian.com>
13768
13769         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
13770         when we are in an explicit context.
13771
13772         (ConvertReferenceExplicit): When converting from Iface type S to Class
13773         T make sure the rules are implemented as an OR.
13774
13775         * parameter.cs (ParameterType): Make it a property for now although the
13776         purpose really isn't anything immediate.
13777
13778         * expression.cs (Is*Applicable): Do better checking on the parameter type
13779         of a ref/out parameter. The ones from the system assemblies are already 
13780         marked with the correct type so we don't need to do any correction.
13781
13782         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
13783         the object type is standard too so include that.
13784
13785 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
13786
13787         * ecore.cs (StandardConversionExists): Augment with missing code:
13788         deal with IntConstant, LongConstants and Enumerations.
13789
13790         * assign.cs: Report the error, instead of failing silently
13791
13792         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
13793         typecontainer that they are declared, because the
13794         typecontainer/namespace will have the list of using clauses that
13795         need to be applied.
13796
13797         Assembly Attributes were escaping the normal registration
13798         mechanism. 
13799
13800         (EmitCode): Apply attributes within an EmitContext that represents
13801         the container they were declared on.
13802
13803         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
13804
13805 2002-05-06  Ravi Pratap  <ravi@ximian.com>
13806
13807         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
13808         Revamp completely - make much cleaner as we now operate only
13809         on a set of Types.
13810
13811         (FindMostSpecificSource, FindMostSpecificTarget): New methods
13812         to implement the logic detailed in the spec more correctly.
13813
13814         (UserDefinedConversion): Update accordingly.
13815
13816 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
13817
13818         * statement.cs: Return flow analysis information up.
13819
13820         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
13821         and the default.
13822
13823         (token): Do not consume an extra character before calling
13824         decimal_digits.
13825
13826 2002-05-06  Piers Haken <piersh@friskit.com>
13827
13828         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
13829
13830 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
13831
13832         * class.cs (Constructor.Emit): Set the IsStatic flag in the
13833         EmitContext during the instance constructor initializer
13834         resolution, to stop access to instance variables.
13835
13836         This is mandated by the spec, last paragraph of the `constructor
13837         initializers' section. 
13838
13839 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
13840
13841         * cs-parser.jay, class.cs (Accessor): new class used to represent
13842         an accessor (get or set).  In the past we used `null' to represent
13843         a missing accessor.  But this is ambiguous because there was no
13844         way to tell in abstract indexers/properties if one of them was
13845         specified.
13846
13847         Now there is a way of addressing that.
13848
13849         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
13850         instead of FindMembers.
13851
13852         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
13853         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
13854
13855         * attribute.cs: Treat indexers and properties as the same in terms
13856         of applying attributes
13857
13858         * ecore.cs (FindMostEncompassedType): Use statically initialized
13859         EmptyExpressions()s like we do elsewhere to avoid creating useless
13860         objects (and we take this out of the tight loop).
13861
13862         (GetConversionOperators): Move the code to extract the actual
13863         operators to a separate routine to clean things up.
13864
13865 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
13866
13867         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
13868         events are always registered FieldBuilders.
13869
13870         * class.cs (FieldBase): New class shared by Fields 
13871
13872         * delegate.cs: If we are a toplevel delegate, use our full name.
13873         If we are a nested delegate, then only use our tail name.
13874
13875 2002-05-02  Ravi Pratap  <ravi@ximian.com>
13876
13877         * expression.cs (IsApplicable): Ensure that we add the "&" to
13878         ref/out types before comparing it with the type of the argument.
13879
13880         (IsParamsMethodApplicable): Ditto.
13881
13882         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
13883         silly me ;-)
13884
13885         * delegate.cs : Handle the case when we have more than one applicable
13886         method. Flag an error only when we finish checking all.
13887
13888 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
13889
13890         * expression.cs: Add support for boolean static initializers.
13891
13892 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
13893
13894         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
13895
13896         * parameter.cs (ComputeParameterTypes,
13897         ComputeAndDefineParameterTypes): Better error handling: now we
13898         clear the `types' cache if we fail during any of the type lookups.
13899         We also return the status code correctly to our caller
13900
13901         * delegate.cs: If we fail to define a delegate, abort the extra
13902         steps. 
13903
13904         * expression.cs (Binary.ResolveOperator): for
13905         operator==(object,object) and operator !=(object, object) we also
13906         have to verify that there is an implicit conversion from one to
13907         the other.
13908
13909         (ArrayAccess.DoResolve): Array Access can operate on
13910         non-variables. 
13911
13912 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
13913
13914         * assign.cs (CompoundAssign): A new class used as a "flag" that
13915         the assignment actually is happening as part of a compound
13916         assignment operator.
13917
13918         During compound assignment, a few new rules exist to enable things
13919         like:
13920
13921         byte b |= 1 + 2
13922
13923         From the spec:
13924
13925         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
13926         to the type of x) if y is implicitly convertible to the type of x,
13927         and the operator is a builtin operator and the return type of the
13928         operator is explicitly convertible to the type of x. 
13929
13930         * rootcontext.cs: Reset warning level to 2.  4 catches various
13931         "interesting" features in mcs, we must clean this up at some
13932         point, but currently am trying to kill other bugs ;-)
13933
13934         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
13935         in container classes as well.  
13936
13937         * expression.cs (Binary.ResolveOperator): Handle string case
13938         before anything else (as operator overloading does emit an error
13939         before doing anything else).
13940
13941         This code could go away when we move to a table driven model, but
13942         i could not come up with a good plan last night.
13943
13944 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
13945
13946         * typemanager.cs (CSharpName): reimplementation using regex.
13947         * class.cs: added null check for fields in Emit
13948         * rootcontext.cs: set warninglevel to 4
13949
13950 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
13951
13952         * typemanager.cs (CSharpName): reimplemented with Lupus
13953         suggestion.
13954
13955 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
13956
13957         * statement.cs (If): correclty implement Resolve, because we were
13958         not catching sem errors in there.  The same process is needed
13959         everywhere else. 
13960         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
13961
13962
13963         (Statement.Warning_DeadCodeFound): Factorize code.
13964         (While): Report dead code here too.
13965
13966         (Statement): Added Resolve virtual method to allow
13967         for resolution split from the emit code.
13968
13969 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
13970
13971         * statement.cs (EmitBoolExpression): No longer try to resolve the
13972         expression here.    
13973         (MakeBoolean): New utility function that resolve, implicitly
13974         converts to boolean and tags the expression. 
13975
13976
13977         (If, Do): Implement dead code elimination.
13978         (While): Implement loop inversion
13979
13980         (Do, While, For, If): Resolve the expression prior to calling our
13981         code generation.
13982
13983 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
13984
13985         * class.cs:
13986           - added method Report28 (warning: program has more than one entry point)
13987           - added method IsEntryPoint, implements paragraph 10.1 of the spec
13988           - modified method Method.Define, the part at the end of the method
13989
13990         * rootcontext.cs: added static public Location EntryPointLocation;
13991           
13992         * ../errors/cs0028.cs : Add test case for the above warning.              
13993
13994         * typemanager.cs:
13995           - modified method CSharpName to allow arrays of primitive type to
13996             be printed nicely (e.g. instead of System.Int32[][] it now prints
13997             int[][])
13998           - added method CSharpSignature: returns the signature of a method
13999             in string format to be used in reporting errors, warnings, etc.
14000
14001         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
14002         with String.Empty.
14003
14004 2002-04-26  Ravi Pratap  <ravi@ximian.com>
14005
14006         * delegate.cs (Define): Fix extremely silly bug where I was
14007         setting the type of the 'object' parameter of the BeginInvoke
14008         method to System.IAsyncResult instead of System.Object ;-)
14009
14010 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
14011
14012         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
14013         here. 
14014
14015         (Constructor.Emit): return if we fail to initialize the
14016         constructor.  Another door closed!  
14017
14018         * expression.cs (New.DoResolve): Improve error message (from -6 to
14019         1501).  Use DeclaredOnly lookup to find the exact constructor.
14020
14021         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
14022         loop.  This is useful.
14023
14024         * cs-parser.jay: Adjust the default parameters so that destructors
14025         have the proper signature.
14026
14027 2002-04-26  Martin Baulig  <martin@gnome.org>
14028
14029         * driver.cs (LoadAssembly): If `assembly' contains any characters
14030         which are only valid in path names and not in assembly names
14031         (currently slash, backslash and point), use Assembly.LoadFrom ()
14032         instead of Assembly.Load () on the `assembly' (before iteration
14033         over the link_paths).
14034
14035 2002-04-26  Martin Baulig  <martin@gnome.org>
14036
14037         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
14038
14039 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
14040
14041         * class.cs (Property): use the new typemanager.MemberLookup
14042
14043         (TypeContainer.MemberLookup): Implement using the
14044         TypeManager.MemberLookup now. 
14045
14046         * typemanager.cs: Make MemberLookup a function of the TypeManager,
14047         and return MemberInfos, so that these can be used without an
14048         EmitContext (what we had before).
14049
14050 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
14051
14052         * expression.cs: Fix the case where the argument to params if the
14053         type of the params.  I omitted handling this before.   Fixed
14054
14055 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
14056
14057         * driver.cs: Call BootCorlib_PopulateCoreType
14058
14059         * class.cs (Property.CheckBase): Check for properties only, not
14060         for all members. 
14061
14062         * interface.cs: Temporary hack: try/catch around the
14063         CustomAttributeBuilder, because I am getting an exception that I
14064         do not understand.
14065
14066         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
14067         types whose definitions are required to be there (attributes are
14068         defined before standard types).
14069
14070         Compute definitions as we boot the various types, as they are used
14071         immediately (value_type class will need object_type, but if we do
14072         not initialize object_type, we will pass a null, which will let
14073         the runtime pick the System.Object from the existing corlib, which
14074         is not what we want).
14075
14076 2002-04-22  Patrik Torstensson <totte@labs2.com>
14077
14078         * cs-tokenizer.cs: fixed a number of trim() issues.
14079
14080 2002-04-22  Ravi Pratap  <ravi@ximian.com>
14081
14082         * expression.cs (Argument.Type): Ensure that we return the correct
14083         type when we have out or ref parameters [in which case we 
14084         append a "&"].
14085
14086 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
14087
14088         * class.cs (Property, Indexer): Allow extern modifier in there. 
14089
14090         * typemanager.cs (InitBaseTypes): Initializes object_type and
14091         value_type, since those will be used early on during the bootstrap
14092         process to compile corlib.
14093
14094         (InitCoreTypes): Move code from here to InitBaseTypes.
14095
14096 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
14097
14098         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
14099         single-dimension arrays as using the ldlen opcode.  
14100
14101         Daniel Lewis discovered this optimization.  
14102
14103         * typemanager.cs: Add signature for System.Array::get_Length
14104
14105 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14106
14107         * statement.cs: report the error when the foreach does not apply to an
14108         array nor a collection.
14109
14110 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
14111
14112         * expression.cs: Add implicit conversions to the operator ~.
14113
14114         * constant.cs (DecimalConstant.Emit): Emit decimal value.
14115
14116         * typemanager.cs: Locate the decimal constructor.
14117
14118 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14119
14120         * attribute.cs: use the new property of TypeOf.
14121         * expression.cs: added 'get' property around typearg.
14122
14123         These changes fix a build breaker reported by NickD. Is this the
14124         correct way to fix?  If not, please, revert my changes and make it
14125         work :-).
14126
14127 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
14128
14129         * attribute.cs: Add support for typeof in attribute invocations.
14130         I am not sure that this is right though.
14131
14132 2002-04-14  Duncan Mak  <duncan@ximian.com>
14133
14134         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
14135         Binary.Operator.Division case.
14136
14137 2002-04-13  Ravi Pratap  <ravi@ximian.com>
14138
14139         * class.cs (DefineType): Ensure that we do a proper check on
14140         attribute types and also register it with the TypeManager.
14141
14142         (TypeContainer.Targets): The default for attribute types is
14143         AttributeTargets.All.
14144
14145         * attribute.cs (ApplyAttributes): Registering the attribute type
14146         is done elsewhere, not when we discover we have a Usage attribute.
14147
14148 2002-04-12  Ravi Pratap  <ravi@ximian.com>
14149
14150         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
14151         and get rid of is_delegate parameter.
14152
14153         * everywhere : update.
14154
14155 2002-04-12  Ravi Pratap  <ravi@ximian.com>
14156
14157         * cs-parser.jay (compilation_unit): Revamp completely to use
14158         some new ideas that I got from Rhys' grammar to solve the problems
14159         with assembly level attributes.
14160
14161         (outer_declaration): New grammar production.
14162
14163         (attribute_sections): Add.
14164
14165         (opt_attributes): Base on attribute_sections
14166
14167         (namespace_declaration): Allow opt_attributes to tackle the case
14168         when we have assembly level attributes - we are clever in this
14169         regard now ;-)
14170
14171         * attribute.cs (ApplyAttributes): Do not worry about assembly 
14172         attributes in the non-global context.
14173
14174         * rootcontext.cs (AddGlobalAttributes): Go back to using this
14175         instead of SetGlobalAttributes.
14176
14177         * class.cs, rootcontext.cs : Ensure we define and generate 
14178         attribute types before anything else.
14179
14180         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
14181         and flag the new error -20 for the case when the attribute type
14182         does not have valid targets specified. csc does not catch this.
14183
14184         * ../errors/errors.txt : update for error # -20
14185
14186 2002-04-11  Ravi Pratap  <ravi@ximian.com>
14187
14188         * support.cs (InternalParameters.ParameterModifier): Do some null
14189         checking and return sane values.
14190
14191         * class.cs (Method.Define): If we are a PInvoke method, ensure
14192         that we are static and extern. Report error # 601
14193
14194         * ../errors/cs0601.cs : Add test case for the above error.
14195
14196 2002-04-07  Ravi Pratap  <ravi@ximian.com>
14197
14198         * rootcontext.cs (attribute_types): We need to keep type of
14199         all attribute types separately and emit code for them first.
14200
14201         (RegisterAttribute) : Implement.
14202
14203         * class.cs (DefineType): Check if the current Type is a custom
14204         attribute type and register it accordingly.
14205
14206         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
14207         adding the first attribute twice and rename to
14208
14209         (SetGlobalAttributes): this.
14210
14211         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
14212         lookups.
14213
14214         * attribute.cs (ApplyAttributes): Take an additional argument telling us
14215         if we are processing global arguments. Hmm, I am unsure of this.
14216
14217 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14218
14219         * expression.cs: added static array of strings to avoid calling
14220         Enum.ToString () for Operator in Binary. Significant recover of
14221         performance.
14222
14223 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
14224
14225         * class.cs (FindMembers): Allow the Builders of the various
14226         members to be null.  If they are skip them.  This only happens
14227         during the PInvoke declaration.
14228
14229 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
14230
14231         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
14232         failure, so we do not keep going afterwards.
14233
14234         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
14235         wanted to pass `false' as the `is_delegate' argument.  If this is
14236         the case, why not use delegate_type == null to mean `is_delegate =
14237         false' and anything else as is_delegate = true.
14238
14239 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
14240
14241         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
14242         code for the section, not the beginning of the tests.
14243
14244 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
14245
14246         * cfold.cs: Handle operator + (Enum x, Underlying x) 
14247
14248         * expression.cs (Binary): same.  Warn about errors where we have
14249         Enum/Enum in operator + as well.
14250
14251 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
14252
14253         * statement.cs:
14254                 - added support for switch(bool)
14255                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
14256                 - add TableSwitchEmit() to handle table-based switch statements
14257
14258 2002-04-05  Ravi Pratap  <ravi@ximian.com>
14259
14260         * expression.cs (Invocation.OverloadResolve): Factor out code which
14261         does parameter compatibility checking with arguments so that we can 
14262         re-use the code even from Delegate.VerifyApplicability
14263
14264         (VerifyArgumentsCompat): Move above code here.
14265
14266         * delegate.cs (VerifyApplicability): Get rid of duplicate code
14267         and instead make a call to the above method.
14268
14269 2002-03-31  Ravi Pratap  <ravi@ximian.com>
14270
14271         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
14272         We use it to keep track of classes which are attribute types.
14273
14274 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
14275
14276         * delegate.cs (Delegate.Define): Correctly define the types in the
14277         presence of fixed and array parameters.
14278
14279         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
14280         doing FindMembers.
14281
14282         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
14283         include NonPublic after the first iteration.
14284
14285         * class.cs (Indexer.CheckBase): Only check if both parents are
14286         non-null. 
14287
14288         * cs-parser.jay (accessor_body): If empty, set to null.
14289
14290         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
14291         same code path here to resolve constants names that we did have in
14292         MemberAccess.DoResolve.  There is too much code duplicated here.
14293
14294 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
14295
14296         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
14297
14298         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
14299         to MakeUnionSet.
14300
14301         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
14302         tokens, numbers and strings.
14303
14304         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
14305         parenthesis.
14306
14307         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
14308         asyncronous parameters and the regular parameters.  
14309
14310         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
14311         specify the target directory.
14312
14313         * expression.cs: (This.DoResolve): Simplify
14314         (As.Emit): Optimize, do not generate IsInst if the expression is
14315         always of the given type.
14316
14317         (Is.DoResolve): Bug fix, we were reporting both always/never for
14318         the is expression.
14319
14320         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
14321         creating too many unnecessary arrays.
14322
14323 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
14324
14325         * class.cs (EmitFieldInitializer): Use Assign expression to assign
14326         fields instead of rolling our own initializer.   Takes care of all
14327         implicit conversions, and drops unnecessary static checks/argument.
14328
14329 2002-03-31  Dick Porter  <dick@ximian.com>
14330
14331         * driver.cs: use the GetDirectories() return values properly, and
14332         use "/" as path separator.
14333
14334 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
14335
14336         * expression.cs (Unary): Optimize - - expr into expr.
14337         (Binary): Optimize a + (-b) into a -b.
14338
14339         * codegen.cs (CodeGen): Made all methods static.
14340
14341 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
14342
14343         * rootcontext.cs: 
14344
14345         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
14346         TypeBuilder property.
14347
14348         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
14349         instead. 
14350
14351         * tree.cs: Removed the various RecordXXXX, and replaced with a
14352         single RecordDecl.  Removed all the accessor methods, and just
14353         left a single access point Type 
14354
14355         * enum.cs: Rename DefineEnum to DefineType.
14356
14357         * decl.cs: New abstract method `DefineType' used to unify the
14358         Defines for Enumerations, Interfaces, TypeContainers and
14359         Delegates.
14360
14361         (FindType): Moved LookupInterfaceOrClass here.  Moved the
14362         LookupBaseClasses method that used to live in class.cs and
14363         interface.cs here, and renamed to FindType.
14364
14365         * delegate.cs: Implement DefineType.  Take advantage of the
14366         refactored pattern for locating the parent builder without taking
14367         the parent_builder argument (which we know does not work if we are
14368         nested, and triggering a toplevel definition).
14369
14370 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
14371
14372         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
14373         accessibility of a member has changed during override and report
14374         an error if so.
14375
14376         * class.cs (Method.Define, Property.Define): Only complain on
14377         overrides if the method is private, any other accessibility is
14378         fine (and since we just checked the permission is the same, we are
14379         good to go).
14380
14381         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
14382         and elif are processed always.  The other pre-processing
14383         directives are only processed if we are "taking" the path
14384
14385 2002-03-29  Martin Baulig  <martin@gnome.org>
14386
14387         * class.cs (Method.Emit): Only emit symbolic debugging info if the
14388         current location is not Null.
14389
14390         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
14391         a separate method so we can profile it.
14392
14393         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
14394         `span.Seconds' are just seconds, but no minutes or hours.
14395         (MainDriver): Profile the CodeGen.SaveSymbols calls.
14396
14397 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
14398
14399         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
14400         Remove the gratuitous set of Final:
14401
14402                                 // If an interface implementation, then we can set Final.
14403                                 if (((flags & MethodAttributes.Abstract) == 0) &&
14404                                     implementing.DeclaringType.IsInterface)
14405                                         flags |= MethodAttributes.Final;
14406
14407         I do not know what I was smoking when I used that.
14408
14409
14410         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
14411         step into fixing the name resolution issues for delegates and
14412         unifying the toplevel name resolution.
14413
14414 2002-03-28  Martin Baulig  <martin@gnome.org>
14415
14416         * class.cs (Method.Emit): If we have a symbol writer, call its
14417         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
14418         tell it about the current method.
14419
14420         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
14421         writer that we're going to emit the first byte of IL code for a new
14422         statement (a new source line).
14423         (EmitContext.EmitTopBlock): If we have a symbol writer, call
14424         EmitContext.Mark() before emitting any code.
14425
14426         * location.cs (SymbolDocument): Return null when we're Null.
14427
14428         * statement.cs (Statement): Moved the `Location loc' variable here.
14429         (Statement.EmitBoolExpression): If we have a symbol writer, call
14430         ec.Mark() before emitting any code to tell it that we're at the
14431         beginning of a new statement.
14432         (StatementExpression): Added `Location' argument to the constructor.
14433         (Block): Added public readonly variable `StartLocation' and public
14434         variable `EndLocation'.  The latter is to be set using SetEndLocation().
14435         (Block): Added constructor which takes a start and end location.
14436         (Block.SetEndLocation): New method. This sets the end location.
14437         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
14438         local variables we create.
14439         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
14440         each statement and do also mark the begin and end of the block.
14441
14442         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
14443         tell it the current lexer.Location, use Location.Null for the end of the
14444         block.
14445         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
14446         current block, set its end location using SetEndLocation().
14447         (statement_expression): StatementExpression constructor now takes the
14448         lexer.Location as additional argument.
14449         (for_statement, declare_local_variables): Likewise.
14450         (declare_local_variables): When creating a new implicit block, use the
14451         new Block constructor and pass it the lexer.Location.
14452
14453 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
14454
14455         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
14456         members also on the parent interfaces recursively.
14457
14458 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
14459
14460         * report.cs: Use new formats, since Gonzalo finished the missing
14461         bits. 
14462
14463         * expression.cs (Binary.ResolveOperator): added missing operator|
14464         operator& and operator^ for bool/bool.
14465
14466         * cs-parser.jay: CheckDef now takes a Location argument that is
14467         used to report errors more precisly (instead of reporting the end
14468         of a definition, we try to track something which is a lot closer
14469         to the source of the problem).
14470
14471         * cs-tokenizer.cs: Track global token use, so we can properly flag
14472         the use of #define/#undef after the first token has been seen.
14473
14474         Also, rename the reportXXXX to Error_DescriptiveName
14475
14476         * decl.cs (DeclSpace.IsTopLevel): Move property here from
14477         TypeContainer, so that Enum and Interface can use this too.
14478
14479         * class.cs (TypeContainer.LookupInterfaceOrClass,
14480         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
14481         `builder' argument.  Typically this was used to pass the parent
14482         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
14483         the definition).  
14484
14485         The problem is that a nested class could trigger the definition of
14486         a toplevel class, and the builder would be obviously wrong in that
14487         case. 
14488
14489         So we drop this argument, and we compute dynamically the
14490         TypeBuilder/ModuleBuilder (the correct information was available
14491         to us anyways from DeclSpace.Parent)
14492
14493         * interface.cs (Interface.DefineInterface): Drop builder
14494         parameter cleanup like class.cs
14495
14496         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
14497         like class.cs
14498
14499         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
14500         values. 
14501
14502         (Try.Emit): Propagate the returns value from the statement.
14503
14504         (Return.Emit): Even if we are leavning 
14505
14506         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
14507
14508         * modifiers.cs: Fix the computation of MethodAttributes flags.
14509
14510 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
14511
14512         * driver.cs: allow compilation of files that start with '/'.
14513         Add a default case when checking the argument of --target.
14514
14515 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
14516
14517         * interface.cs: Implement the same search algorithm for types in
14518         the interface code.
14519
14520         * delegate.cs: Do not allow multiple definition.
14521
14522         * Recovered ChangeLog that got accidentally amputated
14523
14524         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
14525
14526         * rootcontext.cs: Load manually enum to allow core classes to
14527         contain enumerations.
14528
14529         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
14530         Update to new static methods in TypeManager.
14531
14532         * typemanager.cs (GetMethod, GetConstructor): Use our
14533         implementation of FindMembers to find the members, since during
14534         corlib compilation, the types are TypeBuilders and GetMethod and
14535         GetConstructor do not work.
14536
14537         Make all methods in TypeManager static.
14538
14539         (InitCodeHelpers): Split the functionality from
14540         the InitCodeTypes function.
14541
14542         * driver.cs: Call InitCodeHelpers after we have populated the
14543         types. 
14544
14545         * cs-parser.jay (delegate_declaration): we did not used to compute
14546         the delegate name correctly for void delegates.
14547
14548 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
14549
14550         * rootcontext.cs (RootContext): Init the interface_resolve_order
14551         and type_container_resolve_order always.
14552
14553         (ResolveCore, BootstrapCorlib_ResolveClass,
14554         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
14555         compiler when compiling with --nostdlib
14556
14557         * class.cs (TypeContainer.DefineType): Check that our parent is
14558         not null.  This test is most important when we are bootstraping
14559         the core types.
14560
14561         * codegen.cs: Split out the symbol writing code.
14562
14563 2002-03-25  Martin Baulig  <martin@gnome.org>
14564
14565         * driver.cs (-g): Made -g an alias for --debug.
14566
14567 2002-03-24  Martin Baulig  <martin@gnome.org>
14568
14569         * codegen.cs (SymbolWriter): New public variable. Returns the
14570         current symbol writer.
14571         (CodeGen): Added `bool want_debugging_support' argument to the
14572          constructor. If true, tell the ModuleBuild that we want debugging
14573         support and ask it for the ISymbolWriter.
14574         (Save): If we have a symbol writer, call it's Close() method after
14575         saving the assembly.
14576
14577         * driver.c (--debug): New command line argument to create a
14578         debugger information file.
14579
14580         * location.cs (SymbolDocument): New public property. Returns an
14581         ISymbolDocumentWriter object for the current source file or null
14582         if we don't have a symbol writer.
14583
14584 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
14585
14586         * driver.cs (LoadAssembly): Correctly return when all the paths
14587         have been tried and not before.
14588
14589         * statement.cs (Switch.Emit): return the actual coverage for this
14590         statement (returns/not-returns)
14591
14592         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
14593         switch of the statement if we are the last switch section.  That
14594         kills two problems: try/catch problems (we used to emit an empty
14595         nop at the end) and switch statements where all branches would
14596         return. 
14597
14598 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
14599
14600         * driver.cs: Add default assemblies (the equivalent to the
14601         Microsoft CSC.RSP file)
14602
14603         * cs-tokenizer.cs: When updating `cols and setting it to zero,
14604         also update tokens_seen and set it to false.
14605
14606         * driver.cs: Implement --recurse for Mike.
14607
14608         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
14609         correctly splitting out the paths.
14610
14611 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
14612
14613         * interface.cs (Interface.PopulateProperty): Instead of using
14614         `parent' as the declaration space for the set parameters, use
14615         `this' 
14616
14617         * support.cs (InternalParameters): InternalParameters constructor
14618         takes a DeclSpace instead of a TypeContainer.
14619
14620         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
14621         types are being initialized, load the address of it before calling
14622         the function.  
14623
14624         (New): Provide a mechanism to disable the generation of local
14625         value type temporaries when the caller will be providing us with
14626         an address to store it.
14627
14628         (ArrayCreation.EmitDynamicInitializers): Use it.
14629
14630 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
14631
14632         * expression.cs (Invocation.EmitArguments): Only probe for array
14633         property if there is more than one argument.  Sorry about that.
14634
14635         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
14636         empty param arrays.
14637
14638         * class.cs (Method.LabelParameters): Fix incorrect code path that
14639         prevented the `ParamArrayAttribute' from being applied to the
14640         params attribute.
14641
14642 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
14643
14644         * support.cs (ReflectionParameters): Correctly compute whether the
14645         last argument is a params array.  Fixes the problem with
14646         string.Split ('a')
14647
14648         * typemanager.cs: Make the assemblies array always be non-null
14649         (empty, but non-null)
14650
14651         * tree.cs (RecordDecl): New function that abstracts the recording
14652         of names.  This reports error 101, and provides a pointer to the
14653         previous declaration.  Fixes a crash in the compiler.
14654
14655         * cs-parser.jay (constructor_declaration): Update to new grammar,
14656         and provide a constructor_body that can be empty.
14657
14658 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
14659
14660         * driver.cs: Add support for --resources.
14661
14662         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
14663         Make all types for the various array helper methods be integer.
14664
14665         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
14666         CheckState to ConvCast.
14667
14668         (ConvCast): Now it takes a `checked' state argument, to avoid
14669         depending on the emit context for the conversion, and just using
14670         the resolve time setting.
14671
14672         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
14673         instead of Invocation.EmitArguments.  We do not emit the original
14674         arguments, instead we emit those which have been converted to
14675         unsigned int expressions.
14676
14677         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
14678
14679         * codegen.cs: ditto.
14680
14681         * expression.cs (LocalVariableReference): Drop the use of the
14682         Store function that depended on the variable index.
14683
14684         * statement.cs (VariableInfo): Drop the `Idx' property from this
14685         class, as this is not taking into account the indexes for
14686         temporaries tat we generate during the execution, getting the
14687         indexes wrong.
14688
14689         * class.cs: First emit class initializers, then call the parent
14690         constructor. 
14691
14692         * expression.cs (Binary): Fix opcode emision.
14693         (UnaryMutator.EmitCode): Support checked code generation
14694
14695         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
14696         matches for events for both the Static and Instance scans,
14697         pointing to the same element.   Fix that.
14698
14699 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
14700
14701         * rootcontext.cs (ResolveTree): Always set the
14702         interface_resolve_order, because nested interfaces will be calling
14703         into us.
14704
14705         * class.cs (GetInterfaceOrClass): Track the same resolution
14706         process used by TypeManager.LookupType.  This fixes the nested
14707         type lookups in class declarations (separate path from
14708         LookupType). 
14709
14710         (TypeContainer.DefineType): Also define nested interfaces.
14711         (TypeContainer.RegisterOrder): New public function used to
14712         register the order in which child interfaces need to be closed.
14713
14714         Nested interfaces need to be closed after their parents have been
14715         created. 
14716
14717         * interface.cs (InterfaceAttr): Put all the logic for computing
14718         the interface attribute here. 
14719
14720         (DefineInterface): Register our interface order with the
14721         RootContext or with the TypeContainer depending on the case.
14722
14723 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
14724
14725         * cs-parser.jay: rework foreach statement to work with the new
14726         changes to the policy on SimpleNames.
14727
14728         * report.cs: support Stacktrace on warnings as well.
14729
14730         * makefile: drop --unsafe and /unsafe from the compile.
14731
14732 2002-03-13  Ravi Pratap  <ravi@ximian.com>
14733
14734         * ecore.cs (StandardConversionExists): Modify to take an Expression
14735         as the first parameter. Ensure we do null -> reference type conversion
14736         checking.
14737
14738         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
14739         temporary Expression objects.
14740
14741 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
14742
14743         * interface.cs: workaround bug in method overloading resolution
14744         (there is already a bugzilla bug for it).
14745
14746 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
14747
14748         We could also solve this problem by having a separate path for
14749         performing type lookups, instead of DoResolve, we could have a
14750         ResolveType entry point, and only participating pieces of the
14751         production (simplename, deref, array) would implement this. 
14752
14753         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
14754         signal SimpleName to only resolve type names and not attempt to
14755         resolve anything else.
14756
14757         * expression.cs (Cast): Set the flag.
14758
14759         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
14760
14761         * class.cs: Only report 108 if there is no `new' modifier.
14762
14763         * cs-parser.jay: rework foreach statement to work with the new
14764         changes to the policy on SimpleNames.
14765         
14766         * report.cs: support Stacktrace on warnings as well.
14767
14768         * makefile: drop --unsafe and /unsafe from the compile.
14769
14770 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
14771
14772         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
14773         lookups here, instead of doing that at parse time.  This means
14774         that our grammar will not introduce `LocalVariableReferences' as
14775         expressions at this point.  That solves the problem of code like
14776         this:
14777
14778         class X {
14779            static void Main ()
14780            { int X = 1;
14781             { X x = null }}}
14782
14783         This is only half the fix.  The full fix requires parameters to
14784         also be handled in this way.
14785
14786         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
14787         makes the use more obvious of the DeclSpace.  The
14788         ec.TypeContainer.TypeBuilder is now only used to pull the
14789         TypeBuilder for it.
14790
14791         My theory is that I can get rid of the TypeBuilder completely from
14792         the EmitContext, and have typecasts where it is used (from
14793         DeclSpace to where it matters).  
14794
14795         The only pending problem is that the code that implements Aliases
14796         is on TypeContainer, and probably should go in DeclSpace.
14797
14798         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
14799         lookups here, instead of doing that at parse time.  This means
14800         that our grammar will not introduce `LocalVariableReferences' as
14801         expressions at this point.  That solves the problem of code like
14802         this:
14803
14804         class X {
14805            static void Main ()
14806            { int X = 1;
14807             { X x = null }}}
14808
14809         This is only half the fix.  The full fix requires parameters to
14810         also be handled in this way.
14811
14812         * class.cs (Property.DefineMethod): When implementing an interface
14813         method, set newslot, when implementing an abstract method, do not
14814         set the flag (before we tried never setting it, or always setting
14815         it, which is the difference).
14816         (Indexer.DefineMethod): same.
14817         (Method.DefineMethod): same.
14818
14819         * ecore.cs: Only set the status used flag if we get back a Field.
14820
14821         * attribute.cs: Temporary hack, so Paolo can keep working.
14822
14823 2002-03-08  Ravi Pratap  <ravi@ximian.com>
14824
14825         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
14826         the unmanaged type in the case we have a MarshalAs attribute.
14827
14828         (Resolve): Handle the case when we are parsing the special MarshalAs
14829         attribute [we need to store the unmanaged type to use later]
14830
14831         * typemanager.cs (marshal_as_attr_type): Built in type for the 
14832         MarshalAs Attribute.
14833
14834         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
14835         on parameters and accordingly set the marshalling info.
14836
14837 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
14838
14839         * class.cs: Optimizing slightly by removing redundant code after
14840         we switched to the `NoTypes' return value.
14841         (Property.DefineMethod): use NoTypes here too.
14842
14843         This fixes the bug I introduced in my last batch of changes.
14844
14845 2002-03-05  Ravi Pratap  <ravi@ximian.com>
14846
14847         * tree.cs (RecordEnum): Add. We now keep track of enums too.
14848
14849         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
14850         Enums since those are types too. 
14851
14852         * cs-parser.jay (enum_declaration): Record enums as we parse them.
14853
14854         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
14855         thanks to a call during the lookup process.
14856
14857 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
14858
14859         * statement.cs (Foreach): Lots of work to accomodate a particular
14860         kind of foreach statement that I had not kept in mind.  It is
14861         possible to have foreachs on classes that provide a GetEnumerator
14862         method that return objects that implement the "pattern" for using
14863         a foreach, there is no need to support GetEnumerator
14864         specifically. 
14865
14866         This is needed to compile nant.
14867
14868         * decl.cs: Only report 114 if the member is not `Finalize' and if
14869         the warning level is at least 2.
14870
14871         * class.cs: Moved the compare function from Method to
14872         MethodSignature. 
14873
14874         (MethodSignature.InheritableMemberSignatureCompare): Add new
14875         filter function that is used to extract inheritable methods from a
14876         class. 
14877
14878         (Method.Define): Use the new `inheritable_method_signature_filter'
14879         delegate
14880
14881         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
14882         command. 
14883
14884 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
14885
14886         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
14887
14888         * cs-parser.jay: Add opt_semicolon to the interface declaration.
14889
14890         * expression.cs: Pass location information to
14891         ConvertImplicitStandard. 
14892
14893         * class.cs: Added debugging code to track return values from
14894         interfaces. 
14895
14896 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
14897
14898         * expression.cs (Is.DoResolve): If either side of the `is' is an
14899         interface, do not flag the warning.
14900
14901         * ecore.cs (ImplicitReferenceConversion): We need a separate test
14902         for interfaces
14903
14904         * report.cs: Allow for --fatal to be used with --probe.
14905
14906         * typemanager.cs (NoTypes): Move the definition for the empty Type
14907         array here. 
14908
14909         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
14910         properties. 
14911         (TypeContainer.DefineProxy): New function used to proxy to parent
14912         implementations when implementing interfaces.
14913         (TypeContainer.ParentImplements): used to lookup if our parent
14914         implements a public function that is required by an interface.
14915         (TypeContainer.VerifyPendingMethods): Hook this up.
14916
14917         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
14918         `modules' and `assemblies' arraylists into arrays.  We only grow
14919         these are the very early start up of the program, so this improves
14920         the speedof LookupType (nicely measured).
14921
14922         * expression.cs (MakeByteBlob): Replaced unsafe code with
14923         BitConverter, as suggested by Paolo.
14924
14925         * cfold.cs (ConstantFold.Binary): Special case: perform constant
14926         folding of string concatenation, but if either side is a string,
14927         and the other is not, then return null, and let the runtime use
14928         the concatenation on the string plus the object (using
14929         `Object.ToString'). 
14930
14931 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
14932
14933         Constant Folding has been implemented now.
14934
14935         * expression.cs (Unary.Reduce): Do not throw an exception, catch
14936         the error instead on types that are not supported in one's
14937         complement. 
14938
14939         * constant.cs (Constant and all children): New set of functions to
14940         perform implict and explicit conversions.
14941
14942         * ecore.cs (EnumConstant): Implement the new functions to perform
14943         conversion by proxying to the child expression.
14944
14945         * codegen.cs: (ConstantCheckState): Constant evaluation has its
14946         own separate setting that can not be turned off from the command
14947         line using --unchecked or --checked and is only controlled using
14948         the checked/unchecked statements and expressions.  This setting is
14949         used by the constant folder to flag errors.
14950
14951         * expression.cs (CheckedExpr, UncheckedExpr): Set the
14952         ConstantCheckState as well.   
14953
14954         During Resolve, they also have to flag the state, because the
14955         constant folder runs completely in the Resolve phase.
14956
14957         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
14958         well.
14959
14960 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
14961
14962         * cfold.cs: New file, this file contains the constant folder.
14963
14964         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
14965         argument to track whether we are using the resulting address to
14966         load or store a value and provide better error messages. 
14967
14968         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
14969         new AddressOf arguments.
14970
14971         * statement.cs (Foreach.EmitCollectionForeach): Update
14972
14973         * expression.cs (Argument.Emit): Call AddressOf with proper
14974         arguments to track usage.
14975
14976         (New.DoEmit): Call AddressOf with new arguments.
14977
14978         (Unary.Emit): Adjust AddressOf call.
14979
14980 2002-03-01  Ravi Pratap  <ravi@ximian.com>
14981
14982         * cs-parser.jay (member_access): Change the case for pre-defined types
14983         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
14984         this suggestion.
14985
14986         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
14987         a method body.
14988
14989         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
14990         essentially like methods and apply attributes like MethodImplOptions to them too.
14991
14992         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
14993         not being null.
14994
14995         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
14996         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
14997         is the DeclSpace.
14998
14999         * Update code everywhere accordingly.
15000
15001         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
15002
15003         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
15004
15005 2002-02-28  Ravi Pratap  <ravi@ximian.com>
15006
15007         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
15008         try performing lookups against those instead of jumping straight into using
15009         the 'using' clauses.
15010
15011         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
15012
15013         (LookupType): Perform lookups in implicit parents too.
15014
15015         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
15016         sequence as RootContext.LookupType. 
15017
15018         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
15019         the various cases of namespace lookups into this method.
15020
15021 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
15022
15023         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
15024         in positional arguments)
15025
15026         * class.cs (Operator): Update the AllowedModifiers to contain
15027         extern. 
15028
15029         * cs-parser.jay: Update operator declaration to allow for the
15030         operator body to be empty.
15031
15032         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
15033         values. 
15034
15035 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
15036
15037         * class.cs (Method.Emit): Label parameters.
15038
15039         * driver.cs: Return 1 or 0 as the program exit code.
15040
15041 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
15042
15043         * expression.cs: Special case the `null' object when trying to
15044         auto-compute the type, as anything can be explicitly converted to
15045         that. 
15046
15047         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
15048         spotting this Paolo.
15049
15050         (Expression.ImplicitNumericConversion): Perform comparissions of
15051         the type using the underlying type in the case of an enumeration
15052         rather than using the enumeration type for the compare.
15053
15054         Cope with the underlying == type case, which is not possible to
15055         catch before. 
15056
15057         (Expression.ConvertNumericExplicit): Perform comparissions of
15058         the type using the underlying type in the case of an enumeration
15059         rather than using the enumeration type for the compare.
15060
15061         * driver.cs: If the user does not supply an extension, assume .exe
15062
15063         * cs-parser.jay (if_statement): Rewrote so that we can track the
15064         location for the if statement.
15065
15066         * expression.cs (Binary.ConstantFold): Only concat strings when
15067         the operation is "+", not everything ;-)
15068
15069         * statement.cs (Statement.EmitBoolExpression): Take a location
15070         argument. 
15071         (If, While, Do): Track location.
15072
15073         * expression.cs (Binary.ResolveOperator): In the object + string
15074         case, I was missing a call to ConvertImplicit
15075
15076 2002-02-25  Ravi Pratap  <ravi@ximian.com>
15077
15078         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
15079         Location arguments. Ensure we use RootContext.LookupType to do our work
15080         and not try to do a direct Type.GetType and ModuleBuilder.GetType
15081
15082         * interface.cs (PopulateMethod): Handle the type of the parameter being
15083         null gracefully.
15084
15085         * expression.cs (Invocation.BetterFunction): Handle the case when we 
15086         have a params method with no fixed arguments and a call is made with no
15087         arguments.
15088
15089 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
15090
15091         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
15092         the verbatim-string-literal
15093
15094         * support.cs (InternalParameters.ParameterModifier): handle null
15095         fixed parameters.
15096         (InternalParameters.ParameterType): ditto.
15097
15098         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
15099         duplicating the name of the variable parameter.
15100         (GetParameterByName): Fix bug where we were not looking up array
15101         paramters if they were the only present (thanks Paolo!).
15102         (GetParameterInfo): We only have an empty set of types if both
15103         fixed and array are set to null.
15104         (GetParameterInfo-idx): Handle FixedParameter == null
15105
15106         * cs-parser.jay: Handle the case where there is no catch
15107         statements (missing null test).
15108
15109 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
15110
15111         * driver.cs (MainDriver): Be conservative on our command line
15112         handling.
15113
15114         Catch DirectoryNotFoundException when calling GetFiles.
15115
15116         (SplitPathAndPattern): Used to split the input specification into
15117         a path and a pattern that we can feed to Directory.GetFiles.
15118
15119 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
15120
15121         * statement.cs (Fixed): Implement the last case of the Fixed
15122         statement (string handling).
15123
15124         * expression.cs (StringPtr): New class used to return a char * to
15125         a string;  Used by the Fixed statement.
15126
15127         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
15128
15129         * expression.cs (Binary.ResolveOperator): Remove redundant
15130         MemberLookup pn parent type.
15131         Optimize union call, we do not need a union if the types are the same.
15132         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
15133         type.
15134
15135         Specialize the use of MemberLookup everywhere, instead of using
15136         the default settings. 
15137
15138         (StackAlloc): Implement stackalloc keyword.
15139
15140         * cs-parser.jay: Add rule to parse stackalloc.
15141
15142         * driver.cs: Handle /h, /help, /?
15143
15144         * expression.cs (MakeByteBlob): Removed the hacks we had in place
15145         before we supported unsafe code.
15146
15147         * makefile: add --unsafe to the self compilation of mcs.
15148
15149 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
15150
15151         * expression.cs (PointerArithmetic): New class that is used to
15152         perform pointer arithmetic.
15153         (Binary.Resolve): Handle pointer arithmetic
15154         Handle pointer comparission.
15155         (ArrayPtr): Utility expression class that is used to take the
15156         address of an array.
15157
15158         (ElementAccess): Implement array access for pointers
15159
15160         * statement.cs (Fixed): Implement fixed statement for arrays, we
15161         are missing one more case before we are done.
15162
15163         * expression.cs (Indirection): Implement EmitAssign and set the
15164         ExprClass to Variable.  This allows pointer dereferences to be
15165         treated as variables, and to have values assigned to them.
15166
15167         * ecore.cs (Expression.StoreFromPtr): New utility function to
15168         store values dereferencing.
15169
15170 2002-02-20  Ravi Pratap  <ravi@ximian.com>
15171
15172         * expression.cs (Binary.ResolveOperator): Ensure that we are
15173         not trying to operate on a void type - this fixes the reported
15174         bug.
15175
15176         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
15177         the parent implementation is sealed.
15178
15179         * ../errors/cs0239.cs : Add.
15180
15181         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
15182
15183         * typemanager.cs (unverifiable_code_type): Corresponds to 
15184         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
15185         which have unsafe code in them.
15186
15187         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
15188         unsafe context.
15189
15190 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
15191
15192         * cs-tokenizer.cs: Add support for @"litreal strings"
15193
15194         Make tokenizer accept pre-processor directives
15195         on any column (remove the old C-like limitation). 
15196
15197         * rootcontext.cs (EmitCode): Emit any global attributes.
15198         (AddGlobalAttributes): Used to keep track of assembly attributes. 
15199
15200         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
15201
15202         * cs-parser.jay: Add support for global attributes.  
15203
15204 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
15205
15206         * expression.cs (Indirection): New helper class.  Unary will
15207         create Indirection classes to be able to implement the
15208         IMemoryLocation interface on it.
15209
15210 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
15211
15212         * cs-parser.jay (fixed_statement): reference the right statement.
15213
15214         * statement.cs (Fixed.Emit): Finish implementing the fixed
15215         statement for the &x case.
15216
15217 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
15218
15219         * class.cs (Property.Define, Method.Define): Remove newslot when
15220         `implementing'.  
15221
15222         * modifiers.cs: My use of NewSlot when `Abstract' was set was
15223         wrong.  NewSlot should only be used if the `new' keyword is present.
15224
15225         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
15226         locating our system dir.  Sorry about this.
15227
15228 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
15229
15230         * driver.cs (GetSystemDir): Compute correctly the location of our
15231         system assemblies.  I was using the compiler directory instead of
15232         the library directory.
15233
15234 2002-02-13  Ravi Pratap  <ravi@ximian.com>
15235
15236         * expression.cs (BetterFunction): Put back in what Miguel commented out
15237         since it is the correct fix. The problem is elsewhere ;-)
15238
15239         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
15240         parameters of the parms method are themselves compatible or not !
15241
15242         (StandardConversionExists): Fix very dangerous bug where we were forgetting
15243         to check that a class implements an interface before saying that an implicit
15244         conversion was allowed. Use ImplementsInterface to do the checking.
15245
15246 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
15247
15248         * class.cs (Method.Define): Track whether we are an explicit
15249         implementation or not.  And only call DefineMethodOverride if we
15250         are an explicit implementation.
15251
15252         (Property.DefineMethod): Ditto.
15253
15254 2002-02-11  Ravi Pratap  <ravi@ximian.com>
15255
15256         * expression.cs (BetterFunction): Catch hideous bug which was
15257          preventing us from detecting ambiguous calls due to implicit casts i.e
15258         cs0121.
15259
15260 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
15261
15262         * support.cs (Pair): Remove un-needed method.  I figured why I was
15263         getting the error in cs-parser.jay, the variable in a foreach loop
15264         is readonly, and the compiler does not really treat this as a variable.
15265
15266         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
15267         instead of EQUALS in grammar.  
15268
15269         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
15270
15271         * expression.cs (Unary.DoResolve): Check whether the argument is
15272         managed or not.
15273
15274 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
15275
15276         * support.cs: Api for Pair to set a value.  Despite the fact that
15277         the variables are public the MS C# compiler refuses to compile
15278         code that accesses the field if the variable is part of a foreach
15279         statement. 
15280
15281         * statement.cs (Fixed): Begin implementation of the fixed
15282         statement.
15283
15284         (Block.AddVariable): Return the VariableInfo on success and null
15285         on failure instead of true/false. 
15286
15287         * cs-parser.jay (foreach): Catch errors on variables already
15288         defined (we were ignoring this value before) and properly unwind
15289         the block hierarchy
15290
15291         (fixed_statement): grammar for the fixed statement.
15292
15293 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
15294
15295         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
15296         pointer types to be incretemented.
15297
15298         (SizeOf): Implement.
15299
15300         * cs-parser.jay (pointer_member_access): Implement
15301         expr->IDENTIFIER production.
15302
15303         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
15304         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
15305         on safe contexts.
15306
15307         (Unary): Implement indirection.
15308
15309         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
15310         use in non-unsafe context).
15311
15312         (SimpleName.DoResolve): Check for pointers in field access on safe
15313         contexts. 
15314
15315         (Expression.LoadFromPtr): Factor the load-indirect code in this
15316         function.  This was duplicated in UnboxCast and ParameterReference
15317
15318 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
15319
15320         * expression.cs (ComposedCast): report an error if a pointer cast
15321         is used in a safe region.
15322
15323         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
15324         pointer type casts in unsafe context.
15325
15326         * codegen.cs (EmitContext): Set up IsUnsafe.
15327
15328         * cs-parser.jay (non_expression_type): Add productions for pointer
15329         casts. 
15330
15331         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
15332         code.  We should not use force into static mode if the method is
15333         not virtual.  Fixes bug in MIS
15334
15335         * statement.cs (Do.Emit, While.Emit, For.Emit,
15336         Statement.EmitBoolExpression): Add support to Do and While to
15337         propagate infinite loop as `I do return' semantics.
15338
15339         Improve the For case to also test for boolean constants.
15340
15341         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
15342         to the list of attributes we can add.
15343
15344         Remove `EmitContext' argument.
15345
15346         * class.cs (Method.Define): Apply parameter attributes.
15347         (Constructor.Define): Apply parameter attributes.
15348         (MethodCore.LabelParameters): Move here the core of labeling
15349         parameters. 
15350
15351         * support.cs (ReflectionParameters.ParameterModifier,
15352         InternalParameters.ParameterModifier): Use IsByRef on the type and
15353         only return the OUT bit for these parameters instead of in/out/ref
15354         flags.
15355
15356         This is because I miss-understood things.  The ParameterInfo.IsIn
15357         and IsOut represent whether the parameter has the [In] and [Out]
15358         attributes set.  
15359
15360 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
15361
15362         * ecore.cs (FieldExpr.Emit): Release temporaries.
15363
15364         * assign.cs (LocalTemporary.Release): new function.
15365
15366         * codegen.cs (EmitContext.GetTemporaryStorage,
15367         EmitContext.FreeTemporaryStorage): Rework the way we deal with
15368         temporary storage.  Now we can "put back" localbuilders when we
15369         are done with them
15370
15371 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
15372
15373         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
15374         need to make a copy of the variable to generate verifiable code.
15375
15376 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
15377
15378         * driver.cs: Compute dynamically the system directory.
15379
15380         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
15381         Slower, but more generally useful.  Used by the abstract
15382         registering implementation. 
15383
15384         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
15385         the rules for the special rule on Type/instances.  First check if
15386         we have the same name, and if so, try that special static path
15387         rather than the instance path.
15388
15389 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
15390
15391         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
15392         for, while and if.
15393
15394         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
15395         Enum, ValueType, Delegate or Array for non-corlib compiles.
15396
15397         * cs-tokenizer.cs: Catch long identifiers (645)
15398
15399         * typemanager.cs (IndexerPropetyName): Ravi never tested this
15400         piece of code.
15401
15402         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
15403         fix, we were returning too early, so we were not registering
15404         pending methods from abstract classes.
15405
15406         Do not register pending methods if the class is abstract.
15407
15408         * expression.cs (Conditional.DoResolve): Report circular implicit
15409         conversions when we neecd to compute it for conditional
15410         expressions. 
15411
15412         (Is.DoResolve): If the expression is always of the provided type,
15413         flag warning 183.  If the expression can not ever be of the
15414         provided type flag warning 184.
15415
15416         * class.cs: Catch 169 as well.
15417
15418         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
15419         read. 
15420
15421 2002-01-18  Nick Drochak  <ndrochak@gol.com>
15422
15423         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
15424
15425 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
15426
15427         * interface.cs: (PopulateMethod): Check for pointers being defined
15428         only if the unsafe context is active.
15429         (PopulateProperty): ditto.
15430         (PopulateIndexer): ditto.
15431
15432         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
15433         specified.  If pointers are present, make sure that they are
15434         present in an unsafe context.
15435         (Constructor, Constructor.Define): ditto.
15436         (Field, Field.Define): ditto.
15437         (Property, Property.Define): ditto.
15438         (Event, Event.Define): ditto.
15439
15440         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
15441         hashtable if there are classes or structs defined.
15442
15443         * expression.cs (LocalVariableReference.DoResolve): Simplify this
15444         code, as the constant resolution moved.
15445
15446         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
15447         the metadata, so we can flag error 133. 
15448
15449         * decl.cs (MemberCore.UnsafeOK): New function to test that a
15450         pointer is being declared in an unsafe context.
15451
15452 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
15453
15454         * modifiers.cs (Modifiers.Check): Require a Location argument.
15455         Report error 227 for Unsafe use.
15456
15457         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
15458
15459         * statement.cs (For.Emit): If the test is null, then report that
15460         we do `return', as we wont reach anything afterwards.
15461
15462         (Switch.SwitchGoverningType): Track the expression that matched
15463         the conversion.
15464
15465         * driver.cs: Allow negative numbers as an error code to flag.
15466
15467         * cs-parser.jay: Handle 1551.
15468
15469         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
15470
15471 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
15472
15473         * cs-parser.jay: Report 1518 (type declaration can only contain
15474         class, struct, interface, enum or delegate)
15475
15476         (switch_label): Report 1523 (keywords `case' or `default' must
15477         preced code)
15478
15479         (opt_switch_sections): Report 1522 (empty switch)
15480
15481         * driver.cs: Report 1515 (response file specified multiple times)
15482         Report 1516 (Source file specified multiple times).
15483
15484         * expression.cs (Argument.Resolve): Signal 1510
15485
15486         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
15487         access not allowed in static code)
15488
15489 2002-01-11  Ravi Pratap  <ravi@ximian.com>
15490
15491         * typemanager.cs (IsPointerType): Utility method which we are going
15492         to need a lot.
15493
15494         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
15495         the object type, so we take care of that.
15496
15497         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
15498
15499         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
15500         added to non-params parameters :-)
15501
15502         * typemanager.cs (CSharpName): Include 'void' type too. 
15503
15504         (void_ptr_type): Include in the set of core types.
15505
15506         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
15507         duplicating code.
15508
15509         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
15510         an unsafe context.
15511
15512         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
15513         completely forgotten about it.
15514
15515 2002-01-10  Ravi Pratap  <ravi@ximian.com>
15516
15517         * cs-parser.jay (pointer_type): Add. This begins our implementation
15518         of parsing rules for unsafe code.
15519
15520         (unsafe_statement): Implement.
15521
15522         (embedded_statement): Modify to include the above.
15523
15524         * statement.cs (Unsafe): Implement new class for unsafe blocks.
15525
15526         * codegen.cs (EmitContext.InUnsafe): Add. This determines
15527         if the current context is an unsafe one.
15528
15529         * cs-parser.jay (local_variable_pointer_type): Since local variable types
15530         are handled differently, we need separate rules for them.
15531
15532         (local_variable_declaration): Update to use local_variable_pointer_type
15533         to allow variable declarations of unmanaged pointer types.
15534
15535         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
15536         in unsafe contexts.
15537
15538         * ../errors/cs0214.cs : Add.
15539
15540 2002-01-16  Nick Drochak  <ndrochak@gol.com>
15541
15542         * makefile: remove 'response' file when cleaning.
15543
15544 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
15545
15546         * cs-parser.jay: Report 1524.
15547
15548 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
15549
15550         * typemanager.cs (RegisterMethod): drop checking if we have
15551         registered this from here
15552
15553 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
15554
15555         * class.cs (Method.EmitDestructor): Implement calling our base
15556         destructor. 
15557
15558         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
15559         value of InFinally.
15560
15561         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
15562         this routine and will wrap the call in a try/catch block.  Deal
15563         with the case.
15564
15565 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
15566
15567         * ecore.cs (Expression.MemberLookup): instead of taking a
15568         parameter `same_type' that was used to tell whether we could
15569         access private members we compute our containing type from the
15570         EmitContext.
15571
15572         (FieldExpr): Added partial support for volatile fields.  This does
15573         not work for volatile fields exposed from assemblies, as I can not
15574         figure out how to extract the modreq from it.
15575
15576         Updated all the source files to use this.
15577
15578         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
15579         because it is referenced by MemberLookup very often. 
15580
15581 2002-01-09  Ravi Pratap  <ravi@ximian.com>
15582
15583         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
15584         TypeBuilder.GetCustomAttributes to retrieve what we need.
15585
15586         Get rid of redundant default_member_attr_type as this is the same as
15587         default_member_type which already exists.
15588
15589         * interface.cs, attribute.cs : Update accordingly.
15590
15591 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
15592
15593         * typemanager.cs: Enable IndexerPropertyName again.  It does not
15594         work for TYpeBuilders though.  Ravi, can you please fix this?
15595
15596         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
15597
15598         * expression.cs (Argument.Emit): Handle the case of ref objects
15599         being passed to ref functions;  
15600
15601         (ParameterReference.EmitLoad): Loads the content of the pointer
15602         without dereferencing.
15603
15604 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
15605
15606         * cs-tokenizer.cs: Implemented the pre-processing expressions.
15607
15608 2002-01-08  Ravi Pratap  <ravi@ximian.com>
15609
15610         * class.cs (Indexer.DefineMethod): Incorporate the interface
15611         type in the name of the method if we are doing explicit interface
15612         implementation.
15613
15614         * expression.cs (ConversionExists): Remove as it is completely obsolete.
15615
15616         (BetterConversion): Fix extremely trivial bug where we were referring to
15617         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
15618         again !
15619
15620         * ../errors/bug16.cs : Add although we have fixed it.
15621
15622 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
15623
15624         * expression.cs (BaseIndexer): Begin implementation.
15625
15626         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
15627
15628         * cs-parser.jay (indexer_declarator): Use qualified_identifier
15629         production directly to remove a shift/reduce, and implement
15630         explicit interface implementation.
15631
15632         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
15633         after a floating point suffix.
15634
15635         * expression.cs (DoNumericPromotions): Improved the conversion for
15636         uint/uint.  If we have a constant, we avoid doing a typecast to a
15637         larger type.
15638
15639         * class.cs (Indexer): Implement explicit interface implementation
15640         for indexers.
15641
15642 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
15643
15644         * class.cs: make the default instance constructor public and hidebysig.
15645
15646 2001-01-03  Ravi Pratap  <ravi@ximian.com>
15647
15648         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
15649         so we can call it from elsewhere.
15650
15651         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
15652         we emit it internally if the class has a defined indexer; otherwise the user
15653         emits it by decorating the class definition with the DefaultMemberAttribute.
15654
15655         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
15656         attribute is not used on a type which defines an indexer.
15657
15658         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
15659         character when we skip whitespace.
15660
15661         * ../errors/cs0646.cs : Add.
15662
15663 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
15664
15665         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
15666         again. 
15667
15668         * makefile: Add practical target `mcs3.exe' which builds the third
15669         generation compiler. 
15670
15671         * expression.cs (New): Fix structures constructor calling.
15672
15673         * class.cs (Property, Method, Indexer): Emit Final flag on the
15674         method if we are an interface implementation and we are not
15675         abstract. 
15676
15677         * ecore.cs (PropertyExpr): New public field `IsBase', tells
15678         whether this property is referencing a `base' method.
15679
15680         * expression.cs (Invocation.EmitCall): take an extra argument:
15681         is_base, this is used to determine whether the `call' or
15682         `callvirt' opcode should be used.
15683
15684
15685         * delegate.cs: update EmitCall.
15686
15687         * class.cs (Method.Define): Set NewSlot for the cases where we are
15688         not implementing an interface method.
15689
15690         (Property.Define): ditto.
15691
15692 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
15693
15694         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
15695         'r'.  Allows mcs to parse itself fully.
15696
15697 2002-01-02  Ravi Pratap  <ravi@ximian.com>
15698
15699         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
15700         of the number of initializers that require the InitializeArray method.
15701
15702         (CheckIndices): Store the Expression in all cases - not the plain value. Also
15703         update the above field where necessary.
15704
15705         (MakeByteBlob): Update accordingly.
15706
15707         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
15708         greater than 2.
15709
15710         (EmitDynamicInitializers): Update in accordance with the new optimization.
15711
15712         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
15713         same OpCode applies.
15714
15715         * cs-parser.jay : Fix some glaring errors I introduced.
15716
15717 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
15718
15719         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
15720         so that we can check for name clashes there too.
15721
15722         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
15723         for interface indexers.
15724
15725         * interfaces.cs (Define): Emit the default member attribute.
15726
15727         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
15728         variable was being referred to while setting the value ;-)
15729
15730 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
15731
15732         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
15733         byte-by-byte information when we know the data is zero.
15734
15735         Make the block always a multiple of 4, because
15736         DefineInitializedData has a bug.
15737
15738         * assign.cs: Fix, we should assign from the temporary, not from
15739         the source. 
15740
15741         * expression.cs (MakeByteBlob): Fix my incorrect code.
15742
15743 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
15744
15745         * typemanager.cs (EnumToUnderlying): This function is used to get
15746         the underlying type from an enumeration, because it does not
15747         always work. 
15748
15749         * constant.cs: Use the I4_S form for values between -128 and 127.
15750
15751         * statement.cs (Block.LookupLabel): Looks up a label.
15752         (Block): Drop support for labeled blocks.
15753
15754         (LabeledStatement): New kind of statement that represents a label
15755         only.
15756
15757         (Goto): Finally implement this bad boy.
15758
15759         * cs-parser.jay: Update to reflect new mechanism to implement
15760         labels.
15761
15762 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
15763
15764         * codegen.cs (EmitContext.This): a codegen property that keeps the
15765         a single instance of this instead of creating many different this
15766         instances. 
15767
15768         * delegate.cs (Delegate.DoResolve): Update to use the property;
15769
15770         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
15771
15772         * expression.cs (BaseAccess.DoResolve): Ditto.
15773
15774 2001-12-29  Ravi Pratap  <ravi@ximian.com>
15775
15776         * typemanager.cs (methodimpl_attr_type): Add to hold the type
15777         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
15778
15779         (InitCoreTypes): Update accordingly.
15780
15781         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
15782         so we can quickly store the state.
15783
15784         (ApplyAttributes): Set the correct implementation flags
15785         for InternalCall methods.
15786
15787 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
15788
15789         * expression.cs (EmitCall): if a method is not virtual, then do
15790         not use callvirt on it.
15791
15792         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
15793         user defined stuff) requires the use of stobj, which takes an
15794         address on the stack instead of an array and an index.  So emit
15795         the Ldelema operation for it.
15796
15797         (EmitStoreOpcode): Use stobj for valuetypes.
15798
15799         (UnaryMutator.EmitCode): Use the right 1 value depending on
15800         whether we are dealing with int64/uint64, float or doubles.
15801
15802         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
15803         constructors that I implemented last night.
15804
15805         (Constructor.IsDefault): Fix to work properly for static
15806         constructors.
15807
15808         * cs-parser.jay (CheckDef): report method signature errors.
15809         Update error number 103 to be 132.
15810
15811         * decl.cs: New AdditionResult enumeration value: MethodExists.
15812         Although we do this check for methods later on in the semantic
15813         analysis, catching repeated default constructors is so easy that
15814         we catch these here. 
15815
15816         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
15817         promotions code.
15818
15819         (ParameterReference.EmitAssign, Emit): handle
15820         bools as bytes.
15821
15822         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
15823         (ArrayAccess.EmitStoreOpcode): ditto.
15824
15825         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
15826
15827         * expression.cs (MakeByteBlob): Complete all the missing types
15828         (uint, short, ushort, byte, sbyte)
15829
15830         * class.cs: Only init instance field initializers on instance
15831         constructors. 
15832
15833         Rename `constructors' to instance_constructors. 
15834
15835         (TypeContainer.AddConstructor): Only add constructors to the list
15836         if it is not static.
15837
15838         Make sure that we handle default_static_constructor independently
15839         everywhere where we handle instance_constructors
15840
15841 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
15842
15843         * class.cs: Do not lookup or create a base initializer for a
15844         static constructor.
15845
15846         (ConstructorInitializer.Resolve): use the proper type to lookup
15847         for constructors.
15848
15849         * cs-parser.jay: Report error 1585 (modifiers between type and name).
15850
15851         * enum.cs, interface.cs: Remove CloseType, this is taken care by
15852         in DeclSpace. 
15853
15854         * decl.cs: CloseType is now an virtual method, the default
15855         implementation just closes this type.
15856
15857 2001-12-28  Ravi Pratap  <ravi@ximian.com>
15858
15859         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
15860         to PreserveSig by default. Also emit HideBySig on such methods.
15861
15862         Basically, set the defaults to standard values.
15863
15864         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
15865         argument, if candidate is better, it can't be worse than the best !
15866
15867         (Invocation): Re-write bits to differentiate between methods being
15868         applicable in their expanded form and their normal form - for params
15869         methods of course.
15870
15871         Get rid of use_standard everywhere as only standard conversions are allowed
15872         in overload resolution. 
15873
15874         More spec conformance.
15875
15876 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
15877
15878         * driver.cs: Add --timestamp, to see where the compiler spends
15879         most of its time.
15880
15881         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
15882         `this' in static code.
15883
15884         (SimpleName.DoResolve): Implement in terms of a helper function
15885         that allows static-references to be passed upstream to
15886         MemberAccess.
15887
15888         (Expression.ResolveWithSimpleName): Resolve specially simple
15889         names when called by MemberAccess to implement the special
15890         semantics. 
15891
15892         (Expression.ImplicitReferenceConversion): Handle conversions from
15893         Null to reference types before others, as Null's type is
15894         System.Object. 
15895
15896         * expression.cs (Invocation.EmitCall): Handle the special case of
15897         calling methods declared on a reference type from a ValueType
15898         (Base classes System.Object and System.Enum)
15899
15900         (MemberAccess.Resolve): Only perform lookups on Enumerations if
15901         the left hand side is a TypeExpr, not on every enumeration. 
15902
15903         (Binary.Resolve): If types are reference types, then do a cast to
15904         object on operators != and == of both arguments.
15905
15906         * typemanager.cs (FindMembers): Extract instance and static
15907         members if requested.
15908
15909         * interface.cs (PopulateProperty): Use void_type instead of null
15910         as the return type for the setter method.
15911
15912         (PopulateIndexer): ditto.
15913
15914 2001-12-27  Ravi Pratap  <ravi@ximian.com>
15915
15916         * support.cs (ReflectionParameters): Fix minor bug where we
15917         were examining the wrong parameter for the ParamArray attribute.
15918
15919         Cope with requests for the type of the parameter at position
15920         greater than the params parameter's. We now return the element
15921         type of the params array as that makes more sense.
15922
15923         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
15924         accordingly as we no longer have to extract the element type
15925         ourselves.
15926
15927         (Invocation.OverloadResolve): Update.
15928
15929 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
15930
15931         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
15932         against IEnumerator, test whether the return value is a descendant
15933         of the IEnumerator interface.
15934
15935         * class.cs (Indexer.Define): Use an auxiliary method to implement
15936         the other bits of the method definition.  Begin support for
15937         explicit interface implementation.
15938
15939         (Property.DefineMethod): Use TypeManager.void_type instead of null
15940         for an empty return value.
15941
15942 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
15943
15944         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
15945         dealing with a FieldExpr which is composed of a FieldBuilder, in
15946         the code path we did extract the constant, but we should have
15947         obtained the underlying value to be able to cast it (otherwise we
15948         end up in an infinite loop, this is what Ravi was running into).
15949
15950         (ArrayCreation.UpdateIndices): Arrays might be empty.
15951
15952         (MemberAccess.ResolveMemberAccess): Add support for section
15953         14.5.4.1 that deals with the special case of E.I when E is a type
15954         and something else, that I can be a reference to a static member.
15955
15956         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
15957         handle a particular array type to create byte blobs, it is just
15958         something we dont generate byteblobs for.
15959
15960         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
15961         arguments. 
15962
15963         * location.cs (Push): remove the key from the hashtable that we
15964         are about to add.   This happens for empty files.
15965
15966         * driver.cs: Dispose files after we have parsed them.
15967
15968         (tokenize): new function that only runs the tokenizer on its
15969         input, for speed testing.
15970
15971 2001-12-26  Ravi Pratap  <ravi@ximian.com>
15972
15973         * class.cs (Event.Define): Define the private field only if there
15974         are no accessors defined.
15975
15976         * expression.cs (ResolveMemberAccess): If there is no associated
15977         field with the event, that means we have an event defined with its
15978         own accessors and we should flag error cs0070 since transforming
15979         ourselves into a field is not valid in that case.
15980
15981         * ecore.cs (SimpleName.DoResolve): Same as above.
15982
15983         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
15984         and charset to sane values.
15985
15986 2001-12-25  Ravi Pratap  <ravi@ximian.com>
15987
15988         * assign.cs (DoResolve): Perform check on events only if they 
15989         are being accessed outside the declaring type.
15990
15991         * cs-parser.jay (event_declarations): Update rules to correctly
15992         set the type of the implicit parameter etc.
15993
15994         (add_accessor, remove_accessor): Set current local parameters.
15995
15996         * expression.cs (Binary): For delegate addition and subtraction,
15997         cast the return value from the method into the appropriate delegate
15998         type.
15999
16000 2001-12-24  Ravi Pratap  <ravi@ximian.com>
16001
16002         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
16003         of these as the workaround is unnecessary.
16004
16005         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
16006         delegate data - none of that is needed at all.
16007
16008         Re-write bits to extract the instance expression and the delegate method
16009         correctly.
16010
16011         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
16012         on delegates too.
16013
16014         * attribute.cs (ApplyAttributes): New method to take care of common tasks
16015         of attaching attributes instead of duplicating code everywhere.
16016
16017         * everywhere : Update code to do attribute emission using the above method.
16018
16019 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
16020
16021         * expression.cs (IsParamsMethodApplicable): if there are not
16022         parameters, return immediately.
16023
16024         * ecore.cs: The 0 literal can be implicity converted to an enum
16025         type. 
16026
16027         (SimpleName.DoResolve): First lookup the type, then lookup the
16028         members. 
16029
16030         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
16031         want to get its address.  If the InstanceExpression is not
16032         addressable, store the result in a temporary variable, then get
16033         the address of it.
16034
16035         * codegen.cs: Only display 219 errors on warning level or above. 
16036
16037         * expression.cs (ArrayAccess): Make it implement the
16038         IMemoryLocation interface.
16039
16040         (Binary.DoResolve): handle the operator == (object a, object b)
16041         and operator != (object a, object b) without incurring into a
16042         BoxedCast (because 5 != o should never be performed).
16043
16044         Handle binary enumerator operators.
16045
16046         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
16047         value type, otherwise use Ldelem_ref.
16048
16049         Use precomputed names;
16050
16051         (AddressOf): Implement address of
16052
16053         * cs-parser.jay (labeled_statement): Fix recursive block
16054         addition by reworking the production.
16055
16056         * expression.cs (New.DoEmit): New has a special case:
16057                 
16058                  If we are dealing with a ValueType, we have a few
16059                  situations to deal with:
16060                 
16061                     * The target of New is a ValueType variable, that is
16062                       easy, we just pass this as the variable reference
16063                 
16064                     * The target of New is being passed as an argument,
16065                       to a boxing operation or a function that takes a
16066                       ValueType.
16067                 
16068                       In this case, we need to create a temporary variable
16069                       that is the argument of New.
16070
16071
16072 2001-12-23  Ravi Pratap  <ravi@ximian.com>
16073
16074         * rootcontext.cs (LookupType): Check that current_type is not null before
16075         going about looking at nested types.
16076
16077         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
16078         not implement the IAssignMethod interface any more.
16079
16080         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
16081         where we tranform them into FieldExprs if they are being resolved from within
16082         the declaring type.
16083
16084         * ecore.cs (SimpleName.DoResolve): Do the same here.
16085
16086         * assign.cs (DoResolve, Emit): Clean up code considerably. 
16087
16088         * ../errors/bug10.cs : Add.
16089
16090         * ../errors/cs0070.cs : Add.
16091
16092         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
16093
16094         * assign.cs : Get rid of EventIsLocal everywhere.
16095
16096 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
16097
16098         * ecore.cs (ConvertIntLiteral): finished the implementation.
16099
16100         * statement.cs (SwitchLabel): Convert the value we are using as a
16101         key before looking up the table.
16102
16103 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
16104
16105         * codegen.cs (EmitTopBlock): Require a Location argument now.
16106
16107         * cs-parser.jay (constructor_declarator): We need to setup
16108         current_local_parameters before we parse the
16109         opt_constructor_initializer, to allow the variables to be bound
16110         to the constructor arguments.
16111
16112         * rootcontext.cs (LookupType): First lookup nested classes in our
16113         class and our parents before we go looking outside our class.
16114
16115         * expression.cs (ConstantFold): Extract/debox the values at the
16116         beginnning. 
16117
16118         * rootcontext.cs (EmitCode): Resolve the constants first before we
16119         resolve the types.  This is not really needed, but it helps debugging.
16120
16121         * statement.cs: report location.
16122
16123         * cs-parser.jay: pass location to throw statement.
16124
16125         * driver.cs: Small bug fix.
16126
16127         * report.cs: Updated format to be 4-zero filled digits.
16128
16129 2001-12-22  Ravi Pratap  <ravi@ximian.com>
16130
16131         * expression.cs (CheckIndices): Fix minor bug where the wrong
16132         variable was being referred to ;-)
16133
16134         (DoEmit): Do not call EmitStaticInitializers when the 
16135         underlying type is System.Object.
16136
16137 2001-12-21  Ravi Pratap  <ravi@ximian.com>
16138
16139         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
16140         and do the usual workaround for SRE.
16141
16142         * class.cs (MyEventBuilder.EventType): New member to get at the type
16143         of the event, quickly.
16144
16145         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
16146
16147         * assign.cs (Assign.DoResolve): Handle the case when the target
16148         is an EventExpr and perform the necessary checks.
16149
16150         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
16151         interface.
16152
16153         (SimpleName.MemberStaticCheck): Include check for EventExpr.
16154
16155         (EventExpr): Set the type in the constructor itself since we 
16156         are meant to be born fully resolved.
16157
16158         (EventExpr.Define): Revert code I wrote earlier.
16159                 
16160         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
16161         instance expression is null. The instance expression is a This in that case
16162         or a null, depending on whether it is a static method or not.
16163
16164         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
16165         refers to more than one method.
16166
16167         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
16168         and accordingly flag errors.
16169
16170 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
16171
16172         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
16173
16174 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
16175
16176         * location.cs (ToString): Provide useful rutine.
16177
16178 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
16179
16180         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
16181         objects, return the actual integral boxed.
16182
16183         * statement.cs (SwitchLabel): define an ILLabel for each
16184         SwitchLabel. 
16185
16186         (Switch.CheckSwitch): If the value is a Literal, extract
16187         the underlying literal.
16188
16189         Also in the unused hashtable we had, add the SwitchLabel so we can
16190         quickly look this value up.
16191
16192         * constant.cs: Implement a bunch of new constants.  Rewrite
16193         Literal based on this.  Made changes everywhere to adapt to this.
16194
16195         * expression.cs (Expression.MakeByteBlob): Optimize routine by
16196         dereferencing array only once, and also copes with enumrations.
16197
16198         bytes are two bytes wide, not one.
16199
16200         (Cast): Perform constant conversions.
16201
16202         * ecore.cs (TryImplicitIntConversion): Return literals instead of
16203         wrappers to the literals here.
16204
16205         * expression.cs (DoNumericPromotions): long literals can converted
16206         to ulong implicity (this is taken care of elsewhere, but I was
16207         missing this spot).
16208
16209         * ecore.cs (Expression.Literalize): Make the return type Literal,
16210         to improve type checking.
16211
16212         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
16213
16214 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
16215
16216         * literal.cs: Revert code from ravi that checked the bounds.  The
16217         bounds are sane by the definition of the type itself. 
16218
16219         * typemanager.cs: Fix implementation of ImplementsInterface.  We
16220         need to actually look up in our parent hierarchy for interfaces
16221         implemented. 
16222
16223         * const.cs: Use the underlying type for enumerations
16224
16225         * delegate.cs: Compute the basename for the delegate creation,
16226         that should fix the delegate test case, and restore the correct
16227         Type Lookup semantics in rootcontext
16228
16229         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
16230         referencing a nested type with the Reflection API is using the "+"
16231         sign. 
16232
16233         * cs-parser.jay: Do not require EOF token at the end.
16234
16235 2001-12-20  Ravi Pratap  <ravi@ximian.com>
16236
16237         * rootcontext.cs (LookupType): Concatenate type names with
16238         a '.' instead of a '+' The test suite passes again.
16239
16240         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
16241         field of the enumeration.
16242
16243         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
16244         the case when the member is an EventExpr.
16245
16246         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
16247         static has an associated instance expression.
16248
16249         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
16250
16251         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
16252
16253         * class.cs (Event.Define): Register event and perform appropriate checks
16254         for error #111.
16255
16256         We define the Add and Remove methods even if the use provides none because
16257         in that case, we provide default implementations ourselves.
16258
16259         Define a private field of the type of the event. This is done by the CSC compiler
16260         and we should be doing it too ;-)
16261
16262         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
16263         More methods we use in code we generate.
16264
16265         (multicast_delegate_type, delegate_type): Two separate types since the distinction
16266         is important.
16267
16268         (InitCoreTypes): Update accordingly for the above.
16269
16270         * class.cs (Event.Emit): Generate code for default accessors that we provide
16271
16272         (EmitDefaultMethod): Do the job in the above.
16273
16274         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
16275         appropriate place.
16276
16277 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
16278
16279         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
16280         builders even if we were missing one.
16281
16282         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
16283         pass the Basename as our class name instead of the Name.  The
16284         basename will be correctly composed for us.
16285
16286         * parameter.cs (Paramters): Now takes a Location argument.
16287
16288         * decl.cs (DeclSpace.LookupType): Removed convenience function and
16289         make all the code call directly LookupType in RootContext and take
16290         this chance to pass the Location information everywhere.
16291
16292         * Everywhere: pass Location information.
16293
16294 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
16295
16296         * class.cs (Constructor.Define): Updated way of detecting the
16297         length of the parameters.
16298
16299         (TypeContainer.DefineType): Use basename as the type name for
16300         nested types.
16301
16302         (TypeContainer.Define): Do not recursively define types here, as
16303         definition is taken care in order by the RootContext.
16304
16305         * tree.cs: Keep track of namespaces in a per-file basis.
16306
16307         * parameter.cs (Parameter.ComputeSignature): Update to use
16308         DeclSpace. 
16309
16310         (Parameters.GetSignature): ditto.
16311
16312         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
16313         instead of a TypeContainer.
16314
16315         (Interface.SemanticAnalysis): Use `this' instead of our parent to
16316         resolve names.  Because we need to be resolve in our context, not
16317         our parents.
16318
16319         * driver.cs: Implement response files.
16320
16321         * class.cs (TypeContainer.DefineType): If we are defined, do not
16322         redefine ourselves.
16323
16324         (Event.Emit): Emit the code for add/remove handlers.
16325         (Event.Define): Save the MethodBuilders for add/remove.
16326
16327         * typemanager.cs: Use pair here too.
16328
16329         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
16330         DictionaryEntry requires the first argument to be non-null.  
16331
16332         (enum_declaration): Compute full name for registering the
16333         enumeration.
16334
16335         (delegate_declaration): Instead of using
16336         formal_parameter_list, use opt_formal_parameter_list as the list
16337         can be empty.
16338
16339         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
16340         (EventParsing): New property that controls whether `add' and
16341         `remove' are returned as tokens or identifiers (for events);
16342
16343 2001-12-19  Ravi Pratap  <ravi@ximian.com>
16344
16345         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
16346         use MyEventBuilder only and let it wrap the real builder for us.
16347
16348         (MyEventBuilder): Revamp constructor etc.
16349
16350         Implement all operations that we perform on EventBuilder in precisely the same
16351         way here too.
16352
16353         (FindMembers): Update to use the EventBuilder member.
16354
16355         (Event.Emit): Update accordingly.
16356
16357 2001-12-18  Ravi Pratap  <ravi@ximian.com>
16358
16359         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
16360         by calling the appropriate methods.
16361
16362         (GetCustomAttributes): Make stubs as they cannot possibly do anything
16363         useful.
16364
16365         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
16366
16367 2001-12-17  Ravi Pratap  <ravi@ximian.com>
16368
16369         * delegate.cs (Delegate.Populate): Check that the return type
16370         and various parameters types are indeed accessible.
16371
16372         * class.cs (Constructor.Define): Same here.
16373
16374         (Field.Define): Ditto.
16375
16376         (Event.Define): Ditto.
16377
16378         (Operator.Define): Check that the underlying Method defined itself
16379         correctly - so it's MethodBuilder should not be null.
16380
16381         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
16382         expression happens to be null.
16383
16384         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
16385         members but as of now we don't seem to be able to do anything really useful with it.
16386
16387         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
16388         not the EventBuilder.
16389
16390 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
16391
16392         * cs-tokenizer.cs: Add support for defines.
16393         Add support for #if, #elif, #else, #endif
16394
16395         (eval_var): evaluates a variable.
16396         (eval): stubbed for evaluating functions.
16397
16398         * cs-parser.jay: Pass the defines information
16399
16400         * driver.cs: Add --define command line option.
16401
16402         * decl.cs: Move MemberCore here.
16403
16404         Make it the base class for DeclSpace.  This allows us to catch and
16405         report 108 and 109 for everything now.
16406
16407         * class.cs (TypeContainer.Define): Extract all the members
16408         before populating and emit the warning 108 (new keyword required
16409         to override) instead of having each member implement this.
16410
16411         (MemberCore.Define): New abstract method, we will be using this in
16412         the warning reporting engine in Populate.
16413
16414         (Operator.Define): Adjust to new MemberCore protocol. 
16415
16416         * const.cs (Const): This does not derive from Expression, it is a
16417         temporary object we use to create fields, it is a MemberCore. 
16418
16419         * class.cs (Method.Define): Allow the entry point to be in a
16420         specific class.
16421
16422         * driver.cs: Rewrite the argument handler to clean it up a bit.
16423
16424         * rootcontext.cs: Made it just an auxiliary namespace feature by
16425         making everything static.
16426
16427         * driver.cs: Adapt code to use RootContext type name instead of
16428         instance variable.
16429
16430         * delegate.cs: Remove RootContext argument.
16431
16432         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
16433         argument. 
16434
16435         * class.cs (Event.Define): The lookup can fail.
16436
16437         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
16438
16439         * expression.cs: Resolve the this instance before invoking the code.
16440
16441 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
16442
16443         * cs-parser.jay: Add a production in element_access that allows
16444         the thing to become a "type" reference.  This way we can parse
16445         things like "(string [])" as a type.
16446
16447         Note that this still does not handle the more complex rules of
16448         casts. 
16449
16450
16451         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
16452
16453         * ecore.cs: (CopyNewMethods): new utility function used to
16454         assemble the list of methods from running FindMembers.
16455
16456         (MemberLookup): Rework FindMembers so that 
16457
16458 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
16459
16460         * class.cs (TypeContainer): Remove Delegates who fail to be
16461         defined.
16462
16463         * delegate.cs (Populate): Verify that we dont get null return
16464         values.   TODO: Check for AsAccessible.
16465
16466         * cs-parser.jay: Use basename to emit error 574 (destructor should
16467         have the same name as container class), not the full name.
16468
16469         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
16470         possible representation.  
16471
16472         Also implements integer type suffixes U and L.
16473
16474 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
16475
16476         * expression.cs (ArrayCreation.DoResolve): We need to do the
16477         argument resolution *always*.
16478
16479         * decl.cs: Make this hold the namespace.  Hold the root context as
16480         well.
16481         (LookupType): Move here.
16482
16483         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
16484
16485         * location.cs (Row, Name): Fixed the code, it was always returning
16486         references to the first file.
16487
16488         * interface.cs: Register properties defined through interfaces.
16489
16490         * driver.cs: Add support for globbing on the command line
16491
16492         * class.cs (Field): Make it derive from MemberCore as well.
16493         (Event): ditto.
16494
16495 2001-12-15  Ravi Pratap  <ravi@ximian.com>
16496
16497         * class.cs (Event::Define): Check that the type of the event is a delegate
16498         type else flag error #66.
16499
16500         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
16501         same.
16502
16503         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
16504         values of EntryPoint, CharSet etc etc.
16505
16506         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
16507
16508         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
16509         be null and we should ignore this. I am not sure if this is really clean. Apparently,
16510         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
16511         which needs this to do its work.
16512
16513         * ../errors/cs0066.cs : Add.
16514
16515 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
16516
16517         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
16518         helper functions.
16519
16520         * class.cs: (MethodSignature.MethodSignature): Removed hack that
16521         clears out the parameters field.
16522         (MemberSignatureCompare): Cleanup
16523
16524         (MemberCore): New base class used to share code between MethodCore
16525         and Property.
16526
16527         (RegisterRequiredImplementations) BindingFlags.Public requires
16528         either BindingFlags.Instace or Static.  Use instance here.
16529
16530         (Property): Refactored code to cope better with the full spec.
16531
16532         * parameter.cs (GetParameterInfo): Return an empty array instead
16533         of null on error.
16534
16535         * class.cs (Property): Abstract or extern properties have no bodies.
16536
16537         * parameter.cs (GetParameterInfo): return a zero-sized array.
16538
16539         * class.cs (TypeContainer.MethodModifiersValid): Move all the
16540         method modifier validation to the typecontainer so we can reuse
16541         this on properties.
16542
16543         (MethodCore.ParameterTypes): return an empty sized array of types.
16544
16545         (Property.Define): Test property modifier validity.
16546
16547         Add tests for sealed/override too.
16548
16549         (Method.Emit): abstract or extern methods have no bodies.
16550
16551 2001-12-14  Ravi Pratap  <ravi@ximian.com>
16552
16553         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
16554         thing.
16555
16556         (Method::Define, ::Emit): Modify accordingly.
16557
16558         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
16559
16560         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
16561
16562         * makefile: Pass in /unsafe.
16563
16564 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
16565
16566         * class.cs (MakeKey): Kill routine.
16567
16568         * class.cs (TypeContainer.Define): Correctly define explicit
16569         method implementations (they require the full interface name plus
16570         the method name).
16571
16572         * typemanager.cs: Deply the PtrHashtable here and stop using the
16573         lame keys.  Things work so much better.
16574
16575         This of course broke everyone who depended on `RegisterMethod' to
16576         do the `test for existance' test.  This has to be done elsewhere.
16577
16578         * support.cs (PtrHashtable): A hashtable that avoid comparing with
16579         the object stupid Equals method (because, that like fails all over
16580         the place).  We still do not use it.
16581
16582         * class.cs (TypeContainer.SetRequiredInterface,
16583         TypeContainer.RequireMethods): Killed these two routines and moved
16584         all the functionality to RegisterRequiredImplementations.
16585
16586         (TypeContainer.RegisterRequiredImplementations): This routine now
16587         registers all the implementations required in an array for the
16588         interfaces and abstract methods.  We use an array of structures
16589         which can be computed ahead of time to reduce memory usage and we
16590         also assume that lookups are cheap as most classes will not
16591         implement too many interfaces.
16592
16593         We also avoid creating too many MethodSignatures.
16594
16595         (TypeContainer.IsInterfaceMethod): Update and optionally does not
16596         clear the "pending" bit if we find that there are problems with
16597         the declaration.
16598
16599         (TypeContainer.VerifyPendingMethods): Update to report errors of
16600         methods that look like implementations but are not.
16601
16602         (TypeContainer.Define): Add support for explicit interface method
16603         implementation. 
16604
16605 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
16606
16607         * typemanager.cs: Keep track of the parameters here instead of
16608         being a feature of the TypeContainer.
16609
16610         * class.cs: Drop the registration of parameters here, as
16611         InterfaceMethods are also interface declarations.
16612
16613         * delegate.cs: Register methods with the TypeManager not only with
16614         the TypeContainer.  This code was buggy.
16615
16616         * interface.cs: Full registation here.
16617
16618 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
16619
16620         * expression.cs: Remove reducer for binary expressions, it can not
16621         be done this way.
16622
16623         * const.cs: Put here the code that used to go into constant.cs
16624
16625         * constant.cs: Put here the code for constants, this is a new base
16626         class for Literals.
16627
16628         * literal.cs: Make Literal derive from Constant.
16629
16630 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
16631
16632         * statement.cs (Return.Emit): Report error 157 if the user
16633         attempts to return from a finally block.
16634
16635         (Return.Emit): Instead of emitting a return, jump to the end of
16636         the function.
16637
16638         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
16639         LocalBuilder to store the result of the function.  ReturnLabel is
16640         the target where we jump.
16641
16642
16643 2001-12-09  Radek Doulik  <rodo@ximian.com>
16644
16645         * cs-parser.jay: remember alias in current namespace
16646
16647         * ecore.cs (SimpleName::DoResolve): use aliases for types or
16648         namespaces
16649
16650         * class.cs (LookupAlias): lookup alias in my_namespace
16651
16652         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
16653         aliases hashtable
16654         (LookupAlias): lookup alias in this and if needed in parent
16655         namespaces
16656
16657 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
16658
16659         * support.cs: 
16660
16661         * rootcontext.cs: (ModuleBuilder) Made static, first step into
16662         making things static.  I need this to avoid passing the
16663         TypeContainer when calling ParameterType.
16664
16665         * support.cs (InternalParameters.ParameterType): Remove ugly hack
16666         that did string manipulation to compute the type and then call
16667         GetType.  Use Parameter.ParameterType instead.
16668
16669         * cs-tokenizer.cs: Consume the suffix for floating values.
16670
16671         * expression.cs (ParameterReference): figure out whether this is a
16672         reference parameter or not.  Kill an extra variable by computing
16673         the arg_idx during emission.
16674
16675         * parameter.cs (Parameters.GetParameterInfo): New overloaded
16676         function that returns whether a parameter is an out/ref value or not.
16677
16678         (Parameter.ParameterType): The type of the parameter (base,
16679         without ref/out applied).
16680
16681         (Parameter.Resolve): Perform resolution here.
16682         (Parameter.ExternalType): The full type (with ref/out applied).
16683
16684         * statement.cs (Using.Emit, Using.EmitExpression): Implement
16685         support for expressions on the using statement.
16686
16687 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
16688
16689         * statement.cs (Using.EmitLocalVariableDecls): Split the
16690         localvariable handling of the using statement.
16691
16692         (Block.EmitMeta): Keep track of variable count across blocks.  We
16693         were reusing slots on separate branches of blocks.
16694
16695         (Try.Emit): Emit the general code block, we were not emitting it. 
16696
16697         Check the type of the declaration to be an IDisposable or
16698         something that can be implicity converted to it. 
16699
16700         Emit conversions if required.
16701
16702         * ecore.cs (EmptyExpression): New utility class.
16703         (Expression.ImplicitConversionExists): New utility function.
16704
16705 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
16706
16707         * statement.cs (Using): Implement.
16708
16709         * expression.cs (LocalVariableReference): Support read only variables.
16710
16711         * statement.cs: Remove the explicit emit for the Leave opcode.
16712         (VariableInfo): Add a readonly field.
16713
16714 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
16715
16716         * ecore.cs (ConvCast): new class used to encapsulate the various
16717         explicit integer conversions that works in both checked and
16718         unchecked contexts.
16719
16720         (Expression.ConvertNumericExplicit): Use new ConvCast class to
16721         properly generate the overflow opcodes.
16722
16723 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
16724
16725         * statement.cs: The correct type for the EmptyExpression is the
16726         element_type, not the variable type.  Ravi pointed this out.
16727
16728 2001-12-04  Ravi Pratap  <ravi@ximian.com>
16729
16730         * class.cs (Method::Define): Handle PInvoke methods specially
16731         by using DefinePInvokeMethod instead of the usual one.
16732
16733         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
16734         above to do the task of extracting information and defining the method.
16735
16736 2001-12-04  Ravi Pratap  <ravi@ximian.com>
16737
16738         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
16739         of the condition for string type.
16740
16741         (Emit): Move that here. 
16742
16743         (ArrayCreation::CheckIndices): Keep string literals in their expression
16744         form.
16745
16746         (EmitDynamicInitializers): Handle strings appropriately.
16747
16748 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
16749
16750         * codegen.cs (EmitContext): Replace multiple variables with a
16751         single pointer to the current Switch statement.
16752
16753         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
16754         EmitContext.
16755
16756 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
16757
16758         * statement.cs 
16759
16760         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
16761         default'.
16762
16763         (Foreach.Emit): Foreach on arrays was not setting
16764         up the loop variables (for break/continue).
16765
16766         (GotoCase): Semi-implented.
16767
16768 2001-12-03  Ravi Pratap  <ravi@ximian.com>
16769
16770         * attribute.cs (CheckAttribute): Handle system attributes by using
16771         Attribute.GetAttributes to examine information we need.
16772
16773         (GetValidPlaces): Same here.
16774
16775         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
16776
16777         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
16778
16779         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
16780
16781         (Method::Define): Set appropriate flags if we have a DllImport attribute.
16782
16783         (Method::Emit): Handle the case when we are a PInvoke method.
16784
16785 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
16786
16787         * expression.cs: Use ResolveWithSimpleName on compound names.
16788
16789 2001-12-02  Ravi Pratap  <ravi@ximian.com>
16790
16791         * constant.cs (EmitConstant): Make sure we resolve the associated expression
16792         before trying to reduce it.
16793
16794         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
16795
16796         * constant.cs (LookupConstantValue): Implement.
16797
16798         (EmitConstant): Use the above in emitting the constant.
16799
16800         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
16801         that are user-defined by doing a LookupConstantValue on them.
16802
16803         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
16804         too, like above.
16805
16806 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
16807
16808         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
16809
16810         (BaseAccess.DoResolve): Implement.
16811
16812         (MemberAccess.DoResolve): Split this routine into a
16813         ResolveMemberAccess routine that can be used independently
16814
16815 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
16816
16817         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
16818         As that share bits of the implementation.  Is returns a boolean,
16819         while As returns the Type that is being probed.
16820
16821 2001-12-01  Ravi Pratap  <ravi@ximian.com>
16822
16823         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
16824         instead of a Literal - much easier.
16825
16826         (EnumInTransit): Remove - utterly useless :-)
16827
16828         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
16829
16830         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
16831
16832         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
16833         chain when we have no associated expression.
16834
16835 2001-11-30  Ravi Pratap  <ravi@ximian.com>
16836
16837         * constant.cs (Define): Use Location while reporting the errror.
16838
16839         Also emit a warning when 'new' is used and there is no inherited
16840         member to hide.
16841
16842         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
16843         populated.
16844
16845         (LookupEnumValue): Implement to lookup an enum member's value and define it
16846         if necessary.
16847
16848         (Populate): Re-write accordingly to use the above routine.
16849
16850 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
16851
16852         * expression.cs (This): Fix prototype for DoResolveLValue to
16853         override the base class DoResolveLValue.
16854
16855         * cs-parser.cs: Report errors cs574 and cs575 (destructor
16856         declarations) 
16857
16858         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
16859         (we need to load the address of the field here).  This fixes
16860         test-22. 
16861
16862         (FieldExpr.DoResolveLValue): Call the DoResolve
16863         function to initialize the Instance expression.
16864
16865         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
16866         correctly the GetEnumerator operation on a value type.
16867
16868         * cs-parser.jay: Add more simple parsing error catches.
16869
16870         * statement.cs (Switch): Add support for string switches.
16871         Handle null specially.
16872
16873         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
16874
16875 2001-11-28  Ravi Pratap  <ravi@ximian.com>
16876
16877         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
16878
16879         (declare_local_constant): New helper function.
16880
16881         * statement.cs (AddConstant): Keep a separate record of constants
16882
16883         (IsConstant): Implement to determine if a variable is a constant.
16884
16885         (GetConstantExpression): Implement.
16886
16887         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
16888
16889         * statement.cs (IsVariableDefined): Re-write.
16890
16891 2001-11-27  Ravi Pratap  <ravi@ximian.com>
16892
16893         * class.cs (TypeContainer::FindMembers): Look for constants
16894         in the case when we are looking for MemberTypes.Field
16895
16896         * expression.cs (MemberAccess::DoResolve): Check that in the
16897         case we are a FieldExpr and a Literal, we are not being accessed
16898         by an instance reference.
16899
16900         * cs-parser.jay (local_constant_declaration): Implement.
16901
16902         (declaration_statement): Implement for constant declarations.
16903
16904 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
16905
16906         * statement.cs (Switch): Catch double defaults.
16907
16908         (Switch): More work on the switch() statement
16909         implementation.  It works for integral values now, need to finish
16910         string support.
16911
16912
16913 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
16914
16915         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
16916         integer literals into other integer literals.  To be used by
16917         switch. 
16918
16919 2001-11-24  Ravi Pratap  <ravi@ximian.com>
16920
16921         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
16922         some memory.
16923
16924         (EmitDynamicInitializers): Cope with the above since we extract data
16925         directly from ArrayData now.
16926
16927         (ExpectInitializers): Keep track of whether initializers are mandatory
16928         or not.
16929
16930         (Bounds): Make it a hashtable to prevent the same dimension being 
16931         recorded for every element in that dimension.
16932
16933         (EmitDynamicInitializers): Fix bug which prevented the Set array method
16934         from being found.
16935
16936         Also fix bug which was causing the indices to be emitted in the reverse
16937         order.
16938
16939 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
16940
16941         * expression.cs (ArrayCreation): Implement the bits that Ravi left
16942         unfinished.  They do not work, because the underlying code is
16943         sloppy.
16944
16945 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
16946
16947         * cs-parser.jay: Remove bogus fixme.
16948
16949         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
16950         on Switch statement.
16951
16952 2001-11-23  Ravi Pratap  <ravi@ximian.com>
16953
16954         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
16955         the same. 
16956
16957         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
16958         parameter. Apparently, any expression is allowed. 
16959
16960         (ValidateInitializers): Update accordingly.
16961
16962         (CheckIndices): Fix some tricky bugs thanks to recursion.
16963
16964         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
16965         I was being completely brain-dead.
16966
16967         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
16968         and re-write acordingly.
16969
16970         (DelegateInvocation): Re-write accordingly.
16971
16972         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
16973
16974         (MakeByteBlob): Handle types more correctly.
16975
16976         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
16977         initialization from expressions but it is incomplete because I am a complete
16978         Dodo :-|
16979
16980 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
16981
16982         * statement.cs (If.Emit): Fix a bug that generated incorrect code
16983         on If.  Basically, we have to return `true' (ie, we do return to
16984         our caller) only if both branches of the if return.
16985
16986         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
16987         short-circuit operators, handle them as short circuit operators. 
16988
16989         (Cast.DoResolve): Resolve type.
16990         (Cast.Cast): Take an expression as the target type.
16991
16992         * cs-parser.jay (cast_expression): Remove old hack that only
16993         allowed a limited set of types to be handled.  Now we take a
16994         unary_expression and we resolve to a type during semantic
16995         analysis.
16996
16997         Use the grammar productions from Rhys to handle casts (this is
16998         not complete like Rhys syntax yet, we fail to handle that corner
16999         case that C# has regarding (-x), but we will get there.
17000
17001 2001-11-22  Ravi Pratap  <ravi@ximian.com>
17002
17003         * class.cs (EmitFieldInitializer): Take care of the case when we have a
17004         field which is an array type.
17005
17006         * cs-parser.jay (declare_local_variables): Support array initialization too.
17007
17008         * typemanager.cs (MakeKey): Implement.
17009
17010         (everywhere): Use the above appropriately.
17011
17012         * cs-parser.jay (for_statement): Update for array initialization while
17013         declaring variables.
17014
17015         * ecore.cs : The error message was correct, it's the variable's names that
17016         were misleading ;-) Make the code more readable.
17017
17018         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
17019         the correct type etc.
17020
17021         (ConvertExplicit): Handle Enum types by examining the underlying type.
17022
17023 2001-11-21  Ravi Pratap  <ravi@ximian.com>
17024
17025         * parameter.cs (GetCallingConvention): Always return
17026         CallingConventions.Standard for now.
17027
17028 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
17029
17030         * expression.cs (Binary.ResolveOperator): Update the values of `l'
17031         and `r' after calling DoNumericPromotions.
17032
17033         * ecore.cs: Fix error message (the types were in the wrong order).
17034
17035         * statement.cs (Foreach.ProbeCollectionType): Need to pass
17036         BindingFlags.Instance as well 
17037
17038         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
17039         implicit int literal conversion in an empty cast so that we
17040         propagate the right type upstream.
17041
17042         (UnboxCast): new class used to unbox value types.
17043         (Expression.ConvertExplicit): Add explicit type conversions done
17044         by unboxing.
17045
17046         (Expression.ImplicitNumericConversion): Oops, forgot to test for
17047         the target type before applying the implicit LongLiterals to ULong
17048         literal cast.
17049
17050 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
17051
17052         * cs-parser.jay (for_statement): Reworked the way For works: now
17053         we declare manually any variables that are introduced in
17054         for_initializer to solve the problem of having out-of-band code
17055         emition (that is what got for broken).
17056
17057         (declaration_statement): Perform the actual variable declaration
17058         that used to be done in local_variable_declaration here.
17059
17060         (local_variable_declaration): Do not declare anything, just pass
17061         the information on a DictionaryEntry
17062
17063 2001-11-20  Ravi Pratap  <ravi@ximian.com>
17064
17065         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
17066         re-write of the logic to now make it recursive.
17067
17068         (UpdateIndices): Re-write accordingly.
17069
17070         Store element data in a separate ArrayData list in the above methods.
17071
17072         (MakeByteBlob): Implement to dump the array data into a byte array.
17073
17074 2001-11-19  Ravi Pratap  <ravi@ximian.com>
17075
17076         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
17077         into CheckIndices.
17078
17079         * constant.cs (Define): Implement.
17080
17081         (EmitConstant): Re-write fully.
17082
17083         Pass in location info.
17084
17085         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
17086         respectively.
17087
17088         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
17089         DictionaryEntry since we need location info too.
17090
17091         (constant_declaration): Update accordingly.
17092
17093         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
17094         code into another method : UpdateIndices.
17095
17096 2001-11-18  Ravi Pratap  <ravi@ximian.com>
17097
17098         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
17099         some type checking etc.
17100
17101 2001-11-17  Ravi Pratap  <ravi@ximian.com>
17102
17103         * expression.cs (ArrayCreation::ValidateInitializers): Implement
17104         bits to provide dimension info if the user skips doing that.
17105
17106         Update second constructor to store the rank correctly.
17107
17108 2001-11-16  Ravi Pratap  <ravi@ximian.com>
17109
17110         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
17111         and try to implement.
17112
17113         * ../errors/cs0150.cs : Add.
17114
17115         * ../errors/cs0178.cs : Add.
17116
17117 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
17118
17119         * statement.cs: Implement foreach on multi-dimensional arrays. 
17120
17121         * parameter.cs (Parameters.GetParameterByName): Also lookup the
17122         name of the params argument.
17123
17124         * expression.cs: Use EmitStoreOpcode to get the right opcode while
17125         initializing the array.
17126
17127         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
17128         we can use this elsewhere.
17129
17130         * statement.cs: Finish implementation of foreach for single
17131         dimension arrays.
17132
17133         * cs-parser.jay: Use an out-of-band stack to pass information
17134         around, I wonder why I need this.
17135
17136         foreach_block: Make the new foreach_block the current_block.
17137
17138         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
17139         function used to return a static Parameters structure.  Used for
17140         empty parameters, as those are created very frequently.
17141
17142         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
17143
17144 2001-11-15  Ravi Pratap  <ravi@ximian.com>
17145
17146         * interface.cs : Default modifier is private, not public. The
17147         make verify test passes again.
17148
17149 2001-11-15  Ravi Pratap  <ravi@ximian.com>
17150
17151         * support.cs (ReflectionParameters): Fix logic to determine
17152         whether the last parameter is a params one. Test 9 passes again.
17153
17154         * delegate.cs (Populate): Register the builders we define with
17155         RegisterParameterForBuilder. Test 19 passes again.
17156
17157         * cs-parser.jay (property_declaration): Reference $6 instead
17158         of $$ to get at the location.
17159
17160         (indexer_declaration): Similar stuff.
17161
17162         (attribute): Ditto.
17163
17164         * class.cs (Property): Register parameters for the Get and Set methods
17165         if they exist. Test 23 passes again.
17166
17167         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
17168         call to EmitArguments as we are sure there aren't any params arguments. 
17169         Test 32 passes again.
17170
17171         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
17172         IndexOutOfRangeException. 
17173
17174         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
17175         Test 33 now passes again.
17176
17177 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
17178
17179         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
17180         broke a bunch of things.  Will have to come up with a better way
17181         of tracking locations.
17182
17183         * statement.cs: Implemented foreach for single dimension arrays.
17184
17185 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
17186
17187         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
17188         an error.  This removes the lookup from the critical path.
17189
17190         * cs-parser.jay: Removed use of temporary_loc, which is completely
17191         broken. 
17192
17193 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
17194
17195         * support.cs (ReflectionParameters.ParameterModifier): Report
17196         whether the argument is a PARAMS argument or not.
17197
17198         * class.cs: Set the attribute `ParamArrayAttribute' on the
17199         parameter argument.
17200
17201         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
17202         and cons_param_array_attribute (ConstructorInfo for
17203         ParamArrayAttribute)., 
17204
17205         * codegen.cs: Emit the return using the `Return' statement, that
17206         way we can report the error correctly for missing return values. 
17207
17208         * class.cs (Method.Emit): Clean up.
17209
17210         * expression.cs (Argument.Resolve): Take another argument: the
17211         location where this argument is used.  Notice that this is not
17212         part of the "Argument" class as to reduce the size of the
17213         structure (we know the approximate location anyways).
17214
17215         Test if the argument is a variable-reference, if not, then
17216         complain with a 206.
17217
17218         (Argument.Emit): Emit addresses of variables.
17219
17220         (Argument.FullDesc): Simplify.
17221
17222         (Invocation.DoResolve): Update for Argument.Resolve.
17223
17224         (ElementAccess.DoResolve): ditto.
17225
17226         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
17227         method should be virtual, as this method is always virtual.
17228
17229         (NewDelegate.DoResolve): Update for Argument.Resolve.
17230
17231         * class.cs (ConstructorInitializer.DoResolve): ditto.
17232
17233         * attribute.cs (Attribute.Resolve): ditto.
17234
17235 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
17236
17237         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
17238
17239         * expression.cs (ParameterReference): Drop IStackStorage and implement
17240         IAssignMethod instead. 
17241
17242         (LocalVariableReference): ditto.
17243
17244         * ecore.cs (FieldExpr): Drop IStackStorage and implement
17245         IAssignMethod instead. 
17246
17247 2001-11-13  Miguel de Icaza <miguel@ximian.com>
17248
17249         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
17250         enumerations that are used in heavily used structures derive from
17251         byte in a laughable and pathetic attempt to reduce memory usage.
17252         This is the kind of pre-optimzations that you should not do at
17253         home without adult supervision.
17254
17255         * expression.cs (UnaryMutator): New class, used to handle ++ and
17256         -- separatedly from the other unary operators.  Cleans up the
17257         code, and kills the ExpressionStatement dependency in Unary.
17258
17259         (Unary): Removed `method' and `Arguments' from this class, making
17260         it smaller, and moving it all to SimpleCall, so I can reuse this
17261         code in other locations and avoid creating a lot of transient data
17262         strucutres when not required.
17263
17264         * cs-parser.jay: Adjust for new changes.
17265
17266 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
17267
17268         * enum.cs (Enum.Populate): If there is a failure during
17269         definition, return
17270
17271         * cs-parser.jay (opt_enum_base): we used to catch type errors
17272         here, but this is really incorrect.  The type error should be
17273         catched during semantic analysis.
17274
17275 2001-12-11  Ravi Pratap  <ravi@ximian.com>
17276
17277         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
17278         current_local_parameters as expected since I, in my stupidity, had forgotten
17279         to do this :-)
17280
17281         * attribute.cs (GetValidPlaces): Fix stupid bug.
17282
17283         * class.cs (Method::Emit): Perform check on applicability of attributes.
17284
17285         (Constructor::Emit): Ditto.
17286
17287         (Field::Emit): Ditto.
17288
17289         (Field.Location): Store location information.
17290
17291         (Property, Event, Indexer, Operator): Ditto.
17292
17293         * cs-parser.jay (field_declaration): Pass in location for each field.
17294
17295         * ../errors/cs0592.cs : Add.
17296
17297 2001-11-12  Ravi Pratap  <ravi@ximian.com>
17298
17299         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
17300
17301         (InitCoreTypes): Update accordingly.
17302
17303         (RegisterAttrType, LookupAttr): Implement.
17304
17305         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
17306         info about the same.
17307
17308         (Resolve): Update to populate the above as necessary.
17309
17310         (Error592): Helper.
17311
17312         (GetValidPlaces): Helper to the above.
17313
17314         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
17315
17316         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
17317
17318 2001-11-12  Ravi Pratap  <ravi@ximian.com>
17319
17320         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
17321
17322         * ../errors/cs0617.cs : Add.
17323
17324 2001-11-11  Ravi Pratap  <ravi@ximian.com>
17325
17326         * enum.cs (Emit): Rename to Populate to be more consistent with what
17327         we expect it to do and when exactly it is called.
17328
17329         * class.cs, rootcontext.cs : Update accordingly.
17330
17331         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
17332         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
17333
17334         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
17335
17336         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
17337         of a fieldinfo using the above, when dealing with a FieldBuilder.
17338
17339 2001-11-10  Ravi Pratap  <ravi@ximian.com>
17340
17341         * ../errors/cs0031.cs : Add.
17342
17343         * ../errors/cs1008.cs : Add.
17344
17345         * ../errrors/cs0543.cs : Add.
17346
17347         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
17348         enum type.
17349
17350         (FindMembers): Implement.
17351
17352         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
17353         enums and delegates too.
17354
17355         (enum_types): Rename to builder_to_enum.
17356
17357         (delegate_types): Rename to builder_to_delegate.
17358
17359         * delegate.cs (FindMembers): Implement.
17360
17361 2001-11-09  Ravi Pratap  <ravi@ximian.com>
17362
17363         * typemanager.cs (IsEnumType): Implement.
17364
17365         * enum.cs (Emit): Re-write parts to account for the underlying type
17366         better and perform checking etc.
17367
17368         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
17369         of the underlying type.
17370
17371         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
17372         value
17373
17374         * enum.cs (error31): Helper to report error #31.
17375
17376         * cs-parser.jay (enum_declaration): Store location of each member too.
17377
17378         * enum.cs (member_to_location): New hashtable. 
17379
17380         (AddEnumMember): Update location hashtable.
17381
17382         (Emit): Use the location of each member while reporting errors.
17383
17384 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
17385
17386         * cs-parser.jay: A for_initializer if is a
17387         local_variable_declaration really ammount to have an implicit
17388         block with the variable declaration and no initializer for for.
17389
17390         * statement.cs (For.Emit): Cope with null initializers.
17391
17392         This fixes the infinite loop on for initializers.
17393
17394 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
17395
17396         * enum.cs: More cleanup.
17397
17398         * ecore.cs: Remove dead code.
17399
17400         * class.cs (Property.Emit): More simplification.
17401         (Event.Emit): ditto.
17402
17403         Reworked to have less levels of indentation.
17404
17405 2001-11-08  Ravi Pratap  <ravi@ximian.com>
17406
17407         * class.cs (Property): Emit attributes.
17408
17409         (Field): Ditto.
17410
17411         (Event): Ditto.
17412
17413         (Indexer): Ditto.
17414
17415         (Operator): Ditto.
17416
17417         * enum.cs (Emit): Ditto.
17418
17419         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
17420         Enums too.
17421
17422         * class.cs (Field, Event, etc.): Move attribute generation into the
17423         Emit method everywhere.
17424
17425         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
17426         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
17427         as we had no way of defining nested enums !
17428
17429         * rootcontext.cs : Adjust code accordingly.
17430
17431         * typemanager.cs (AddEnumType): To keep track of enum types separately.
17432
17433 2001-11-07  Ravi Pratap  <ravi@ximian.com>
17434
17435         * expression.cs (EvalConstantExpression): Move into ecore.cs
17436
17437         * enum.cs (Enum): Rename some members and make them public and readonly
17438         according to our convention.
17439
17440         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
17441         nothing else.
17442
17443         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
17444
17445         (Enum::Emit): Write a simple version for now which doesn't try to compute
17446         expressions. I shall modify this to be more robust in just a while.
17447
17448         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
17449
17450         (TypeContainer::CloseType): Create the Enum types too.
17451
17452         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
17453
17454         * expression.cs (EvalConstantExpression): Get rid of completely.
17455
17456         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
17457         user-defined values and other cases.
17458
17459         (IsValidEnumLiteral): Helper function.
17460
17461         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
17462         out there in the case we had a literal FieldExpr.
17463
17464         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
17465
17466         (Literalize): Revamp a bit to take two arguments.
17467
17468         (EnumLiteral): New class which derives from Literal to wrap enum literals.
17469
17470 2001-11-06  Ravi Pratap  <ravi@ximian.com>
17471
17472         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
17473
17474         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
17475
17476         (Resolve): Use the above to ensure we have proper initializers.
17477
17478 2001-11-05  Ravi Pratap  <ravi@ximian.com>
17479
17480         * expression.cs (Expression::EvalConstantExpression): New method to 
17481         evaluate constant expressions.
17482
17483         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
17484
17485 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
17486
17487         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
17488         in an array.
17489
17490         (Binary.ResolveOperator): Handle operator != (object a, object b)
17491         and operator == (object a, object b);
17492
17493         (Binary.DoNumericPromotions): Indicate whether the numeric
17494         promotion was possible.
17495
17496         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
17497         Implement.  
17498
17499         Made the ArrayAccess implement interface IAssignMethod instead of
17500         IStackStore as the order in which arguments are passed reflects
17501         this.
17502
17503         * assign.cs: Instead of using expr.ExprClass to select the way of
17504         assinging, probe for the IStackStore/IAssignMethod interfaces.
17505
17506         * typemanager.cs: Load InitializeArray definition.
17507
17508         * rootcontext.cs (RootContext.MakeStaticData): Used to define
17509         static data that can be used to initialize arrays. 
17510
17511 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
17512
17513         * expression.cs: Handle operator== and operator!= for booleans.
17514
17515         (Conditioal.Reduce): Implement reducer for the ?: operator.
17516
17517         (Conditional.Resolve): Implement dead code elimination.
17518
17519         (Binary.Resolve): Catch string literals and return a new
17520         concatenated string.
17521
17522         (Unary.Reduce): Implement reduction of unary expressions.
17523
17524         * ecore.cs: Split out the expression core handling here.
17525
17526         (Expression.Reduce): New method used to perform constant folding
17527         and CSE.  This is needed to support constant-expressions. 
17528
17529         * statement.cs (Statement.EmitBoolExpression): Pass true and false
17530         targets, and optimize for !x.
17531
17532 2001-11-04  Ravi Pratap  <ravi@ximian.com>
17533
17534         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
17535         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
17536         set custom atttributes.
17537
17538         * literal.cs (Literal::GetValue): New abstract method to return the actual
17539         value of the literal, cast as an object.
17540
17541         (*Literal): Implement GetValue method.
17542
17543         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
17544         expressions to the arraylist but objects of type Argument.
17545
17546         * class.cs (TypeContainer::Emit): Emit our attributes too.
17547
17548         (Method::Emit, Constructor::Emit): Ditto.
17549
17550         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
17551         to be ignoring earlier.
17552
17553 2001-11-03  Ravi Pratap  <ravi@ximian.com>
17554
17555         * attribute.cs (AttributeSection::Define): Implement to do the business
17556         of constructing a CustomAttributeBuilder.
17557
17558         (Attribute): New trivial class. Increases readability of code.  
17559
17560         * cs-parser.jay : Update accordingly.
17561
17562         (positional_argument_list, named_argument_list, named_argument): New rules
17563
17564         (attribute_arguments): Use the above so that we are more correct.
17565
17566 2001-11-02  Ravi Pratap  <ravi@ximian.com>
17567
17568         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
17569         to perform all checks for a method with a params parameter.
17570
17571         (Invocation::OverloadResolve): Update to use the above method and therefore
17572         cope correctly with params method invocations.
17573
17574         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
17575         params too.
17576
17577         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
17578         constructors in our parent too because we can't afford to miss out on 
17579         protected ones ;-)
17580
17581         * attribute.cs (AttributeSection): New name for the class Attribute
17582
17583         Other trivial changes to improve readability.
17584
17585         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
17586         use the new class names.
17587
17588 2001-11-01  Ravi Pratap  <ravi@ximian.com>
17589
17590         * class.cs (Method::Define): Complete definition for params types too
17591
17592         (Indexer::Define): Ditto.
17593
17594         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
17595         Cope everywhere with a request for info about the array parameter.
17596
17597 2001-11-01  Ravi Pratap  <ravi@ximian.com>
17598
17599         * tree.cs (RecordNamespace): Fix up to check for the correct key.
17600
17601         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
17602         local_variable_type to extract the string corresponding to the type.
17603
17604         (local_variable_type): Fixup the action to use the new helper method.
17605
17606         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
17607         go.
17608
17609         * expression.cs : Clean out code which uses the above.
17610
17611 2001-10-31  Ravi Pratap  <ravi@ximian.com>
17612
17613         * typemanager.cs (RegisterMethod): Check if we already have an existing key
17614         and bale out if necessary by returning a false.
17615
17616         (RegisterProperty): Ditto.
17617
17618         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
17619         and print out appropriate error messages.
17620
17621         * interface.cs (everywhere): Ditto.
17622
17623         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
17624         location to constructor.
17625
17626         * class.cs (Property, Event, Indexer): Update accordingly.
17627
17628         * ../errors/cs111.cs : Added.
17629
17630         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
17631         of a method, as laid down by the spec.
17632
17633         (Invocation::OverloadResolve): Use the above method.
17634
17635 2001-10-31  Ravi Pratap  <ravi@ximian.com>
17636
17637         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
17638         now take a TypeContainer and a Parameters object.
17639
17640         (ParameterData): Modify return type of ParameterModifier method to be 
17641         Parameter.Modifier and not a string.
17642
17643         (ReflectionParameters, InternalParameters): Update accordingly.
17644
17645         * expression.cs (Argument::GetParameterModifier): Same here.
17646
17647         * support.cs (InternalParameters::ParameterType): Find a better way of determining
17648         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
17649         symbol in it at all so maybe this is only for now.
17650
17651 2001-10-30  Ravi Pratap  <ravi@ximian.com>
17652
17653         * support.cs (InternalParameters): Constructor now takes an extra argument 
17654         which is the actual Parameters class.
17655
17656         (ParameterDesc): Update to provide info on ref/out modifiers.
17657
17658         * class.cs (everywhere): Update call to InternalParameters to pass in
17659         the second argument too.
17660
17661         * support.cs (ParameterData): Add ParameterModifier, which is a method 
17662         to return the modifier info [ref/out etc]
17663
17664         (InternalParameters, ReflectionParameters): Implement the above.
17665
17666         * expression.cs (Argument::ParameterModifier): Similar function to return
17667         info about the argument's modifiers.
17668
17669         (Invocation::OverloadResolve): Update to take into account matching modifiers 
17670         too.
17671
17672         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
17673         a new SetFormalParameters object which we pass to InternalParameters.
17674
17675 2001-10-30  Ravi Pratap  <ravi@ximian.com>
17676
17677         * expression.cs (NewArray): Merge into the ArrayCreation class.
17678
17679 2001-10-29  Ravi Pratap  <ravi@ximian.com>
17680
17681         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
17682         NewUserdefinedArray into one as there wasn't much of a use in having
17683         two separate ones.
17684
17685         * expression.cs (Argument): Change field's name to ArgType from Type.
17686
17687         (Type): New readonly property which returns the proper type, taking into 
17688         account ref/out modifiers.
17689
17690         (everywhere): Adjust code accordingly for the above.
17691
17692         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
17693         whether we are emitting for a ref or out parameter.
17694
17695         * expression.cs (Argument::Emit): Use the above field to set the state.
17696
17697         (LocalVariableReference::Emit): Update to honour the flag and emit the
17698         right stuff.
17699
17700         * parameter.cs (Attributes): Set the correct flags for ref parameters.
17701
17702         * expression.cs (Argument::FullDesc): New function to provide a full desc.
17703
17704         * support.cs (ParameterData): Add method ParameterDesc to the interface.
17705
17706         (ReflectionParameters, InternalParameters): Implement the above method.
17707
17708         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
17709         reporting errors.
17710
17711         (Invocation::FullMethodDesc): Ditto. 
17712
17713 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
17714
17715         * cs-parser.jay: Add extra production for the second form of array
17716         creation. 
17717
17718         * expression.cs (ArrayCreation): Update to reflect the above
17719         change. 
17720
17721         * Small changes to prepare for Array initialization.
17722
17723 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
17724
17725         * typemanager.cs (ImplementsInterface): interface might be null;
17726         Deal with this problem;
17727
17728         Also, we do store negative hits on the cache (null values), so use
17729         this instead of calling t.GetInterfaces on the type everytime.
17730
17731 2001-10-28  Ravi Pratap  <ravi@ximian.com>
17732
17733         * typemanager.cs (IsBuiltinType): New method to help determine the same.
17734
17735         * expression.cs (New::DoResolve): Get rid of array creation code and instead
17736         split functionality out into different classes.
17737
17738         (New::FormArrayType): Move into NewBuiltinArray.
17739
17740         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
17741         quite useless.
17742
17743         (NewBuiltinArray): New class to handle creation of built-in arrays.
17744
17745         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
17746         account creation of one-dimensional arrays.
17747
17748         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
17749
17750         (NewUserdefinedArray::DoResolve): Implement.
17751
17752         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
17753
17754         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
17755         we maintain inside the TypeManager. This is necessary to perform lookups on the
17756         module builder.
17757
17758         (LookupType): Update to perform GetType on the module builders too.     
17759
17760         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
17761
17762         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
17763
17764 2001-10-23  Ravi Pratap  <ravi@ximian.com>
17765
17766         * expression.cs (New::DoResolve): Implement guts of array creation.
17767
17768         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
17769
17770 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
17771
17772         * expression.cs: Fix bug I introduced lsat night that broke
17773         Delegates. 
17774
17775         (Expression.Resolve): Report a 246 error (can not resolve name)
17776         if we find a SimpleName in the stream.
17777
17778         (Expression.ResolveLValue): Ditto.
17779
17780         (Expression.ResolveWithSimpleName): This function is a variant of
17781         ResolveName, this one allows SimpleNames to be returned without a
17782         warning.  The only consumer of SimpleNames is MemberAccess
17783
17784 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
17785
17786         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
17787         might arrive here.  I have my doubts that this is correct.
17788
17789         * statement.cs (Lock): Implement lock statement.
17790
17791         * cs-parser.jay: Small fixes to support `lock' and `using'
17792
17793         * cs-tokenizer.cs: Remove extra space
17794
17795         * driver.cs: New flag --checked, allows to turn on integer math
17796         checking. 
17797
17798         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
17799         Threading.Monitor.Exit 
17800
17801 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
17802
17803         * expression.cs (IndexerAccess::DoResolveLValue): Set the
17804         Expression Class to be IndexerAccess.
17805
17806         Notice that Indexer::DoResolve sets the eclass to Value.
17807
17808 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
17809
17810         * class.cs (TypeContainer::Emit): Emit code for indexers.
17811
17812         * assign.cs (IAssignMethod): New interface implemented by Indexers
17813         and Properties for handling assignment.
17814
17815         (Assign::Emit): Simplify and reuse code. 
17816
17817         * expression.cs (IndexerAccess, PropertyExpr): Implement
17818         IAssignMethod, clean up old code. 
17819
17820 2001-10-22  Ravi Pratap  <ravi@ximian.com>
17821
17822         * typemanager.cs (ImplementsInterface): New method to determine if a type
17823         implements a given interface. Provides a nice cache too.
17824
17825         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
17826         method.
17827
17828         (ConvertReferenceExplicit): Ditto.
17829
17830         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
17831         various methods, with correct names etc.
17832
17833         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
17834         Operator.UnaryNegation.
17835
17836         * cs-parser.jay (operator_declarator): Be a little clever in the case where
17837         we have a unary plus or minus operator.
17838
17839         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
17840         UnaryMinus.
17841
17842         * everywhere : update accordingly.
17843
17844         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
17845         respectively.
17846
17847         * class.cs (Method::Define): For the case where we are implementing a method
17848         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
17849         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
17850
17851 2001-10-21  Ravi Pratap  <ravi@ximian.com>
17852
17853         * interface.cs (FindMembers): Implement to work around S.R.E
17854         lameness.
17855
17856         * typemanager.cs (IsInterfaceType): Implement.
17857
17858         (FindMembers): Update to handle interface types too.
17859
17860         * expression.cs (ImplicitReferenceConversion): Re-write bits which
17861         use IsAssignableFrom as that is not correct - it doesn't work.
17862
17863         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
17864         and accordingly override EmitStatement.
17865
17866         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
17867         using the correct logic :-)
17868
17869 2001-10-19  Ravi Pratap  <ravi@ximian.com>
17870
17871         * ../errors/cs-11.cs : Add to demonstrate error -11 
17872
17873 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
17874
17875         * assign.cs (Assign::Resolve): Resolve right hand side first, and
17876         then pass this as a hint to ResolveLValue.
17877
17878         * expression.cs (FieldExpr): Add Location information
17879
17880         (FieldExpr::LValueResolve): Report assignment to readonly
17881         variable. 
17882
17883         (Expression::ExprClassFromMemberInfo): Pass location information.
17884
17885         (Expression::ResolveLValue): Add new method that resolves an
17886         LValue. 
17887
17888         (Expression::DoResolveLValue): Default invocation calls
17889         DoResolve. 
17890
17891         (Indexers): New class used to keep track of indexers in a given
17892         Type. 
17893
17894         (IStackStore): Renamed from LValue, as it did not really describe
17895         what this did.  Also ResolveLValue is gone from this interface and
17896         now is part of Expression.
17897
17898         (ElementAccess): Depending on the element access type
17899
17900         * typemanager.cs: Add `indexer_name_type' as a Core type
17901         (System.Runtime.CompilerServices.IndexerNameAttribute)
17902
17903         * statement.cs (Goto): Take a location.
17904
17905 2001-10-18  Ravi Pratap  <ravi@ximian.com>
17906
17907         * delegate.cs (Delegate::VerifyDelegate): New method to verify
17908         if two delegates are compatible.
17909
17910         (NewDelegate::DoResolve): Update to take care of the case when
17911         we instantiate a delegate from another delegate.
17912
17913         * typemanager.cs (FindMembers): Don't even try to look up members
17914         of Delegate types for now.
17915
17916 2001-10-18  Ravi Pratap  <ravi@ximian.com>
17917
17918         * delegate.cs (NewDelegate): New class to take care of delegate
17919         instantiation.
17920
17921         * expression.cs (New): Split the delegate related code out into 
17922         the NewDelegate class.
17923
17924         * delegate.cs (DelegateInvocation): New class to handle delegate 
17925         invocation.
17926
17927         * expression.cs (Invocation): Split out delegate related code into
17928         the DelegateInvocation class.
17929
17930 2001-10-17  Ravi Pratap  <ravi@ximian.com>
17931
17932         * expression.cs (New::DoResolve): Implement delegate creation fully
17933         and according to the spec.
17934
17935         (New::DoEmit): Update to handle delegates differently.
17936
17937         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
17938         because of which we were printing out arguments in reverse order !
17939
17940         * delegate.cs (VerifyMethod): Implement to check if the given method
17941         matches the delegate.
17942
17943         (FullDelegateDesc): Implement.
17944
17945         (VerifyApplicability): Implement.
17946
17947         * expression.cs (Invocation::DoResolve): Update to accordingly handle
17948         delegate invocations too.
17949
17950         (Invocation::Emit): Ditto.
17951
17952         * ../errors/cs1593.cs : Added.
17953
17954         * ../errors/cs1594.cs : Added.
17955
17956         * delegate.cs (InstanceExpression, TargetMethod): New properties.
17957
17958 2001-10-16  Ravi Pratap  <ravi@ximian.com>
17959
17960         * typemanager.cs (intptr_type): Core type for System.IntPtr
17961
17962         (InitCoreTypes): Update for the same.
17963
17964         (iasyncresult_type, asynccallback_type): Ditto.
17965
17966         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
17967         correct.
17968
17969         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
17970         too.
17971
17972         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
17973         the builders for the 4 members of a delegate type :-)
17974
17975         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
17976         type.
17977
17978         * expression.cs (New::DoResolve): Implement guts for delegate creation.
17979
17980         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
17981
17982 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
17983
17984         * statement.cs (Break::Emit): Implement.   
17985         (Continue::Emit): Implement.
17986
17987         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
17988         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
17989         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
17990         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
17991         end loop
17992
17993         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
17994         properties that track the label for the current loop (begin of the
17995         loop and end of the loop).
17996
17997 2001-10-15  Ravi Pratap  <ravi@ximian.com>
17998
17999         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
18000         use of emitting anything at all.
18001
18002         * class.cs, rootcontext.cs : Get rid of calls to the same.
18003
18004         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
18005
18006         (Populate): Define the constructor correctly and set the implementation
18007         attributes.
18008
18009         * typemanager.cs (delegate_types): New hashtable to hold delegates that
18010         have been defined.
18011
18012         (AddDelegateType): Implement.
18013
18014         (IsDelegateType): Implement helper method.
18015
18016         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
18017
18018         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
18019         and accordingly handle it.
18020
18021         * delegate.cs (Populate): Take TypeContainer argument.
18022         Implement bits to define the Invoke method. However, I still haven't figured out
18023         how to take care of the native int bit :-(
18024
18025         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
18026         Qualify the name of the delegate, not its return type !
18027
18028         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
18029         conversion.
18030
18031         (StandardConversionExists): Checking for array types turns out to be recursive.
18032
18033         (ConvertReferenceExplicit): Implement array conversion.
18034
18035         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
18036
18037 2001-10-12  Ravi Pratap  <ravi@ximian.com>
18038
18039         * cs-parser.jay (delegate_declaration): Store the fully qualified
18040         name as it is a type declaration.
18041
18042         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
18043         readonly.
18044
18045         (DefineDelegate): Renamed from Define. Does the same thing essentially,
18046         as TypeContainer::DefineType.
18047
18048         (Populate): Method in which all the definition of the various methods (Invoke)
18049         etc is done.
18050
18051         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
18052         see.
18053
18054         (CloseDelegate): Finally creates the delegate.
18055
18056         * class.cs (TypeContainer::DefineType): Update to define delegates.
18057         (Populate, Emit and CloseType): Do the same thing here too.
18058
18059         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
18060         delegates in all these operations.
18061
18062 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
18063
18064         * expression.cs: LocalTemporary: a new expression used to
18065         reference a temporary that has been created.
18066
18067         * assign.cs: Handle PropertyAccess back here, so that we can
18068         provide the proper semantic access to properties.
18069
18070         * expression.cs (Expression::ConvertReferenceExplicit): Implement
18071         a few more explicit conversions. 
18072
18073         * modifiers.cs: `NEW' modifier maps to HideBySig.
18074
18075         * expression.cs (PropertyExpr): Make this into an
18076         ExpressionStatement, and support the EmitStatement code path. 
18077
18078         Perform get/set error checking, clean up the interface.
18079
18080         * assign.cs: recognize PropertyExprs as targets, and if so, turn
18081         them into toplevel access objects.
18082
18083 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
18084
18085         * expression.cs: PropertyExpr::PropertyExpr: use work around the
18086         SRE.
18087
18088         * typemanager.cs: Keep track here of our PropertyBuilders again to
18089         work around lameness in SRE.
18090
18091 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
18092
18093         * expression.cs (LValue::LValueResolve): New method in the
18094         interface, used to perform a second resolution pass for LValues. 
18095
18096         (This::DoResolve): Catch the use of this in static methods.
18097
18098         (This::LValueResolve): Implement.
18099
18100         (This::Store): Remove warning, assigning to `this' in structures
18101         is 
18102
18103         (Invocation::Emit): Deal with invocation of
18104         methods on value types.  We need to pass the address to structure
18105         methods rather than the object itself.  (The equivalent code to
18106         emit "this" for structures leaves the entire structure on the
18107         stack instead of a pointer to it). 
18108
18109         (ParameterReference::DoResolve): Compute the real index for the
18110         argument based on whether the method takes or not a `this' pointer
18111         (ie, the method is static).
18112
18113         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
18114         value types returned from functions when we need to invoke a
18115         method on the sturcture.
18116
18117
18118 2001-10-11  Ravi Pratap  <ravi@ximian.com>
18119
18120         * class.cs (TypeContainer::DefineType): Method to actually do the business of
18121         defining the type in the Modulebuilder or Typebuilder. This is to take
18122         care of nested types which need to be defined on the TypeBuilder using
18123         DefineNestedMethod.
18124
18125         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
18126         methods in RootContext, only ported to be part of TypeContainer.
18127
18128         (TypeContainer::GetInterfaceOrClass): Ditto.
18129
18130         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
18131
18132         * interface.cs (Interface::DefineInterface): New method. Does exactly
18133         what RootContext.CreateInterface did earlier, only it takes care of nested types 
18134         too.
18135
18136         (Interface::GetInterfaces): Move from RootContext here and port.
18137
18138         (Interface::GetInterfaceByName): Same here.
18139
18140         * rootcontext.cs (ResolveTree): Re-write.
18141
18142         (PopulateTypes): Re-write.
18143
18144         * class.cs (TypeContainer::Populate): Populate nested types too.
18145         (TypeContainer::Emit): Emit nested members too.
18146
18147         * typemanager.cs (AddUserType): Do not make use of the FullName property,
18148         instead just use the name argument passed in as it is already fully
18149         qualified.
18150
18151         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
18152         to TypeContainer mapping to see if a type is user-defined.
18153
18154         * class.cs (TypeContainer::CloseType): Implement. 
18155
18156         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
18157         the default constructor.
18158
18159         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
18160         twice.
18161
18162         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
18163
18164         * interface.cs (CloseType): Create the type here.
18165
18166         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
18167         the hierarchy.
18168
18169         Remove all the methods which are now in TypeContainer.
18170
18171 2001-10-10  Ravi Pratap  <ravi@ximian.com>
18172
18173         * delegate.cs (Define): Re-write bits to define the delegate
18174         correctly.
18175
18176 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
18177
18178         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
18179
18180         * expression.cs (ImplicitReferenceConversion): handle null as well
18181         as a source to convert to any reference type.
18182
18183         * statement.cs (Return): Perform any implicit conversions to
18184         expected return type.  
18185
18186         Validate use of return statement.  
18187
18188         * codegen.cs (EmitContext): Pass the expected return type here.
18189
18190         * class.cs (Method, Constructor, Property): Pass expected return
18191         type to EmitContext.
18192
18193 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
18194
18195         * expression.cs: Make DoResolve take an EmitContext instead of a
18196         TypeContainer.
18197
18198         Replaced `l' and `location' for `loc', for consistency.
18199
18200         (Error, Warning): Remove unneeded Tc argument.
18201
18202         * assign.cs, literal.cs, constant.cs: Update to new calling
18203         convention. 
18204
18205         * codegen.cs: EmitContext now contains a flag indicating whether
18206         code is being generated in a static method or not.
18207
18208         * cs-parser.jay: DecomposeQI, new function that replaces the old
18209         QualifiedIdentifier.  Now we always decompose the assembled
18210         strings from qualified_identifier productions into a group of
18211         memberaccesses.
18212
18213 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
18214
18215         * rootcontext.cs: Deal with field-less struct types correctly now
18216         by passing the size option to Define Type.
18217
18218         * class.cs: Removed hack that created one static field. 
18219
18220 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
18221
18222         * statement.cs: Moved most of the code generation here. 
18223
18224 2001-10-09  Ravi Pratap  <ravi@ximian.com>
18225
18226         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
18227         seem very right.
18228
18229         (ElementAccess): Remove useless bits for now - keep checks as the spec
18230         says.
18231
18232 2001-10-08  Ravi Pratap  <ravi@ximian.com>
18233
18234         * expression.cs (ElementAccess::DoResolve): Remove my crap code
18235         and start performing checks according to the spec.
18236
18237 2001-10-07  Ravi Pratap  <ravi@ximian.com>
18238
18239         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
18240         rank_specifiers instead.
18241
18242         (rank_specifiers): Change the order in which the rank specifiers are stored
18243
18244         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
18245
18246         * expression.cs (ElementAccess): Implement the LValue interface too.
18247
18248 2001-10-06  Ravi Pratap  <ravi@ximian.com>
18249
18250         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
18251         except that user defined conversions are not included.
18252
18253         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
18254         perform the conversion of the return type, if necessary.
18255
18256         (New::DoResolve): Check whether we are creating an array or an object
18257         and accordingly do the needful.
18258
18259         (New::Emit): Same here.
18260
18261         (New::DoResolve): Implement guts of array creation.
18262
18263         (New::FormLookupType): Helper function.
18264
18265 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
18266
18267         * codegen.cs: Removed most of the code generation here, and move the
18268         corresponding code generation bits to the statement classes. 
18269
18270         Added support for try/catch/finalize and throw.
18271
18272         * cs-parser.jay: Added support for try/catch/finalize.
18273
18274         * class.cs: Catch static methods having the flags override,
18275         virtual or abstract.
18276
18277         * expression.cs (UserCast): This user cast was not really doing
18278         what it was supposed to do.  Which is to be born in fully resolved
18279         state.  Parts of the resolution were being performed at Emit time! 
18280
18281         Fixed this code.
18282
18283 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
18284
18285         * expression.cs: Implicity convert the result from UserCast.
18286
18287 2001-10-05  Ravi Pratap  <ravi@ximian.com>
18288
18289         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
18290         prevented it from working correctly. 
18291
18292         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
18293         merely ConvertImplicit.
18294
18295 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
18296
18297         * typemanager.cs: Make the LookupTypeContainer function static,
18298         and not per-instance.  
18299
18300         * class.cs: Make static FindMembers (the one that takes a Type
18301         argument). 
18302
18303         * codegen.cs: Add EmitForeach here.
18304
18305         * cs-parser.jay: Make foreach a toplevel object instead of the
18306         inline expansion, as we need to perform semantic analysis on it. 
18307
18308 2001-10-05  Ravi Pratap  <ravi@ximian.com>
18309
18310         * expression.cs (Expression::ImplicitUserConversion): Rename to
18311         UserDefinedConversion.
18312
18313         (Expression::UserDefinedConversion): Take an extra argument specifying 
18314         whether we look for explicit user conversions too.
18315
18316         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
18317
18318         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
18319
18320         (ExplicitUserConversion): Make it a call to UserDefinedConversion
18321         with the appropriate arguments.
18322
18323         * cs-parser.jay (cast_expression): Record location too.
18324
18325         * expression.cs (Cast): Record location info.
18326
18327         (Expression::ConvertExplicit): Take location argument.
18328
18329         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
18330         to determine if we are doing explicit conversions.
18331
18332         (UserCast::Emit): Update accordingly.
18333
18334         (Expression::ConvertExplicit): Report an error if everything fails.
18335
18336         * ../errors/cs0030.cs : Add.
18337
18338 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
18339
18340         * modifiers.cs: If the ABSTRACT keyword is present, also set the
18341         virtual and newslot bits. 
18342
18343         * class.cs (TypeContainer::RegisterRequiredImplementations):
18344         Record methods we need.
18345
18346         (TypeContainer::MakeKey): Helper function to make keys for
18347         MethodBases, since the Methodbase key is useless.
18348
18349         (TypeContainer::Populate): Call RegisterRequiredImplementations
18350         before defining the methods.   
18351
18352         Create a mapping for method_builders_to_methods ahead of time
18353         instead of inside a tight loop.
18354
18355         (::RequireMethods):  Accept an object as the data to set into the
18356         hashtable so we can report interface vs abstract method mismatch.
18357
18358 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
18359
18360         * report.cs: Make all of it static.
18361
18362         * rootcontext.cs: Drop object_type and value_type computations, as
18363         we have those in the TypeManager anyways.
18364
18365         Drop report instance variable too, now it is a global.
18366
18367         * driver.cs: Use try/catch on command line handling.
18368
18369         Add --probe option to debug the error reporting system with a test
18370         suite. 
18371
18372         * report.cs: Add support for exiting program when a probe
18373         condition is reached.
18374
18375 2001-10-03  Ravi Pratap  <ravi@ximian.com>
18376
18377         * expression.cs (Binary::DoNumericPromotions): Fix the case when
18378         we do a forcible conversion regardless of type, to check if 
18379         ForceConversion returns a null.
18380
18381         (Binary::error19): Use location to report error.
18382
18383         (Unary::error23): Use location here too.
18384
18385         * ../errors/cs0019.cs : Check in.
18386
18387         * ../errors/cs0023.cs : Check in.
18388
18389         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
18390         case of a non-null MethodInfo object with a length of 0 !
18391
18392         (Binary::ResolveOperator): Flag error if overload resolution fails to find
18393         an applicable member - according to the spec :-)
18394         Also fix logic to find members in base types.
18395
18396         (Unary::ResolveOperator): Same here.
18397
18398         (Unary::report23): Change name to error23 and make first argument a TypeContainer
18399         as I was getting thoroughly confused between this and error19 :-)
18400
18401         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
18402         (::FindMostEncompassedType): Implement.
18403         (::FindMostEncompassingType): Implement.
18404         (::StandardConversionExists): Implement.
18405
18406         (UserImplicitCast): Re-vamp. We now need info about most specific
18407         source and target types so that we can do the necessary conversions.
18408
18409         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
18410         mathematical union with no duplicates.
18411
18412 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
18413
18414         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
18415         in order from base classes to child classes, so that we can in
18416         child classes look up in our parent for method names and
18417         attributes (required for handling abstract, virtual, new, override
18418         constructs: we need to instrospect our base class, and if we dont
18419         populate the classes in order, the introspection might be
18420         incorrect.  For example, a method could query its parent before
18421         the parent has any methods and would determine that the parent has
18422         no abstract methods (while it could have had them)).
18423
18424         (RootContext::CreateType): Record the order in which we define the
18425         classes.
18426
18427 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
18428
18429         * class.cs (TypeContainer::Populate): Also method definitions can
18430         fail now, keep track of this.
18431
18432         (TypeContainer::FindMembers): Implement support for
18433         DeclaredOnly/noDeclaredOnly flag.
18434
18435         (Constructor::Emit) Return the ConstructorBuilder.
18436
18437         (Method::Emit) Return the MethodBuilder. 
18438         Check for abstract or virtual methods to be public.
18439
18440         * rootcontext.cs (RootContext::CreateType): Register all the
18441         abstract methods required for the class to be complete and the
18442         interface methods that must be implemented. 
18443
18444         * cs-parser.jay: Report error 501 (method requires body if it is
18445         not marked abstract or extern).
18446
18447         * expression.cs (TypeOf::Emit): Implement.
18448
18449         * typemanager.cs: runtime_handle_type, new global type.
18450
18451         * class.cs (Property::Emit): Generate code for properties.
18452
18453 2001-10-02  Ravi Pratap  <ravi@ximian.com>
18454
18455         * expression.cs (Unary::ResolveOperator): Find operators on base type
18456         too - we now conform exactly to the spec.
18457
18458         (Binary::ResolveOperator): Same here.
18459
18460         * class.cs (Operator::Define): Fix minor quirk in the tests.
18461
18462         * ../errors/cs0215.cs : Added.
18463
18464         * ../errors/cs0556.cs : Added.
18465
18466         * ../errors/cs0555.cs : Added.
18467
18468 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
18469
18470         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
18471         single integer which is really efficient
18472
18473 2001-10-01  Ravi Pratap  <ravi@ximian.com>
18474
18475         *  expression.cs (Expression::ImplicitUserConversion): Use location
18476         even in the case when we are examining True operators.
18477  
18478         * class.cs (Operator::Define): Perform extensive checks to conform
18479         with the rules for operator overloading in the spec.
18480
18481         * expression.cs (Expression::ImplicitReferenceConversion): Implement
18482         some of the other conversions mentioned in the spec.
18483
18484         * typemanager.cs (array_type): New static member for the System.Array built-in
18485         type.
18486
18487         (cloneable_interface): For System.ICloneable interface.
18488
18489         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
18490         we start resolving the tree and populating types.
18491
18492         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
18493  
18494 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
18495
18496         * expression.cs (Expression::ExprClassFromMemberInfo,
18497         Expression::Literalize): Create literal expressions from
18498         FieldInfos which are literals.
18499
18500         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
18501         type casts, because they were wrong.  The test suite in tests
18502         caught these ones.
18503
18504         (ImplicitNumericConversion): ushort to ulong requires a widening
18505         cast. 
18506
18507         Int32 constant to long requires widening cast as well.
18508
18509         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
18510         for integers because the type on the stack is not i4.
18511
18512 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
18513
18514         * expression.cs (report118): require location argument. 
18515
18516         * parameter.cs: Do not dereference potential null value.
18517
18518         * class.cs: Catch methods that lack the `new' keyword when
18519         overriding a name.  Report warnings when `new' is used without
18520         anything being there to override.
18521
18522         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
18523
18524         * class.cs: Only add constructor to hashtable if it is non-null
18525         (as now constructors can fail on define).
18526
18527         (TypeManager, Class, Struct): Take location arguments.
18528
18529         Catch field instance initialization in structs as errors.
18530
18531         accepting_filter: a new filter for FindMembers that is static so
18532         that we dont create an instance per invocation.
18533
18534         (Constructor::Define): Catch errors where a struct constructor is
18535         parameterless 
18536
18537         * cs-parser.jay: Pass location information for various new
18538         constructs. 
18539
18540         * delegate.cs (Delegate): take a location argument.
18541
18542         * driver.cs: Do not call EmitCode if there were problesm in the
18543         Definition of the types, as many Builders wont be there. 
18544
18545         * decl.cs (Decl::Decl): Require a location argument.
18546
18547         * cs-tokenizer.cs: Handle properly hex constants that can not fit
18548         into integers, and find the most appropiate integer for it.
18549
18550         * literal.cs: Implement ULongLiteral.
18551
18552         * rootcontext.cs: Provide better information about the location of
18553         failure when CreateType fails.
18554
18555 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
18556
18557         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
18558         as well.
18559
18560         * expression.cs (Binary::CheckShiftArguments): Add missing type
18561         computation.
18562         (Binary::ResolveOperator): Add type to the logical and and logical
18563         or, Bitwise And/Or and Exclusive Or code paths, it was missing
18564         before.
18565
18566         (Binary::DoNumericPromotions): In the case where either argument
18567         is ulong (and most signed types combined with ulong cause an
18568         error) perform implicit integer constant conversions as well.
18569
18570 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
18571
18572         * expression.cs (UserImplicitCast): Method should always be
18573         non-null. 
18574         (Invocation::BetterConversion): Simplified test for IntLiteral.
18575
18576         (Expression::ImplicitNumericConversion): Split this routine out.
18577         Put the code that performs implicit constant integer conversions
18578         here. 
18579
18580         (Expression::Resolve): Become a wrapper around DoResolve so we can
18581         check eclass and type being set after resolve.
18582
18583         (Invocation::Badness): Remove this dead function
18584
18585         (Binary::ResolveOperator): Do not compute the expensive argumnets
18586         unless we have a union for it.
18587
18588         (Probe::Emit): Is needs to do an isinst and then
18589         compare against null.
18590
18591         (::CanConvert): Added Location argument.  If the Location argument
18592         is null (Location.Null), then we do not report errors.  This is
18593         used by the `probe' mechanism of the Explicit conversion.  We do
18594         not want to generate an error for something that the user
18595         explicitly requested to be casted.  But the pipeline for an
18596         explicit cast first tests for potential implicit casts.
18597
18598         So for now, if the Location is null, it means `Probe only' to
18599         avoid adding another argument.   Might have to revise this
18600         strategy later.
18601
18602         (ClassCast): New class used to type cast objects into arbitrary
18603         classes (used in Explicit Reference Conversions).
18604
18605         Implement `as' as well.
18606
18607         Reverted all the patches from Ravi below: they were broken:
18608
18609                 * The use of `level' as a mechanism to stop recursive
18610                   invocations is wrong.  That was there just to catch the
18611                   bug with a strack trace but not as a way of addressing
18612                   the problem.
18613
18614                   To fix the problem we have to *understand* what is going
18615                   on and the interactions and come up with a plan, not
18616                   just get things going.
18617
18618                 * The use of the type conversion cache that I proposed
18619                   last night had an open topic: How does this work across
18620                   protection domains.  A user defined conversion might not
18621                   be public in the location where we are applying the
18622                   conversion, a different conversion might be selected
18623                   (ie, private A->B (better) but public B->A (worse),
18624                   inside A, A->B applies, but outside it, B->A will
18625                   apply).
18626
18627                 * On top of that (ie, even if the above is solved),
18628                   conversions in a cache need to be abstract.  Ie, `To
18629                   convert from an Int to a Short use an OpcodeCast', not
18630                   `To convert from an Int to a Short use the OpcodeCast on
18631                   the variable 5' (which is what this patch was doing).
18632
18633 2001-09-28  Ravi Pratap  <ravi@ximian.com>
18634
18635         * expression.cs (Invocation::ConversionExists): Re-write to use
18636         the conversion cache
18637
18638         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
18639         cache all conversions done, not just user-defined ones.
18640
18641         (Invocation::BetterConversion): The real culprit. Use ConversionExists
18642         to determine if a conversion exists instead of acutually trying to 
18643         perform the conversion. It's faster too.
18644
18645         (Expression::ConvertExplicit): Modify to use ConversionExists to check
18646         and only then attempt the implicit conversion.
18647
18648 2001-09-28  Ravi Pratap  <ravi@ximian.com>
18649
18650         * expression.cs (ConvertImplicit): Use a cache for conversions
18651         already found. Check level of recursion and bail out if necessary.
18652
18653 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
18654
18655         * typemanager.cs (string_concat_string_string, string_concat_object_object):
18656         Export standard methods that we expect for string operations.
18657
18658         * statement.cs (Block::UsageWarning): Track usage of variables and
18659         report the errors for not used variables.
18660
18661         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
18662         operator. 
18663
18664 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
18665
18666         * codegen.cs: remove unnneded code 
18667
18668         * expression.cs: Removed BuiltinTypeAccess class
18669
18670         Fix the order in which implicit conversions are
18671         done.  
18672
18673         The previous fixed dropped support for boxed conversions (adding a
18674         test to the test suite now)
18675
18676         (UserImplicitCast::CanConvert): Remove test for source being null,
18677         that code is broken.  We should not feed a null to begin with, if
18678         we do, then we should track the bug where the problem originates
18679         and not try to cover it up here.
18680
18681         Return a resolved expression of type UserImplicitCast on success
18682         rather than true/false.  Ravi: this is what I was talking about,
18683         the pattern is to use a static method as a "constructor" for
18684         objects. 
18685
18686         Also, do not create arguments until the very last minute,
18687         otherwise we always create the arguments even for lookups that
18688         will never be performed. 
18689
18690         (UserImplicitCast::Resolve): Eliminate, objects of type
18691         UserImplicitCast are born in a fully resolved state. 
18692
18693         * typemanager.cs (InitCoreTypes): Init also value_type
18694         (System.ValueType). 
18695
18696         * expression.cs (Cast::Resolve): First resolve the child expression.
18697
18698         (LValue): Add new method AddressOf to be used by
18699         the `&' operator.  
18700
18701         Change the argument of Store to take an EmitContext instead of an
18702         ILGenerator, because things like FieldExpr need to be able to call
18703         their children expression to generate the instance code. 
18704
18705         (Expression::Error, Expression::Warning): Sugar functions for
18706         reporting errors.
18707
18708         (Expression::MemberLookup): Accept a TypeContainer instead of a
18709         Report as the first argument.
18710
18711         (Expression::ResolvePrimary): Killed.  I still want to improve
18712         this as currently the code is just not right.
18713
18714         (Expression::ResolveMemberAccess): Simplify, but it is still
18715         wrong. 
18716
18717         (Unary::Resolve): Catch errors in AddressOf operators.
18718
18719         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
18720         index to a byte for the short-version, or the compiler will choose
18721         the wrong Emit call, which generates the wrong data.
18722
18723         (ParameterReference::Emit, ::Store): same.
18724
18725         (FieldExpr::AddressOf): Implement.
18726
18727         * typemanager.cs: TypeManager: made public variable instead of
18728         property.
18729
18730         * driver.cs: document --fatal.
18731
18732         * report.cs (ErrorMessage, WarningMessage): new names for the old
18733         Error and Warning classes.
18734
18735         * cs-parser.jay (member_access): Turn built-in access to types
18736         into a normal simplename
18737
18738 2001-09-27  Ravi Pratap  <ravi@ximian.com>
18739
18740         * expression.cs (Invocation::BetterConversion): Fix to cope
18741         with q being null, since this was introducing a bug.
18742
18743         * expression.cs (ConvertImplicit): Do built-in conversions first.
18744
18745 2001-09-27  Ravi Pratap  <ravi@ximian.com>
18746
18747         * expression.cs (UserImplicitCast::Resolve): Fix bug.
18748
18749 2001-09-27  Ravi Pratap  <ravi@ximian.com>
18750
18751         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
18752         I had introduced long ago (what's new ?).
18753
18754         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
18755         the work of all the checking. 
18756         (ConvertImplicit): Call CanConvert and only then create object if necessary.
18757         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
18758
18759         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
18760         that is the right way. 
18761
18762         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
18763         overloading resolution. Use everywhere instead of cutting and pasting code.
18764
18765         (Binary::ResolveOperator): Use MakeUnionSet.
18766
18767         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
18768         we have to convert to bool types. Not complete yet.
18769
18770 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
18771
18772         * typemanager.cs (TypeManager::CSharpName): support ushort.
18773
18774         * expression.cs (Expression::TryImplicitIntConversion): Attempts
18775         to provide an expression that performsn an implicit constant int
18776         conversion (section 6.1.6).
18777         (Expression::ConvertImplicitRequired): Reworked to include
18778         implicit constant expression conversions.
18779
18780         (Expression::ConvertNumericExplicit): Finished.
18781
18782         (Invocation::Emit): If InstanceExpression is null, then it means
18783         that we perform a call on this.
18784
18785 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
18786
18787         * expression.cs (Unary::Emit): Remove some dead code.
18788         (Probe): Implement Resolve and Emit for `is'.
18789         (Expression::ConvertImplicitRequired): Attempt to do constant
18790         expression conversions here.  Maybe should be moved to
18791         ConvertImplicit, but I am not sure.
18792         (Expression::ImplicitLongConstantConversionPossible,
18793         Expression::ImplicitIntConstantConversionPossible): New functions
18794         that tell whether is it possible to apply an implicit constant
18795         expression conversion.
18796
18797         (ConvertNumericExplicit): Started work on explicit numeric
18798         conversions.
18799
18800         * cs-parser.jay: Update operator constants.
18801
18802         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
18803         (Parameters::GetSignature): Hook up VerifyArgs here.
18804         (Parameters::VerifyArgs): Verifies that no two arguments have the
18805         same name. 
18806
18807         * class.cs (Operator): Update the operator names to reflect the
18808         ones that the spec expects (as we are just stringizing the
18809         operator names).
18810
18811         * expression.cs (Unary::ResolveOperator): Fix bug: Use
18812         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
18813         previous usage did only work for our methods.
18814         (Expression::ConvertImplicit): Handle decimal implicit numeric
18815         conversions as well.
18816         (Expression::InternalTypeConstructor): Used to invoke constructors
18817         on internal types for default promotions.
18818
18819         (Unary::Emit): Implement special handling for the pre/post
18820         increment/decrement for overloaded operators, as they need to have
18821         the same semantics as the other operators.
18822
18823         (Binary::ResolveOperator): ditto.
18824         (Invocation::ConversionExists): ditto.
18825         (UserImplicitCast::Resolve): ditto.
18826
18827 2001-09-26  Ravi Pratap  <ravi@ximian.com>
18828
18829         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
18830         operator, return after emitting body. Regression tests pass again !
18831
18832         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
18833         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
18834         (Invocation::OverloadResolve): Ditto.
18835         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
18836
18837         * everywhere : update calls to the above methods accordingly.
18838
18839 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
18840
18841         * assign.cs (Assign): Make it inherit from ExpressionStatement.
18842
18843         * expression.cs (ExpressionStatement): New base class used for
18844         expressions that can appear in statements, so that we can provide
18845         an alternate path to generate expression that do not leave a value
18846         on the stack.
18847
18848         (Expression::Emit, and all the derivatives): We no longer return
18849         whether a value is left on the stack or not.  Every expression
18850         after being emitted leaves a single value on the stack.
18851
18852         * codegen.cs (EmitContext::EmitStatementExpression): Use the
18853         facilties of ExpressionStatement if possible.
18854
18855         * cs-parser.jay: Update statement_expression.
18856
18857 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
18858
18859         * driver.cs: Change the wording of message
18860
18861 2001-09-25  Ravi Pratap  <ravi@ximian.com>
18862
18863         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
18864         the type of the expression to the return type of the method if
18865         we have an overloaded operator match ! The regression tests pass again !
18866         (Unary::ResolveOperator): Ditto.
18867
18868         * expression.cs (Invocation::ConversionExists): Correct the member lookup
18869         to find "op_Implicit", not "implicit" ;-)
18870         (UserImplicitCast): New class to take care of user-defined implicit conversions.
18871         (ConvertImplicit, ForceConversion): Take TypeContainer argument
18872
18873         * everywhere : Correct calls to the above accordingly.
18874
18875         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
18876         (ConvertImplicit): Do user-defined conversion if it exists.
18877
18878 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
18879
18880         * assign.cs: track location.
18881         (Resolve): Use implicit conversions on assignment.
18882
18883         * literal.cs: Oops.  Not good, Emit of short access values should
18884         pass (Bytes) or the wrong argument will be selected.
18885
18886         * expression.cs (Unary::Emit): Emit code for -expr.
18887
18888         (Unary::ResolveOperator): Handle `Substract' for non-constants
18889         (substract from zero from the non-constants).
18890         Deal with Doubles as well. 
18891
18892         (Expression::ConvertImplicitRequired): New routine that reports an
18893         error if no implicit conversion exists. 
18894
18895         (Invocation::OverloadResolve): Store the converted implicit
18896         expressions if we make them
18897
18898 2001-09-24  Ravi Pratap  <ravi@ximian.com>
18899
18900         * class.cs (ConstructorInitializer): Take a Location argument.
18901         (ConstructorBaseInitializer): Same here.
18902         (ConstructorThisInitializer): Same here.
18903
18904         * cs-parser.jay : Update all calls accordingly.
18905
18906         * expression.cs (Unary, Binary, New): Take location argument.
18907         Update accordingly everywhere.
18908
18909         * cs-parser.jay : Update all calls to the above to take a location
18910         argument.
18911
18912         * class.cs : Ditto.
18913
18914 2001-09-24  Ravi Pratap  <ravi@ximian.com>
18915
18916         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
18917         (Invocation::BetterConversion): Same here
18918         (Invocation::ConversionExists): Ditto.
18919
18920         (Invocation::ConversionExists): Implement.
18921
18922 2001-09-22  Ravi Pratap  <ravi@ximian.com>
18923
18924         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
18925         Also take an additional TypeContainer argument.
18926
18927         * All over : Pass in TypeContainer as argument to OverloadResolve.
18928
18929         * typemanager.cs (CSharpName): Update to check for the string type and return
18930         that too.
18931
18932         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
18933         a given method.
18934
18935 2001-09-21  Ravi Pratap  <ravi@ximian.com>
18936
18937         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
18938         (Invocation::BetterFunction): Implement.
18939         (Invocation::BetterConversion): Implement.
18940         (Invocation::ConversionExists): Skeleton, no implementation yet.
18941
18942         Okay, things work fine !
18943
18944 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
18945
18946         * typemanager.cs: declare and load enum_type, delegate_type and
18947         void_type. 
18948
18949         * expression.cs (Expression::Emit): Now emit returns a value that
18950         tells whether a value is left on the stack or not.  This strategy
18951         might be reveted tomorrow with a mechanism that would address
18952         multiple assignments.
18953         (Expression::report118): Utility routine to report mismatches on
18954         the ExprClass.
18955
18956         (Unary::Report23): Report impossible type/operator combination
18957         utility function.
18958
18959         (Unary::IsIncrementableNumber): Whether the type can be
18960         incremented or decremented with add.
18961         (Unary::ResolveOperator): Also allow enumerations to be bitwise
18962         complemented. 
18963         (Unary::ResolveOperator): Implement ++, !, ~,
18964
18965         (Invocation::Emit): Deal with new Emit convetion.
18966
18967         * All Expression derivatives: Updated their Emit method to return
18968         whether they leave values on the stack or not.
18969
18970         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
18971         stack for expressions that are statements. 
18972
18973 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
18974
18975         * expression.cs (LValue): New interface.  Must be implemented by
18976         LValue objects.
18977         (LocalVariableReference, ParameterReference, FieldExpr): Implement
18978         LValue interface.
18979
18980         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
18981         interface for generating code, simplifies the code.
18982
18983 2001-09-20  Ravi Pratap  <ravi@ximian.com>
18984
18985         * expression.cs (everywhere): Comment out return statements in ::Resolve
18986         methods to avoid the warnings.
18987
18988 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
18989
18990         * driver.cs (parse): Report error 2001 if we can not open the
18991         source file.
18992
18993         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
18994         not resolve it.
18995
18996         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
18997         object. 
18998
18999         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
19000         otherwise nested blocks end up with the same index.
19001
19002         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
19003
19004         * expression.cs:  Instead of having FIXMEs in the Resolve
19005         functions, throw exceptions so it is obvious that we are facing a
19006         bug. 
19007
19008         * cs-parser.jay (invocation_expression): Pass Location information.
19009
19010         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
19011         Use a basename for those routines because .NET does not like paths
19012         on them. 
19013
19014         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
19015         already defined.
19016
19017 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
19018
19019         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
19020         are loading the correct data types (throws an exception if not).
19021         (TypeManager::InitCoreTypes): Use CoreLookupType
19022
19023         * expression.cs (Unary::ResolveOperator): return the child
19024         expression for expressions which are just +expr.
19025         (Unary::ResolveOperator): Return negative literals for -LITERAL
19026         expressions (otherwise they are Unary {Literal}).
19027         (Invocation::Badness): Take into account `Implicit constant
19028         expression conversions'.
19029
19030         * literal.cs (LongLiteral): Implement long literal class.
19031         (IntLiteral): export the `Value' of the intliteral. 
19032
19033 2001-09-19  Ravi Pratap  <ravi@ximian.com>
19034
19035         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
19036
19037         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
19038         instead of 'Operator'
19039
19040         * expression.cs (Binary::ResolveOperator): Update accordingly.
19041         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
19042         and 'Minus'
19043
19044         * cs-parser.jay (unary_expression): Update to use the new names.
19045
19046         * gen-treedump.cs (GetUnary): Same here.
19047
19048         * expression.cs (Unary::Resolve): Implement.
19049         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
19050         operators are found instead of making noise ;-)
19051         (Unary::ResolveOperator): New method to do precisely the same thing which
19052         Binary::ResolveOperator does for Binary expressions.
19053         (Unary.method, .Arguments): Add.
19054         (Unary::OperName): Implement.   
19055         (Unary::ForceConversion): Copy and Paste !
19056
19057         * class.cs (Operator::Define): Fix a small bug for the case when we have 
19058         a unary operator.
19059
19060         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
19061         for the inbuilt operators. Only overloading works for now ;-)
19062
19063 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
19064
19065         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
19066         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
19067
19068         * expression.cs (This::Emit): Implement. 
19069         (This::Resolve): Implement.
19070         (TypeOf:Resolve): Implement.
19071         (Expression::ResolveSimpleName): Add an implicit this to instance
19072         field references. 
19073         (MemberAccess::Resolve): Deal with Parameters and Fields. 
19074         Bind instance variable to Field expressions.
19075         (FieldExpr::Instance): New field used to track the expression that
19076         represents the object instance.
19077         (FieldExpr::Resolve): Track potential errors from MemberLookup not
19078         binding 
19079         (FieldExpr::Emit): Implement.
19080
19081         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
19082         the last instruction contains a return opcode to avoid generating
19083         the last `ret' instruction (this generates correct code, and it is
19084         nice to pass the peverify output).
19085
19086         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
19087         initializer for static and instance variables.
19088         (Constructor::Emit): Allow initializer to be null in the case of
19089         static constructors.  Only emit initializer for instance
19090         constructors. 
19091
19092         (TypeContainer::FindMembers): Return a null array if there are no
19093         matches.
19094
19095         Also fix the code for the MemberTypes.Method branch, as it was not
19096         scanning that for operators (or tried to access null variables before).
19097
19098         * assign.cs (Assign::Emit): Handle instance and static fields. 
19099
19100         * TODO: Updated.
19101
19102         * driver.cs: Stop compilation if there are parse errors.
19103
19104         * cs-parser.jay (constructor_declaration): Provide default base
19105         initializer for non-static constructors.
19106         (constructor_declarator): Do not provide a default base
19107         initializers if none was specified.
19108         Catch the fact that constructors should not have parameters.
19109
19110         * class.cs: Do not emit parent class initializers for static
19111         constructors, that should be flagged as an error.
19112
19113 2001-09-18  Ravi Pratap  <ravi@ximian.com>
19114
19115         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
19116         Move back code into TypeContainer::Populate.
19117
19118 2001-09-18  Ravi Pratap  <ravi@ximian.com>
19119
19120         * class.cs (TypeContainer::AddConstructor): Fix the check to
19121         compare against Name, not Basename. 
19122         (Operator::OpType): Change Plus and Minus to Add and Subtract.
19123
19124         * cs-parser.jay : Update accordingly.
19125
19126         * class.cs (TypeContainer::FindMembers): For the case where we are searching
19127         for methods, don't forget to look into the operators too.
19128         (RegisterMethodBuilder): Helper method to take care of this for
19129         methods, constructors and operators.
19130         (Operator::Define): Completely revamp.
19131         (Operator.OperatorMethod, MethodName): New fields.
19132         (TypeContainer::Populate): Move the registering of builders into
19133         RegisterMethodBuilder.
19134         (Operator::Emit): Re-write.
19135
19136         * expression.cs (Binary::Emit): Comment out code path to emit method
19137         invocation stuff for the case when we have a user defined operator. I am
19138         just not able to get it right !
19139
19140 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
19141
19142         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
19143         argument. 
19144
19145         (Expression::MemberLookup): Provide a version that allows to
19146         specify the MemberTypes and BindingFlags. 
19147
19148         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
19149         so it was not fetching variable information from outer blocks.
19150
19151         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
19152         Beforefieldinit as it was buggy.
19153
19154         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
19155         that Ravi put here.  
19156
19157         * class.cs (Constructor::Emit): Only emit if block is not null.
19158         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
19159         deal with this by semantically definining it as if the user had
19160         done it.
19161
19162         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
19163         constructors as we now "emit" them at a higher level.
19164
19165         (TypeContainer::DefineDefaultConstructor): Used to define the
19166         default constructors if none was provided.
19167
19168         (ConstructorInitializer): Add methods Resolve and Emit. 
19169
19170         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
19171
19172 2001-09-17  Ravi Pratap  <ravi@ximian.com>
19173
19174         * class.cs (TypeContainer::EmitDefaultConstructor): Register
19175         the default constructor builder with our hashtable for methodbuilders
19176         to methodcores.
19177
19178         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
19179         and argument_count is 0 in which case we have a match.
19180         (Binary::ResolveOperator): More null checking and miscellaneous coding
19181         style cleanup.
19182
19183 2001-09-17  Ravi Pratap  <ravi@ximian.com>
19184
19185         * rootcontext.cs (IsNameSpace): Compare against null.
19186
19187         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
19188
19189         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
19190         and Unary::Operator.
19191
19192         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
19193         accordingly.
19194
19195         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
19196         we have overloaded operators.
19197         (Binary::ResolveOperator): Implement the part which does the operator overload
19198         resolution.
19199
19200         * class.cs (Operator::Emit): Implement.
19201         (TypeContainer::Emit): Emit the operators we have too.
19202
19203         * expression.cs (Binary::Emit): Update to emit the appropriate code for
19204         the case when we have a user-defined operator.
19205
19206 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
19207
19208         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
19209
19210 2001-09-16  Ravi Pratap  <ravi@ximian.com>
19211
19212         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
19213         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
19214         (Constructor::Emit): Implement.
19215         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
19216         if we have no work to do. 
19217         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
19218         Emit method.
19219
19220         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
19221         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
19222
19223         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
19224         of parent.parent.
19225
19226 2001-09-15  Ravi Pratap  <ravi@ximian.com>
19227
19228         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
19229         in the source.
19230         (Tree::RecordNamespace): Method to do what the name says ;-)
19231         (Tree::Namespaces): Property to get at the namespaces hashtable.
19232
19233         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
19234         keep track.
19235
19236         * rootcontext.cs (IsNamespace): Fixed it :-)
19237
19238 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
19239
19240         * class.cs (TypeContainer::FindMembers): Add support for
19241         constructors. 
19242         (MethodCore): New class that encapsulates both the shared aspects
19243         of a Constructor and a Method.  
19244         (Method, Constructor): Factored pieces into MethodCore.
19245
19246         * driver.cs: Added --fatal which makes errors throw exceptions.
19247         Load System assembly as well as part of the standard library.
19248
19249         * report.cs: Allow throwing exceptions on errors for debugging.
19250
19251         * modifiers.cs: Do not use `parent', instead use the real type
19252         container to evaluate permission settings.
19253
19254         * class.cs: Put Ravi's patch back in.  He is right, and we will
19255         have to cope with the
19256
19257 2001-09-14  Ravi Pratap  <ravi@ximian.com>
19258
19259         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
19260         FamORAssem, not FamANDAssem.
19261
19262 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
19263
19264         * driver.cs: Added --parse option that only parses its input files
19265         and terminates.
19266
19267         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
19268         incorrect.  IsTopLevel is not used to tell whether an object is
19269         root_types or not (that can be achieved by testing this ==
19270         root_types).  But to see if this is a top-level *class* (not
19271         necessarly our "toplevel" container). 
19272
19273 2001-09-14  Ravi Pratap  <ravi@ximian.com>
19274
19275         * enum.cs (Enum::Define): Modify to call the Lookup method on the
19276         parent instead of a direct call to GetType.
19277
19278 2001-09-14  Ravi Pratap  <ravi@ximian.com>
19279
19280         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
19281         Modifiers.TypeAttr. This should just be a call to that method.
19282
19283         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
19284         object so that we can determine if we are top-level or not.
19285
19286         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
19287         TypeContainer too.
19288
19289         * enum.cs (Enum::Define): Ditto.
19290
19291         * modifiers.cs (FieldAttr): Re-write.
19292
19293         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
19294         (TypeContainer::HaveStaticConstructor): New property to provide access
19295         to precisely that info.
19296
19297         * modifiers.cs (MethodAttr): Re-write.
19298         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
19299
19300         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
19301         of top-level types as claimed.
19302
19303 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
19304
19305         * expression.cs (MemberLookup): Fruitless attempt to lookup
19306         constructors.  Maybe I need to emit default constructors?  That
19307         might be it (currently .NET emits this for me automatically).
19308         (Invocation::OverloadResolve): Cope with Arguments == null.
19309         (Invocation::EmitArguments): new function, shared by the new
19310         constructor and us.
19311         (Invocation::Emit): Handle static and instance methods.  Emit
19312         proper call instruction for virtual or non-virtual invocations.
19313         (New::Emit): Implement.
19314         (New::Resolve): Implement.
19315         (MemberAccess:Resolve): Implement.
19316         (MethodGroupExpr::InstanceExpression): used conforming to the spec
19317         to track instances.
19318         (FieldExpr::Resolve): Set type.
19319
19320         * support.cs: Handle empty arguments.
19321                 
19322         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
19323         SimpleLookup): Auxiliary routines to help parse a qualifier
19324         identifier.  
19325
19326         Update qualifier_identifier rule.
19327
19328         * codegen.cs: Removed debugging messages.
19329
19330         * class.cs: Make this a global thing, this acts just as a "key" to
19331         objects that we might have around.
19332
19333         (Populate): Only initialize method_builders_to_methods once.
19334
19335         * expression.cs (PropertyExpr): Initialize type from the
19336         PropertyType. 
19337
19338         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
19339         Resolve pattern.  Attempt to implicitly convert value to boolean.
19340         Emit code.
19341
19342         * expression.cs: Set the type for the int32/int32 argument case.
19343         (Binary::ResolveOperator): Set the return type to boolean for
19344         comparission operators
19345
19346         * typemanager.cs: Remove debugging print code.
19347
19348         (Invocation::Resolve): resolve type.
19349
19350         * class.cs: Allocate a MemberInfo of the correct size, as the code
19351         elsewhere depends on the test to reflect the correct contents.
19352
19353         (Method::) Keep track of parameters, due to System.Reflection holes
19354
19355         (TypeContainer::Populate): Keep track of MethodBuilders to Method
19356         mapping here.
19357
19358         (TypeContainer::FindMembers): Use ArrayList and then copy an array
19359         of the exact size and return that.
19360
19361         (Class::LookupMethodByBuilder): New function that maps
19362         MethodBuilders to its methods.  Required to locate the information
19363         on methods because System.Reflection bit us again.
19364
19365         * support.cs: New file, contains an interface ParameterData and
19366         two implementations: ReflectionParameters and InternalParameters
19367         used to access Parameter information.  We will need to grow this
19368         as required.
19369
19370         * expression.cs (Invocation::GetParameterData): implement a cache
19371         and a wrapper around the ParameterData creation for methods. 
19372         (Invocation::OverloadResolve): Use new code.
19373
19374 2001-09-13  Ravi Pratap  <ravi@ximian.com>
19375
19376         * class.cs (TypeContainer::EmitField): Remove and move into 
19377         (Field::Define): here and modify accordingly.
19378         (Field.FieldBuilder): New member.
19379         (TypeContainer::Populate): Update accordingly.
19380         (TypeContainer::FindMembers): Implement.
19381
19382 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
19383
19384         * statement.cs: (VariableInfo::VariableType): New field to be
19385         initialized with the full type once it is resolved. 
19386
19387 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
19388
19389         * parameter.cs (GetParameterInfo): Use a type cache to compute
19390         things only once, and to reuse this information
19391
19392         * expression.cs (LocalVariableReference::Emit): Implement.
19393         (OpcodeCast::Emit): fix.
19394
19395         (ParameterReference::Resolve): Implement.
19396         (ParameterReference::Emit): Implement.
19397
19398         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
19399         that are expressions need to stay as Expressions.
19400
19401         * typemanager.cs (CSharpName): Returns the C# name of a type if
19402         possible. 
19403
19404         * expression.cs (Expression::ConvertImplicit): New function that
19405         implements implicit type conversions.
19406
19407         (Expression::ImplicitReferenceConversion): Implements implicit
19408         reference conversions.
19409
19410         (EmptyCast): New type for transparent casts.
19411
19412         (OpcodeCast): New type for casts of types that are performed with
19413         a sequence of bytecodes.
19414
19415         (BoxedCast): New type used for casting value types into reference
19416         types.  Emits a box opcode.
19417
19418         (Binary::DoNumericPromotions): Implements numeric promotions of
19419         and computation of the Binary::Type.
19420
19421         (Binary::EmitBranchable): Optimization.
19422
19423         (Binary::Emit): Implement code emission for expressions.
19424
19425         * typemanager.cs (TypeManager): Added two new core types: sbyte
19426         and byte.
19427
19428 2001-09-12  Ravi Pratap  <ravi@ximian.com>
19429
19430         * class.cs (TypeContainer::FindMembers): Method which does exactly
19431         what Type.FindMembers does, only we don't have to use reflection. No
19432         implementation yet.
19433
19434         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
19435         typecontainer objects as we need to get at them.
19436         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
19437
19438         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
19439         typecontainer object.
19440
19441         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
19442         of just a Report object.
19443
19444 2001-09-11  Ravi Pratap  <ravi@ximian.com>
19445
19446         * class.cs (Event::Define): Go back to using the prefixes "add_" and
19447         "remove_"
19448         (TypeContainer::Populate): Now define the delegates of the type too.
19449         (TypeContainer.Delegates): Property to access the list of delegates defined
19450         in the type.
19451
19452         * delegates.cs (Delegate::Define): Implement partially.
19453
19454         * modifiers.cs (TypeAttr): Handle more flags.
19455
19456 2001-09-11  Ravi Pratap  <ravi@ximian.com>
19457
19458         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
19459         and not <=
19460         (Operator::Define): Re-write logic to get types by using the LookupType method
19461         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
19462         (Indexer::Define): Ditto.
19463         (Event::Define): Ditto.
19464         (Property::Define): Ditto.
19465
19466 2001-09-10  Ravi Pratap  <ravi@ximian.com>
19467
19468         * class.cs (TypeContainer::Populate): Now define operators too. 
19469         (TypeContainer.Operators): New property to access the list of operators
19470         in a type.
19471         (Operator.OperatorMethodBuilder): New member to hold the method builder
19472         for the operator we are defining.
19473         (Operator::Define): Implement.
19474
19475 2001-09-10  Ravi Pratap  <ravi@ximian.com>
19476
19477         * class.cs (Event::Define): Make the prefixes of the accessor methods
19478         addOn_ and removeOn_ 
19479
19480         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
19481         of the location being passed in too. Ideally, this should go later since all
19482         error reporting should be done through the Report object.
19483
19484         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
19485         (Populate): Iterate thru the indexers we have and define them too.
19486         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
19487         for the get and set accessors.
19488         (Indexer::Define): Implement.
19489
19490 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
19491
19492         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
19493         my previous implementation, did not work.
19494
19495         * typemanager.cs: Add a couple of missing types (the longs).
19496
19497         * literal.cs: Use TypeManager.bool_type instead of getting it.
19498
19499         * expression.cs (EventExpr): New kind of expressions.
19500         (Expressio::ExprClassFromMemberInfo): finish
19501
19502 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
19503
19504         * assign.cs: Emit stores to static fields differently.
19505
19506 2001-09-08  Ravi Pratap  <ravi@ximian.com>
19507
19508         * Merge in changes and adjust code to tackle conflicts. Backed out my
19509         code in Assign::Resolve ;-) 
19510
19511 2001-09-08  Ravi Pratap  <ravi@ximian.com>
19512
19513         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
19514         instead Report.Error and also pass in the location.
19515         (CSharpParser::Lexer): New readonly property to return the reference
19516         to the Tokenizer object.
19517         (declare_local_variables): Use Report.Error with location instead of plain 
19518         old error.
19519         (CheckDef): Ditto.
19520
19521         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
19522         (Operator.CheckBinaryOperator): Ditto.
19523
19524         * cs-parser.jay (operator_declarator): Update accordingly.
19525
19526         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
19527         (CheckBinaryOperator): Same here.
19528
19529         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
19530         on the name without any prefixes of namespace names etc. This is because we
19531         already might have something already fully qualified like 
19532         'System.Console.WriteLine'
19533
19534         * assign.cs (Resolve): Begin implementation. Stuck ;-)
19535
19536 2001-09-07  Ravi Pratap  <ravi@ximian.com>
19537
19538         * cs-tokenizer.cs (location): Return a string which also contains
19539         the file name.
19540
19541         * expression.cs (ElementAccess): New class for expressions of the
19542         type 'element access.'
19543         (BaseAccess): New class for expressions of the type 'base access.'
19544         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
19545         respectively.
19546
19547         * cs-parser.jay (element_access): Implement action.
19548         (base_access): Implement actions.
19549         (checked_expression, unchecked_expression): Implement.
19550
19551         * cs-parser.jay (local_variable_type): Correct and implement.
19552         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
19553
19554         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
19555
19556         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
19557         name and the specifiers.
19558
19559         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
19560
19561         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
19562         making them all public ;-)
19563
19564         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
19565         class anyways.
19566
19567 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
19568
19569         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
19570         PropertyExprs.
19571         (FieldExpr, PropertyExprs): New resolved expressions.
19572         (SimpleName::MemberStaticCheck): Perform static checks for access
19573         to non-static fields on static methods. Maybe this should be
19574         generalized for MemberAccesses. 
19575         (SimpleName::ResolveSimpleName): More work on simple name
19576         resolution. 
19577
19578         * cs-parser.jay (primary_expression/qualified_identifier): track
19579         the parameter index.
19580
19581         * codegen.cs (CodeGen::Save): Catch save exception, report error.
19582         (EmitContext::EmitBoolExpression): Chain to expression generation
19583         instead of temporary hack.
19584         (::EmitStatementExpression): Put generic expression code generation.
19585
19586         * assign.cs (Assign::Emit): Implement variable assignments to
19587         local variables, parameters and fields.
19588
19589 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
19590
19591         * statement.cs (Block::GetVariableInfo): New method, returns the
19592         VariableInfo for a variable name in a block.
19593         (Block::GetVariableType): Implement in terms of GetVariableInfo
19594
19595         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
19596         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
19597
19598 2001-09-06  Ravi Pratap  <ravi@ximian.com>
19599
19600         * cs-parser.jay (operator_declaration): Continue on my quest : update
19601         to take attributes argument.
19602         (event_declaration): Ditto.
19603         (enum_declaration): Ditto.
19604         (indexer_declaration): Ditto.
19605
19606         * class.cs (Operator::Operator): Update constructor accordingly.
19607         (Event::Event): Ditto.
19608
19609         * delegate.cs (Delegate::Delegate): Same here.
19610
19611         * enum.cs (Enum::Enum): Same here.
19612
19613 2001-09-05  Ravi Pratap  <ravi@ximian.com>
19614
19615         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
19616
19617         * ../tests/cs0658.cs : New file to demonstrate error 0658.
19618
19619         * attribute.cs (Attributes): New class to encapsulate all attributes which were
19620         being passed around as an arraylist.
19621         (Attributes::AddAttribute): Method to add attribute sections.
19622
19623         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
19624         (struct_declaration): Update accordingly.
19625         (constant_declaration): Update.
19626         (field_declaration): Update.
19627         (method_header): Update.
19628         (fixed_parameter): Update.
19629         (parameter_array): Ditto.
19630         (property_declaration): Ditto.
19631         (destructor_declaration): Ditto.
19632
19633         * class.cs (Struct::Struct): Update constructors accordingly.
19634         (Class::Class): Ditto.
19635         (Field::Field): Ditto.
19636         (Method::Method): Ditto.
19637         (Property::Property): Ditto.
19638         (TypeContainer::OptAttribute): update property's return type.
19639
19640         * interface.cs (Interface.opt_attributes): New member.
19641         (Interface::Interface): Update to take the extra Attributes argument.
19642
19643         * parameter.cs (Parameter::Parameter): Ditto.
19644
19645         * constant.cs (Constant::Constant): Ditto.
19646
19647         * interface.cs (InterfaceMemberBase): New OptAttributes field.
19648         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
19649         the attributes as a parameter.
19650         (InterfaceProperty): Update constructor call.
19651         (InterfaceEvent): Ditto.
19652         (InterfaceMethod): Ditto.
19653         (InterfaceIndexer): Ditto.
19654
19655         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
19656         pass the attributes too.
19657         (interface_event_declaration): Ditto.
19658         (interface_property_declaration): Ditto.
19659         (interface_method_declaration): Ditto.
19660         (interface_declaration): Ditto.
19661
19662 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
19663
19664         * class.cs (Method::Define): Track the "static Main" definition to
19665         create an entry point. 
19666
19667         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
19668         EntryPoint if we find it. 
19669
19670         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
19671         (EmitContext::ig): Make this variable public.
19672
19673         * driver.cs: Make the default output file be the first file name
19674         with the .exe extension.  
19675
19676         Detect empty compilations
19677
19678         Handle various kinds of output targets.  Handle --target and
19679         rename -t to --dumper.
19680
19681         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
19682         methods inherited from Expression return now an Expression.  This
19683         will is used during the tree rewriting as we resolve them during
19684         semantic analysis.
19685
19686         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
19687         the spec.  Missing entirely is the information about
19688         accessability of elements of it.
19689
19690         (Expression::ExprClassFromMemberInfo): New constructor for
19691         Expressions that creates a fully initialized Expression based on
19692         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
19693         a Type.
19694
19695         (Invocation::Resolve): Begin implementing resolution of invocations.
19696
19697         * literal.cs (StringLiteral):  Implement Emit.
19698
19699 2001-09-05  Ravi Pratap  <ravi@ximian.com>
19700
19701         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
19702         member.
19703
19704 2001-09-04  Ravi Pratap  <ravi@ximian.com>
19705
19706         * cs-parser.jay (attribute_arguments): Implement actions.
19707         (attribute): Fix bug in production. Implement action.
19708         (attribute_list): Implement.
19709         (attribute_target): Implement.
19710         (attribute_target_specifier, opt_target_specifier): Implement
19711         (CheckAttributeTarget): New method to check if the attribute target
19712         is valid.
19713         (attribute_section): Implement.
19714         (opt_attributes): Implement.
19715
19716         * attribute.cs : New file to handle attributes.
19717         (Attribute): Class to hold attribute info.
19718
19719         * cs-parser.jay (opt_attribute_target_specifier): Remove production
19720         (attribute_section): Modify production to use 2 different rules to 
19721         achieve the same thing. 1 s/r conflict down !
19722         Clean out commented, useless, non-reducing dimension_separator rules.
19723
19724         * class.cs (TypeContainer.attributes): New member to hold list
19725         of attributes for a type.
19726         (Struct::Struct): Modify to take one more argument, the attribute list.
19727         (Class::Class): Ditto.
19728         (Field::Field): Ditto.
19729         (Method::Method): Ditto.
19730         (Property::Property): Ditto.
19731
19732         * cs-parser.jay (struct_declaration): Update constructor call to
19733         pass in the attributes too.
19734         (class_declaration): Ditto.
19735         (constant_declaration): Ditto.
19736         (field_declaration): Ditto.
19737         (method_header): Ditto.
19738         (fixed_parameter): Ditto.
19739         (parameter_array): Ditto.
19740         (property_declaration): Ditto.
19741
19742         * constant.cs (Constant::Constant): Update constructor similarly.
19743         Use System.Collections.
19744
19745         * parameter.cs (Parameter::Parameter): Update as above.
19746
19747 2001-09-02  Ravi Pratap  <ravi@ximian.com>
19748
19749         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
19750         (TypeContainer.delegates): New member to hold list of delegates.
19751
19752         * cs-parser.jay (delegate_declaration): Implement the action correctly 
19753         this time as I seem to be on crack ;-)
19754
19755 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
19756
19757         * rootcontext.cs (RootContext::IsNamespace): new function, used to
19758         tell whether an identifier represents a namespace.
19759
19760         * expression.cs (NamespaceExpr): A namespace expression, used only
19761         temporarly during expression resolution.
19762         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
19763         utility functions to resolve names on expressions.
19764
19765 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
19766
19767         * codegen.cs: Add hook for StatementExpressions. 
19768
19769         * class.cs: Fix inverted test for static flag in methods.
19770
19771 2001-09-02  Ravi Pratap  <ravi@ximian.com>
19772
19773         * class.cs (Operator::CheckUnaryOperator): Correct error number used
19774         to make it coincide with MS' number.
19775         (Operator::CheckBinaryOperator): Ditto.
19776
19777         * ../errors/errors.txt : Remove error numbers added earlier.
19778
19779         * ../errors/cs1019.cs : Test case for error # 1019
19780
19781         * ../errros/cs1020.cs : Test case for error # 1020
19782
19783         * cs-parser.jay : Clean out commented cruft.
19784         (dimension_separators, dimension_separator): Comment out. Ostensibly not
19785         used anywhere - non-reducing rule.
19786         (namespace_declarations): Non-reducing rule - comment out.
19787
19788         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
19789         with TypeContainer::AddEnum.
19790
19791         * delegate.cs : New file for delegate handling classes.
19792         (Delegate): Class for declaring delegates.
19793
19794         * makefile : Update.
19795
19796         * cs-parser.jay (delegate_declaration): Implement.
19797
19798 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
19799
19800         * class.cs (Event::Define): Implement.
19801         (Event.EventBuilder): New member.
19802
19803         * class.cs (TypeContainer::Populate): Update to define all enums and events
19804         we have.
19805         (Events): New property for the events arraylist we hold. Shouldn't we move to using
19806         readonly fields for all these cases ?
19807
19808 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
19809
19810         * class.cs (Property): Revamp to use the convention of making fields readonly.
19811         Accordingly modify code elsewhere.
19812
19813         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
19814         the Define method of the Property class.
19815
19816         * class.cs : Clean up applied patch and update references to variables etc. Fix 
19817         trivial bug.
19818         (TypeContainer::Populate): Update to define all the properties we have. Also
19819         define all enumerations.
19820
19821         * enum.cs (Define): Implement.
19822
19823 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
19824
19825         * cs-parser.jay (overloadable_operator): The semantic value is an
19826         enum of the Operator class.
19827         (operator_declarator): Implement actions.
19828         (operator_declaration): Implement.
19829
19830         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
19831         validity of definitions.
19832         (Operator::CheckBinaryOperator): Static method to check for binary operators
19833         (TypeContainer::AddOperator): New method to add an operator to a type.
19834
19835         * cs-parser.jay (indexer_declaration): Added line to actually call the
19836         AddIndexer method so it gets added ;-)
19837
19838         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
19839         already taken care of by the MS compiler ?  
19840
19841 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
19842
19843         * class.cs (Operator): New class for operator declarations.
19844         (Operator::OpType): Enum for the various operators.
19845
19846 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
19847
19848         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
19849         ostensibly handle this in semantic analysis.
19850
19851         * cs-parser.jay (general_catch_clause): Comment out
19852         (specific_catch_clauses, specific_catch_clause): Ditto.
19853         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
19854         (catch_args, opt_catch_args): New productions.
19855         (catch_clause): Rewrite to use the new productions above
19856         (catch_clauses): Modify accordingly.
19857         (opt_catch_clauses): New production to use in try_statement
19858         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
19859         and re-write the code in the actions to extract the specific and
19860         general catch clauses by being a little smart ;-)
19861
19862         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
19863         Hooray, try and catch statements parse fine !
19864
19865 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
19866
19867         * statement.cs (Block::GetVariableType): Fix logic to extract the type
19868         string from the hashtable of variables.
19869
19870         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
19871         I end up making that mistake ;-)
19872         (catch_clauses): Fixed gross error which made Key and Value of the 
19873         DictionaryEntry the same : $1 !!
19874
19875 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
19876
19877         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
19878
19879         * cs-parser.jay (event_declaration): Correct to remove the semicolon
19880         when the add and remove accessors are specified. 
19881
19882 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
19883
19884         * cs-parser.jay (IndexerDeclaration): New helper class to hold
19885         information about indexer_declarator.
19886         (indexer_declarator): Implement actions.
19887         (parsing_indexer): New local boolean used to keep track of whether
19888         we are parsing indexers or properties. This is necessary because 
19889         implicit_parameters come into picture even for the get accessor in the 
19890         case of an indexer.
19891         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
19892
19893         * class.cs (Indexer): New class for indexer declarations.
19894         (TypeContainer::AddIndexer): New method to add an indexer to a type.
19895         (TypeContainer::indexers): New member to hold list of indexers for the
19896         type.
19897
19898 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
19899
19900         * cs-parser.jay (add_accessor_declaration): Implement action.
19901         (remove_accessor_declaration): Implement action.
19902         (event_accessors_declaration): Implement
19903         (variable_declarators): swap statements for first rule - trivial.
19904
19905         * class.cs (Event): New class to hold information about event
19906         declarations.
19907         (TypeContainer::AddEvent): New method to add an event to a type
19908         (TypeContainer::events): New member to hold list of events.
19909
19910         * cs-parser.jay (event_declaration): Implement actions.
19911
19912 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
19913
19914         * cs-parser.jay (dim_separators): Implement. Make it a string
19915         concatenating all the commas together, just as they appear.
19916         (opt_dim_separators): Modify accordingly
19917         (rank_specifiers): Update accordingly. Basically do the same
19918         thing - instead, collect the brackets here.
19919         (opt_rank_sepcifiers): Modify accordingly.
19920         (array_type): Modify to actually return the complete type string
19921         instead of ignoring the rank_specifiers.
19922         (expression_list): Implement to collect the expressions
19923         (variable_initializer): Implement. We make it a list of expressions
19924         essentially so that we can handle the array_initializer case neatly too.
19925         (variable_initializer_list): Implement.
19926         (array_initializer): Make it a list of variable_initializers
19927         (opt_array_initializer): Modify accordingly.
19928
19929         * expression.cs (New::NType): Add enumeration to help us
19930         keep track of whether we have an object/delegate creation
19931         or an array creation.
19932         (New:NewType, New::Rank, New::Indices, New::Initializers): New
19933         members to hold data about array creation.
19934         (New:New): Modify to update NewType
19935         (New:New): New Overloaded contructor for the array creation
19936         case.
19937
19938         * cs-parser.jay (array_creation_expression): Implement to call
19939         the overloaded New constructor.
19940
19941 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
19942
19943         * class.cs (TypeContainer::Constructors): Return member
19944         constructors instead of returning null.
19945
19946 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
19947
19948         * typemanager.cs (InitCoreTypes): Initialize the various core
19949         types after we have populated the type manager with the user
19950         defined types (this distinction will be important later while
19951         compiling corlib.dll)
19952
19953         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
19954         on Expression Classification.  Now all expressions have a method
19955         `Resolve' and a method `Emit'.
19956
19957         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
19958         generation from working.     Also add some temporary debugging
19959         code. 
19960
19961 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
19962
19963         * codegen.cs: Lots of code generation pieces.  This is only the
19964         beginning, will continue tomorrow with more touches of polish.  We
19965         handle the fundamentals of if, while, do, for, return.  Others are
19966         trickier and I need to start working on invocations soon.
19967
19968         * gen-treedump.cs: Bug fix, use s.Increment here instead of
19969         s.InitStatement. 
19970
19971         * codegen.cs (EmitContext): New struct, used during code
19972         emission to keep a context.   Most of the code generation will be
19973         here. 
19974
19975         * cs-parser.jay: Add embedded blocks to the list of statements of
19976         this block.  So code generation proceeds in a top down fashion.
19977
19978 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
19979
19980         * statement.cs: Add support for multiple child blocks.
19981
19982 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
19983
19984         * codegen.cs (EmitCode): New function, will emit the code for a
19985         Block of code given a TypeContainer and its ILGenerator. 
19986
19987         * statement.cs (Block): Standard public readonly optimization.
19988         (Block::Block constructors): Link children. 
19989         (Block::Child): Child Linker.
19990         (Block::EmitVariables): Emits IL variable declarations.
19991
19992         * class.cs: Drop support for MethodGroups here, delay until
19993         Semantic Analysis.
19994         (Method::): Applied the same simplification that I did before, and
19995         move from Properties to public readonly fields.
19996         (Method::ParameterTypes): Returns the parameter types for the
19997         function, and implements a cache that will be useful later when I
19998         do error checking and the semantic analysis on the methods is
19999         performed.
20000         (Constructor::GetCallingConvention): Renamed from CallingConvetion
20001         and made a method, optional argument tells whether this is a class
20002         or a structure to apply the `has-this' bit.
20003         (Method::GetCallingConvention): Implement, returns the calling
20004         convention. 
20005         (Method::Define): Defines the type, a second pass is performed
20006         later to populate the methods.
20007
20008         (Constructor::ParameterTypes): implement a cache similar to the
20009         one on Method::ParameterTypes, useful later when we do semantic
20010         analysis. 
20011
20012         (TypeContainer::EmitMethod):  New method.  Emits methods.
20013
20014         * expression.cs: Removed MethodGroup class from here.
20015
20016         * parameter.cs (Parameters::GetCallingConvention): new method.
20017
20018 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
20019
20020         * class.cs (TypeContainer::Populate): Drop RootContext from the
20021         argument. 
20022
20023         (Constructor::CallingConvention): Returns the calling convention.
20024         (Constructor::ParameterTypes): Returns the constructor parameter
20025         types. 
20026
20027         (TypeContainer::AddConstructor): Keep track of default constructor
20028         and the default static constructor.
20029
20030         (Constructor::) Another class that starts using `public readonly'
20031         instead of properties. 
20032
20033         (Constructor::IsDefault): Whether this is a default constructor. 
20034
20035         (Field::) use readonly public fields instead of properties also.
20036
20037         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
20038         track of static constructors;  If none is used, turn on
20039         BeforeFieldInit in the TypeAttributes. 
20040
20041         * cs-parser.jay (opt_argument_list): now the return can be null
20042         for the cases where there are no arguments. 
20043
20044         (constructor_declarator): If there is no implicit `base' or
20045         `this', then invoke the default parent constructor. 
20046
20047         * modifiers.cs (MethodAttr): New static function maps a set of
20048         modifiers flags into a MethodAttributes enum
20049         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
20050         MethodAttr, TypeAttr to represent the various mappings where the
20051         modifiers are used.
20052         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
20053
20054 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
20055
20056         * parameter.cs (GetParameterInfo): Fix bug where there would be no
20057         method arguments.
20058
20059         * interface.cs (PopulateIndexer): Implemented the code generator
20060         for interface indexers.
20061
20062 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
20063
20064         * interface.cs (InterfaceMemberBase): Now we track the new status
20065         here.  
20066
20067         (PopulateProperty): Implement property population.  Woohoo!  Got
20068         Methods and Properties going today. 
20069
20070         Removed all the properties for interfaces, and replaced them with
20071         `public readonly' fields. 
20072
20073 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
20074
20075         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
20076         initialize their hashtables/arraylists only when they are needed
20077         instead of doing this always.
20078
20079         * parameter.cs: Handle refs and out parameters.
20080
20081         * cs-parser.jay: Use an ArrayList to construct the arguments
20082         instead of the ParameterCollection, and then cast that to a
20083         Parameter[] array.
20084
20085         * parameter.cs: Drop the use of ParameterCollection and use
20086         instead arrays of Parameters.
20087
20088         (GetParameterInfo): Use the Type, not the Name when resolving
20089         types. 
20090
20091 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
20092
20093         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
20094         and instead use public readonly fields.
20095
20096         * class.cs: Put back walking code for type containers.
20097
20098 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
20099
20100         * class.cs (MakeConstant): Code to define constants.
20101
20102         * rootcontext.cs (LookupType): New function.  Used to locate types 
20103
20104
20105 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
20106
20107         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
20108         this System.Reflection code is.  Kudos to Microsoft
20109
20110         * typemanager.cs: Implement a type cache and avoid loading all
20111         types at boot time.  Wrap in LookupType the internals.  This made
20112         the compiler so much faster.  Wow.  I rule!
20113
20114         * driver.cs: Make sure we always load mscorlib first (for
20115         debugging purposes, nothing really important).
20116
20117         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
20118         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
20119
20120         * rootcontext.cs: Lookup types on their namespace;  Lookup types
20121         on namespaces that have been imported using the `using' keyword.
20122
20123         * class.cs (TypeContainer::TypeAttr): Virtualize.
20124         (Class::TypeAttr): Return attributes suitable for this bad boy.
20125         (Struct::TypeAttr): ditto.
20126         Handle nested classes.
20127         (TypeContainer::) Remove all the type visiting code, it is now
20128         replaced with the rootcontext.cs code
20129
20130         * rootcontext.cs (GetClassBases): Added support for structs. 
20131
20132 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
20133
20134         * interface.cs, statement.cs, class.cs, parameter.cs,
20135         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
20136         Drop use of TypeRefs, and use strings instead.
20137
20138 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
20139
20140         * rootcontext.cs: 
20141
20142         * class.cs (Struct::Struct): set the SEALED flags after
20143         checking the modifiers.
20144         (TypeContainer::TypeAttr): new property, returns the
20145         TypeAttributes for a class.  
20146
20147         * cs-parser.jay (type_list): Oops, list production was creating a
20148         new list of base types.
20149
20150         * rootcontext.cs (StdLib): New property.
20151         (GetInterfaceTypeByName): returns an interface by type name, and
20152         encapsulates error handling here.
20153         (GetInterfaces): simplified.
20154         (ResolveTree): Encapsulated all the tree resolution here.
20155         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
20156         types. 
20157
20158         * driver.cs: Add support for --nostdlib, to avoid loading the
20159         default assemblies.
20160         (Main): Do not put tree resolution here. 
20161
20162         * rootcontext.cs: Beginning of the class resolution.
20163
20164 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
20165
20166         * rootcontext.cs: Provide better error reporting. 
20167
20168         * cs-parser.jay (interface_base): set our $$ to be interfaces.
20169
20170         * rootcontext.cs (CreateInterface): Handle the case where there
20171         are no parent interfaces.
20172
20173         (CloseTypes): Routine to flush types at the end.
20174         (CreateInterface): Track types.
20175         (GetInterfaces): Returns an array of Types from the list of
20176         defined interfaces.
20177
20178         * typemanager.c (AddUserType): Mechanism to track user types (puts
20179         the type on the global type hash, and allows us to close it at the
20180         end). 
20181
20182 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
20183
20184         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
20185         RecordInterface instead.
20186
20187         * cs-parser.jay: Updated to reflect changes above.
20188
20189         * decl.cs (Definition): Keep track of the TypeBuilder type that
20190         represents this type here.  Not sure we will use it in the long
20191         run, but wont hurt for now.
20192
20193         * driver.cs: Smaller changes to accomodate the new code.
20194
20195         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
20196         when done. 
20197
20198         * rootcontext.cs (CreateInterface):  New method, used to create
20199         the System.TypeBuilder type for interfaces.
20200         (ResolveInterfaces): new entry point to resolve the interface
20201         hierarchy. 
20202         (CodeGen): Property, used to keep track of the code generator.
20203
20204 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
20205
20206         * cs-parser.jay: Add a second production for delegate_declaration
20207         with `VOID'.
20208
20209         (enum_body): Put an opt_comma here instead of putting it on
20210         enum_body or enum_member_declarations so we can handle trailing
20211         commas on enumeration members.  Gets rid of a shift/reduce.
20212
20213         (type_list): Need a COMMA in the middle.
20214
20215         (indexer_declaration): Tell tokenizer to recognize get/set
20216
20217         * Remove old targets.
20218
20219         * Re-add the parser target.
20220
20221 2001-07-13  Simon Cozens <simon@simon-cozens.org>
20222
20223         * cs-parser.jay: Add precendence rules for a number of operators
20224         ot reduce the number of shift/reduce conflicts in the grammar.
20225
20226 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
20227
20228         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
20229         and put it here.
20230
20231         Get rid of old crufty code.
20232
20233         * rootcontext.cs: Use this to keep track of the parsed
20234         representation and the defined types available to the program. 
20235
20236         * gen-treedump.cs: adjust for new convention.
20237
20238         * type.cs: Split out the type manager, and the assembly builder
20239         from here. 
20240
20241         * typemanager.cs: the type manager will live here now.
20242
20243         * cil-codegen.cs: And the code generator here. 
20244
20245 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
20246
20247         * makefile: Fixed up for easy making.
20248
20249 2001-07-13  Simon Cozens <simon@simon-cozens.org>
20250
20251         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
20252         the 
20253
20254         (unary_expression): Expand pre_increment_expression and
20255         post_decrement_expression to reduce a shift/reduce.
20256
20257 2001-07-11  Simon Cozens
20258
20259         * cs-tokenizer.cs: Hex numbers should begin with a 0.
20260
20261         Improve allow_keyword_as_indent name.
20262
20263 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
20264
20265         * Adjustments for Beta2. 
20266
20267 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
20268
20269         * decl.cs: Added `Define' abstract method.
20270         (InTransit): new property, used to catch recursive definitions. 
20271
20272         * interface.cs: Implement `Define'. 
20273
20274         * modifiers.cs: Map Modifiers.constants to
20275         System.Reflection.TypeAttribute flags.
20276
20277         * class.cs: Keep track of types and user-defined types.
20278         (BuilderInit): New method for creating an assembly
20279         (ResolveType): New function to launch the resolution process, only
20280         used by interfaces for now.
20281
20282         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
20283         that are inserted into the name space. 
20284
20285 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
20286
20287         * ARGH.  I have screwed up my tree so many times due to the use of
20288         rsync rather than using CVS.  Going to fix this at once. 
20289
20290         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
20291         load types.
20292
20293 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
20294
20295         * Experiment successful: Use System.Type rather that our own
20296         version of Type.  
20297
20298 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
20299
20300         * cs-parser.jay: Removed nsAliases from here.
20301
20302         Use new namespaces, handle `using XXX;' 
20303
20304         * namespace.cs: Reimplemented namespace handling, use a recursive
20305         definition of the class.  Now we can keep track of using clauses
20306         and catch invalid using clauses.
20307
20308 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
20309
20310         * gen-treedump.cs: Adapted for all the renaming.
20311
20312         * expression.cs (Expression): this class now has a Type property
20313         which returns an expression Type.
20314
20315         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
20316         `Type', as this has a different meaning now in the base
20317
20318 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
20319
20320         * interface.cs, class.cs: Removed from all the sources the
20321         references to signature computation, as we can not do method
20322         signature computation during the parsing time, as we are not
20323         trying to solve at that point distinguishing:
20324
20325         class X {
20326                 void a (Blah x) {}
20327                 void a (NS.Blah x) {}
20328         }
20329
20330         Which depending on the context might be valid or not, as we do not
20331         know if Blah is the same thing as NS.Blah at that point.
20332
20333         * Redid everything so the code uses TypeRefs now instead of
20334         Types.  TypeRefs are just temporary type placeholders, that need
20335         to be resolved.  They initially have a pointer to a string and the
20336         current scope in which they are used.  This is used later by the
20337         compiler to resolve the reference to an actual Type. 
20338
20339         * DeclSpace is no longer a CIR.Type, and neither are
20340         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
20341         are all DeclSpaces, but no Types. 
20342
20343         * type.cs (TypeRefManager): This implements the TypeRef manager,
20344         which keeps track of all the types that need to be resolved after
20345         the parsing has finished. 
20346
20347 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
20348
20349         * ARGH.  We are going to have to store `foreach' as a class rather
20350         than resolving it, as we need to verify error 1579 after name
20351         resolution.   *OR* we could keep a flag that says `This request to
20352         IEnumerator comes from a foreach statement' which we can then use
20353         to generate the error.
20354
20355 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
20356
20357         * class.cs (TypeContainer.AddMethod): we now add methods to the
20358         MethodGroup instead of the method hashtable.  
20359
20360         * expression.cs: Add MethodGroup abstraction, which gets us one
20361         step closer to the specification in the way we handle method
20362         declarations.  
20363
20364         * cs-parser.jay (primary_expression): qualified_identifier now
20365         tried to match up an identifier to a local variable reference or
20366         to a parameter reference.
20367
20368         current_local_parameters is now a parser global variable that
20369         points to the current parameters for the block, used during name
20370         lookup.
20371
20372         (property_declaration): Now creates an implicit `value' argument to
20373         the set accessor.
20374
20375 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
20376
20377         * parameter.cs: Do not use `param' arguments as part of the
20378         signature, per the spec.
20379
20380 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
20381
20382         * decl.cs: Base class for classes, structs and interfaces.  This
20383         is the "Declaration Space" 
20384
20385         * cs-parser.jay: Use CheckDef for checking declaration errors
20386         instead of having one on each function.
20387
20388         * class.cs: Factor out some code for handling error handling in
20389         accordance to the "Declarations" section in the "Basic Concepts"
20390         chapter in the ECMA C# spec.
20391
20392         * interface.cs: Make all interface member classes derive from
20393         InterfaceMemberBase.
20394
20395 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
20396
20397         * Many things: all interfaces are parsed and generated in
20398         gen-treedump.  Support for member variables, constructors,
20399         destructors, properties, constants is there.
20400
20401         Beginning of the IL backend, but very little done, just there for
20402         testing purposes. 
20403
20404 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
20405
20406         * cs-parser.jay: Fix labeled statement.
20407
20408         * cs-tokenizer.cs (escape): Escape " and ' always.
20409         ref_line, ref_name: keep track of the line/filename as instructed
20410         by #line by the compiler.
20411         Parse #line.
20412
20413 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
20414
20415         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
20416         to match the values in System.CodeDOM.
20417
20418         Divid renamed to Divide.
20419
20420         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
20421         statements. 
20422         (Statements.set): remove.
20423
20424         * System.CodeDOM/CodeCatchClause.cs: always have a valid
20425         statements. 
20426
20427         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
20428         falseStatements always have valid values. 
20429
20430         * cs-parser.jay: Use System.CodeDOM now.
20431