acce32ac51bf0914d36ae7127a57f8045369f18d
[mono.git] / mcs / gmcs / ChangeLog
1 2005-08-12  Martin Baulig  <martin@ximian.com>
2
3         * expression.cs (MemberAccess.ResolveNamespaceOrType): Only search
4         for nested types here to avoid hitting the cache too early.
5
6 2005-08-09  Miguel de Icaza  <miguel@novell.com>
7
8         * enum.cs: On the new compiler CLS error 3005 is now a warning not
9         an error. 
10
11 2005-08-03  Martin Baulig  <martin@ximian.com>
12
13         Make iterators in generic methods work; see gtest-191.cs.
14
15         * generic.cs
16         (Constraints.Resolve): Protect against being called twice.
17
18         * class.cs
19         (TypeContainer.GetClassBases): Make this `protected virtual'.
20
21         * iterator.cs (Iterator.ctor): Added `GenericMethod' argument.
22         (Iterator.GetClassBases): Override this and compute the base
23         classes here.
24         (Iterator.DefineNestedTypes): If we're a generic method, all our
25         method type parameters become class type parameters on the proxy
26         class.
27
28         * statement.cs
29         (ToplevelBlock.Parameters): Make this a property, not a field.
30         (ToplevelBlock.ResolveMeta): Update the `parameters' from the `ip'.
31
32 2005-08-03  Martin Baulig  <martin@ximian.com>
33
34         * typemanager.cs (TypeManager.IsSubclassOf): Use
35         `TypeManager.IsEqual' instead of `Type.Equals'; fixes gtest-190.cs.
36         (TypeManager.GetFullName_recursed): Improved.
37
38 2005-07-27  Carlos Alberto Cortez <calberto.cortez@gmail.com>
39
40         Fix #75417
41         * ecore.cs (Expression.IsAccessorAccessible): Change the check for
42         Private accessor case, using TypeManager.IsPrivateAccessible instead of
43         invocation_type == mi.DeclaringType, since the first one also checks
44         other condition used by generic instances.
45         
46 2005-07-27  Martin Baulig  <martin@ximian.com>
47
48         * anonymous.cs (CaptureContext.AddField): Added
49         `AnonymousContainer am' argument; compute its toplevel scope if
50         it's not already computed.  Fixes #75649.
51
52 2005-07-12  Raja R Harinath  <rharinath@novell.com>
53
54         * statement.cs (Block.Flags); Remove HasVarargs.
55         (Block.HasVarargs): Move to ToplevelBlock.
56         (Block.ThisVariable, Block.AddThisVariable): Likewise.
57         (Block.Variables): Make protected.  Initialize variable hashtable
58         if necessary.
59         (Block.AddVariable): Update.
60         (Block.Resolve): Update to changes.
61         (ToplevelBlock.HasVarargs): New boolean.
62         (ToplevelBlock.ThisVariable): Move here from Block.
63         (ToplevelBlock.AddThisVariable): Likewise.
64         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
65         * expression.cs (This.ResolveBase): Update to changes.
66         (ArglistAccess.DoResolve): Likewise.
67
68 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
69
70         Fix #75321
71         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
72
73         * class.cs (TypeContainer.VerifyMembers): Distinguish between
74         not used and not used & assigned.
75         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
76
77 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
78
79         Fix #75053
80         * expression.cs (Is.DoResolve): null is never provided type.
81
82 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
83
84         Fix #52496
85         * cs-parser.jay: Less strict event error rule to catch more errors.
86
87 2005-07-11  Martin Baulig  <martin@ximian.com>
88
89         * generic.cs (ConstructedType.CheckConstraints): Improve the check
90         for the constructor constraint: we do not only have to check
91         whether the class has a public constructor, but also ensure that
92         it's parameterless.  Fixes #75492.
93
94 2005-07-11  Martin Baulig  <martin@ximian.com>
95
96         * expression.cs (Binary.ResolveOperator): Only allow `==' and `!='
97         between type parameters if they either have the reference type
98         constraint or the class constraint.
99
100 2005-07-10  Kamil Skalski <nazgul@nemerle.org>
101
102         * generic.cs: Use MakeGenericType instead of BindGenericParameters.
103
104 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
105
106         Fix #74975
107         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
108         (ExtractSecurityPermissionSet): Cope with self referencing security
109         attributes properly.
110
111         * driver.cs (SetOutputFile): Made public property OutputFile.
112
113 2005-07-07  Raja R Harinath  <rharinath@novell.com>
114
115         Fix #75486.
116         * class.cs (TypeContainer.first_nonstatic_field): Rename from
117         has_nonstatic_fields.  Make into a FieldBase pointer.
118         (TypeContainer.AddField): Add CS0282 check.
119         (TypeContainer.EmitType): Update.
120
121 2005-07-06  Miguel de Icaza  <miguel@novell.com>
122
123         * cs-tokenizer.cs (consume_identifier): Do not create strings to
124         compare if they start with __.
125
126 2005-07-06  Raja R Harinath  <rharinath@novell.com>
127
128         * statement.cs (Switch.SwitchGoverningType): Only look at
129         UserCasts that don't need implicit standard conversions to one of
130         the allowed switch types (Fixes test-322.cs).
131         (LocalInfo.Resolve): Re-enable sanity-test.
132
133 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
134
135         * cs-tokenizer.cs (consume_identifier): Detect double undescores
136         
137         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
138         
139         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
140
141 2005-07-06  Raja R Harinath  <rharinath@novell.com>
142
143         Fix #75472.
144         * ecore.cs (SimpleName.GetSignatureForError): Add.
145         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
146         (MemberAccess.GetSignatureForError): Add.
147
148 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
149  
150         The big error and warning messages review.
151         
152         * anonymous.cs,
153         * assign.cs,
154         * attribute.cs,
155         * class.cs,
156         * codegen.cs,
157         * convert.cs,
158         * cs-parser.jay,
159         * cs-tokenizer.cs,
160         * decl.cs,
161         * delegate.cs,
162         * doc.cs,
163         * driver.cs,
164         * ecore.cs,
165         * enum.cs,
166         * expression.cs,
167         * flowanalysis.cs,
168         * iterators.cs,
169         * literal.cs,
170         * location.cs,
171         * modifiers.cs,
172         * namespace.cs,
173         * parameter.cs,
174         * pending.cs,
175         * report.cs,
176         * rootcontext.cs,
177         * statement.cs,
178         * support.cs,
179         * tree.cs,
180         * typemanager.cs: Updated.
181         
182         * class.cs: (MethodCore.SetYields): Moved here to share.
183         (PropertyMethod.Define): Moved iterator setup here.
184         
185         * iterators.cs: Add orig_method to have full access to parent
186         container.
187
188 2005-07-05  Raja R Harinath  <rharinath@novell.com>
189
190         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
191         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
192         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
193         variable of struct type.
194         * expression.cs (Unary.ResolveOperator): Update to change.
195         (Indirection.VerifyFixed): Likewise.
196         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
197         (ParameterReference.VerifyFixed): Value parameters are fixed.
198         (This.VerifyFixed): Treat 'this' as a value parameter.
199         * statement.cs (LocalInfo.IsFixed): Remove.
200
201 2005-07-01  Martin Baulig  <martin@ximian.com>
202
203         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
204         `ec.EmitThis ()' to get the correct scope.
205
206 2005-07-01  Martin Baulig  <martin@ximian.com>
207
208         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
209         instance is a ParameterReference; fixes #75299.
210
211 2005-06-30  Raja R Harinath  <rharinath@novell.com>
212
213         Fix #75412.
214         * expression.cs (Indexers.map): Remove.
215         (Indexers.Append): Filter out inaccessible setters and getters.
216         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
217
218         Fix #75283.
219         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
220         Refactored from ...
221         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
222         (FieldExpr.Emit, PropertyExpr.Emit): Update.
223         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
224         * expression.cs (Invocation.EmitCall): Add CS0120 check.
225
226 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
227
228         Fix #75322
229         * class.cs (FieldBase.GetInitializerExpression): One more field
230         for backup.
231
232 2005-06-28  Miguel de Icaza  <miguel@novell.com>
233
234         * pending.cs: Do not define a proxy if the base method is virtual,
235         it will be picked up by the runtime (bug 75270).
236
237 2005-07-08  Martin Baulig  <martin@ximian.com>
238
239         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
240         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
241
242 2005-07-07  Martin Baulig  <martin@ximian.com>
243
244         * generic.cs (ConstructedType.CheckConstraint): Use
245         ResolveAsTypeStep(), not ResolveAsTypeTerminal() so we're not
246         called recursively; fixes #75329.
247
248 2005-07-06  Martin Baulig  <martin@ximian.com>
249
250         * generic.cs (TypeManager.InferTypeArguments): Added support for
251         anonymous methods; fixes #75461.
252
253 2005-07-01  Martin Baulig  <martin@ximian.com>
254
255         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
256         `ec.EmitThis ()' to get the correct scope.
257
258 2005-07-01  Martin Baulig  <martin@ximian.com>
259
260         * ecore.cs (FieldExpr.DoResolve): Only capture the field if it's
261         instance is `This'; fixes #75299.
262
263 2005-06-30  Martin Baulig  <martin@ximian.com>
264
265         * class.cs (Indexer): Implement IIteratorContainer; added support
266         for iterators in indexers.
267
268         * codegen.cs
269         (EmitContext.CurrentIterator): Make this a property, not a field.
270
271         * anonymous.cs (AnonymousContainer.Iterator): New public property.
272
273 2005-06-28  Miguel de Icaza  <miguel@novell.com>
274
275         * pending.cs: Do not define a proxy if the base method is virtual,
276         it will be picked up by the runtime (bug 75270).
277
278 2005-06-28  Martin Baulig  <martin@ximian.com>
279
280         * cs-parser.jay (interface_method_declaration): Avoid a
281         reduce/reduce conflict by moving some of the code into a separate
282         `interface_method_declaration_body' rule; fixes #75368.
283
284 2005-06-28  Martin Baulig  <martin@ximian.com>
285
286         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Move the
287         array check after the check for TypeBuilder's.
288
289 2005-06-21  Raja R Harinath  <rharinath@novell.com>
290
291         * convert.cs (FindMostEncompassedType): Add two trivial special
292         cases (number_of_types == 0 || number_of_types == 1).
293         (FindMostEncompasingType): Likewise.
294
295 2005-06-17  Raja R Harinath  <rharinath@novell.com>
296
297         Some cleanups preparing for the fix of #75283.
298         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
299         error testing.
300         (EventExpr.InstanceResolve): Likewise.
301         (EventExpr.DoResolve): Remove redundant checks.
302
303 2005-06-08  Miguel de Icaza  <miguel@novell.com>
304
305         * class.cs: Small fix.
306
307 2005-06-08  Raja R Harinath  <rharinath@novell.com>
308
309         Fix #75160.
310         * class.cs (GetPartialBases): Fix return value check of
311         part.GetClassBases.
312
313 2005-06-07  Raja R Harinath  <rharinath@novell.com>
314
315         Ensure that partial classes are registered in their enclosing
316         namespace.  Initial part of fix of #75160.
317         * tree.cs (Tree.RecordDecl): Add new namespace argument.
318         Register declspace with namespace here, not in
319         DeclSpace.RecordDecl.
320         * cs-parser.jay: Pass namespace to RecordDecl.
321         * class.cs (PartialContainer.Create): Likewise.
322         (ClassPart.DefineType): New sanity-check.  Throws an exception if
323         called.
324         * decl.cs (Declspace.RecordDecl): Remove.
325         * namespace.cs (NamespaceEntry.DefineName): Remove.
326
327 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
328
329         * rootcontext.cs: Reset TargetExt as well.
330
331 2005-06-03  Raja R Harinath  <rharinath@novell.com>
332
333         * ecore.cs (Expression.Resolve): Emit CS0654 error when
334         -langversion:ISO-1.
335
336 2005-06-02  Raja R Harinath  <rharinath@novell.com>
337
338         Fix #75080, cs0119.cs.
339         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
340         of ...
341         (Expression.Resolve): ... this.  Use it.  Remove bogus code
342         allowing ExprClass.Type and ExprClass.Namespace for
343         ResolveFlags.VariableOrValue.
344         (Expression.Resolve) [1-argument variant]: Change default resolve
345         flags based on language version.
346         (Expression.Error_UnexpectedKind): Use a simple string array
347         rather than an ArrayList.
348         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
349         not ExprClass.Type.
350         (TypeOfVoid.DoResolve): Likewise.
351         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
352         flags argument -- it always has the same value.
353
354 2005-05-31  Raja R Harinath  <rharinath@novell.com>
355
356         Fix #75081.
357         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
358         Use it in the error message.
359         * assign.cs, expression.cs, statement.cs: Update.
360
361 2005-05-30  Raja R Harinath  <rharinath@novell.com>
362
363         Fix #75088.
364         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
365         the "almostMatchedMember" case too.
366         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
367         that failed the accessibility checks to 'almost_match'.
368
369 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
370
371         * attribute.cs: Use internal MethodBuilder methods to set
372         ExactSpelling and SetLastError on PInvoke methods, instead
373         of passing them via charset.  Fixes #75060.
374
375 2005-05-27  Raja R Harinath  <rharinath@novell.com>
376
377         * parameter.cs (Parameter): Remove TODO comment.
378         (Parameter.DefineParameter): Remove Location parameter.
379         (Parameters.LabelParameters): Likewise.
380         * class.cs (Constructor.Emit): Update to change.
381         (MethodData.Emit): Likewise.
382         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
383         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
384
385 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
386
387         * parameter.cs,
388           Removed Parameters.Location and added Parameter.Location instead.
389           Removed Location parameter from Emit() and GetSignature().
390         * anonymous.cs,
391           class.cs,
392           cs-parser.jay,
393           delegate.cs,
394           iterators.cs,
395           statement.cs :
396           Modified all related calls.
397
398 2005-06-21  Martin Baulig  <martin@ximian.com>
399
400         * generic.cs (NullCoalescingOperator.Emit): Make this work if the
401         left-hand side is not a nullable type; fixes #75328.
402
403 2005-06-21  Martin Baulig  <martin@ximian.com>
404
405         * typemanager.cs
406         (TypeManager.CSharpName): Use GetFullName() instead of `t.FullName'.
407         (TypeManager.GetFullNameSignature): Likewise.
408
409         * convert.cs (Convert.Error_CannotImplicitConversion): Compare
410         `source.FullName' and `target.FullName' to check whether there are
411         two conflicting definitions.
412
413 2005-06-21  Martin Baulig  <martin@ximian.com>
414
415         * convert.cs (Convert.ImplicitTypeParameterConversion): Always use
416         a BoxedCast - also for reference types - to be compatible with csc.
417
418 2005-06-21  Martin Baulig  <martin@ximian.com>
419
420         * expression.cs (MemberAccess.DoResolve): Add support for nested
421         types in a generic instance; fixes #75320.
422
423 2005-06-20  Martin Baulig  <martin@ximian.com>
424
425         * generic.cs (TypeManager.InferType): Also walk the class
426         hierarchy for generic instances; fixes #75261.
427
428 2005-06-17  Martin Baulig  <martin@ximian.com>
429
430         * typemanager.cs (TypeManager.IsBuiltinType): Use TypeToCoreType()
431         to make things work for corlib.
432
433 2005-06-15  Martin Baulig  <martin@ximian.com>
434
435         * attribute.cs (Attribute.CheckSecurityActionValidity): Remove the
436         obsolete `SecurityAction' values.
437
438 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
439
440         * rootcontext.cs: Reset TargetExt as well.
441         
442 2005-06-09  Martin Baulig  <martin@ximian.com>
443
444         * delegate.cs (Delegate.VerifyMethod): Added
445         `MethodGroupExpr old_mg' argument; inherit its
446         `HasTypeParameters'; fix #75085.
447
448 2005-06-09  Martin Baulig  <martin@ximian.com>
449
450         * expression.cs (Invocation.OverloadResolve): Correctly handle
451         generic methods for the SetMemberIsUsed(); fix #75064.
452
453 2005-06-09  Martin Baulig  <martin@ximian.com>
454
455         * statement.cs (Throw.Resolve): Use TypeManager.IsSubclassOf();
456         fixes #75062.
457
458 2005-06-08  Martin Baulig  <martin@ximian.com>
459
460         * cs-parser.jay (nullable_type_or_conditional): If we put the
461         nullable back and our `type' is a `ComposedCast', remove the
462         nullable from it.  Fixes #75156.
463
464         * expression.cs (ComposedCast.RemoveNullable): New public method.
465
466 2005-06-08  Martin Baulig  <martin@ximian.com>
467
468         The big Iterators rewrite :-)
469
470         * iterators.cs: Rewrite this to use the anonymous methods framework.
471
472         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
473         before the TypeContainers; see 2test-21.cs.
474
475         * class.cs
476         (TypeContainer.DefineType): Don't create a new EmitContext if we
477         already have one (this only happens if we're an Iterator).
478         (TypeContainer.Define): Also call Define() on all our iterators.
479         (Method.CreateEmitContext): Added support for iterators.
480
481         * anonymous.cs
482         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
483         (AnonymousContainer.CreateMethodHost): Moved here from
484         AnonymousMethod and made abstract.
485         (AnonymousContainer.CreateScopeType): New abstract method.
486         (AnonymousContainer.IsIterator): New public property.
487         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
488         get the ScopeTypeBuilder rather than manually defining it here. 
489         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
490         iterators here.
491
492         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
493         before RootContext.DefineTypes().
494
495         * codegen.cs (EmitContext.RemapToProxy): Removed.
496         (EmitContext.CurrentAnonymousMethod): Changed type from
497         AnonymousMethod -> AnonymousContainer.
498         (EmitContext.ResolveTopBlock): Protect from being called twice.
499         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
500         (EmitContext.EmitThis): Removed the iterators hacks; use the
501         anonymous methods framework for that.
502
503         * statement.cs
504         (ToplevelBlock.Container): Make this a property, not a field.
505         (ToplevelBlock.ReParent): New public method; move the
506         ToplevelBlock into a new container.
507         (Foreach.TemporaryVariable): Simplify.
508
509 2005-06-05  Martin Baulig  <martin@ximian.com>
510
511         * statement.cs (LocalInfo.CompilerGenerated): New flag.
512         (Block.AddTemporaryVariable): New public method; creates a new
513         `LocalInfo' for a temporary variable.
514         (Block.EmitMeta): Create the LocalBuilders for all the temporary
515         variables here.
516         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
517         non-iterator variables.
518
519 2005-06-05  Martin Baulig  <martin@ximian.com>
520
521         * statement.cs (Foreach.TemporaryVariable): Create the
522         LocalBuilder in the Emit phase and not in Resolve since in some
523         situations, we don't have an ILGenerator during Resolve; see
524         2test-19.cs for an example.
525
526 2005-06-04  Martin Baulig  <martin@ximian.com>
527
528         The big Foreach rewrite - Part II.
529
530         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
531         with `PropertyInfo ienumerator_getcurrent'.
532
533         * codegen.cs (VariableStorage): Removed.
534
535         * statement.cs
536         (Foreach): Derive from Statement, not ExceptionStatement.
537         (Foreach.CollectionForeach): New nested class.  Moved all the code
538         dealing with collection foreach here.
539         (Foreach.ForeachHelperMethods): Removed.
540         (Foreach.TemporaryVariable): Implement IMemoryLocation.
541
542 2005-05-23  Martin Baulig  <martin@ximian.com>
543
544         * statement.cs (Try.DoResolve): Don't create a `finally' if we
545         don't need to.  Fix #75014.
546
547 2005-05-26  Raja R Harinath  <rharinath@novell.com>
548
549         Improve user-defined conversion handling.
550         * convert.cs (GetConversionOperators): Rewrite.  Return only the
551         applicable operators.
552         (AddConversionOperators): New.  Helper for GetConversionOperators.
553         (FindMostEncompassedType, FindMostEncompassingType): Verify that
554         there is only one most encompassed/encompassing type.
555         (FindMostSpecificSource, FindMostSpecificTarget): Remove
556         "applicable operator" handling.
557         (UserConversion): Move cache here from GetConversionOperators.
558         Directly cache the chosen operator, rather than the whole
559         MethodGroup.
560         (ExplicitNumericConversion): Fix buggy implementation of Decimal
561         case.  Allow conversion of decimal to sbyte and byte too.
562         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
563         New static methods.  Used to avoid allocating EmptyExpressions in
564         convert.cs.
565
566 2005-05-24  Duncan Mak  <duncan@novell.com>
567
568         * ecore.cs (CastFromDecimal): New class for casting a decimal to
569         another class, used in Convert.ExplicitNumericConversion.
570         (CastToDecimal): New class, similar to above, but casts to
571         System.Decimal, used in Convert.ImplicitNumericConversion and also
572         in explicit convesion from double/float to decimal.
573
574         * convert.cs (ImplicitNumericConversion): Handle implicit
575         conversions to System.Decimal.
576         (ExplicitNumericConversion): handle explicit conversions to
577         System.Decimal.
578
579         This fixes #68711.
580         
581 2005-05-20  Miguel de Icaza  <miguel@novell.com>
582
583         * typemanager.cs: Do not throw an exception in the TypeBuilder
584         case, we take care of it on the TypeCode.
585
586 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
587         
588         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
589         is back.
590         
591         * cs-parser.jay: Catch more lexical errors.
592         
593         * report.cs: Add one more Error method.
594         
595         * rootcontext.cs,
596         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
597
598 2005-05-20  Martin Baulig  <martin@ximian.com>
599
600         * class.cs (TypeContainer.CircularDepException): Removed.
601         (TypeContainer.DefineType): Removed the `InTransit' stuff.
602         (TypeContainer.CheckRecursiveDefinition): Check for circular class
603         (CS0146) and interface (CS0529) dependencies here.
604
605 2005-05-20  Martin Baulig  <martin@ximian.com>
606
607         * expression.cs (New.DoResolve): Move the CS0712 check above the
608         CS0144 check; otherwise it can never be reached.
609
610 2005-05-20  Martin Baulig  <martin@ximian.com>
611
612         * cs-parser.jay: Fix CS0080 check; add CS0231 and CS0257 from MCS.
613
614 2005-05-20  Martin Baulig  <martin@ximian.com>
615
616         * class.cs (TypeContainer.DefineType): Fix CS0698 check.
617
618         * typemanager.cs (TypeManager.IsAttributeType): New public method.
619
620 2005-05-19  Martin Baulig  <martin@ximian.com>
621
622         * delegate.cs
623         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
624         to disable error reporting.
625
626         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
627         here since we don't want to report an error; see the new test-336.cs.
628
629 2005-05-19  Raja R Harinath  <rharinath@novell.com>
630
631         * statement.cs (ToplevelBlock.GetParameterReference)
632         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
633         Move here from class Block.
634         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
635         * expression.cs (ParameterReference.DoResolveBase): Likewise.
636
637 2005-05-18  Martin Baulig  <martin@ximian.com>
638
639         Fix #74978.
640
641         * flowanalysis.cs
642         (FlowBranching.Reachability): Add non-static public And() and Or()
643         methods.
644         (FlowBranchingSwitch): New class; do the `break_origins' thing
645         like in FlowBranchingLoop.
646         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
647         reachability, not just locals and parameters.
648         (FlowBranching.MergeChild): Remove some of the hacks for loop and
649         switch; MergeBreakOrigins() now takes care of that.
650
651 2005-05-18  Martin Baulig  <martin@ximian.com>
652
653         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
654         a loop and may leave it, reset the barrier; fixes #74974.
655
656 2005-05-16  Raja R Harinath  <rharinath@novell.com>
657
658         Fix test-382.cs.  Emit values of decimal constants.
659         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
660         Carved out of ...
661         (TypeContainer.AddField): ... this.
662         (TypeContainer.EmitFieldInitializers): Allow the list of fields
663         with initializers to include 'Const's.
664         (ClassPart.RegisterFieldForInitialization): Forward to
665         PartialContainer.
666         * const.cs (Const.Const): Pass initializer to base class.
667         (Const.Define): In case of decimal constants, register them for
668         initialization in a static constructor.
669
670 2005-05-14  Martin Baulig  <martin@ximian.com>
671
672         * statement.cs (Block.Resolve): Correctly handle unreachable code;
673         do not call ResolveUnreachable() on unreachable statements in
674         here, see the comment in the source code.
675
676 2005-05-13  Raja R Harinath  <rharinath@novell.com>
677
678         Fix #74934.
679         * expression.cs (BinaryResolveOperator): If one of the operands of
680         an equality comparison is 'null' and the other is a pointer type,
681         convert the null to a NullPointer.
682         * convert.cs (ImplicitReferenceConversion): If the expression is a
683         NullLiteral and the target type is a pointer type, return a
684         NullPointer instead.
685         (ImplicitConversionStandard): Likewise.
686
687 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
688         
689         * cs-parser.jay: Set readonly context based on special constructs.
690         
691         * expression.cs (LocalVariableReference.DoResolveBase): Improved
692         readonly variable error handling.
693         
694         * rootcontext.cs (EmitCode): Don't verify members when error
695         occurred.
696         
697         * statement.cs (LocalInfo): Add reaodnly context information.
698         (SetReadOnlyContext, GetReadOnlyContext): New methods.
699
700 2005-05-17  Martin Baulig  <martin@ximian.com>
701
702         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
703         #70970. 
704
705 2005-05-13  Martin Baulig  <martin@ximian.com>
706
707         * statement.cs (Block.Resolve, ResolveUnreachable): Correctly
708         handle unreachable blocks.
709
710 2005-05-13  Martin Baulig  <martin@ximian.com>
711
712         * class.cs
713         (ConstructorInitializer.GetOverloadedConstructor): Don't crash.
714         (MethodCore.CheckCore): Use TypeManager.IsEqual(); fix #74904 and
715         #74905. 
716
717 2005-05-13  Martin Baulig  <martin@ximian.com>
718
719         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
720         instance variable, not a local.  Fix #74873.
721         (Block.ResolveUnreachable): Set it to true here.
722
723 2005-05-12  Martin Baulig  <martin@ximian.com>
724
725         * cs-parser.jay (property_declaration): Pass the `current_class',
726         not the `current_container' to Property's .ctor.  Fixes #74912.
727
728 2005-05-11  Martin Baulig  <martin@ximian.com>
729
730         * typemanager.cs (Closure): Copy this from MCS and merge all the
731         GMCS-specific changes into it.
732
733 2005-05-12  Raja R Harinath  <harinath@gmail.com>
734
735         Fix #74920.
736         * typemanager.cs (unmanaged_enclosing_types): New.
737         (IsUnmanagedType): Avoid infloops by using
738         'unmanaged_enclosing_types' to talk with recursive invocations.
739
740 2005-05-11  Duncan Mak  <duncan@novell.com>
741
742         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
743         continuing to process for 'arg'.
744         (handle_preprocessing_directive): Check the argument of the #endif
745         directive and report error CS1025 if there are any trailing
746         characters.
747
748         According to the C# spec, having even whitespace after the #endif
749         directive is illegal; however, because we call arg.TrimEnd ()
750         beforehand, we have the same behavior as csc, allowing whitespace
751         after the directive.
752
753         Fixes #74892.
754
755 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
756
757         Fix #74863.
758         
759         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
760         (Constructor.GetObsoleteAttribute): Implemented correctly.
761
762 2005-05-10  Martin Baulig  <martin@ximian.com>
763
764         * generic.cs (Constraints.Resolve): Report CS0246 if we cannot
765         resolve the type; fixes #74864.
766         (DefaultValueExpression): Create the LocalTemporary in Emit(), not
767         in DoResolve(); fixes #74862.
768
769 2005-05-10  Martin Baulig  <martin@ximian.com>
770
771         * support.cs (ReflectionParameters.ParameterModifier): Use
772         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
773         and `ParameterAttributes.In'.  Fixes #74884.
774
775 2005-05-10  Martin Baulig  <martin@ximian.com>
776
777         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Don't use
778         the cache if we're just looking for `MemberTypes.NestedType' in a
779         generic instance.
780
781         * ecore.cs (Expression.ResolveAsTypeTerminal): Don't check the
782         constraints if we're still resolving the type tree.
783         (Expression.MemberLookup): If we're resolving the type tree, only
784         look for `MemberTypes.NestedType' since we're only interested in
785         getting types.
786
787         * class.cs (TypeContainer.DefineType): Don't resolve the type
788         parameters here; do this later in ResolveType() after the type
789         tree has been resolved.
790         (TypeContainer.ResolveType): New public method; this is called
791         after the type tree is resolved and before the types are being
792         populated.  We resolve the generic constraints here.
793         (TypeContainer.DoDefineMember): Check the constraints on our base
794         class and interfaces.
795
796         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Make this protected;
797         set the `ResolvingTypeTree' flag on the EmitContext.
798
799         * codegen.cs (EmitContext.ResolvingTypeTree): New public field.
800
801 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
802
803         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
804         
805         * expression.cs (Argument.GetParameterModifier): Turned to property.
806         (Invocation.Error_InvalidArguments): Add more descriptive errors.
807         
808         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
809         its C# equivalent.
810         
811 2005-05-09  Raja R Harinath  <rharinath@novell.com>
812
813         Fix #74852.
814         * decl.cs (MemberCache.AddMethods): Register override methods,
815         rather than non-override methods.
816         * typemanager.cs (RegisterOverride): New.
817         (IsOverride): Update.
818
819 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
820
821         * typemanager.cs (TypeManager): Moved InitGenerics to Reset method.
822
823 2005-05-06  Martin Baulig  <martin@ximian.com>
824
825         * attribute.cs
826         (Attributable.IsClsComplianceRequired): Fix typo in the method name.
827         (AttributeTester.AnalyzeTypeCompliance): Add generics support.
828
829 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
830
831         Fix #73105.
832         
833         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
834         recursive declaration.
835         
836         * statement.cs (Block.ResolveMeta): Report any error in resolving.
837         
838 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
839
840         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
841         
842         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
843
844 2005-05-05  Raja R Harinath  <rharinath@novell.com>
845
846         Fix #74797.
847         * decl.cs (DeclSpace.FamilyAccessible): 
848         Use TypeManager.IsNestedFamilyAccessible.
849
850         Fix reopened #64812.
851         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
852         internal'.
853
854 2005-05-04  Raja R Harinath  <rharinath@novell.com>
855             Abin Thomas  <projectmonokochi@rediffmail.com>
856             Anoob V E  <projectmonokochi@rediffmail.com>
857             Harilal P R  <projectmonokochi@rediffmail.com>
858
859         Fix #64812.
860         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
861         allow access to all static members.
862
863 2005-05-04  Martin Baulig  <martin@ximian.com>
864
865         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
866
867 2005-05-04  Martin Baulig  <martin@ximian.com>
868
869         Fix #74655.
870
871         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
872         section at the end; make things work if `default' is not the last
873         section.        
874
875 2005-05-04  Martin Baulig  <martin@ximian.com>
876
877         Fix #70400.
878
879         * statement.cs (Switch): Replaced the `got_default' field with a
880         `default_section' one.
881         (Switch.CheckSwitch): Set `default_section' here.
882         (Switch.Resolve): If we're a constant switch and the constant is
883         not found, use the default section.
884
885 2005-05-03  Martin Baulig  <martin@ximian.com>
886
887         * expression.cs (ArrayAccess.EmitGetLength): New public method.
888
889         * statement.cs (Foreach.ArrayForeach): New nested class.
890         (Foreach.TemporaryVariable): New nested class.
891         (Foreach.EmitArrayForeach): Removed; this is now in the new
892         ArrayForeach class.
893
894 2005-05-03  Raja R Harinath  <rharinath@novell.com>
895
896         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
897         more conservative.
898         (VerifyPendingMethods): Revert change below.
899
900         * typemanager.cs (IsOverride, RegisterNonOverride): New.
901         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
902         that used to trigger warning -28.  Remove warning -28.
903         * expression.cs (Invocation.OverloadResolve): Use
904         TypeManager.IsOverride to distinguish override methods.
905
906         Fix #74773.
907         * pending.cs (VerifyPendingMethods): If a base type implements the
908         requested interface, don't bother checking individual methods of
909         the base type.  As a side-effect, this prevents the creation of
910         unnecessary proxies.
911
912 2005-05-02  Martin Baulig  <martin@ximian.com>
913
914         Fix #70182.
915
916         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
917         Also `And' the locals if the old vector is null.
918         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
919         null; in this case we basically reset all the variables.        
920
921 2005-05-02  Martin Baulig  <martin@ximian.com>
922
923         Fix #74529.
924
925         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
926         Added `FlowBranching branching' argument; always `and' the
927         variables instead of `or'ing them unless we're an infinite loop.
928
929         * statement.cs (While.Resolve): Create a new sibling unless we're
930         infinite.       
931
932 2005-05-02  Martin Baulig  <martin@ximian.com>
933
934         Fix #70140.
935
936         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
937         arguments; use it instead of creating a new TopLevelBlock.
938         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
939         our ConstructorInitializer.
940
941         * statement.cs
942         (TopLevelBlock.TopLevelBranching): New public property.
943         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
944         and create our `TopLevelBranching'.
945
946         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
947         anonymous method host, use `block.TopLevelBranching' rather than
948         creating a new branching.
949
950 2005-04-20  Miguel de Icaza  <miguel@novell.com>
951
952         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
953         a ScopeInfo, if any of the current children is a child of the new
954         entry, move those children there.
955
956 2005-04-30  Martin Baulig  <martin@ximian.com>
957
958         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
959         at the beginning of a SwitchSection.  Fix #73335.
960
961 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
962
963         Fix #74378
964         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
965         
966         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
967         (FieldExpr.DoResolve): Obsolete members are ignored for field
968         initializers.
969         
970 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
971
972         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
973         of arrays detection.
974
975         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
976         verification.
977         (Field.VerifyClsCompliance): Volatile fields are not compliant.
978
979         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
980         arrays report.
981
982 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
983
984         * cs-parser.jay: Use the prefered version of -unsafe in error
985         message.
986
987 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
988
989         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
990         circumstances.
991
992 2005-04-20  John Luke  <john.luke@gmail.com>
993
994         * driver.cs: fix typo in error message, --outout to --output
995
996 2005-04-30  Martin Baulig  <martin@ximian.com>
997
998         * attribute.cs (Attribute.CheckSecurityActionValidity): Correctly
999         handle the .NET 2.x security attributes.
1000
1001 2005-04-30  Martin Baulig  <martin@ximian.com>
1002
1003         * typemanager.cs
1004         (TypeManager.ExpandInterfaces): Don't add things twice.
1005
1006         * class.cs
1007         (TypeContainer.VerifyClsCompliance): Allow generic instances.
1008
1009 2005-04-29  Martin Baulig  <martin@ximian.com>
1010
1011         * generic.cs (Constraints.ResolveTypes): Expand interfaces.
1012
1013         * anonymous.cs: Added support for anonymous generic methods.
1014
1015 2005-04-29  Martin Baulig  <martin@ximian.com>
1016
1017         * typemanager.cs (TypeManager.GetInterfaces): Correctly handle
1018         generic instances.
1019
1020 2005-04-29  Martin Baulig  <martin@ximian.com>
1021
1022         * generic.cs (TypeManager.HasConstructorConstraint): Removed.
1023
1024         * expression.cs (New.DoResolve): Fix the CS0304 check.
1025
1026 2005-04-29  Martin Baulig  <martin@ximian.com>
1027
1028         * typemanager.cs (TypeManager.GetFullName): Updated to the new
1029         naming schema.
1030
1031         * class.cs (MethodCore.IsDuplicateImplementation): If we're an
1032         explicit interface implementation, compare the interface types.
1033         (MethodData.Define): Use the new naming scheme from the latest
1034         .NET 2.x beta2.
1035         (MemberBase.DoDefineBase): Resolve `InterfaceType' here.
1036
1037         * decl.cs (MemberName.GetMemberName): Removed.
1038         (MemberName.MethodName, FullName): New properties.
1039
1040 2005-04-25  Raja R Harinath  <rharinath@novell.com>
1041
1042         * gmcs.exe.config: Update v2.0.40607 -> v2.0.50215.
1043
1044 2005-04-22  Martin Baulig  <martin@ximian.com>
1045
1046         * generic.cs (GenericMethod): Create the EmitContext in the
1047         `Define()'; in `Define(MethodBuilder)', create the type parameters
1048         before calling `Define()'.  Fixes #73933.
1049
1050 2005-04-22  Martin Baulig  <martin@ximian.com>
1051
1052         * generic.cs
1053         (Constraints.Resolve): Make things work wrt. the new type lookup system.
1054         (ConstructedType.ResolveAsTypeTerminal): Don't override this.
1055
1056         * ecore.cs (Expression.ResolveAsTypeTerminal): If `te' is a
1057         ConstructedType, check its constraints.
1058
1059 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
1060
1061         * codegen.cs (InRefOutArgumentResolving): New field.
1062         
1063         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
1064         fields outside contructor.
1065         
1066         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
1067         
1068 2005-04-19  Miguel de Icaza  <miguel@novell.com>
1069
1070         * anonymous.cs (CaptureContext.EmitParameterInstance): The
1071         parameter code was not completed ever, so it was not as up-to-date
1072         as local variables.  Must finish it.
1073
1074         The bug fix was to compare the Toplevel of the block, not the
1075         current block.  Thanks for Ben for pointing this out. 
1076
1077 2005-04-19  Raja R Harinath  <rharinath@novell.com>
1078
1079         * decl.cs (AddMethods): Use the declaring type of the problem
1080         method to determine if we want to squash a warning.
1081
1082 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
1083
1084         * attribute.cs: Removed debug output.
1085
1086         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
1087         
1088         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
1089         Report.Stderr.
1090         
1091 2005-04-18  Raja R Harinath  <rharinath@novell.com>
1092
1093         Fix #74481.
1094         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
1095         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
1096         all null comparisons against reference types.
1097
1098 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
1099
1100         Fix# 74565
1101         * class.cs (TypeContainer.CircularDepException) New nested
1102         exception class.
1103         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
1104         (TypeContainer.DefineType): Removed error, reset InTransit before
1105         exit.
1106         (Class.DefineType): Throw exception when is in Transit.
1107         Catch exception and report error.
1108         (Struct.DefineType): Throw exception when is in Transit.
1109         Catch exception and report error.
1110         (Interface.DefineType): Throw exception when is in Transit.
1111         Catch exception and report error.
1112
1113         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
1114         handle nested exception handlers.
1115
1116         * flowanalysis.cs (InTryWithCatch): New method, search for try with
1117         a catch.
1118
1119         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
1120         InFinally and InCatch storage.
1121
1122         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
1123         (Catch.Resolve): Set and Restore ec.InCatch.
1124         (Try.Resolve): Set and Restore ec.InFinally.
1125         (Try.HasCatch): True when try has catch.
1126
1127 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
1128
1129         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
1130           for the same event member, so exclude such cases from warning 419.
1131           Fixed bug #74633.
1132
1133 2005-04-16  Miguel de Icaza  <miguel@novell.com>
1134
1135         * expression.cs (Binary.ResolveOperator): Apply patch from John
1136         Luke to fix bug 59864: operators &, | and ^ on enumerations
1137         require that the same enum type on both sides.
1138
1139         * driver.cs: Add warnings to old flag usage, this is to assist
1140         people who produce Makefiles and hope that the Makefiles will be
1141         used on Windows.
1142
1143         * class.cs (TypeContainer.EmitType): Moved the definition of the
1144         special $PRIVATE$ field from the resolve phase to the Emit phase.
1145         During resolve we do not know if we are a struct with
1146         HasExplicitLayout, we know this only after the attributes for the
1147         type are emitted.
1148
1149         Set the FieldOffset to zero on the dummy field that we create for
1150         the class.   Fixes 74590.
1151
1152 2005-04-16  Raja R Harinath  <rharinath@novell.com>
1153
1154         Fix #73834.
1155         * ecore.cs (PropertyExpr.resolved): New.
1156         (DoResolve): Use it to handle a case of double resolution here.
1157         Handle a case of identical-name-and-type-name.
1158         * expression.cs (ArrayCreation.CheckIndices): Avoid double
1159         resolution by storing the results of expression resolution back
1160         into the "probes" array.
1161
1162 2005-04-15  Raja R Harinath  <rharinath@novell.com>
1163
1164         Fix cs0208-7.cs and cs0208-8.cs.
1165         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
1166         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
1167         error reporting to point out the reason a struct is not unmanaged.
1168
1169 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
1170
1171         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
1172           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
1173
1174 2005-04-13  Raja R Harinath  <rharinath@novell.com>
1175
1176         Fix #74528.
1177         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
1178         IdenticalNameAndTypeName here.
1179         (EventExpr.InstanceResolve): Likewise.
1180
1181 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
1182
1183         C# 2.0 DefaultCharSetAttribute implementation
1184         
1185         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
1186         which allows us to set GlobalNamespace for every resolve.
1187         (Attribute.ResolveArguments): Cut from Resolve.
1188         (Attribute.GetCharSetValue): Returns CharSet named argument.
1189         (Attribute.DefinePInvokeMethod): Gets default charset from
1190         module settings.
1191         (GlobalAttribute.ResolveAsTypeStep): Override.
1192         (GlobalAttribute.ResolveArguments): Override.
1193         
1194         * class.cs (TypeAttr): Is protected.
1195         
1196         * codegen.cs (ModuleClass.DefaultCharSet): New member.
1197         (ModuleClass.DefaultCharSetType): New memeber.
1198         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
1199         
1200         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
1201         charset from module.
1202         
1203         * delegate.cs (TypeAttr): Override.
1204         (Delegate.DefineType): Use this TypeAttr.
1205         
1206         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
1207         at very early stage (before types are defined) to resolve model
1208         module attributes. It will probably not work with corlib but it
1209         should be ok.
1210         
1211         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
1212         charset from module.
1213         
1214         * typemanager.cs (default_charset_type): New type.
1215
1216 2005-04-13  Raja R Harinath  <rharinath@novell.com>
1217
1218         * decl.cs (MemberCache.AddMethods): Don't warn if
1219         System.Object.Finalize has buggy MethodAttributes.
1220
1221         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
1222         removed below.
1223
1224 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
1225
1226         * doc.cs : detect ambiguous reference to overloaded members.
1227           Fixed bug #71603. MS 1.1 csc does not detect it.
1228
1229 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
1230
1231         * doc.cs : delegates must not be referenced with parameters.
1232           Fixed bug #71605.
1233
1234 2005-04-12  Miguel de Icaza  <miguel@novell.com>
1235
1236         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
1237
1238 2005-04-10  Miguel de Icaza  <miguel@novell.com>
1239
1240         * driver.cs (MainDriver): Stop processing if the CLS stage found
1241         errors. 
1242
1243         (CompilerCallableEntryPoint.InvokeCompiler): Always
1244         reset after execution;   Take a TextWriter argument for the
1245         output.
1246
1247         * report.cs: Use the error stream instead of hardcoding stderr. 
1248
1249 2005-04-09  Miguel de Icaza  <miguel@novell.com>
1250
1251         * class.cs: Reduce code paths to test, too small of an
1252         optimization to make it worth the extra testing.  Always perform
1253         it. 
1254
1255 2005-04-08  Raja R Harinath  <rharinath@novell.com>
1256
1257         Fix #74510.
1258         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
1259         operators that had errors reported on them.
1260
1261 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
1262
1263         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
1264         argument types.
1265         (Attribute.Resolve): Add named argument type checking.
1266         
1267         * class.cs (FixedField.Define): Use IsPrimitiveType
1268         
1269         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
1270         
1271         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
1272         unsafe parameter types.
1273         
1274         * statement.cs (Using.ResolveExpression): Add better error description.
1275         
1276         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
1277         
1278 2005-04-08  Raja R Harinath  <rharinath@novell.com>
1279
1280         Fix #74484.
1281         * attribute.cs (Attribute.GetAttributeUsage): Resolve
1282         AttributeUsageAttribute in the emitcontext of the attribute class,
1283         not in the emitcontext of the attributable entity it was attached to.
1284         * cs-parser.jay: Use 'current_class', not 'current_container',
1285         when creating a GlobalAttribute.
1286
1287 2005-04-08  Alp Toker  <alp@atoker.com>
1288
1289         * pending.cs: The fix to #58413 failed to compile methods implementing
1290         interfaces with/without params modifiers and vice versa, even though
1291         params modifiers aren't part of the signature. Make the modifier check
1292         less strict as in csc.
1293
1294 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
1295             Anoob V E  <projectmonokochi@rediffmail.com>
1296             Harilal P R  <projectmonokochi@rediffmail.com>
1297
1298         Fix #58413.
1299         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
1300         modifiers of pending methods.
1301         (PendingImplementation.PendingImplementation): Initialize it.
1302         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
1303         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
1304         with ParameterData.  Add check for modifiers.
1305         * class.cs (MethodData.Define): Update to changes.
1306
1307 2005-04-07  Raja R Harinath  <rharinath@novell.com>
1308
1309         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
1310
1311 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
1312
1313         * class.cs (PropertyMethod.Define): Check private accessor in abstract
1314         property.
1315         
1316         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
1317         
1318         * rootcontext.cs,
1319         * typemanager.cs: Registered RequiredAttributeAttribute.
1320         
1321 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
1322
1323         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
1324         Warning CS0169 is back at level 3.
1325         (IMethodData.SetMemberIsUsed): New method.
1326         
1327         * decl.cs (IsUsed): New value; moved from FieldBase.Status
1328         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
1329         
1330         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
1331
1332         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
1333         contants.
1334         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
1335         is used.
1336         
1337         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
1338         is used.
1339         
1340         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
1341         to avoid the problems with nested types.
1342
1343 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
1344             Anoob V.E  <projectmonokochi@rediffmail.com>
1345             Harilal P.R  <projectmonokochi@rediffmail.com>
1346             Raja R Harinath  <rharinath@novell.com>
1347
1348         Fix #73820.
1349         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
1350         attribute.
1351         * typemanager (GetConstructor): Make public.
1352
1353 2005-04-05  John Luke  <john.luke@gmail.com>
1354             Raja R Harinath  <rharinath@novell.com>
1355
1356         Fix #62232.
1357         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
1358         struct too.  Return false quicker in a few cases.
1359         (VerifyUnManaged): Use it.
1360
1361 2005-04-05  Raja R Harinath  <rharinath@novell.com>
1362
1363         Fix #74041.
1364         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
1365         not 'unreachable_seen'.
1366
1367 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
1368
1369         * attribute.cs (Attribute.GetValue): Removed unused.
1370         
1371         * codegen.cs (CodeGen.TrimExt): Removed unused.
1372         
1373         * cs-parser.jay (output): Removed unused.
1374         
1375         * cs-tokenizer.cs (hex_digits): Removed unused.
1376         
1377         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
1378         
1379         * expression.cs (Indirection.LoadExprValue): Removed unused.
1380         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
1381         
1382         * iterators.cs (Iterator.param_types): Removed unused.
1383         
1384         * statement.cs (Goto.block): Removed unused.
1385         (ToplevelBlock.did): Removed unused.
1386         (Switch.ResolveConstantSwitch): Removed unused.
1387
1388 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
1389
1390         * rootcontext.cs: Allow mcs to bootstrap with the compilation
1391         resetting thingy.
1392
1393 2005-04-19  Martin Baulig  <martin@ximian.com>
1394
1395         Merged r42462 from MCS and made it work for GMCS.
1396
1397         * class.cs (MethodCore.ds): Moved this field to `MemberBase'.
1398
1399         * generic.cs (GenericMethod.Define): Removed `return_type' argument.
1400
1401 2005-04-01  Raja R Harinath  <rharinath@novell.com>
1402
1403         Fix #74232 and cs0208-3.cs.
1404         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
1405         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
1406         unmanaged type.  Don't use FieldBuilders when 't' is a
1407         TypeBuilder.  Use ModFlags and MemberType fields.
1408         * class.cs (MemberBase.member_type): Rename from MemberType.
1409         (MemberBase.MemberType): New property.  Determines member_type on
1410         demand.
1411         (MemberBase.DoDefine): Don't initialize MemberType here.
1412         (FieldMember.Define): Likewise.
1413
1414 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
1415
1416         Fix #74241
1417         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
1418         Attributes are emitted there.
1419         
1420 2005-04-01  Raja R Harinath  <rharinath@novell.com>
1421
1422         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
1423         keyword in 'partial enum' too.
1424         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
1425         is not allowed).
1426         Report from Kamil Skalski <nazgul@omega.pl>.
1427
1428         Fix #74309.
1429         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
1430         have partial containers too.
1431
1432         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
1433         in block' checks to Block.CheckInvariantMeaningInBlock.
1434         * statement.cs (Block.GetKnownVariableInfo): Make private.
1435         (Block.IsVariableUsedInChildBlock): Remove.
1436         (Block.IsVariableUsedInBlock): Likewise.
1437         (Block.CheckInvariantMeaningInBlock): New.  Show location of
1438         conflicting declaration.
1439         (Block.AddVariable): Make error messages less long-winded and more
1440         specific.  Show location of conflicting declaration.
1441         * parameter.cs (Parameters.Location): New readonly property.
1442
1443 2005-03-31  Raja R Harinath  <rharinath@novell.com>
1444
1445         Clean up semantics of invoking ResolveMemberAccess.
1446         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
1447         can have an instance, ensure that we pass in a non-TypeExpression
1448         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
1449         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
1450         argument.  Update to changes and simplify.
1451         (FieldExpr.Emitinstance): Remove CS0120 check.
1452         (PropertyExpr.EmitInstance): Likewise.
1453         * expression.cs (Argument.Resolve): Likewise.
1454         (Invocation.DoResolve): Update to changes in semantics of
1455         InstanceExpression.
1456
1457 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
1458
1459         Fix #74241
1460         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
1461         customization.
1462         
1463         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
1464
1465 2005-03-31  Raja R Harinath  <rharinath@novell.com>
1466
1467         Fix difference in behaviour with commandline invocation.
1468         * driver.cs (Driver.Reset): New.
1469         (CompilerCallableEntryPoint): Call it.
1470
1471         * statement.cs (If.Resolve): Avoid spurious "uninitialized
1472         variable" warnings if the boolean expression failed to resolve.
1473
1474 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
1475
1476         * attribute.cs: Fix the union of several permissions when some of them
1477         are unrestricted (so the result isn't an unrestricted permission set).
1478         Fix #74036.
1479
1480 2005-03-30  Raja R Harinath  <rharinath@novell.com>
1481
1482         * ecore.cs (MemberExpr): New class.  Convert from interface
1483         IMemberExpr.
1484         (MemberExpr.ResolveMemberAccess): Refactor and move here from
1485         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
1486         error checks.
1487         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
1488         (MethodGroupExpr.IsExplicitImpl): Remove.
1489         (Expression.GetFieldFromEvent): Remove.
1490         (SimpleName.MemberStaticCheck): Remove.
1491         (SimpleName.DoSimpleNameResolve): Update to changes.
1492         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
1493         (MemberAccess.IdenticalNameAndTypeName): Remove.
1494         (MemberAccess.error176): Move to MemberExpr.
1495         (MemberAccess.DoResolve): Update to changes.
1496         (BaseAccess.DoResolve): Likewise.
1497
1498 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
1499
1500         C# 2.0 Conditional attribute class implementation
1501         
1502         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
1503         Analyzes class whether it has attribute which has ConditionalAttribute
1504         and its condition is not defined.
1505         
1506         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
1507         (Class.IsExcluded): New method. Search for at least one defined
1508         condition in ConditionalAttribute of attribute class.
1509
1510 2005-03-30  Raja R Harinath  <rharinath@novell.com>
1511
1512         * ecore.cs (PropertyExpr): Derive from Expression, not
1513         ExpressionStatement.
1514         (PropertyExpr.EmitStatement): Remove.
1515
1516 2005-03-29  Raja R Harinath  <rharinath@novell.com>
1517
1518         Fix #74060.
1519         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
1520         internal field "value__" of an enum be private.  The examples for
1521         "value__" that I found on MSDN all used FieldAttributes.Private.
1522
1523         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
1524         Don't mention IL method attribute names.
1525
1526         Fix #47991.  Remove a TODO.
1527         * statement.cs (Block.Toplevel): Make into a field.
1528         (Block.Parameters): Move into ToplevelBlock.
1529         (Block.known_variables): Rename from child_variable_names.
1530         (Block.Block): Remove variants that take Parameters.  Initialize
1531         'Toplevel' with the immediately surrounding toplevel block.
1532         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
1533         LocalInfo parameter.
1534         (Block.GetKnownVariableInfo): New.
1535         (Block.IsVariableNameUsedInChildBlock): Update.
1536         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
1537         the block, even though it may not be in scope.
1538         (Block.AddVariable): Remove Parameters parameter.  Use
1539         Toplevel.Parameters instead.
1540         (Block.AddConstant): Remove Parameters parameter.
1541         (Block.GetParameterReference): Update to use Toplevel.Parameters.
1542         (Block.IsParamaterReference): Likewise.
1543         (Block.IsLocalParameter): Likewise.  Simplify a lot.
1544         (ToplevelBlock.Parameters): New.  Moved from Block.
1545         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
1546         initialize Parameters to a non-null value.
1547         * cs-parser.jay: Update to changes.
1548         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
1549         simple names that mean different things in the same block.  Use
1550         Block.IsVariableNameUsedInBlock.
1551
1552 2005-03-28  Raja R Harinath  <rharinath@novell.com>
1553
1554         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
1555
1556 2005-03-26  Raja R Harinath  <harinath@acm.org>
1557
1558         Fix #73038.
1559         * assign.cs (Assign.DoResolve): When the RHS of an assignment
1560         fails to resolve, ensure that the LHS is still resolved as an
1561         lvalue.
1562
1563 2005-03-25  Raja R Harinath  <harinath@acm.org>
1564
1565         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
1566         ec.ContainerType.
1567         (Enum.current_ec): Remove.
1568         (Enum.LookupEnumValue): Remove EmitContext argument.
1569         Just uses the one created during DefineType.
1570         (Enum.FindMembers): Update.
1571         * expression.cs (MemberAccess.DoResolve): Update.
1572
1573 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
1574
1575         * assign.cs (Assign.DoResolve): Check for CS1717 when
1576         source and target are same (uses Equals).
1577
1578         * expression.cs (LocalVariableReference, ParameterReference,
1579         This): Implemented Equals, GetHashCode.
1580
1581         * statement.cs (Block.GetParameterReference): Removed useless
1582         local variable.
1583
1584 2005-03-22  Raja R Harinath  <rharinath@novell.com>
1585
1586         Fix cs0128.cs
1587         * statement.cs (Block.AddVariable): Ensure that we skip implicit
1588         blocks before deciding whether the error is cs0136 or cs0128.
1589
1590         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
1591         (using_alias_directive, using_namespace_directive): Pass
1592         MemberName, not an expression to Namespace.UsingAlias and
1593         Namespace.Using.
1594         (MakeName): Use the MemberName of the namespace.
1595         * namespace.cs (Namespace.MemberName): New.
1596         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
1597         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
1598         Likewise.
1599         * decl.cs (MemberName.Name): Make readonly.
1600         (MemberName.FromDotted): New "constructor".
1601         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
1602         (MemberCore.Name): Compute from MemberName on demand.
1603         (MemberCore.SetMemberName): Provide a way to change the
1604         MemberName.
1605         (MemberCore.AddToContainer): Don't take a fullname parameter.
1606         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
1607         fully qualified name of the container to the member name.
1608         (TypeContainer.AddToTypeContainer): Use a fully qualified name
1609         only if the type is a member of the root container.
1610         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
1611         MemberName.Left rather than searching for an embedded ".".
1612         (PartialContainer.CreatePart): Update to changes in RootContext.
1613         (MemberBase.ShortName): Turn into a property.  Use
1614         MemberCore.SetMemberName.
1615         (MemberBase.ExplicitInterfaceName): Remove.
1616         (MemberBase.UpdateMemberName): Remove.
1617         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
1618         (PropertyBase.SetMemberName): New override.
1619         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
1620         (Tree.GetDecl): New.
1621         (Tree.AllDecls): Rename from Decls.
1622         * attribute.cs, enum.cs, report.cs: Update to changes.
1623         * driver.cs (MainDriver): Use MemberName.FromDotted on
1624         RootContext.MainClass.
1625
1626 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
1627
1628         * class.cs (FixedField.Define): Check for CS1664 and more sanity
1629         checks.
1630
1631         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
1632
1633 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
1634
1635         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
1636         property accessor modifiers.
1637
1638         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
1639         fixed buffer attribute (CS1716).
1640         (PropertyMethod.HasCustomAccessModifier): When property accessor
1641         has custom modifier.
1642
1643         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
1644         modifiers.
1645         (PropertyExpr.DoResolveLValue): Add CS0272.
1646
1647 2005-03-17  Miguel de Icaza  <miguel@novell.com>
1648
1649         * convert.cs: When converting to a pointer, use the proper Conv.U
1650         or Conv.I depending on the source data type.
1651
1652         * cs-tokenizer.cs: Make the size for large decimal constants,
1653         fixes #72957.
1654
1655 2005-03-17  Martin Baulig  <martin@ximian.com>
1656
1657         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
1658         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
1659
1660 2005-03-17  Martin Baulig  <martin@ximian.com>
1661
1662         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
1663         to bool so we can return an error condition.
1664         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
1665         returned an error.
1666
1667 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
1668
1669         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
1670         attributes.
1671
1672 2005-03-16  Raja R Harinath  <rharinath@novell.com>
1673
1674         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
1675         Refactor to avoid traversing the list of assemblies, and to avoid
1676         string concatenation.
1677         * typemanager.cs (guid_attr_type): Remove.
1678         (negative_hits, pointers, references): Remove hashes.
1679         (type_hash): New.
1680         (GetConstructedType): New.  Uses type_hash to handle constructed
1681         types (arrays, references, pointers).
1682         (GetReferenceType, GetPointerType): Use it.
1683         (GetNestedType): New.  Uses type_hash to handle nested types of
1684         reflected types.
1685         (LookupType, LookupTypeDirect): Remove.
1686         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
1687         'types' hash and LookupTypeReflection directly.
1688         (params_string, params_object): Use GetConstructedType.
1689         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
1690         top-level types.
1691         (Namespace.Lookup): Use cached_types.
1692         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
1693         provided by old TypeManager.LookupType.
1694         * rootcontext.cs (MakeFQN): Remove.
1695         * decl.cs (DeclSpace.MakeFQN): Likewise.
1696         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
1697         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
1698         TypeManager.GetConstructedType.
1699         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
1700
1701 2005-04-16  Zoltan Varga  <vargaz@freemail.hu>
1702
1703         * cs-parser.jay: Fix build.
1704
1705 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
1706
1707         * class.cs (TypeContainer.CircularDepException) New nested
1708         (MethodCore.CheckBase): Report CS1715 for properties and indexers.
1709
1710         * cs-parser.jay: Reports CS1527 for any namespace element.
1711
1712         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
1713         Added CS0407.
1714
1715         * expression.cs (ParameterReference.IsAssigned): Changed error to
1716         CS0269.
1717         (Error_WrongNumArguments): Moved CS0245 detection here.
1718
1719         * statement.cs (Return.Resolve): Add CS1622 report.
1720
1721 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
1722
1723         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
1724
1725 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
1726
1727         * attribute.cs expression.cs: Get rid of some allocations.
1728
1729 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
1730
1731         * doc.cs : just eliminate the latest change.
1732
1733 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
1734
1735         * doc.cs : commented out the latest change. It breaks xml-030.cs
1736
1737 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
1738
1739         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
1740           fail. So invoke CreateType() in FindDocumentedType().
1741
1742 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
1743
1744         * cs-tokenizer.cs : added IsKeyword().
1745         * doc.cs : Detect keyword incorrectly used as identifier.
1746           Allow identifiers prefixed by @.
1747
1748 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
1749
1750         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
1751         It caused exception in namespace resolving (again!).
1752         
1753         * class.cs (Class.ctor): Removed exit.
1754         (PropertyMethod.ctor): ditto.
1755         
1756         * codegen.cs (Codegen.Reset): Reset static data.
1757         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
1758         
1759         * cs-tokenizer.cs (Cleanup): Removed.
1760         
1761         * driver.cs (GetSystemDir): Rewrote to one line command.
1762         It caused problem with unloaded dynamic modules.
1763         (UnixParseOption): Removed Exit.
1764         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
1765         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
1766         Now can be mcs used as library.
1767         
1768         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
1769         empty location.
1770         
1771         * location.cs (Reset): Reset static data.
1772         
1773         * namespace.cs (Reset): Reset static data.
1774         
1775         * report.cs (Report.Reset): Reset static data.
1776         
1777         * rootcontext.cs (RootContext.Reset): Reset static data.
1778         
1779         * tree.cs (RootTypes.ctor): Use Location.Null
1780         
1781         * typemanager.cs (TypeManager.Reset): Reset static data.
1782         (CoreLookupType): Removed Exit.
1783         (TypeHandle.Reset): Reset static data.
1784         
1785 2005-03-10  Raja R Harinath  <rharinath@novell.com>
1786
1787         Fix #73516.
1788         * typemanager.cs (ComputeNamespaces): Import namespaces from
1789         referenced modules too.
1790
1791 2005-03-09  Raja R Harinath  <rharinath@novell.com>
1792
1793         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
1794         than '.'.
1795
1796 2005-03-09  Raja R Harinath  <rharinath@novell.com>
1797
1798         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
1799         enclosing DeclSpace.  This ensures that a name-lookup populates
1800         more caches and there are fewer 'TypeExpression's.  Carve out
1801         nested type lookup into ...
1802         (LookupNestedTypeInHierarchy): ... this.
1803
1804 2005-04-15  Martin Baulig  <martin@ximian.com>
1805
1806         Merged r41590 from MCS and make it work in the generics land.
1807
1808         * generic.cs (TypeParameter.UpdateConstraints): Removed the
1809         `check' argument.
1810
1811         * class.cs (PartialContainer.UpdateConstraints): Removed.
1812         (PartialContainer.CheckConstraints): Removed.
1813         (PartialContainer.SetParameterInfo): Store the constraints here.
1814         (PartialContainer.DefineTypeParameters): New public method;
1815         resolve the type parameter's constraints here.  Note that the
1816         PartialContainer doesn't have an EmitContext anymore, so we must
1817         do this in the ClassPart.
1818
1819 2005-03-09  Raja R Harinath  <rharinath@novell.com>
1820
1821         Clean up a few partial-class semantics.  
1822         Fixes test-357.cs and cs1618-2.cs.
1823         * cs-parser.jay (struct_declaration): Use 'current_class' as
1824         parent of newly-created struct.  Remove call to Register ().
1825         Use 'pop_current_class' to complete handing the current struct.
1826         (interface_declaration): Likewise.
1827         (class_declaration): Likewise.
1828         (enum_declaration): Use 'current_class' as parent of newly created
1829         enum.
1830         (delegate_declaration): Likewise.
1831         (pop_current_class): New function.  This is used to handle closing
1832         up the 'current_class' and 'current_container', and pointing them
1833         to the enclosing class/container.
1834         (CSharpParser): Initialize 'current_class' too.
1835         * decl.cs (MemberCore): Add check for invariant: a partial
1836         container is not a parsed entity, and thus does not enclose any
1837         parsed members.
1838         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
1839         (DeclSpace.BaseTypeExpr): Use it.
1840         (DeclSpace.LookupType): Add check for invariant.
1841         * class.cs (TypeContainer): Add check for invariant: a nested
1842         class should have the same NamespaceEntry as its enclosing class.
1843         (TypeContainer.EmitFieldInitializers): Make virtual.
1844         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
1845         MemberCore.
1846         (TypeContainer.Register): Remove.
1847         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
1848         null.  Use TypeResolveEmitContext for resolving base types and
1849         interfaces.  Move initialization of Parts.TypeBuilder here from
1850         ...
1851         (TypeContainer.DefineNestedTypes): ... here.
1852         (PartialContainer): Take a Namespace not a NamespaceEntry.
1853         (PartialContainer.Create): Don't use Register.  Call the
1854         appropriate Add... function directly.
1855         (ClassPart): Take both the PartialContainer and the enclosing
1856         class as constructor arguments.
1857         (ClassPart.EmitFieldInitializers): Override.
1858         (ClassPart.PartFindNestedTypes): Remove.
1859         (FieldBase.GetInitializerExpression): Resolve the initializer
1860         expression in the emit context of the enclosing class.
1861         * tree.cs (RootTypes): Remove Register ().
1862         
1863 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
1864
1865         * cs-parser.jay: Removed CS0134.
1866         
1867         * driver.cs: Removed CS1901.
1868         
1869         * expression.cs (SizeOf.DoResolve): Don't report CS0233
1870         for predefined types.
1871
1872 2005-03-07  Duncan Mak  <duncan@novell.com>
1873
1874         * codegen.cs (Save):  Catch UnauthorizedAccessException as
1875         well. Fixes bug #73454.
1876
1877 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
1878
1879         * cs-tokenizer.cs (xtoken): Add CS1035.
1880         
1881         * class.cs (MethodData.Define): Add CS0683.
1882         (FieldMember.ctor): Add CS0681.
1883
1884 2005-03-07  Raja R Harinath  <rharinath@novell.com>
1885
1886         * ecore.cs (SimpleName.DoResolve): Rename from
1887         SimpleName.DoResolveAllowStatic.
1888         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
1889         Pass 'intermediate' flag to MemberStaticCheck.
1890         (SimpleName.MemberStaticCheck): Skip "static check" only in case
1891         of "intermediate" lookups via MemberAccess.
1892         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
1893         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
1894
1895 2005-03-07  Raja R Harinath  <rharinath@novell.com>
1896
1897         Fix #73394.
1898         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
1899         slipped in because of variable names that are identical to a
1900         builtin type's BCL equivalent ('string String;', 'int Int32;').
1901         (PropertyExpr.EmitInstance): Likewise.
1902
1903 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
1904
1905         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
1906         
1907         * report.cs (warning_ignore_table): Made public.
1908
1909 2005-03-04  Raja R Harinath  <rharinath@novell.com>
1910
1911         Fix #73282.
1912         * class.cs (MethodData.Emit): Pass 'container' to
1913         container.GetObsoleteAttribute instead of 'container.Parent'.
1914
1915 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
1916
1917         * cs-parser.jay: Add 1534 error test.
1918
1919         * iterators.cs (Yield.CheckContext): Add error 1629.
1920         (Iterator.ctor): Save unsafe modifier.
1921         (MoveNextMethod.DoEmit): Restore unsafe context.
1922
1923         * namespace.cs (UsingAlias): Better error message.
1924
1925 2005-03-03  Dan Winship  <danw@novell.com>
1926
1927         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
1928         the warning message [#73219]
1929
1930 2005-03-03  Raja R Harinath  <rharinath@novell.com>
1931
1932         Fix compile with MCS 1.0.0.0.
1933         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
1934         w_restore to not depend on string constant folding.
1935
1936 2005-03-03  Raja R Harinath  <rharinath@novell.com>
1937
1938         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
1939         CS0246 check to users who passed 'silent = false'.
1940         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
1941         check.
1942         (SimpleName.SimpleNameResolve): Update.
1943         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
1944         (MemberAccess.IdenticalNameAndTypeName): Update.
1945         * doc.cs (FindDocumentedTypeNonArray): Update.
1946
1947 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
1948
1949         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
1950         * parameters.cs (ComputeAndDefineParameters): Remove.
1951         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
1952         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
1953         Use GetParameterInfo.
1954
1955 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
1956
1957         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
1958
1959 2005-03-02  Raja R Harinath  <rharinath@novell.com>
1960
1961         Unify DeclSpace.LookupType and DeclSpace.FindType.
1962         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
1963         is in charge of defining nested types on demand.
1964         (DeclSpace.LookupType): Use it when the current_type is a
1965         TypeBuilder.  Use LookupTypeDirect for reflected types.
1966         (DeclSpace.FindType): Remove.
1967         (DeclSpace.LookupInterfaceOrClass): Likewise.
1968         (DeclSpace.DefineTypeAndParents): Likewise.
1969         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
1970         DeclSpace.LookupType.
1971         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
1972         * typemanager.cs (LookupType): Simplify.
1973         (AddUserType): Remove type from negative_hits.
1974         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
1975         * class.cs (TypeContainer.FindMembers): Move handling of nested
1976         types ...
1977         (TypeContainer.FindMembers_NestedTypes): ... here.
1978         (TypeContainer.FindNestedType): Implement override.
1979         (ClassPart.FindNestedType): Delegate to PartialContainer.
1980         (ClassPart.PartFindNestedType): Looks up the nested types of the
1981         part alone.
1982
1983 2005-04-14  Martin Baulig  <martin@ximian.com>
1984
1985         * generic.cs (ConstructedType): Moved all the type lookup and
1986         nested class logic into SimpleName.
1987         (ConstructedType.ResolveConstructedType): Our underlying type is
1988         already fully resolved; all the type lookup stuff is in
1989         SimpleName.
1990
1991         * ecore.cs (SimpleName.ResolveAsTypeStep): Resolve nested
1992         constructed types here instead of in ConstructedType.
1993
1994         * decl.cs (MemberName.GetTypeExpression): Always create a
1995         SimpleName, not a ConstructedType.
1996         (DeclSpace.ResolveNestedType): Removed; this is now in SimpleName.
1997
1998 2005-03-02  Martin Baulig  <martin@ximian.com>
1999
2000         * class.cs (TypeContainer.DoDefineMembers): We also need a default
2001         static constructor in static classes.
2002
2003 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
2004
2005         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
2006         sizeParamIndex is not specified.
2007
2008 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
2009
2010         Fix #73117
2011         * report.cs (WarningMessage.IsEnabled): Missing null check.
2012
2013 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
2014
2015         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
2016         in the fields and not in the properties.
2017
2018 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
2019
2020         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
2021         fields as well.
2022
2023 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
2024
2025         * attribute.cs: Small refactoring (improved robustness).
2026         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
2027         (ValidateGuid): Removed.
2028         (Resolve): Removed referenced to above mentioned.
2029         (GetAttributeUsage): Made private and changed to work without
2030         class assistance.
2031         (GetIndexerAttributeValue): Don't crash.
2032         (GetConditionalAttributeValue): Ditto.
2033         (GetClsCompliantAttributeValue): Ditto.
2034         (ExtractSecurityPermissionSet): All attributes exceptions are
2035         error 648.
2036         (GetPropertyValue): New helper.
2037         (GetMethodImplOptions): New method.
2038         (DefinePInvokeMethod): Reuse common code. Implemented handling of
2039         some missing properties.
2040         
2041         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
2042         (Method.ApplyAttributeBuilder): Updated.
2043         
2044         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
2045         exception.
2046
2047 2005-02-28  Raja R Harinath  <rharinath@novell.com>
2048
2049         Fix #73052.
2050         * report.cs (Report.SymbolRelatedToPreviousError): Handle
2051         non-simple types (array, pointer, reference).
2052
2053 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
2054
2055         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
2056
2057         * class.cs (MethodCore.IsDuplicateImplementation): Special error
2058         for operators.
2059         (Method.CheckBase): Catch wrong destructor here.
2060         (MethodData.Define): Add errors 550, 668.
2061
2062         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
2063
2064         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
2065
2066         * pending.cs (VerifyPendingMethods): Add error 551.
2067
2068         * typemanager.cs (CSharpName): Next error report helper.
2069
2070 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
2071
2072         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
2073         attributes. Removed useless attribute double check.
2074         It saves almost 2MBs for corlib.
2075
2076 2005-02-25  Raja R Harinath  <rharinath@novell.com>
2077
2078         Fix #72924.
2079         * statement.cs (ExpressionStatement.Resolve): Make robust to being
2080         called twice in case of error.
2081
2082 2005-02-23  Chris Toshok  <toshok@ximian.com>
2083
2084         Fix compiler portions of #72827.
2085         * statement.cs (Block.Emit): call Begin/EndScope on the
2086         EmitContext instead of the ILGenerator.
2087
2088         * codegen.cs (EmitContext.BeginScope): new method, call
2089         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
2090         we have one.)
2091         (EmitContext.BeginScope): same, but EndScope and CloseScope
2092
2093         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
2094         offset and call the superclass's OpenScope(int) with it.
2095         (SymbolWriter.CloseScope): get the current il
2096         offset and call superclass's CloseScope(int) with it.
2097
2098 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
2099
2100         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
2101         CS1677 for out and ref as well.
2102
2103         * class.cs (Method.Define): Add error CS1599 detection.
2104         
2105         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
2106         
2107         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
2108         
2109         * delegate.cs (Delegate.Define): Add error CS1599 detection.
2110         
2111         * support.cs.cs (ModifierDesc): New helper method.
2112
2113 2005-02-23  Raja R Harinath  <rharinath@novell.com>
2114             Abin Thomas  <projectmonokochi@rediffmail.com>
2115             Anoob V E  <projectmonokochi@rediffmail.com>
2116             Harilal P R  <projectmonokochi@rediffmail.com>
2117
2118         Fix #57851, #72718.
2119         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
2120         MemberLookup (used for error reporting) actually returns a result.
2121         Fix error report number (122, not 112).
2122
2123 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
2124             Anoob V E  <projectmonokochi@rediffmail.com>
2125             Harilal P R  <projectmonokochi@rediffmail.com>
2126
2127         Fix #71134.
2128         * pending.cs (PendingImplementation.GetAbstractMethods):
2129         Find NonPublic members too.
2130
2131 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
2132
2133         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
2134         Fixed error 217.
2135         
2136         * class.cs (MethodCore.CheckMethodAgainstBase):
2137         Add error 239 report.
2138
2139 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
2140
2141         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
2142         
2143         * class.cs (Operator.Define): Add error 217 report.
2144         
2145 2005-02-21  Raja R Harinath  <rharinath@novell.com>
2146
2147         Fix #68955.
2148         * expression.cs (Invocation.IsApplicable): Make public.
2149         (Invocation.IsParamsMethodApplicable): Likewise.
2150         * delegate.cs (Delegate.VerifyApplicability): Don't use
2151         Invocation.VerifyArgumentCompat for parameter applicability
2152         testing.  Use Invocation.IsApplicable and
2153         Invocation.IsParamsMethodApplicable.
2154
2155 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
2156
2157         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
2158         
2159         * class.cs (Operator.Define): Add error 217 report.
2160         
2161 2005-02-21  Raja R Harinath  <rharinath@novell.com>
2162
2163         * namespace.cs (UsingEntry.Resolve): Undo change below.
2164
2165 2005-02-21  Raja R Harinath  <rharinath@novell.com>
2166
2167         Fix #72756.
2168         * ecore.cs (Expression.MemberLookupFailed): Add argument to
2169         disable the error message when the extended MemberLookup also
2170         fails.
2171         (Expression.MemberLookupFinal): Update.
2172         (SimpleName.DoSimpleNameResolve): Update.
2173         * expression.cs (MemberAccess.ResolveNamespaceOrType):
2174         Don't use MemberLookupFinal.
2175         (New.DoResolve): Update.
2176         (BaseAccess.CommonResolve): Update.
2177
2178 2005-02-21  Raja R Harinath  <rharinath@novell.com>
2179
2180         Fix #72732.
2181         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
2182         occured previously, don't resolve again.
2183
2184 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
2185
2186         Fix #69949
2187         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
2188         argument. Call ResolveAttributeUsage for unresolved.
2189         when types doesn't match ctor arguments.
2190         
2191         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
2192         for nested attribute classes.
2193         (Class.attribute_usage): Removed.
2194         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
2195         for attribute class.
2196         
2197         * ecore.cs (IsAttribute): Removed.
2198         
2199         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
2200         
2201         * rootcontext.cs (RegisterAttribute): Removed, attributes are
2202         now normal types.
2203         (attribute_types): Removed.
2204         (EmitCode): Global attributes are emited as the latest.
2205
2206 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
2207
2208         * class.cs (EmitFieldInitializers): Don't emit field initializer
2209         for default values when optimilization is on.
2210         
2211         * constant.cs (Constant.IsDefaultValue): New property.
2212         
2213         * driver.cs: Add /optimize handling.
2214         
2215         * constant.cs,
2216         * ecore.cs,
2217         * literal.cs: Implement new IsDefaultValue property.
2218         
2219         * rootcontext.cs (Optimize): New field, holds /optimize option.
2220
2221 2005-02-18  Raja R Harinath  <rharinath@novell.com>
2222
2223         Fix crasher in re-opened #72347.
2224         * namespace.cs (Namespace.Lookup): Return null if
2225         DeclSpace.DefineType returns null.
2226
2227         Fix #72678.
2228         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
2229
2230 2005-02-18  Raja R Harinath  <rharinath@novell.com>
2231
2232         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
2233         now returns null if it cannot resolve to an lvalue.
2234         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
2235         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
2236         returned null.  Remove check for SimpleName.
2237         (EventExpr.DoResolveLValue): New.
2238         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
2239         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
2240         error from ...
2241         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
2242         avoid CS0131 error.
2243         (Unary.ResolveOperator): Move CS0211 check ...
2244         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
2245         CS0131 error.
2246         (Unary.DoResolveLValue): Simplify.
2247         (AddressOf.DoResolveLValue): New.
2248         (ArrayAccess.DoResolveLValue): New.
2249
2250 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
2251
2252         * attribute.cs (Attribute.Resolve): Add arguments casting for
2253         when types doesn't match ctor arguments.
2254
2255 2005-02-16  Raja R Harinath  <rharinath@novell.com>
2256
2257         Fix parts of #63202.
2258         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
2259         lookup of operator in base type.  Ensure that all checks happen
2260         when the operator resolves to an "op_..." method.
2261
2262 2005-02-15  Raja R Harinath  <rharinath@novell.com>
2263
2264         Fix #71992.
2265         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
2266         'ignore_cs0104' parameter.  Pass it to ...
2267         (NamespaceEntry.Lookup): ... this.
2268         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
2269         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
2270         (TypeLookupExpression.DoResolveAsTypeStep): Update.
2271         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
2272         Update.  Request that cs0104 errors be ignored.
2273         (ComposedCast.ResolveAsTypeStep): Update.
2274
2275 2005-02-14  Raja R Harinath  <rharinath@novell.com>
2276
2277         Fix #59209.
2278         * expression.cs (Invocation.BetterFunction): Remove support for
2279         comparing virtual functions and their overrides.
2280         (Invocation.IsOverride): New.
2281         (Invocation.OverloadResolve): Don't consider 'override' functions
2282         during candidate selection.  Store them in a lookaside list.
2283         If the selected method is a 'virtual' function, use the list to
2284         find any overrides that are closer to the LHS type.
2285
2286 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
2287
2288         * expression.cs (New.DoResolve): Add complex core type reduction.
2289         (New.Constantify): Converts complex core type syntax like 'new int ()'
2290         to simple constant.
2291         
2292 2005-02-14  Raja R Harinath  <rharinath@novell.com>
2293
2294         * decl.cs (EntryType.EntryType): New constructor to create an
2295         updated copy of a cache entry.
2296         (MemberCache.AddMethods): Use it.
2297         (MemberCache.ClearDeclaredOnly): Remove.
2298         (MemberCache.MemberCache): Update.
2299
2300 2005-02-11  Miguel de Icaza  <miguel@novell.com>
2301
2302         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
2303         variable.  This one is represents the actual low-level declaration
2304         of the method, as opposed to the semantic level `IsStatic'.   
2305
2306         An anonymous method which is hosted into a static method might be
2307         actually an instance method.  IsStatic would reflect the
2308         container, while MethodIsStatic represents the actual code
2309         generated.
2310
2311         * expression.cs (ParameterReference): Use the new MethodIsStatic
2312         instead of IsStatic.
2313
2314         * anonymous.cs (AnonymousMethod.Compatible): Pass the
2315         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
2316         set on the current EmitContext. 
2317
2318         * expression.cs (Cast): Overload DoResolveLValue so we can pass
2319         resolve our casted expression as an LValue.  This triggers the
2320         proper LValue processing that is later required by Assign.
2321
2322         This fixes 72347.
2323
2324         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
2325
2326 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
2327
2328         C# 2.0 Fixed buffer implementation
2329
2330         * anonymous.cs: Update after RegisterHelperClass renaming.
2331
2332         * attribute.cs (AttributeTester.fixed_buffer_cache):
2333         Cache of external fixed buffers.
2334         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
2335         implementation if field is fixed buffer else null.
2336
2337         * class.cs
2338         (TypeContainer.AddField): Accept FieldMember instead of Field.
2339         (FieldBase.IsFieldClsCompliant): Extracted code from
2340         VerifyClsCompliance descendant customization.
2341         (FixedField): New class handles fixed buffer fields.
2342         (FixedFieldExternal): Keeps information about imported fixed
2343         buffer.
2344         (IFixedField): Make access to internal or external fixed buffer
2345         same.
2346
2347         * cs-parser.jay: Add fixed buffer parsing.
2348
2349         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
2350         buffer.
2351
2352         * expression.cs (Indirection): Extended implementation to accept
2353         fixed buffer field.
2354         (PointerArithmetic.Emit): Get element from fixed buffer as well.
2355         (ElementAccess.MakePointerAccess): Get type as parameter.
2356         (DoResolve): Add fixed buffer field expression conversion.
2357         (DoResolveLValue): Ditto.
2358         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
2359         (ArrayPtr): Derives from FixedBufferPtr.
2360         (ArrayPtr.Emit): Add extra emit for array elements.
2361
2362         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
2363
2364         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
2365         for compiler generated types.
2366         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
2367
2368         * statement.cs (Fixed): Refactored to be easier add fixed buffer
2369         and consume less memory.
2370         (Fixed.Resolve): Add fixed buffer case.
2371
2372         * typemanager.cs (compiler_generated_attr_ctor,
2373         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
2374         (HasElementType): Add our own implementation to work on every
2375         runtime.
2376
2377 2005-02-11  Miguel de Icaza  <miguel@novell.com>
2378
2379         * anonymous.cs (CaptureContext): Track whether `this' has been
2380         referenced.   
2381
2382         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
2383         only captured `this' if it was implicitly done (instance
2384         methods/variables were used). 
2385
2386         * codegen.cs (EmitContext.CaptureThis): New method to flag that
2387         `this' must be captured.
2388
2389 2005-01-30  Miguel de Icaza  <miguel@novell.com>
2390  
2391         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
2392         is null it means that there has been no need to capture anything,
2393         so we just create a sibling.
2394
2395         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
2396
2397         Just a partial fix.  The other half is fairly elusive.
2398         
2399 2005-02-10  Raja R Harinath  <rharinath@novell.com>
2400
2401         Fix #52586, cs0121-4.cs.
2402         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
2403         and return a hashtable.
2404         (MemberCache.ClearDeclaredOnly): New.
2405         (MemberCache.MemberCache): Update to change.  Make a deep copy of
2406         the method_hash of a base type too.
2407         (MemberCache.AddMethods): Adapt to having a deep copy of the base
2408         type methods.  Overwrite entries with the same MethodHandle so
2409         that the ReflectedType is correct.  The process leaves in base
2410         virtual functions and their overrides as distinct entries.
2411         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
2412         matters since it was boxed in a ArrayList before.
2413         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
2414         modifier.
2415         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
2416         case of a virtual function and its override (choose the overload
2417         as better).
2418         (Invocation.OverloadResolve): Avoid 'override' members during
2419         'applicable_type' calculation.
2420
2421 2005-03-28  Raja R Harinath  <rharinath@novell.com>
2422
2423         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
2424         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
2425         GetTypeHandle.  It is possible for a reflected type to derive from
2426         a TypeBuilder (e.g., int[] derives from the TypeBuilder
2427         System.Array during mscorlib compilation).
2428         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
2429         contain a method_hash, don't create one either.  Don't create a
2430         deep copy of the base cache's method_hash.
2431         (MemberCache.SetupCache): Rename back from DeepCopy.
2432         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
2433         already initialized.  If we see an override function, add its
2434         underlying base virtual function to the member_hash too.
2435
2436 2005-02-09  Raja R Harinath  <rharinath@novell.com>
2437
2438         Combine two near-redundant caches.
2439         * typemanager.cs (method_params): Rename from method_internal_params.
2440         (TypeManager.GetParameterData): New.  Replace
2441         Invocation.GetParameterData.
2442         (TypeManager.LookupParametersByBuilder): Remove.
2443         * expression.cs (Invocation.method_parameter_cache): Remove.
2444         (Invocation.GetParameterData): Remove.
2445         Update to changes.
2446         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
2447         Update to changes.
2448
2449 2005-02-08  Raja R Harinath  <rharinath@novell.com>
2450
2451         Fix #72015.
2452         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
2453         TypeManager.multicast_delegate_type is null, resolve it by looking
2454         up "System.MulticastDelegate".
2455         * rootcontext.cs (RootContext.ResolveCore): Simplify.
2456
2457 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
2458             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
2459             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
2460
2461         Fix cs0164.cs.
2462         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
2463         (LabeledStatement.AddReference): New.  Set 'referenced'.
2464         (Goto.Resolve): Use it.
2465
2466 2005-02-05  John Luke  <john.luke@gmail.com>
2467
2468         * driver.cs: remove duplicate -doc line in Usage ()
2469
2470 2005-02-04  Raja R Harinath  <rharinath@novell.com>
2471
2472         * location.cs (Location.AddFile): Fix CS2002 error report.
2473
2474 2005-02-02  Martin Baulig  <martin@ximian.com>
2475
2476         * delegate.cs (Delegate.DefineType): Report an internal error if
2477         TypeManager.multicast_delegate_type is null.  See bug #72015 for
2478         details.        
2479
2480 2005-02-02  Raja R Harinath  <rharinath@novell.com>
2481
2482         Fix a crasher in a variant of #31984.
2483         * const.cs (Constant.CheckBase): New override that defers the
2484         new-or-override check in case the base type hasn't been populated
2485         yet.
2486         (Constant.Define): Ensure the new-or-override check is performed.
2487
2488 2005-02-01  Duncan Mak  <duncan@ximian.com>
2489
2490         * const.cs (LookupConstantValue): Check that `ce' is not null
2491         before calling GetValue ().
2492
2493 2005-02-01  Raja R Harinath  <rharinath@novell.com>
2494
2495         Fix test-334.cs (#69519).
2496         * cs-parser.jay (using_alias_directive): Pass in an expression to
2497         NamespaceEntry.UsingAlias.
2498         (using_namespace_directive): Pass in an expression to
2499         NamespaceEntry.Using.
2500         (namespace_name): Don't flatten to a string.
2501         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
2502         (NamespaceEntry.AliasEntry.Resolve): Lookup using
2503         ResolveAsTypeStep.
2504         (NamespaceEntry.UsingEntry): Likewise.
2505         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
2506         changes.
2507         (NamespaceEntry.LookupForUsing): Remove.
2508         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
2509         names.
2510         (NamespaceEntry.Lookup): Remove support for dotted names.
2511
2512 2005-02-01  Raja R Harinath  <rharinath@novell.com>
2513
2514         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
2515         split into two.
2516         (NamespaceEntry.ImplicitParent): Compute on demand.
2517         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
2518         parallels the current.
2519         (NamespaceEntry.LookupForUsing): Use it.
2520         (NamespaceEntry.Lookup): If the current namespace-entry is
2521         implicit, don't search aliases and using tables.
2522
2523 2005-02-01  Raja R Harinath  <rharinath@novell.com>
2524
2525         Fix #31984.
2526         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
2527         BaseCache here.
2528         (TypeContainer.BaseCache): Compute on demand.
2529         (TypeContainer.FindMembers): Define constants and types if they're
2530         not already created.
2531         (FieldMember.Define): Move resetting of ec.InUnsafe before error
2532         check.
2533         * const.cs (Constant.Define): Make idempotent.
2534
2535 2005-01-29  Miguel de Icaza  <miguel@novell.com>
2536
2537         * pending.cs: Produce better code (no nops produced by using Ldarg
2538         + value).
2539         
2540         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
2541         i - 1' it should be arg + 1.
2542
2543         Fixes bug #71819.
2544
2545 2005-01-28  Raja R Harinath  <rharinath@novell.com>
2546
2547         * attribute.cs (Attribute.CheckAttributeType): Make private
2548         non-virtual.
2549         (Attribute.ResolveType): Make virtual.
2550         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
2551         handling of RootContext.Tree.Types.
2552
2553 2005-01-27  Raja R Harinath  <rharinath@novell.com>
2554
2555         Update attribute-handling to use the SimpleName/MemberAccess
2556         mechanisms.
2557         * cs-parser.jay (attribute): Pass in an expression to the
2558         constructors of Attribute and GlobalAttribute.
2559         * attribute.cs (Attribute): Take an expression for the name.
2560         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
2561         passed in attribute name expression.
2562         (Attribute.CheckAttributeType): Use it.
2563         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
2564         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
2565         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
2566         argument to prevent error messages if the lookup fails.
2567
2568 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
2569
2570         * expression.cs (Indirection): Implemented IVariable interface
2571         to support indirection in AddressOf operator.
2572         (PointerArithmetic.Emit): Add optimalization for case where
2573         result can be precomputed.
2574
2575 2005-01-26  Martin Baulig  <martin@ximian.com>
2576
2577         * class.cs (TypeContainer.AttributeTargets): Return the correct
2578         AttributeTargets depending on our `Kind' instead of throwing an
2579         exception; fixes #71632.
2580
2581 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
2582
2583         Fix #71257
2584         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
2585         constant members.
2586
2587 2005-03-17  Martin Baulig  <martin@ximian.com>
2588
2589         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
2590         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
2591
2592 2005-03-17  Martin Baulig  <martin@ximian.com>
2593
2594         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
2595         to bool so we can return an error condition.
2596         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
2597         returned an error.
2598
2599 2005-03-17  Martin Baulig  <martin@ximian.com>
2600
2601         * generic.cs (TypeMananager.IsIEnumerable): New public method.
2602
2603         * convert.cs (Convert.ImplicitReferenceConversion(Exists)): Allow
2604         converting from an array-type of T to `IEnumerable<T>'.
2605
2606 2005-03-16  Martin Baulig  <martin@ximian.com>
2607
2608         * generic.cs (Nullable.Unwrap): Implement IAssignMethod.
2609         (Nullable.LiftedUnaryMutator): New public class.
2610
2611         * expression.cs (UnaryMutator.DoResolve): Added support for
2612         Nullable Types.
2613
2614 2005-03-14  Martin Baulig  <martin@ximian.com>
2615
2616         * generic.cs (Nullable.NullCoalescingOperator): Implemented.
2617
2618 2005-03-14  Martin Baulig  <martin@ximian.com>
2619
2620         * generic.cs (Nullable.LiftedBinaryOperator): Added support for
2621         the comparision operators `<', `>', `<=' and `>='.
2622
2623 2005-03-13  Martin Baulig  <martin@ximian.com>
2624
2625         * generic.cs
2626         (Nullable.NullLiteral): Renamed to `Nullable.NullableLiteral' to
2627         avoid confusion with the `NullLiteral'.
2628         (Nullable.LiftedBinaryOperator): Correctly implement `==' and '!='.
2629
2630 2005-03-13  Martin Baulig  <martin@ximian.com>
2631
2632         * expression.cs (Binary.ResolveOperator): For `==' and `!=', allow
2633         comparing arbitrary types with the null literal.
2634
2635 2005-03-13  Martin Baulig  <martin@ximian.com>
2636
2637         * generic.cs (Nullable.LiftedBinaryOperator): Add support for the
2638         boolean operators '&&', '||', '&' and '|'.
2639         (Nullable.OperatorTrueOrFalse): New public class.
2640
2641         * ecore.cs (Expression.GetOperatorTrue/False): Return an `Expression'
2642         instead of a `StaticCallExpr'; added support for nullables.
2643
2644 2005-03-10  Martin Baulig  <martin@ximian.com>
2645
2646         * expression.cs
2647         (ArrayAccess.EmitDynamicInitializers): Use `etype.IsValueType'
2648         rather than `etype.IsSubclassOf (TypeManager.value_type)'.      
2649
2650 2005-03-07  Martin Baulig  <martin@ximian.com>
2651
2652         * generic.cs (Nullable.Unwrap): Implement IMemoryLocation and make
2653         it work if `expr' is not an IMemoryLocation.
2654         (Nullable.Lifted): Implement IMemoryLocation.
2655         (Nullable.LiftedConversion.ResolveUnderlying): Use the correct
2656         target type.
2657
2658 2005-03-05  Martin Baulig  <martin@ximian.com>
2659
2660         * generic.cs (Nullable.Unwrap, Wrap): New protected classes.
2661         (Nullable.Lifted): New abstract class; rewrote the lifted conversions.
2662         (Nullable): Added support for lifted unary and binary operators.
2663
2664         * expression.cs (Unary.DoResolve): Added support for nullable types.
2665         (Binary.DoResolve): Likewise.
2666         (Conditional.DoResolve): Likewise.
2667
2668 2005-03-02  Martin Baulig  <martin@ximian.com>
2669
2670         * decl.cs (DeclSpace.SetParameterInfo): Make this virtual.
2671
2672         * class.cs (ClassPart.SetParameterInfo): Override this.
2673         (PartialContainer.SetParameterInfo): Override this.
2674         (TypeContainer.CheckConstraints): New protected method.
2675         (PartialContainer.CheckConstraints): Override this and check
2676         whether the same contraints were specified in all parts of a
2677         partial generic type definition.
2678         (PartialContainer.UpdateConstraints): New public method.
2679
2680         * generic.cs (TypeParameter.UpdateConstraints): New public method.
2681
2682 2005-03-02  Martin Baulig  <martin@ximian.com>
2683
2684         Committing a patch from Carlos Alberto Cortez to fix #72887.
2685
2686         * convert.cs (Convert.ExplicitReferenceConversionExists): Allow
2687         casts from `T []' to `int []'.
2688
2689 2005-03-02  Martin Baulig  <martin@ximian.com>
2690
2691         * generic.cs (TypeManager.IsEqual): Make this symmetric.
2692
2693         * expression.cs (Binary.ResolveOperator): When resolving a
2694         BinaryDelegate, use `TypeManager.IsEqual (l, r)' rather than just
2695         `=='.  Fixes #71866.  See gen-127.cs.
2696
2697 2005-03-02  Martin Baulig  <martin@ximian.com>
2698
2699         * class.cs (TypeContainer.DoDefineMembers): We also need a default
2700         static constructor in static classes.
2701
2702 2005-03-02  Martin Baulig  <martin@ximian.com>
2703
2704         * generic.cs
2705         (NullableType.Name, NullableType.FullName): Add a "?" to the name.
2706         (Nullable.LiftedConversion): Added support for user-defined
2707         conversions.
2708
2709         * cs-tokenizer.cs (Tokenizer.PutbackCloseParens): New public method.
2710
2711         * cs-parser.jay: Use ComposedCast everywhere instead of
2712         NullableType, so we don't need to check for NullableType
2713         everywhere.
2714         (conditional_expression): Added `INTERR CLOSE_PARENS' rule for the
2715         case where we'll be resolved into a `parenthesized_expression_0'
2716         afterwards.
2717
2718         * convert.cs
2719         (Convert.UserDefinedConversion): Added nullable conversions.
2720
2721 2005-02-28  Martin Baulig  <martin@ximian.com>
2722
2723         * generic.cs (TypeManager.IsNullableType): New static method.
2724         (Nullable): New abstract class.
2725         (Nullable.NullLiteral): New public class.
2726         (Nullable.LiftedConversion): New public class.
2727
2728         * cs-parser.jay (non_expression_type): Changed `builtin_types' to
2729         `builtin_types opt_nullable'.
2730
2731         * convert.cs
2732         (Convert.ImplicitConversionStandard): Added nullable conversions.
2733         (Convert.ExplicitConversionStandard): Likewise.
2734         (Convert.ExplicitConversion): Likewise.
2735
2736 2005-02-26  Martin Baulig  <martin@ximian.com>
2737
2738         * expression.cs (ComposedCast.DoResolveAsTypeStep): Allow `dim' to
2739         begin with a "?", for instance "?[]".  Don't do a type lookup if
2740         `dim' is empty.
2741
2742 2005-02-25  Martin Baulig  <martin@ximian.com>
2743
2744         The first part of Nullable Types :-)
2745
2746         * generic.cs (NullableType): New public class.
2747         (NullCoalescingOperator): New public class.
2748         (TypeArguments.Resolve): Add a CS0306 check.
2749
2750         * cs-parser.jay (opt_error_modifier): Removed, this was unused.
2751         (opt_nullable): New rule.
2752         (type): Added `opt_nullable' to `namespace_or_type_name',
2753         `builtin_types' and `pointer_type'.
2754         (array_type): Added `opt_nullable'.
2755         (opt_rank_specifier_or_nullable): New rule; this is the
2756         combination of `opt_rank_specifier' and `opt_nullable'.
2757         (opt_error): New rule; catch errors here.
2758         (nullable_type_or_conditional): New rule; we use this to check for
2759         nullable and still detect the conditional operator.
2760         (local_variable_type): Use `opt_rank_specifier_or_nullable'
2761         instead `opt_rank_specifier'.
2762
2763         * expression.cs (ComposedCast.DoResolveAsTypeStep): Added support
2764         for nullables.
2765
2766 2005-02-24  Martin Baulig  <martin@ximian.com>
2767
2768         * README, README.Changes: Removed; they're old and obsolete.
2769
2770 2005-02-22  Martin Baulig  <martin@ximian.com>
2771
2772         * generic.cs (TypeParameter.Resolve): If resolving the constraints
2773         returned an error, set `constraints' to null to avoid a crash
2774         later on.
2775         (TypeParameter.ResolveType): Likewise.
2776
2777 2005-02-22  Martin Baulig  <martin@ximian.com>
2778
2779         * generic.cs
2780         (Constraints.ResolveTypes): Protect against being called twice.
2781         (Constraints.CheckInterfaceMethod): Don't call ResolveTypes().
2782         (TypeParameter.ResolveType): New public method; calls
2783         constraints.ResolveTypes().
2784         (TypeParameter.DefineType): Moved constraints.ResolveType() out
2785         into the new ResolveType().
2786         (GenericMethod.Define): Call ResolveType() on all our
2787         TypeParameter's.        
2788
2789 2005-02-21  Martin Baulig  <martin@ximian.com>
2790
2791         * generic.cs
2792         (TypeManager.generic_nullable_type): New static public field.
2793         (TypeManager.InitGenericCoreType): Lookup "System.Nullable`1".
2794
2795         * rootcontext.cs
2796         (RootContext.ResolveCore): Resolve "System.Nullable`1".
2797
2798 2005-02-15  Martin Baulig  <martin@ximian.com>
2799
2800         * generic.cs (ConstructedType.Constraints): Correctly check
2801         constraints if the argument type is a type parameter; fixes
2802         #72326. 
2803
2804 2005-02-02  Martin Baulig  <martin@ximian.com>
2805
2806         * delegate.cs (Delegate.DefineType): Report an internal error if
2807         TypeManager.multicast_delegate_type is null.  See bug #72015 for
2808         details.        
2809
2810 2005-01-29  Miguel de Icaza  <miguel@novell.com>
2811
2812         * pending.cs: Produce better code (no nops produced by using Ldarg
2813         + value).
2814         
2815         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
2816         i - 1' it should be arg + 1.
2817
2818         Fixes bug #71819.
2819         
2820 2005-01-26  Martin Baulig  <martin@ximian.com>
2821
2822         * cs-parser.jay (indexer_declarator): Don't report an error if we
2823         have type parameters since we can be an explicit interface
2824         implementation; fixes #71449.
2825
2826 2005-01-26  Martin Baulig  <martin@ximian.com>
2827
2828         * class.cs (TypeContainer.AttributeTargets): Return the correct
2829         AttributeTargets depending on our `Kind' instead of throwing an
2830         exception; fixes #71632.
2831
2832 2005-01-26  Martin Baulig  <martin@ximian.com>
2833
2834         * delegate.cs (Delegate.DefineType): Correctly define our type
2835         parameters.  Fixes #71483.
2836
2837 2005-01-25  Raja R Harinath  <rharinath@novell.com>
2838
2839         Fix #71602.
2840         * expression.cs (MemberAccess.DoResolve): Don't complain with
2841         cs0572 when the LHS of a member access has identical name and type
2842         name.
2843
2844 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
2845
2846         Fix #71651, #71675
2847         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
2848         CreatePermission.
2849         Create custom PermissionSet only for PermissionSetAttribute.
2850
2851 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
2852
2853         Fix #71649
2854         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
2855         delegates in static class.
2856
2857 2005-01-24  Martin Baulig  <martin@ximian.com>
2858
2859         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
2860         merging an implicit block, just use its reachability.
2861
2862         * statement.cs (Block.Resolve): Make the unreachable code check
2863         work wrt. implicit blocks; see test-337 from #63842.
2864
2865 2005-01-21  Alp Toker  <alp@atoker.com>
2866  
2867         * cs-parser.jay: destructor_declaration's container is PartialContainer
2868         not Class when partial types are used, so use Kind prop instead of
2869         'is'.
2870         
2871 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
2872
2873         * cs-parser.jay: Improve error reporting when an interface
2874         declares new types.
2875
2876 2005-01-20  Dick Porter  <dick@ximian.com>
2877
2878         * support.cs: SeekableStreamReader fix from Sandor Dobos
2879         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
2880         chars are read.  Fixes bug 70369.
2881
2882 2005-01-20  Raja R Harinath  <rharinath@novell.com>
2883
2884         * cs-parser.jay (catch_clause): Simplify current_block handling
2885         somewhat.
2886
2887 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
2888
2889         * convert.cs (ImplicitStandardConversionExists): Synchronize the
2890         code with ImplicitStandardConversion to handle the implicit
2891         conversion of method groups into valid delegate invocations. 
2892
2893         The problem is that in parameter handling we were using this code
2894         path.  Fixes bug #64698
2895
2896 2005-01-19  Raja R Harinath  <rharinath@novell.com>
2897
2898         * cs-parser.jay: Fix several infelicities.
2899         - Avoid assigning to the parser value stack.  Code like 
2900           '$3 = null' is unclean.  Synthesize a value for the code block
2901           instead. 
2902         - Avoid using oob_stack for storing location information.  Use ...
2903         (_mark_): ... this.  New (empty) rule.  Saves the current location
2904         in $$.
2905         (foreach_statement): Avoid using oob_stack for current_block
2906         handling.  Use technique used in for_statement and
2907         using_statement.  Synthesize a value for the code block to store
2908         additional intermediate information.
2909
2910 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
2911
2912         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
2913         of a different type is only allowed to private fields of a
2914         containing type, not on fields of a base class.
2915
2916         See test-174.cs and error cs0122-9.cs
2917
2918 2005-01-13  Raja R Harinath  <rharinath@novell.com>
2919
2920         Fix test-335.cs (bug #58126).
2921         * cs-parser.jay (argument): Split out non-expression parts of the
2922         rule into 'non_simple_argument'.
2923         (invocation_expression): Support parenthesized invocations with
2924         multiple arguments, and with single non-simple arguments.
2925
2926 2005-01-13  Raja R Harinath  <rharinath@novell.com>
2927
2928         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
2929         places.
2930
2931 2005-01-12  Raja R Harinath  <rharinath@novell.com>
2932
2933         Fix cs0038-1.cs, cs1640-6.cs.
2934         * ecore.cs (Expression.Resolve): Remove special-case for
2935         SimpleName in error-handling.
2936         (Expression.almostMatchedMembers): Relax access permission to
2937         protected.
2938         (Expression.MemberLookupFailed): Handle duplicates in
2939         almostMatchedMembers list.
2940         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
2941         * expression.cs (New.DoResolve): Report CS1540 for more cases.
2942         * typemanager.cs (GetFullNameSignature): Use the MethodBase
2943         overload if the passed in MemberInfo is a MethodBase.
2944
2945 2005-01-25  Martin Baulig  <martin@ximian.com>
2946
2947         * doc.cs
2948         (DocUtil.emptyParamList): Removed; use `Type.EmptyTypes' instead.
2949
2950 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
2951
2952         Fix #70749
2953         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
2954         for non-CAS & merge permission sets properly.
2955
2956 2005-01-11  Raja R Harinath  <rharinath@novell.com>
2957
2958         Improve standard-compliance of simple name and member access 
2959         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
2960         * ecore.cs (FullNamedExpression): New abstract base class 
2961         for Namespaces and TypeExpressions.
2962         (ResolveFlags.SimpleName): Remove.
2963         (SimpleName): Remove support for dotted names.
2964         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
2965         DeclSpace.FindType and DeclSpace.LookupType.
2966         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
2967         (Expression.ExprClassName): Make member function.
2968         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
2969         a namespace.  Remove creation of dotted "SimpleName"s.
2970         (MemberAccess.DoResolve): Likewise.
2971         * decl.cs (DeclSpace.Cache): Make private.
2972         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
2973         (DeclSpace.FindType): Update.
2974         (DeclSpace.LookupType): Move here from RootContext.  Return a 
2975         FullNamedExpression.
2976         * namespace.cs (Namespace): Derive from FullNamedExpression
2977         so that it can be part of expression resolution.
2978         (Namespace.Lookup): Return an FullNamedExpression.
2979         (NamespaceEntry.LookupAlias): Lookup aliases only in current
2980         namespace.
2981         * rootcontext.cs (NamespaceLookup): Remove.
2982         (LookupType): Move to DeclSpace.
2983         * attribute.cs (CheckAttributeType): Update.
2984         * doc.cs (FindDocumentedType): Remove allowAlias argument.
2985         (FindDocumentedTypeNonArray): Likewise.
2986
2987 2005-01-11  Raja R Harinath  <rharinath@novell.com>
2988
2989         Fix cs0509.cs, cs1632.cs.
2990         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
2991         is the same as IsInterface.
2992         (TypeContainer.GetClassBases): Likewise.
2993         * statement.cs (LabeledStatement.ig): New field.
2994         (LabeledStatement.LabelTarget): Save ILGenerator which created the
2995         label.
2996         (LabeledStatement.DoEmit): Check that the label was created with
2997         the same ILGenerator.
2998
2999 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
3000
3001         Fix #71058
3002         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
3003         accessors to its properties.
3004
3005         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
3006         from accessors to property.
3007         
3008 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
3009
3010         Fix #70722
3011         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
3012         only for overrides.
3013         
3014 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
3015
3016         * attribute.cs: Check for null and empty strings.  
3017
3018         I have lost another battle to Paolo.
3019
3020 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
3021
3022         Fix #70942
3023         * class.cs (PropertyMethod): Set Parent field in ctors.
3024         (SetMethod.InternalParameters): Add unsafe switch hack.
3025         Override MarkForDuplicationCheck where it is appropriate.
3026
3027         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
3028         It says whether container allows members with the same name.
3029         Base default is no.
3030         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
3031         Removed is_method parameter.
3032
3033 2005-01-06  Duncan Mak  <duncan@ximian.com>
3034
3035         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
3036         because the previous change led to incorrect reporting of CS1032
3037         ("Cannot define/undefine preprocessor symbols after first token in
3038         file"). Instead of using `tokens_seen' as the only flag that
3039         triggers CS1040, introduce `comments_seen'. This new flag is used
3040         to signify having seen comments on the current line, so it is
3041         unset after a newline.
3042
3043 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
3044
3045         * doc.cs : When searching for a type, find nested type too.
3046           This fixes bug #71040.
3047
3048 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
3049
3050         * doc.cs :
3051           - Warn missing member comment on those classes which also does not
3052             have doc comments. Fixed bug #71041.
3053           - Don't warn missing doc comment on default constructor.
3054             Fixed bug #71042.
3055
3056 2005-01-06  Duncan Mak  <duncan@ximian.com>
3057
3058         * cs-tokenizer.cs (xtoken): After handling traditional C-style
3059         comments, set `tokens_seen' to true. This allows us to detect
3060         misplaced preprocessor directives (i.e. not at the beginning of
3061         the a line, nor after whitespaces). In that case, report error
3062         CS1040. This fixes bug #56460.
3063
3064         * cs-parser.jay (interface_member_declaration): Add checks for
3065         IsExplicitImpl, and report CS0541 error if an interface member is
3066         defined as an explicit interface declaration.
3067
3068 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
3069
3070         Fix #70817
3071         * class.cs (PropertyMethod): Set Parent field in ctors.
3072         (SetMethod.InternalParameters): Add unsafe switch hack.
3073         
3074         * decl.cs (MemberCore.Parent): Cannot be readonly.
3075
3076 2005-01-06  Raja R Harinath  <rharinath@novell.com>
3077
3078         * decl.cs (DeclSpace.ResolveType): Remove.
3079         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
3080         Merge in code from ...
3081         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
3082         * class.cs, enum.cs: Update to changes.
3083
3084 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
3085
3086         * anonymous.cs: Ensure that we init the scope of our parent if it
3087         has not been initialized yet.
3088
3089 2004-12-30  Duncan Mak  <duncan@ximian.com>
3090
3091         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
3092         if field.FieldBuilder is null. Fixes #70758.
3093
3094         * convert.cs: Fixed some typos and updated some of the comments.
3095         (ImplicitStandardConversionExists):
3096         (TryImplicitIntConversion): If `target_type' is an interface and
3097         the type of `ic' implements this interface, return true or a new
3098         BoxedCast instead of null. This fixes #70468.
3099
3100 2004-12-29  Duncan Mak  <duncan@ximian.com>
3101
3102         * expression.cs (Argument.Emit): Check that Expr is
3103         IMemoryLocation before casting to it, and report CS1510 otherwise.
3104
3105         This fixes #70402.
3106
3107 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
3108
3109         * statement.cs (Block.ThisVariable): remove the recursion here, to
3110         make the --profile more sane.
3111
3112 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
3113
3114         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
3115         assembly, by JB Evain.
3116
3117 2004-12-17  Raja R Harinath  <rharinath@novell.com>
3118
3119         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
3120           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
3121         "parent" refers to enclosing type/class.  "base" refers to superclass.
3122
3123 2004-12-17  Raja R Harinath  <rharinath@novell.com>
3124
3125         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
3126         Ensure that we only have GlobalAttributes.
3127         * attribute.cs (Attribute.Emit): Make non-virtual.
3128         (GlobalAttribute.Emit): Remove.
3129         (Attribute.Resolve): Make virtual.
3130         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
3131         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
3132         the argument. Don't create one.
3133         (Attribute.GetObsoleteAttribute): Likewise.
3134         (Attribute.GetClsCompliantAttributeValue): Likewise.
3135         * class.cs, decl.cs: Update to changes.
3136
3137 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
3138
3139         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
3140         
3141         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
3142         
3143         * statement.cs (Foreach.Resolve): Add error 186 report.
3144
3145 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
3146
3147         * expression.cs (Conditional.DoResolve): Add warning 429.
3148         
3149         * statement.cs (If.Resolve): Add warning 665.
3150
3151 2004-12-16  Raja R Harinath  <rharinath@novell.com>
3152
3153         New invariant: RootContext.Tree.Types.NamespaceEntry == null
3154         except when in the parser, and in GlobalAttribute.
3155         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
3156         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
3157         RootContext.Tree.Types.NamespaceEntry once work is done.
3158         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
3159         and resets RootContext.Tree.Types.NamespaceEntry.
3160
3161 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
3162
3163         * cs-parser.jay: Don't create a block for every variable.
3164
3165 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
3166
3167         * location.cs: Provide extra information.
3168
3169         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
3170         variables from the captured environment, it is the ldarg_0.
3171
3172 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
3173
3174         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
3175         find a conclusion.
3176         
3177         * class.cs: Changed warning level for 169 to avoid developer
3178         displeasure from warning flooding. It will be changed back when they
3179         fix most of current BCL warnings.
3180         
3181         * RootContext.cs: Pushed default WarningLevel to 3.
3182         
3183         * statement.cs: Removed unused variable.
3184
3185 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
3186
3187         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
3188         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
3189         Add error 502 report.
3190         (StaticClass.DefineType): Add error 441 report.
3191         (Class.AllowedModifiersProp): New virtual property as temporary
3192         extension to AllowedModifiers.
3193         (Class.DefineType): Add error 418 report. Moved ModFlags check here
3194         to share implementation with StaticClass and don't call virtual
3195         methods from ctor.
3196         
3197         * driver.cs (MainDriver): Add error 1558 test.
3198
3199         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
3200         report. Moved error 36 test here.
3201
3202         * statement.cs (Throw.Resolve): Add error 724 report.
3203
3204         * typemanager.cs: Add out_attribute_type core type.
3205         
3206 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
3207
3208         * class.cs (TypeContainer.VerifyClsCompliance): Add error
3209         3018 report.
3210         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
3211
3212         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
3213         3017 report.
3214         
3215         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
3216
3217         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
3218         Add error 3023 report.
3219         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
3220
3221         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
3222         implementation.
3223
3224 2004-12-12  John Luke  <john.luke@gmail.com>
3225
3226         * driver.cs (AddArgs): take -- into account when
3227         adding arguments, fixes bug 65710 
3228
3229 2004-12-12  Martin Baulig  <martin@ximian.com>
3230
3231         * expression.cs (Unary.TryReduceNegative): Added support for
3232         SByteConstant and ByteConstant.
3233         (Unary.Reduce): Check error values from TryReduceNegative().
3234
3235 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
3236
3237         * attributes.cs (Attribute.Resolve): Avoid multiple error report
3238         and report exception as error 182.
3239
3240 2004-12-10  Raja R Harinath  <rharinath@novell.com>
3241
3242         * driver.cs (Main): Fix message when there are warnings.
3243
3244 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
3245
3246         * delegate.cs: Fixed my fix from yesterday, sorry about that.
3247
3248 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
3249
3250         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
3251         Reduced number of warnings.
3252         
3253         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
3254
3255 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
3256
3257         * driver.cs: Removed message.
3258
3259         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
3260
3261 2004-12-08    <vargaz@freemail.hu>
3262
3263         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
3264
3265 2004-12-08  Martin Baulig  <martin@ximian.com>
3266
3267         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
3268         instead of a CS3002 for properties and indexer.
3269
3270 2004-12-08  Martin Baulig  <martin@ximian.com>
3271
3272         * decl.cs (MemberName.ToString): Make this work again.
3273
3274 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
3275
3276         * attribute.cs (Resolve): Add error 591 detection.
3277
3278         * class.cs (FieldMember.Define): Add error 1547 detection.
3279         (Indexer.Define): Add error 620 detection.
3280         (Operator.Define): Add error 590 detection.
3281
3282         * ecore.cs: Missing argument for error 79.
3283
3284         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
3285         detection.
3286
3287 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
3288
3289         Fix #70106
3290         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
3291         only.
3292
3293 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
3294
3295         * cs-parser.jay : handle doc comments on implicit/explicit operators.
3296           Some operator comments were suppressed.
3297         * doc.cs : Implicit/explicit operator name in doc comments are like
3298           "op_Explicit(type)~returnType", so added suffix handling.
3299
3300 2005-01-21  Alp Toker  <alp@atoker.com>
3301
3302         * cs-parser.jay: destructor_declaration's container is PartialContainer
3303         not Class when partial types are used, so use Kind prop instead of 'is'.
3304
3305 2004-12-12  Martin Baulig  <martin@ximian.com>
3306
3307         * expression.cs (Unary.TryReduceNegative): Added support for
3308         SByteConstant and ByteConstant.
3309         (Unary.Reduce): Check error values from TryReduceNegative().
3310
3311 2004-12-11  Martin Baulig  <martin@ximian.com>
3312
3313         * support.cs (ReflectionParameters.ParameterName): If we have a
3314         `gpd', call `ParameterName' on it.
3315
3316         * parameter.cs (Parameter.GetParameterAttributes): New static method.
3317
3318         * pending.cs (PendingImplementation.DefineProxy): Call
3319         DefineParameter() for all of the MethodBuilder's arguments.
3320
3321 2004-12-09  Martin Baulig  <martin@ximian.com>
3322
3323         * doc.cs (DocUtil): Make this a static class.
3324
3325 2004-12-09  Martin Baulig  <martin@ximian.com>
3326
3327         * expression.cs (Invocation.InferType): Moved the type inference
3328         implementation into TypeManager.
3329
3330         * generics.cs (TypeManager): Moved the type inference
3331         implementation here.
3332
3333 2004-12-09  Martin Baulig  <martin@ximian.com>
3334
3335         * typemanager.cs (TypeManager): Make this a partial class.
3336
3337         * generics.cs
3338         (TypeManager): Move the generics part of `TypeManager' here.
3339
3340 2004-12-08  Martin Baulig  <martin@ximian.com>
3341
3342         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
3343         instead of a CS3002 for properties and indexer.  Added CS3024
3344         check for generic interfaces.
3345
3346         * attributes.cs (AttributeTester.AnalyzeTypeCompliance): Generic
3347         instances are not CLS-compliant.
3348
3349 2004-12-08  Martin Baulig  <martin@ximian.com>
3350
3351         * cs-parser.jay
3352         (void_pointer_expression): New rule for `void*', `void**' etc.
3353         (typeof_expression): Add `void_pointer_expression'; fixes #66846.       
3354
3355 2004-12-08  Martin Baulig  <martin@ximian.com>
3356
3357         * expression.cs (Invocation.InferType): Removed the hack for
3358         MethodCore.MayUnify().  
3359
3360         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Make
3361         this actually work.
3362
3363         * class.cs (MethodCore.MayUnify): Use
3364         TypeManager.MayBecomeEqualGenericTypes().       
3365
3366 2004-12-08  Martin Baulig  <martin@ximian.com>
3367
3368         * expression.cs (Is.DoResolve, As.DoResolve): If we're a type
3369         parameter, box it.  Fixes #69233.
3370
3371 2004-12-08  Martin Baulig  <martin@ximian.com>
3372
3373         * generic.cs (ConstructedType.CheckConstraints): Valuetypes always
3374         have the ctor constraint.  Fixes #68326.
3375
3376 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
3377
3378         * cs-parser.jay : interface comment was not consumed because of
3379           extra opt_semicolon before doc handling.
3380
3381 2004-12-03  Raja R Harinath  <rharinath@novell.com>
3382
3383         Fix test-327.cs, test-328.cs, and put in early infrastructure
3384         for eventually fixing #52697.
3385         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
3386         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
3387         from other methods.
3388         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
3389         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
3390         (VerifyUsing, error246): Update.
3391         * rootcontext.cs (RootContext.NamespaceLookup): Just use
3392         'NamespaceEntry.LookupNamespaceOrType'.
3393
3394 2004-12-07  Martin Baulig  <martin@ximian.com>
3395
3396         * driver.cs: Call it "BETA SOFTWARE" :-)
3397
3398 2004-12-06  Raja R Harinath  <rharinath@novell.com>
3399
3400         Fix crash on cs0657-17.cs.
3401         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
3402         Use RootContext.Tree.Types, not 'new RootTypes ()'.
3403         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
3404         the case where the NamespaceEntry gets overwritten.
3405
3406 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
3407
3408         Fixed #69195, #56821
3409         * ecore.cs (ResolveBoolean): Tiny refactoring.
3410
3411         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
3412         of right expression resolving when left is false constant and
3413         operator is LogicalAnd OR true constant and operator is LogicalOr.
3414
3415         * statement.cs (ResolveUnreachable): Always reports warning.
3416
3417 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
3418
3419         * class.cs: Distinguish between 1721 and 1722 (just a little help
3420         for the programmer).
3421
3422 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
3423
3424         * delegate.cs: Only allow this on new versions of the language. 
3425
3426 2004-12-02  Duncan Mak  <duncan@ximian.com>
3427
3428         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
3429         Expression class.
3430         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
3431         here as a static method. Take an additional bool out parameter
3432         `must_do_cs1540_check' for signaling to InstanceResolve.
3433         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
3434         member field from PropertyExpr class and made it an argument of
3435         the method instead.
3436         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
3437         check for MarshalByRefObject, and report CS0122 instead of CS1540.
3438         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
3439         and `remove_accessor' as well as InstanceResolve: report CS0122
3440         where applicable.
3441
3442         Fixes #70129.
3443
3444 2004-12-07  Martin Baulig  <martin@ximian.com>
3445
3446         * decl.cs (DeclSpace.AddToContainer): Report correct errors CS0694
3447         and CS0692 where appropriate.
3448
3449 2004-12-06  Martin Baulig  <martin@ximian.com>
3450
3451         * class.cs (MethodCore.MayUnify): Moved the CS0408 check here from
3452         IsDuplicateImplementation() and improved it.
3453
3454         * expression.cs (Invocation.InferTypeArguments): Added
3455         `Type[] inferred_class_types' argument (for MethodCore.MayUnify)
3456         and removed the "ref" modifier from `infered_types'.
3457
3458         * decl.cs (MemberName.ToString): Removed the exception.
3459
3460 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
3461
3462         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
3463           comments are allowed.
3464
3465 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3466
3467         * delegate.cs: Add checks for subtypes in paramaters and return values
3468         in VerifyMethod () to add support for Covariance/Contravariance
3469         in delegates.
3470         
3471 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
3472
3473         * report.cs: Remove extra closing parenthesis.
3474
3475         * convert.cs (Error_CannotImplicitConversion): If the name of the
3476         types are the same, provide some extra information.
3477
3478 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
3479
3480         Fix bug #70102
3481         * attribute.cs (Resolve): Improved implementation of params
3482         attribute arguments.
3483
3484         * support.cs (ParameterData): Add HasParams to be faster.
3485
3486 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
3487
3488         all things are for /doc support:
3489
3490         * doc.cs: new file that supports XML documentation generation.
3491         * mcs.exe.sources: added doc.cs.
3492         * driver.cs:
3493           Handle /doc command line option.
3494           Report error 2006 instead of 5 for missing file name for /doc.
3495           Generate XML documentation when required, after type resolution.
3496         * cs-tokenizer.cs:
3497           Added support for picking up documentation (/// and /** ... */),
3498           including a new XmlCommentState enumeration.
3499         * cs-parser.jay:
3500           Added lines to fill Documentation element for field, constant,
3501           property, indexer, method, constructor, destructor, operator, event
3502           and class, struct, interface, delegate, enum.
3503           Added lines to warn incorrect comment.
3504         * rootcontext.cs :
3505           Added Documentation field (passed only when /doc was specified).
3506         * decl.cs:
3507           Added DocComment, DocCommentHeader, GenerateDocComment() and
3508           OnGenerateDocComment() and some supporting private members for
3509           /doc feature to MemberCore.
3510         * class.cs:
3511           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
3512         * delegate.cs:
3513           Added overriden DocCommentHeader.
3514         * enum.cs:
3515           Added overriden DocCommentHeader and GenerateDocComment().
3516
3517 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
3518
3519         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
3520         unwrapping the enumeration values, chain to
3521         DoConstantNumericPromotions again, so we can promote things to the
3522         fundamental types (takes care of enums that are bytes, sbytes).
3523
3524         Fixes bug #62054.
3525
3526 2004-12-01  Raja R Harinath  <rharinath@novell.com>
3527
3528         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
3529         Fix long-standing bug in type-lookup.  Use FindType instead of
3530         LookupType when ec.ResolvingTypeTree.
3531         (Attribute.ResolveType, Attribute.Resolve)
3532         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
3533         Update to changes.
3534         (Attributes.Search): Remove internal version.  Update.
3535         (Attributes.SearchMulti): Update.
3536         (Attributes.GetClsCompliantAttribute): Remove.
3537         (Attributes.GetIndexerNameAttribute): Remove.
3538         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
3539         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
3540         * class.cs (Indexer.Define): Likewise.
3541
3542 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
3543
3544         Fix bug #68790
3545         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
3546         MarshallByReference members access.
3547
3548         * expression.cs: Use CheckMarshallByRefAccess;
3549         Better error CS0197 message.
3550
3551         * report.cs: Print whole related error message.
3552
3553 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
3554
3555         * class (GetClassBases): Better error 60 report.
3556         (EventProperty): Disabled warning 67 detection.
3557
3558 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
3559
3560         Fix bug #60324
3561         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
3562
3563         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
3564         precise values.
3565
3566 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
3567
3568         Fix bug #49488
3569         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
3570
3571         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
3572
3573 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
3574
3575         * attribute.cs (Attribute.Resolve): Refine error reporting and
3576         report a cs0117 if the identifier does not exist, to distinguish
3577         from 0617 which is a miss-use of the actual identifier.
3578
3579         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
3580         between cs0070 and cs0079.
3581
3582         * class.cs (MemberBase.DoDefine): When reporting a wrong
3583         accessibility level, we use MethodCore to compare instead of
3584         Method (this was a regression in some refactoring effort).
3585
3586         So now we correctly report cs0056 again.
3587
3588         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
3589         testing the target_type (which was known to be object_type) and
3590         not the source type (which is anonymous_method).
3591
3592         Fixed reporting of error cs1660.
3593
3594         * expression.cs (UserCast.Source): Expose the underlying cast.
3595
3596         * statement.cs (Switch.SwitchGoverningType): Sort the list of
3597         allowed types to find a match to int32 first (most common).
3598
3599         In addition, it ignores any ImplicitUserConversions that did an
3600         internal implicit conversion (as the switch statement allows only
3601         one integral conversion to exist).
3602
3603         * class.cs (PartialContainer.Create): rename `name' to
3604         `member_name' for clarity.  Then replace the string calls with a
3605         call to MemberName.GetPartialName, as now using
3606         MemberName.ToString is an error (this is due to the side effects
3607         it had, that were fixed in the past).
3608
3609         This will restore the error reporting on a number of partial class
3610         errors that were missusing this (and getting an exception as a
3611         results, which is now just a plain textual warning, because
3612         yyparse debug output would crash otherwise).
3613
3614 2004-11-26  Raja R Harinath  <rharinath@novell.com>
3615
3616         * Makefile (PROGRAM_INSTALL_DIR): Remove.
3617
3618 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
3619
3620         * rootcontext.cs (LookupType): Make sure to cache lookups that
3621         don't give us a negative result. This saves about 5% of corlib
3622         compilation time.
3623
3624 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
3625
3626         * report.cs (AbstractMessage.Print): messages are sent to stderr
3627
3628         * class.cs (TypeContainer.GetClassBases): It is an error to have a
3629         non-interface in the list of interfaces (at this point, either
3630         parent was properly set, or a base class is being listed in the
3631         interfaces section).
3632
3633         This flags error 1722, and resolves the crash from bug 69259.
3634
3635 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
3636
3637         * statement.cs (Using.EmitExpressionFinally): make this work right
3638         for valuetypes. Fixes 69926.
3639
3640 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
3641
3642         * const.cs (Const.ChangeType): Cope with the "0 literal can be
3643         converted to an enum" here, before we try to change the underlying
3644         type.  This code exists, but it is a different code path than the
3645         one used while encoding constants.
3646
3647         (ImplicitReferenceConversionExists): In addition, resynchronized
3648         the code here, so it matches the same code in
3649         ImplicitReferenceConversionExists for the `from any class-type S
3650         to any interface-type T'.       
3651
3652 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
3653
3654         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
3655
3656 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
3657
3658         * cs-parser.jay: Use verbosity accordingly. 
3659
3660 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
3661
3662         * expression.cs (Unary.ResolveOperator): Do not report warning;
3663         AddressOf reads from variable.
3664         
3665         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
3666
3667 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
3668
3669         Fix bug #69462
3670
3671         * attribute.cs (Attributable): Removed CheckTargets.
3672         (Attributes.Emit): Explicit attribute targets are tested here.
3673
3674         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
3675         not enabled for interfaces.
3676
3677         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
3678         (GetAssemblyName): Ouch next bug there.
3679
3680 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3681
3682         * expression.cs: Error 275 added.
3683         
3684 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
3685
3686         Fix bug #69177 (Implemented decimal constant support)
3687
3688         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
3689         (BinaryFold): Add DecimalConstant.
3690
3691         * const.cs (Define): Decimal constant 
3692         (is not constant.
3693         (ChangeType): Add decimal type handling.
3694         (LookupConstantValue): Don't set value for decimal type but
3695         emit DecimalConstantAttribute. Needed for constant optimization.
3696
3697         * constant.cs (ToDecimal): New method.
3698         (ConvertToDecimal): New method.
3699         (IntConstant): Implemented ConvertToDecimal.
3700         (DecimalConstant.Emit): Emit optimized version for decimals in
3701         int range.
3702
3703         * expression.cs (ResolveOperator): Changed order of constant
3704         reduction to work correctly with native types which have
3705         overloaded operators.
3706         (ResolveMemberAccess): Extract constant value from attribute
3707         for decimal type.
3708
3709         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
3710
3711         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
3712         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
3713         (ChangeType): Decimal is special.
3714         (TypeToCoreType): Add decimal type.
3715
3716 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
3717
3718         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
3719         decimal types.
3720
3721 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
3722
3723         * class.cs (EventField.ApplyAttributeBuilder): Fix error
3724         test cs1667-5.cs.
3725
3726 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
3727
3728         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
3729
3730         * pending.cs (PendingImplementation): Grab only interfaces.
3731
3732 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
3733
3734         * statement.cs (ForeachHelperMethods): Add location member and
3735         error 202 detection.
3736
3737 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
3738
3739         * expression.cs (DoResolveBase): Fixed wrong warning for out
3740         variables.
3741
3742 2004-12-04  Martin Baulig  <martin@ximian.com>
3743
3744         * convert.cs (Convert.TypeParameter_to_Null): Use the constraints
3745         to check whether the conversion is ok.
3746
3747         * typemanager.cs (TypeManager.GetTypeArguments): Just return
3748         `Type.EmptyTypes' if we're not a generic TypeContainer.
3749
3750 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
3751
3752         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
3753         old bug: when converting from the null literal to a pointer,
3754         return an EmptyCast, not the NullLiteral.
3755
3756         This fixes #69921, the recent null_type changes probably made this
3757         bug more prominent.
3758
3759 2004-12-03  Martin Baulig  <martin@ximian.com>
3760
3761         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
3762         method as our child, call AnonymousMethod.Compatible() on it.
3763
3764 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
3765
3766         * class.cs (FieldBase): Use an unused bit field from the field to
3767         encode the `has_offset' property from the FieldMember.  This saves
3768         a couple of Ks on bootstrap compilation.
3769
3770         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
3771         method as our child, return the AnonymousMethod resolved
3772         expression.
3773
3774         * expression.cs (New.DoResolve): Allow return values from
3775         NewDelegate to also include AnonymousMethods.
3776
3777         Fixes #70150.
3778
3779 2004-11-29  Raja R Harinath  <rharinath@novell.com>
3780
3781         * decl.cs (MemberCore.MemberName): Remove readonly to fix an error
3782         cs1648 report.
3783         * rootcontext.cs (ResolveCore::interfaces_first_stage): Add
3784         System.Runtime.InteropServices._Exception, since it's a base
3785         interface of the core type System.Exception in the net_2_0 profile.
3786
3787 2004-11-27  Martin Baulig  <martin@ximian.com>
3788
3789         * ecore.cs (Expression.StoreFromPtr): Use `stobj' for generic parameters.
3790
3791 2004-11-26  Raja R Harinath  <rharinath@novell.com>
3792
3793         * Makefile: Convert to use executable.make.
3794         * gmcs.exe.sources: New.
3795
3796 2004-11-25  Martin Baulig  <martin@ximian.com>
3797
3798         * expression.cs (Invocation.InferType): Added support for byref types.
3799
3800 2004-11-25  Martin Baulig  <martin@ximian.com>
3801
3802         * statement.cs (Foreach.FetchMethodMoveNext): Wrap `mi.ReturnType'
3803         in TypeManager.TypeToCoreType().
3804
3805 2004-11-25  Martin Baulig  <martin@ximian.com>
3806
3807         * iterators.cs (Iterator.DoDefineMembers): Override and lookup the
3808         "Dispose" method from the `current_type'.
3809         (Iterator.EmitMoveNext): Use the `dispose_method' we looked up in
3810         DoDefineMembers() instead of using the MethodBuilder; this is
3811         required for generic iterators.
3812
3813         * class.cs (TypeContainer.DoDefineMembers): Make this virtual.
3814
3815 2004-11-24  Martin Baulig  <martin@ximian.com>
3816
3817         * ecore.cs (Expression.LoadFromPtr): Use `ldobj' for generic parameters.
3818
3819 2004-11-20  Martin Baulig  <martin@ximian.com>
3820
3821         * expression.cs (Invocation.InferType): Correctly infer generic
3822         instances; see gen-103.cs.
3823         (Invocation.InferTypeArguments): If a generic method doesn't have
3824         any unbound type parameters, we don't need to infer anything.
3825
3826 2004-11-19  Raja R Harinath  <rharinath@novell.com>
3827
3828         * Makefile (gmcs.exe): Update to new location of bootstrap mcs.exe.
3829
3830 2004-11-17  Raja R Harinath  <rharinath@novell.com>
3831
3832         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
3833         (TypeHandle.GetMemberCache): New.
3834         (TypeHandle.TypeHandle): Update.
3835         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
3836         (TypeManager.LookupParentInterfacesCache):
3837         Rename from LookupInterfaceCache.  Optimize slightly.
3838         (TypeManager.MemberLookup_FindMembers): Update.
3839         * decl.cs (MemberCache.MemberCache): Set Container to null in the
3840         multi-type variant.
3841         (AddCacheContents): Rename from AddHashtable.
3842         * class.cs (TypeContainer.parent_container): Remove.
3843         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
3844         (TypeContainer.DoDefineMembers): Don't initialize it.
3845         Update to name changes.
3846         
3847 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
3848
3849         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
3850         that factors the code to check access modifiers on override.  
3851
3852         (PropertyBase): Use the code here.
3853
3854         Patch from Lluis S'anchez, fixes bug #69361.
3855
3856 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
3857
3858         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
3859         routine that is used to report the use of a captured variable
3860         whose address has been taken.
3861
3862         There are two checks: one when variables are being captured and
3863         the other check is when the address of a variable is taken. 
3864         
3865         (because an anonymous methods might be resolved before *or* after
3866         the address has been taken) and 
3867
3868         * expression.cs (Conditional.DoResolve): Remove the special
3869         casing that Martin added to trueExpr and falseExpr being both
3870         NullLiteral.  We get the right behavior now just by introducing
3871         the null_type into the compiler. 
3872
3873         * convert.cs (ExplicitConversion): Change the code to use
3874         null_type instead of testing `expr is NullLiteral'.
3875         (ImplicitConversionStandard): use null_type too.
3876         (ImplicitReferenceConversionExists): use null_type too.
3877         (ImplicitReferenceConversion): use null_type too.
3878
3879         * literal.cs: The type of `NullLiteral' is now null_type instead
3880         of object_type. 
3881         (Resolve): Set the type here.
3882
3883         * typemanager.cs: Introduce null_type.
3884
3885 2004-11-18  Martin Baulig  <martin@ximian.com>
3886
3887         * rootcontext.cs
3888         (RootContext.LookupType): Return a `Type', not a `TypeExpr'.
3889
3890 2004-11-18  Martin Baulig  <martin@ximian.com>
3891
3892         * ecore.cs (TypeExpr.DoResolveAsTypeStep): Make this protected.
3893
3894 2004-11-18  Martin Baulig  <martin@ximian.com>
3895
3896         * generic.cs (Constraints.Resolve): Take an `EmitContext' instead
3897         of a `DeclSpace'.  If one of our constraints is a `ConstructedType',
3898         call ResolveConstructedType() on it to resolve it without checking
3899         constraints.
3900         (Constraints.ResolveTypes): Check them here.
3901         (ConstructedType.DoResolveAsTypeStep): Fully resolve ourselves,
3902         but don't check constraints.
3903         (ConstructedType.ResolveAsTypeTerminal): Override this and also
3904         check constraints here.
3905         (ConstructedType.ResolveConstructedType): New public method.  This
3906         is called from DoResolveAsTypeStep() and Constraints.Resolve() to
3907         resolve ourselves without checking constraints.
3908
3909         * ecore.cs (Expression.ResolveAsTypeTerminal): Make this virtual.
3910
3911 2004-11-18  Martin Baulig  <martin@ximian.com>
3912
3913         * decl.cs
3914         (DeclSpace.CurrentType): Changed type from `TypeExpr' to `Type'.
3915
3916         * delegate.cs (Delegate.DefineType): Always create the EmitContext.
3917
3918 2004-11-18  Martin Baulig  <martin@ximian.com>
3919
3920         * ecore.cs (TypeExpr.ResolveType): Removed.
3921         (Expression.ResolveAsTypeTerminal): We always return a fully
3922         resolved `TypeExpr', so we can just access its `Type'.
3923
3924         * class.cs (TypeContainer.DefineType): Resolve `CurrentType' here.
3925
3926 2004-11-17  Martin Baulig  <martin@ximian.com>
3927
3928         * ecore.cs (IAlias.Type): Replaced with ResolveAsType() to make
3929         sure we don't return any unresolved TypeExpr's.
3930         (TypeAliasExpression): The .ctor now takes an `IAlias' instead of
3931         a `TypeExpr'.
3932         (Expression.ResolveAsTypeTerminal): Make sure `te.Type != null'.
3933
3934         * expression.cs (MemberAccess.ResolveAsTypeStep): Don't return any
3935         unresolved `ConstructedType's.
3936
3937 2004-11-17  Martin Baulig  <martin@ximian.com>
3938
3939         * ecore.cs (TypeExpr.ResolveType): Don't make this virtual.
3940
3941 2004-11-17  Martin Baulig  <martin@ximian.com>
3942
3943         * ecore.cs
3944         (Expression.ResolveAsTypeTerminal): Removed the `bool silent' argument.
3945
3946         * decl.cs (DeclSpace.ResolveType): Removed.
3947         (DeclSpace.ResolveTypeExpr): Removed the `bool silent' argument.
3948
3949 2004-11-17  Martin Baulig  <martin@ximian.com>
3950
3951         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
3952         direction, like FindMembers() does.  Fixes #69546, testcase is in
3953         test-315.cs.    
3954
3955 2004-11-16  Martin Baulig  <martin@ximian.com>
3956
3957         This is based on a patch from Marek Safar, see bug #69082.
3958         Fixes bugs #63705 and #67130.
3959
3960         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
3961         method; create a MemberCache for an interface type and cache the
3962         result.
3963
3964         * decl.cs (IMemberContainer.ParentContainer): Removed.
3965         (IMemberContainer.ParentCache): New property.
3966         (MemberCache.SetupCacheForInterface): Removed.
3967         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
3968         to create a cache for an interface's "parent".
3969
3970         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
3971         interfaces too.
3972
3973 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
3974
3975         * statement.cs: Avoid adding bools to a hashtable.
3976
3977 2004-11-15  Martin Baulig  <martin@ximian.com>
3978
3979         * decl.cs (MemberName.GetPartialName): Removed, use GetTypeName() instead.
3980
3981 2004-11-11  Martin Baulig  <martin@ximian.com>
3982
3983         * typemanager.cs (TypeManager.GetMethodName): New method.
3984
3985         * class.cs (MethodData.Define): Include the generic arity in the
3986         name of an explicit interface; also add it to the method name.
3987
3988         * pending.cs (PendingImplementation.InterfaceMethod): The method
3989         name now includes the generic arity.
3990
3991 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
3992
3993         * expression.cs (Invocation.OverloadResolve): Flag error if we are
3994         calling an unsafe method from a safe location.
3995
3996 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
3997
3998         Fix #69167
3999         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
4000
4001 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
4002
4003         * namespace.cs (VerifyUsing): use GetPartialName instead of
4004         ToString. 
4005
4006 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
4007
4008         * statement.cs (Return.Resolve): Fix regression in typo: if
4009         `in_exc', we have to request a NeedReturnLabel, this was a typo
4010         introduced in the anonymous method check-in.  Fixes #69131.
4011
4012         * Indexers were using the ShortName when defining themselves,
4013         causing a regression in the compiler bootstrap when applying the
4014         patch from 2004-11-02 (first part), now they use their full name
4015         and the bug is gone.
4016
4017 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
4018
4019         * driver.cs: Strip the path from the names of embedded resources. Fixes
4020         #68519.
4021
4022 2004-11-04  Raja R Harinath  <rharinath@novell.com>
4023
4024         Fix error message regression: cs0104-2.cs.
4025         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
4026         (AliasEntry.Resolve): Update.
4027         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
4028         'silent' flag.
4029         (RootContext.LookupType): Update.
4030
4031 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
4032
4033         * cs-parser.jay: Add support for handling accessor modifiers
4034         * class: Add support port accessor modifiers and error checking,
4035         define PropertyMethod.Define as virtual (not abstract anymore)
4036         * ecore.cs: Add checking for proeprties access with access modifiers
4037         * iterators.cs: Modify Accessor constructor call based in the modified
4038         constructor
4039 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
4040
4041         * expression.cs (StringConcat): Handle being called twice,
4042         as when we have a concat in a field init with more than two
4043         ctors in the class
4044
4045 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
4046
4047         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
4048         special case explicit implementations, we should always produce
4049         the .property or .event declaration.
4050         
4051         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
4052         since it will not return correct data if people use this
4053         unresolved in the presence of using statements (see test-313).
4054
4055         * class.cs (MethodData.Define): If we are an explicit interface
4056         implementation, set the method name to the full name of the
4057         interface plus the name of the method.  
4058
4059         Notice that using the method.MethodName.GetFullName() does not
4060         work, as it will only contain the name as declared on the source
4061         file (it can be a shorthand in the presence of using statements)
4062         and not the fully qualifed type name, for example:
4063
4064         using System;
4065
4066         class D : ICloneable {
4067                 object ICloneable.Clone ()  {
4068                 }
4069         }
4070
4071         Would produce a method called `ICloneable.Clone' instead of
4072         `System.ICloneable.Clone'.
4073
4074         * namespace.cs (Alias.Resolve): Use GetPartialName.
4075         
4076 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
4077
4078         * cs-parser.jay: Add error 1055 report.
4079
4080 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
4081
4082         * assign.cs (Assign.DoResolve): Only do the transform of
4083         assignment into a New if the types are compatible, if not, fall
4084         through and let the implicit code deal with the errors and with
4085         the necessary conversions. 
4086
4087 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
4088
4089         * cs-parser.jay: Add error 1031 report.
4090
4091         * cs-tokenizer.cs: Add location for error 1038.
4092
4093 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
4094
4095         * cs-parser.jay: Add error 1016 report.
4096
4097 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
4098
4099         * cs-parser.jay: Add errors 1575,1611 report.
4100
4101 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
4102
4103         * cs-parser.jay: Add error 1001 report.
4104
4105 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
4106
4107         Fix #68850
4108         * attribute.cs (GetMarshal): Add method argument for
4109         caller identification.
4110
4111         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
4112         agument for GetMarshal and RuntimeMissingSupport.
4113
4114 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
4115
4116         * attribute.cs (ExtractSecurityPermissionSet): Removed
4117         TypeManager.code_access_permission_type.
4118
4119         * typemanager.cs: Removed TypeManager.code_access_permission_type.
4120
4121 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
4122
4123         * expression.cs (LocalVariableReference.DoResolveLValue): Check
4124         for obsolete use of a variable here.   Fixes regression on errors
4125         cs0619-25 and cs0619-26.
4126
4127 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
4128
4129         Fix #62358, implemented security attribute encoding.
4130
4131         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
4132         Tests permitted SecurityAction for assembly or other types.
4133         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
4134         data from SecurityPermissionAttribute to PermisionSet class.
4135
4136         * class.cs (ApplyAttributeBuilder): Added special handling
4137         for System.Security.Permissions.SecurityAttribute based types.
4138
4139         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
4140         special handling for System.Security.Permissions.SecurityAttribute
4141         based types.
4142
4143         * enum.cs (ApplyAttributeBuilder): Added special handling
4144         for System.Security.Permissions.SecurityAttribute based types.
4145
4146         * parameter.cs (ApplyAttributeBuilder): Added special handling
4147         for System.Security.Permissions.SecurityAttribute based types.
4148
4149         * rootcontext.cs: Next 2 core types.
4150
4151         * typemanager.cs (TypeManager.security_permission_attr_type):
4152         Built in type for the SecurityPermission Attribute.
4153         (code_access_permission_type): Build in type.
4154
4155 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
4156
4157         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
4158         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
4159         all of this information into
4160         EmitContext.EmitCapturedVariableInstance.
4161         
4162         * codegen.cs (EmitCapturedVariableInstance): move here the
4163         funcionality of emitting an ldarg.0 in the presence of a
4164         remapping.   This centralizes the instance emit code.
4165
4166         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
4167         then emit a load of this: it means that we have reached the
4168         topmost ScopeInfo: the one that contains the pointer to the
4169         instance of the class hosting the anonymous method.
4170
4171         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
4172         captures to the topmost CaptureContext.
4173
4174 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
4175
4176         * expression.cs (LocalVariableReference): Move the knowledge about
4177         the iterators into codegen's EmitCapturedVariableInstance.
4178
4179 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
4180
4181         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
4182         all code paths return a value from an anonymous method (it is the
4183         same as the 161 error, but for anonymous methods).
4184
4185 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
4186
4187         The introduction of anonymous methods in the compiler changed
4188         various ways of doing things in the compiler.  The most
4189         significant one is the hard split between the resolution phase
4190         and the emission phases of the compiler.
4191
4192         For instance, routines that referenced local variables no
4193         longer can safely create temporary variables during the
4194         resolution phase: they must do so from the emission phase,
4195         since the variable might have been "captured", hence access to
4196         it can not be done with the local-variable operations from the runtime.
4197         
4198         * statement.cs 
4199
4200         (Block.Flags): New flag `IsTopLevel' to indicate that this block
4201         is a toplevel block.
4202
4203         (ToplevelBlock): A new kind of Block, these are the blocks that
4204         are created by the parser for all toplevel method bodies.  These
4205         include methods, accessors and anonymous methods.
4206
4207         These contain some extra information not found in regular blocks:
4208         A pointer to an optional CaptureContext (for tracking captured
4209         local variables and parameters).  A pointer to the parent
4210         ToplevelBlock.
4211         
4212         (Return.Resolve): Catch missmatches when returning a value from an
4213         anonymous method (error 1662).
4214         Invoke NeedReturnLabel from the Resolve phase instead of the emit
4215         phase.
4216
4217         (Break.Resolve): ditto.
4218
4219         (SwitchLabel): instead of defining the labels during the
4220         resolution phase, we now turned the public ILLabel and ILLabelCode
4221         labels into methods called GetILLabelCode() and GetILLabel() that
4222         only define the label during the Emit phase.
4223
4224         (GotoCase): Track the SwitchLabel instead of the computed label
4225         (its contained therein).  Emit the code by using
4226         SwitchLabel.GetILLabelCode ().
4227
4228         (LocalInfo.Flags.Captured): A new flag has been introduce to track
4229         whether the Local has been captured or not.
4230
4231         (LocalInfo.IsCaptured): New property, used to tell whether the
4232         local has been captured.
4233         
4234         * anonymous.cs: Vastly updated to contain the anonymous method
4235         support.
4236
4237         The main classes here are: CaptureContext which tracks any
4238         captured information for a toplevel block and ScopeInfo used to
4239         track the activation frames for various local variables.   
4240
4241         Each toplevel block has an optional capture context associated
4242         with it.  When a method contains an anonymous method both the
4243         toplevel method and the anonymous method will create a capture
4244         context.   When variables or parameters are captured, they are
4245         recorded on the CaptureContext that owns them, for example:
4246
4247         void Demo () {
4248              int a;
4249              MyDelegate d = delegate {
4250                  a = 1;
4251              }
4252         }
4253
4254         Here `a' will be recorded as captured on the toplevel
4255         CapturedContext, the inner captured context will not have anything
4256         (it will only have data if local variables or parameters from it
4257         are captured in a nested anonymous method.
4258
4259         The ScopeInfo is used to track the activation frames for local
4260         variables, for example:
4261
4262         for (int i = 0; i < 10; i++)
4263                 for (int j = 0; j < 10; j++){
4264                    MyDelegate d = delegate {
4265                         call (i, j);
4266                    }
4267                 }
4268
4269         At runtime this captures a single captured variable `i', but it
4270         captures 10 different versions of the variable `j'.  The variable
4271         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
4272         recorded on a child.  
4273
4274         The toplevel ScopeInfo will also track information like the `this'
4275         pointer if instance variables were referenced (this is necessary
4276         as the anonymous method lives inside a nested class in the host
4277         type of the method). 
4278
4279         (AnonymousMethod): Expanded to track the Toplevel, implement
4280         `AnonymousMethod.Compatible' to tell whether an anonymous method
4281         can be converted to a target delegate type. 
4282
4283         The routine now also produces the anonymous method content
4284
4285         (AnonymousDelegate): A helper class that derives from
4286         DelegateCreation, this is used to generate the code necessary to
4287         produce the delegate for the anonymous method that was created. 
4288
4289         * assign.cs: API adjustments for new changes in
4290         Convert.ImplicitStandardConversionExists.
4291
4292         * class.cs: Adjustments to cope with the fact that now toplevel
4293         blocks are of type `ToplevelBlock'. 
4294
4295         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
4296         insteda of standard blocks.
4297
4298         Flag errors if params arguments are passed to anonymous methods.
4299
4300         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
4301         `CurrentAnonymousMethod' which points to the current Anonymous
4302         Method.  The variable points to the AnonymousMethod class that
4303         holds the code being compiled.  It is set in the new EmitContext
4304         created for the anonymous method.
4305
4306         (EmitContext.Phase): Introduce a variable and an enumeration to
4307         assist in enforcing some rules about when and where we are allowed
4308         to invoke certain methods (EmitContext.NeedsReturnLabel is the
4309         only one that enfonces this right now).
4310
4311         (EmitContext.HaveCaptureInfo): new helper method that returns
4312         whether we have a CapturedContext initialized.
4313
4314         (EmitContext.CaptureVariable): New method used to register that a
4315         LocalInfo must be flagged for capturing. 
4316
4317         (EmitContext.CapturedParameter): New method used to register that a
4318         parameters must be flagged for capturing. 
4319         
4320         (EmitContext.CapturedField): New method used to register that a
4321         field must be flagged for capturing. 
4322
4323         (EmitContext.HaveCapturedVariables,
4324         EmitContext.HaveCapturedFields): Return whether there are captured
4325         variables or fields. 
4326
4327         (EmitContext.EmitMethodHostInstance): This is used to emit the
4328         instance for the anonymous method.  The instance might be null
4329         (static methods), this (for anonymous methods that capture nothing
4330         and happen to live side-by-side with the current method body) or a
4331         more complicated expression if the method has a CaptureContext.
4332
4333         (EmitContext.EmitTopBlock): Routine that drives the emission of
4334         code: it will first resolve the top block, then emit any metadata
4335         and then emit the code.  The split is done so that we can extract
4336         any anonymous methods and flag any captured variables/parameters.
4337         
4338         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
4339         during this phase, the ILGenerator should not be used as labels
4340         and local variables declared here might not be accessible to any
4341         code that is part of an anonymous method.  
4342
4343         Exceptions to this include the temporary variables that are
4344         created by some statements internally for holding temporary
4345         variables. 
4346         
4347         (EmitContext.EmitMeta): New routine, in charge of emitting all the
4348         metadata for a cb
4349
4350         (EmitContext.TemporaryReturn): This method is typically called
4351         from the Emit phase, and its the only place where we allow the
4352         ReturnLabel to be defined other than the EmitMeta.  The reason is
4353         that otherwise we would have to duplicate a lot of logic in the
4354         Resolve phases of various methods that today is on the Emit
4355         phase. 
4356
4357         (EmitContext.NeedReturnLabel): This no longer creates the label,
4358         as the ILGenerator is not valid during the resolve phase.
4359
4360         (EmitContext.EmitThis): Extended the knowledge in this class to
4361         work in anonymous methods in addition to iterators. 
4362
4363         (EmitContext.EmitCapturedVariableInstance): This emits whatever
4364         code is necessary on the stack to access the instance to a local
4365         variable (the variable will be accessed as a field).
4366
4367         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
4368         EmitContext.EmitAddressOfParameter): Routines to support
4369         parameters (not completed at this point). 
4370         
4371         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
4372         will also remove the parameters.
4373
4374         * convert.cs (Convert): Define a `ConstantEC' which points to a
4375         null.  This is just to prefity some code that uses
4376         ImplicitStandardConversion code and do not have an EmitContext
4377         handy.
4378
4379         The idea is to flag explicitly that at that point in time, it is
4380         known that the conversion will not trigger the delegate checking
4381         code in implicit conversions (which requires a valid
4382         EmitContext). 
4383
4384         Everywhere: pass new EmitContext parameter since
4385         ImplicitStandardConversionExists now requires it to check for
4386         anonymous method conversions. 
4387
4388         (Convert.ImplicitStandardConversionExists): If the type of an
4389         expression is the anonymous_method_type, and the type is a
4390         delegate, we invoke the AnonymousMethod.Compatible method to check
4391         whether an implicit conversion is possible. 
4392
4393         (Convert.ImplicitConversionStandard): Only do implicit method
4394         group conversions if the language level is not ISO_1.
4395
4396         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
4397         MethodInfo for the Invoke method.  used by Delegate and
4398         AnonymousDelegate.
4399
4400         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
4401         method conversions if the target type is a delegate.
4402
4403         Removed extra debugging nops.
4404
4405         (LocalVariableReference): Turn the `local_info' into a public
4406         field. 
4407
4408         Add `prepared' field, the same hack used for FieldExprs to cope
4409         with composed assignments, as Local variables do not necessarily
4410         operate purely on the stack as they used to: they can be captured
4411         fields. 
4412
4413         Add `temp' for a temporary result, like fields.
4414
4415         Refactor DoResolve and DoResolveLValue into DoResolveBase.
4416
4417         It now copes with Local variables that are captured and emits the
4418         proper instance variable to load it from a field in the captured
4419         case. 
4420
4421         (ParameterReference.DoResolveBase): During the resolve phase,
4422         capture parameters if we are in an anonymous method.
4423
4424         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
4425         anonymous method, use the EmitContext helper routines to emit the
4426         parameter reference.
4427
4428         * iterators.cs: Set RemapToProxy to true/false during the
4429         EmitDispose class.
4430
4431         * parameters.cs (GetParameterByName): New helper method. 
4432
4433         * typemanager.cs (anonymous_method_type) a new type that
4434         represents an anonyous method.  This is always an internal type,
4435         used as a fencepost to test against the anonymous-methodness of an
4436         expression. 
4437         
4438 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
4439
4440         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
4441         561 report.
4442         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
4443
4444 2004-11-10  Martin Baulig  <martin@ximian.com>
4445
4446         * expression.cs (Invocation.BetterFunction): If two methods have
4447         equal parameter types, but only one of them is generic, the
4448         non-generic one wins.
4449         (New.DoResolve): Don't set `is_struct' to false if we're a generic
4450         instance; just use `Type.IsValueType' to determine whether
4451         something is a struct or not.
4452         (MemberAccess.DoResolveAsTypeStep): Don't modify the `args' field,
4453         so we can be called multiple times.
4454
4455 2004-11-10  Martin Baulig  <martin@ximian.com>
4456
4457         * generic.cs (TypeParameter.DefineConstraints): New public method.
4458         (TypeParameter.CheckAccessLevel): Override this and return true.
4459         (ConstructedType.ResolveType): Renamed to DoResolveType(), don't
4460         override ResolveType() anymore.
4461         (ConstructedType.DoResolveAsTypeStep): Call DoResolveType() here.
4462
4463 2004-11-10  Martin Baulig  <martin@ximian.com>
4464
4465         * rootcontext.cs (RootContext.LookupType): If we're a nested type,
4466         call DeclSpace.ResolveNestedType() on it.
4467
4468 2004-11-10  Martin Baulig  <martin@ximian.com>
4469
4470         * support.cs (ReflectionParameters.ParameterModifier): If `gpd' is
4471         non-null, call ParameterModifier() on it.
4472
4473 2004-11-10  Martin Baulig  <martin@ximian.com>
4474
4475         * iterators.cs
4476         (Iterators): Added `current_type' and `this_type' fields.
4477         (Iterators.DefineIterator): Create a new EmitContext and store it
4478         in `ec'; compute `this_type'.
4479
4480 2004-11-10  Martin Baulig  <martin@ximian.com>
4481
4482         * typemanager.cs
4483         (TypeManager.IsPrivateAccessible): New public method.
4484         (Closure.Filter): Use IsPrivateAccessible() instead of IsEqual().
4485
4486 2004-11-10  Martin Baulig  <martin@ximian.com>
4487
4488         * class.cs (TypeContainer.DefineType): Call
4489         TypeBuilder.DefineGenericParameters() before resolving the type
4490         parameters.
4491         (MethodData.parent_method): New protected field.
4492         (MethodData..ctor): Added `MethodInfo parent_method' argument.
4493         (MethodData.Define): Compute `parent_method'.
4494
4495         * decl.cs
4496         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
4497         (MemberCore.GetClsCompliantAttributeValue): Likewise.
4498         (DeclSpace.ec): New protected field; store the EmitContext here.
4499         (DeclSpace.EmitContext): New public property.
4500         (DeclSpace.ResolveType): Un-comment from the [Obsolte] attribute.
4501         (DeclSpace.ResolveNestedType): New public method.
4502         (DeclSpace.ResolveTypeExpr): Just call ResolveAsTypeTerminal() here.
4503         (DeclSpace.NestedAccessible): Added `Type tb' argument.
4504         (DeclSpace.FamilyAccessible): Likewise.
4505         (DeclSpace.FindType): Call ResolveNestedType() for nested types.
4506         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
4507         EmitContext.
4508
4509         * delegate.cs (Delegate.Define): Store the EmitContext in the `ec'
4510         field.
4511
4512         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
4513         (Enum.Emit): Don't create a new EmitContext.
4514
4515 2004-10-18  Martin Baulig  <martin@ximian.com>
4516
4517         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
4518         `Type' directly, but call ResolveType() on it.
4519         (Catch.Resolve): Likewise.
4520         (Foreach.Resolve): Likewise.
4521
4522 2004-10-18  Martin Baulig  <martin@ximian.com>
4523
4524         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
4525         `Type' directly, but call ResolveType() on it.
4526         (Probe.DoResolve): Likewise.
4527         (ArrayCreation.LookupType): Likewise.
4528         (TypeOf.DoResolve): Likewise.
4529         (SizeOf.DoResolve): Likewise.
4530
4531 2004-10-18  Raja R Harinath  <rharinath@novell.com>
4532
4533         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
4534         the ResolveType.
4535
4536 2004-10-17  John Luke  <john.luke@gmail.com>
4537
4538         * class.cs (Operator.GetSignatureForError): use CSharpName
4539
4540         * parameter.cs (Parameter.GetSignatureForError): Returns
4541         correct name even if was not defined.
4542
4543 2004-10-13  Raja R Harinath  <rharinath@novell.com>
4544
4545         Fix #65816.
4546         * class.cs (TypeContainer.EmitContext): New property.
4547         (DefineNestedTypes): Create an emitcontext for each part.
4548         (MethodCore.DoDefineParameters): Use container's emitcontext.
4549         Pass type array to InternalParameters.
4550         (MemberBase.DoDefine): Use container's emitcontext.
4551         (FieldMember.Define): Likewise.
4552         (Event.Define): Likewise.
4553         (SetMethod.GetParameterInfo): Change argument to EmitContext.
4554         Pass type array to InternalParameters.
4555         (SetIndexerMethod.GetParameterInfo): Likewise.
4556         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
4557         * delegate.cs (Define): Pass emitcontext to
4558         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
4559         array to InternalParameters.
4560         * expression.cs (ParameterReference.DoResolveBase): Pass
4561         emitcontext to GetParameterInfo.
4562         (ComposedCast.DoResolveAsTypeStep): Remove check on
4563         ec.ResolvingTypeTree.
4564         * parameter.cs (Parameter.Resolve): Change argument to
4565         EmitContext.  Use ResolveAsTypeTerminal.
4566         (Parameter.GetSignature): Change argument to EmitContext.
4567         (Parameters.ComputeSignature): Likewise.
4568         (Parameters.ComputeParameterTypes): Likewise.
4569         (Parameters.GetParameterInfo): Likewise.
4570         (Parameters.ComputeAndDefineParameterTypes): Likewise.
4571         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
4572         * support.cs (InternalParameters..ctor): Remove variant that takes
4573         a DeclSpace.
4574         * typemanager.cs (system_intptr_expr): New.
4575         (InitExpressionTypes): Initialize it.
4576
4577 2004-10-12  Chris Toshok  <toshok@ximian.com>
4578
4579         * cs-parser.jay: fix location for try_statement and catch_clause.
4580
4581 2004-10-18  Martin Baulig  <martin@ximian.com>
4582
4583         * class.cs (FieldMember.Define): Don't access the TypeExpr's
4584         `Type' directly, but call ResolveType() on it.
4585         (MemberBase.DoDefine): Likewise.
4586
4587         * expression.cs (New.DoResolve): Don't access the TypeExpr's
4588         `Type' directly, but call ResolveType() on it.
4589         (ComposedCast.DoResolveAsTypeStep): Likewise.
4590
4591         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
4592         `Type' directly, but call ResolveType() on it.
4593
4594 2004-10-17  John Luke  <john.luke@gmail.com>
4595
4596         * class.cs (Operator.GetSignatureForError): use CSharpName
4597
4598         * parameter.cs (Parameter.GetSignatureForError): Returns
4599         correct name even if was not defined.
4600
4601 2004-10-13  Raja R Harinath  <rharinath@novell.com>
4602
4603         Fix #65816.
4604         * class.cs (TypeContainer.EmitContext): New property.
4605         (DefineNestedTypes): Create an emitcontext for each part.
4606         (MethodCore.DoDefineParameters): Use container's emitcontext.
4607         Pass type array to InternalParameters.
4608         (MemberBase.DoDefine): Use container's emitcontext.
4609         (FieldMember.Define): Likewise.
4610         (Event.Define): Likewise.
4611         (SetMethod.GetParameterInfo): Change argument to EmitContext.
4612         Pass type array to InternalParameters.
4613         (SetIndexerMethod.GetParameterInfo): Likewise.
4614         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
4615         * delegate.cs (Define): Pass emitcontext to
4616         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
4617         array to InternalParameters.
4618         * expression.cs (ParameterReference.DoResolveBase): Pass
4619         emitcontext to GetParameterInfo.
4620         (ComposedCast.DoResolveAsTypeStep): Remove check on
4621         ec.ResolvingTypeTree.
4622         * parameter.cs (Parameter.Resolve): Change argument to
4623         EmitContext.  Use ResolveAsTypeTerminal.
4624         (Parameter.GetSignature): Change argument to EmitContext.
4625         (Parameters.ComputeSignature): Likewise.
4626         (Parameters.ComputeParameterTypes): Likewise.
4627         (Parameters.GetParameterInfo): Likewise.
4628         (Parameters.ComputeAndDefineParameterTypes): Likewise.
4629         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
4630         * support.cs (InternalParameters..ctor): Remove variant that takes
4631         a DeclSpace.
4632         * typemanager.cs (system_intptr_expr): New.
4633         (InitExpressionTypes): Initialize it.
4634
4635 2004-10-12  Chris Toshok  <toshok@ximian.com>
4636
4637         * cs-parser.jay: fix location for try_statement and catch_clause.
4638
4639 2004-10-07  Raja R Harinath  <rharinath@novell.com>
4640
4641         More DeclSpace.ResolveType avoidance.
4642         * decl.cs (MemberCore.InUnsafe): New property.
4643         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
4644         with newly created EmitContext.
4645         (FieldMember.Define): Likewise.
4646         * delegate.cs (Delegate.Define): Likewise.
4647         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
4648         only if normal name-lookup fails.
4649         (TypeExpr.DoResolve): Enable error-checking.
4650         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
4651         (SizeOf.DoResolve): Likewise.
4652         (ComposedCast.DoResolveAsTypeStep): Likewise.
4653         (StackAlloc.DoResolve): Likewise.
4654         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
4655         (Block.Unsafe): New property.
4656         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
4657         (Unsafe): Set 'unsafe' flag of contained block.
4658         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
4659         (Fixed.Resolve): Likewise.
4660         (Catch.Resolve): Likewise.
4661         (Using.ResolveLocalVariableDecls): Likewise.
4662         (Foreach.Resolve): Likewise.
4663
4664 2004-10-05  John Luke <john.luke@gmail.com>
4665
4666         * cs-parser.jay: add location to error CS0175
4667
4668 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
4669
4670         * ecore.cs (Expression.Constantity): Add support for turning null
4671         into a constant.
4672
4673         * const.cs (Const.Define): Allow constants to be reference types
4674         as long as the value is Null.
4675
4676 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
4677
4678         * namespace.cs (NamespaceEntry.Using): No matter which warning
4679         level is set, check if this namespace name has already been added.
4680
4681 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
4682
4683         * expression.cs: reftype [!=]= null should always use br[true,false].
4684         # 67410
4685
4686 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
4687
4688         Fix #67108
4689         * attribute.cs: Enum conversion moved to 
4690         GetAttributeArgumentExpression to be applied to the all
4691         expressions.
4692
4693 2004-10-01  Raja R Harinath  <rharinath@novell.com>
4694
4695         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
4696         * class.c (TypeContainer.DefineType): Flag error if
4697         base types aren't accessible due to access permissions.
4698         * decl.cs (DeclSpace.ResolveType): Move logic to
4699         Expression.ResolveAsTypeTerminal.
4700         (DeclSpace.ResolveTypeExpr): Thin layer over
4701         Expression.ResolveAsTypeTerminal.
4702         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
4703         Refactor code into NestedAccess.  Use it.
4704         (DeclSpace.NestedAccess): New.
4705         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
4706         argument to silence errors.  Check access permissions.
4707         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
4708         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
4709         (Cast.DoResolve): Likewise.
4710         (New.DoResolve): Likewise.
4711         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
4712         (TypeOf.DoResolve): Likewise.
4713
4714         * expression.cs (Invocation.BetterConversion): Return the Type of
4715         the better conversion.  Implement section 14.4.2.3 more faithfully.
4716         (Invocation.BetterFunction): Make boolean.  Make correspondence to
4717         section 14.4.2.2 explicit.
4718         (Invocation.OverloadResolve): Update.
4719         (Invocation): Remove is_base field.
4720         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
4721         (Invocation.Emit): Likewise.
4722
4723 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
4724
4725         * cs-parser.jay: Reverted 642 warning fix.
4726
4727 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
4728
4729         Fix bug #66615
4730         * decl.cs (FindMemberWithSameName): Indexer can have more than
4731         1 argument.
4732
4733 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
4734
4735         * expression.cs (LocalVariableReference.DoResolveLValue):
4736         Do not report warning 219 for out values.
4737         (EmptyExpression.Null): New member to avoid extra allocations.
4738
4739 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
4740
4741         * cs-parser.jay: Fix wrong warning 642 report.
4742
4743         * cs-tokenizer.cs (CheckNextToken): New helper;
4744         Inspect next character if is same as expected.
4745
4746 2004-09-23  Martin Baulig  <martin@ximian.com>
4747
4748         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
4749         (Convert.ImplicitReferenceConversionExists): Likewise.
4750
4751 2004-11-09  Raja R Harinath  <rharinath@novell.com>
4752
4753         * Makefile (DISTFILES): Comment out a few missing files.
4754
4755 2004-10-29  Raja R Harinath  <rharinath@novell.com>
4756
4757         * Makefile (bootstrap_libs,bootstrap_libfiles): New.
4758         (bootstrap-libs): New target.  Invokes the net_2_0_bootstrap profile.
4759         (gmcs.exe): Invoke bootstrap-libs.
4760         (clean-local): Clean the net_2_0_bootstrap profile too.
4761         (PROGRAM_INSTALL_DIR): New.
4762         (install-local): Use it.
4763
4764 2004-10-13  Martin Baulig  <martin@ximian.com>
4765
4766         * generic.cs (TypeManager.InflatedConstraints): New nested class.
4767         (TypeParameter.DefineType): If we're a method type parameter and
4768         that method is overriding something, "inflate" its constraints.
4769
4770 2004-10-12  Martin Baulig  <martin@ximian.com>
4771
4772         * expression.cs (MemberAccess.DoResolve): If we're a SimpleName
4773         and have type arguments, create and resolve a ConstructedType.
4774
4775 2004-10-12  Martin Baulig  <martin@ximian.com>
4776
4777         * decl.cs (MemberCache.FindMemberToOverride): Use
4778         TypeManager.IsEqual() to compare the parameters and Type.Equals()
4779         to compare the invocationType.
4780
4781         * typemanager.cs (TypeManager.IsEqual): Added support for arrays.
4782         When comparing two type parameters, only do the signature-only
4783         comparision for method type parameters.
4784
4785 2004-10-11  Martin Baulig  <martin@ximian.com>
4786
4787         * report.cs: Don't make --fatal abort on warnings, we have
4788         -warnaserror for that.
4789
4790 2004-10-11  Martin Baulig  <martin@ximian.com>
4791
4792         * typemanager.cs
4793         (TypeManager.IsEqualGenericType): Removed, use IsEqual() instead.
4794         (TypeManager.IsEqual): Call ourself recursively instead of using
4795         Type.IsEqual(). 
4796
4797 2004-10-11  Martin Baulig  <martin@ximian.com>
4798
4799         * class.cs (TypeContainer.DefineType): Only call TypeParameter.Define()
4800         on our own type parameters, not on the ones we inherit from a containing
4801         class.
4802
4803         * expression.cs (Invocation.InferType): Use `==', not `Equals()' for
4804         the comparision.
4805
4806         * generic.cs (TypeParameter.Define): We may only be called once.
4807
4808         * pending.cs (Pending.InterfaceMethod): Call TypeManager.Real_IsEqual()
4809         instead of TypeManager.IsEqual().
4810
4811 2004-09-28  Martin Baulig  <martin@ximian.com>
4812
4813         * generic.cs
4814         (GenericConstraints.EffectiveBaseClass): New public property.
4815         (TypeParameter.GenericConstraints): New public property.
4816         (ConstructedType.CheckConstraints): Improved.
4817
4818         * convert.cs (Convert.TypeParam_EffectiveBaseType): New private method.
4819         (Convert.TypeParameterConversion): New private method; use this in
4820         ImplicitReferenceConversion() and ImplicitReferenceConversionExists()
4821         for all conversions related to type parameters.
4822
4823 2004-09-24  Martin Baulig  <martin@ximian.com>
4824
4825         * convert.cs (Convert.ImplicitReferenceConversion): Added implicit
4826         type parameter conversions for type parameters which are known to
4827         be reference types.
4828
4829 2004-09-24  Martin Baulig  <martin@ximian.com>
4830
4831         * generic.cs (GenericConstraints): Added `IsReferenceType' and
4832         `IsValueType' properties.
4833
4834         * support.cs (ReflectionConstraints): Use
4835         Type.GetGenericParameterConstraints() instead of the old hack.
4836
4837 2004-09-24  Martin Baulig  <martin@ximian.com>
4838
4839         * generic.cs (GenericConstraints): Moved here and made it an
4840         abstract class.
4841
4842         * support.cs (GenericConstraints): Moved to generic.cs.
4843
4844 2004-09-24  Martin Baulig  <martin@ximian.com>
4845
4846         * support.cs
4847         (ReflectionConstraints): Un-nested this class and made it public.
4848
4849         * typemanager.cs
4850         (TypeManager.GetTypeParameterConstraints): New public method.
4851         (TypeManager.HasConstructorConstraint): Use the attributes.
4852
4853 2004-09-24  Martin Baulig  <martin@ximian.com>
4854
4855         * support.cs (GenericConstraints): Replaced `HasConstructor',
4856         `IsReferenceType' and `IsValueType' with `Attributes'.
4857         (ReflectionParameters.ReflectionConstraints): Removed the Create()
4858         method and made the .ctor public.
4859
4860         * generic.cs (Constraints.Attributes): New public property.
4861         (Constraints): Renamed `HasConstructor' -> `HasConstructorConstraint',
4862         `IsReferenceType' -> `HasReferenceTypeConstraint' and
4863         `IsValueType' -> `HasValueTypeConstraint'.
4864
4865 2004-09-23  Martin Baulig  <martin@ximian.com>
4866
4867         * generic.cs (Constraints): Reflect latest runtime changes.
4868
4869 2004-09-23  Martin Baulig  <martin@ximian.com>
4870
4871         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
4872         (Convert.ImplicitReferenceConversionExists): Likewise.
4873
4874 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
4875
4876         * class.cs (Operator.Define): Add error 448 and 559 report.
4877         
4878 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
4879
4880         * class.cs (MemberBase.IsTypePermitted): New protected
4881         method for checking error CS0610.
4882
4883 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
4884
4885         * class.cs (TypeContainer.HasExplicitLayout): New property
4886         Returns whether container has StructLayout attribute set Explicit.
4887         (FieldMember): New abstract class for consts and fields.
4888         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
4889         (Field): Reuse FieldMember.
4890
4891         * const.cs (Const): Reuse FieldMember.
4892
4893         * rootcontext.cs: EmitConstants call moved to class.
4894
4895 2004-09-22  Martin Baulig  <martin@ximian.com>
4896
4897         Marek and me just fixed one of our oldest bugs: #28562 :-)
4898
4899         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
4900
4901         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
4902         we're an EnumConstant, just return that.
4903         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
4904         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
4905         to get the value which'll actually be written into the attribute.
4906         However, we have to use GetValue() to access the attribute's value
4907         in the compiler.        
4908
4909 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
4910
4911         * constant.cs (Constant.IsNegative): New abstract property
4912         IsNegative.
4913
4914         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
4915         (StackAlloc.DoResolve): Reused IsNegative.
4916
4917 2004-09-22  Martin Baulig  <martin@ximian.com>
4918
4919         * typemanager.cs (TypeManager.LookupGenericTypeContainer): New
4920         public method; like LookupTypeContainer, but also works for
4921         generic instances.
4922
4923         * report.cs (Report.SymbolRelatedToPreviousError): Use
4924         TypeManager.LookupGenericTypeContainer().       
4925
4926 2004-09-22  Martin Baulig  <martin@ximian.com>
4927
4928         Thanks to Peter Sestoft for this bug report.
4929
4930         * expression.cs (Conditional): If both the `trueExpr' and the
4931         `falseExpr' is a NullLiteral, return a NullLiteral.
4932
4933 2004-09-22  Martin Baulig  <martin@ximian.com>
4934
4935         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
4936         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
4937         for the "get_Current" call.
4938
4939 2004-09-21  Martin Baulig  <martin@ximian.com>
4940
4941         * convert.cs (Convert.ImplicitReferenceConversion): When
4942         converting to an interface type, first check whether we're
4943         converting from a reference type.
4944
4945 2004-09-14  Martin Baulig  <martin@ximian.com>
4946
4947         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
4948
4949 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
4950
4951         Fixed bug #61902
4952         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
4953         called and is obsolete then this member suppress message
4954         when call is inside next [Obsolete] method or type.
4955
4956         * expression.cs: Use TestObsoleteMethodUsage member.
4957
4958 2004-09-14  Martin Baulig  <martin@ximian.com>
4959
4960         * genericparser.cs: Removed.
4961
4962 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
4963
4964         * class.cs (MethodCore.CheckBase): Fix bug #65757.
4965
4966 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
4967
4968         * attribute.cs (Attribute.Resolve): Add error 653 report.
4969
4970         * class.cs (Class.ApplyAttributeBuilder): Add error 641
4971         report.
4972         (Method.ApplyAttributeBuilder): Add error 685 report.
4973         (Operator.Define): Add error 564 report.
4974
4975         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
4976
4977         * expression.cs (Invocation.DoResolve): Add error
4978         245 and 250 report.
4979
4980         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
4981         error 674 report.
4982
4983 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
4984
4985         * class.cs (ConstructorInitializer.Resolve):
4986         Wrong error number (515->516).
4987
4988 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
4989
4990         * class.cs (Indexer.Define): Add error 631 report.
4991
4992 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
4993
4994         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
4995
4996 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
4997
4998         * expression.cs (Probe.DoResolve): Add error CS0241 report.
4999
5000 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
5001
5002         * cs-parser.jay: Added error CS0241 report.
5003
5004 2004-09-10  Raja R Harinath  <rharinath@novell.com>
5005
5006         * cs-parser.jay (fixed_statement): Introduce a scope for the
5007         declaration in the 'fixed' statement.
5008
5009 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
5010
5011         * cs-parser.jay: Added CS0230 error report.
5012
5013 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
5014
5015         * cs-parser.jay: Added errors CS0231 and CS0257 report.
5016
5017 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
5018
5019         * expression.cs (Argument.Resolve): Added error CS0192 and
5020         CS0199 report.
5021
5022 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
5023
5024         C# 2.0 #pragma warning feature
5025
5026         * cs-tokenizer.cs (PreProcessPragma): New method; 
5027         Handles #pragma directive.
5028
5029         * report.cs (WarningRegions): New class; Support
5030         class for #pragma warning directive. It tests whether
5031         warning is enabled for a given line.
5032
5033 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
5034
5035         * const.cs: Add more descriptive error report, tahnks to
5036         Sebastien. 
5037
5038 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
5039
5040         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
5041
5042 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
5043
5044         * expression.cs: Apply patch from Ben: Remove dead code from
5045         ArrayCreation, and remove the TurnintoConstant call in const.cs,
5046         as that code just threw an exception anwyays.
5047
5048         * const.cs: Remove the call to the turnintoconstant, for details
5049         see bug: #63144
5050         
5051         * literal.cs: The type of the null-literal is the null type;  So
5052         we use a placeholder type (literal.cs:System.Null, defined here)
5053         for it.
5054
5055         * expression.cs (Conditional.DoResolve): Remove some old code that
5056         is no longer needed, conversions have been fixed.
5057
5058         (ArrayCreationExpression.DoResolve): Return false if we fail to
5059         resolve the inner expression.
5060
5061 2004-09-07  Raja R Harinath  <rharinath@novell.com>
5062
5063         Fix test-290.cs.
5064         * cs-parser.jay (delegate_declaration): Record a delegate
5065         declaration as a type declaration.
5066         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
5067
5068 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
5069
5070         * parameter.cs: Do not crash if the type can not be resolved. 
5071
5072         * expression.cs: Report errors with unsafe pointers, fixes #64896
5073
5074 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
5075
5076         * expression.cs: Pointer arith always needs to do a conv.i
5077         if the operand is a long. fix 65320
5078
5079 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
5080
5081         Fixed cs0619-37.cs, cs0619-38.cs
5082
5083         * enum.cs (GetObsoleteAttribute): Removed.
5084
5085         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
5086         on Enum member is double staged. The first is tested member
5087         and then enum.
5088
5089 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
5090
5091         Fixed #56986, #63631, #65231
5092
5093         * class.cs: (TypeContainer.AddToMemberContainer): New method,
5094         adds member to name container.
5095         (TypeContainer.AddToTypeContainer): New method, adds type to
5096         name container.
5097         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
5098         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
5099         AddOperator): Simplified by reusing AddToMemberContainer.
5100         (TypeContainer.UserDefinedStaticConstructor): Changed to property
5101         instead of field.
5102         (Method.CheckForDuplications): Fixed implementation to test all
5103         possibilities.
5104         (MemberBase): Detection whether member is explicit interface
5105         implementation is now in constructor.
5106         (MemberBase.UpdateMemberName): Handles IndexerName.
5107         (Accessor): Changed to keep also location information.
5108         (AbstractPropertyEventMethod): Is derived from MemberCore.
5109         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
5110         will be emited or not.
5111         (PropertyBase.AreAccessorsDuplicateImplementation):
5112         Tests whether accessors are not in collision with some method.
5113         (Operator): Is derived from MethodCore to simplify common
5114         operations.
5115
5116         * decl.cs (Flags.TestMethodDuplication): Test for duplication
5117         must be performed.
5118         (DeclSpace.AddToContainer): Adds the member to defined_names
5119         table. It tests for duplications and enclosing name conflicts.
5120
5121         * enum.cs (EnumMember): Clean up to reuse the base structures
5122
5123 2004-09-03  Martin Baulig  <martin@ximian.com>
5124
5125         Merged latest changes into gmcs.  Please keep this comment in
5126         here, it makes it easier for me to see what changed in MCS since
5127         the last time I merged.
5128
5129 2004-09-03  Martin Baulig  <martin@ximian.com>
5130
5131         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
5132         into TypeContainer, to make partial classes work again.
5133
5134 2004-09-03  Martin Baulig  <martin@ximian.com>
5135
5136         * rootcontext.cs (RootContext.V2): Removed.
5137
5138 2004-03-23  Martin Baulig  <martin@ximian.com>
5139
5140         * expression.cs (Invocation.OverloadResolve): Added `bool
5141         may_fail' argument and use it instead of the Location.IsNull() hack.
5142
5143 2004-09-09  Martin Baulig  <martin@ximian.com>
5144
5145         * cs-parser.jay (namespace_declaration): Fixed CS0134 reporting.
5146
5147 2004-09-09  Martin Baulig  <martin@ximian.com>
5148
5149         * generic.cs (TypeParameter.DefineType): Added support for
5150         explicit interface methods.
5151
5152 2004-09-09  Martin Baulig  <martin@ximian.com>
5153
5154         * README.Changes: New document.  Started to list important changes
5155         between MCS and GMCS here.
5156
5157 2004-09-08  Martin Baulig  <martin@ximian.com>
5158
5159         * class.cs
5160         (TypeContainer.CheckRecursiveDefinition): New protected method.
5161         (TypeContainer.DefineType): Move the CS0146 check into
5162         CheckRecursiveDefinition().     
5163
5164 2004-09-06  Martin Baulig  <martin@ximian.com>
5165
5166         * generic.cs (ConstructedType.CheckConstraints): Allow builtin
5167         types for the constructor constraint.
5168
5169 2004-09-03  Martin Baulig  <martin@ximian.com>
5170
5171         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
5172         into TypeContainer, to make partial classes work again.
5173
5174 2004-09-03  Martin Baulig  <martin@ximian.com>
5175
5176         * rootcontext.cs (RootContext.V2): Removed.
5177
5178 2004-03-23  Martin Baulig  <martin@ximian.com>
5179
5180         * expression.cs (Invocation.OverloadResolve): Added `bool
5181         may_fail' argument and use it instead of the Location.IsNull() hack.
5182
5183 2004-09-03  Martin Baulig  <martin@ximian.com>
5184
5185         Merged latest changes into gmcs.  Please keep this comment in
5186         here, it makes it easier for me to see what changed in MCS since
5187         the last time I merged.
5188
5189 2004-09-03  Raja R Harinath  <rharinath@novell.com>
5190
5191         Fix #61128.
5192         * expression.cs (BetterConversion): Don't allow either conversion 
5193         to be null.  Remove redundant implicit conversion test when 'q ==
5194         null' -- when this function is invoked, we already know that the
5195         implicit conversion exists.
5196         (BetterFunction): Assume that 'best' is non-null.  Remove
5197         redundant reimplementation of IsApplicable when 'best' is null.
5198         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
5199         number of arguments.
5200         (IsAncestralType): Extract from OverloadResolve.
5201         (OverloadResolve): Make robust to the MethodGroupExpr being
5202         unsorted.  Implement all the logic of Section 14.5.5.1, and
5203         support overloading of methods from multiple applicable types.
5204         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
5205
5206         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
5207         (RealError, Warning): Append type of report to related symbol.
5208
5209 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
5210
5211         * enum.cs: Fixed CLS-Compliance checks for enum members.
5212         Error tests cs3008-8.cs, cs3014-8.cs
5213
5214 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
5215
5216         Fixed bug #62342, #63102
5217         * class.cs: ImplementIndexer uses member.IsExplicitImpl
5218         like ImplementMethod.
5219
5220 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
5221
5222         * attribute.cs (Attribute.GetAttributeArgumentExpression):
5223         Fixed bug #65170.
5224
5225 2004-09-02  Martin Baulig  <martin@ximian.com>
5226
5227         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
5228         TypeManager.GetArgumentTypes() rather than calling GetParameters()
5229         on the MethodBase.
5230
5231 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
5232
5233         C# 2.0 Static classes implemented
5234
5235         * class.cs (TypeContainer): instance_constructors,
5236         initialized_fields, initialized_static_fields,
5237         default_constructor, base_inteface_types are protected to be
5238         accessible from StaticClass.
5239         (TypeContainer.DefineDefaultConstructor): New virtual method
5240         for custom default constructor generating
5241         (StaticClass): New class to handle "Static classes" feature.
5242
5243         * cs-parser.jay: Handle static keyword on class like instance
5244         of StaticClass.
5245
5246         * driver.cs: Added "/langversion" command line switch with two
5247         options (iso-1, default).
5248
5249 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
5250
5251         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
5252
5253 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
5254
5255         * delegate.cs: Style.
5256
5257 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
5258
5259         * delegate.cs: Add seperate instance expr field for miguel.
5260
5261 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
5262
5263         * PointerArithmetic (Resolve): make sure we are not doing
5264         pointer arith on void*. Also, make sure we are resolved
5265         by not setting eclass until resolve.
5266
5267         All callers: Make sure that PointerArithmetic gets resolved.
5268
5269 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
5270
5271         * ArrayCreation (LookupType): If the type does not resolve 
5272         to an array, give an error.
5273
5274 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
5275
5276         * statement.cs (Try.Resolve): Fixed bug #64222
5277
5278 2004-08-27  Martin Baulig  <martin@ximian.com>
5279
5280         * class.cs
5281         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
5282         crash here.     
5283
5284 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
5285
5286         * ecore.cs (Constantify): Get underlying type via
5287         System.Enum.GetUnderlyingType to avoid StackOverflow on the
5288         Windows in special cases.
5289
5290 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
5291
5292         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
5293         for obtaining also private methods.
5294         (GetRemoveMethod): Used GetRemoveMethod (true)
5295         for obtaining also private methods.
5296
5297 2004-09-02  Martin Baulig  <martin@ximian.com>
5298
5299         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
5300         TypeManager.GetArgumentTypes() rather than calling GetParameters()
5301         on the MethodBase.
5302
5303 2004-08-27  Martin Baulig  <martin@ximian.com>
5304
5305         * class.cs
5306         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
5307         crash here.     
5308
5309 2004-08-25  Martin Baulig  <martin@ximian.com>
5310
5311         * support.cs (ReflectionParameters..ctor): If this is a generic
5312         method, retrieve and store its type parameters.
5313         (InternalParameters..ctor): Added `TypeParameter[]' argument.
5314         (ReflectionParameters.GenericConstraints): The argument specifies
5315         the type parameter, not the method parameter.
5316         (InternalParameters.GenericConstraints): Likewise.
5317
5318         * generic.cs (TypeParameter.DefineType): Correctly handle
5319         constraints wrt. generic methods in interfaces and their
5320         implementations.        
5321
5322 2004-08-24  Martin Baulig  <martin@ximian.com>
5323
5324         * generic.cs (TypeParameter.IsSubclassOf): New public method.
5325         (Constraints.IsSubclassOf): New internal method.
5326
5327         * typemanager.cs (TypeManager.FindMembers): Added special support
5328         for GenericTypeParameterBuilder's.      
5329         (TypeManager.IsSubclassOf, IsFamilyAccessible): Added support for
5330         type parameters.
5331
5332 2004-08-24  Martin Baulig  <martin@ximian.com>
5333
5334         * typemanager.cs
5335         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
5336         this for accessibility checks.
5337         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
5338         IsNestedFamilyAccessible.
5339         (TypeManager.IsSubclassOf): New method, do what the name actually
5340         says.   
5341
5342 2004-08-24  Martin Baulig  <martin@ximian.com>
5343
5344         * expression.cs (MemberAccess.DoResolve): When resolving ourselves
5345         as a SimpleName, include the generic arity.
5346
5347 2004-08-24  Martin Baulig  <martin@ximian.com>
5348
5349         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
5350         MethodAttributes.HideBySig for operators.
5351
5352 2004-08-23  Martin Baulig  <martin@ximian.com>
5353
5354         Back to the old error reporting system :-)
5355
5356         * report.cs (Message): Removed.
5357         (Report.MessageData, ErrorData, WarningData): Removed.
5358         (Report.Error, Warning): Back to the old system.
5359
5360 2004-08-23  Martin Baulig  <martin@ximian.com>
5361
5362         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
5363
5364         * class.cs (TypeContainer.ParentContainer): New public virtual
5365         method; replaces the explicit interface implementation.
5366         (ClassPart.ParentContainer): Override.
5367
5368 2004-08-23  Martin Baulig  <martin@ximian.com>
5369
5370         * statement.cs (Switch): Added support for constant switches; see
5371         #59428 or test-285.cs.
5372
5373 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
5374
5375         Fixed bug #62740.
5376         * statement.cs (GetEnumeratorFilter): Removed useless
5377         logic because C# specs is strict. GetEnumerator must be
5378         public.
5379
5380 2004-08-22  Martin Baulig  <martin@ximian.com>
5381
5382         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
5383         a switch and may break, reset the barrier.  Fixes #59867.
5384
5385 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
5386
5387         CLS-Compliance speed up (~5% for corlib)
5388
5389         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
5390         New method. Tests container for CLS-Compliant names
5391
5392         * class.cs (TypeContainer.VerifyClsName): New method.
5393         Checks whether container name is CLS Compliant.
5394         (Constructor): Implements IMethodData.
5395
5396         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
5397         low-case table for CLS Compliance test.
5398         (MemberCache.VerifyClsParameterConflict): New method.
5399         Checks method parameters for CS3006 error.
5400
5401         * enum.cs (EnumMember): Is derived from MemberCore.
5402         (Enum.VerifyClsName): Optimized for better performance.
5403
5404 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
5405
5406         * report.cs: Renamed Error_T to Error and changed all
5407         references.
5408
5409 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
5410
5411         * class.cs (TypeContainer.IndexerArrayList): New inner class
5412         container for indexers.
5413         (TypeContainer.DefaultIndexerName): New constant for default
5414         indexer name. Replaced all "Item" with this constant.
5415         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
5416
5417         * typemanager.cs (TypeManager.default_member_ctor): Cache here
5418         DefaultMemberAttribute constructor.
5419
5420 2004-08-05  Martin Baulig  <martin@ximian.com>
5421
5422         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
5423         Fix bug #59429.
5424
5425 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
5426
5427         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
5428         multi platforms problem.
5429
5430         * compiler.csproj: Included shared files.
5431
5432 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
5433
5434         Fix bug 60333, 55971 in the more general way
5435         * attribute.cs (Attribute.GetAttributeArgumentExpression):
5436         Added arg_type argument for constant conversion.
5437         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
5438
5439 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
5440
5441         Fix bug #59760
5442         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
5443         OperatorArrayList, MethodCoreArrayList for typecontainer
5444         containers. Changed class member types to these new types.
5445         (MethodArrayList.DefineMembers): Added test for CS0659.
5446
5447 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
5448
5449         * cfold.cs: Synchronize the folding with the code in expression.cs
5450         Binary.DoNumericPromotions for uint operands.
5451
5452         * attribute.cs: Revert patch from Raja, it introduced a regression
5453         while building Blam-1.2.1 (hard to isolate a test case).
5454
5455 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
5456
5457         Fix for #55382
5458         * class.cs:
5459         (TypeContainer.Define): Renamed to DefineContainerMembers because of
5460         name collision.
5461         (MethodCore.parent_method): New member. The method we're overriding
5462         if this is an override method.
5463         (MethodCore.CheckBase): Moved from Method class and made common.
5464         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
5465         private.
5466         (MethodCore.CheckForDuplications): New abstract method. For custom
5467         member duplication search in a container
5468         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
5469         method and its return type.
5470         (Event.conflict_symbol): New member. Symbol with same name in the
5471         parent class.
5472
5473         * decl.cs:
5474         (MemberCache.FindMemberWithSameName): New method. The method
5475         is looking for conflict with inherited symbols.
5476
5477 2004-08-04  Martin Baulig  <martin@ximian.com>
5478
5479         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
5480
5481         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
5482
5483 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
5484
5485         * report.cs (Message): New enum for better error, warning reference in
5486         the code.
5487         (MessageData): New inner abstract class. It generally handles printing of
5488         error and warning messages.
5489         Removed unused Error, Warning, Message methods.
5490
5491 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
5492
5493         Fix for cs0592-8.cs test
5494         * attribute.cs
5495         (Attributable.ValidAttributeTargets): Made public.
5496         (Attribute.ExplicitTarget): New member for explicit target value.
5497         (Attribute.CheckTargets): Now we translate explicit attribute
5498         target to Target here.
5499
5500 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
5501
5502         * ecore.cs (MethodGroupExpr): new IsBase property.
5503
5504         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
5505
5506         * delegate.cs (DelegateCreation): store a MethodGroupExpr
5507         rather than an instance expr.
5508
5509         (DelegateCreation.Emit): Use the method group rather than
5510         the instance expression. Also, if you have base.Foo as the
5511         method for a delegate, make sure to emit ldftn, not ldftnvirt.
5512
5513         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
5514
5515         (NewDelegate.DoResolve): Only check for the existance of Invoke
5516         if the method is going to be needed. Use MethodGroupExpr.
5517
5518         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
5519
5520         * expression.cs: For pointer arith., make sure to use
5521         the size of the type, not the size of the pointer to
5522         the type.
5523
5524 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
5525
5526         Fix for #60722
5527         * class.cs (Class): Added error CS0502 test.
5528
5529 2004-08-03  John Luke  <jluke@cfl.rr.com>
5530             Raja R Harinath  <rharinath@novell.com>
5531
5532         Fix for #60997.
5533         * attribute.cs (Attribute.complained_before): New flag.
5534         (Attribute.ResolveType, Attribute.Resolve),
5535         (Attribute.DefinePInvokeMethod): Set it.
5536         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
5537         
5538 2004-08-03  Martin Baulig  <martin@ximian.com>
5539
5540         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
5541         use a user-defined operator; we still need to do numeric
5542         promotions in case one argument is a builtin type and the other
5543         one has an implicit conversion to that type.  Fixes #62322.
5544
5545 2004-08-18  Martin Baulig  <martin@ximian.com>
5546
5547         * class.cs (Method.Define): Use the correct method name when
5548         creating the MethodBuilder for a generic method.
5549
5550 2004-08-17  Martin Baulig  <martin@ximian.com>
5551
5552         * generic.cs (Constraints): Support type parameter constraints.
5553
5554 2004-08-16  Martin Baulig  <martin@ximian.com>
5555
5556         * cs-tokenizer.cs (Tokenizer.TypeOfParsing): New public property.
5557         (Token.GENERIC_DIMENSION): New token; this is returned if we
5558         encounter an unbound generic type in a typeof() expression.
5559
5560         * cs-parser.jay (opt_type_argument_list): Added GENERIC_DIMENSION;
5561         this token is only generated while parsing a typeof() expression.
5562         (typeof_expression): Removed the old unbound_type hack.
5563
5564         * generic.cs (TypeArguments.IsUnbound): New public property.
5565
5566         * decl.cs (MemberName): Added support for unbound types.
5567
5568 2004-08-14  Martin Baulig  <martin@ximian.com>
5569
5570         * typemanager.cs
5571         (TypeManager.IsEqualGenericInstance): New static method.
5572         (TypeManager.IsSubclassOrNestedChildOf, IsSubclassOf): This is
5573         just used to check accessibility, so follow the rules of 26.1.6.        
5574
5575         * expression.cs (MemberAccess.ResolveAsTypeStep): Return a
5576         ConstructedType instead of a TypeExpression if we have type arguments.
5577
5578         * cs-parser.jay (typeof_expression): Support unbound generic types.
5579
5580         * ecore.cs (UnboundTypeExpression): New public class.
5581
5582 2004-08-12  Martin Baulig  <martin@ximian.com>
5583
5584         * typemanager.cs (TypeManager.IsNestedChildOf): Use
5585         TypeManager.IsEqual() rather than `=='.
5586
5587         * decl.cs (DeclSpace.CheckAccessLevel): Use `tb.FullName' for
5588         generic instances as well.
5589
5590 2004-08-12  Martin Baulig  <martin@ximian.com>
5591
5592         * expression.cs (Invocation.InferType): We can only infer method
5593         type parameters.  Fixes #62647.
5594
5595 2004-08-11  Martin Baulig  <martin@ximian.com>
5596
5597         * class.cs (TypeContainer.DefineType): Create the TypeBuilder
5598         before resolving the base classes.
5599
5600 2004-08-06 Gonzalo Paniagua Javier <gonzalo@ximian.com>
5601
5602         * Makefile: install .mdb file too.
5603
5604 2004-08-05  Martin Baulig  <martin@ximian.com>
5605
5606         * ecore.cs (FieldExpr.DoResolveLValue): If we're resolving a field
5607         initializer, the current type is just the TypeBuilder, not the
5608         instantiated generic type.
5609         (FieldExpr.IsFieldInitializer): New public property.
5610
5611 2004-08-04  Martin Baulig  <martin@ximian.com>
5612
5613         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
5614
5615         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
5616
5617 2004-08-03  Martin Baulig  <martin@ximian.com>
5618
5619         * class.cs (MethodData.Define): If we're an explicit
5620         implementation, remove the generic arity from the type name.
5621
5622 2004-08-03  Martin Baulig  <martin@ximian.com>
5623
5624         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
5625         use a user-defined operator; we still need to do numeric
5626         promotions in case one argument is a builtin type and the other
5627         one has an implicit conversion to that type.  Fixes #62322.
5628
5629 2004-08-02  Martin Baulig  <martin@ximian.com>
5630
5631         * class.cs (TypeContainer.ifaces): Make this a `Type[]', not a
5632         `TypeExpr[]' array.
5633         (TypeContainer.GetClassBases): Return the unexpanded list of
5634         interfaces; we expand them later.
5635         (TypeContainer.DefineType): After creating the TypeBuilder, call
5636         TypeManager.ExpandInterfaces() to get an expanded and resolved
5637         list of interfaces.
5638
5639         * ecore.cs (TypeExpr.GetInterfaces): Removed
5640
5641         * generics.cs (Constraints.InterfaceConstraints): Remove.
5642         (TypeParameter.DefineType): Call TypeManager.RegisterBuilder() to
5643         register the interface constraints.
5644
5645         * typemanager.cs
5646         (TypeManager.AddUserType): Removed the `ifaces' argument.
5647         (TypeManager.AddTypeParameter): Likewise.
5648         (TypeManager.AddUserInterface): Removed, was unused.
5649         (TypeManager.RegisterBuilder): Take a `Type[]' instead of a
5650         `TypeExpr[]' array for the interfaces.
5651         (TypeManager.ExpandInterfaces): Call this after the TypeBuilder
5652         has been defined, returns a list of the resolved interfaces types.
5653         (TypeManager.GetInterfaces): Return a `Type[]', not a `TypeExpr[]'.
5654         (TypeManager.GetExplicitInterfaces): Likewise.  
5655
5656 2004-08-02  Martin Baulig  <martin@ximian.com>
5657
5658         * expression.cs (Invocation.EmitCall): If we're invoking a method
5659         on a type parameter, use the new `Constrained' prefix opcode.
5660
5661 2004-08-02  Martin Baulig  <martin@ximian.com>
5662
5663         * statement.cs (LocalInfo.Flags): Added `IsThis'.
5664         (LocalInfo.IsThis): New public property.
5665         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
5666
5667 2004-08-01  Martin Baulig  <martin@ximian.com>
5668
5669         * class.cs (TypeContainer.GetClassBases): Don't set the default
5670         here since we may get called from GetPartialBases().
5671         (TypeContainer.DefineType): If GetClassBases() didn't return a
5672         parent, use the default one.
5673
5674 2004-07-30  Martin Baulig  <martin@ximian.com>
5675
5676         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
5677
5678         * class.cs (SourceMethod): New public class, derive from the
5679         symbol writer's ISourceMethod.
5680         (Method): Use the new symbol writer API.
5681
5682         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
5683         as argument and use the new symbol writer.
5684
5685         * location.cs
5686         (SourceFile): Implement the symbol writer's ISourceFile.
5687         (Location.SymbolDocument): Removed.
5688         (Location.SourceFile): New public property.
5689
5690         * symbolwriter.cs: Use the new symbol writer API.
5691
5692 2004-07-30  Raja R Harinath  <rharinath@novell.com>
5693
5694         * Makefile (install-local): Remove.  Functionality moved to
5695         executable.make.
5696
5697 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
5698
5699         * Makefile: Install mcs.exe.config file together with mcs.exe.
5700         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
5701         correct runtime version.
5702         
5703 2004-07-25  Martin Baulig  <martin@ximian.com>
5704
5705         * class.cs
5706         (TypeContainer.RegisterOrder): Removed, this was unused.
5707         (TypeContainer, interface_order): Removed.
5708         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
5709         TypeContainer as argument since we can also be called with a
5710         `PartialContainer' for a partial class/struct/interface.
5711         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
5712         of checking whether we're an `Interface' - we could be a
5713         `PartialContainer'.
5714         (PartialContainer.Register): Override; call
5715         AddClass()/AddStruct()/AddInterface() on our parent.
5716
5717         * cs-parser.jay (interface_member_declaration): Add things to the
5718         `current_container', not the `current_class'.
5719
5720         * rootcontext.cs (RegisterOrder): The overloaded version which
5721         takes an `Interface' was unused, removed.
5722
5723         * typemanager.cs (TypeManager.LookupInterface): Return a
5724         `TypeContainer', not an `Interface'.
5725         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
5726         contain a `PartialContainer' for an interface, so check it's
5727         `Kind' to figure out what it is.
5728
5729 2004-07-25  Martin Baulig  <martin@ximian.com>
5730
5731         * class.cs (Class.DefaultTypeAttributes): New public constant.
5732         (Struct.DefaultTypeAttributes): Likewise.
5733         (Interface.DefaultTypeAttributes): Likewise.
5734         (PartialContainer.TypeAttr): Override this and add the
5735         DefaultTypeAttributes.
5736
5737 2004-07-25  Martin Baulig  <martin@ximian.com>
5738
5739         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
5740         we can just use the `Parent' field instead.
5741
5742 2004-07-25  Martin Baulig  <martin@ximian.com>
5743
5744         * class.cs (TypeContainer.Emit): Renamed to EmitType().
5745
5746 2004-07-25  Martin Baulig  <martin@ximian.com>
5747
5748         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
5749         our parts before defining any methods.
5750         (TypeContainer.VerifyImplements): Make this virtual.
5751         (ClassPart.VerifyImplements): Override and call VerifyImplements()
5752         on our PartialContainer.
5753
5754 2004-07-25  Martin Baulig  <martin@ximian.com>
5755
5756         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
5757
5758         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
5759         argument, we can just use the `Parent' field instead.
5760
5761         * class.cs
5762         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
5763         (MemberBase.DoDefine): Likewise.
5764
5765 2004-07-24  Martin Baulig  <martin@ximian.com>
5766
5767         * decl.cs (MemberCore.Parent): New public field.
5768         (DeclSpace.Parent): Moved to MemberCore.
5769
5770         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
5771         (MemberBase.ctor): Added TypeContainer argument, pass it to our
5772         parent's .ctor.
5773         (FieldBase, Field, Operator): Likewise.
5774         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
5775         (EventField, Event): Likewise.
5776
5777 2004-07-23  Martin Baulig  <martin@ximian.com>
5778
5779         * class.cs (PartialContainer): New public class.
5780         (ClassPart): New public class.
5781         (TypeContainer): Added support for partial classes.
5782         (TypeContainer.GetClassBases): Splitted some of the functionality
5783         out into GetNormalBases() and GetPartialBases().
5784
5785         * cs-tokenizer.cs (Token.PARTIAL): New token.
5786         (Tokenizer.consume_identifier): Added some hacks to recognize
5787         `partial', but only if it's immediately followed by `class',
5788         `struct' or `interface'.
5789
5790         * cs-parser.jay: Added support for partial clases.
5791
5792 2004-07-23  Martin Baulig  <martin@ximian.com>
5793
5794         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
5795         a `DeclSpace' and also made it readonly.
5796         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
5797         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
5798         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
5799
5800         * cs-parser.jay: Pass the `current_class', not the
5801         `current_container' (at the moment, this is still the same thing)
5802         to a new Method, Property, Event, Indexer or Constructor.
5803
5804 2004-07-23  Martin Baulig  <martin@ximian.com>
5805
5806         * cs-parser.jay (CSharpParser): Added a new `current_class' field
5807         and removed the `current_interface' one.
5808         (struct_declaration, class_declaration, interface_declaration):
5809         Set `current_class' to the newly created class/struct/interface;
5810         set their `Bases' and call Register() before parsing their body.
5811
5812 2004-07-23  Martin Baulig  <martin@ximian.com>
5813
5814         * class.cs (Kind): New public enum.
5815         (TypeContainer): Made this class abstract.
5816         (TypeContainer.Kind): New public readonly field.
5817         (TypeContainer.CheckDef): New public method; moved here from
5818         cs-parser.jay.
5819         (TypeContainer.Register): New public abstract method.
5820         (TypeContainer.GetPendingImplementations): New public abstract
5821         method.
5822         (TypeContainer.GetClassBases): Removed the `is_class' and
5823         `is_iface' parameters.
5824         (TypeContainer.DefineNestedTypes): Formerly known as
5825         DoDefineType().
5826         (ClassOrStruct): Made this class abstract.
5827
5828         * tree.cs (RootTypes): New public type. 
5829
5830 2004-07-20  Martin Baulig  <martin@ximian.com>
5831
5832         * tree.cs (Tree.RecordNamespace): Removed.
5833         (Tree.Namespaces): Removed.
5834
5835         * rootcontext.cs (RootContext.IsNamespace): Removed.
5836
5837         * cs-parser.jay (namespace_declaration): Just create a new
5838         NamespaceEntry here.
5839
5840 2004-07-21  Lluis Sanchez Gual  <lluis@novell.com>
5841
5842         * Makefile: Install gmcs.exe.config file together with gmcs.exe.
5843         * gmcs.exe.config: Renamed from mcs.exe.config. Added supportedRuntime
5844         entry to make sure it runs in the correct runtime version.
5845         
5846 2004-07-18  Martin Baulig  <martin@ximian.com>
5847
5848         * generic.cs (ConstructedType.CheckConstraints): Improved
5849         constraints checking.
5850
5851 2004-07-18  Martin Baulig  <martin@ximian.com>
5852
5853         * expression.cs (Invocation.BetterMethod): Call
5854         TypeManager.TypeToCoreType() on all types and removed my previous
5855         hack; we're already doig the right thing here.
5856
5857 2004-07-17  Martin Baulig  <martin@ximian.com>
5858
5859         * decl.cs (MemberName.MakeName): Create the "class`1" names here.
5860
5861 2004-07-16  Martin Baulig  <martin@ximian.com>
5862
5863         * iterators.cs: Added generics support.
5864
5865 2004-07-16  Martin Baulig  <martin@ximian.com>
5866
5867         * iterators.cs: Rewrote this.  We're now using one single Proxy
5868         class for both the IEnumerable and the IEnumerator interface and
5869         `Iterator' derives from Class so we can use the high-level API.
5870
5871         * class.cs (TypeContainer.AddIterator): New method.
5872         (TypeContainer.DoDefineType): New protected virtual method, which
5873         is called from DefineType().
5874         (TypeContainer.DoDefineMembers): Call DefineType() and
5875         DefineMembers() on all our iterators.
5876         (TypeContainer.Emit): Call Emit() on all our iterators.
5877         (TypeContainer.CloseType): Call CloseType() on all our iterators.
5878
5879         * codegen.cs (EmitContext.CurrentIterator): New public field.
5880
5881 2004-07-15  Martin Baulig  <martin@ximian.com>
5882
5883         * typemanager.cs
5884         (TypeManager.not_supported_exception_type): New type.   
5885
5886 2004-07-14  Martin Baulig  <martin@ximian.com>
5887
5888         * typemanager.cs
5889         (TypeManager.generic_ienumerable_type): New type.
5890         (TypeManager.generic_ienumerator_type): New type.
5891
5892         * rootcontext.cs
5893         (RootContext.interfaces_first_stage): Added
5894         "System.Collections.Generic.IEnumerator`1" and
5895         "System.Collections.Generic.IEnumerable`1".     
5896
5897 2004-07-14  Martin Baulig  <martin@ximian.com>
5898
5899         * iterators.cs: Use real error numbers.
5900
5901 2004-07-14  Martin Baulig  <martin@ximian.com>
5902
5903         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
5904         requires this to be a System.Collection.IEnumerable and not a
5905         class implementing that interface.
5906         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
5907
5908 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
5909
5910         * class.cs: Fixed previous fix, it broke some error tests.
5911
5912 2004-07-12  Martin Baulig  <martin@ximian.com>
5913
5914         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
5915         Fixes #61293.
5916
5917 2004-07-14  Martin Baulig  <martin@ximian.com>
5918
5919         * decl.cs, expression.cs, generic.cs: Use a backqoute (`) and not
5920         an exclamation mark (!) for the generic arity to reflect the
5921         latest spec changes; ie. use "System.Collections.Generic.IList`1".
5922
5923 2004-07-13  Martin Baulig  <martin@ximian.com>
5924
5925         * cs-tokenizer.cs (Tokenizer.parse_less_than): Allow array rank
5926         specifiers being part of a type argument.
5927
5928 2004-07-13  Martin Baulig  <martin@ximian.com>
5929
5930         * expression.cs (MemberAccess.ResolveAsTypeStep): Use the full `!'
5931         name for generic types.
5932
5933 2004-07-13  Martin Baulig  <martin@ximian.com>
5934
5935         * assign.cs (Assign.DoResolve): Moved the CS0131 check up a little
5936         bit to fix #60119.
5937
5938 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
5939
5940         * assign.cs (LocalTemporary): Add new argument: is_address,If
5941         `is_address' is true, then the value that we store is the address
5942         to the real value, and not the value itself.
5943         
5944         * ecore.cs (PropertyExpr): use the new local temporary
5945         stuff to allow us to handle X.Y += z (where X is a struct)
5946
5947 2004-07-08  Martin Baulig  <martin@ximian.com>
5948
5949         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
5950         not always return, just like we're doing in Using.Resolve().
5951
5952 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
5953
5954         * cs-parser.jay (fixed_statement): flag this as Pinned.
5955
5956 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
5957
5958         * typemanager.cs (TypeManager): Removed MakePinned method, this
5959         mechanism is replaced with the .NET 2.x compatible mechanism of
5960         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
5961
5962         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
5963         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
5964         `IsFixed' property which has a different meaning.
5965
5966 2004-07-02  Raja R Harinath  <rharinath@novell.com>
5967
5968         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
5969         visible from inside a nested class, not just the names of the
5970         immediately enclosing class.
5971         Fix for bug #60730.
5972
5973 2004-06-24  Raja R Harinath  <rharinath@novell.com>
5974
5975         * expression.cs (BetterConversion): Remove buggy special-case
5976         handling of "implicit constant expression conversions".  At this
5977         point, we already know that the conversion is possible -- we're
5978         only checking to see which is better.
5979
5980 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
5981
5982         * cs-parser.jay: Added error CS0210 test.
5983
5984 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
5985
5986         * cs-parser.jay: Added error CS0134 test.
5987
5988 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
5989
5990         Fix bug #52507
5991         * cs-parser.jay: Added error CS0145 test.
5992
5993 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
5994
5995         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
5996
5997 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
5998         
5999         * expression.cs (StackAlloc.Resolve): The argument may not
6000         be a constant; deal with this case.
6001         
6002 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
6003
6004         * attribute.cs (IndexerName_GetIndexerName): Renamed to
6005         GetIndexerAttributeValue.
6006         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
6007
6008         * class.cs (Indexer.Define): Added error tests for CS0415,
6009         CS0609.
6010
6011 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
6012
6013         * attribute.cs (Attribute.Resolve): Keep field code in sync with
6014         property code.
6015
6016 2004-06-23  Martin Baulig  <martin@ximian.com>
6017
6018         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
6019         neither return nor throw, reset the barrier as well.  Fixes #60457.
6020
6021 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
6022
6023         * class.cs : EventAttributes is now set to None by default.
6024           This fixes bug #60459.
6025
6026 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
6027
6028         Fix bug #60219
6029         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
6030         Don't throw exception but return null (it's sufficient now).
6031
6032 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
6033
6034         * typemanager.cs (GetArgumentTypes): Faster implementation.
6035
6036 2004-06-18  Martin Baulig  <martin@ximian.com>
6037
6038         * attribute.cs (Attribute.Resolve): Check whether we're an
6039         EmptyCast which a Constant child.  Fixes #60333.
6040
6041 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
6042
6043         * statement.cs (EmitCollectionForeach): Account for the fact that
6044         not all valuetypes are in areas which we can take the address of.
6045         For these variables, we store to a temporary variable. Also, make
6046         sure that we dont emit a `callvirt' on a valuetype method.
6047
6048 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
6049
6050         * expression.cs (StackAlloc.DoReSolve): Added test for
6051         negative parameter (CS0247).
6052
6053 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
6054
6055         Fix bug #59792
6056         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
6057
6058 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
6059
6060         Fix bug #59781
6061         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
6062         ulong.
6063
6064 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
6065
6066         Fix bug #58254 & cs1555.cs, cs1556.cs
6067         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
6068
6069 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
6070
6071         * cs-parser.jay: Added error CS1669 test for indexers.
6072
6073 2004-06-18  Martin Baulig  <martin@ximian.com>
6074
6075         * generics.cs (GenericMethod.ctor): Don't take an Attributes
6076         argument.  Fixes #60441.
6077
6078 2004-06-16  Ben Maurer  <bmaurer@ximian.com>
6079         * ecore.cs (MethodGroupExpr.Name): Revert Martin's patch.
6080         The name needs to have the actual name of the method in order
6081         for other tests (such as the one in OverloadResolve for Invoke
6082         on a delegate) to work. As well, it does not really help
6083         error reporting because the method group had multiple methods.
6084         * Makefile: Remove MCS_DEBUG, you can enable with the DEBUG_FLAGS.
6085         Make profiling work.
6086         
6087 2004-06-13  Martin Baulig  <martin@ximian.com>
6088
6089         * cs-parser.jay: Don't allow generic attributes.
6090
6091 2004-06-13  Martin Baulig  <martin@ximian.com>
6092
6093         * class.cs (MemberBase.DoDefineBase): New protected method.
6094         (MemberBase.DoDefine): Compute the `flags' in the new
6095         DoDefineBase() which must be called first.
6096         (Method.Define): Call DoDefineBase() first so we have the flags
6097         when defining the generic method.
6098
6099         * cs-parser.jay (interface_method_declaration): Support generic methods.
6100
6101 2004-06-13  Martin Baulig  <martin@ximian.com>
6102
6103         * decl.cs (TypeName): Removed.
6104         (MemberName): Removed TypeName and MemberNow; now we just have
6105         MemberName.
6106
6107         * cs-parser.jay: Don't distinguish between type arguments and type
6108         parameters in the grammar and simplified the rules a bit.  The
6109         reduce/reduce conflicts are now gone (except the one we inherited
6110         from mcs).
6111
6112 2004-06-11  Martin Baulig  <martin@ximian.com>
6113
6114         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
6115         call this twice: for params and varargs methods.
6116
6117 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
6118
6119         * class.cs:
6120         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
6121
6122 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
6123
6124         * attribute.cs (Attribute.GetValidTargets): Made public.
6125
6126         * class.cs: 
6127         (AbstractPropertyEventMethod): New class for better code sharing.
6128         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
6129         CS1667 report.
6130         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
6131
6132 2004-06-09  Martin Baulig  <martin@ximian.com>
6133
6134         * cs-parser.jay: Removed a reduce/reduce conflict.
6135
6136 2004-06-03  Martin Baulig  <martin@ximian.com>
6137
6138         * generic.cs (ConstructedType.GetMemberAccess): Renamed to
6139         GetSimpleName() and return a SimpleName.
6140
6141         * ecore.cs (SimpleName.Arguments): New public field.
6142         (SimpleName): Added overloaded ctor which takes an additional
6143         TypeArguments argument.
6144         (SimpleName.SimpleNameResolve): Added support for generic methods.
6145         (MethodGroupExpr.ResolveGeneric): New public method.  The code was
6146         formerly in MemberAccess.DoResolve(), but we also need it in
6147         SimpleNameResolve().
6148
6149         * expression.cs (MemberAccess.DoResolve): Use the new
6150         MethodGroupExpr.ResolveGeneric().       
6151
6152 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
6153
6154         * decl.cs: If possible, use lookuptypedirect here. We can only do
6155         this if there is no `.' after the namespace. Avoids using
6156         LookupType, which does lots of slow processing.
6157         (FindNestedType) New method, does what it says :-).
6158         * namespace.cs: use LookupTypeDirect.
6159         * rootcontext.cs: use membercache, if possible.
6160         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
6161
6162 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
6163
6164         * expression.cs:
6165         According to the spec, 
6166
6167         In a member access of the form E.I, if E is a single identifier,
6168         and if the meaning of E as a simple-name (§7.5.2) is a constant,
6169         field, property, localvariable, or parameter with the same type as
6170         the meaning of E as a type-name (§3.8), then both possible
6171         meanings of E are permitted.
6172
6173         We did not check that E as a simple-name had the same type as E as
6174         a type name.
6175
6176         This trivial check gives us 5-7% on bootstrap time.
6177
6178 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
6179
6180         * expression.cs (Invocation.OverloadResolve): Avoid the
6181         use of hashtables and boxing here by allocating on demand.
6182
6183 2004-05-30  Martin Baulig  <martin@ximian.com>
6184
6185         * rootcontext.cs (RootContext.LookupType): Don't cache things if
6186         we're doing a silent lookup.  Don't try to lookup nested types in
6187         TypeManager.object_type (thanks to Ben Maurer).
6188
6189 2004-05-30  Martin Baulig  <martin@ximian.com>
6190
6191         Committing a patch from Ben Maurer.
6192
6193         * rootcontext.cs (RootContext.LookupType): Cache negative results.
6194
6195 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
6196
6197         * convert.cs: add a trivial cache for overload operator resolution.
6198
6199 2004-05-31  Marek Safar  <marek.safar@seznam.cz>
6200
6201         * attribute.cs
6202         (AttributeTester.GetObsoleteAttribute): Returns instance of
6203         ObsoleteAttribute when type is obsolete.
6204
6205         * class.cs
6206         (TypeContainer.VerifyObsoleteAttribute): Override.
6207         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
6208         (MethodCode.VerifyObsoleteAttribute): Override.
6209         (MemberBase.VerifyObsoleteAttribute): Override.
6210
6211         * decl.cs
6212         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
6213         and report proper error.
6214
6215         *delegate.cs
6216         (Delegate.VerifyObsoleteAttribute): Override.
6217
6218         * ecore.cs
6219         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
6220         and report proper error.
6221         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
6222
6223         * enum.cs
6224         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
6225         and enum member.
6226
6227         * expression.cs
6228         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
6229         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
6230         Added test for ObsoleteAttribute.
6231
6232         * statement.cs
6233         (Catch): Derived from Statement.
6234
6235 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
6236
6237         * decl.cs: If possible, use lookuptypedirect here. We can only do
6238         this if there is no `.' after the namespace. Avoids using
6239         LookupType, which does lots of slow processing.
6240         (FindNestedType) New method, does what it says :-).
6241         * namespace.cs: use LookupTypeDirect.
6242         * rootcontext.cs: use membercache, if possible.
6243         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
6244
6245 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
6246
6247         * expression.cs:
6248         According to the spec, 
6249
6250         In a member access of the form E.I, if E is a single identifier,
6251         and if the meaning of E as a simple-name (§7.5.2) is a constant,
6252         field, property, localvariable, or parameter with the same type as
6253         the meaning of E as a type-name (§3.8), then both possible
6254         meanings of E are permitted.
6255
6256         We did not check that E as a simple-name had the same type as E as
6257         a type name.
6258
6259         This trivial check gives us 5-7% on bootstrap time.
6260
6261 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
6262
6263         Fixed bug #59071 & cs0160.cs
6264         * statement.cs (Try.Resolve): Check here whether order of catch
6265         clauses matches their dependencies.
6266
6267 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
6268
6269         Fixed bug #58624
6270         * ecore.cs (SimpleName.SimpleNameResolve): Added test for
6271         unsafe type.
6272
6273 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
6274
6275         * expression.cs (Invocation.OverloadResolve): Avoid the
6276         use of hashtables and boxing here by allocating on demand.
6277
6278 2004-05-30  Martin Baulig  <martin@ximian.com>
6279
6280         * rootcontext.cs (RootContext.LookupType): Don't cache things if
6281         we're doing a silent lookup.  Don't try to lookup nested types in
6282         TypeManager.object_type (thanks to Ben Maurer).
6283
6284 2004-05-30  Martin Baulig  <martin@ximian.com>
6285
6286         Committing a patch from Ben Maurer.
6287
6288         * rootcontext.cs (RootContext.LookupType): Cache negative results.      
6289
6290 2004-05-29  Martin Baulig  <martin@ximian.com>
6291
6292         * class.cs (IMethodData.ShouldIgnore): New method.
6293
6294         * typemanager.cs (TypeManager.MethodFlags): Don't take a
6295         `Location' argument, we don't need it anywhere.  Use
6296         `IMethodData.ShouldIgnore ()' instead of
6297         `MethodData.GetMethodFlags ()'.
6298         (TypeManager.AddMethod): Removed.
6299         (TypeManager.AddMethod2): Renamed to AddMethod.
6300
6301 2004-05-29  Martin Baulig  <martin@ximian.com>
6302
6303         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
6304
6305         * convert.cs (Convert.ImplicitReferenceConversion): If we're
6306         converting from a class type S to an interface type and we already
6307         have an object on the stack, don't box it again.  Fixes #52578.
6308
6309 2004-05-29  Martin Baulig  <martin@ximian.com>
6310
6311         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
6312         Added support for `params' parameters.  Fixes #59267.
6313
6314 2004-05-29  Martin Baulig  <martin@ximian.com>
6315
6316         * literal.cs (NullPointer): Provide a private .ctor which sets
6317         `type' to TypeManager.object_type.  Fixes #59048.
6318
6319 2004-05-29  Martin Baulig  <martin@ximian.com>
6320
6321         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
6322         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
6323
6324         * ecore.cs (EventExpr.instance_expr): Make the field private.
6325
6326 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
6327
6328         Fixed bug #50080 & cs0214-2.cs
6329         * expression.cs (Cast.DoResolve): Check unsafe context here.
6330         
6331         * statement.cs (Resolve.DoResolve): Likewise.
6332
6333 2004-05-26  Martin Baulig  <martin@ximian.com>
6334
6335         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
6336
6337         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
6338         (RootContext.LookupType): Pass down the `silent' flag.
6339
6340 2004-05-25  Martin Baulig  <martin@ximian.com>
6341
6342         * expression.cs
6343         (MethodGroupExpr.IdenticalTypeName): New public property.
6344         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
6345         expression actually refers to a type.
6346
6347 2004-05-25  Martin Baulig  <martin@ximian.com>
6348
6349         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
6350         for #56176 and made it actually work.
6351
6352 2004-05-25  Martin Baulig  <martin@ximian.com>
6353
6354         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
6355         (FieldExpr, PropertyExpr): Override and implement
6356         CacheTemporaries.  Fixes #52279.
6357
6358 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
6359
6360         * location.cs: In the new compiler listing a file twice is a
6361         warning, not an error.
6362
6363 2004-05-24  Martin Baulig  <martin@ximian.com>
6364
6365         * enum.cs (Enum.DefineType): For the `BaseType' to be a
6366         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
6367
6368 2004-05-24  Martin Baulig  <martin@ximian.com>
6369
6370         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
6371         walking the `using' list.  Fixes #53921.
6372
6373 2004-05-24  Martin Baulig  <martin@ximian.com>
6374
6375         * const.cs (Const.LookupConstantValue): Added support for
6376         EmptyCast's; fixes #55251.
6377
6378 2004-05-24  Martin Baulig  <martin@ximian.com>
6379
6380         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
6381         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
6382         which does the CS0135 check.  The reason is that we first need to
6383         check whether the variable actually exists.
6384
6385 2004-05-24  Martin Baulig  <martin@ximian.com>
6386
6387         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
6388         than RootContext.LookupType() to find the explicit interface
6389         type.  Fixes #58584.
6390
6391 2004-05-24  Raja R Harinath  <rharinath@novell.com>
6392
6393         * Makefile: Simplify.  Use executable.make.
6394         * mcs.exe.sources: New file.  List of sources of mcs.exe.
6395
6396 2004-05-24  Anders Carlsson  <andersca@gnome.org>
6397
6398         * decl.cs:
6399         * enum.cs:
6400         Use the invariant culture when doing String.Compare for CLS case
6401         sensitivity.
6402         
6403 2004-05-23  Martin Baulig  <martin@ximian.com>
6404
6405         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
6406         don't have any dots.  Fixes #52622, added cs0246-8.cs.
6407
6408         * namespace.cs (NamespaceEntry.Lookup): Likewise.
6409
6410 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
6411
6412         * class.cs (MemberBase.Define): Reuse MemberType member for 
6413         resolved type. Other methods can use it too.
6414
6415 2004-05-23  Martin Baulig  <martin@ximian.com>
6416
6417         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
6418         the variable also exists in the current block (otherwise, we need
6419         to report a CS0103).  Fixes #58670.
6420
6421 2004-05-23  Martin Baulig  <martin@ximian.com>
6422
6423         * flowanalysis.cs (Reachability.Reachable): Compute this
6424         on-the-fly rather than storing it as a field.
6425
6426 2004-05-23  Martin Baulig  <martin@ximian.com>
6427
6428         * flowanalysis.cs (Reachability.And): Manually compute the
6429         resulting `barrier' from the reachability.      
6430        
6431 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
6432
6433         Fix bug #57835
6434         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
6435         instance of ObsoleteAttribute when symbol is obsolete.
6436
6437         * class.cs
6438         (IMethodData): Extended interface for ObsoleteAttribute support.
6439
6440 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
6441
6442         * attribute.cs: Fix bug #55970
6443
6444 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
6445
6446         Fix bug #52705
6447         * attribute.cs
6448         (GetObsoleteAttribute): New method. Creates the instance of
6449         ObsoleteAttribute.
6450         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
6451         ObsoleteAttribute when member is obsolete.
6452         (AttributeTester.Report_ObsoleteMessage): Common method for
6453         Obsolete error/warning reporting.
6454
6455         * class.cs
6456         (TypeContainer.base_classs_type): New member for storing parent type.
6457
6458         * decl.cs
6459         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
6460         for this MemberCore.
6461
6462 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
6463
6464         * attribute.cs, const.cs: Fix bug #58590
6465
6466 2004-05-21  Martin Baulig  <martin@ximian.com>
6467
6468         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
6469         out parameters if the end of the method is unreachable.  Fixes
6470         #58098. 
6471
6472 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
6473
6474         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
6475         Hari was right, why extra method.
6476
6477 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
6478
6479         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
6480
6481 2004-05-20  Martin Baulig  <martin@ximian.com>
6482
6483         * delegate.cs: Convert this file to Unix mode - like the original
6484         version in mcs is.
6485
6486 2004-05-20  Martin Baulig  <martin@ximian.com>
6487
6488         * attribute.cs: Convert this file to Unix mode - like the original
6489         version in mcs is.
6490
6491 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
6492
6493        Fix bug #58688 (MCS does not report error when the same attribute
6494        is assigned twice)
6495
6496        * attribute.cs (Attribute.Emit): Distinction between null and default.
6497
6498 2004-05-19  Raja R Harinath  <rharinath@novell.com>
6499
6500        * cs-parser.jay (attribute): Create a GlobalAttribute for the case
6501        of a top-level attribute without an attribute target.
6502        * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
6503        Make non-static.
6504        (Attribute.Conditional_GetConditionName), 
6505        (Attribute.Obsolete_GetObsoleteMessage): Update.
6506        (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
6507        part of ScanForIndexerName.
6508        (Attribute.CanIgnoreInvalidAttribute): New function.
6509        (Attribute.ScanForIndexerName): Move to ...
6510        (Attributes.ScanForIndexerName): ... here.
6511        (Attributes.Attrs): Rename from now-misnamed AttributeSections.
6512        (Attributes.Search): New internal variant that can choose not to
6513        complain if types aren't resolved.  The original signature now
6514        complains.
6515        (Attributes.GetClsCompliantAttribute): Use internal variant, with
6516        complaints suppressed.
6517        (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
6518        only if it not useful.
6519        (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
6520        top-level for attributes that are shared between the assembly
6521        and a top-level class.
6522        * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
6523        * class.cs: Update to reflect changes.
6524        (DefineIndexers): Fuse loops.
6525        * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
6526        a couple more variants of attribute names.
6527
6528 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
6529
6530         Fix bug #52585 (Implemented explicit attribute declaration)
6531
6532         * attribute.cs:
6533         (Attributable.ValidAttributeTargets): New abstract method. It gets
6534         list of valid attribute targets for explicit target declaration.
6535         (Attribute.Target): It holds target itself.
6536         (AttributeSection): Removed.
6537         (Attribute.CheckTargets): New method. It checks whether attribute
6538         target is valid for the current element.
6539
6540         * class.cs:
6541         (EventProperty): New class. For events that are declared like
6542         property (with add and remove accessors).
6543         (EventField): New class. For events that are declared like field.
6544         class.cs
6545
6546         * cs-parser.jay: Implemented explicit attribute target declaration.
6547
6548         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
6549         Override ValidAttributeTargets.
6550
6551         * parameter.cs:
6552         (ReturnParameter): Class for applying custom attributes on 
6553         the return type.
6554         (ParameterAtribute): New class. Class for applying custom
6555         attributes on the parameter type.
6556
6557 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
6558
6559         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
6560         definitions. 
6561
6562         (Method): Allow UNSAFE here.
6563
6564         * modifiers.cs: Support unsafe reporting.
6565
6566 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
6567
6568         * decl.cs: Fix bug #58478.
6569
6570 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
6571
6572         * statement.cs: When checking for unreachable code on an EmptyStatement,
6573         set the location. Fixes bug #58488.
6574
6575 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
6576
6577         * driver.cs: Add -pkg handling.
6578
6579         From Gonzalo: UseShelLExecute=false
6580
6581 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
6582
6583         * attribute.cs:
6584         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
6585         for attribute.
6586         (Attribute.IsClsCompliaceRequired): Moved to base for better
6587         accesibility.
6588         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
6589         when attribute is AttributeUsageAttribute.
6590         (Attribute.GetValidTargets): Simplified.
6591         (Attribute.GetAttributeUsage): New method returns AttributeUsage
6592         attribute for this type.
6593         (Attribute.ApplyAttributes): Method renamed to Emit and make
6594         non-static.
6595         (GlobalAttributeSection): New class for special handling of global
6596         attributes (assembly, module).
6597         (AttributeSection.Emit): New method.
6598
6599         * class.cs: Implemented Attributable abstract methods.
6600         (MethodCore.LabelParameters): Moved to Parameter class.
6601         (Accessor): Is back simple class.
6602         (PropertyMethod): Implemented Attributable abstract class.
6603         (DelegateMethod): Implemented Attributable abstract class.
6604         (Event): New constructor for disctintion between normal Event
6605         and Event with accessors.
6606
6607         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
6608
6609         * codegen.cs, const.cs, decl.cs, delegate.cs:
6610         (CommonAssemblyModulClass): Implemented Attributable abstract class
6611         and simplified.
6612
6613         * enum.cs: Implement IAttributeSupport interface.
6614         (EnumMember): New class for emum members. Implemented Attributable
6615         abstract class
6616
6617         * parameter.cs:
6618         (ParameterBase): Is abstract.
6619         (ReturnParameter): New class for easier [return:] attribute handling.
6620
6621         * typemanager.cs: Removed builder_to_attr.
6622
6623 2004-05-11  Raja R Harinath  <rharinath@novell.com>
6624
6625         Fix bug #57151.
6626         * attribute.cs (Attribute.GetPositionalValue): New function.
6627         * class.cs (TypeContainer.VerifyMembers): New function.
6628         (TypeContainer.Emit): Use it.
6629         (ClassOrStruct): New base class for Class and Struct.
6630         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
6631         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
6632         class.
6633         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
6634         then each non-static field should have a FieldOffset attribute.
6635         Otherwise, none of the fields should have a FieldOffset attribute.
6636         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
6637         and FieldOffset attributes.
6638         * typemanager.cs (TypeManager.struct_layout_attribute_type)
6639         (TypeManager.field_offset_attribute_type): New core types.
6640         (TypeManager.InitCoreTypes): Initialize them.
6641
6642 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
6643
6644         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
6645         Return correct type.
6646         From bug #58270.
6647
6648 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
6649
6650         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
6651         be implicitly converted to ulong.
6652         
6653         * expression.cs: The logic for allowing operator &, | and ^ worked
6654         was wrong, it worked before because we did not report an error in
6655         an else branch.  Fixes 57895.
6656
6657         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
6658         allow volatile fields to be reference types.
6659
6660 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
6661
6662         * driver.cs: Add support for /debug-
6663
6664 2004-05-07  Raja R Harinath  <rharinath@novell.com>
6665
6666         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
6667         Add a 'complain' parameter to silence errors.
6668         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
6669         silently overlooked type-resolutions.
6670         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
6671         to reflect changes.
6672         (Attributes.Search): New function.
6673         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
6674         (Attributes.GetAttributeFullName): Remove hack.
6675         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
6676         Update to reflect changes.
6677         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
6678         Use Attributes.Search instead of nested loops.
6679
6680 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
6681
6682         * decl.cs:
6683         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
6684         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
6685         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
6686
6687         * report.cs: (Report.Warning): Renamed to Warning_T because of
6688         parameter collision.
6689
6690 2004-05-05  Raja R Harinath  <rharinath@novell.com>
6691
6692         * expression.cs (MemberAccess.ResolveMemberAccess):
6693         Exit with non-zero status after Report.Error.
6694         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
6695         Likewise.
6696         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
6697
6698 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
6699
6700         * support.cs: Don't hang when the file is empty.
6701
6702 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
6703
6704         * support.cs: In SeekableStreamReader, compute the preamble size of the
6705           underlying stream. Position changes should take into account that initial
6706           count of bytes.
6707
6708 2004-05-03  Todd Berman  <tberman@sevenl.net>
6709
6710         * driver.cs: remove unused GetSysVersion function.
6711
6712 2004-05-03  Todd Berman  <tberman@sevenl.net>
6713
6714         * driver.cs: Remove the hack from saturday, as well as the hack
6715         from jackson (LoadAssemblyFromGac), also adds the CWD to the
6716         link_paths to get that bit proper.
6717
6718 2004-05-01  Todd Berman  <tberman@sevenl.net>
6719
6720         * driver.cs: Try a LoadFrom before a Load, this checks the current
6721         path. This is currently a bug in mono that is be fixed, however, this
6722         provides a workaround for now. This will be removed when the bug
6723         is fixed.
6724
6725 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
6726
6727         * CryptoConvert.cs: Updated to latest version. Fix issue with 
6728         incomplete key pairs (#57941).
6729
6730 2004-05-01  Todd Berman  <tberman@sevenl.net>
6731
6732         * driver.cs: Remove '.' from path_chars, now System.* loads properly
6733         from the GAC
6734
6735 2004-04-30  Jackson Harper  <jackson@ximian.com>
6736
6737         * codegen.cs: Open keys readonly.
6738         
6739 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
6740
6741         * typemanager.cs: don't report cyclic struct layout when a struct
6742         contains 2 or more fields of the same type. Failed for Pango.AttrShape
6743         which has 2 Pango.Rectangle fields.
6744
6745 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
6746
6747         * expression.cs: Handle IntPtr comparisons with IL code
6748         rather than a method call.
6749
6750 2004-04-29  Martin Baulig  <martin@ximian.com>
6751
6752         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
6753         the list of PropertyInfo's in class hierarchy and find the
6754         accessor.  Fixes #56013.
6755
6756 2004-04-29  Martin Baulig  <martin@ximian.com>
6757
6758         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
6759
6760 2004-04-29  Martin Baulig  <martin@ximian.com>
6761
6762         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
6763
6764         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
6765
6766 2004-04-29  Martin Baulig  <martin@ximian.com>
6767
6768         * class.cs (ConstructorInitializer.Resolve): Check whether the
6769         parent .ctor is accessible.  Fixes #52146.
6770
6771 2004-04-29  Martin Baulig  <martin@ximian.com>
6772
6773         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
6774
6775         * statement.cs (Using.EmitLocalVariableDecls): Use
6776         TypeManager.idisposable_type, not typeof (IDisposable).
6777         (Foreach.EmitCollectionForeach): Added support for valuetypes.
6778
6779 2004-04-29  Martin Baulig  <martin@ximian.com>
6780
6781         * class.cs (Event.Define): Don't emit the field and don't set
6782         RTSpecialName and SpecialName for events on interfaces.  Fixes
6783         #57703. 
6784
6785 2004-04-29  Raja R Harinath  <rharinath@novell.com>
6786
6787         Refactor Attribute.ApplyAttributes.
6788         * attribute.cs (Attributable): New base class for objects that can
6789         have Attributes applied on them.
6790         (Attribute): Make AttributeUsage fields public.
6791         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
6792         (Attribute.IsInternalCall): New property.
6793         (Attribute.UsageAttr): Convert to a public read-only property.
6794         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
6795         (Attribute.ResolveType, Attribute.Resolve)
6796         (Attribute.ScanForIndexerName): Update to reflect changes.
6797         (Attribute.CheckAttributeTarget): Re-format.
6798         (Attribute.ApplyAttributes): Refactor, to various
6799         Attributable.ApplyAttributeBuilder methods.
6800         * decl.cs (MemberCore): Make Attributable.
6801         * class.cs (Accessor): Make Attributable.
6802         (MethodData.ApplyAttributes): Use proper attribute types, not
6803         attribute names.
6804         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
6805         (TypeContainer.ApplyAttributeBuilder)
6806         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
6807         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
6808         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
6809         (Operator.ApplyAttributeBuilder): New factored-out methods.
6810         * const.cs (Const.ApplyAttributeBuilder): Likewise.
6811         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
6812         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
6813         * parameter.cs (ParameterBase): New Attributable base class
6814         that can also represent Return types.
6815         (Parameter): Update to the changes.
6816
6817 2004-04-29  Jackson Harper  <jackson@ximian.com>
6818
6819         * driver.cs: Prefer the corlib system version when looking for
6820         assemblies in the GAC. This is still a hack, but its a better hack
6821         now.
6822         
6823 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
6824
6825         * decl.cs, enum.cs: Improved error 3005 reporting.
6826   
6827         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
6828         (related_symbols): New private member for list of symbols
6829         related to reported error/warning.
6830         
6831         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
6832
6833 2004-04-29  Martin Baulig  <martin@ximian.com>
6834
6835         * ecore.cs (Expression.Constantify): If we're an enum and
6836         TypeManager.TypeToCoreType() doesn't give us another type, use
6837         t.UnderlyingSystemType.  Fixes #56178.  
6838
6839 2004-04-29  Martin Baulig  <martin@ximian.com>
6840
6841         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
6842         interfaces and for each interface, only add members directly
6843         declared in that interface.  Fixes #53255.
6844
6845 2004-04-28  Martin Baulig  <martin@ximian.com>
6846
6847         * expression.cs (ConditionalLogicalOperator): Use a temporary
6848         variable for `left' to avoid that we evaluate it more than once;
6849         bug #52588.
6850
6851 2004-04-28  Martin Baulig  <martin@ximian.com>
6852
6853         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
6854         `void[]' (CS1547).
6855
6856 2004-04-28  Martin Baulig  <martin@ximian.com>
6857
6858         * statement.cs (LocalInfo.Resolve): Check whether the type is not
6859         void (CS1547).
6860
6861         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
6862         whether the type is not void (CS1547).
6863
6864 2004-04-28  Martin Baulig  <martin@ximian.com>
6865
6866         * expression.cs (Unary.DoResolveLValue): Override this and report
6867         CS0131 for anything but Operator.Indirection.
6868
6869 2004-04-28  Martin Baulig  <martin@ximian.com>
6870
6871         Committing a patch from Ben Maurer; see bug #50820.
6872
6873         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
6874         check for classes.
6875
6876         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
6877         classes.        
6878
6879 2004-04-28  Martin Baulig  <martin@ximian.com>
6880
6881         Committing a patch from Ben Maurer; see bug #50820.
6882
6883         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
6884         check for classes.
6885
6886         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
6887         classes.        
6888
6889 2004-04-28  Martin Baulig  <martin@ximian.com>
6890
6891         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
6892         (Block.AddLabel): Call DoLookupLabel() to only search in the
6893         current block.
6894
6895 2004-04-28  Martin Baulig  <martin@ximian.com>
6896
6897         * cfold.cs (ConstantFold.BinaryFold): Added special support for
6898         comparing StringConstants and NullLiterals in Equality and Inequality.
6899
6900 2004-04-28  Jackson Harper  <jackson@ximian.com>
6901
6902         * driver.cs: Attempt to load referenced assemblies from the
6903         GAC. This is the quick and dirty version of this method that
6904         doesnt take into account versions and just takes the first
6905         canidate found. Will be good enough for now as we will not have more
6906         then one version installed into the GAC until I update this method.
6907
6908 2004-04-28  Martin Baulig  <martin@ximian.com>
6909
6910         * typemanager.cs (TypeManager.CheckStructCycles): New public
6911         static method to check for cycles in the struct layout.
6912
6913         * rootcontext.cs (RootContext.PopulateTypes): Call
6914         TypeManager.CheckStructCycles() for each TypeContainer.
6915         [Note: We only need to visit each type once.]
6916
6917 2004-04-28  Martin Baulig  <martin@ximian.com>
6918
6919         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
6920
6921         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
6922         success and added `out object value'.  Use a `bool resolved' field
6923         to check whether we've already been called rather than
6924         `ConstantValue != null' since this breaks for NullLiterals.
6925
6926 2004-04-28  Raja R Harinath  <rharinath@novell.com>
6927
6928         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
6929         setting of this flag, since the 'set' method may be non-public.
6930
6931 2004-04-28  Raja R Harinath  <rharinath@novell.com>
6932
6933         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
6934         check on current_vector.Block.
6935
6936 2004-04-27  Martin Baulig  <martin@ximian.com>
6937
6938         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
6939         a field initializer.  Fixes #56459.
6940
6941 2004-04-27  Martin Baulig  <martin@ximian.com>
6942
6943         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
6944         we're not attempting to use an indexer.  Fixes #52154.
6945
6946 2004-04-27  Martin Baulig  <martin@ximian.com>
6947
6948         * statement.cs (Return): Don't create a return label if we don't
6949         need it; reverts my change from January 20th.  Thanks to Ben
6950         Maurer for this.
6951
6952 2004-04-27  Martin Baulig  <martin@ximian.com>
6953
6954         According to the spec, `goto' can only leave a nested scope, but
6955         never enter it.
6956
6957         * statement.cs (Block.LookupLabel): Only lookup in the current
6958         block, don't recurse into parent or child blocks.
6959         (Block.AddLabel): Check in parent and child blocks, report
6960         CS0140/CS0158 if we find a duplicate.
6961         (Block): Removed this indexer for label lookups.
6962         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
6963         this already does the error reporting for us.
6964
6965         * flowanalysis.cs
6966         (FlowBranching.UsageVector.Block): New public variable; may be null.
6967         (FlowBranching.CreateSibling): Added `Block' argument.
6968         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
6969         label for the target of a `goto' and check whether we're not
6970         leaving a `finally'.
6971
6972 2004-04-27  Martin Baulig  <martin@ximian.com>
6973
6974         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
6975         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
6976         just for returns).
6977
6978 2004-04-27  Martin Baulig  <martin@ximian.com>
6979
6980         * statement.cs (Block.AddLabel): Also check for implicit blocks
6981         and added a CS0158 check.
6982
6983 2004-04-27  Martin Baulig  <martin@ximian.com>
6984
6985         * flowanalysis.cs (FlowBranchingLoop): New class.
6986         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
6987         UsageVector's instead of an ArrayList.
6988         (FlowBranching.Label): Likewise.
6989         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
6990         (FlowBranching.AddBreakVector): New method.
6991
6992 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
6993
6994         * attribute.cs: Small regression fix: only convert the type if we
6995         the type is different, fixes System.Drawing build.
6996
6997 2004-04-27  Martin Baulig  <martin@ximian.com>
6998
6999         * attribute.cs (Attribute.Resolve): If we have a constant value
7000         for a named field or property, implicity convert it to the correct
7001         type.
7002
7003 2004-04-27  Raja R Harinath  <rharinath@novell.com>
7004
7005         * statement.cs (Block.Block): Implicit blocks share
7006         'child_variable_names' fields with parent blocks.
7007         (Block.AddChildVariableNames): Remove.
7008         (Block.AddVariable): Mark variable as "used by a child block" in
7009         every surrounding block.
7010         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
7011         been used in a child block, complain about violation of "Invariant
7012         meaning in blocks" rule.
7013         * cs-parser.jay (declare_local_variables): Don't use
7014         AddChildVariableNames.
7015         (foreach_statement): Don't create an implicit block: 'foreach'
7016         introduces a scope.
7017
7018 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
7019
7020         * convert.cs (ImplicitNumericConversion): 0 is also positive when
7021         converting from 0L to ulong.  Fixes 57522.
7022
7023 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
7024
7025         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
7026         derived class hides via 'new' keyword field from base class (test-242.cs).
7027         TODO: Handle this in the more general way.
7028         
7029         * class.cs (CheckBase): Ditto.
7030
7031 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
7032
7033         * decl.cs (caching_flags): New member for storing cached values
7034         as bit flags.
7035         (MemberCore.Flags): New enum where bit flags for caching_flags
7036         are defined.
7037         (MemberCore.cls_compliance): Moved to caching_flags.
7038         (DeclSpace.Created): Moved to caching_flags.
7039
7040         * class.cs: Use caching_flags instead of DeclSpace.Created
7041         
7042 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
7043
7044         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
7045         if we are only a derived class, not a nested class.
7046
7047         * typemanager.cs: Same as above, but do this at the MemberLookup
7048         level (used by field and methods, properties are handled in
7049         PropertyExpr).   Allow for the qualified access if we are a nested
7050         method. 
7051
7052 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
7053
7054         * class.cs: Refactoring.
7055         (IMethodData): New inteface; Holds links to parent members
7056         to avoid member duplication (reduced memory allocation).
7057         (Method): Implemented IMethodData interface.
7058         (PropertyBase): New inner classes for get/set methods.
7059         (PropertyBase.PropertyMethod): Implemented IMethodData interface
7060         (Event): New inner classes for add/remove methods.
7061         (Event.DelegateMethod): Implemented IMethodData interface.
7062
7063         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
7064         EmitContext (related to class.cs refactoring).
7065
7066 2004-04-21  Raja R Harinath  <rharinath@novell.com>
7067
7068         * delegate.cs (Delegate.VerifyApplicability): If the number of
7069         arguments are the same as the number of parameters, first try to
7070         verify applicability ignoring  any 'params' modifier on the last
7071         parameter.
7072         Fixes #56442.
7073
7074 2004-04-08  Martin Baulig  <martin@ximian.com>
7075
7076         Merged latest changes into gmcs.  Please keep this comment in
7077         here, it makes it easier for me to see what changed in MCS since
7078         the last time I merged.
7079
7080 2004-04-16  Raja R Harinath  <rharinath@novell.com>
7081
7082         * class.cs (TypeContainer.AddIndexer): Use
7083         'ExplicitInterfaceName' to determine if interface name was
7084         explicitly specified.  'InterfaceType' is not initialized at this time.
7085         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
7086         Indexers array is already in the required order.  Initialize
7087         'IndexerName' only if there are normal indexers.
7088         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
7089         (TypeContainer.Emit): Emit DefaultMember attribute only if
7090         IndexerName is initialized.
7091         Fixes #56300.
7092
7093 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
7094
7095         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
7096         Fixes #57007
7097
7098 2004-04-15  Raja R Harinath  <rharinath@novell.com>
7099
7100         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
7101         attributes.
7102         Fix for #56456.
7103
7104         * attribute.cs (Attribute.Resolve): Check for duplicate named
7105         attributes.
7106         Fix for #56463.
7107
7108 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
7109
7110         * iterators.cs (MarkYield): track whether we are in an exception,
7111         and generate code accordingly.  Use a temporary value to store the
7112         result for our state.
7113
7114         I had ignored a bit the interaction of try/catch with iterators
7115         since their behavior was not entirely obvious, but now it is
7116         possible to verify that our behavior is the same as MS .NET 2.0
7117
7118         Fixes 54814
7119
7120 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
7121
7122         * iterators.cs: Avoid creating temporaries if there is no work to
7123         do. 
7124
7125         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
7126         Enumerations, use TypeManager.EnumToUnderlying and call
7127         recursively. 
7128
7129         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
7130         bug #57013
7131
7132         (This.Emit): Use EmitContext.EmitThis to emit our
7133         instance variable.
7134
7135         (This.EmitAssign): Ditto.
7136
7137         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
7138         codepaths, we will move all the functionality into
7139         Mono.CSharp.This 
7140
7141         (FieldExpr.EmitAssign): Ditto.
7142
7143         This fixes several hidden bugs that I uncovered while doing a code
7144         review of this today.
7145
7146         * codegen.cs (EmitThis): reworked so the semantics are more clear
7147         and also support value types "this" instances.
7148
7149         * iterators.cs: Changed so that for iterators in value types, we
7150         do not pass the value type as a parameter.  
7151
7152         Initialization of the enumerator helpers is now done in the caller
7153         instead of passing the parameters to the constructors and having
7154         the constructor set the fields.
7155
7156         The fields have now `assembly' visibility instead of private.
7157
7158 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
7159
7160         * expression.cs (Argument.Resolve): Check if fields passed as ref
7161         or out are contained in a MarshalByRefObject.
7162
7163         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
7164         another compiler type.
7165
7166 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
7167
7168         * class.cs (Indexer.Define): use the new name checking method.
7169         Also, return false on an error.
7170         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
7171         (is_identifier_[start/part]_character): make static.
7172
7173 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
7174
7175         * expression.cs (Binary.ResolveOperator): Do no append strings
7176         twice: since we can be invoked more than once (array evaluation)
7177         on the same concatenation, take care of this here.  Based on a fix
7178         from Ben (bug #56454)
7179
7180 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
7181
7182         * codegen.cs: Fix another case where CS1548 must be reported (when 
7183         delay-sign isn't specified and no private is available #56564). Fix
7184         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
7185         error when MCS is used on the MS runtime and we need to delay-sign 
7186         (which seems unsupported by AssemblyBuilder - see #56621).
7187
7188 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
7189
7190         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
7191         (TypeManager.ComputeNamespaces): Faster implementation for
7192         Microsoft runtime.
7193
7194         * compiler.csproj: Updated AssemblyName to mcs.
7195
7196 2004-05-11  Jackson Harper  <jackson@ximian.com>
7197
7198         * Makefile: Preserve MONO_PATH
7199         
7200 2004-05-11  Jackson Harper  <jackson@ximian.com>
7201
7202         * Makefile: Use mono and mcs to build gmcs
7203         
7204 2004-05-03  Miguel de Icaza  <miguel@ximian.com>
7205
7206         * codegen.cs: Add patch from Robert Shade
7207         <rshade@dvsconsulting.com>, use FileAccess.Read on the keyfile, to
7208         sync with mcs.
7209
7210 2004-05-02  Sebastien Pouliot  <sebastien@ximian.com>
7211
7212         * CryptoConvert.cs: Updated to latest version. Fix issue with 
7213         incomplete key pairs (#57941).
7214
7215 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
7216
7217         * codegen.cs: Fix another case where CS1548 must be reported (when 
7218         delay-sign isn't specified and no private is available #56564). Fix
7219         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
7220         error when MCS is used on the MS runtime and we need to delay-sign 
7221         (which seems unsupported by AssemblyBuilder - see #56621).
7222
7223 2004-04-29  Jackson Harper  <jackson@ximian.com>
7224
7225         * Makefile: Set MONO_PATH to use the bootstrap corlib
7226         * driver.cs: Check the GAC for referenced assemblies.
7227                 
7228 2004-04-29  Martin Baulig  <martin@ximian.com>
7229
7230         * Makefile (gmcs.exe): Set MONO_PATH to use `../class/lib/net_2_0'.
7231
7232 2004-04-07  Martin Baulig  <martin@ximian.com>
7233
7234         * expression.cs (Binary.ResolveOperator): Added special case for
7235         Equality/Inequality between a type parameter and a null literal.
7236
7237 2004-04-07  Martin Baulig  <martin@ximian.com>
7238
7239         * convert.cs: Check null literal -> type parameter conversions.
7240
7241 2004-04-07  Martin Baulig  <martin@ximian.com>
7242
7243         * generic.cs (ConstructedType.CheckConstraints): Enforce the
7244         `class' and `struct' constraints.
7245
7246 2004-04-07  Martin Baulig  <martin@ximian.com>
7247
7248         * generic.cs (SpecialConstraint): New public enum.
7249         (Constraints.Resolve): Added support for the `class' and `struct'
7250         constraints.
7251
7252         * cs-parser.jay (type_parameter_constraint): Added support for the
7253         `class' and `struct' constraints.
7254
7255 2004-04-07  Martin Baulig  <martin@ximian.com>
7256
7257         * support.cs (GenericConstraints): Replaced `Types' by
7258         `ClassConstraint' and `InterfaceConstraints'; added
7259         `HasClassConstraint'.   
7260
7261 2004-04-07  Martin Baulig  <martin@ximian.com>
7262
7263         * generic.cs
7264         (Constraints.InterfaceConstraints): New public property.
7265         (Constraints.Types): Make this property public
7266         (TypeParameter): Implement IMemberContainer.
7267         (TypeParameter.Define): Take a `GenericTypeParameterBuilder'
7268         instead of a TypeBuilder/MethodBuilder; pass the interface
7269         constraints to TypeManager.AddTypeParameter().
7270         (TypeParameter.DefineType): Just take an EmitContext and no
7271         TypeBuilder/MethodBuilder.  Use the new public API.
7272
7273         * typemanager.cs (TypeManager.AddTypeParameter): Added
7274         `TypeExpr[]' argument; add the interfaces to the
7275         `builder_to_ifaces' hash.
7276         (TypeManager.LookupMemberContainer): For
7277         GenericTypeParameterBuilders, get the TypeParameter from the
7278         `builder_to_type_param'.
7279         (TypeManager.FindMembers): For GenericTypeParameterBuilders, get
7280         the TypeParameter and call FindMembers on it.
7281
7282 2004-04-07  Martin Baulig  <martin@ximian.com>
7283
7284         * class.cs
7285         (MethodCore.GenericMethod): Moved this field here from Method.
7286         (MethodCore.IsDuplicateImplementation): Take the number of type
7287         parameters into account if we're a generic method.
7288
7289         * expression.cs (Invocation.InferTypeArguments): Don't return true
7290         if `arguments' is null; we still need to check whether we actually
7291         don't need to infer anything in this case.
7292         (MemberAccess): Merged the functionality from GenericMemberAccess
7293         into this class.
7294
7295         * generic.cs (GenericMemberAccess): Removed.
7296
7297 2004-04-05  Martin Baulig  <martin@ximian.com>
7298
7299         * decl.cs (MemberCore): For generic classes, interfaces and
7300         structs, `Name' now includes the number of type parameters
7301         ("Stack!1.Node!1").
7302         (DeclSpace.FindType): Removed the `num_type_args' argument; we now
7303         encode the number of type arguments in the type name.
7304
7305         * expression.cs (Expression.MemberLookup): Removed the
7306         `num_type_args' argument; we now encode the number of type
7307         arguments in the type name.
7308
7309         * ecore.cs (SimpleName): Encode the number of type arguments in
7310         the type name itself.
7311
7312         * generic.cs (ConstructedType): Likewise.
7313
7314         * tree.cs (Tree.RecordDecl): Take a `string' instead of a
7315         `MemberName'; we now include the number of type parameters in the
7316         type name.
7317
7318         * typemanager.cs (TypeManager.CheckGeneric): Removed.
7319         (TypeManager.MemberLookup): Removed the
7320         `num_type_args' argument; we now encode the number of type
7321         arguments in the type name.     
7322
7323 2004-04-03  Martin Baulig  <martin@ximian.com>
7324
7325         * decl.cs (MemberCore.ctor): Take a MemberName instead of a sting.
7326         (MemberCore.MemberName): Moved here from MemberBase.
7327         (DeclSpace.SetParameterInfo): Just take the constraints as an
7328         ArrayList; we already have the type parameters in our
7329         `MemberName'; also do the CS0080 reporting here.
7330
7331         * cs-parser.jay (struct_declaration): Use `member_name' instead of
7332         `IDENTIFIER opt_type_parameter_list'; when constructing our
7333         `MemberName', it'll already include our type parameters.
7334         (class_declaration, interface_declaration): Likewise.
7335         (delegate_declaration): Likewise.
7336         (MakeName): Take a MemberName and return a MemberName.
7337         The following two changes are required to avoid shift/reduce conflicts:
7338         (member_name): Don't include a TypeName anymore; ie. this is now
7339         just 'IDENTIFIER opt_type_parameter_list'.
7340         (property_declaration, event_declaration): Use a
7341         `namespace_or_type_name' instead of a `member_name'.            
7342
7343 2004-04-03  Martin Baulig  <martin@ximian.com>
7344
7345         * decl.cs (MemberName): Renamed to `TypeName' and created a new
7346         `MemberName' class.
7347         (TypeName): Formerly known as MemberName.
7348
7349         * namespace.cs (NamespaceEntry.UsingAlias): Take a `TypeName'
7350         instead of a `MemberName'.
7351
7352         * cs-parser.jay (namespace_or_type_name): Create a TypeName.
7353         (member_name): New rule; create a MemberName.
7354
7355 2004-04-02  Martin Baulig  <martin@ximian.com>
7356
7357         * namespace.cs (NamespaceEntry.VerifyUsing): Added error checking
7358         (CS0305 and CS0308).
7359
7360 2004-04-02  Martin Baulig  <martin@ximian.com>
7361
7362         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Added
7363         support for nested types.
7364
7365 2004-04-02  Martin Baulig  <martin@ximian.com>
7366
7367         * ecore.cs (IAlias): New public interface.
7368         (TypeExpr, TypeExpression): Implement IAlias.
7369         (TypeAliasExpression): New public class.
7370
7371         * namespace.cs (Namespace): Implement IAlias.
7372         (Namespace.Lookup): Return an IAlias instead on an object.
7373         (Namespace.DefineName): Take an IAlias instead of an object.
7374         (NamespaceEntry.AliasEntry.Resolve): Return an IAlias instead of
7375         an object.
7376         (NamespaceEntry.UsingAlias): Take a Membername instead of an
7377         Expression.
7378         (NamespaceEntry.LookupAlias): Return an IAlias instead on an
7379         object.
7380         (NamespaceEntry.Lookup): Likewise.
7381
7382         * rootcontext.cs (RootContext.LookupType): Return a TypeExpr
7383         instead of a Type.      
7384
7385         * decl.cs (DeclSpace): Implement IAlias.
7386         (DeclSpace.LookupAlias): Return an IAlias instead of a string.
7387
7388         * generic.cs (ConstructedType): Improved error checking.
7389
7390 2004-04-02  Martin Baulig  <martin@ximian.com>
7391
7392         * convert.cs: Added type parameter conversions.
7393
7394         * ecore.cs
7395         (UnboxCast.Emit): Emit an `unbox.any' for type params.
7396         (ClassCast.Emit): If the source type is a type parameter, box it.
7397         If the target type is a type parameter, emit an `unbox.any'
7398         instead of a `classcast'.1      
7399
7400 2004-04-01  Martin Baulig  <martin@ximian.com>
7401
7402         * cs-tokenizer.cs (parse_less_than): Allow Token.DOT.
7403
7404 2004-04-01  Martin Baulig  <martin@ximian.com>
7405
7406         * generic.cs (ConstructedType.CheckConstraints): Use
7407         Convert.ImplicitStandardConversionExists(); user-defined implicit
7408         conversions are not allowed according to the spec.
7409
7410 2004-03-30  Martin Baulig  <martin@ximian.com>
7411
7412         * expression.cs (New): Added support for type parameters.
7413
7414         * typemanager.cs
7415         (TypeManager.activator_type): New public static field.
7416         (TypeManager.activator_create_instance): Likewise.
7417
7418 2004-03-30  Martin Baulig  <martin@ximian.com>
7419
7420         * typemanager.cs (TypeManager.HasConstructorConstraint): New
7421         public method.
7422
7423 2004-03-30  Martin Baulig  <martin@ximian.com>
7424
7425         * generic.cs (ConstructedType.CheckConstraints): Actually follow
7426         the spec here: the argument type must be convertible to the
7427         constraints.
7428
7429 2004-03-30  Martin Baulig  <martin@ximian.com>
7430
7431         * generic.cs
7432         (TypeParameter.Define, TypeParameter.DefineMethod): Call
7433         TypeManager.AddTypeParameter().
7434         (ConstructedType.CheckConstraints): Re-enable this and actually
7435         check whether we have a constructor constraint.
7436
7437         * typemanager.cs
7438         (TypeManager.builder_to_type_param): New static field.
7439         (TypeManager.AddTypeParameter): New static method.
7440         (TypeManager.LookupTypeParameter): New public method.
7441
7442 2004-03-30  Martin Baulig  <martin@ximian.com>
7443
7444         * generic.cs (TypeParameter.DefineType): Return a boolean and use
7445         the new API to actually define the constructor constraint.
7446
7447         * typemanager.cs
7448         (TypeManager.new_constraint_attr_type): New static field.
7449         (TypeManager.InitCoreTypes): Initialize it.
7450
7451 2004-03-30  Martin Baulig  <martin@ximian.com>
7452
7453         * generic.cs (Constraints): Completed error checking, use correct
7454         error numbers.
7455
7456 2004-03-29  Martin Baulig  <martin@ximian.com>
7457
7458         * delegate.cs (Delegate.VerifyMethod): Infer type arguments.
7459
7460         * expression.cs (Invocation.InferTypeArguments): Added overloaded
7461         public version which takes a `ParameterData pd' instead of an
7462         `ArrayList args'.
7463
7464 2004-03-29  Martin Baulig  <martin@ximian.com>
7465
7466         * typemanager.cs (TypeManager.IsGenericMethod): Take a MethodBase,
7467         not a MethodInfo.       
7468
7469 2004-03-29  Martin Baulig  <martin@ximian.com>
7470
7471         * expression.cs (Argument.ResolveMethodGroup): If we're a
7472         ConstructedType, call GetMemberAccess() on it.  
7473
7474 2004-03-29  Martin Baulig  <martin@ximian.com>
7475
7476         * class.cs (MethodBase.CheckGenericOverride): New abstract method.
7477         (MethodCore.CheckGenericOverride): When overriding a generic
7478         method, check whether the constraints match.
7479
7480         * support.cs (GenericConstraints): New public interface.
7481         (ParameterData.GenericConstraints): New public method.
7482
7483         * parameter.cs (Parameter.Resolve): Check whether we're a generic
7484         method parameter and compute our constraints if appropriate.
7485         (Parameter.GenericConstraints): New public property.
7486
7487         * generic.cs (Constraints): Implement GenericConstraints.
7488
7489 2004-03-29  Martin Baulig  <martin@ximian.com>
7490
7491         * decl.cs (MemberCache.FindMemberToOverride): Use
7492         `paramTypes [j].Equals (cmpAttrs [j])' instead of `=='.
7493
7494 2004-03-29  Martin Baulig  <martin@ximian.com>
7495
7496         * generic.cs (GenericMethod.Define): Resolve our type parameters.
7497
7498 2004-03-29  Martin Baulig  <martin@ximian.com>
7499
7500         * cs-parser.jay: Report CS0080 instead of -200 ("Constraints are
7501         not allowed on non-generic declarations").
7502
7503 2004-03-29  Martin Baulig  <martin@ximian.com>
7504
7505         * expression.cs (Invocation.InferTypeArguments): Added overloaded
7506         public version of this method.
7507
7508         * class.cs (MethodCore.IsDuplicateImplementation): Use
7509         Invocation.InferTypeArguments() to check this.
7510
7511 2004-03-29  Martin Baulig  <martin@ximian.com>
7512
7513         * convert.cs: Use TypeManager.IsDelegateType() instead of
7514         comparing types correctly.
7515
7516 2004-03-29  Martin Baulig  <martin@ximian.com>
7517
7518         * convert.cs: Use TypeManager.IsSubclassOf() instead of comparing
7519         types directly to make it work for generic instances.
7520
7521         * typemanager.cs (TypeManager.IsSubclassOf): New static method.
7522
7523 2004-03-29  Martin Baulig  <martin@ximian.com>
7524
7525         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Added
7526         support for arrays.     
7527
7528 2004-03-24  Martin Baulig  <martin@ximian.com>
7529
7530         * decl.cs (DeclSpace.FindType): Also use
7531         TypeManager.CheckGeneric() for types from the using clauses.
7532
7533 2004-03-23  Martin Baulig  <martin@ximian.com>
7534
7535         * expression.cs (Invocation.OverloadResolve): Added `bool
7536         may_fail' argument and use it instead of the Location.IsNull() hack.
7537
7538 2004-03-23  Martin Baulig  <martin@ximian.com>
7539
7540         * expression.cs (Invocation.InferType): Use correct type inference
7541         rules here.     
7542
7543 2004-03-23  Martin Baulig  <martin@ximian.com>
7544
7545         * ecore.cs (MethodGroupExpr.Name): Use
7546         TypeManager.CSharpSignature() instead of just the name.
7547
7548         * expression.cs (Invocation.OverloadResolve): Provide better error
7549         reporting.
7550         (Invocation.DoResolve): OverloadResolve() never returns null
7551         without reporting an error, so removed the error -6 reporting here.
7552
7553 2004-03-23  Martin Baulig  <martin@ximian.com>
7554
7555         * typemanager.cs (TypeManager.GetMethodFlags): Fixed the FIXME for
7556         generic methods.
7557
7558         * cs-parser.jay (delegate_declaration): Support generic delegates.
7559
7560         * delegate.cs: Support generic delegates.
7561
7562 2004-03-22  Martin Baulig  <martin@ximian.com>
7563
7564         * expression.cs (Invocation.InferParamsTypeArguments): New static
7565         method; does type inference for params arguments.
7566
7567 2004-03-21  Martin Baulig  <martin@ximian.com>
7568
7569         * typemanager.cs (TypeManager.IsGenericMethod): New public static
7570         method; checks whether a method is a generic method.    
7571
7572         * expression.cs (Invocation.InferTypeArguments): New static method;
7573         infer type arguments for generic method invocation.
7574
7575         * ecore.cs (MethodGroupExpr.HasTypeArguments): New public
7576         property; we set this to true if we're resolving a generic method
7577         invocation and the user specified type arguments, ie. we're not
7578         doing type inference.
7579
7580 2004-03-20  Martin Baulig  <martin@ximian.com>
7581
7582         * class.cs (MethodData.DeclaringType): New public property.
7583         (MethodData.Define): Set DeclaringType here.
7584         (Operator.Define): Use OperatorMethod.MethodData.DeclaringType
7585         instead of OperatorMethodBuilder.DeclaringType.
7586
7587 2004-03-20  Martin Baulig  <martin@ximian.com>
7588
7589         * cs-tokenizer.cs (xtoken): Return a special
7590         Token.DEFAULT_OPEN_PARENS for "`default' followed by open parens".
7591
7592         * cs-parser.jay (default_value_expression): Switch to the new
7593         syntax (14.5.13).
7594
7595 2004-03-19  Martin Baulig  <martin@ximian.com>
7596
7597         * decl.cs (MemberName): New class.  We use this to "construct"
7598         namespace_or_type_name's.
7599
7600         * generics.cs (TypeArguments.GetDeclarations): New public method;
7601         returns the type arguments as a string[] and reports a CS0081 if
7602         one of them is not an identifier.
7603
7604         * class.cs (MemberBase): The .ctor now takes the name as a
7605         MemberName instead of a string.
7606         (MemberBase.ExplicitInterfaceName): Changed type from string to
7607         Expression.
7608         (MemberBase.DoDefine): If we're an explicit implementation, the
7609         InterfaceType may be a generic instance.
7610
7611         * cs-parser.jay (namespace_or_type_name): Return a MemberName.
7612         (namespace_name): Call MemberName.GetName () to transform the
7613         MemberName into a string and ensure we don't have any type
7614         arguments.
7615         (type_name): Call MemberName.GetTypeExpression() to transfrom the
7616         MemberName into an expression.
7617         (method_header): Use namespace_or_type_name instead of member_name.     
7618
7619 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
7620
7621         * rootcontext.cs: Add new types to the boot resolution.
7622
7623         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
7624         MulticastDelegate is not allowed.
7625
7626         * typemanager.cs: Add new types to lookup: System.TypedReference
7627         and ArgIterator.
7628
7629         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
7630         check for TypedReference or ArgIterator, they are not allowed. 
7631
7632         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
7633         makes us properly catch 1510 in some conditions (see bug 56016 for
7634         details). 
7635
7636 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
7637
7638         * CryptoConvert.cs: update from corlib version
7639         with endian fixes.
7640
7641 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
7642
7643         * class.cs (Indexer.Define): Check indexername declaration
7644
7645 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
7646
7647         * attribute.cs (IsClsCompliant): Fixed problem with handling
7648         all three states (compliant, not-compliant, undetected).
7649
7650 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
7651
7652         * attribute.cs (Attribute): Location is now public.
7653         (Resolve): Store resolved arguments (pos_values) in attribute class.
7654         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
7655         (GetClsCompliantAttributeValue): New method that gets
7656         CLSCompliantAttribute value.
7657         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
7658         if exists else null.
7659         (AttributeTester): New class for CLS-Compliant verification routines.
7660
7661         * class.cs (Emit): Add CLS-Compliant verification.
7662         (Method.GetSignatureForError): Implemented.
7663         (Constructor.GetSignatureForError): Implemented
7664         (Constructor.HasCompliantArgs): Returns if constructor has
7665         CLS-Compliant arguments.
7666         (Constructor.Emit): Override.
7667         (Construcor.IsIdentifierClsCompliant): New method; For constructors
7668         is needed to test only parameters.
7669         (FieldBase.GetSignatureForError): Implemented.
7670         (TypeContainer): New member for storing base interfaces.
7671         (TypeContainer.FindMembers): Search in base interfaces too.
7672
7673         * codegen.cs (GetClsComplianceAttribute): New method that gets
7674         assembly or module CLSCompliantAttribute value.
7675         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
7676         for assembly.
7677         (ModuleClass.Emit): Add error 3012 test.
7678
7679         * const.cs (Emit): Override and call base for CLS-Compliant tests.
7680
7681         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
7682         state for all decl types.
7683         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
7684         if CLS-Compliant tests are required.
7685         (IsClsCompliaceRequired): New method. Analyze whether code
7686         must be CLS-Compliant.
7687         (IsExposedFromAssembly): New method. Returns true when MemberCore
7688         is exposed from assembly.
7689         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
7690         value or gets cached value.
7691         (HasClsCompliantAttribute): New method. Returns true if MemberCore
7692         is explicitly marked with CLSCompliantAttribute.
7693         (IsIdentifierClsCompliant): New abstract method. This method is
7694         used to testing error 3005.
7695         (IsIdentifierAndParamClsCompliant): New method. Common helper method
7696         for identifier and parameters CLS-Compliant testing.
7697         (VerifyClsCompliance): New method. The main virtual method for
7698         CLS-Compliant verifications.
7699         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
7700         null. I don't know why is null (too many public members !).
7701         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
7702         and get value of first CLSCompliantAttribute that found.
7703
7704         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
7705         (VerifyClsCompliance): Override and add extra tests.
7706
7707         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
7708         clscheck- disable CLS-Compliant verification event if assembly is has
7709         CLSCompliantAttribute(true).
7710
7711         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
7712         ApllyAttribute is now called in emit section as in the other cases.
7713         Possible future Emit integration.
7714         (IsIdentifierClsCompliant): New override.
7715         (VerifyClsCompliance): New override.
7716         (GetEnumeratorName): Returns full enum name.
7717
7718         * parameter.cs (GetSignatureForError): Implemented.
7719
7720         * report.cs (WarningData): New struct for Warning message information.
7721         (LocationOfPreviousError): New method.
7722         (Warning): New method. Reports warning based on the warning table.
7723         (Error_T): New method. Reports error based on the error table.
7724
7725         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
7726         verifications are done here.
7727
7728         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
7729
7730         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
7731         CLSCompliantAttribute.
7732         (all_imported_types): New member holds all imported types from other
7733         assemblies.
7734         (LoadAllImportedTypes): New method fills static table with exported types
7735         from all referenced assemblies.
7736         (Modules): New property returns all assembly modules.
7737
7738 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
7739
7740         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
7741         throwing a parser error.
7742
7743         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
7744         which removes the hardcoded get_/set_ prefixes for properties, as
7745         IL allows for the properties to be named something else.  
7746
7747         Bug #56013
7748
7749         * expression.cs: Do not override operand before we know if it is
7750         non-null.  Fix 56207
7751
7752 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
7753
7754         * typemanager.cs: support for pinned variables.
7755
7756 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
7757
7758         * decl.cs, typemanager.cs: Avoid using an arraylist
7759         as a buffer if there is only one result set.
7760
7761 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
7762
7763         * expression.cs: Make sure you cant call a static method
7764         with an instance expression, bug #56174.
7765
7766 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
7767
7768         * class.cs (IsDuplicateImplementation): Improve error reporting to
7769         flag 663 (method only differs in parameter modifier).
7770
7771         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
7772         in preprocessor directives.
7773
7774         * location.cs (LookupFile): Allow for the empty path.
7775
7776         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
7777         better approach for some of that patch, but its failing with the
7778         CharSet enumeration.  For now try/catch will do.
7779
7780         * typemanager.cs: Do not crash if a struct does not have fields.
7781         Fixes 56150.
7782
7783 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
7784
7785         * expression.cs: cs0213, cant fix a fixed expression.
7786         fixes 50231.
7787
7788 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
7789
7790         * cs-parser.jay: detect invalid embeded statements gracefully.
7791         bug #51113.
7792
7793 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
7794
7795         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
7796         As a regex:
7797         s/
7798         the invocation type may not be a subclass of the tye of the item/
7799         The type of the item must be a subclass of the invocation item.
7800         /g
7801
7802         Fixes bug #50820.
7803
7804 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
7805
7806         * attribute.cs: Added methods to get a string and a bool from an
7807         attribute. Required to information from AssemblyKeyFileAttribute,
7808         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
7809         * codegen.cs: Modified AssemblyName creation to include support for
7810         strongnames. Catch additional exceptions to report them as CS1548.
7811         * compiler.csproj: Updated include CryptoConvert.cs.
7812         * compiler.csproj.user: Removed file - user specific configuration.
7813         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
7814         Mono.Security assembly. The original class is maintained and tested in
7815         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
7816         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
7817         like CSC 8.0 (C# v2) supports.
7818         * Makefile: Added CryptoConvert.cs to mcs sources.
7819         * rootcontext.cs: Added new options for strongnames.
7820
7821 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
7822
7823         * driver.cs: For --expect-error, report error code `2'
7824         if the program compiled with no errors, error code `1' if
7825         it compiled with an error other than the one expected.
7826
7827 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
7828
7829         * compiler.csproj: Updated for Visual Studio .NET 2003.
7830         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
7831         * compiler.sln: Updated for Visual Studio .NET 2003.
7832
7833 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
7834
7835         * expression.cs: Fix bug #47234. We basically need to apply the
7836         rule that we prefer the conversion of null to a reference type
7837         when faced with a conversion to 'object' (csc behaviour).
7838
7839 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
7840
7841         * statement.cs: Shorter form for foreach, eliminates
7842         a local variable. r=Martin.
7843
7844 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
7845
7846         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
7847         checks if we can use brtrue/brfalse to test for 0.
7848         * expression.cs: use the above in the test for using brtrue/brfalse.
7849         cleanup code a bit.
7850
7851 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
7852
7853         * expression.cs: Rewrite string concat stuff. Benefits:
7854
7855         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
7856         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
7857         rather than a concat chain.
7858
7859         * typemanager.cs: Add lookups for more concat overloads.
7860
7861 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
7862
7863         * expression.cs: Emit shorter il code for array init.
7864
7865         newarr
7866         dup
7867         // set 1
7868
7869         // set 2
7870
7871         newarr
7872         stloc.x
7873
7874         ldloc.x
7875         // set 1
7876
7877         ldloc.x
7878         // set 2
7879
7880 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
7881
7882         * statement.cs: Before, two switch blocks would be merged if the
7883         total size of the blocks (end_item - begin_item + 1) was less than
7884         two times the combined sizes of the blocks.
7885
7886         Now, it will only merge if after the merge at least half of the
7887         slots are filled.
7888
7889         fixes 55885.
7890
7891 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
7892
7893         * class.cs : csc build fix for GetMethods(). See bug #52503.
7894
7895 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
7896
7897         * expression.cs: Make sure fp comparisons work with NaN.
7898         This fixes bug #54303. Mig approved this patch a long
7899         time ago, but we were not able to test b/c the runtime
7900         had a related bug.
7901
7902 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
7903
7904         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
7905
7906 2004-03-19  Martin Baulig  <martin@ximian.com>
7907
7908         * class.cs (MemberCore.IsDuplicateImplementation): Check whether
7909         two overloads may unify for some type parameter substitutions and
7910         report a CS0408 if appropriate.
7911
7912 2004-03-19  Martin Baulig  <martin@ximian.com>
7913
7914         * class.cs (MemberCore.IsDuplicateImplementation): Report the
7915         error here and not in our caller.
7916
7917 2004-03-19  Martin Baulig  <martin@ximian.com>
7918
7919         * interface.cs: Completely killed this file.
7920         (Interface): We're now a TypeContainer and live in class.cs.
7921
7922         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
7923         argument; we're now also called for interfaces.
7924         (TypeContainer.DefineMembers): Allow this method being called
7925         multiple times.
7926         (TypeContainer.GetMethods): New public method; formerly known as
7927         Interface.GetMethod().  This is used by PendingImplementation.
7928         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
7929         it's now private and non-static.
7930         (Interface): Moved this here; it's now implemented similar to
7931         Class and Struct.
7932         (Method, Property, Event, Indexer): Added `bool is_interface'
7933         argument to their .ctor's.
7934         (MemberBase.IsInterface): New public field.
7935
7936         * cs-parser.jay: Create normal Method, Property, Event, Indexer
7937         instances instead of InterfaceMethod, InterfaceProperty, etc.
7938         (opt_interface_base): Removed; we now use `opt_class_base' instead.
7939         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
7940
7941 2004-03-19  Martin Baulig  <martin@ximian.com>
7942
7943         * class.cs (MethodCore.IsDuplicateImplementation): New private
7944         method which does the CS0111 checking.
7945         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
7946         Use IsDuplicateImplementation().
7947
7948 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
7949
7950         * decl.cs (FindMemberToOverride): New method to find the correct
7951         method or property to override in the base class.
7952         * class.cs
7953             - Make Method/Property use the above method to find the
7954               version in the base class.
7955             - Remove the InheritableMemberSignatureCompare as it is now
7956               dead code.
7957
7958         This patch makes large code bases much faster to compile, as it is
7959         O(n) rather than O(n^2) to do this validation.
7960
7961         Also, it fixes bug 52458 which is that nested classes are not
7962         taken into account when finding the base class member.
7963
7964         Reviewed/Approved by Martin.
7965
7966 2004-03-17  Martin Baulig  <martin@ximian.com>
7967
7968         * expression.cs (MemberAccess.DoResolve): Take the parent's number
7969         of type arguments into account; use the `real_num_type_args'
7970         approach like in DoResolveAsTypeStep().
7971
7972         * generic.cs (GenericMemberAccess.DoResolve): Make this work for
7973         nested types.
7974
7975 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
7976
7977         * interface.cs: In all interface classes removed redundant
7978         member initialization.
7979
7980 2004-03-16  Martin Baulig  <martin@ximian.com>
7981
7982         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
7983
7984 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
7985
7986         * decl.cs (DefineTypeAndParents): New helper method to define a
7987         type's containers before the type itself is defined;  This is a
7988         bug exposed by the recent changes to Windows.Forms when an
7989         implemented interface was defined inside a class that had not been
7990         built yet.   
7991
7992         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
7993
7994         (Check): Loop correctly to report errors modifiers
7995         (UNSAFE was not in the loop, since it was the same as TOP).
7996
7997         * interface.cs: Every interface member now takes a ModFlags,
7998         instead of a "is_new" bool, which we set on the base MemberCore. 
7999
8000         Every place where we called "UnsafeOk" in the interface, now we
8001         call the proper member (InterfaceMethod.UnsafeOK) instead to get
8002         the unsafe settings from the member declaration instead of the
8003         container interface. 
8004
8005         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
8006
8007         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
8008         `set_indexer_name' to the pending bits (one per type).
8009
8010         We fixed a bug today that was picking the wrong method to
8011         override, since for properties the existing InterfaceMethod code
8012         basically ignored the method name.  Now we make sure that the
8013         method name is one of the valid indexer names.
8014
8015 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
8016  
8017         * support.cs (SeekableStreamReader): Keep track of stream byte
8018         positions and don't mix them with character offsets to the buffer.
8019
8020         Patch from Gustavo Giráldez
8021
8022 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
8023
8024         * interface.cs (InterfaceSetGetBase): Removed double member
8025         initialization, base class does it as well.
8026
8027 2004-03-13  Martin Baulig  <martin@ximian.com>
8028
8029         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
8030         when compiling corlib.
8031
8032 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
8033
8034         * convert.cs (ExplicitConversion): We were reporting an error on
8035         certain conversions (object_type source to a value type, when the
8036         expression was `null') before we had a chance to pass it through
8037         the user defined conversions.
8038
8039         * driver.cs: Replace / and \ in resource specifications to dots.
8040         Fixes 50752
8041
8042         * class.cs: Add check for duplicate operators.  Fixes 52477
8043
8044 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
8045
8046         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
8047         that are in the middle of the statements, not only at the end.
8048         Fixes #54987
8049
8050         * class.cs (TypeContainer.AddField): No longer set the
8051         `HaveStaticConstructor' flag, now we call it
8052         `UserDefineStaticConstructor' to diferentiate the slightly
8053         semantic difference.
8054
8055         The situation is that we were not adding BeforeFieldInit (from
8056         Modifiers.TypeAttr) to classes that could have it.
8057         BeforeFieldInit should be set to classes that have no static
8058         constructor. 
8059
8060         See:
8061
8062         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
8063
8064         And most importantly Zoltan's comment:
8065
8066         http://bugzilla.ximian.com/show_bug.cgi?id=44229
8067
8068         "I think beforefieldinit means 'it's ok to initialize the type sometime 
8069          before its static fields are used', i.e. initialization does not need
8070          to be triggered by the first access to the type. Setting this flag
8071          helps the JIT to compile better code, since it can run the static
8072          constructor at JIT time, and does not need to generate code to call it
8073          (possibly lots of times) at runtime. Unfortunately, mcs does not set
8074          this flag for lots of classes like String. 
8075          
8076          csc sets this flag if the type does not have an explicit static 
8077          constructor. The reasoning seems to be that if there are only static
8078          initalizers for a type, and no static constructor, then the programmer
8079          does not care when this initialization happens, so beforefieldinit
8080          can be used.
8081          
8082          This bug prevents the AOT compiler from being usable, since it 
8083          generates so many calls to mono_runtime_class_init that the AOT code
8084          is much slower than the JITted code. The JITted code is faster, 
8085          because it does not generate these calls if the vtable is type is
8086          already initialized, which is true in the majority of cases. But the
8087          AOT compiler can't do this."
8088
8089 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
8090
8091         * class.cs (MethodData.Emit): Refactor the code so symbolic
8092         information is generated for destructors;  For some reasons we
8093         were taking a code path that did not generate symbolic information
8094         before. 
8095
8096 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
8097
8098         * class.cs: Create a Constructor.CheckBase method that
8099         takes care of all validation type code. The method
8100         contains some code that was moved from Define.
8101
8102         It also includes new code that checks for duplicate ctors.
8103         This fixes bug #55148.
8104
8105 2004-03-09  Joshua Tauberer <tauberer@for.net>
8106
8107         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
8108         a { ... }-style array creation invokes EmitStaticInitializers
8109         which is not good for reference-type arrays.  String, decimal
8110         and now null constants (NullCast) are not counted toward
8111         static initializers.
8112
8113 2004-03-05  Martin Baulig  <martin@ximian.com>
8114
8115         * location.cs (SourceFile.HasLineDirective): New public field;
8116         specifies whether the file contains or is referenced by a "#line"
8117         directive.
8118         (Location.DefineSymbolDocuments): Ignore source files which
8119         either contain or are referenced by a "#line" directive.        
8120
8121 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
8122
8123         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
8124         direct access to our parent, so check the method inline there.
8125
8126 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
8127
8128         * expression.cs (Invocation.EmitCall): Miguel's last commit
8129         caused a regression. If you had:
8130
8131             T t = null;
8132             t.Foo ();
8133
8134         In Foo the implict this would be null.
8135
8136 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
8137
8138         * expression.cs (Invocation.EmitCall): If the method is not
8139         virtual, do not emit a CallVirt to it, use Call.
8140
8141         * typemanager.cs (GetFullNameSignature): Improve the method to
8142         cope with ".ctor" and replace it with the type name.
8143
8144         * class.cs (ConstructorInitializer.Resolve): Now the method takes
8145         as an argument the ConstructorBuilder where it is being defined,
8146         to catch the recursive constructor invocations.
8147
8148 2004-03-16  Martin Baulig  <martin@ximian.com>
8149
8150         * expression.cs (MemberAccess.DoResolve): If `expr' resolved to a
8151         ConstructedType, call ResolveType() on it to get the type rather
8152         than just using `expr.Type'.
8153
8154 2004-03-16  Martin Baulig  <martin@ximian.com>
8155
8156         * generics.cs (ConstructedType.GetMemberAccess): Take the
8157         EmitContext instead on the TypeExpr and use
8158         ec.TypeContainer.CurrentType/ec.ContainerType.
8159
8160 2004-03-16  Martin Baulig  <martin@ximian.com>
8161
8162         * ecore.cs (SimpleName.DoResolveAsTypeStep): Lookup type
8163         parameters before aliases.
8164
8165 2004-03-16  Martin Baulig  <martin@ximian.com>
8166
8167         * typemanager.cs (TypeManager.MayBecomeEqualGenericInstances):
8168         New oublic function; checks whether two generic instances may become
8169         equal under some instantiations (26.3.1).
8170
8171         * class.cs (TypeContainer.Define): Call
8172         TypeManager.MayBecomeEqualGenericInstances() and report CS0695 on
8173         error.
8174
8175 2004-03-16  Martin Baulig  <martin@ximian.com>
8176
8177         * class.cs (TypeContainer.GetClassBases): Moved
8178         Error_TypeParameterAsBase() here and also check whether the base
8179         class is not an attribute.
8180
8181 2004-03-16  Martin Baulig  <martin@ximian.com>
8182
8183         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
8184
8185 2004-03-16  Martin Baulig  <martin@ximian.com>
8186
8187         * class.cs (Error_TypeParameterAsBase): Use correct error number
8188         here (CS0689).  
8189
8190 2004-03-16  Martin Baulig  <martin@ximian.com>
8191
8192         * decl.cs (DeclSpace.ResolveTypeExpr): Added more error checking
8193         for generics.
8194
8195         * generics.cs (ConstructedType.DoResolveAsTypeStep): Added better
8196         error reporting.
8197
8198 2004-03-15  Martin Baulig  <martin@ximian.com>
8199
8200         * typemanager.cs (TypeManager.GetFullName): New public method.
8201         (TypeManager.MemberLookup): Added `int_num_type_arguments'
8202         argument; only return members with the correct number of type
8203         arguments.
8204         (TypeManager.CheckGeneric): Allow -1 to bypass the check.
8205         (TypeManager.FilterWithClosure): Call CheckGeneric() to check
8206         whether the number of type arguments matches.
8207
8208         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Allow `expr'
8209         not being a ConstructedType; we can now do "typeof (Foo.Bar<U>)".
8210
8211         * expression.cs (MemberAccess): Added public `NumTypeArguments'
8212         field; it's set by the protected .ctor when we're actually a
8213         GenericMemberAccess.
8214         (MemberAccess.ResolveAsTypeStep): Compute the total number of type
8215         arguments and pass it to MemberLookupFinal ().
8216
8217         * ecore.cs (Expression.MemberLookup): Added `int
8218         num_type_arguments' argument; only return members with the correct
8219         number of type arguments.
8220         (Expression.MemberLookupFailed): Check whether the MemberLookup
8221         failed because we did not have the correct number of type
8222         arguments; report CS0305 in this case.
8223
8224         * decl.cs (DeclSpace.ResolveTypeExpr): Don't report an error if
8225         `e.ResolveAsTypeTerminal()' already did so.
8226
8227 2004-03-15  Martin Baulig  <martin@ximian.com>
8228
8229         * ecore.cs (Expression.ResolveLValue): Allow e.type being null if
8230         we're a ConstructedType; in this case, the caller must report an
8231         error (for instance CS0131).
8232
8233         * generic.cs (TypeArguments): Added Location argument to the .ctor.
8234         (TypeArguments.Resolve): Actually report errors here.
8235
8236 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
8237
8238         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
8239         `set_indexer_name' to the pending bits (one per type).
8240
8241         We fixed a bug today that was picking the wrong method to
8242         override, since for properties the existing InterfaceMethod code
8243         basically ignored the method name.  Now we make sure that the
8244         method name is one of the valid indexer names.
8245
8246 2004-03-15  Martin Baulig  <martin@ximian.com>
8247
8248         * typemanager.cs (TypeManager.IndexerPropertyName): Added support
8249         for generic instances.
8250
8251 2004-03-13  Martin Baulig  <martin@ximian.com>
8252
8253         * class.cs (TypeContainer.DefineType): Call
8254         TypeManager.AddUserType() immediately after creating the
8255         TypeBuilder; pass all type parameters when creating the
8256         CurrentType.
8257
8258         * decl.cs (DeclSpace.FindNestedType): New public method.
8259         (DeclSpace.FindType): Added `int num_type_args' argument; only
8260         return types with the correct number of type parameters.
8261         (DeclSpace.CountTypeParams): New public property.
8262
8263         * ecore.cs (SimpleName.ctor): Added overloaded version which takes
8264         the number of type parameters; defaults to zero.
8265
8266         * generic.cs (TypeArguments.Count): New public property.
8267         (ConstructedType.DoResolveAsTypeStep): First call
8268         ds.FindNestedType() to find out whether we're nested in the
8269         current generic type; in this case, we inherit all type parameters
8270         from the current class.
8271
8272         * rootcontext.cs (RootContext.NamespaceLookup): Added `int
8273         num_type_args' argument.
8274         (RootContext.LookupType): Added overloaded version which takes the
8275         number of type arguments; only return types with the correct
8276         number of type arguments.
8277
8278         * typemanager.cs (TypeManager.CheckGeneric): New public function;
8279         checks whether `Type t' has `int num_type_args'.
8280
8281 2004-03-13  Martin Baulig  <martin@ximian.com>
8282
8283         * generic.cs (GenericMethod.DefineType): New method; calls
8284         DefineType() on all the type parameters.
8285
8286         * class.cs (MethodData.ctor): Added `GenericMethod generic' argument.
8287         (MethodData.Define): If we're a generic method, call
8288         GenericMethod.DefineType() to define the type parameters.       
8289
8290 2004-03-10  Martin Baulig  <martin@ximian.com>
8291
8292         * pending.cs (Pending.InterfaceMethod): Use TypeManager.IsEqual()
8293         instead of IsAssignableFrom.    
8294
8295 2004-03-10  Martin Baulig  <martin@ximian.com>
8296
8297         * ecore.cs (FieldExpr.ctor): Use TypeManager.TypeToCoreType().
8298
8299         * support.cs (ParameterData.HasArrayParameter): New property.
8300         (ReflectionParameters.ctor): Take a MethodBase instead of a
8301         ParameterInfo[].  If we have any type parameters, get the generic
8302         method definition and ask it whether we have variable arguments.
8303
8304 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
8305
8306         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
8307         routines to check if a type is an enumerable/enumerator allow
8308         classes that implement the IEnumerable or IEnumerator interfaces.
8309
8310         * class.cs (Property, Operator): Implement IIteratorContainer, and
8311         implement SetYields.
8312
8313         (Property.Define): Do the block swapping for get_methods in the
8314         context of iterators.   We need to check if Properties also
8315         include indexers or not.
8316
8317         (Operator): Assign the Block before invoking the
8318         OperatorMethod.Define, so we can trigger the Iterator code
8319         replacement. 
8320
8321         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
8322         Property and Operator classes are not created when we parse the
8323         declarator but until we have the block completed, so we use a
8324         singleton SimpleIteratorContainer.Simple to flag whether the
8325         SetYields has been invoked.
8326
8327         We propagate this setting then to the Property or the Operator to
8328         allow the `yield' to function.
8329
8330 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
8331
8332         * codegen.cs: Implemented attribute support for modules.
8333         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
8334         Assembly/Module functionality.
8335
8336         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
8337         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
8338         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
8339
8340 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
8341
8342         * interface.cs (FindMembers): The operation is performed on all base
8343         interfaces and not only on the first. It is required for future CLS Compliance patch.
8344
8345 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
8346
8347         * statement.cs, codegen.cs:
8348         This patch deals with patterns such as:
8349
8350         public class List : IEnumerable {
8351
8352                 public MyEnumerator GetEnumerator () {
8353                         return new MyEnumerator(this);
8354                 }
8355
8356                 IEnumerator IEnumerable.GetEnumerator () {
8357                         ...
8358                 }
8359                 
8360                 public struct MyEnumerator : IEnumerator {
8361                         ...
8362                 }
8363         }
8364
8365         Before, there were a few things we did wrong:
8366         1) we would emit callvirt on a struct, which is illegal
8367         2) we emited ldarg when we needed to emit ldarga
8368         3) we would mistakenly call the interface methods on an enumerator
8369         type that derived from IEnumerator and was in another assembly. For example:
8370
8371         public class MyEnumerator : IEnumerator
8372
8373         Would have the interface methods called, even if there were public impls of the
8374         method. In a struct, this lead to invalid IL code.
8375
8376 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
8377
8378         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
8379           renamed to Emit.
8380
8381         * delegate.cs (Define): Fixed crash when delegate type is undefined.
8382
8383 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
8384
8385         * cs-parser.jay: Fix small regression: we were not testing V2
8386         compiler features correctly.
8387
8388         * interface.cs: If the emit context is null, then create one
8389
8390 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
8391
8392         * decl.cs (GetSignatureForError): New virtual method to get full name
8393           for error messages.
8394
8395         * attribute.cs (IAttributeSupport): New interface for attribute setting.
8396           Now it is possible to rewrite ApplyAttributes method to be less if/else.
8397
8398         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
8399           Duplicated members and code in these classes has been removed.
8400           Better encapsulation in these classes.
8401
8402 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
8403
8404         * assign.cs (Assign.DoResolve): When dealing with compound
8405         assignments, there is a new rule in ECMA C# 2.4 (might have been
8406         there before, but it is documented here) that states that in:
8407
8408         a op= b;
8409
8410         If b is of type int, and the `op' is a shift-operator, then the
8411         above is evaluated as:
8412
8413         a = (int) a op b 
8414
8415         * expression.cs (Binary.ResolveOperator): Instead of testing for
8416         int/uint/long/ulong, try to implicitly convert to any of those
8417         types and use that in pointer arithmetic.
8418
8419         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
8420         method to print information for from the type, not from the
8421         null-method we were given.
8422
8423 2004-02-01  Duncan Mak  <duncan@ximian.com>
8424
8425         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
8426         parsing for cmd, fixes bug #53694.
8427
8428 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
8429
8430         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
8431         in the member name duplication tests. Property and operator name duplication
8432         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
8433
8434 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
8435
8436         * interface.cs (PopulateMethod): Fixed crash when interface method
8437         returns not existing type (error test cs0246-3.cs).
8438
8439 2004-02-02  Ravi Pratap M <ravi@ximian.com>
8440
8441         * cs-parser.jay (interface_accessors): Re-write actions to also
8442         store attributes attached to get and set methods. Fix spelling
8443         while at it.
8444
8445         (inteface_property_declaration): Modify accordingly.
8446
8447         (InterfaceAccessorInfo): New helper class to store information to pass
8448         around between rules that use interface_accessors.
8449
8450         * interface.cs (Emit): Apply attributes on the get and set
8451         accessors of properties and indexers too.
8452
8453         * attribute.cs (ApplyAttributes): Modify accordingly to use the
8454         right MethodBuilder when applying attributes to the get and set accessors.
8455
8456 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
8457
8458         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
8459
8460 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
8461
8462         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
8463
8464 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
8465
8466         * cs-parser.jay: Remove YIELD token, instead use the new grammar
8467         changes that treat `yield' specially when present before `break'
8468         or `return' tokens.
8469
8470         * cs-tokenizer.cs: yield is no longer a keyword.
8471
8472 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
8473
8474         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
8475         setting for default constructors.
8476         For default constructors are almost every time set wrong Modifier. The
8477         generated IL code has been alright. But inside mcs this values was
8478         wrong and this was reason why several of my CLS Compliance tests
8479         failed.
8480
8481 2004-02-27  Martin Baulig  <martin@ximian.com>
8482
8483         * generics.cs (ConstructedType.ResolveType): Make the nested type
8484         stuff actually work.
8485
8486 2004-02-25  Martin Baulig  <martin@ximian.com>
8487
8488         * decl.cs (DeclSpace.CurrentTypeParameters): New protected
8489         property; returns the type parameters just from the current type,
8490         ie. with the ones from outer classes.
8491         (DeclSpace.LookupGeneric): First search in the current class, then
8492         in outer classes.
8493         (DeclSpace.initialize_type_params): When hiding a type parameter
8494         from an outer class, put it into the `type_param_list' anyways.
8495
8496         * expression.cs (MemberAccess.expr): Made this field protected.
8497
8498         * class.cs (TypeContainer.Define): The `CurrentType' just contains
8499         the type parameters from the current class.
8500
8501         * generic.cs (ConstructedType.ResolveType): Support nested generic
8502         types by taking the type parameters which we inherit from outer
8503         classes into account.
8504         (GenericMemberAccess.ResolveAsTypeStep): Override this and added
8505         support for nested generic types.
8506
8507 2004-02-23  Martin Baulig  <martin@ximian.com>
8508
8509         * decl.cs (DeclSpace.IsGeneric): Make this a property instead of a
8510         field and check whether we're nested inside a generic type.
8511         (DeclSpace.ResolveType): If we're resolving to a generic type
8512         definition, create a ConstructedType and return its resolved type.
8513         (DeclSpace.initialize_type_params): New private method;
8514         initializes the `type_param_list' field from the type parameters
8515         from this and all enclosing classes.
8516         (DeclSpace.TypeParameters): Call initialize_type_params() unless
8517         we're already initialized.
8518
8519 2004-02-23  Martin Baulig  <martin@ximian.com>
8520
8521         * class.cs (Method.Define): Create the generic method before
8522         calling DoDefine().
8523         (Memberbase.DoDefine): Added DeclSpace argument (in addition to
8524         the TypeContainer one); we use this for generic methods.
8525
8526         * decl.cs (CheckAccessLevel): If we're a GenericMethod, use our
8527         parent's TypeBuilder.
8528
8529 2004-02-18  Martin Baulig  <martin@ximian.com>
8530
8531         * ecore.cs (FieldExpr.DoResolveLValue): Use TypeManager.IsEqual()
8532         to check for equality.
8533
8534 2004-02-05  Martin Baulig  <martin@ximian.com>
8535
8536         * ecore.cs (FieldExpr.DoResolveLValue): If we have an
8537         `ec.TypeContainer.CurrentType', use it instead of
8538         `ec.ContainerType' to check whether we're in the type's ctor.
8539
8540 2004-01-29  Martin Baulig  <martin@ximian.com>
8541
8542         * expression.cs (Invocation.DoResolve): If we're a
8543         `ConstructedType', then we're actually a generic method, so
8544         rewrite the expr as a GenericMemberAccess.
8545
8546         * cs-parser.jay (member_name): Don't use `namespace_or_type_name'
8547         here; manually parse it into a string.
8548
8549 2004-01-28  Martin Baulig  <martin@ximian.com>
8550
8551         * typemanager.cs (TypeManager.IsEqual): New static method.
8552         (TypeManager.FilterWithClosure): Call TypeManager.IsEqual() to
8553         check for equality instead of using `=='.
8554
8555 2004-01-26  Martin Baulig  <martin@ximian.com>
8556
8557         * decl.cs (DeclSpace.CurrentType): New public field.
8558
8559         * expression.cs (This.ResolveBase): If we have an
8560         `ec.TypeContainer.CurrentType', use it instead of
8561         `ec.ContainerType'.
8562
8563         * class.cs (TypeContainer.DefineType): If we're a generic type,
8564         create the `CurrentType' (unresolved).
8565         (TypeContainer.GenericType): New private field.
8566         (TypeContainer.DefineMembers): If we have a `CurrentType', resolve
8567         it and store it in `GenericType' before creating the MemberCache.
8568         (TypeContainer.GetMembers): If we have a `GenericType', call
8569         TypeManager.FindMembers() on it.
8570
8571         * interface.cs (Interface.GenericType): New private field.
8572         (Interface.DefineType): If we're a generic type, create the
8573         `CurrentType' (unresolved).
8574         (Interface.DefineMembers): If we have a `CurrentType', resolve it
8575         and store it in `GenericType' before creating the MemberCache.
8576         (Interface.GetMembers): If we have a `GenericType', call
8577         TypeManager.FindMembers() on it.
8578
8579 2004-01-22  Martin Baulig  <martin@ximian.com>
8580
8581         * cs-parser.jay (namespace_or_type_name): Return an Expression,
8582         not a QualifiedIdentifier.  This is what `type_name_expression'
8583         was previously doing.
8584         (type_name_expression): Removed; the code is now in
8585         `namespace_or_type_name'.
8586         (qualified_identifier): Removed, use `namespace_or_type_name'
8587         instead.
8588         (QualifiedIdentifier): Removed this class.      
8589
8590 2004-01-22  Martin Baulig  <martin@ximian.com>
8591
8592         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
8593         not a string as alias name.
8594
8595 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
8596
8597         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
8598         #52730 bug, and instead compute correctly the need to use a
8599         temporary variable when requesting an address based on the
8600         static/instace modified of the field and the constructor.
8601  
8602 2004-01-21  Martin Baulig  <martin@ximian.com>
8603
8604         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
8605         class and namespace before looking up aliases.  Fixes #52517.
8606
8607 2004-01-21  Martin Baulig  <martin@ximian.com>
8608
8609         * flowanalysis.cs (UsageVector.Merge): Allow variables being
8610         assinged in a 'try'; fixes exception4.cs.
8611
8612 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
8613         * class.cs : Implemented parameter-less constructor for TypeContainer
8614
8615         * decl.cs: Attributes are now stored here. New property OptAttributes
8616
8617         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
8618
8619         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
8620
8621 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
8622
8623         * typemanager.cs (CSharpSignature): Now reports also inner class name.
8624           (CSharpSignature): New method for indexer and property signature.
8625
8626 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
8627
8628         * pending.cs (IsVirtualFilter): Faster implementation.
8629
8630 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
8631
8632         * typemanager.cs: Avoid inclusion of same assembly more than once.
8633
8634 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
8635
8636         * cs-parser.jay: Fixed problem where the last assembly attribute
8637           has been applied also to following declaration (class, struct, etc.)
8638           
8639 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
8640
8641         * class.cs: Added error CS0538, CS0539 reporting.
8642         Fixed crash on Microsoft runtime when field type is void.
8643
8644         * cs-parser.jay: Added error CS0537 reporting.
8645
8646         * pending.cs: Added error CS0535 reporting.
8647         Improved error report for errors CS0536, CS0534.
8648
8649 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
8650
8651         Merge a few bits from the Anonymous Method MCS tree.
8652
8653         * statement.cs (ToplevelBlock): New class for toplevel methods,
8654         will hold anonymous methods, lifted variables.
8655
8656         * cs-parser.jay: Create toplevel blocks for delegates and for
8657         regular blocks of code. 
8658
8659 2004-01-20  Martin Baulig  <martin@ximian.com>
8660
8661         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
8662         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
8663         and `NeedExplicitReturn'; added `IsLastStatement'.
8664         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
8665         have a `ReturnLabel' or we're not unreachable.
8666
8667         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
8668         child's reachability; don't just override ours with it.  Fixes
8669         #58058 (lluis's example).
8670         (FlowBranching): Added public InTryOrCatch(), InCatch(),
8671         InFinally(), InLoop(), InSwitch() and
8672         BreakCrossesTryCatchBoundary() methods.
8673
8674         * statement.cs (Return): Do all error checking in Resolve().
8675         Unless we are the last statement in a top-level block, always
8676         create a return label and jump to it.
8677         (Break, Continue): Do all error checking in Resolve(); also make
8678         sure we aren't leaving a `finally'.
8679         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
8680         statement in a top-level block.
8681         (Block.Flags): Added `IsDestructor'.
8682         (Block.IsDestructor): New public property.
8683
8684 2004-01-20  Martin Baulig  <martin@ximian.com>
8685
8686         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
8687
8688 2004-01-20  Martin Baulig  <martin@ximian.com>
8689
8690         * statement.cs (Statement.ResolveUnreachable): New public method.
8691         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
8692         (Block.Resolve): Resolve unreachable statements.
8693
8694 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
8695
8696         * expression.cs: We need to fix the case where we do
8697         not have a temp variable here.
8698
8699         * assign.cs: Only expression compound assignments need
8700         temporary variables.
8701
8702 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
8703
8704         * flowanalysis.cs: Reduce memory allocation in a few ways:
8705           - A block with no variables should not allocate a bit
8706             vector for itself.
8707           - A method with no out parameters does not need any tracking
8708             for assignment of the parameters, so we need not allocate
8709             any data for it.
8710           - The arrays:
8711                 public readonly Type[] VariableTypes;
8712                 public readonly string[] VariableNames;
8713             Are redundant. The data is already stored in the variable
8714             map, so we need not allocate another array for it.
8715           - We need to add alot of checks for if (params | locals) == null
8716             due to the first two changes.
8717
8718 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
8719
8720         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
8721         implement IMemoryLocation, we store a copy on a local variable and
8722         take the address of it.  Patch from Benjamin Jemlich
8723
8724         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
8725         to use a special "type_name_expression" rule which reduces the
8726         number of "QualifiedIdentifier" classes created, and instead
8727         directly creates MemberAccess expressions.
8728
8729 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
8730
8731         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
8732         that fixes #52853.  Null literal assignment to ValueType
8733
8734         * class.cs (MethodData.Emit): Instead of checking the name of the
8735         method to determine if its a destructor, create a new derived
8736         class from Method called Destructor, and test for that.  
8737
8738         * cs-parser.jay: Create a Destructor object instead of a Method.  
8739
8740         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
8741
8742         Fixes: 52933
8743
8744 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
8745
8746         * expression.cs (Binary.ResolveOperator): Perform an implicit
8747         conversion from MethodGroups to their delegate types on the
8748         Addition operation.
8749
8750         * delegate.cs: Introduce a new class DelegateCreation that is the
8751         base class for `NewDelegate' and `ImplicitDelegateCreation',
8752         factor some code in here.
8753
8754         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
8755         conversion from MethodGroups to compatible delegate types. 
8756
8757         * ecore.cs (Expression.Resolve): Do not flag error 654
8758         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
8759         we allow conversions from MethodGroups to delegate types now.
8760
8761         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
8762         assignments in v2 either.
8763
8764 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
8765
8766         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
8767         static read-only fields in ctors.
8768
8769         Applied patch from Benjamin Jemlich 
8770
8771         * expression.cs (UnaryMutator): Avoid leaking local variables. 
8772
8773 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
8774
8775         * cs-tokenizer.cs (IsCastToken): Allow the various native types
8776         here to return true, as they can be used like this:
8777
8778                 (XXX) int.MEMBER ()
8779
8780         Fixed 49836 and all the other dups
8781
8782 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
8783
8784         * driver.cs: Implement /win32res and /win32icon.
8785
8786 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
8787
8788         * cs-parser.jay: Add a rule to improve error handling for the
8789         common mistake of placing modifiers after the type.
8790
8791 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
8792
8793         * cs-parser.jay (interface_event_declaration): Catch
8794         initialization of events on interfaces, and report cs0068
8795
8796         * cs-parser.jay (interface_event_declaration): Catch
8797         initialization of events. 
8798
8799         * ecore.cs: Better report missing constructors.
8800
8801         * expression.cs (Binary.ResolveOperator): My previous bug fix had
8802         the error reporting done in the wrong place.  Fix.
8803
8804         * expression.cs (Binary.ResolveOperator): Catch the 
8805         operator + (E x, E y) error earlier, and later allow for implicit
8806         conversions in operator +/- (E e, U x) from U to the underlying
8807         type of E.
8808
8809         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
8810         52596, if the container class is abstract, the default constructor
8811         is protected otherwise its public (before, we were always public).
8812
8813         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
8814         fixed statement.
8815
8816         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
8817         Jemlich that fixes bug #52597, MCS was generating invalid code for
8818         idisposable structs.   Thanks to Ben for following up with this
8819         bug as well.
8820
8821 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
8822
8823         * driver.cs: Allow assemblies without code to be generated, fixes
8824         52230.
8825
8826 2004-01-07  Nick Drochak <ndrochak@gol.com>
8827
8828         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
8829
8830 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
8831
8832         * cs-parser.jay: Add rules to improve error reporting if fields or
8833         methods are declared at the namespace level (error 116)
8834
8835         * Add rules to catch event add/remove
8836
8837 2004-01-04  David Sheldon <dave-mono@earth.li>
8838
8839   * expression.cs: Added matching ")" to error message for 
8840   CS0077
8841
8842 2004-01-03 Todd Berman <tberman@gentoo.org>
8843
8844         * ecore.cs, attribute.cs:
8845         Applying fix from #52429.
8846
8847 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
8848
8849         * ecore.cs, expression.cs, statement.cs:
8850         Total rewrite of how we handle branching. We
8851         now handle complex boolean expressions with fewer
8852         jumps. As well if (x == 0) no longer emits a ceq.
8853
8854         if (x is Foo) is much faster now, because we generate
8855         better code.
8856
8857         Overall, we get a pretty big improvement on our benchmark
8858         tests. The code we generate is smaller and more readable.
8859
8860         I did a full two-stage bootstrap. The patch was reviewed
8861         by Martin and Miguel.
8862
8863 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
8864
8865         * cs-parser.jay: Make primary_expression not take a QI.
8866         we dont need this because the member_access rule covers
8867         us here. So we replace the rule with just IDENTIFIER.
8868
8869         This has two good effects. First, we remove a s/r conflict.
8870         Second, we allocate many fewer QualifiedIdentifier objects.
8871
8872 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
8873
8874         * attribute.cs: Handle MarshalAs attributes as pseudo, and
8875         set the correct information via SRE. This prevents
8876         hanging on the MS runtime. Fixes #29374.
8877
8878 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
8879
8880         * convert.cs: correctly handle conversions to value types
8881         from Enum and ValueType as unboxing conversions.
8882
8883         Fixes bug #52569. Patch by Benjamin Jemlich.
8884
8885 2004-01-02  Ravi Pratap  <ravi@ximian.com>
8886
8887         * expression.cs (BetterConversion): Prefer int -> uint
8888         over int -> ulong (csc's behaviour). This fixed bug #52046.
8889
8890 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
8891
8892         * decl.cs (MemberCache.FindMembers): now returns a
8893         MemberInfo [].
8894
8895         * typemanager.cs: In general, go with with ^^.
8896         (CopyNewMethods): take an IList.
8897         (RealMemberLookup): Only allocate an arraylist
8898         if we copy from two sets of methods.
8899
8900         This change basically does two things:
8901         1) Fewer array lists allocated due to CopyNewMethods.
8902         2) the explicit cast in MemberList costed ALOT.
8903
8904 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
8905
8906         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
8907         a hashtable to avoid needless string allocations when an identifier is
8908         used more than once (the common case).
8909
8910 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
8911
8912         * pending.cs: MS's TypeBuilder.GetInterfaces ()
8913         is broken, it will not return anything. So, we
8914         have to use the information we have in mcs to
8915         do the task.
8916
8917         * typemanager.cs: Add a cache for GetInterfaces,
8918         since this will now be used more often (due to ^^)
8919
8920         (GetExplicitInterfaces) New method that gets the
8921         declared, not effective, interfaces on a type
8922         builder (eg, if you have interface IFoo, interface
8923         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
8924         { IBar }.
8925
8926         This patch makes MCS able to bootstrap itself on
8927         Windows again.
8928
8929 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
8930
8931         * expression.cs: Remove the Nop's that Miguel put
8932         in by mistake.
8933
8934 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
8935
8936         * report.cs, codegen.cs: Give the real stack trace to
8937         the error when an exception is thrown.
8938
8939 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
8940
8941         * decl.cs: only allocate hashtables for ifaces if 
8942         it is an iface!
8943
8944 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
8945
8946         * expression.cs: fix the error from cs0121-2.cs
8947         (a parent interface has two child interfaces that
8948         have a function with the same name and 0 params
8949         and the function is called through the parent).
8950
8951 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
8952
8953         * class.cs, rootcontext.cs, typmanager.cs: do not
8954         leak pointers.
8955
8956 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
8957
8958         * codegen.cs: remove stack for the ec flow branching.
8959         It is already a linked list, so no need.
8960
8961 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
8962
8963         * Makefile: Allow custom profiler here.
8964
8965 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
8966
8967         * typemanager.cs (LookupType):
8968           - Use a static char [], because split takes
8969             a param array for args, so it was allocating
8970             every time.
8971           - Do not store true in a hashtable, it boxes.
8972
8973 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
8974
8975         * flowanalysis.cs: bytify common enums.
8976
8977 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
8978
8979         * modifiers.cs: Add a new set of flags for the
8980         flags allowed on explicit interface impls.
8981         * cs-parser.jay: catch the use of modifiers in
8982         interfaces correctly.
8983         * class.cs: catch private void IFoo.Blah ().
8984
8985         All related to bug #50572.
8986
8987 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
8988
8989         * decl.cs: Rewrite the consistant accessability checking.
8990         Accessability is not linear, it must be implemented in
8991         a tableish way. Fixes #49704.
8992
8993 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
8994
8995         * expression.cs: Handle negation in a checked context.
8996         We must use subtraction from zero. Fixes #38674.
8997
8998 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
8999
9000         * class.cs: Ignore static void main in DLLs.
9001         * rootcontext.cs: Handle the target type here,
9002         since we are have to access it from class.cs
9003         * driver.cs: account for the above.
9004
9005 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
9006
9007         * report.cs: Give line numbers and files if available.
9008
9009 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
9010
9011         * driver.cs: Implement /addmodule.
9012
9013         * typemanager.cs:  Change 'modules' field so it now contains Modules not
9014         ModuleBuilders.
9015
9016 2003-12-20  Martin Baulig  <martin@ximian.com>
9017
9018         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
9019         (FieldBase.IsAssigned): Removed this field.
9020         (FieldBase.SetAssigned): New public method.
9021         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
9022
9023 2003-12-20  Martin Baulig  <martin@ximian.com>
9024
9025         * expression.cs (LocalVariableReference.DoResolve): Don't set
9026         `vi.Used' if we're called from DoResolveLValue().
9027
9028         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
9029         returns the usage vector it just merged into the current one -
9030         pass this one to UsageWarning().
9031         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
9032         of the `EmitContext', don't call this recursively on our children.
9033
9034 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
9035
9036         * driver.cs: Implement /target:module.
9037
9038 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
9039
9040         * support.cs (CharArrayHashtable): New helper class.
9041
9042         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
9043         char arrays, not strings, so we can avoid creating a string in
9044         consume_identifier if the identifier is a keyword.
9045
9046 2003-12-16  Martin Baulig  <martin@ximian.com>
9047
9048         * statement.cs (LocalInfo.Assigned): Removed this property.
9049         (LocalInfo.Flags): Removed `Assigned'.
9050         (LocalInfo.IsAssigned): New public method; takes the EmitContext
9051         and uses flow analysis.
9052         (Block.UsageWarning): Made this method private.
9053         (Block.Resolve): Call UsageWarning() if appropriate.
9054
9055         * expression.cs (LocalVariableReference.DoResolve): Always set
9056         LocalInfo.Used here.
9057
9058 2003-12-13  Martin Baulig  <martin@ximian.com>
9059
9060         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
9061         any value here; we're now using flow analysis to figure out
9062         whether a statement/block returns a value.
9063
9064 2003-12-13  Martin Baulig  <martin@ximian.com>
9065
9066         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
9067         working again.
9068         (FlowBranching.MergeFinally): Don't call
9069         `branching.CheckOutParameters()' here, this is called in
9070         MergeTopBlock().
9071         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
9072         when adding the `finally' vector.       
9073
9074 2003-12-13  Martin Baulig  <martin@ximian.com>
9075
9076         * flowanalysis.cs
9077         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
9078         actually work and also fix #48962.
9079
9080 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
9081
9082         * decl.cs: Do not check System.Object for nested types,
9083         since we know it does not have any. Big bang for buck:
9084
9085         BEFORE:
9086            Run 1:   8.35 seconds
9087            Run 2:   8.32 seconds
9088            corlib:  17.99 seconds
9089         AFTER:
9090            Run 1:   8.17 seconds
9091            Run 2:   8.17 seconds
9092            corlib:  17.39 seconds
9093
9094 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
9095
9096         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
9097         time we are returning 0 members, so we save alot here.
9098
9099 2003-12-11  Martin Baulig  <martin@ximian.com>
9100
9101         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
9102         `MergeChild()', also just take the `FlowBranching' as argument;
9103         call Merge() on it and return the result.
9104         (FlowBranching.Merge): We don't need to do anything if we just
9105         have one sibling.
9106
9107 2003-12-11  Martin Baulig  <martin@ximian.com>
9108
9109         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
9110         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
9111         Maurer for this idea.
9112
9113 2003-12-11  Martin Baulig  <martin@ximian.com>
9114
9115         * flowanalysis.cs (MergeResult): This class is now gone; we now
9116         use the `UsageVector' for this.  The reason for this is that if a
9117         branching just has one sibling, we don't need to "merge" them at
9118         all - that's the next step to do.
9119         (FlowBranching.Merge): We now return a `UsageVector' instead of a
9120         `MergeResult'.
9121
9122 2003-12-11  Martin Baulig  <martin@ximian.com>
9123
9124         Reworked flow analyis and made it more precise and bug-free.  The
9125         most important change is that we're now using a special `Reachability'
9126         class instead of having "magic" meanings of `FlowReturns'.  I'll
9127         do some more cleanups and optimizations and also add some more
9128         documentation this week.
9129
9130         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
9131         largely reworked this class.
9132         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
9133         the new `Reachability' class instead of having "magic" values here.
9134         (FlowBranching): We're now using an instance of `Reachability'
9135         instead of having separate `Returns', `Breaks' etc. fields.
9136
9137         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
9138         based on flow analysis; ignore the return value of block.Emit ().
9139
9140 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
9141
9142         * driver.cs typemanager.cs: Find the mono extensions to corlib even
9143         if they are private.
9144
9145 2003-12-09  Martin Baulig  <martin@ximian.com>
9146
9147         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
9148         call them directly on the UsageVector.
9149
9150 2003-12-09  Martin Baulig  <martin@ximian.com>
9151
9152         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
9153         Changed return type from `FlowReturns' to `Reachability'.
9154
9155 2003-12-09  Martin Baulig  <martin@ximian.com>
9156
9157         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
9158         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
9159         `Reachable' fields with a single `Reachability' one.
9160
9161 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
9162
9163         * class.cs (FindMembers): Remove foreach's.
9164
9165         Bootstrap times:
9166
9167         BEFORE
9168                 Run 1:   8.74 seconds
9169                 Run 2:   8.71 seconds
9170
9171         AFTER
9172                 Run 1:   8.64 seconds
9173                 Run 2:   8.58 seconds
9174
9175
9176 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
9177
9178         * cs-parser.jay:
9179         * gen-treedump.cs:
9180         * statement.cs:
9181         This patch does a few things:
9182                 1. EmptyStatement is now a singleton, so it is never reallocated.
9183                 2. All blah is EmptyStatement constructs have been changed to
9184                    blah == EmptyStatement.Value, which is much faster and valid
9185                    now that EmptyStatement is a singleton.
9186                 3. When resolving a block, rather than allocating a new array for
9187                    the non-empty statements, empty statements are replaced with
9188                    EmptyStatement.Value
9189                 4. Some recursive functions have been made non-recursive.
9190         Mainly the performance impact is from (3), however (1) and (2) are needed for
9191         this to work. (4) does not make a big difference in normal situations, however
9192         it makes the profile look saner.
9193
9194         Bootstrap times:
9195
9196         BEFORE
9197         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
9198         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
9199         Total memory allocated: 56397 KB
9200
9201         AFTER
9202         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
9203         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
9204         Total memory allocated: 55666 KB
9205
9206 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
9207
9208         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
9209         than the hashtable in a hashtable version
9210
9211         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
9212         we always end up concating a string. This results in a huge perf
9213         loss, because many strings have to be tracked by the GC. In this
9214         patch, we first use a hashtable that works with two keys, so that
9215         the strings do not need to be concat'ed.
9216
9217         Bootstrap times:
9218         BEFORE
9219                 Run 1:   8.74 seconds
9220                 Run 2:   8.71 seconds
9221
9222         AFTER
9223                 Run 1:   8.65 seconds
9224                 Run 2:   8.56 seconds
9225
9226 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
9227
9228         * Makefile: Add a new target `do-time' that does a quick and simple
9229         profile, leaving easy to parse output.
9230
9231 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
9232
9233         * codegen.cs (Init): Create the dynamic assembly with 
9234         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
9235
9236 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
9237
9238         * support.cs: Make the PtrHashtable use only one
9239         instance of its comparer.
9240
9241 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
9242
9243         * typemanager.cs: Fix lookup of GetNamespaces.
9244
9245 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
9246
9247         * expression.cs: Removed redundant line.
9248
9249         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
9250         ArrayLists, use for loops with bounds.  
9251
9252         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
9253         arraylist.
9254
9255         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
9256         arraylists, use for loop with bounds.
9257
9258         The above three changes give us a 0.071 second performance
9259         improvement out of 3.294 seconds down to 3.223.  On my machine
9260         the above changes reduced the memory usage by 1,387 KB during
9261         compiler bootstrap.
9262
9263         * cs-parser.jay (QualifiedIdentifier): New class used to represent
9264         QualifiedIdentifiers.  Before we created a new string through
9265         concatenation, and mostly later on, the result would be
9266         manipulated by DecomposeQI through string manipulation.
9267
9268         This reduced the compiler memory usage for bootstrapping from
9269         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
9270         compile times in 0.05 seconds.
9271
9272 2003-11-28  Dick Porter  <dick@ximian.com>
9273
9274         * support.cs: Do string compares with the Invariant culture.
9275
9276         * rootcontext.cs: 
9277         * gen-treedump.cs: 
9278         * expression.cs: 
9279         * driver.cs: 
9280         * decl.cs: 
9281         * codegen.cs: 
9282         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
9283         the comparison is done with the Invariant culture.
9284
9285 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
9286
9287         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
9288         GetEnumerator method.
9289
9290         (ProbeCollectionType): Iterate starting at the most specific type
9291         upwards looking for a GetEnumerator
9292
9293         * expression.cs: Shift count can be up to 31 for int/uint and 63
9294         for long/ulong.
9295
9296 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
9297
9298         * statement.cs (Block.LookupLabel): Also look for the label on the
9299         children blocks.  Use a hash table to keep track of visited
9300         nodes. 
9301
9302         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
9303         we actually did transform the other operand, otherwise fall back
9304         to the common codepath that casts to long.
9305
9306         * cs-tokenizer.cs: Use the same code pattern as the int case.
9307         Maybe I should do the parsing myself, and avoid depending on the
9308         Parse routines to get this done.
9309
9310 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
9311
9312         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
9313         which fixes bug 51347.  This time test it.
9314
9315         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
9316         attributes for example can not tell the difference between these.
9317         The difference was only a syntax feature of the language. 
9318
9319         * attribute.cs: Apply attributes to delegates.
9320
9321         * delegate.cs: Call the apply attributes method.
9322
9323 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
9324
9325         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
9326         comparing 0 vs Byte.MinValue, not the value
9327
9328         (ImplicitConversionRequired): When reporting a conversion error,
9329         use error 31 to print out the constant error instead of the
9330         simpler 29.
9331
9332         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
9333         which fixes bug 51347.
9334
9335 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
9336
9337         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
9338         which fixes the -warnaserror command line option.
9339
9340 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
9341
9342         * cfold.cs (DoNumericPromotions): During constant folding of
9343         additions on UIntConstant, special case intconstants with
9344         IntConstants like we do on the expression binary operator. 
9345
9346 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
9347
9348         * convert.cs (ImplicitReferenceConversion): We were missing a case
9349         (System.Enum are not value types or class types, so we need to
9350         classify them separatedly).
9351
9352         * driver.cs: We do not support error 2007.
9353
9354 2003-11-12 Jackson Harper <jackson@ximian.com>
9355
9356         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
9357         system directory. Also use the full file name so users can
9358         libraries names mscorlib-o-tron.dll in a non system dir.
9359         
9360 2004-01-04  David Sheldon <dave-mono@earth.li>
9361
9362         * expression.cs: Added matching ")" to error message for CS0077.
9363
9364 2003-12-19  Martin Baulig  <martin@ximian.com>
9365
9366         * typemanager.cs (TypeManager.IsEqualGenericType): New public
9367         static method; see documentation in the method.
9368         (TypeManager.IsSubclassOrNestedChild): Allow IsEqualGenericType().
9369
9370         * convert.cs (Convert.ImplicitReferenceConversion,
9371         Convert.ImplicitReferenceConversionExists): Add support for
9372         generic type declarations; see gen-36.cs.
9373
9374 2003-12-19  Martin Baulig  <martin@ximian.com>
9375
9376         * pending.cs (Pending.InterfaceMethod): Use
9377         `Type.IsAssignableFrom()' instead of `=='.
9378
9379 2003-12-18  Martin Baulig  <martin@ximian.com>
9380
9381         * decl.cs (DeclSpace.AsAccessible): Check for array, pointer and
9382         byref types first.
9383
9384         * convert.cs (Convert.ImplicitStandardConversionExists): Use
9385         `expr_type.Equals (target_type)' instead of `=='.
9386
9387 2003-12-08  Martin Baulig  <martin@ximian.com>
9388
9389         * generics.cs (Constraints.Types): Removed.
9390         (Constraints.Resolve): Just resolve everything to TypeExpr's, not
9391         to Type's.
9392         (Constraints.ResolveTypes): New public method; resolves the
9393         TypeExpr's to Type's.
9394         (TypeParameter.Define): TypeBuilder.DefineGenericParameter() no
9395         longer takes the constraints.
9396         (TypeParameter.DefineMethod): Likewise.
9397         (TypeParameter.DefineType): New public method.  Calls
9398         `TypeBuilder/MethodBuilder.SetGenericParameterConstraints()' to set
9399         the constraints.
9400
9401 2003-12-08  Martin Baulig  <martin@ximian.com>
9402
9403         * convert.cs (Convert.ImplicitConversionStandard): Use
9404         `expr_type.Equals (target_type)' instead of `=='.
9405
9406 2003-12-08  Martin Baulig  <martin@ximian.com>
9407
9408         * typemanager.cs (TypeManager.GetReferenceType): Call
9409         `Type.MakeByRefType ()'.
9410
9411 2003-12-08  Martin Baulig  <martin@ximian.com>
9412
9413         * cs-parser.jay, cs-tokenizer.cs: `where' is not a keyword, it
9414         just has some special meaning in some situations.  For instance,
9415         it is allowed to use `where' as the name of a variable etc.
9416
9417 2003-12-04  Martin Baulig  <martin@ximian.com>
9418
9419         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
9420         `Type.MakeArrayType()' for array types.
9421
9422 2003-11-18  Miguel de Icaza  <miguel@ximian.com>
9423
9424         * expression.cs (Invocation.VerifyArgumentsCompat): Remove
9425         debugging message.
9426
9427         (SizeOf.DoResolve): assign the `type_queried' field.  This gets
9428         corlib to compile.
9429
9430 2003-11-16  Martin Baulig  <martin@ximian.com>
9431
9432         * codegen.cs (EmitContext.IsGeneric): Removed.
9433
9434         * ecore.cs (SimpleName.ResolveAsTypeStep): Always call
9435         ResolveGeneric() on the DeclSpace.
9436
9437 2003-11-16  Martin Baulig  <martin@ximian.com>
9438
9439         * generic.cs (TypeArguments.Resolve):
9440         `Expression.ResolveAsTypeTerminal()' returns a TypeExpr; call
9441         `ResolveType()' on it to get the Type.
9442
9443 2003-11-15  Martin Baulig  <martin@ximian.com>
9444
9445         * generic.cs (ConstructedType.GetInterfaces): Override this.
9446
9447 2003-11-14  Martin Baulig  <martin@ximian.com>
9448
9449         * interface.cs (Interface.DefineType): Define all type parameters
9450         before adding the interfaces we inherit.
9451
9452 2003-11-11  Martin Baulig  <martin@ximian.com>
9453
9454         * generic.cs (ConstructedType.ResolveType): Always call
9455         `gt.BindGenericParameters (atypes)'; also if `args.HasTypeArguments'.
9456
9457 2003-11-10  Martin Baulig  <martin@ximian.com>
9458
9459         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
9460         (TypeManager.InitCoreTypes): Initialize them here, but instead of
9461         calling `ResolveType()' on them, directly assign their `Type'.
9462
9463 2003-11-08  Martin Baulig  <martin@ximian.com>
9464
9465         * generic.cs (ConstructedType): Override `IsClass' etc.
9466
9467 2003-11-08  Martin Baulig  <martin@ximian.com>
9468
9469         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
9470         return value and the `out parent' parameter.
9471         (TypeContainer.DefineType): Moved the CS0644 check into
9472         GetClassBases().  Don't pass the interface types to the
9473         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
9474         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
9475
9476         * ecore.cs (TypeExpr.IsAttribute): New property.
9477         (TypeExpr.GetInterfaces): New method.
9478
9479         * interface.cs (Interface.GetInterfaceTypeByName): Return a
9480         TypeExpr instead of a Type.
9481         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
9482         (Interface.DefineType): Don't pass the interface types to the
9483         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
9484         them later and then call `TypeBulider.AddInterfaceImplementation()'.
9485
9486         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
9487         instead of a `Type[]'.
9488         (TypeManager.RegisterBuilder): Likewise.
9489         (TypeManager.AddUserInterface): Likewise.
9490         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
9491         `Type[]' and also return a `TypeExpr[]'.
9492         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
9493
9494 2003-11-08  Martin Baulig  <martin@ximian.com>
9495
9496         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
9497         Expression.     
9498
9499 2003-11-08  Martin Baulig  <martin@ximian.com>
9500
9501         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
9502         TypeManager.ResolveExpressionTypes().
9503
9504         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
9505         instead of an Expression.
9506         (TypeExpr): This is now an abstract base class for `TypeExpression'.
9507         (TypeExpression): New public class; formerly known as `TypeExpr'.
9508
9509         * expression.cs (ComposedCast): Derive from TypeExpr.
9510
9511         * typemanager.cs (TypeManager.system_*_expr): These are now
9512         TypExpr's instead of Expression's.
9513         (TypeManager.ResolveExpressionTypes): New public static function;
9514         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
9515         of them.        
9516
9517 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
9518
9519         * expression.cs (New.DoResolve): Do not dereference value that
9520         might be a null return.
9521
9522         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
9523         sure that the constant value has the right type.  Fixes an
9524         unreported bug, similar to 50425.
9525
9526         * const.cs (Const.LookupConstantValue): Call
9527         ImplicitStandardConversionExists before doing a conversion to
9528         avoid havng the TypeManager.ChangeType do conversions.
9529
9530         Reduced the number of casts used
9531
9532         (Const.ChangeType): New routine to enable reuse of the constant
9533         type changing code from statement.
9534
9535         * typemanager.cs (ChangeType): Move common initialization to
9536         static global variables.
9537
9538         Fixes #50425.
9539
9540         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
9541         every value type to go through, even if it was void.  Fix that. 
9542
9543         * cs-tokenizer.cs: Use is_identifier_start_character on the start
9544         character of the define, and the is_identifier_part_character for
9545         the rest of the string.
9546
9547 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
9548
9549         * expression.cs (UnaryMutator.EmitCode): When I updated
9550         LocalVariableReference.DoResolve, I overdid it, and dropped an
9551         optimization done on local variable references.
9552
9553 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
9554
9555         * ecore.cs: Convert the return from Ldlen into an int.
9556
9557 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
9558
9559         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
9560         the accessibility, this is a special case for toplevel non-public
9561         classes (internal for instance).
9562
9563 2003-10-20  Nick Drochak <ndrochak@gol.com>
9564
9565         * ecore.cs: Fix typo and build.  Needed another right paren.
9566
9567 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
9568
9569         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
9570         `internal' case regular and protected, but not allowing protected
9571         to be evaluated later.  Bug 49840
9572
9573 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
9574
9575         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
9576         to kb.Nlast, and not the kb.nFirst to isolate the switch
9577         statement.
9578
9579         Extract the underlying type, so enumerations of long/ulong are
9580         treated like long/ulong.
9581
9582 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
9583
9584         * expression.cs (New): Overload the meaning of RequestedType to
9585         track the possible creation of the NewDelegate type, since
9586         DoResolve is invoked more than once for new constructors on field
9587         initialization.
9588
9589         See bugs: #48800 and #37014
9590
9591         * cs-parser.jay (declare_local_constants): Take an arraylist
9592         instead of a single constant.
9593
9594         (local_constant_declaration): It should take a
9595         constant_declarators, not a constant_declarator.  Fixes 49487
9596
9597         * convert.cs: Fix error report.
9598
9599 2003-10-13 Jackson Harper <jackson@ximian.com>
9600
9601         * typemanager.cs (TypeToCoreType): Add float and double this fixes
9602         bug #49611
9603         
9604 2003-11-03  Martin Baulig  <martin@ximian.com>
9605
9606         * expression.cs (ArrayAccess.GetStoreOpcode): Added
9607         `out bool has_type_arg'; if set, we need to pass the type to
9608         ig.Emit().
9609         (ArrayAccess.GetStoreOpcode, ArrayAccess.EmitLoadOpcode): Use
9610         Stelem_Any/Ldelem_Any for generic parameters.   
9611
9612 2003-11-02  Martin Baulig  <martin@ximian.com>
9613
9614         * expression.cs (Invocation.EmitCall): Use
9615         `TypeManager.IsValueType()' to check whether it's a value type.
9616         Don't set `struct_call' when calling a method on a type parameter.
9617
9618 2003-11-02  Martin Baulig  <martin@ximian.com>
9619
9620         * generics.cs (ConstructedType.Resolve): Renamed to ResolveType()
9621         and removed the TypeBuilder argument.
9622
9623         * typemanager.cs (TypeManager.IsValueType): Return
9624         `t.IsGenericParameter || t.IsValueType'.
9625
9626 2003-10-25  Martin Baulig  <martin@ximian.com>
9627
9628         * decl.cs (DeclSpace.ResolveType): If we're a ConstructedType,
9629         call ConstructedType.Resolve() on it.
9630
9631         * generic.cs (ConstructedType.Resolve): Set `type' on success.
9632
9633 2003-10-25  Martin Baulig  <martin@ximian.com>
9634
9635         * class.cs (TypeContainer.GetClassBases): Changed
9636         `out Type parent' into `out TypeExpr parent'.  Moved CS0644 and
9637         CS8214 reporting here.
9638         (TypeContainer.DefineType): GetClassBases() gives us a `TypeExpr'
9639         instead of a `Type' for our parent.  In case of a recursive
9640         declaration (see tests/gen-23.cs for an example), our parent is a
9641         ConstructedType and it doesn't have its type set.  So, first
9642         create our own TypeBuilder, then call constructed.Resolve() to get
9643         the parent's type and finally TypeBuilder.SetParent() it.
9644
9645         * ecore.cs (TypeExpr.Name): New public virtual property.
9646
9647         * generic.cs
9648         (ConstructedType): We're now a TypeExpr and not just an Expression.
9649         (ConstructedType.ResolveAsTypeStep): Don't resolve our type
9650         arguments here; this is done later.
9651         (ConstructedType.Resolve): New public method to resolve the type
9652         arguments and bind them.
9653
9654 2003-10-21  Martin Baulig  <martin@ximian.com>
9655
9656         * convert.cs: Use `TypeManager.IsValueType' instead of
9657         'type.IsValueType' everywhere.
9658
9659         * typemanager.cs (TypeManager.IsValueType): Return true for type
9660         parameters.  The reason for this is that we need to box a type
9661         parameter when converting it to a reference type.
9662
9663         * cs-parser.jay: Added support for default value expressions.
9664
9665         * generics.cs (DefaultValueExpression): New public class.       
9666
9667 2003-10-17  Martin Baulig  <martin@ximian.com>
9668
9669         * generic.cs (Constraints.Resolve): Take a DecpSpace instead of a
9670         TypeContainer so we can also use this for Interfaces.
9671         (TypeParameter.Resolve): Likewise.
9672
9673         * interface.cs (Interface.DefineType): Added support for generic
9674         interfaces.
9675
9676         * cs-parser.jay: Added support for generic structs and interfaces.
9677
9678 2003-10-17  Martin Baulig  <martin@ximian.com>
9679
9680         * generic.cs (GenericMemberAccess.DoResolve): We can now actually
9681         call generic methods :-)
9682
9683 2003-10-16  Martin Baulig  <martin@ximian.com>
9684
9685         * cs-parser.jay (namespace_or_type_name): Only create a
9686         GenericMemberAccess if we actually have type arguments.
9687
9688 2003-10-13  Martin Baulig  <martin@ximian.com>
9689
9690         * class.cs (Method.Define): If we're a generic method, call
9691         TypeBuilder.DefineGenericMethod () before resolving
9692         the parameters.
9693         (MethodData): Added .ctor which takes an additional MethodBuilder
9694         argument; this is used for generic methods.
9695         (MethodData.Define): Call `builder.SetGenericMethodSignature()' if
9696         we already have a MethodBuilder.
9697
9698 2003-10-10  Martin Baulig  <martin@ximian.com>
9699
9700         * class.cs (Method): Added .ctor which takes a `GenericMethod'
9701         instead of a `DeclSpace'.  This is used for generic methods.
9702
9703         * cs-parser.jay (method_header): Added support for generic
9704         methods; create a `GenericMethod' instance and pass it to the
9705         `Method's .ctor; it'll be used as the `DeclSpace' to lookup
9706         parameters and locals.
9707
9708         * decl.cs (DeclSpace.SetParameterInfo): Removed Location argument
9709         since we already have the location.  Check whether we're a generic
9710         type declaration or a generic method and create the correct type
9711         parameter.
9712
9713         * generic.cs (TypeParameter.DefineMethod): New public method.
9714         (GenericMethod): New public class; derives from DeclSpace and is
9715         used for generic methods.       
9716
9717 2003-10-09  Martin Baulig  <martin@ximian.com>
9718
9719         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
9720         to the .ctor.
9721         (MethodCore.DoDefineParameters): Removed the TypeContainer
9722         argument; use the DeclSpace which was passed to the .ctor instead.
9723         (MethodCore.CheckParameter): Take a DeclSpace instead of a
9724         TypeContainer; we only need a DeclSpace here.
9725
9726 2003-10-09  Martin Baulig  <martin@ximian.com>
9727
9728         * class.cs (MethodData): Added additional `DeclSpace ds' argument
9729         to the .ctor.
9730         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
9731         EmitContext's .ctor.    
9732
9733 2003-10-09  Martin Baulig  <martin@ximian.com>
9734
9735         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
9736         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
9737         AsAccessible(), moved them as well.
9738
9739         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
9740
9741 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
9742
9743         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
9744         generation for >=, as spotted by Paolo, bug 48679.  
9745         Patch from David Waite.
9746
9747         * cs-tokenizer.cs: Add handling for #pragma.
9748
9749         * cs-parser.jay: Allow for both yield and yield return in the
9750         syntax.  The anti-cobolization of C# fight will go on!
9751
9752         * class.cs (TypeBuilder.DefineType): Catch error condition here
9753         (Parent.DefineType erroring out and returning null).
9754
9755         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
9756         coping with enumerations variables, we were mistakenly processing
9757         them as a regular value type instead of built-in types.  Fixes the
9758         bug #48063
9759
9760         * typemanager.cs (IsBuiltinOrEnum): New method.
9761
9762 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
9763
9764         * cs-parser.jay: Upgrade: yield now needs the return clause.
9765
9766 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
9767
9768         * cs-parser.jay : Renamed yyName to yyNames related to jay.
9769
9770 2003-09-29  Martin Baulig  <martin@ximian.com>
9771
9772         * typemanager.cs (TypeManager.GetMethodFlags): Added support for
9773         inflated generic methods.
9774
9775         * generics.cs (ConstructedType): Distinguish between open and
9776         closed constructed types; correctly resolve the arguments.
9777
9778 2003-09-22  Martin Baulig  <martin@ximian.com>
9779
9780         * generic.cs (ConstructedType.ResolveAsTypeCheck): Check whether
9781         all type arguments meet their constraints.
9782
9783 2003-09-19  Martin Baulig  <martin@ximian.com>
9784
9785         * decl.cs (MemberCache.SetupCacheForInterface): Take a
9786         `MemberCache parent' argument.  Normally, an interface doesn't
9787         have a parent type except System.Object, but we use this in gmcs
9788         for generic type parameters.
9789
9790 2003-09-18  Martin Baulig  <martin@ximian.com>
9791
9792         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
9793         on `type.IsInterface'; don't check whether the type has a parent
9794         to determine whether it's an interface.
9795
9796 2003-09-17  Martin Baulig  <martin@ximian.com>
9797
9798         * generic.cs (ConstructedType.ToString): Always use `name' as the
9799         type name.
9800
9801 2003-09-15  Martin Baulig  <martin@ximian.com>
9802
9803         * cs-parser.jay: Fix grammar wrt. type_parameter_constraints.
9804
9805         * generic.cs (Constraints.Resolve): New public method; this is
9806         called to resolve the constraint types and to check whether all
9807         the constraints are correct.
9808         (Constraints.Types): New public property.
9809         (TypeParameter.Resolve): New public method; resolves all the
9810         type's constraints.
9811
9812         * class.cs (TypeContainer.DefineType): Call
9813         TypeParameter.Resolve() before actually defining the type.
9814
9815 2003-09-15  Martin Baulig  <martin@ximian.com>
9816
9817         * class.cs (TypeContainer.DefineType): Added an error flag to
9818         avoid reporting duplicate CS0146's ("class definition is
9819         circular.").
9820
9821         * driver.cs (Driver.MainDriver): Abort if
9822         RootContext.ResolveTree() reported any errors.
9823
9824 2003-09-07  Martin Baulig  <martin@ximian.com>
9825
9826         * report.cs (Error, Warning): Added overloaded versions which take
9827         a `params object[] args' and call String.Format().
9828
9829 2003-09-07  Martin Baulig  <martin@ximian.com>
9830
9831         * decl.cs (DeclSpace..ctor): Don't call
9832         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
9833         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
9834         (DeclSpace.RecordDecl): New method.
9835
9836         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
9837
9838 2003-09-02  Ravi Pratap  <ravi@ximian.com>
9839
9840         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
9841         value attributes to be applied to ParameterBuilders.
9842
9843         * class.cs (MethodCore.LabelParameters): Make static and more
9844         generic so that it can be used from other places - like interface
9845         methods, for instance.
9846
9847         * interface.cs (Interface.Emit): Call LabelParameters before
9848         emitting attributes on the InterfaceMethod.
9849
9850 2003-09-07  Martin Baulig  <martin@ximian.com>
9851
9852         * generic.cs (ConstructedType.ResolveAsTypeStep): Report a CS8217
9853         if the number of type parameters doesn't match.
9854
9855 2003-09-04  Martin Baulig  <martin@ximian.com>
9856
9857         * expression.cs (ComposedCast.ResolveAsTypeStep): Added support
9858         for arrays of generic type params (ie. `!0[]').
9859
9860 2003-09-04  Martin Baulig  <martin@ximian.com>
9861
9862         * class.cs (TypeContainer.AsAccessible): Ignore generic parameters
9863         for the moment.
9864
9865 2003-09-04  Martin Baulig  <martin@ximian.com>
9866
9867         * decl.cs (DeclSpace.LookupGeneric): New method.
9868         (DeclSpace.CheckAccessLevel): Ignore generic parameters for the
9869         moment.
9870
9871         * generic.cs (TypeParameterExpr): Take a TypeParameter as
9872         argument, not just a string.
9873         (TypeParameter.Define): New public method; this is called to
9874         actually define the generic parameter; after this, you can use the
9875         new `Type' property to get the type.
9876
9877 2003-09-04  Martin Baulig  <martin@ximian.com>
9878
9879         * decl.cs (DeclSpace.SetParameterInfo): The `constraints' argument
9880         is now an ArrayList; initialize the result of the `TypeParameters'
9881         property here.
9882         (DeclSpace.GetGenericData): Removed.
9883         (DeclSpace.LookupGeneric): Temporarily removed; we need to
9884         implement this in a different way.
9885         (DeclSpace.GetTypeParameters): Removed; there's now a
9886         `TypeParameters' property.
9887         (DeclSpace.TypeParameters): New public property.
9888
9889         * generic.cs (Constraints): Make this class public.
9890         (TypeParameter): New public class.
9891
9892 2003-09-04  Martin Baulig  <martin@ximian.com>
9893
9894         * decl.cs (DeclSpace.GetTypeParameters): New method to return the
9895         generic parameters.
9896
9897         * class.cs (TypeContainer.DefineType): Call
9898         TypeBuilder.DefineGenericParameter () on all generic parameters if
9899         this is a generic type.
9900
9901 2003-08-28  Martin Baulig  <martin@ximian.com>
9902
9903         * sample-stack.il: Compile this with ilasm: "ilasm /dll
9904         sample-stack.il".
9905
9906         * sample-hello.cs: Compile this with gmcs: "gmcs
9907         /r:sample-stack.dll sample-hello.cs".
9908
9909 2003-08-28  Martin Baulig  <martin@ximian.com>
9910
9911         * generic.cs (ConstructedType.ResolveAsTypeStep): Actually bind
9912         the parameters to the generic type.
9913
9914 2003-08-28  Martin Baulig  <martin@ximian.com>
9915
9916         * cs-tokenizer.cs (parse_less_than): Also allow all builtin types.
9917
9918 2003-08-28  Martin Baulig  <martin@ximian.com>
9919
9920         * cs-parser.jay (opt_type_argument_list): Use
9921         `OP_GENERICS_LT type_arguments OP_GENERICS_GT'.
9922         (primary_expression): Replace `qualified_identifier' with `type_name'.
9923         (type_parameter_list): Use `OP_GENERICS_LT type_parameters OP_GENERICS_GT'.
9924
9925         * cs-tokenizer.cs (is_punct): When reading a `<', invoke a custom
9926         parser to check whether it is syntactically a type parameter list;
9927         return OP_GENERICS_LT/OP_GENERICS_GT instead of OP_LT/OP_GT in
9928         this case.
9929
9930 2003-08-26  Martin Baulig  <martin@ximian.com>
9931
9932         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
9933         resolving aliases; fixes #47927.
9934
9935 2003-08-26  Martin Baulig  <martin@ximian.com>
9936
9937         * statement.cs (Using.DoResolve): This is internally emitting a
9938         try/finally clause, so we need to set ec.NeedExplicitReturn if we
9939         do not always return.  Fixes #47681.
9940
9941 2003-08-26  Martin Baulig  <martin@ximian.com>
9942
9943         * decl.cs (MemberCore): Moved WarningNotHiding(),
9944         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
9945         into MemberBase.
9946         (AdditionResult): Make this nested in DeclSpace.
9947         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
9948         argument; call NamespaceEntry.Define() unless we're nested in a
9949         class or struct.
9950
9951         * namespace.cs (Namespace.DefineName): New public function.  This
9952         is called from DeclSpace's .ctor to add 
9953         (Namespace.Lookup): Include DeclSpaces in the lookup.
9954
9955         * class.cs (Operator): Derive from MemberBase, not MemberCore.
9956
9957         * const.cs (Const): Derive from MemberBase, not MemberCore.     
9958
9959 2003-08-25  Martin Baulig  <martin@ximian.com>
9960
9961         * convert.cs (Convert.ExplicitReferenceConversion): When
9962         converting from an interface type to a class, unbox if the target
9963         type is a struct type.  Fixes #47822.
9964
9965 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9966
9967         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
9968         #47854.
9969
9970 2003-08-22  Martin Baulig  <martin@ximian.com>
9971
9972         * class.cs (TypeManager.DefineType): When defining a nested type,
9973         call DefineType() on our parent; fixes #47801.
9974
9975 2003-08-22  Martin Baulig  <martin@ximian.com>
9976
9977         * class.cs (MethodData.Define): While checking if a method is an
9978         interface implementation, improve the test a bit more to fix #47654.
9979
9980 2003-08-22  Martin Baulig  <martin@ximian.com>
9981
9982         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
9983         correctly; fixes #47722.
9984
9985 2003-08-22  Martin Baulig  <martin@ximian.com>
9986
9987         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
9988         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
9989
9990         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
9991
9992 2003-08-22  Martin Baulig  <martin@ximian.com>
9993
9994         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
9995         can only be assigned in static constructors.  Fixes #47161.
9996
9997 2003-08-22  Martin Baulig  <martin@ximian.com>
9998
9999         Rewrote and improved the flow analysis code.
10000
10001         * flowbranching.cs (FlowBranching): Make this class abstract.
10002         (FlowBranching.CreateBranching): New static function to create a
10003         new flow branching.
10004         (FlowBranchingBlock, FlowBranchingException): New classes.
10005         (FlowBranching.UsageVector.Type): New public readonly field.
10006         (FlowBranching.UsageVector.Breaks): Removed the setter.
10007         (FlowBranching.UsageVector.Returns): Removed the setter.
10008         (FlowBranching.UsageVector): Added Break(), Return(),
10009         NeverReachable() and Throw() methods to modify the reachability.
10010         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
10011         done by FlowBranching.Merge().
10012         (FlowBranching.UsageVector.MergeChild): New method; merges the
10013         merge result into the current vector.
10014         (FlowBranching.Merge): New abstract method to merge a branching.
10015
10016 2003-08-12  Martin Baulig  <martin@ximian.com>
10017
10018         * expression.cs (Indirection.CacheTemporaries): Create the
10019         LocalTemporary with the pointer type, not its element type.
10020
10021 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
10022
10023         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
10024         token was a keyword or not.
10025
10026         Add `error' options where an IDENTIFIER was expected;  Provide
10027         CheckToken and CheckIdentifierToken convenience error reporting
10028         functions. 
10029
10030         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
10031
10032         * decl.cs: Rename `NamespaceEntry Namespace' public field into
10033         NameSpaceEntry NameSpaceEntry.
10034
10035         (LookupInterfaceOrClass): Avoid creating a full qualified name
10036         from namespace and name: avoid doing lookups when we know the
10037         namespace is non-existant.   Use new Tree.LookupByNamespace which
10038         looks up DeclSpaces based on their namespace, name pair.
10039
10040         * driver.cs: Provide a new `parser verbose' to display the
10041         exception thrown during parsing.  This is turned off by default
10042         now, so the output of a failure from mcs is more graceful.
10043
10044         * namespace.cs: Track all the namespaces defined in a hashtable
10045         for quick lookup.
10046
10047         (IsNamespace): New method
10048
10049 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
10050
10051         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
10052         we know that we need to concatenate (full typename can never be
10053         null). 
10054
10055         * class.cs: ditto.
10056
10057         * statement.cs: Use a bitfield;  Do not initialize to null things
10058         which are done by the constructor by default.
10059
10060         * cs-parser.jay: bug fix, parameter was 4, not 3.
10061
10062         * expression.cs: Just use the property;
10063
10064         * statement.cs: No need for GetVariableInfo method.
10065
10066 2003-08-08  Martin Baulig  <martin@ximian.com>
10067
10068         * flowanalysis.cs (FlowReturns): This is now nested in the
10069         `FlowBranching' class.
10070         (MyBitVector): Moved this here from statement.cs.
10071         (FlowBranching.SiblingType): New enum type.
10072         (FlowBranching.CreateSibling): Added `SiblingType' argument.
10073
10074 2003-08-07  Martin Baulig  <martin@ximian.com>
10075
10076         * flowanalysis.cs (FlowBranchingType): This is now nested in the
10077         `FlowBranching' class and called `BranchingType'.
10078
10079 2003-08-07  Martin Baulig  <martin@ximian.com>
10080
10081         * flowanalysis.cs: Moved all the control flow analysis code into
10082         its own file.
10083
10084 2003-08-07  Martin Baulig  <martin@ximian.com>
10085
10086         * assign.cs (Assign.DoResolve): `target' must either be an
10087         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
10088         #37319.
10089
10090 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
10091
10092         * expression.cs (BinaryMethod): This kind of expression is created by the
10093         Binary class if it determines that the operator has to be handled
10094         by a method.
10095
10096         (BinaryDelegate): This kind of expression is created if we are
10097         dealing with a + or - operator on delegates.
10098
10099         (Binary): remove method, argumetns, and DelegateOperator: when
10100         dealing with methods, 
10101
10102         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
10103
10104         * statement.cs (Block): use bitfields for the three extra booleans
10105         we had in use.   Remove unused topblock parameter.
10106
10107         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
10108
10109         * assign.cs: Drop extra unneeded tests.
10110
10111 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
10112
10113         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
10114
10115         * statement.cs (Foreach): Use VariableStorage instead of
10116         LocalBuilders.   
10117
10118         * codegen.cs (VariableStorage): New class used by clients that
10119         require a variable stored: locals or fields for variables that
10120         need to live across yield.
10121
10122         Maybe provide a convenience api for EmitThis+EmitLoad?
10123
10124         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
10125         these bad boys.
10126
10127 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
10128
10129         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
10130         RemapParameterLValue): New methods that are used to turn a
10131         precomputed FieldInfo into an expression like this:
10132
10133                 instance.FieldInfo
10134
10135         The idea is to use this instead of making LocalVariableReference
10136         have more than one meaning.
10137
10138         * cs-parser.jay: Add error production to BASE.
10139
10140         * ecore.cs: Deal with TypeManager.GetField returning null, which
10141         is now a valid return value.
10142
10143         (FieldExprNoAddress): New expression for Fields whose address can
10144         not be taken.
10145
10146         * expression.cs (LocalVariableReference): During the resolve
10147         phases, create new expressions if we are in a remapping context.
10148         Remove code that dealt with remapping here.
10149
10150         (ParameterReference): same.
10151
10152         (ProxyInstance): New expression, like the `This' expression, but
10153         it is born fully resolved.  We know what we are doing, so remove
10154         the errors that are targeted to user-provided uses of `this'.
10155
10156         * statement.cs (Foreach): our variable is now stored as an
10157         Expression;  During resolution, follow the protocol, dont just
10158         assume it will return this.
10159
10160 2003-08-06  Martin Baulig  <martin@ximian.com>
10161
10162         * support.cs (SeekableStreamReader.cs): New public class.
10163
10164         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
10165         SeekableStreamReader instead of the normal StreamReader.
10166
10167 2003-08-04  Martin Baulig  <martin@ximian.com>
10168
10169         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
10170         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
10171         deambiguate casts and delegate invocations.
10172         (parenthesized_expression): Use the new tokens to ensure this is
10173         not a cast of method invocation.
10174
10175         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
10176         when reading a `)' and Deambiguate_CloseParens () was previously
10177         called.
10178
10179         * expression.cs (ParenthesizedExpression): New class.  This is
10180         just used for the CS0075 test.
10181         (Binary.DoResolve): Check for CS0075.   
10182
10183 2003-07-29  Ravi Pratap  <ravi@ximian.com>
10184
10185         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
10186         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
10187         reference comparison.
10188
10189         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
10190         examine the ReturnType for equality - this is necessary in the
10191         cases of implicit and explicit operators whose signature also
10192         includes the return type.
10193
10194 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
10195
10196         * namespace.cs: Cache the result of the namespace computation,
10197         instead of computing it every time.
10198
10199 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
10200
10201         * decl.cs: Use a global arraylist that we reuse over invocations
10202         to avoid excesive memory consumption.  Reduces memory usage on an
10203         mcs compile by one meg (45 average).
10204
10205         * typemanager.cs (LookupTypeReflection): In .NET pointers are
10206         private, work around that.
10207
10208 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
10209
10210         * literal.cs (IntLiteral): Define Zero and One static literals. 
10211
10212         * cs-parser.jay (integer_literal): use static literals to reduce
10213         memory usage for the most used literals (0, 1 and -1).  211kb
10214         reduced in memory usage.
10215
10216         Replace all calls to `new ArrayList' with `new
10217         ArrayList(4)' which is a good average number for most allocations,
10218         and also requires only 16 bytes of memory for its buffer by
10219         default. 
10220
10221         This reduced MCS memory usage in seven megabytes for the RSS after
10222         bootstrapping.
10223
10224 2003-07-28  Ravi Pratap  <ravi@ximian.com>
10225
10226         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
10227         handle params methods the correct way by forming only one
10228         applicable set with params and normal methods in them. Earlier we
10229         were looking at params methods only if we found no normal methods
10230         which was not the correct thing to do.
10231
10232         (Invocation.BetterFunction): Take separate arguments indicating
10233         when candidate and the best method are params methods in their
10234         expanded form.
10235
10236         This fixes bugs #43367 and #46199.
10237
10238         * attribute.cs: Documentation updates.
10239
10240         (CheckAttribute): Rename to CheckAttributeTarget.
10241         (GetValidPlaces): Rename to GetValidTargets.
10242
10243         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
10244         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
10245
10246         Fixes bug #44468.
10247
10248 2003-07-28  Miguel de Icaza  <miguel@ximian.com>
10249
10250         * codegen.cs: Compute IsGeneric correctly.
10251
10252         * cs-parser.jay: Introduce OP_GENERIC_LT for the grammar ambiguity
10253         resolution. 
10254
10255         Bring back (temporarily) OP_LEFT_SHIFT, OP_RIGHT_SHIFT,
10256         OP_SHIFT_RIGHT_ASSIGN, OP_SHIFT_LEFT_ASSIGN.  There were too many
10257         regressions, and I was chasing more bugs than I required.
10258
10259         * interface.cs: Use expressions for base type names (like classes
10260         and structs have been doing for a while now), and resolve that.
10261         This patch should probably go into head as well.
10262
10263         This makes it one less user of FindType.
10264
10265 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
10266
10267         This compiler can not self host currently.  Need to fix that.
10268         
10269         * Makefile: compile to `gmcs.exe'
10270
10271         * driver.cs: Turn on v2 by default on gmcs.
10272
10273         * generic.cs (ConstructedType): Does no longer take a container
10274         type argument;  That will be taken care of later.
10275
10276         (ConstructedType.DoResolve, ConstructedType.ResolveAsTypeStep):
10277         Use SimpleName to resolve for now, so we can continue the work on
10278         the parser, until we get Type.GetType that understands generics.
10279
10280         (ConstructedType.ToString): Implement
10281
10282         (TypeArguments.Resolve): Resolve the child expressions as types. 
10283         
10284         * cs-parser.jay: Rename interface_constraints to
10285         type_parameter_constraints
10286
10287         (namespace_or_type_name): Only use constructed types for the basic
10288         construction, we will deal with identifier<...> later.
10289
10290         (type/type_name): No longer call DecomposeQI, as
10291         namespace_or_type_name is always decoded now.
10292         
10293 2003-07-22  Ravi Pratap  <ravi@ximian.com>
10294
10295         * expression.cs (Invocation.OverloadResolve): Follow the spec more
10296         closely: we eliminate methods in base types when we have an
10297         applicable method in a top-level type.
10298
10299         Please see section 14.5.5.1 for an exact description of what goes
10300         on. 
10301
10302         This fixes bug #45127 and a host of other related to corlib compilation.
10303
10304         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
10305         array is the method corresponding to the top-level type (this is
10306         because of the changes made to icall.c) so we change this
10307         accordingly.
10308
10309         (MethodGroupExpr.Name): This too.
10310
10311         * typemanager.cs (GetElementType): New method which does the right
10312         thing when compiling corlib. 
10313
10314         * everywhere: Make use of the above in the relevant places.
10315
10316 2003-07-22  Martin Baulig  <martin@ximian.com>
10317
10318         * cs-parser.jay (invocation_expression): Moved
10319         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
10320         `cast_expression', but create a InvocationOrCast which later
10321         resolves to either an Invocation or a Cast.
10322
10323         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
10324         method; call this before EmitStatement() to make sure that this
10325         expression can be used as a statement.
10326
10327         * expression.cs (InvocationOrCast): New class; resolves to either
10328         an Invocation or a Cast.
10329
10330         * statement.cs (StatementExpression): Call ResolveStatement() on
10331         the ExpressionStatement before emitting it.
10332
10333 2003-07-21  Martin Baulig  <martin@ximian.com>
10334
10335         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
10336         `ref' and `out' attributes match; fixes #46220.
10337         (MemberAccess.ResolveMemberAccess): You can't reference a type
10338         through an expression; fixes #33180.
10339         (Indexers.GetIndexersForType): Don't return the indexers from
10340         interfaces the class implements; fixes #46502.
10341
10342 2003-07-21  Martin Baulig  <martin@ximian.com>
10343
10344         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
10345         CS0661 checks; fixes bug #30442.
10346
10347 2003-07-21  Martin Baulig  <martin@ximian.com>
10348
10349         * decl.cs (AdditionResult): Added `Error'.
10350
10351         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
10352
10353         * typemanager.cs (TypeManager.ChangeType): Catch exceptions; makes
10354         cs0031.cs actually work.
10355
10356  2003-07-20  Miguel de Icaza  <miguel@ximian.com>
10357  
10358         * cs-parser.jay (namespace_name): do not use
10359         namespace_or_type_name, use qualified_identifier, because
10360         namespace_or_type_name will soon return a composed expression
10361         instead of a string.
10362  
10363         (namespace_or_type_name): Instead of returning a string, now this
10364         production returns an expression.
10365  
10366         * codegen.cs (EmitContext): Setup IsGeneric property based on
10367         whether our DeclSpace is generic, our the method is generic.
10368  
10369         * modifier.cs (Modifiers.METHOD_GENERIC): New definition, use if
10370         the method is generic.
10371  
10372         * cs-parser.jay (type_arguments, opt_type_argument_list,
10373         type_parameters, type_parameter_list, opt_type_parameter_list,
10374         type_parameter,, opt_type_parameter_constraints_clauses,
10375         type_parameter_constraints_clauses,
10376         type_parameter_constraint_clause, type_parameter_constraint,
10377         interface_constraints): Add new production
10378  
10379         * decl.cs (DeclSpace): IsGeneric, flag to track whether this
10380         DeclSpace is generic or not.
10381  
10382         (DeclSpace.SetParameterInfo): New routine, used to set the
10383         parameter info for a type.
10384  
10385         (DeclSpace.LookupGeneric): Lookups a name, and if it is a generic,
10386         returns a GenericTypeExpr
10387  
10388         * ecore.cs (SimpleName.ResolveAsTypeStep): If our container is
10389         generic, lookup the generic argument.
10390  
10391         * attribute.cs: Do not allow TypeParameterExpressions in
10392         Attributes.
10393  
10394         * class.cs: Do not allow the Main method to be defined in a
10395         Generic container.
10396  
10397         * expression.cs (SizeOf): Do not allow generic types to be used as
10398         arguments to sizeof.
10399  
10400         * typemanager.cs (IsGeneric): Wrapper for Reflection when we have
10401         it: whether a type is generic or not.  Only works for types we are
10402         currently building for now.
10403         
10404 2003-07-20  Martin Baulig  <martin@ximian.com>
10405
10406         * namespace.cs: Fixed that bug which caused a crash when compiling
10407         the debugger's GUI.
10408
10409 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
10410
10411         * typemanager.cs (LookupTypeReflection): Never expose types which
10412         are NotPublic, NestedPrivate, NestedAssembly, or
10413         NestedFamANDAssem.  We used to return these, and later do a check
10414         that would report a meaningful error, but the problem is that we
10415         would not get the real match, if there was a name override.
10416
10417 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
10418
10419         * namespace.cs (Namespace, Name): Do not compute the namespace
10420         name dynamically, compute it in the constructor.  This reduced
10421         memory usage by 1697 KB.
10422
10423         * driver.cs: Use --pause to pause at the end.
10424
10425 2003-07-17  Peter Williams  <peter@newton.cx>
10426
10427         * Makefile: Change the name of the test target so that it doesn't
10428         conflict with the recursive test target.
10429
10430 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
10431
10432         * expression.cs (LocalVariableReference.Emit, EmitAssign,
10433         AddressOf): Do not use EmitThis, that was wrong, use the actual
10434         this pointer.
10435
10436 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
10437
10438         * class.cs (MethodData.Define): While checking if a method is an
10439         interface implementation, improve the test: If we are not public
10440         (use new test here: use the computed MethodAttributes directly,
10441         instead of the parsed modifier flags) check if the `implementing'
10442         method comes from an interface or not.
10443
10444         * pending.cs (VerifyPendingMethods): Slightly better error
10445         message.
10446
10447         * makefile: add test target that does the mcs bootstrap.
10448
10449 2003-07-16  Ravi Pratap  <ravi@ximian.com>
10450
10451         * interface.cs (Define): Do nothing here since there are no
10452         members to populate etc. Move the attribute emission out of here
10453         since this was just totally the wrong place to put it. Attribute
10454         application happens during the 'Emit' phase, not in the 'Define'
10455         phase.
10456
10457         (Emit): Add this method and move the attribute emission here
10458
10459         * rootcontext.cs (EmitCode): Call the Emit method on interface
10460         types too.
10461
10462 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
10463
10464         * expression.cs (OverloadResolve): Report error only if Location
10465         is not 'Null' which means that there was a probe going on.
10466
10467 2003-07-14  Martin Baulig  <martin@ximian.com>
10468
10469         * expression.cs (ConditionalLogicalOperator): New public class to
10470         implement user defined conditional logical operators.
10471         This is section 14.11.2 in the spec and bug #40505.
10472
10473 2003-07-14  Martin Baulig  <martin@ximian.com>
10474
10475         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
10476
10477 2003-07-14  Martin Baulig  <martin@ximian.com>
10478
10479         * codegen.cs (EmitContext.InFixedInitializer): New public field.
10480
10481         * ecore.cs (IVariable.VerifyFixed): New interface method.
10482
10483         * expression.cs (Unary.ResolveOperator): When resolving the `&'
10484         operator, check whether the variable is actually fixed.  Fixes bug
10485         #36055.  Set a variable definitely assigned when taking its
10486         address as required by the spec.
10487
10488         * statement.cs (LocalInfo.IsFixed): New field.
10489         (LocalInfo.MakePinned): Set `IsFixed' to true.
10490
10491 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
10492
10493         * attribute.cs (Attribute.Resolve): While doing a Member lookup
10494         for .ctors, ensure that we only ask for members declared in the
10495         attribute type (BindingFlags.DeclaredOnly).
10496
10497         Fixes bug #43632.
10498
10499         * expression.cs (Error_WrongNumArguments): Report error 1501
10500         correctly the way CSC does.
10501
10502 2003-07-13  Martin Baulig  <martin@ximian.com>
10503
10504         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
10505         lookup on the fully qualified name, to make things like "X.X" work
10506         where "X.X" is a fully qualified type name, but we also have a
10507         namespace "X" in the using list.  Fixes #41975.
10508
10509 2003-07-13  Martin Baulig  <martin@ximian.com>
10510
10511         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
10512         function. If we're a CompoundAssign, we need to create an embedded
10513         CompoundAssign, not an embedded Assign.
10514         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
10515         Fixes #45854.
10516
10517 2003-07-13  Martin Baulig  <martin@ximian.com>
10518
10519         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
10520         work to fix bug #46088.
10521
10522 2003-07-13  Ravi Pratap <ravi@ximian.com>
10523
10524         * class.cs (Operator.Emit): Do not emit attributes here - it is
10525         taken care of by the Method class that we delegate too. This takes
10526         care of bug #45876.
10527
10528 2003-07-10  Martin Baulig  <martin@ximian.com>
10529
10530         * expression.cs (TypeOfVoid): New class.
10531         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
10532
10533 2003-07-10  Martin Baulig  <martin@ximian.com>
10534
10535         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
10536         bug #35957.
10537
10538 2003-07-10  Martin Baulig  <martin@ximian.com>
10539
10540         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
10541         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
10542
10543         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
10544
10545         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
10546
10547 2003-07-10  Martin Baulig  <martin@ximian.com>
10548
10549         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
10550         of decimal.  Fixes #42850.
10551
10552         NOTE: I also fixed the created byte blob, but this doesn't work on
10553         the MS runtime and csc never produces any byte blobs for decimal
10554         arrays.
10555
10556 2003-07-10  Martin Baulig  <martin@ximian.com>
10557
10558         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
10559         structs; fixes #32068.
10560         (Block.AddChildVariableNames): Fixed #44302.
10561
10562 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10563
10564         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
10565
10566 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
10567
10568         * attribute.cs: And this test is onger needed.
10569
10570 2003-07-08  Martin Baulig  <martin@ximian.com>
10571
10572         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
10573         inaccessible types.  Fixes #36313.
10574
10575         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
10576
10577         * namespace.cs (NamespaceEntry): Create implicit entries for all
10578         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
10579         implicit entries for N1.N2 and N1.
10580
10581 2003-07-08  Martin Baulig  <martin@ximian.com>
10582
10583         Rewrote the handling of namespaces to fix a lot of the issues
10584         wrt. `using' aliases etc.
10585
10586         * namespace.cs (Namespace): Splitted this class into a
10587         per-assembly `Namespace' and a per-file `NamespaceEntry'.
10588
10589         * typemanager.cs (TypeManager.IsNamespace): Removed.
10590         (TypeManager.ComputeNamespaces): Only compute namespaces from
10591         loaded assemblies here, not the namespaces from the assembly we're
10592         currently compiling.
10593
10594 2003-07-08  Martin Baulig  <martin@ximian.com>
10595
10596         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
10597
10598 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
10599
10600         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
10601         already fixed it.  
10602
10603         I thought about the memory savings here, but LookupTypeReflection
10604         is used under already very constrained scenarios.  Compiling
10605         corlib or mcs only exposes one hit, so it would not really reduce
10606         any memory consumption.
10607
10608 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10609
10610         * typemanager.cs: fixes bug #45889 by only adding public types from
10611         other assemblies to the list of known types.
10612
10613 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
10614
10615         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
10616         on the type we resolved.
10617
10618 2003-07-05  Martin Baulig  <martin@ximian.com>
10619
10620         * pending.cs (PendingImplementation.ParentImplements): Don't
10621         create the proxy if the parent is abstract.
10622
10623         * class.cs (TypeContainer.DefineIndexers): Process explicit
10624         interface implementations first.  Fixes #37714.
10625
10626 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
10627
10628         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
10629         defined recursively;  but since we modify the input parameters
10630         (left is set to `this' temporarily), we reset this value if the
10631         left_is_explicit is false, which gives the original semantics to
10632         the code.  
10633
10634         * literal.cs (NullPointer): new class used to represent a null
10635         literal in a pointer context.
10636
10637         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
10638         type is a pointer, use a NullPointer object instead of a
10639         NullLiteral.   Closes 43687
10640
10641         (ExplicitConversion): Convert pointer values using
10642         the conv opcode to the proper type.
10643
10644         * ecore.cs (New): change ValueTypeVariable property into a method,
10645         that returns whether the valuetype is suitable for being used.
10646
10647         * expression.cs (Binary.DoNumericPromotions): Only return if we
10648         the int constant was a valid uint, and we can return both left and
10649         right as uints.  If not, we continue processing, to trigger the
10650         type conversion.  This fixes 39018.
10651
10652         * statement.cs (Block.EmitMeta): During constant resolution, set
10653         the CurrentBlock property on the emitcontext, so that we resolve
10654         constants propertly.
10655
10656 2003-07-02  Martin Baulig  <martin@ximian.com>
10657
10658         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
10659         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
10660
10661         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
10662         than emitting it here.
10663
10664         * statement.cs: Fixed some more flow analysis bugs.
10665
10666 2003-07-02  Martin Baulig  <martin@ximian.com>
10667
10668         * class.cs (MethodData.Define): When implementing interface
10669         methods, set Final unless we're Virtual.
10670
10671         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
10672         check work for interface methods.
10673
10674 2003-07-01  Martin Baulig  <martin@ximian.com>
10675
10676         * ecore.cs (EmitContext.This): Replaced this property with a
10677         GetThis() method which takes a Location argument.  This ensures
10678         that we get the correct error location for a CS0188.
10679
10680 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
10681
10682         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
10683         ImplicitStandardConversion.
10684
10685         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
10686
10687 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
10688
10689         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
10690         optimization.
10691
10692 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
10693
10694         * class.cs (Constructor.Define): Turn off initlocals for unsafe
10695         constructors.
10696
10697         (MethodData.Define): Turn off initlocals for unsafe methods.
10698
10699 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
10700
10701         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
10702         complete;  Fixes #37521.
10703
10704         * delegate.cs: Use Modifiers.TypeAttr to compute the
10705         TypeAttributes, instead of rolling our own.  This makes the flags
10706         correct for the delegates.
10707
10708 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
10709
10710         * class.cs (Constructor.Define): Set the private flag for static
10711         constructors as well.
10712
10713         * cs-parser.jay (statement_expression): Set the return value to
10714         null, to avoid a crash when we catch an error.
10715
10716 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
10717
10718         * cs-parser.jay: Applied patch from Jackson that adds support for
10719         extern and unsafe modifiers to destructor declarations.
10720
10721         * expression.cs: Report error 21 if the user is trying to index a
10722         System.Array.
10723
10724         * driver.cs: Add an error message, suggested by the bug report.
10725
10726         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
10727         if we do not have a ": this ()" constructor initializer.  Fixes 45149
10728
10729 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
10730
10731         * namespace.cs: Add some information to reduce FAQs.
10732
10733 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
10734
10735         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
10736         underlying enumeration types.  Fixes #43915.
10737
10738         * expression.cs: Treat ushort/short as legal values to be used in
10739         bitwise operations.
10740
10741 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
10742
10743         * delegate.cs: transfer custom attributes for paramenters from
10744         the delegate declaration to Invoke and BeginInvoke.
10745
10746 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
10747
10748         * attribute.cs: handle custom marshalers and emit marshal info
10749         for fields, too.
10750
10751 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
10752
10753         * makefile.gnu: Added anonymous.cs to the compiler sources.
10754
10755 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
10756
10757         * iterators.cs: Change the name of the proxy class to include two
10758         underscores.
10759
10760         * cs-parser.jay: Update grammar to include anonymous methods.
10761
10762         * anonymous.cs: new file.
10763
10764 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
10765
10766         * class.cs (Field.Define): Add missing test for pointers and
10767         safety. 
10768
10769 2003-05-27  Ravi Pratap  <ravi@ximian.com>
10770
10771         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
10772         we use the stobj opcode.
10773
10774         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
10775         since it wasn't the correct fix. 
10776
10777         It still is puzzling that we are required to use stobj for IntPtr
10778         which seems to be a ValueType.
10779
10780 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
10781
10782         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
10783         during regular simple name resolution.   Now, the trick is that
10784         instead of returning for processing the simplename, we do a
10785         TypeManager.LookupType (ie, a rooted lookup as opposed to a
10786         contextual lookup type).   If a match is found, return that, if
10787         not, return for further composition.
10788
10789         This fixes long-standing 30485.
10790
10791         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
10792         using the address to initialize an object, do an Stobj instead of
10793         using the regular Stelem.
10794
10795         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
10796         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
10797         Because if we are a BaseIndexerAccess that value will be true.
10798         Fixes 43643.
10799
10800         * statement.cs (GotoCase.Resolve): Return after reporting an
10801         error, do not attempt to continue. 
10802
10803         * expression.cs (PointerArithmetic.Emit): If our operand is a
10804         long, convert our constants to match the operand before
10805         multiplying.  Convert to I type before adding.   Fixes 43670.
10806
10807 2003-05-14  Ravi Pratap  <ravi@ximian.com>
10808
10809         * enum.cs (ImplicitConversionExists) : Rename to
10810         ImplicitEnumConversionExists to remove ambiguity. 
10811
10812         * ecore.cs (NullCast): New type of cast expression class which
10813         basically is very similar to EmptyCast with the difference being
10814         it still is a constant since it is used only to cast a null to
10815         something else
10816         (eg. (string) null)
10817
10818         * convert.cs (ImplicitReferenceConversion): When casting a null
10819         literal, we return a NullCast.
10820
10821         * literal.cs (NullLiteralTyped): Remove - I don't see why this
10822         should be around anymore.
10823
10824         The renaming (reported was slightly wrong). Corrections:
10825
10826         ConvertImplicitStandard -> ImplicitConversionStandard
10827         ConvertExplicitStandard -> ExplicitConversionStandard
10828
10829         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
10830         before passing them in !
10831
10832         * convert.cs (ImplicitConversionStandard): When comparing for
10833         equal expr and target types, ensure that expr is not a
10834         NullLiteral.
10835
10836         In general, we must not be checking (expr_type ==
10837         target_type) in the top level conversion methods
10838         (ImplicitConversion, ExplicitConversion etc). This checking is
10839         done in the methods that they delegate to.
10840
10841 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
10842
10843         * convert.cs: Move Error_CannotConvertType,
10844         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
10845         ImplicitNumericConversion, ImplicitConversionExists,
10846         ImplicitUserConversionExists, StandardConversionExists,
10847         FindMostEncompassedType, FindMostSpecificSource,
10848         FindMostSpecificTarget, ImplicitUserConversion,
10849         ExplicitUserConversion, GetConversionOperators,
10850         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
10851         TryImplicitIntConversion, Error_CannotConvertImplicit,
10852         ConvertImplicitRequired, ConvertNumericExplicit,
10853         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
10854         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
10855         its own file.
10856
10857         Perform the following renames:
10858
10859         StandardConversionExists -> ImplicitStandardConversionExists
10860         ConvertImplicit -> ImplicitConversion
10861         ConvertImplicitStandard -> ImplicitStandardConversion
10862         TryImplicitIntConversion -> ImplicitIntConversion
10863         ConvertImplicitRequired -> ImplicitConversionRequired
10864         ConvertNumericExplicit -> ExplicitNumericConversion
10865         ConvertReferenceExplicit -> ExplicitReferenceConversion
10866         ConvertExplicit -> ExplicitConversion
10867         ConvertExplicitStandard -> ExplicitStandardConversion
10868
10869 2003-05-19  Martin Baulig  <martin@ximian.com>
10870
10871         * statement.cs (TypeInfo.StructInfo): Made this type protected.
10872         (TypeInfo): Added support for structs having structs as fields.
10873
10874         * ecore.cs (FieldExpr): Implement IVariable.
10875         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
10876         VariableInfo for the field.
10877
10878 2003-05-18  Martin Baulig  <martin@ximian.com>
10879
10880         * expression.cs (This.DoResolve): Report a CS0027 if we're
10881         emitting a field initializer.
10882
10883 2003-05-18  Martin Baulig  <martin@ximian.com>
10884
10885         * expression.cs (This.ResolveBase): New public function.
10886         (This.DoResolve): Check for CS0188.
10887
10888         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
10889         This.Resolve().
10890
10891         * ecore.cs (MethodGroupExpr.DoResolve): Set the
10892         `instance_expression' to null if we don't have any non-static
10893         methods.
10894
10895 2003-05-18  Martin Baulig  <martin@ximian.com>
10896
10897         Reworked the way how local variables and parameters are handled by
10898         the flow analysis code.
10899
10900         * statement.cs (TypeInfo, VariableMap): New public classes.
10901         (VariableInfo): New public class.  This is now responsible for
10902         checking whether a variable has been assigned.  It is used for
10903         parameters and local variables.
10904         (Block.EmitMeta): Take the InternalParameters as argument; compute
10905         the layout of the flow vectors here.
10906         (Block.LocalMap, Block.ParameterMap): New public properties.
10907         (FlowBranching): The .ctor doesn't get the InternalParameters
10908         anymore since Block.EmitMeta() now computes the layout of the flow
10909         vector.
10910         (MyStructInfo): This class is now known as `StructInfo' and nested
10911         in `TypeInfo'; we don't access this directly anymore.
10912
10913         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
10914         property and removed IsAssigned(), IsFieldAssigned(),
10915         SetAssigned() and SetFieldAssigned(); we now call them on the
10916         VariableInfo so we don't need to duplicate this code everywhere.
10917
10918         * expression.cs (ParameterReference): Added `Block block' argument
10919         to the .ctor.
10920         (LocalVariableReference, ParameterReference, This): The new
10921         VariableInfo class is now responsible for all the definite
10922         assignment stuff.
10923
10924         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
10925         IsParameterAssigned, SetParameterAssigned): Removed.
10926
10927 2003-05-18  Martin Baulig  <martin@ximian.com>
10928
10929         * typemanager.cs (InitCoreTypes): Try calling
10930         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
10931         the 3-args-version.  Corlib now also needs our `void_type'.
10932         (GetMethod): Added overloaded version which takes an optional
10933         `bool report_errors' to allow lookups of optional methods.
10934
10935 2003-05-12  Martin Baulig  <martin@ximian.com>
10936
10937         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
10938         only used for locals and not for parameters.
10939
10940 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
10941
10942         * support.cs (InternalParameters.ParameterType): Return the
10943         ExternalType of the parameter.
10944
10945         * parameter.cs (Parameter.ExternalType): drop the two arguments,
10946         they were unused.
10947
10948 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
10949
10950         * class.cs (MethodData.Define): Do not set the `newslot' on
10951         interface members, if they are also flagged as "override".
10952
10953         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
10954         better code for ++i and i++.  This only works for static fields
10955         and local variables.
10956
10957         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
10958         want to pull the DeclSpace out of the builder_to_declspace instead
10959         of the TypeBuilder (like in TypeContainer.FindMembers).
10960
10961         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
10962         instead of LookupTypeContainer.  Fixes the crash on .NET for
10963         looking up interface members.
10964
10965         * const.cs: Create our own emit context during the Definition
10966         stage, so that constants are evaluated in the proper context, when
10967         a recursive definition happens.
10968
10969 2003-05-11  Martin Baulig  <martin@ximian.com>
10970
10971         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
10972         new block for a switch section.
10973         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
10974         the adding/lookup in the switch block.  Fixes #39828.
10975
10976 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
10977
10978         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
10979         functionality: I needed to convert the data after I had performed
10980         the add/sub operation into the operands type size.
10981
10982         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
10983         pass the type for the box operation, otherwise the resulting
10984         object would have been of type object.
10985
10986         (BoxedCast): Add constructor to specify the type to box as.
10987
10988 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
10989
10990         * iterators.cs: I was reusing the `count' variable inadvertently,
10991         take steps to not allow this to happen.
10992
10993 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
10994
10995         * attribute.cs (Attribute.Resolve): Params attributes are encoded
10996         by creating an array at the point where the params starts and
10997         putting all those arguments there, then adjusting the size of the
10998         array.
10999
11000 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
11001
11002         * expression.cs (New.AddressOf): Implement interface
11003         IMemoryLocation.  This is used when the `new' operator is used in
11004         the context of an invocation to a method on a value type.
11005
11006         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
11007         example. 
11008
11009         * namespace.cs: Also check the using aliases here.
11010
11011         * driver.cs: Move the test for using validity after the types have
11012         been entered, so we do a single pass that also includes the using
11013         aliases. 
11014
11015         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
11016         in the regular case.   CreateSiblingForFinally is doing extra
11017         error checking.
11018
11019         * attribute.cs (GetAttributeArgumentExpression): Store the result
11020         on an out value, and use the return value to indicate failure
11021         instead of using null (which is a valid return for Constant.GetValue).
11022
11023         * statement.cs: Perform the analysis flow for the increment
11024         portion after the statement, because this will be the real flow of
11025         execution.  Fixes #42385
11026
11027         * codegen.cs (EmitContext.EmitArgument,
11028         EmitContext.EmitStoreArgument): New helper functions when the
11029         RemapToProxy flag is set.
11030
11031         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
11032         function.
11033
11034         Add support for remapping parameters. 
11035
11036         * iterators.cs: Propagate parameter values;  Store parameter
11037         values in the proxy classes.
11038
11039 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
11040
11041         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
11042         need a proxy reference;  I do not know what I was thinking
11043
11044         * cs-parser.jay (constructor_initializer): catch another error,
11045         and display nice message.
11046
11047         (field_declaration): catch void field declaration
11048         to flag a better error. 
11049
11050         * class.cs (MemberBase.CheckBase): Report an error instead of a
11051         warning if a new protected member is declared in a struct. 
11052         (Field.Define): catch the error of readonly/volatile.
11053
11054         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
11055
11056         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
11057         volatile variable is taken
11058
11059 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
11060
11061         * statement.cs (Fixed.Resolve): Report an error if we are not in
11062         an unsafe context.
11063
11064 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
11065
11066         * typemanager.cs: reuse the code that handles type clashes for
11067         delegates and enumerations.
11068
11069         * class.cs (Report28): Always report.
11070
11071         * expression.cs (EncodeAsAttribute): Allow nulls here.
11072
11073 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
11074
11075         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
11076         the functionality for testing whether an expression is valid for
11077         an attribute here.  Also handle the case of arrays of elements
11078         being stored. 
11079
11080         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
11081         encoding a linear array into an array of objects that are suitable
11082         to be passed to an CustomAttributeBuilder.
11083
11084         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
11085
11086         * ecore.cs: (FieldExpr): Handle field remapping here.
11087
11088         * iteratators.cs: Pass the instance variable (if the method is an
11089         instance method) to the constructors, so we can access the field
11090         variables on the class.
11091
11092         TODO: Test this with structs.  I think the THIS variable on
11093         structs might have to be a pointer, and not a refenrece
11094
11095 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
11096
11097         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
11098         local variables to fields in a proxy class.
11099
11100         * iterators.cs (PopulateProxy): Rename our internal fields to
11101         <XXX>.  
11102         Create a <THIS> field if we are an instance method, so we can
11103         reference our parent container variables.
11104         (MapVariable): Called back from the EmitContext code to enter a
11105         new variable to field mapping into the proxy class (we just create
11106         a FieldBuilder).
11107
11108         * expression.cs
11109         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
11110         for using the remapped locals to fields.
11111
11112         I placed the code here, because that gives the same semantics to
11113         local variables, and only changes the Emit code.
11114
11115         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
11116         statements inside iterators.
11117         (VariableInfo): Add a FieldBuilder for the cases when we are
11118         remapping local variables to fields in a proxy class
11119
11120         * ecore.cs (SimpleNameResolve): Avoid testing two times for
11121         current_block != null.
11122
11123         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
11124         not cope with strings, as it has been moved to the
11125         TableSwitchEmit.  Fixed bug in switch generation.
11126
11127         * expression.cs (New.DoResolve): Provide more context for the user
11128         when reporting an error.
11129
11130         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
11131         pointers. 
11132
11133         * expression.cs (MemberAccess.DoResolve): When we get a type back,
11134         check the permissions for it.  Note than in a type-resolution
11135         context the check was already present in DeclSpace.ResolveType,
11136         but was missing from the MemberAccess.
11137
11138         (ArrayCreation.CheckIndices): warn if the user has
11139         more nested levels of expressions, but there are no more
11140         dimensions specified.  Avoids crash on bug 41906.
11141
11142 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
11143
11144         * statement.cs (Block): replace Implicit bool, for a generic
11145         flags.   
11146         New flag: `Unchecked'.  This is used during the EmitMeta phase
11147         (which is out-of-line with the regular Resolve/Emit process for a
11148         statement, as this is done ahead of time, but still gets a chance
11149         to call constant resolve).
11150
11151         (Block.Flags): new enum for adding a new flag.
11152
11153         (Block.EmitMeta): track the state of unchecked.
11154
11155         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
11156         to enable constant resolution to work there as well.
11157
11158 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
11159
11160         * typemanager.cs (ienumerable_type): Also look up
11161         System.Collections.IEnumerable. 
11162
11163 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
11164
11165         TODO: Test more than one conditional per method.
11166
11167         * class.cs (Indexer.Define): Report the location where the user is
11168         referencing the unsupported feature.
11169
11170         (MethodData): Overload the use of `conditionals' to
11171         minimize the creation of needless ArrayLists.   This saves roughly
11172         212kb on my machine.
11173
11174         (Method): Implement the new IIteratorContainer interface.
11175         (Method.SetYields): Implement the method by setting the ModFlags
11176         to contain METHOD_YIELDS.
11177
11178         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
11179         which just got set to null.
11180
11181         * iterators.cs: New file.
11182
11183         (Yield, YieldBreak): New statements.
11184
11185         * statement.cs (Return.Resolve): Flag an error if we are used in
11186         an iterator method.
11187
11188         * codegen.cs (InIterator): New flag set if the code is being
11189         compiled in an iterator method.
11190
11191         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
11192         internal modifier, and we just use it to avoid adding extra
11193         fields, as this is seldom used.  
11194
11195         * cs-parser.jay: Add yield_statement (yield and yield break).
11196
11197         * driver.cs: New flag -v2 to turn on version 2 features. 
11198
11199         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
11200         hashtable when v2 is enabled.
11201
11202 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
11203
11204         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
11205         there is already a namespace defined with this name.
11206
11207         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
11208         people upgraded their corlibs.
11209
11210         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
11211         always use fully qualified types, no need to use the compiler
11212         front end.
11213
11214         (TypeManager.IsNamespace): Use binarysearch.
11215
11216         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
11217         AddDelegate): I did not quite use the new IsValid API properly: I
11218         have to pass the short-name and the fullname.  I was passing only
11219         the basename instead of the fullname sometimes. 
11220
11221         (TypeContainer.DefineType): call NamespaceClash.
11222
11223         * interface.cs (Interface.DefineType): use NamespaceClash before
11224         defining the type.
11225
11226         * delegate.cs (Delegate.DefineType): use NamespaceClash before
11227         defining the type.
11228
11229         * enum.cs: (Enum.DefineType): use NamespaceClash before
11230         defining the type.
11231
11232         * typemanager.cs (: 3-line patch that gives us some tasty 11%
11233         speed increase.  First, use the negative_hits cache when we get a
11234         negative.  Second, add the type with its full original name
11235         instead of the new . and + encoded name (reflection uses + to
11236         separate type from a nested type).  Use LookupTypeReflection
11237         directly which bypasses the type->name hashtable (that we already
11238         know does not contain the type.
11239
11240         * decl.cs (DeclSpace.ResolveTypeExpr): track the
11241         location/container type. 
11242
11243         * driver.cs: When passing utf8, use directly the UTF8Encoding.
11244
11245 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
11246
11247         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
11248
11249         * delegate.cs (NewDelegate.Resolve): Test whether an instance
11250         method is being referenced in the method group from a static
11251         context, and report error 120 if so.
11252
11253         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
11254         Error118. 
11255
11256         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
11257         is created, we create the A namespace).
11258
11259         * cs-parser.jay: A namespace also introduces a DeclarationFound.
11260         Fixes #41591
11261
11262 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
11263
11264         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
11265         invocation to ModuleBuilder.GetType with the same values will
11266         return a new type instance, so we need to cache its return
11267         values. 
11268
11269         * expression.cs (Binary.ResolveOperator): Only allow the compare
11270         operators on enums if they are of the same type.
11271
11272         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
11273         types of ValueType on their own case.  Before we were giving them
11274         the same treatment as objects.
11275
11276         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
11277         fullname.  Short name is used to compare against container name.
11278         Fullname is used to check against defined namespace names.
11279
11280         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
11281         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
11282
11283         (Method.CheckBase): Call parent.
11284         (MemberBase.CheckBase): Check for protected members on sealed
11285         classes.
11286         (PropertyBase.CheckBase): Call parent.
11287         (Field.Define): Call parent.
11288
11289         * report.cs: Negative error codes are now mapped to 8000 - code,
11290         so that the display is render more nicely.
11291
11292         * typemanager.cs: Do not use try/catch, instead report a regular
11293         error. 
11294
11295         (GetPointerType, GetReferenceType): These methods provide
11296         mechanisms to obtain the T* and T& from a T.  We had the code
11297         previously scattered around the code base, and it also used
11298         TypeManager.LookupType that would go through plenty of caches.
11299         This one goes directly to the type source.
11300
11301         In some places we did the Type.GetType followed by
11302         ModuleBuilder.GetType, but not in others, so this unifies the
11303         processing as well.
11304
11305         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
11306         statements now that we have namespace information.
11307
11308         * typemanager.cs (IsNamespace): New method, returns whether the
11309         string presented is a namespace or not.
11310
11311         (ComputeNamespaces): New public entry point, computes the list of
11312         available namespaces, using the GetNamespaces API call in Mono, or
11313         the slower version in MS.NET.   
11314
11315         Now before we start the semantic analysis phase, we have a
11316         complete list of namespaces including everything that the user has
11317         provided.
11318
11319         Deleted old code to cache namespaces in .nsc files.
11320
11321 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
11322
11323         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
11324         class/struct location definition Location for the implicit
11325         constructor location.
11326
11327         (Operator.Define): Use the location of the operator for the
11328         implicit Method definition.
11329
11330         (Constructor.Emit): use the constructor location for the implicit
11331         base initializer constructor.
11332
11333         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
11334         and the Expression class now contains two new methods:
11335
11336         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
11337         isolate type lookup from the rest of the resolution process.
11338
11339         Since we use Expressions to hold type definitions due to the way
11340         we parse the input we have historically overloaded Resolve to
11341         perform the Type lookups if a special flag is passed.  Now this is
11342         eliminated and two methods take their place. 
11343
11344         The differences in the two methods between xStep and xTerminal is
11345         that xStep is involved in our current lookup system that uses
11346         SimpleNames to compose a name, while xTerminal is used just to
11347         catch the case where the simplename lookup failed.
11348
11349 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
11350
11351         * expression.cs (ResolveMemberAccess): Remove redundant code.
11352         TypeExpr expressions are always born fully resolved.
11353
11354         * interface.cs (PopulateMethod): Do not lookup the types twice.
11355         We were doing it once during SemanticAnalysis and once during
11356         PopulateMethod.
11357
11358         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
11359         in local variable type definitions, were being returned as a
11360         SimpleName (we decomposed everything into a string), that is
11361         because primary_expression was being used instead of a type in the
11362         grammar (reduce/reduce conflicts).
11363
11364         The part that was wrong is that we converted the expression into a
11365         string (an oversimplification in one hand, compounded with primary
11366         expressions doing string concatenation).
11367
11368         So things like:
11369
11370         A.B.C [] x;
11371
11372         Would return "A.B.C[]" as a SimpleName.  This stopped things like
11373         using clauses from working on this particular context.  And a type
11374         was being matched directly against "A.B.C[]".
11375
11376         We now use the correct approach, and allow for ComposedCast to be
11377         part of the unary expression.  So the "A.B.C []" become a composed
11378         cast of "A.B.C" (as a nested group of MemberAccess with a
11379         SimpleName at the end) plus the rank composition "[]". 
11380
11381         Also fixes 35567
11382
11383 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
11384
11385         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
11386         for the access level checking.
11387
11388         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
11389         `TypeContainer container', because I kept getting confused when I
11390         was debugging this code.
11391
11392         * expression.cs (Indexers): Instead of tracking getters/setters,
11393         we now track them in parallel.  We create one arraylist less, but
11394         most importantly it is possible now for the LValue code to find a
11395         matching get for a set.
11396
11397         (IndexerAccess.DoResolveLValue): Update the code.
11398         GetIndexersForType has been modified already to extract all the
11399         indexers from a type.  The code assumed it did not.
11400
11401         Also make the code set the correct return type for the indexer.
11402         This was fixed a long time ago for properties, but was missing for
11403         indexers.  It used to be void_type.
11404
11405         (Binary.Emit): Test first for doubles instead of
11406         floats, as they are more common.
11407
11408         (Binary.EmitBranchable): Use the .un version of the branch opcodes
11409         when dealing with floats and the <=, >= operators.  This fixes bug
11410         #39314 
11411
11412         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
11413         to load the array value by emitting a load on the foreach variable
11414         type.  This was incorrect.  
11415
11416         We now emit the code to load an element using the the array
11417         variable type, and then we emit the conversion operator.
11418
11419         Fixed #40176
11420
11421 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
11422
11423         * attribute.cs: Avoid allocation of ArrayLists in the common case.
11424
11425 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
11426
11427         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
11428         test for protection before we test for signatures. 
11429
11430         (MethodSignature.ToString): implement.
11431
11432         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
11433         to the case where we reduced into a LongConstant.
11434
11435         * decl.cs (CheckAccessLevel): If the type is an array, we can not
11436         depend on whether the information is acurrate, because the
11437         Microsoft runtime will always claim that the array type is public,
11438         regardless of the real state.
11439
11440         If the type is a pointer, another problem happens: the type is
11441         reported as non-public in Microsoft.  
11442
11443         In both cases we have to call CheckAccessLevel recursively with
11444         the underlying type as the argument to be tested.
11445
11446 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
11447
11448         * assign.cs (Assign.Emit): If we are dealing with a compound
11449         assignment expression, we should use the code path that stores the
11450         intermediate result in a temporary value.  This fixes #40903.
11451
11452         *expression.cs (Indirection.ToString): Provide ToString method for
11453         debugging. 
11454
11455 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
11456
11457         * class.cs: Null out fields holding references to Block objects so
11458         they can be garbage collected.
11459
11460         * expression.cs (OverloadResolve): Remove unused local.
11461
11462 2003-04-07  Martin Baulig  <martin@ximian.com>
11463
11464         * codegen.cs (EmitContext.CurrentFile): New public field.
11465         (EmitContext.Mark): Use the CurrentFile to check whether the
11466         location is in the correct file.
11467         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
11468
11469 2003-04-07  Martin Baulig  <martin@ximian.com>
11470
11471         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
11472
11473         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
11474         location.  [FIXME: The location argument which gets passed to this
11475         method is sometimes wrong!]
11476
11477 2003-04-07  Nick Drochak <ndrochak@gol.com>
11478
11479         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
11480
11481 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
11482
11483         * expression.cs (Indirection.EmitAssign): We were using the
11484         temporary, but returning immediately instead of continuing the
11485         EmitAssing flow.
11486
11487 2003-04-06  Martin Baulig  <martin@ximian.com>
11488
11489         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
11490         if it's a nested child, but also deriving from the outer class.
11491         See test 190.cs.
11492
11493         * typemanager.cs (IsNestedChildOf): Make this work if it's a
11494         nested child, but also deriving from the outer class.  See
11495         test-190.cs.
11496         (FilterWithClosure): We may access private members of the outer
11497         class if we're a nested child and deriving from the outer class.
11498         (RealMemberLookup): Only set `closure_private_ok' if the
11499         `original_bf' contained BindingFlags.NonPublic.
11500
11501 2003-04-05  Martin Baulig  <martin@ximian.com>
11502
11503         * expression.cs (SizeOf.DoResolve): Use ResolveTypeExpr, so we can
11504         probe if its a type parameter, and if so, flag an error.
11505
11506         * decl.cs: Move here the SetParameterInfo code from class.cs.
11507         Handle IsGeneric here.
11508
11509         Handle a variety of errors in the parameter info definition.
11510
11511         * ecore.cs (SimpleName.DoResolveType): Handle look ups for generic
11512         type parameters here.
11513
11514         * cs-parser.jay (class_declaration): report errors for parameters
11515         here as well.
11516
11517 2003-01-21  Miguel de Icaza  <miguel@ximian.com>
11518
11519         * generic.cs: New file, contains support code for generics.
11520
11521         * cs-parser.jay: Remove OP_SHIFT_LEFT, OP_SHIFT_RIGHT,
11522         OP_SHIFT_LEFT_ASSIGN, OP_SHIFT_RIGHT_ASSIGN.
11523
11524         Update parser for the above removals.
11525
11526         * cs-tokenizer.cs: Do not handle <<= or >>= specially.  This is
11527         now taken care of in the parser.
11528
11529 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
11530
11531         * class.cs (Event.Define): Do not allow abstract events to have
11532         initializers. 
11533
11534 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
11535
11536         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
11537         block in event declarations.
11538
11539         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
11540         value type, get its address.
11541
11542         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
11543         leaving a class on the stack instead of a boolean value (int
11544         0/1).  Change the code so we compare against null, and then the
11545         result against zero.
11546
11547         * class.cs (TypeContainer.GetClassBases): We were checking for the
11548         parent class being sealed too late.
11549
11550         * expression.cs (Binary.Emit): For <= and >= when dealing with
11551         floating point values, use cgt.un and clt.un instead of cgt and
11552         clt alone.
11553
11554 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
11555
11556         * statement.cs: Apply the same optimization as MS: skip the 
11557         GetEnumerator returning an IEnumerator, and use the one returning a 
11558         CharEnumerator instead. This allows us to avoid the try-finally block 
11559         and the boxing.
11560
11561 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
11562
11563         * cs-parser.jay: Attributes cannot be applied to
11564                          namespaces. Fixes #40473
11565
11566 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11567
11568         * class.cs:
11569         (Add*): check if the name is valid using the full name for constants,
11570         fields, properties and events.
11571
11572 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
11573
11574         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
11575         char constants to be part of the enumeration.
11576
11577         * expression.cs (Conditional.DoResolve): Add support for operator
11578         true. Implements the missing functionality from 14.12
11579
11580         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
11581         operator true/false as required by the spec.
11582
11583         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
11584         implicit conversion to boolean.
11585
11586         * statement.cs (Statement.ResolveBoolean): A boolean expression is
11587         also one where the type implements `operator true'. 
11588
11589         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
11590         get an expression that will invoke operator true based on an
11591         expression.  
11592
11593         (GetConversionOperators): Removed the hack that called op_True
11594         here.  
11595
11596         (Expression.ResolveBoolean): Move this from Statement.
11597
11598 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
11599
11600         * ecore.cs (FieldExpr): do not allow initialization of initonly
11601         fields on derived classes
11602
11603 2003-03-13  Martin Baulig  <martin@ximian.com>
11604
11605         * statement.cs (Block.Emit): Call ig.BeginScope() and
11606         ig.EndScope() when compiling with debugging info; call
11607         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
11608
11609 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
11610
11611         * expression.cs (Indexers): Do not construct immediately, allow
11612         for new members to be appended as we go.  Fixes 38143
11613
11614 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11615
11616         * expression.cs: save/restore context when resolving an unchecked
11617         expression.
11618
11619 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
11620
11621         * cfold.cs: Catch division by zero in modulus operator during
11622         constant folding.
11623
11624 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
11625
11626         * interface.cs (Interface.DefineMembers): Avoid defining members
11627         twice. 
11628
11629 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
11630
11631         * driver.cs: handle the +/- options for -noconfig
11632
11633         * statement.cs (Unckeched.Resolve): Also track the state of
11634         unchecked in the Resolve phase.
11635
11636 2003-02-27  Martin Baulig  <martin@ximian.com>
11637
11638         * ecore.cs (Expression.MemberLookup): Don't create a
11639         MethodGroupExpr for something which is not a method.  Fixes #38291.
11640
11641 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
11642
11643         * class.cs (MemberBase.CheckParameters): Also check that the type
11644         is unmanaged if it is a pointer.
11645
11646         * expression.cs (SizeOf.Resolve): Add location information.
11647
11648         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
11649         a managed type is declared.
11650
11651         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
11652         parameter modifiers as well.  Fixes bug 38606
11653
11654         * class.cs: Very sad.  Am backing out the speed up changes
11655         introduced by the ArrayList -> Array in the TypeContainer, as they
11656         were not actually that much faster, and introduced a bug (no error
11657         reports on duplicated methods).
11658
11659         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
11660         source first, this will guarantee that we have a valid expression
11661         before calling in lower levels functions that will require a
11662         resolved object.  Then use this original_source in the
11663         target.ResolveLValue instead of the original source that was
11664         passed to us.
11665
11666         Another change.  Use target.Resolve instead of LValueResolve.
11667         Although we are resolving for LValues, we will let the Assign code
11668         take care of that (it will be called again from Resolve).  This
11669         basically allows code like this:
11670
11671         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
11672         class Y { void A (X x) { x [0] += o; }
11673
11674         The problem was that the indexer was trying to resolve for
11675         set_Item (idx, object o) and never finding one.  The real set_Item
11676         was set_Item (idx, X).  By delaying the process we get the right
11677         semantics. 
11678
11679         Fixes bug 36505
11680
11681 2003-02-23  Martin Baulig  <martin@ximian.com>
11682
11683         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
11684         while calling DoEmit ().
11685
11686         * codegen.cs (EmitContext.Mark): Don't mark locations in other
11687         source files; if you use the #line directive inside a method, the
11688         compiler stops emitting line numbers for the debugger until it
11689         reaches the end of the method or another #line directive which
11690         restores the original file.
11691
11692 2003-02-23  Martin Baulig  <martin@ximian.com>
11693
11694         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
11695
11696 2003-02-23  Martin Baulig  <martin@ximian.com>
11697
11698         * statement.cs (Block.AddChildVariableNames): We need to call this
11699         recursively, not just for our immediate children.
11700
11701 2003-02-23  Martin Baulig  <martin@ximian.com>
11702
11703         * class.cs (Event.Define): Always make the field private, like csc does.
11704
11705         * typemanager.cs (TypeManager.RealMemberLookup): Make events
11706         actually work, fixes bug #37521.
11707
11708 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
11709
11710         * delegate.cs: When creating the various temporary "Parameters"
11711         classes, make sure that we call the ComputeAndDefineParameterTypes
11712         on those new parameters (just like we do with the formal ones), to
11713         allow them to be resolved in the context of the DeclSpace.
11714
11715         This fixes the bug that Dick observed in Bugzilla #38530.
11716
11717 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
11718
11719         * expression.cs (ResolveMemberAccess): When resolving a constant,
11720         do not attempt to pull a constant if the value was not able to
11721         generate a valid constant.
11722
11723         * const.cs (LookupConstantValue): Do not report more errors than required.
11724
11725 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11726
11727         * expression.cs: fixes bug #38328.
11728
11729 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
11730
11731         * class.cs: Changed all the various members that can be part of a
11732         class from being an ArrayList to be an Array of the right type.
11733         During the DefineType type_list, interface_list, delegate_list and
11734         enum_list are turned into types, interfaces, delegates and enums
11735         arrays.  
11736
11737         And during the member population, indexer_list, event_list,
11738         constant_list, field_list, instance_constructor_list, method_list,
11739         operator_list and property_list are turned into their real arrays.
11740
11741         Although we could probably perform this operation earlier, for
11742         good error reporting we need to keep the lists and remove the
11743         lists for longer than required.
11744
11745         This optimization was triggered by Paolo profiling the compiler
11746         speed on the output of `gen-sample-program.pl' perl script. 
11747
11748         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
11749         not crash in methods like MemberLookupFailed that use this field.  
11750
11751         This problem arises when the compiler fails to resolve a type
11752         during interface type definition for example.
11753
11754 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
11755
11756         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
11757         inherit from System.Object, so we have to stop at null, not only
11758         when reaching System.Object.
11759
11760 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
11761
11762         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
11763         DeclaredOnly because the parent indexer might have had a different
11764         name, but did not loop until the top of the hierarchy was reached.
11765
11766         The problem this one fixes is 35492: when a class implemented an
11767         indexer from an interface, we were getting the interface method
11768         (which was abstract) and we were flagging an error (can not invoke
11769         abstract method).
11770
11771         This also keeps bug 33089 functioning, and test-148 functioning.
11772
11773         * typemanager.cs (IsSpecialMethod): The correct way of figuring
11774         out if a method is special is to see if it is declared in a
11775         property or event, or whether it is one of the predefined operator
11776         names.   This should fix correctly #36804.
11777
11778 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
11779
11780         The goal here is to remove the dependency on EmptyCast.Peel ().
11781         Killing it completely.
11782
11783         The problem is that currently in a number of places where
11784         constants are expected, we have to "probe" for an EmptyCast, and
11785         Peel, which is not the correct thing to do, as this will be
11786         repetitive and will likely lead to errors. 
11787
11788         The idea is to remove any EmptyCasts that are used in casts that
11789         can be reduced to constants, so we only have to cope with
11790         constants. 
11791
11792         This bug hunt was triggered by Bug 37363 and the desire to remove
11793         the duplicate pattern where we were "peeling" emptycasts to check
11794         whether they were constants.  Now constants will always be
11795         constants.
11796
11797         * ecore.cs: Use an enumconstant here instead of wrapping with
11798         EmptyCast.  
11799
11800         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
11801         throwing me off.  By handling this we can get rid of a few hacks.
11802
11803         * statement.cs (Switch): Removed Peel() code.
11804
11805 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
11806
11807         * class.cs: Location information for error 508
11808
11809         * expression.cs (New.DoResolve): Add a guard against double
11810         resolution of an expression.  
11811
11812         The New DoResolve might be called twice when initializing field
11813         expressions (see EmitFieldInitializers, the call to
11814         GetInitializerExpression will perform a resolve on the expression,
11815         and later the assign will trigger another resolution
11816
11817         This leads to bugs (#37014)
11818
11819         * delegate.cs: The signature for EndInvoke should contain any ref
11820         or out parameters as well.  We were not doing this in the past. 
11821
11822         * class.cs (Field.Define): Do not overwrite the type definition
11823         inside the `volatile' group.  Turns out that volatile enumerations
11824         were changing the type here to perform a validity test, which
11825         broke conversions. 
11826
11827 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
11828
11829         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
11830         and structs, we do not want to load the instance variable
11831
11832         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
11833         enum_type has to be handled like an object reference (implicit
11834         conversions exists from this to object), but the regular IsClass
11835         and IsValueType tests will never return true for this one.
11836
11837         Also we use TypeManager.IsValueType instead of type.IsValueType,
11838         just for consistency with the rest of the code (this is only
11839         needed if we ever use the construct exposed by test-180.cs inside
11840         corlib, which we dont today).
11841
11842 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
11843
11844         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
11845         just InternalCall.
11846
11847 2003-02-09  Martin Baulig  <martin@ximian.com>
11848
11849         * namespace.cs (Namespace..ctor): Added SourceFile argument.
11850         (Namespace.DefineNamespaces): New static public method; this is
11851         called when we're compiling with debugging to add all namespaces
11852         to the symbol file.
11853
11854         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
11855         pass it to the Namespace's .ctor.
11856
11857         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
11858         and MethodBase arguments; pass the namespace ID to the symwriter;
11859         pass the MethodBase instead of the token to the symwriter.
11860         (SymbolWriter.DefineNamespace): New method to add a namespace to
11861         the symbol file.
11862
11863 2003-02-09  Martin Baulig  <martin@ximian.com>
11864
11865         * symbolwriter.cs: New file.  This is a wrapper around
11866         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
11867         methods here in near future.
11868
11869 2003-02-09  Martin Baulig  <martin@ximian.com>
11870
11871         * codegen.cs (EmitContext.Mark): Just pass the arguments to
11872         ILGenerator.MarkSequencePoint() which are actually used by the
11873         symbol writer.
11874
11875 2003-02-09  Martin Baulig  <martin@ximian.com>
11876
11877         * location.cs (SourceFile): New public sealed class.  This
11878         contains the name and an index which is used in the location's token.
11879         (Location): Reserve an appropriate number of bits in the token for
11880         the source file instead of walking over that list, this gives us a
11881         really huge performance improvement when compiling with debugging.
11882
11883         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
11884         `SourceFile' argument instead of a string.
11885         (Driver.ProcessFile): Add all the files via Location.AddFile(),
11886         but don't parse/tokenize here, we need to generate the list of all
11887         source files before we do that.
11888         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
11889         the files.
11890
11891         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
11892         instead of a string.
11893
11894         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
11895         of a string.
11896
11897 2003-02-09  Martin Baulig  <martin@ximian.com>
11898
11899         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
11900         filename on `#line default'.
11901
11902 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
11903
11904         * statement.cs: don't clear the pinned var when the fixed statement
11905         returns from the method (fixes bug#37752).
11906
11907 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
11908
11909         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
11910         to IsValueType.
11911
11912 2003-02-07  Martin Baulig  <martin@ximian.com>
11913
11914         * driver.cs: Removed the `--debug-args' command line argument.
11915
11916         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
11917         automatically by the AsssemblyBuilder.
11918         (CodeGen.InitializeSymbolWriter): We don't need to call any
11919         initialization function on the symbol writer anymore.  This method
11920         doesn't take any arguments.
11921
11922 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
11923
11924         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
11925         from referenced assemblies as well.
11926
11927 2003-02-02  Martin Baulig  <martin@ximian.com>
11928
11929         * class.cs (MethodData.Emit): Generate debugging info for external methods.
11930
11931 2003-02-02  Martin Baulig  <martin@ximian.com>
11932
11933         * class.cs (Constructor.Emit): Open the symbol writer before
11934         emitting the constructor initializer.
11935         (ConstructorInitializer.Emit): Call ec.Mark() to allow
11936         single-stepping through constructor initializers.
11937
11938 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
11939
11940         * class.cs: Handle error 549: do not allow virtual methods in
11941         sealed classes. 
11942
11943 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
11944
11945         * decl.cs: Check access levels when resolving types
11946
11947 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
11948
11949         * statement.cs: Add parameters and locals set in catch blocks that might 
11950         return to set vector
11951
11952 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
11953
11954         * class.cs (Operator): Set the SpecialName flags for operators.
11955
11956         * expression.cs (Invocation.DoResolve): Only block calls to
11957         accessors and operators on SpecialName methods.
11958
11959         (Cast.TryReduce): Handle conversions from char constants.
11960
11961
11962 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
11963
11964         * statement.cs: small memory and time optimization in FlowBranching.
11965
11966 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
11967
11968         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
11969         problem that the last fix but in the other sid (Set).
11970
11971         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
11972         access when there is no indexer in the hierarchy.
11973
11974 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
11975
11976         * class.cs: Combine some if statements.
11977
11978 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11979
11980         * driver.cs: fixed bug #37187.
11981
11982 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
11983
11984         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
11985         any indexer, it's needed to build a list with all the indexers in the
11986         hierarchy (AllGetters), else we have problems. Fixes #35653.
11987
11988 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
11989
11990         * class.cs (MethodData.Define): It is wrong for an interface
11991         implementation to be static in both cases: explicit and implicit.
11992         We were only handling this in one case.
11993
11994         Improve the if situation there to not have negations.
11995
11996         * class.cs (Field.Define): Turns out that we do not need to check
11997         the unsafe bit on field definition, only on usage.  Remove the test.
11998
11999 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12000
12001         * driver.cs: use assembly.Location instead of Codebase (the latest
12002         patch made mcs fail when using MS assemblies).
12003
12004 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
12005
12006         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
12007         get the path to *corlib.dll.
12008
12009 2003-01-21  Nick Drochak <ndrochak@gol.com>
12010
12011         * cs-tokenizer.cs:
12012         * pending.cs:
12013         * typemanager.cs: Remove compiler warnings
12014
12015 2003-01-20  Duncan Mak  <duncan@ximian.com>
12016
12017         * AssemblyInfo.cs: Bump the version number to 0.19.
12018
12019 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12020
12021         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
12022
12023 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
12024
12025         * class.cs (Constructor::Emit): Emit debugging info for constructors.
12026
12027 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
12028
12029         * cs-parser.jay: Small fix: we were not comparing the constructor
12030         name correctly.   Thanks to Zoltan for the initial pointer.
12031
12032 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
12033
12034         * cs-tokenizer.cs: Set file name when specified with #line
12035
12036 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
12037
12038         * cs-parser.jay: Only perform the constructor checks here if we
12039         are named like the class;  This will help provider a better
12040         error.  The constructor path is taken when a type definition is
12041         not found, but most likely the user forgot to add the type, so
12042         report that rather than the constructor error.
12043
12044 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
12045
12046         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
12047         allocations.
12048
12049 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
12050
12051         * cs-parser.jay: Add cleanup call.
12052
12053 2003-01-13  Duncan Mak  <duncan@ximian.com>
12054
12055         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
12056         consistent with other methods.
12057
12058 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
12059
12060         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
12061
12062 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
12063
12064         * attribute.cs: only set GuidAttr to true when we have a
12065         GuidAttribute.
12066
12067 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12068
12069         * ecore.cs:
12070         * expression.cs:
12071         * typemanager.cs: fixes to allow mcs compile corlib with the new
12072         Type.IsSubclassOf fix.
12073
12074 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
12075
12076         * expression.cs (LocalVariableReference.DoResolve): Classify a
12077         constant as a value, not as a variable.   Also, set the type for
12078         the variable.
12079
12080         * cs-parser.jay (fixed_statement): take a type instead of a
12081         pointer_type, so we can produce a better error message later.
12082
12083         * statement.cs (Fixed.Resolve): Flag types that are not pointers
12084         as an error.  
12085
12086         (For.DoEmit): Make inifinite loops have a
12087         non-conditional branch back.
12088
12089         (Fixed.DoEmit): First populate the pinned variables, then emit the
12090         statement, then clear the variables.  Before I was emitting the
12091         code once for each fixed piece.
12092
12093
12094 2003-01-08  Martin Baulig  <martin@ximian.com>
12095
12096         * statement.cs (FlowBranching.MergeChild): A break in a
12097         SWITCH_SECTION does not leave a loop.  Fixes #36155.
12098
12099 2003-01-08  Martin Baulig  <martin@ximian.com>
12100
12101         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
12102         lives in the same number space than `param_map'.  Fixes #36154.
12103
12104 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
12105
12106         * cs-parser.jay (constructor_declaration): Set the
12107         Constructor.ModFlags before probing for it.  This makes the
12108         compiler report 514, 515 and 132 (the code was there, but got
12109         broken). 
12110
12111         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
12112         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
12113         (GotoCase.Resolve): Set `Returns' to ALWAYS.
12114
12115 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
12116
12117         * enum.cs: create the enum static fields using the enum type.
12118
12119 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
12120
12121         * class.cs: don't try to create the ParamBuilder for the return
12122         type if it's not needed (and handle it breaking for the ms runtime
12123         anyway).
12124
12125 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
12126
12127         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
12128
12129 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
12130
12131         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
12132         the command.   This showed up while compiling the JANET source
12133         code, which used \r as its only newline separator.
12134
12135 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
12136
12137         * class.cs (Method.Define): If we are an operator (because it
12138         reuses our code), then set the SpecialName and HideBySig.  #36128
12139
12140 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
12141
12142         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
12143         exception, report error 120 `object reference required'.
12144
12145         * driver.cs: Add --pause option, used during to measure the size
12146         of the process as it goes with --timestamp.
12147
12148         * expression.cs (Invocation.DoResolve): Do not allow methods with
12149         SpecialName to be invoked.
12150
12151 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
12152
12153         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
12154         number before adding it.
12155
12156 2002-12-21  Ravi Pratap  <ravi@ximian.com>
12157
12158         * ecore.cs (StandardImplicitConversion): When in an unsafe
12159         context, we allow conversion between void * to any other pointer
12160         type. This fixes bug #35973.
12161
12162 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
12163
12164         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
12165         is not thrown when extensionless outputs are used 
12166
12167 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12168
12169         * rootcontext.cs: fixed compilation of corlib.
12170
12171 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
12172
12173         * attribute.cs (Attributes.Contains): Add new method.
12174
12175         * class.cs (MethodCore.LabelParameters): if the parameter is an
12176         `out' parameter, check that no attribute `[In]' has been passed.
12177
12178         * enum.cs: Handle the `value__' name in an enumeration.
12179
12180 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
12181
12182         * decl.cs: Added special case to allow overrides on "protected
12183         internal" methods
12184
12185 2002-12-18  Ravi Pratap  <ravi@ximian.com>
12186
12187         * attribute.cs (Attributes.AddAttributeSection): Rename to this
12188         since it makes much more sense.
12189
12190         (Attributes.ctor): Don't require a Location parameter.
12191
12192         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
12193
12194         * attribute.cs (ApplyAttributes): Remove extra Location parameters
12195         since we already have that information per attribute.
12196
12197         * everywhere : make appropriate changes.
12198
12199         * class.cs (LabelParameters): Write the code which actually
12200         applies attributes to the return type. We can't do this on the MS
12201         .NET runtime so we flag a warning in the case an exception is
12202         thrown.
12203
12204 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
12205
12206         * const.cs: Handle implicit null conversions here too.
12207
12208 2002-12-17  Ravi Pratap  <ravi@ximian.com>
12209
12210         * class.cs (MethodCore.LabelParameters): Remove the extra
12211         Type [] parameter since it is completely unnecessary. Instead
12212         pass in the method's attributes so that we can extract
12213         the "return" attribute.
12214
12215 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
12216
12217         * cs-parser.jay (parse): Use Report.Error to flag errors instead
12218         of ignoring it and letting the compile continue.
12219
12220         * typemanager.cs (ChangeType): use an extra argument to return an
12221         error condition instead of throwing an exception.
12222
12223 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
12224
12225         * expression.cs (Unary.TryReduce): mimic the code for the regular
12226         code path.  Perform an implicit cast in the cases where we can
12227         implicitly convert to one of the integral types, and then reduce
12228         based on that constant.   This fixes bug #35483.
12229
12230 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12231
12232         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
12233
12234 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12235
12236         * namespace.cs: fixed bug #35489.
12237
12238 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
12239
12240         * class.cs: Remove some dead code.
12241
12242         * cs-parser.jay: Estimate the number of methods needed
12243         (RootContext.MethodCount);
12244
12245         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
12246         numbers instead of StringBuilders.
12247
12248         * support.cs (PtrHashtable): Add constructor with initial size;
12249         We can now reduce reallocations of the method table.
12250
12251 2002-12-10  Ravi Pratap  <ravi@ximian.com>
12252
12253         * attribute.cs (ApplyAttributes): Keep track of the emitted
12254         attributes on a per-target basis. This fixes bug #35413.
12255
12256 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
12257
12258         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
12259         default to the Windows 1252 encoding.
12260
12261         (UnixParseOption): Support version, thanks to Alp for the missing
12262         pointer. 
12263
12264         * AssemblyInfo.cs: Add nice assembly information.
12265
12266         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
12267         (bug 35169).
12268
12269         * cs-parser.jay: Allow a trailing comma before the close bracked
12270         in the attribute_section production.
12271
12272         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
12273         address of the instance was being taken, I will take this out,
12274         because we take the address of the object immediately here.
12275
12276 2002-12-09  Ravi Pratap  <ravi@ximian.com>
12277
12278         * typemanager.cs (AreMultipleAllowed): Take care of the most
12279         obvious case where attribute type is not in the current assembly -
12280         stupid me ;-)
12281
12282 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
12283
12284         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
12285         definitions, instead of doing that afterwards.  
12286
12287         Also we use a nice little hack, depending on the constructor, we
12288         know if we are a "composed" name or a simple name.  Hence, we
12289         avoid the IndexOf test, and we avoid 
12290
12291         * codegen.cs: Add code to assist in a bug reporter to track down
12292         the source of a compiler crash. 
12293
12294 2002-12-07  Ravi Pratap  <ravi@ximian.com>
12295
12296         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
12297         types have been emitted for a given element and flag an error
12298         if something which does not have AllowMultiple set is used more
12299         than once.
12300
12301         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
12302         attribute types and their corresponding AllowMultiple properties
12303
12304         (AreMultipleAllowed): Check the property for a given type.
12305
12306         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
12307         property in the case we have a TypeContainer.
12308
12309         (Attributes.AddAttribute): Detect duplicates and just skip on
12310         adding them. This trivial fix catches a pretty gross error in our
12311         attribute emission - global attributes were being emitted twice!
12312
12313         Bugzilla bug #33187 is now fixed.
12314
12315 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
12316
12317         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
12318         instead of pp_and).
12319
12320         * expression.cs (Binary.ResolveOperator): I can only use the
12321         Concat (string, string, string) and Concat (string, string,
12322         string, string) if the child is actually a concatenation of
12323         strings. 
12324
12325 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
12326
12327         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
12328         context where we need a 2-character lookahead.
12329
12330         * pending.cs (PendingImplementation): Rework so we can keep track
12331         of interface types all the time, and flag those which were
12332         implemented by parents as optional.
12333
12334 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
12335
12336         * expression.cs (Binary.ResolveOperator): Use
12337         String.Concat(string,string,string) or
12338         String.Concat(string,string,string,string) when possible. 
12339
12340         * typemanager: More helper methods.
12341
12342
12343 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
12344
12345         * pending.cs: remove the bogus return from GetMissingInterfaces()
12346         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
12347
12348 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12349
12350         * namespace.cs: avoid duplicated 'using xxx' being added to
12351         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
12352         when we get more than one 'using' statement for the same namespace.
12353         Report a CS0105 warning for it.
12354
12355 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
12356
12357         * cs-tokenizer.cs (consume_identifier): use read directly, instead
12358         of calling getChar/putback, uses internal knowledge of it.    
12359
12360         (xtoken): Reorder tokenizer so most common patterns are checked
12361         first.  This reduces the compilation time in another 5% (from 8.11s
12362         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
12363
12364         The parsing time is 22% of the compilation in mcs, and from that
12365         64% is spent on the tokenization process.  
12366
12367         I tried using a binary search for keywords, but this is slower
12368         than the hashtable.  Another option would be to do a couple of
12369         things:
12370
12371                 * Not use a StringBuilder, instead use an array of chars,
12372                   with a set value.  Notice that this way we could catch
12373                   the 645 error without having to do it *afterwards*.
12374
12375                 * We could write a hand-parser to avoid the hashtable
12376                   compares altogether.
12377
12378         The identifier consumption process takes 37% of the tokenization
12379         time.  Another 15% is spent on is_number.  56% of the time spent
12380         on is_number is spent on Int64.Parse:
12381
12382                 * We could probably choose based on the string length to
12383                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
12384                   computations. 
12385
12386         Another 3% is spend on wrapping `xtoken' in the `token' function.
12387
12388         Handle 0xa0 as whitespace (#34752)
12389
12390 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
12391
12392         * typemanager.cs (IsCLRType): New routine to tell whether a type
12393         is one of the builtin types.  
12394
12395         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
12396         typecode in more places instead of doing pointer comparissions.
12397         We could leverage some knowledge about the way the typecodes are
12398         laid out.
12399
12400         New code to cache namespaces in assemblies, it is currently not
12401         invoked, to be used soon.
12402
12403         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
12404
12405         * expression.cs (Binary.ResolveOperator): specially handle
12406         strings, and do not perform user-defined operator overloading for
12407         built-in types.
12408
12409 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
12410
12411         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
12412         internalcall as it is a pretty simple operation;  Avoid whenever
12413         possible to call Char.IsLetter.
12414
12415         (consume_identifier): Cut by half the number of
12416         hashtable calls by merging the is_keyword and GetKeyword behavior.
12417
12418         Do not short-circuit, because if we do, we
12419         report errors (ie, #if false && true would produce an invalid
12420         directive error);
12421
12422
12423 2002-11-24  Martin Baulig  <martin@ximian.com>
12424
12425         * expression.cs (Cast.TryReduce): If we're in checked syntax,
12426         check constant ranges and report a CS0221.  Fixes #33186.
12427
12428 2002-11-24  Martin Baulig  <martin@ximian.com>
12429
12430         * cs-parser.jay: Make this work for uninitialized variable
12431         declarations in the `for' initializer.  Fixes #32416.
12432
12433 2002-11-24  Martin Baulig  <martin@ximian.com>
12434
12435         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
12436         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
12437
12438 2002-11-24  Martin Baulig  <martin@ximian.com>
12439
12440         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
12441         argument; if true, we also check for user-defined conversions.
12442         This is only needed if both arguments are of a user-defined type.
12443         Fixes #30443, added test-175.cs.
12444         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
12445
12446         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
12447
12448 2002-11-24  Martin Baulig  <martin@ximian.com>
12449
12450         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
12451         function to get the store opcode.
12452         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
12453         only emit the Ldelema if the store opcode is Stobj.  You must run
12454         both test-34 and test-167 to test this.  Fixes #34529.
12455
12456 2002-11-23  Martin Baulig  <martin@ximian.com>
12457
12458         * ecore.cs (Expression.MemberLookup): Added additional
12459         `qualifier_type' argument which is used when we're being called
12460         from MemberAccess.DoResolve() and null if we're called from a
12461         SimpleName lookup.
12462         (Expression.MemberLookupFailed): New method to report errors; this
12463         does the CS1540 check and reports the correct error message.
12464
12465         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
12466         argument for the CS1540 check and redone the way how we're dealing
12467         with private members.  See the comment in the source code for details.
12468         (FilterWithClosure): Reverted this back to revision 1.197; renamed
12469         `closure_start_type' to `closure_qualifier_type' and check whether
12470         it's not null.  It was not this filter being broken, it was just
12471         being called with the wrong arguments.
12472
12473         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
12474         and pass it the correct `qualifier_type'; this also does the error
12475         handling for us.
12476
12477 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
12478
12479         * expression.cs (Invocation.EmitParams): If the we are dealing
12480         with a non-built-in value type, load its address as well.
12481
12482         (ArrayCreation): Use a a pretty constant instead
12483         of the hardcoded value 2.   Use 6 instead of 2 for the number of
12484         static initializers.  
12485
12486         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
12487         because they are not really value types, just glorified integers. 
12488
12489         * driver.cs: Do not append .exe, the CSC compiler does not do it.
12490
12491         * ecore.cs: Remove redundant code for enumerations, make them use
12492         the same code path as everything else, fixes the casting issue
12493         with enumerations in Windows.Forms.
12494
12495         * attribute.cs: Do only cast to string if it is a string, the
12496         validation happens later.
12497
12498         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
12499         people upgrade their corlibs.
12500
12501         * ecore.cs: Oops, enumerations were not following the entire code path
12502
12503 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
12504
12505         * typemanager.cs (FilterWithClosure): Commented out the test for
12506         1540 in typemanager.cs, as it has problems when accessing
12507         protected methods from a parent class (see test-174.cs). 
12508
12509         * attribute.cs (Attribute.ValidateGuid): new method.
12510         (Attribute.Resolve): Use above.
12511
12512 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
12513
12514         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
12515
12516         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
12517         handling for enumerations, as we only needed the TypeContainer
12518         functionality to begin with (this is required for the fix below to
12519         work for enums that reference constants in a container class for
12520         example). 
12521
12522         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
12523
12524         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
12525         a valid TypeBuilder to perform lookups on.o
12526
12527         * class.cs (InheritableMemberSignatureCompare): Use true in the
12528         call to GetGetMethod and GetSetMethod, because we are comparing
12529         the signature, and we need to get the methods *even* if they are
12530         private. 
12531
12532         (PropertyBase.CheckBase): ditto.
12533
12534         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
12535         GotoCase.Resolve): Use Peel on EmpytCasts.
12536
12537         * ecore.cs (EmptyCast): drop child, add Peel method.
12538
12539 2002-11-17  Martin Baulig  <martin@ximian.com>
12540
12541         * ecore.cs (EmptyCast.Child): New public property.
12542
12543         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
12544         label resolved to an EmptyCast.  Fixes #34162.
12545         (GotoCase.Resolve): Likewise.
12546         (Block.EmitMeta): Likewise.
12547
12548 2002-11-17  Martin Baulig  <martin@ximian.com>
12549
12550         * expression.cs (Invocation.BetterConversion): Prefer int over
12551         uint; short over ushort; long over ulong for integer literals.
12552         Use ImplicitConversionExists instead of StandardConversionExists
12553         since we also need to check for user-defined implicit conversions.
12554         Fixes #34165.  Added test-173.cs.
12555
12556 2002-11-16  Martin Baulig  <martin@ximian.com>
12557
12558         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
12559         with the `true' and `false' literals.  Fixes #33151.
12560
12561 2002-11-16  Martin Baulig  <martin@ximian.com>
12562
12563         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
12564         October 22nd; don't do the cs1540 check for static members.
12565
12566         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
12567         now using our own filter here and doing the cs1540 check again.
12568
12569 2002-11-16  Martin Baulig  <martin@ximian.com>
12570
12571         * support.cs (InternalParameters): Don't crash if we don't have
12572         any fixed parameters.  Fixes #33532.
12573
12574 2002-11-16  Martin Baulig  <martin@ximian.com>
12575
12576         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
12577         when looking up static methods to make this work on Windows.
12578         Fixes #33773.
12579
12580 2002-11-16  Martin Baulig  <martin@ximian.com>
12581
12582         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
12583         a setter rather than using PropertyInfo.CanWrite.
12584
12585 2002-11-15  Nick Drochak  <ndrochak@gol.com>
12586
12587         * class.cs: Allow acces to block member by subclasses. Fixes build
12588         breaker.
12589
12590 2002-11-14  Martin Baulig  <martin@ximian.com>
12591
12592         * class.cs (Constructor.Emit): Added the extern/block check.
12593         Fixes bug #33678.
12594
12595 2002-11-14  Martin Baulig  <martin@ximian.com>
12596
12597         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
12598         iteration while looking for indexers, this is needed because the
12599         indexer may have a different name in our base classes.  Fixed the
12600         error reporting (no indexers at all, not get accessor, no
12601         overloaded match).  Fixes bug #33089.
12602         (IndexerAccess.DoResolveLValue): Likewise.
12603
12604 2002-11-14  Martin Baulig  <martin@ximian.com>
12605
12606         * class.cs (PropertyBase.CheckBase): Make this work for multiple
12607         indexers.  Fixes the first part of bug #33089.
12608         (MethodSignature.InheritableMemberSignatureCompare): Added support
12609         for properties.
12610
12611 2002-11-13  Ravi Pratap  <ravi@ximian.com>
12612
12613         * attribute.cs (Attribute.Resolve): Catch the
12614         NullReferenceException and report it since it isn't supposed to
12615         happen. 
12616
12617 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
12618
12619         * expression.cs (Binary.EmitBranchable): Also handle the cases for
12620         LogicalOr and LogicalAnd that can benefit from recursively
12621         handling EmitBranchable.  The code now should be nice for Paolo.
12622
12623 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
12624
12625         * typemanager.cs (LookupType): Added a negative-hit hashtable for
12626         the Type lookups, as we perform quite a number of lookups on
12627         non-Types.  This can be removed once we can deterministically tell
12628         whether we have a type or a namespace in advance.
12629
12630         But this might require special hacks from our corlib.
12631
12632         * TODO: updated.
12633
12634         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
12635         and double which avoids a conversion from an integer to a double.
12636
12637         * expression.cs: tiny optimization, avoid calling IsConstant,
12638         because it effectively performs the lookup twice.
12639
12640 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
12641
12642         But a bogus return here to keep the semantics of the old code
12643         until the Mono runtime is fixed.
12644
12645         * pending.cs (GetMissingInterfaces): New method used to remove all
12646         the interfaces that are already implemented by our parent
12647         classes from the list of pending methods. 
12648
12649         * interface.cs: Add checks for calls after ResolveTypeExpr.
12650
12651 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
12652
12653         * class.cs (Class.Emit): Report warning 67: event not used if the
12654         warning level is beyond 3.
12655
12656         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
12657         being a NullLiteral.
12658
12659         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
12660         specifiers. 
12661
12662         * class.cs (TypeContainer.GetClassBases): Cover a missing code
12663         path that might fail if a type can not be resolved.
12664
12665         * expression.cs (Binary.Emit): Emit unsigned versions of the
12666         operators. 
12667
12668         * driver.cs: use error 5.
12669
12670 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
12671
12672         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
12673
12674 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
12675
12676         * cs-parser.jay (switch_section): A beautiful patch from Martin
12677         Baulig that fixed 33094.
12678
12679 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
12680
12681         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
12682         Check whether the base is abstract and report an error if so.
12683
12684         * expression.cs (IndexerAccess.DoResolveLValue,
12685         IndexerAccess.DoResolve): ditto. 
12686
12687         (Invocation.DoResolve): ditto.
12688
12689         (Invocation.FullMethodDesc): Improve the report string.
12690
12691         * statement.cs (Block): Eliminate IsVariableDefined as it is
12692         basically just a wrapper for GetVariableInfo.
12693
12694         * ecore.cs (SimpleName): Use new 
12695
12696         * support.cs (ReflectionParamter.ParameterType): We unwrap the
12697         type, as we return the actual parameter ref/unref state on a
12698         different call.
12699
12700 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
12701
12702         * support.cs: Return proper flags REF/OUT fixing the previous
12703         commit.  
12704
12705         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
12706         not used to mean `ref' but `ref or out' in ParameterReference
12707
12708         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
12709         full type signature instead of calling TypeManger.CSharpName
12710         ourselves. 
12711
12712         * support.cs (InternalParameters.ParameterDesc): Do not compare
12713         directly to the modflags, because REF/OUT will actually be bitsets
12714         if set. 
12715
12716         * delegate.cs (VerifyMethod): Check also the modifiers.
12717
12718         * cs-tokenizer.cs: Fix bug where floating point values with an
12719         exponent where a sign was missing was ignored.
12720
12721         * driver.cs: Allow multiple assemblies to be specified in a single
12722         /r: argument
12723
12724 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
12725
12726         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
12727         because identifiers after a parenthesis would end up in this kind
12728         of production, and we needed to desamiguate it for having casts
12729         like:
12730
12731                 (UserDefinedType *) xxx
12732
12733 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
12734
12735         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
12736         we should set on the Bindingflags.NonPublic, but not turn on
12737         private_ok.  private_ok controls whether a Private member is
12738         returned (this is chekced on the filter routine), while the
12739         BindingFlags.NonPublic just controls whether private/protected
12740         will be allowed.   This fixes the problem part of the problem of
12741         private properties being allowed to be used in derived classes.
12742
12743         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
12744         so we can call the children DoResolveLValue method (this will
12745         properly signal errors on lvalue assignments to base properties)
12746
12747         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
12748         getter are null, and we have a property info, we know that this
12749         happened because the lookup failed, so we report an error 122 for
12750         protection level violation.
12751
12752         We also silently return if setter and getter are null in the
12753         resolve functions, this condition only happens if we have flagged
12754         the error before.  This is the other half of the problem. 
12755
12756         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
12757         not have accessibility information, that is why we were returning
12758         true in the filter function in typemanager.cs.
12759
12760         To properly report 122 (property is inaccessible because of its
12761         protection level) correctly, we report this error in ResolveAccess
12762         by failing if both the setter and the getter are lacking (ie, the
12763         lookup failed). 
12764
12765         DoResolve and DoLResolve have been modified to check for both
12766         setter/getter being null and returning silently, the reason being
12767         that I did not want to put the knowledge about this error in upper
12768         layers, like:
12769
12770         int old = Report.Errors;
12771         x = new PropertyExpr (...);
12772         if (old != Report.Errors)
12773                 return null;
12774         else
12775                 return x;
12776
12777         So the property expr is returned, but it is invalid, so the error
12778         will be flagged during the resolve process. 
12779
12780         * class.cs: Remove InheritablePropertySignatureCompare from the
12781         class, as we no longer depend on the property signature to compute
12782         whether it is possible to implement a method or not.
12783
12784         The reason is that calling PropertyInfo.GetGetMethod will return
12785         null (in .NET, in Mono it works, and we should change this), in
12786         cases where the Get Method does not exist in that particular
12787         class.
12788
12789         So this code:
12790
12791         class X { public virtual int A { get { return 1; } } }
12792         class Y : X { }
12793         class Z : Y { public override int A { get { return 2; } } }
12794
12795         Would fail in Z because the parent (Y) would not have the property
12796         defined.  So we avoid this completely now (because the alternative
12797         fix was ugly and slow), and we now depend exclusively on the
12798         method names.
12799
12800         (PropertyBase.CheckBase): Use a method-base mechanism to find our
12801         reference method, instead of using the property.
12802
12803         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
12804         routines are gone now.
12805
12806         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
12807         names, they were incorrectly named.
12808
12809         * cs-tokenizer.cs: Return are more gentle token on failure. 
12810
12811         * pending.cs (PendingImplementation.InterfaceMethod): This routine
12812         had an out-of-sync index variable, which caused it to remove from
12813         the list of pending methods the wrong method sometimes.
12814
12815 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
12816
12817         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
12818         CanWrite, because those refer to this particular instance of the
12819         property, and do not take into account the fact that we can
12820         override single members of a property.
12821
12822         Constructor requires an EmitContext.  The resolution process does
12823         not happen here, but we need to compute the accessors before,
12824         because the resolution does not always happen for properties.
12825
12826         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
12827         subclass, before we did not update this flag, but we did update
12828         bindingflags. 
12829
12830         (GetAccessors): Drop this routine, as it did not work in the
12831         presence of partially overwritten set/get methods. 
12832
12833         Notice that this broke the cs1540 detection, but that will require
12834         more thinking. 
12835
12836 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12837
12838         * class.cs:
12839         * codegen.cs:
12840         * driver.cs: issue a warning instead of an error if we don't support
12841         debugging for the platform. Also ignore a couple of errors that may
12842         arise when trying to write the symbols. Undo my previous patch.
12843
12844 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12845
12846         * driver.cs: ignore /debug switch except for Unix platforms.
12847
12848 2002-10-23  Nick Drochak  <ndrochak@gol.com>
12849
12850         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
12851
12852 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
12853
12854         * driver.cs: Do not make mcs-debug conditional, so we do not break
12855         builds that use it.
12856
12857         * statement.cs (UsageVector.MergeChildren): I would like Martin to
12858         review this patch.  But basically after all the children variables
12859         have been merged, the value of "Breaks" was not being set to
12860         new_breaks for Switch blocks.  I think that it should be set after
12861         it has executed.  Currently I set this to the value of new_breaks,
12862         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
12863         conservative, but I do not understand this code very well.
12864
12865         I did not break anything in the build, so that is good ;-)
12866
12867         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
12868
12869 2002-10-20  Mark Crichton  <crichton@gimp.org>
12870
12871         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
12872
12873 2002-10-20  Nick Drochak  <ndrochak@gol.com>
12874
12875         * cfold.cs: Fixed compile blocker.
12876
12877 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
12878
12879         * driver.cs: I was chekcing the key, not the file.
12880
12881 2002-10-19  Ravi Pratap  <ravi@ximian.com>
12882
12883         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
12884         message that we were generating - we just need to silently return
12885         a null.
12886
12887 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
12888
12889         * class.cs (Event.Define): Change my previous commit, as this
12890         breaks the debugger.  This is a temporary hack, as it seems like
12891         the compiler is generating events incorrectly to begin with.
12892
12893         * expression.cs (Binary.ResolveOperator): Added support for 
12894         "U operator - (E x, E y)"
12895
12896         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
12897         y)".
12898
12899         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
12900         init-only variables, but this path did not take into account that
12901         there might be also instance readonly variables.  Correct this
12902         problem. 
12903
12904         This fixes bug 32253
12905
12906         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
12907         delegates as well.
12908
12909         * driver.cs: Change the extension for modules to `netmodule'
12910
12911         * cs-parser.jay: Improved slightly the location tracking for
12912         the debugger symbols.
12913
12914         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
12915         modifiers that were specified instead of the hardcoded value
12916         (FamAndAssem).  This was basically ignoring the static modifier,
12917         and others.  Fixes 32429.
12918
12919         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
12920         fixed a bug in the process (32476)
12921
12922         * expression.cs (ArrayAccess.EmitAssign): Patch from
12923         hwang_rob@yahoo.ca that fixes bug 31834.3
12924
12925 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
12926
12927         * driver.cs: Make the module extension .netmodule.
12928
12929 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
12930
12931         * driver.cs: Report an error if the resource file is not found
12932         instead of crashing.
12933
12934         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
12935         false, like Emit does.
12936
12937 2002-10-16  Nick Drochak  <ndrochak@gol.com>
12938
12939         * typemanager.cs: Remove unused private member.  Also reported mcs
12940         bug to report this as a warning like csc.
12941
12942 2002-10-15  Martin Baulig  <martin@gnome.org>
12943
12944         * statement.cs (Statement.Emit): Made this a virtual method; emits
12945         the line number info and calls DoEmit().
12946         (Statement.DoEmit): New protected abstract method, formerly knows
12947         as Statement.Emit().
12948
12949         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
12950
12951 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
12952
12953         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
12954         have fixed a remaining problem: not every AddXXXX was adding a
12955         fully qualified name.  
12956
12957         Now everyone registers a fully qualified name in the DeclSpace as
12958         being defined instead of the partial name.  
12959
12960         Downsides: we are slower than we need to be due to the excess
12961         copies and the names being registered this way.  
12962
12963         The reason for this is that we currently depend (on the corlib
12964         bootstrap for instance) that types are fully qualified, because
12965         we dump all the types in the namespace, and we should really have
12966         types inserted into the proper namespace, so we can only store the
12967         basenames in the defined_names array.
12968
12969 2002-10-10  Martin Baulig  <martin@gnome.org>
12970
12971         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
12972         from bug #31834, see the bug report for a testcase which is
12973         miscompiled.
12974
12975 2002-10-10  Martin Baulig  <martin@gnome.org>
12976
12977         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
12978         flow analysis code for this.
12979
12980         * statement.cs (Do, While, For): Tell the flow analysis code about
12981         infinite loops.
12982         (FlowBranching.UsageVector): Added support for infinite loops.
12983         (Block.Resolve): Moved the dead code elimination here and use flow
12984         analysis to do it.
12985
12986 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
12987
12988         * class.cs (Field.Define): Catch cycles on struct type
12989         definitions. 
12990
12991         * typemanager.cs (IsUnmanagedtype): Do not recursively check
12992         fields if the fields are static.  We only need to check instance
12993         fields. 
12994
12995         * expression.cs (As.DoResolve): Test for reference type.
12996
12997         * statement.cs (Using.ResolveExpression): Use
12998         ConvertImplicitRequired, not ConvertImplicit which reports an
12999         error on failture
13000         (Using.ResolveLocalVariableDecls): ditto.
13001
13002         * expression.cs (Binary.ResolveOperator): Report errors in a few
13003         places where we had to.
13004
13005         * typemanager.cs (IsUnmanagedtype): Finish implementation.
13006
13007 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
13008
13009         * expression.cs: Use StoreFromPtr instead of extracting the type
13010         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
13011
13012         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
13013         an enumeration value to a System.Enum, but System.Enum is not a
13014         value type, but an class type, so we need to box.
13015
13016         (Expression.ConvertExplicit): One codepath could return
13017         errors but not flag them.  Fix this.  Fixes #31853
13018
13019         * parameter.cs (Resolve): Do not allow void as a parameter type.
13020
13021 2002-10-06  Martin Baulig  <martin@gnome.org>
13022
13023         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
13024         if it's a class type and not a struct.  Fixes #31815.
13025
13026 2002-10-06  Martin Baulig  <martin@gnome.org>
13027
13028         * statement.cs: Reworked the flow analysis code a bit to make it
13029         usable for dead code elimination.
13030
13031 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
13032
13033         * cs-parser.jay: allow empty source files. Fixes bug #31781.
13034
13035 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
13036
13037         * expression.cs (ComposedCast.DoResolveType): A quick workaround
13038         to fix the test 165, will investigate deeper.
13039
13040 2002-10-04  Martin Baulig  <martin@gnome.org>
13041
13042         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
13043         finally blocks actually work.
13044         (Try.Resolve): We don't need to create a sibling for `finally' if
13045         there is no finally block.
13046
13047 2002-10-04  Martin Baulig  <martin@gnome.org>
13048
13049         * class.cs (Constructor.Define): The default accessibility for a
13050         non-default constructor is private, not public.
13051
13052 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
13053
13054         * class.cs (Constructor): Make AllowedModifiers public, add
13055         EXTERN.
13056
13057         * cs-parser.jay: Perform the modifiers test here, as the
13058         constructor for the Constructor class usually receives a zero
13059         because of the way we create it (first we create, later we
13060         customize, and we were never checking the modifiers).
13061
13062         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
13063         is a version of LookupTypeReflection that includes the type-name
13064         cache.  This can be used as a fast path for functions that know
13065         the fully qualified name and are only calling into *.GetType() to
13066         obtain a composed type.
13067
13068         This is also used by TypeManager.LookupType during its type
13069         composition.
13070
13071         (LookupType): We now also track the real type name, as sometimes
13072         we can get a quey for the real type name from things like
13073         ComposedCast.  This fixes bug 31422.
13074
13075         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
13076         complete type fullname, it does not have to go through the type
13077         resolution system to obtain the composed version of the type (for
13078         obtaining arrays or pointers).
13079
13080         (Conditional.Emit): Use the EmitBoolExpression to
13081         generate nicer code, as requested by Paolo.
13082
13083         (ArrayCreation.CheckIndices): Use the patch from
13084         hwang_rob@yahoo.ca to validate the array initializers. 
13085
13086 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
13087
13088         * class.cs (ConstructorInitializer.Emit): simplify code by using
13089         Invocation.EmitCall, and at the same time, fix the bugs in calling
13090         parent constructors that took variable arguments. 
13091
13092         * ecore.cs (Expression.ConvertNumericExplicit,
13093         Expression.ImplicitNumericConversion): Remove the code that
13094         manually wrapped decimal (InternalTypeConstructor call is now gone
13095         as well).
13096
13097         * expression.cs (Cast.TryReduce): Also handle decimal types when
13098         trying to perform a constant fold on the type.
13099
13100         * typemanager.cs (IsUnmanagedtype): Partially implemented.
13101
13102         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
13103         that only turned off an error report, and did nothing else. 
13104
13105 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
13106
13107         * driver.cs: Handle and ignore /fullpaths
13108
13109 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
13110
13111         * expression.cs (Binary.ResolveOperator): Catch the case where
13112         DoNumericPromotions returns true, 
13113
13114         (Binary.DoNumericPromotions): Simplify the code, and the tests.
13115
13116 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
13117
13118         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
13119         report error 70.
13120
13121 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
13122
13123         * ecore.cs (ConvertNumericExplicit): It is not enough that the
13124         conversion exists, but it is also required that the conversion be
13125         performed.  This manifested in "(Type64Enum) 2".  
13126
13127         * class.cs (TypeManager.AddMethod): The fix is not to change
13128         AddEnum, because that one was using a fully qualified name (every
13129         DeclSpace derivative does), but to change the AddMethod routine
13130         that was using an un-namespaced name.  This now correctly reports
13131         the duplicated name.
13132
13133         Revert patch until I can properly fix it.  The issue
13134         is that we have a shared Type space across all namespaces
13135         currently, which is wrong.
13136
13137         Options include making the Namespace a DeclSpace, and merge
13138         current_namespace/current_container in the parser.
13139
13140 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
13141
13142         * cs-parser.jay: Improve error reporting when we get a different
13143         kind of expression in local_variable_type and
13144         local_variable_pointer_type. 
13145
13146         Propagate this to avoid missleading errors being reported.
13147
13148         * ecore.cs (ImplicitReferenceConversion): treat
13149         TypeManager.value_type as a target just like object_type.   As
13150         code like this:
13151
13152         ValueType v = 1;
13153
13154         Is valid, and needs to result in the int 1 being boxed before it
13155         is assigned to the value type v.
13156
13157         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
13158         to validate the enumeration name.
13159
13160         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
13161         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
13162         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
13163
13164         * ecore.cs (TryImplicitIntConversion): When doing an
13165         implicit-enumeration-conversion, check if the type is 64-bits and
13166         perform a conversion before passing to EnumConstant.
13167
13168 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
13169
13170         * decl.cs (Error_AmbiguousTypeReference); New routine used to
13171         report ambiguous type references.  Unlike the MS version, we
13172         report what the ambiguity is.   Innovation at work ;-)
13173
13174         (DeclSpace.FindType): Require a location argument to
13175         display when we display an ambiguous error.
13176
13177         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
13178
13179         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
13180
13181         * expression.cs (EmitDynamicInitializers): Apply patch from
13182         hwang_rob@yahoo.ca that fixes the order in which we emit our
13183         initializers. 
13184
13185 2002-09-21  Martin Baulig  <martin@gnome.org>
13186
13187         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
13188         delegate takes no arguments.
13189
13190 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
13191
13192         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
13193         from integers.
13194
13195         * expression.cs: Extract the underlying type.
13196
13197         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
13198
13199         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
13200
13201 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
13202
13203         * class.cs (TypeContainer.DefineType): We can not use the nice
13204         PackingSize with the size set to 1 DefineType method, because it
13205         will not allow us to define the interfaces that the struct
13206         implements.
13207
13208         This completes the fixing of bug 27287
13209
13210         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
13211         means also structs.  This fixes part of the problem. 
13212         (Expresion.ImplicitReferenceConversionExists): ditto.
13213
13214         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
13215         error if there were no errors reported during the type lookup
13216         process, to avoid duplicates or redundant errors.  Without this
13217         you would get an ambiguous errors plus a type not found.  We have
13218         beaten the user enough with the first error.  
13219
13220         (DeclSparce.FindType): Emit a warning if we have an ambiguous
13221         reference. 
13222
13223         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
13224         during the resolution process, stop the lookup, this avoids
13225         repeated error reports (same error twice).
13226
13227         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
13228
13229         * typemanager.cs (LookupType): Redo the type lookup code to match
13230         the needs of System.Reflection.  
13231
13232         The issue is that System.Reflection requires references to nested
13233         types to begin with a "+" sign instead of a dot.  So toplevel
13234         types look like: "NameSpace.TopLevelClass", and nested ones look
13235         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
13236         levels. 
13237
13238 2002-09-19  Martin Baulig  <martin@gnome.org>
13239
13240         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
13241         says that a method always returns or always throws an exception,
13242         don't report the CS0161.
13243
13244         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
13245         set `Returns = new_returns'.
13246
13247 2002-09-19  Martin Baulig  <martin@gnome.org>
13248
13249         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
13250         to an enum constant, check for a CS0176.
13251
13252 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
13253
13254         * class.cs (TypeContainer.CheckPairedOperators): Now we check
13255         for operators that must be in pairs and report errors.
13256
13257         * ecore.cs (SimpleName.DoResolveType): During the initial type
13258         resolution process, when we define types recursively, we must
13259         check first for types in our current scope before we perform
13260         lookups in the enclosing scopes.
13261
13262         * expression.cs (MakeByteBlob): Handle Decimal blobs.
13263
13264         (Invocation.VerifyArgumentsCompat): Call
13265         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
13266         I thought we were supposed to always call this, but there are a
13267         few places in the code where we dont do it.
13268
13269 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
13270
13271         * driver.cs: Add support in -linkres and -resource to specify the
13272         name of the identifier.
13273
13274 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
13275
13276         * ecore.cs (StandardConversionExists): Sync with the conversion
13277         code: allow anything-* to void* conversions.
13278
13279         (FindMostSpecificSource): Use an Expression argument
13280         instead of a Type, because we might be handed over a Literal which
13281         gets a few more implicit conversions that plain types do not.  So
13282         this information was being lost.
13283
13284         Also, we drop the temporary type-holder expression when not
13285         required.
13286
13287 2002-09-17  Martin Baulig  <martin@gnome.org>
13288
13289         * class.cs (PropertyBase.CheckBase): Don't check the base class if
13290         this is an explicit interface implementation.
13291
13292 2002-09-17  Martin Baulig  <martin@gnome.org>
13293
13294         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
13295         different `IndexerName' attributes.
13296
13297         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
13298         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
13299         virtual CommonResolve().
13300
13301 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
13302
13303         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
13304         and convert that to the UnderlyingType.
13305
13306         * statement.cs (Foreach.Resolve): Indexers are just like variables
13307         or PropertyAccesses.
13308
13309         * cs-tokenizer.cs (consume_string): Track line numbers and columns
13310         inside quoted strings, we were not doing this before.
13311
13312 2002-09-16  Martin Baulig  <martin@gnome.org>
13313
13314         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
13315         resolve it.  This is needed for the definite assignment check of the
13316         instance expression, fixes bug #29846.
13317         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
13318
13319 2002-09-16  Nick Drochak  <ndrochak@gol.com>
13320
13321         * parameter.cs: Fix compile error.  Cannot reference static member
13322         from an instance object.  Is this an mcs bug?
13323
13324 2002-09-14  Martin Baulig  <martin@gnome.org>
13325
13326         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
13327         multiple times.  Fixes bug #30295, added test-166.cs.
13328
13329 2002-09-14  Martin Baulig  <martin@gnome.org>
13330
13331         * statement.cs (Block.Emit): Don't emit unreachable code.
13332         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
13333         `break' statements.
13334         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
13335
13336 2002-09-14  Martin Baulig  <martin@gnome.org>
13337
13338         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
13339         is set.
13340
13341 2002-09-14  Martin Baulig  <martin@gnome.org>
13342
13343         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
13344         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
13345         be false on the ms runtime.
13346
13347 2002-09-13  Martin Baulig  <martin@gnome.org>
13348
13349         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
13350         the CS0038 error message.
13351
13352 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
13353
13354         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
13355         constant inside, return it.
13356
13357 2002-09-12  Martin Baulig  <martin@gnome.org>
13358
13359         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
13360         implicit conversion can be done between enum types.
13361
13362         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
13363         check whether an implicit conversion to the current enum's UnderlyingType
13364         exists and report an error if not.
13365
13366         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
13367         without debugging support.
13368
13369         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
13370         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
13371
13372 2002-09-12  Martin Baulig  <martin@gnome.org>
13373
13374         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
13375
13376         * ecore.cs (IMemberExpr.DeclaringType): New property.
13377         (SimpleName.SimpleNameResolve): Check whether we're accessing a
13378         nonstatic member of an outer type (CS0038).
13379
13380 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
13381
13382         * driver.cs: Activate the using-error detector at warning level
13383         4 (at least for MS-compatible APIs).
13384
13385         * namespace.cs (VerifyUsing): Small buglett fix.
13386
13387         * pending.cs (PendingImplementation): pass the container pointer. 
13388
13389         * interface.cs (GetMethods): Allow for recursive definition.  Long
13390         term, I would like to move every type to support recursive
13391         definitions, not the current ordering mechanism that we have right
13392         now.
13393
13394         The situation is this: Attributes are handled before interfaces,
13395         so we can apply attributes to interfaces.  But some attributes
13396         implement interfaces, we will now handle the simple cases
13397         (recursive definitions will just get an error).  
13398
13399         * parameter.cs: Only invalidate types at the end if we fail to
13400         lookup all types.  
13401
13402 2002-09-09  Martin Baulig  <martin@gnome.org>
13403
13404         * ecore.cs (PropertyExpr.Emit): Also check for
13405         TypeManager.system_int_array_get_length so this'll also work when
13406         compiling corlib.  Fixes #30003.
13407
13408 2002-09-09  Martin Baulig  <martin@gnome.org>
13409
13410         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
13411         and throw an exception if we can't get the type's size.  Fixed #30040,
13412         added test-165.cs.
13413
13414 2002-09-09  Martin Baulig  <martin@gnome.org>
13415
13416         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
13417
13418         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
13419         context.  Fixes bug #30027.
13420
13421         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
13422         virtual functions.  Fixes bug #30043, added test-164.cs.
13423
13424 2002-09-08  Ravi Pratap  <ravi@ximian.com>
13425
13426         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
13427
13428 2002-09-08  Nick Drochak  <ndrochak@gol.com>
13429
13430         * driver.cs: Use an object to get the windows codepage since it's not a
13431         static property.
13432
13433 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
13434
13435         * statement.cs (For.Emit): for infinite loops (test == null)
13436         return whether there is a break inside, not always "true".
13437
13438         * namespace.cs (UsingEntry): New struct to hold the name of the
13439         using definition, the location where it is defined, and whether it
13440         has been used in a successful type lookup.
13441
13442         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
13443         strings.
13444
13445         * decl.cs: ditto.
13446
13447 2002-09-06  Ravi Pratap  <ravi@ximian.com>
13448
13449         * attribute.cs : Fix incorrect code which relied on catching
13450         a NullReferenceException to detect a null being passed in
13451         where an object was expected.
13452
13453 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
13454
13455         * statement.cs (Try): flag the catch variable as assigned
13456
13457         * expression.cs (Cast): Simplified by using ResolveType instead of
13458         manually resolving.
13459
13460         * statement.cs (Catch): Fix bug by using ResolveType.
13461
13462 2002-09-06  Ravi Pratap  <ravi@ximian.com>
13463
13464         * expression.cs (BetterConversion): Special case for when we have
13465         a NullLiteral as the argument and we have to choose between string
13466         and object types - we choose string the way csc does.
13467
13468         * attribute.cs (Attribute.Resolve): Catch the
13469         NullReferenceException and report error #182 since the Mono
13470         runtime no more has the bug and having this exception raised means
13471         we tried to select a constructor which takes an object and is
13472         passed a null.
13473
13474 2002-09-05  Ravi Pratap  <ravi@ximian.com>
13475
13476         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
13477         message (1502, 1503) when we can't locate a method after overload
13478         resolution. This is much more informative and closes the bug
13479         Miguel reported.
13480
13481         * interface.cs (PopulateMethod): Return if there are no argument
13482         types. Fixes a NullReferenceException bug.
13483
13484         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
13485         expressions too. Previously we were checking only in one place for
13486         positional arguments leaving out named arguments.
13487
13488         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
13489         type to the enum type is not allowed. Remove code corresponding to
13490         that.
13491
13492         (ConvertNumericExplicit): Allow explicit conversions from
13493         the underlying type to enum type. This precisely follows the spec
13494         and closes a bug filed by Gonzalo.
13495
13496 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
13497
13498         * compiler.csproj:
13499         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
13500
13501 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
13502
13503         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
13504         it was important that we stored the right value after the
13505         reduction in `converted'.
13506
13507 2002-09-04  Martin Baulig  <martin@gnome.org>
13508
13509         * location.cs (Location.SymbolDocument): Use full pathnames for the
13510         source files.
13511
13512 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
13513
13514         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
13515         of the expression resolve mechanism, because that will catch the
13516         SimpleName error failures.
13517
13518         (Conditional): If we can not resolve the
13519         expression, return, do not crash.
13520
13521 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
13522
13523         * cs-tokenizer.cs:
13524         (location): display token name instead of its number.
13525
13526 2002-08-28  Martin Baulig  <martin@gnome.org>
13527
13528         * expression.cs (Binary.ResolveOperator): Don't silently return
13529         but return an error if an operator cannot be applied between two
13530         enum types.
13531
13532 2002-08-28  Martin Baulig  <martin@gnome.org>
13533
13534         * class.cs (Constructor.Define): Set the permission attributes
13535         correctly instead of making all constructors public.
13536
13537 2002-08-28  Martin Baulig  <martin@gnome.org>
13538
13539         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
13540         for private members before reporting a CS0103; if we find anything,
13541         it's a CS0122.
13542
13543 2002-08-28  Martin Baulig  <martin@gnome.org>
13544
13545         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
13546         to check whether `closure_start_type == closure_invocation_type',
13547         we also need to check whether `m.DeclaringType == closure_invocation_type'
13548         before bypassing the permission checks.  We might be accessing
13549         protected/private members from the base class.
13550         (TypeManager.RealMemberLookup): Only set private_ok if private
13551         members were requested via BindingFlags.NonPublic.
13552
13553         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
13554
13555         * expression.cs (MemberAccess.ResolveMemberAccess): Set
13556         MethodGroupExpr.IsExplicitImpl if appropriate.
13557         (Invocation.DoResolve): Don't report the CS0120 for explicit
13558         interface implementations.
13559
13560 2002-08-27  Martin Baulig  <martin@gnome.org>
13561
13562         * expression.cs (Invocation.DoResolve): If this is a static
13563         method and we don't have an InstanceExpression, we must report
13564         a CS0120.
13565
13566 2002-08-25  Martin Baulig  <martin@gnome.org>
13567
13568         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
13569         `==' between a valuetype and an object.
13570
13571 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
13572
13573         * ecore.cs (TypeExpr): Provide a ToString method.
13574
13575 2002-08-24  Martin Baulig  <martin@gnome.org>
13576
13577         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
13578         now called proggie.dbg and it's a binary file.
13579
13580 2002-08-23  Martin Baulig  <martin@gnome.org>
13581
13582         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
13583
13584 2002-08-23  Martin Baulig  <martin@gnome.org>
13585
13586         * struct.cs (MyStructInfo.ctor): Make this work with empty
13587         structs; it's not allowed to use foreach() on null.
13588
13589 2002-08-23  Martin Baulig  <martin@gnome.org>
13590
13591         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
13592         writer the full pathname of the generated assembly.
13593
13594 2002-08-23  Martin Baulig  <martin@gnome.org>
13595
13596         * statements.cs (FlowBranching.UsageVector.MergeChildren):
13597         A `finally' block never returns or breaks; improved handling of
13598         unreachable code.
13599
13600 2002-08-23  Martin Baulig  <martin@gnome.org>
13601
13602         * statement.cs (Throw.Resolve): Allow `throw null'.
13603
13604 2002-08-23  Martin Baulig  <martin@gnome.org>
13605
13606         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
13607         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
13608         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
13609         MemberLookup would return a wrong event if this is an explicit
13610         interface implementation and the class has an event with the same
13611         name.
13612
13613 2002-08-23  Martin Baulig  <martin@gnome.org>
13614
13615         * statement.cs (Block.AddChildVariableNames): New public method.
13616         (Block.AddChildVariableName): Likewise.
13617         (Block.IsVariableNameUsedInChildBlock): Likewise.
13618         (Block.AddVariable): Check whether a variable name has already
13619         been used in a child block.
13620
13621         * cs-parser.jay (declare_local_variables): Mark all variable names
13622         from the current block as being used in a child block in the
13623         implicit block.
13624
13625 2002-08-23  Martin Baulig  <martin@gnome.org>
13626
13627         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
13628         find the symbol writer.
13629
13630         * driver.cs: csc also allows the arguments to /define being
13631         separated by commas, not only by semicolons.
13632
13633 2002-08-23  Martin Baulig  <martin@gnome.org>
13634
13635         * interface.cs (Interface.GetMembers): Added static check for events.
13636
13637 2002-08-15  Martin Baulig  <martin@gnome.org>
13638
13639         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
13640         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
13641
13642         * ecore.cs (Expression.MemberLookup): Added documentation and explained
13643         why the MethodData.EmitDestructor() change was necessary.
13644
13645 2002-08-20  Martin Baulig  <martin@gnome.org>
13646
13647         * class.cs (TypeContainer.FindMembers): Added static check for events.
13648
13649         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
13650
13651         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
13652         use Type.GetEvents(), not Type.FindMembers().
13653
13654 2002-08-20  Martin Baulig  <martin@gnome.org>
13655
13656         * decl.cs (MemberCache): Added a special method cache which will
13657         be used for method-only searched.  This ensures that a method
13658         search will return a MethodInfo with the correct ReflectedType for
13659         inherited methods.      
13660
13661 2002-08-20  Martin Baulig  <martin@gnome.org>
13662
13663         * decl.cs (DeclSpace.FindMembers): Made this public.
13664
13665 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
13666
13667         * delegate.cs: fixed build on windows.
13668         [FIXME:  Filed as bug #29150: MCS must report these errors.]
13669
13670 2002-08-19  Ravi Pratap  <ravi@ximian.com>
13671
13672         * ecore.cs (StandardConversionExists): Return a false
13673         if we are trying to convert the void type to anything else
13674         since that is not allowed.
13675
13676         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
13677         we flag error 70 in the event an event is trying to be accessed
13678         directly from outside the declaring type.
13679
13680 2002-08-20  Martin Baulig  <martin@gnome.org>
13681
13682         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
13683         MemberCache from typemanager.cs to decl.cs.
13684
13685 2002-08-19  Martin Baulig  <martin@gnome.org>
13686
13687         * class.cs (TypeContainer): Implement IMemberContainer.
13688         (TypeContainer.DefineMembers): Create the MemberCache.
13689         (TypeContainer.FindMembers): Do better BindingFlags checking; only
13690         return public members if BindingFlags.Public was given, check
13691         whether members are static.
13692
13693 2002-08-16  Martin Baulig  <martin@gnome.org>
13694
13695         * decl.cs (DeclSpace.Define): Splitted this in Define and
13696         DefineMembers.  DefineMembers is called first and initializes the
13697         MemberCache.
13698
13699         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
13700         DefineMembers() on all our DeclSpaces.
13701
13702         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
13703         but call DefineMembers() on all nested interfaces.  We call their
13704         Define() in our new Define() function.
13705
13706         * interface.cs (Interface): Implement IMemberContainer.
13707         (Interface.Define): Moved all code except the attribute stuf to
13708         DefineMembers().
13709         (Interface.DefineMembers): Initialize the member cache.
13710
13711         * typemanager.cs (IMemberFinder): Removed this interface, we don't
13712         need this anymore since we can use MemberCache.FindMembers directly.
13713
13714 2002-08-19  Martin Baulig  <martin@gnome.org>
13715
13716         * typemanager.cs (MemberCache): When creating the cache for an
13717         interface type, add all inherited members.
13718         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
13719         to `out bool used_cache' and documented it.
13720         (TypeManager.MemberLookup): If we already used the cache in the first
13721         iteration, we don't need to do the interfaces check.
13722
13723 2002-08-19  Martin Baulig  <martin@gnome.org>
13724
13725         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
13726         here from IMemberFinder and don't implement this interface anymore.
13727         (DeclSpace.MemberCache): Moved here from IMemberFinder.
13728
13729         * typemanager.cs (IMemberFinder): This interface is now only used by
13730         classes which actually support the member cache.
13731         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
13732         since we only put DeclSpaces into this Hashtable.
13733         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
13734         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
13735
13736 2002-08-16  Martin Baulig  <martin@gnome.org>
13737
13738         * typemanager.cs (ICachingMemberFinder): Removed.
13739         (IMemberFinder.MemberCache): New property.
13740         (TypeManager.FindMembers): Merged this with RealFindMembers().
13741         This function will never be called from TypeManager.MemberLookup()
13742         so we can't use the cache here, just the IMemberFinder.
13743         (TypeManager.MemberLookup_FindMembers): Check whether the
13744         IMemberFinder has a MemberCache and call the cache's FindMembers
13745         function.
13746         (MemberCache): Rewrote larger parts of this yet another time and
13747         cleaned it up a bit.
13748
13749 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
13750
13751         * driver.cs (LoadArgs): Support quoting.
13752
13753         (Usage): Show the CSC-like command line arguments.
13754
13755         Improved a few error messages.
13756
13757 2002-08-15  Martin Baulig  <martin@gnome.org>
13758
13759         * typemanager.cs (IMemberContainer.Type): New property.
13760         (IMemberContainer.IsInterface): New property.
13761
13762         The following changes are conditional to BROKEN_RUNTIME, which is
13763         defined at the top of the file.
13764
13765         * typemanager.cs (MemberCache.MemberCache): Don't add the base
13766         class'es members, but add all members from TypeHandle.ObjectType
13767         if we're an interface.
13768         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
13769         is the current type.
13770         (MemberCache.CacheEntry.Container): Removed this field.
13771         (TypeHandle.GetMembers): Include inherited members.
13772
13773 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
13774
13775         * typemanager.cs: fixed compilation and added a comment on a field that
13776         is never used.
13777
13778 2002-08-15  Martin Baulig  <martin@gnome.org>
13779
13780         * class.cs (ConstructorInitializer.Resolve): In the
13781         Expression.MemberLookup call, use the queried_type as
13782         invocation_type.
13783
13784         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
13785         declared' attribute, it's always true.
13786         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
13787         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
13788         temporary wrapper for FindMembers which tells MemberLookup whether
13789         members from the base classes are included in the return value.
13790         This will go away soon.
13791         (TypeManager.MemberLookup): Use this temporary hack here; once the
13792         new MemberCache is completed, we don't need to do the DeclaredOnly
13793         looping here anymore since the MemberCache will take care of this.
13794         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
13795         (MemberCache): When creating the MemberCache for a class, get
13796         members from the current class and all its base classes.
13797         (MemberCache.CacheEntry.Container): New field.  This is a
13798         temporary hack until the Mono runtime is fixed to distinguish
13799         between ReflectedType and DeclaringType.  It allows us to use MCS
13800         with both the MS runtime and the unfixed Mono runtime without
13801         problems and without accecting performance.
13802         (MemberCache.SearchMembers): The DeclaredOnly looping from
13803         TypeManager.MemberLookup is now done here.      
13804
13805 2002-08-14  Martin Baulig  <martin@gnome.org>
13806
13807         * statement.cs (MyStructInfo.MyStructInfo): Don't call
13808         Type.GetFields on dynamic types but get the fields from the
13809         corresponding TypeContainer.
13810         (MyStructInfo.GetStructInfo): Added check for enum types.
13811
13812         * typemanager.cs (MemberList.IsSynchronized): Implemented.
13813         (MemberList.SyncRoot): Implemented.
13814         (TypeManager.FilterWithClosure): No need to check permissions if
13815         closure_start_type == closure_invocation_type, don't crash if
13816         closure_invocation_type is null.
13817
13818 2002-08-13  Martin Baulig  <martin@gnome.org>
13819
13820         Rewrote TypeContainer.FindMembers to use a member cache.  This
13821         gives us a speed increase of about 35% for the self-hosting MCS
13822         build and of about 15-20% for the class libs (both on GNU/Linux).
13823
13824         * report.cs (Timer): New class to get enhanced profiling.  This
13825         whole class is "TIMER" conditional since it remarkably slows down
13826         compilation speed.
13827
13828         * class.cs (MemberList): New class.  This is an IList wrapper
13829         which we're now using instead of passing MemberInfo[]'s around to
13830         avoid copying this array unnecessarily.
13831         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
13832         (ICachingMemberFinder, IMemberContainer): New interface.
13833         (TypeManager.FilterWithClosure): If `criteria' is null, the name
13834         has already been checked, otherwise use it for the name comparision.
13835         (TypeManager.FindMembers): Renamed to RealMemberFinder and
13836         provided wrapper which tries to use ICachingMemberFinder.FindMembers
13837         if possible.  Returns a MemberList, not a MemberInfo [].
13838         (TypeHandle): New class, implements IMemberContainer.  We create
13839         one instance of this class per type, it contains a MemberCache
13840         which is used to do the member lookups.
13841         (MemberCache): New class.  Each instance of this class contains
13842         all members of a type and a name-based hash table.
13843         (MemberCache.FindMembers): This is our new member lookup
13844         function.  First, it looks up all members of the requested name in
13845         the hash table.  Then, it walks this list and sorts out all
13846         applicable members and returns them.
13847
13848 2002-08-13  Martin Baulig  <martin@gnome.org>
13849
13850         In addition to a nice code cleanup, this gives us a performance
13851         increase of about 1.4% on GNU/Linux - not much, but it's already
13852         half a second for the self-hosting MCS compilation.
13853
13854         * typemanager.cs (IMemberFinder): New interface.  It is used by
13855         TypeManager.FindMembers to call FindMembers on a TypeContainer,
13856         Enum, Delegate or Interface.
13857         (TypeManager.finder_to_member_finder): New PtrHashtable.
13858         (TypeManager.finder_to_container): Removed.
13859         (TypeManager.finder_to_delegate): Removed.
13860         (TypeManager.finder_to_interface): Removed.
13861         (TypeManager.finder_to_enum): Removed.
13862
13863         * interface.cs (Interface): Implement IMemberFinder.
13864
13865         * delegate.cs (Delegate): Implement IMemberFinder.
13866
13867         * enum.cs (Enum): Implement IMemberFinder.
13868
13869         * class.cs (TypeContainer): Implement IMemberFinder.
13870
13871 2002-08-12  Martin Baulig  <martin@gnome.org>
13872
13873         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
13874
13875 2002-08-12  Martin Baulig  <martin@gnome.org>
13876
13877         * ecore.cs (ITypeExpression): New interface for expressions which
13878         resolve to a type.
13879         (TypeExpression): Renamed to TypeLookupExpression.
13880         (Expression.DoResolve): If we're doing a types-only lookup, the
13881         expression must implement the ITypeExpression interface and we
13882         call DoResolveType() on it.
13883         (SimpleName): Implement the new ITypeExpression interface.
13884         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
13885         hack, the situation that we're only looking up types can't happen
13886         anymore when this method is called.  Moved the type lookup code to
13887         DoResolveType() and call it.
13888         (SimpleName.DoResolveType): This ITypeExpression interface method
13889         is now doing the types-only lookup.
13890         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
13891         (ResolveFlags): Added MaskExprClass.
13892
13893         * expression.cs (MemberAccess): Implement the ITypeExpression
13894         interface.
13895         (MemberAccess.DoResolve): Added support for a types-only lookup
13896         when we're called via ITypeExpression.DoResolveType().
13897         (ComposedCast): Implement the ITypeExpression interface.
13898
13899         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
13900         Expression.Resolve() with ResolveFlags.Type instead.
13901
13902 2002-08-12  Martin Baulig  <martin@gnome.org>
13903
13904         * interface.cs (Interface.Define): Apply attributes.
13905
13906         * attribute.cs (Attribute.ApplyAttributes): Added support for
13907         interface attributes.
13908
13909 2002-08-11  Martin Baulig  <martin@gnome.org>
13910
13911         * statement.cs (Block.Emit): Only check the "this" variable if we
13912         do not always throw an exception.
13913
13914         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
13915         whether the property has a set accessor.
13916
13917 2002-08-11  Martin Baulig  <martin@gnome.org>
13918
13919         Added control flow analysis support for structs.
13920
13921         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
13922         with control flow analysis turned off.
13923         (IVariable): New interface.
13924         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
13925         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
13926         (FieldExpr.DoResolve): Resolve the instance expression with flow
13927         analysis turned off and do the definite assignment check after the
13928         resolving when we know what the expression will resolve to.
13929
13930         * expression.cs (LocalVariableReference, ParameterReference):
13931         Implement the new IVariable interface, only call the flow analysis
13932         code if ec.DoFlowAnalysis is true.
13933         (This): Added constructor which takes a Block argument.  Implement
13934         the new IVariable interface.
13935         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
13936         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
13937         This does the definite assignment checks for struct members.
13938
13939         * class.cs (Constructor.Emit): If this is a non-static `struct'
13940         constructor which doesn't have any initializer, call
13941         Block.AddThisVariable() to tell the flow analysis code that all
13942         struct elements must be initialized before control returns from
13943         the constructor.
13944
13945         * statement.cs (MyStructInfo): New public class.
13946         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
13947         argument to this indexer.  If non-zero, check an individual struct
13948         member, not the whole struct.
13949         (FlowBranching.CheckOutParameters): Check struct members.
13950         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
13951         overloaded versions of these methods which take an additional
13952         `int field_idx' argument to check struct members.
13953         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
13954         overloaded versions of these methods which take an additional
13955         `string field_name' argument to check struct member.s
13956         (VariableInfo): Implement the IVariable interface.
13957         (VariableInfo.StructInfo): New public property.  Returns the
13958         MyStructInfo instance of the variable if it's a struct or null.
13959         (Block.AddThisVariable): New public method.  This is called from
13960         Constructor.Emit() for non-static `struct' constructor which do
13961         not have any initializer.  It creates a special variable for the
13962         "this" instance variable which will be checked by the flow
13963         analysis code to ensure that all of the struct's fields are
13964         initialized before control returns from the constructor.
13965         (UsageVector): Added support for struct members.  If a
13966         variable/parameter is a struct with N members, we reserve a slot
13967         in the usage vector for each member.  A struct is considered fully
13968         initialized if either the struct itself (slot 0) or all its
13969         members are initialized.
13970
13971 2002-08-08  Martin Baulig  <martin@gnome.org>
13972
13973         * driver.cs (Driver.MainDriver): Only report an error CS5001
13974         if there were no compilation errors.
13975
13976         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
13977         `UnsafeContext' property to determine whether the parent is in
13978         unsafe context rather than checking the parent's ModFlags:
13979         classes nested in an unsafe class are unsafe as well.
13980
13981 2002-08-08  Martin Baulig  <martin@gnome.org>
13982
13983         * statement.cs (UsageVector.MergeChildren): Distinguish between
13984         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
13985         we return.  Added test17() and test18() to test-154.cs.
13986
13987 2002-08-08  Martin Baulig  <martin@gnome.org>
13988
13989         * typemanager.cs (TypeManager.FilterWithClosure): If we have
13990         Family access, make sure the invoking type isn't a subclass of the
13991         queried type (that'd be a CS1540).
13992
13993         * ecore.cs (Expression.MemberLookup): Added overloaded version of
13994         this method which takes an additional `Type invocation_type'.
13995
13996         * expression.cs (BaseAccess.DoResolve): Use the base type as
13997         invocation and query type.
13998         (MemberAccess.DoResolve): If the lookup failed and we're about to
13999         report a CS0122, try a lookup with the ec.ContainerType - if this
14000         succeeds, we must report a CS1540.
14001
14002 2002-08-08  Martin Baulig  <martin@gnome.org>
14003
14004         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
14005         (MethodGroupExpr): Implement the IMemberExpr interface.
14006
14007         * expression (MemberAccess.ResolveMemberAccess): No need to have
14008         any special code for MethodGroupExprs anymore, they're now
14009         IMemberExprs.   
14010
14011 2002-08-08  Martin Baulig  <martin@gnome.org>
14012
14013         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
14014         Family, FamANDAssem and FamORAssem permissions.
14015         (TypeManager.IsSubclassOrNestedChildOf): New public method.
14016
14017 2002-08-08  Martin Baulig  <martin@gnome.org>
14018
14019         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
14020         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
14021         or loop block.
14022
14023 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
14024
14025         * driver.cs: implemented /resource option to embed managed resources.
14026
14027 2002-08-07  Martin Baulig  <martin@gnome.org>
14028
14029         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
14030         (FieldBase.HasFieldInitializer): New public property.
14031         (FieldBase.GetInitializerExpression): New public method.  Resolves and
14032         returns the field initializer and makes sure it is only resolved once.
14033         (TypeContainer.EmitFieldInitializers): Call
14034         FieldBase.GetInitializerExpression to get the initializer, this ensures
14035         that it isn't resolved multiple times.
14036
14037         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
14038         the resolving process (SimpleName/MemberLookup) that we're currently
14039         emitting a field initializer (which must not access any instance members,
14040         this is an error CS0236).
14041
14042         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
14043         argument, if the `IsFieldInitializer' flag is set, we must report and
14044         error CS0236 and not an error CS0120.   
14045
14046 2002-08-07  Martin Baulig  <martin@gnome.org>
14047
14048         * ecore.cs (IMemberExpr): New public interface.
14049         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
14050         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
14051         if the expression is an IMemberExpr.
14052
14053         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
14054         to be null, implicitly default to `this' if we're non-static in
14055         this case.  Simplified the code a lot by using the new IMemberExpr
14056         interface.  Also fixed bug #28176 here.
14057
14058 2002-08-06  Martin Baulig  <martin@gnome.org>
14059
14060         * cs-parser.jay (SimpleLookup): Removed.  We need to create
14061         ParameterReferences during semantic analysis so that we can do a
14062         type-only search when resolving Cast, TypeOf and SizeOf.
14063         (block): Pass the `current_local_parameters' to the Block's
14064         constructor.
14065
14066         * class.cs (ConstructorInitializer): Added `Parameters parameters'
14067         argument to the constructor.
14068         (ConstructorInitializer.Resolve): Create a temporary implicit
14069         block with the parameters.
14070
14071         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
14072         references here if we aren't doing a type-only search.
14073
14074         * statement.cs (Block): Added constructor which takes a
14075         `Parameters parameters' argument.
14076         (Block.Parameters): New public property.
14077
14078         * support.cs (InternalParameters.Parameters): Renamed `parameters'
14079         to `Parameters' and made it public readonly.
14080
14081 2002-08-06  Martin Baulig  <martin@gnome.org>
14082
14083         * ecore.cs (Expression.Warning): Made this public as well.
14084
14085         * report.cs (Report.Debug): Print the contents of collections.
14086
14087 2002-08-06  Martin Baulig  <martin@gnome.org>
14088
14089         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
14090         used to tell Resolve() which kinds of expressions it may return.
14091         (Expression.Resolve): Added overloaded version of this method which
14092         takes a `ResolveFlags flags' argument.  This can be used to tell
14093         Resolve() which kinds of expressions it may return.  Reports a
14094         CS0118 on error.
14095         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
14096         ResolveFlags.SimpleName.
14097         (Expression.Error118): Added overloaded version of this method which
14098         takes a `ResolveFlags flags' argument.  It uses the flags to determine
14099         which kinds of expressions are allowed.
14100
14101         * expression.cs (Argument.ResolveMethodGroup): New public method.
14102         Resolves an argument, but allows a MethodGroup to be returned.
14103         This is used when invoking a delegate.
14104
14105         * TODO: Updated a bit.
14106
14107 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14108
14109         Fixed compilation with csc.
14110
14111         * ecore.cs: Expression.Error made public. Is this correct? Should
14112         Warning be made public too?
14113
14114         * expression.cs: use ea.Location instead of ea.loc.
14115         [FIXME:  Filed as bug #28607: MCS must report these errors.]
14116
14117 2002-08-06  Martin Baulig  <martin@gnome.org>
14118
14119         * ecore.cs (Expression.loc): Moved the location here instead of
14120         duplicating it in all derived classes.
14121         (Expression.Location): New public property.
14122         (Expression.Error, Expression.Warning): Made them non-static and
14123         removed the location argument.
14124         (Expression.Warning): Added overloaded version which takes an
14125         `int level' argument.
14126         (Expression.Error118): Make this non-static and removed the
14127         expression and location arguments.
14128         (TypeExpr): Added location argument to the constructor.
14129
14130         * expression.cs (StaticCallExpr): Added location argument to
14131         the constructor.
14132         (Indirection, PointerArithmetic): Likewise.
14133         (CheckedExpr, UnCheckedExpr): Likewise.
14134         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
14135         (StringPtr): Likewise.
14136
14137
14138 2002-08-05  Martin Baulig  <martin@gnome.org>
14139
14140         * expression.cs (BaseAccess.DoResolve): Actually report errors.
14141
14142         * assign.cs (Assign.DoResolve): Check whether the source
14143         expression is a value or variable.
14144
14145         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
14146         while resolving the corresponding blocks.
14147
14148         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
14149         an error, don't silently return null.
14150
14151         * statement.cs (Block.AddVariable): Do the error reporting here
14152         and distinguish between CS0128 and CS0136.
14153         (Block.DoResolve): Report all unused labels (warning CS0164).
14154         (LabeledStatement): Pass the location to the constructor.
14155         (LabeledStatement.HasBeenReferenced): New property.
14156         (LabeledStatement.Resolve): Set it to true here.
14157
14158         * statement.cs (Return.Emit): Return success even after reporting
14159         a type mismatch error (CS0126 or CS0127), this is what csc does and
14160         it avoids confusing the users with any consecutive errors.
14161
14162 2002-08-05  Martin Baulig  <martin@gnome.org>
14163
14164         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
14165
14166         * const.cs (Const.LookupConstantValue): Catch circular definitions.
14167
14168         * expression.cs (MemberAccess.DoResolve): Silently return if an
14169         error has already been reported.
14170
14171         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
14172         error has already been reported.
14173
14174 2002-08-05  Martin Baulig  <martin@gnome.org>
14175
14176         * statement.cs (UsageVector): Only initialize the `parameters'
14177         vector if we actually have any "out" parameters.
14178
14179 2002-08-05  Martin Baulig  <martin@gnome.org>
14180
14181         * expression.cs (Binary.ResolveOperator): When combining delegates,
14182         they must have the same type.
14183
14184 2002-08-05  Martin Baulig  <martin@gnome.org>
14185
14186         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
14187         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
14188         work with the ms runtime and we also don't need it: if we're a
14189         PropertyBuilder and not in the `indexer_arguments' hash, then we
14190         are a property and not an indexer.
14191
14192         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
14193         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
14194         since the latter one doesn't work with the ms runtime.
14195
14196 2002-08-03  Martin Baulig  <martin@gnome.org>
14197
14198         Fixed bugs #27998 and #22735.
14199
14200         * class.cs (Method.IsOperator): New public field.
14201         (Method.CheckBase): Report CS0111 if there's already a method
14202         with the same parameters in the current class.  Report CS0508 when
14203         attempting to change the return type of an inherited method.
14204         (MethodData.Emit): Report CS0179 if a method doesn't have a body
14205         and it's not marked abstract or extern.
14206         (PropertyBase): New abstract base class for Property and Indexer.
14207         (PropertyBase.CheckBase): Moved here from Property and made it work
14208         for indexers.
14209         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
14210         the same so we can reuse it there.
14211         (Property, Indexer): Derive from PropertyBase.
14212         (MethodSignature.inheritable_property_signature_filter): New delegate
14213         to find properties and indexers.
14214
14215         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
14216         argument and improved error reporting.
14217
14218         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
14219         EmptyReadOnlyParameters and made it a property.
14220
14221         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
14222         version of this method which takes a `PropertyInfo indexer'.
14223         (TypeManager.RegisterIndexer): New method.
14224
14225         * class.cs: Added myself as author of this file :-)
14226
14227 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14228
14229         * class.cs: fixed compilation on windoze.
14230
14231 2002-08-03  Martin Baulig  <martin@gnome.org>
14232
14233         * interface.cs (Interface.GetInterfaceBases): Check whether all
14234         base interfaces are at least as accessible than the current one.
14235
14236         * class.cs (TypeContainer.GetClassBases): Check whether base types
14237         are at least as accessible than the current type.
14238         (TypeContainer.AsAccessible): Implemented and made non-static.
14239         (MemberBase.CheckParameters): Report errors if the accessibility
14240         checks fail.
14241
14242         * delegate.cs (Delegate.Delegate): The default visibility is
14243         internal for top-level types and private for nested types.
14244         (Delegate.Define): Report errors if the accessibility checks fail.
14245
14246         * enum.cs (Enum.Enum): The default visibility is internal for
14247         top-level types and private for nested types.
14248         (Enum.DefineType): Compute the correct visibility.
14249
14250         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
14251         function which takes a `bool is_toplevel' instead of a TypeContainer.
14252
14253         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
14254         builtin type.
14255
14256 2002-08-02  Martin Baulig  <martin@gnome.org>
14257
14258         * expression.cs (LocalVariableReferenc): Added constructor which
14259         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
14260         (LocalVariableReference.IsReadOnly): New property.
14261         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
14262         variable is readonly, use our own readonly flag to do this; you can
14263         use the new constructor to get a writable reference to a read-only
14264         variable.
14265
14266         * cs-parser.jay (foreach_statement, using_statement): Get a writable
14267         reference to the local variable.
14268
14269 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
14270
14271         * rootcontext.cs (ResolveCore): Also include System.Exception
14272
14273         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
14274         we reach an EmptyStatement.
14275
14276         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
14277         is also fine.
14278
14279         * expression.cs (Binary.ResolveOperator): Check error result in
14280         two places.
14281
14282         use brtrue/brfalse directly and avoid compares to null.
14283
14284 2002-08-02  Martin Baulig  <martin@gnome.org>
14285
14286         * class.cs (TypeContainer.Define): Define all nested interfaces here.
14287         Fixes bug #28407, added test-155.cs.
14288
14289 2002-08-01  Martin Baulig  <martin@gnome.org>
14290
14291         * class.cs (Event.EmitDefaultMethod): Make this work with static
14292         events.  Fixes #28311, added verify-3.cs.
14293
14294 2002-08-01  Martin Baulig  <martin@gnome.org>
14295
14296         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
14297         `is_disposable' fields.
14298         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
14299         `hm.is_disposable' if we're using the collection pattern.
14300         (Foreach.EmitCollectionForeach): Use the correct type for the
14301         enumerator's local variable, only emit the try/finally block if
14302         necessary (fixes #27713).
14303
14304 2002-08-01  Martin Baulig  <martin@gnome.org>
14305
14306         * ecore.cs (Expression.report118): Renamed to Error118 and made
14307         it public static.
14308
14309         * statement.cs (Throw.Resolve): Check whether the expression is of
14310         the correct type (CS0118) and whether the type derives from
14311         System.Exception (CS0155).
14312         (Catch.Resolve): New method.  Do the type lookup here and check
14313         whether it derives from System.Exception (CS0155).
14314         (Catch.CatchType, Catch.IsGeneral): New public properties.
14315
14316         * typemanager.cs (TypeManager.exception_type): Added.
14317
14318 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
14319
14320         * driver.cs: Updated About function.
14321
14322 2002-07-31  Martin Baulig  <martin@gnome.org>
14323
14324         Implemented Control Flow Analysis.
14325
14326         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
14327         (EmitContext.CurrentBranching): Added.
14328         (EmitContext.StartFlowBranching): Added.
14329         (EmitContext.EndFlowBranching): Added.
14330         (EmitContext.KillFlowBranching): Added.
14331         (EmitContext.IsVariableAssigned): Added.
14332         (EmitContext.SetVariableAssigned): Added.
14333         (EmitContext.IsParameterAssigned): Added.
14334         (EmitContext.SetParameterAssigned): Added.
14335         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
14336         Added control flow analysis stuff here.
14337
14338         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
14339         resolve the expression as lvalue.
14340         (LocalVariableReference.DoResolve): Check whether the variable has
14341         already been assigned.
14342         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
14343         the parameter as assigned here.
14344         (ParameterReference.DoResolve): Check whether the parameter has already
14345         been assigned.
14346         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
14347         expression as lvalue.
14348
14349         * statement.cs (FlowBranching): New class for the flow analysis code.
14350         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
14351         (LabeledStatement.IsDefined): New public property.
14352         (LabeledStatement.AddUsageVector): New public method to tell flow
14353         analyis that the label may be reached via a forward jump.
14354         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
14355         flow analysis.
14356         (VariableInfo.Number): New public field.  This is used by flow analysis
14357         to number all locals of a block.
14358         (Block.CountVariables): New public property.  This is the number of
14359         local variables in this block (including the locals from all parent
14360         blocks).
14361         (Block.EmitMeta): Number all the variables.
14362
14363         * statement.cs: Added flow analysis support to all classes.
14364
14365 2002-07-31  Martin Baulig  <martin@gnome.org>
14366
14367         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
14368         To get debugging messages, compile mcs with /define:MCS_DEBUG and
14369         then use this argument.
14370
14371         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
14372
14373         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
14374         use this to specify /define options.
14375
14376 2002-07-29  Martin Baulig  <martin@gnome.org>
14377
14378         * statement.cs (Fixed): Moved all code that does variable lookups
14379         and resolvings from Emit to Resolve.
14380
14381         * statement.cs (For): Moved all code that does variable lookups
14382         and resolvings from Emit to Resolve.
14383
14384         * statement.cs (Using): Moved all code that does variable lookups
14385         and resolvings from Emit to Resolve.
14386
14387 2002-07-29  Martin Baulig  <martin@gnome.org>
14388
14389         * attribute.cs (Attribute.Resolve): Explicitly catch a
14390         System.NullReferenceException when creating the
14391         CustromAttributeBuilder and report a different warning message.
14392
14393 2002-07-29  Martin Baulig  <martin@gnome.org>
14394
14395         * support.cs (ParameterData.ParameterName): Added method to
14396         get the name of a parameter.
14397
14398         * typemanager.cs (TypeManager.IsValueType): New public method.
14399
14400 2002-07-29  Martin Baulig  <martin@gnome.org>
14401
14402         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
14403         is a flag which specifies that it's either ref or out.
14404         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
14405         the out parameter to `out Parameter.Modifier mod', also set the
14406         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
14407
14408         * support.cs (InternalParameters.ParameterModifier): Distinguish
14409         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
14410         Parameter.Modifier.ISBYREF flag if it's either ref or out.
14411
14412         * expression.cs (Argument.GetParameterModifier): Distinguish
14413         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
14414         Parameter.Modifier.ISBYREF flag if it's either ref or out.
14415
14416 2002-07-29  Martin Baulig  <martin@gnome.org>
14417
14418         * expression.cs (ParameterReference.ParameterReference): Added
14419         `Location loc' argument to the constructor.
14420
14421         * cs-parser.jay: Pass location to ParameterReference.
14422
14423 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
14424
14425         * statement.cs (Try): Initialize the location.
14426
14427         * cs-parser.jay: pass location to Try.
14428
14429         * expression.cs (Unary.Reduce): Change the prototype to return
14430         whether a constant fold could be performed or not.  The result is
14431         returned in an out parameters.  In the case of Indirection and
14432         AddressOf, we want to perform the full tests.
14433
14434 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
14435
14436         * statement.cs (Statement.Emit): Flag dead code.
14437
14438 2002-07-27  Andrew Birkett  <andy@nobugs.org>
14439
14440         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
14441
14442 2002-07-27  Martin Baulig  <martin@gnome.org>
14443
14444         * class.cs (MethodData.Define): Put back call to
14445         TypeManager.AddMethod(), accidentally commented this out.
14446
14447         * report.cs (Debug): New public method to print debugging information,
14448         this is `[Conditional ("DEBUG")]'.
14449
14450 2002-07-26  Martin Baulig  <martin@gnome.org>
14451
14452         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
14453         (switch_statement): Push the current_block to the switch_stack and
14454         pop it again when we're done with the switch.
14455         (switch_section): The new block is a child of the current_block.
14456         Fixes bug #24007, added test-152.cs.
14457
14458 2002-07-27  Martin Baulig  <martin@gnome.org>
14459
14460         * expression.cs (Invocation.EmitArguments): When calling a varargs
14461         function with only its fixed arguments, we need to pass an empty
14462         array.
14463
14464 2002-07-27  Martin Baulig  <martin@gnome.org>
14465
14466         Mono 0.13 has been released.
14467
14468 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
14469
14470         * driver.cs: Rename --resource to --linkres, because that is what
14471         we do currently, we dont support --resource yet.
14472
14473         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
14474
14475 2002-07-25  Martin Baulig  <martin@gnome.org>
14476
14477         * class.cs (MethodData): New public class.  This is a `method builder'
14478         class for a method or one accessor of a Property/Indexer/Event.
14479         (MethodData.GetMethodFlags): Moved here from MemberBase.
14480         (MethodData.ApplyAttributes): Likewise.
14481         (MethodData.ApplyObsoleteAttribute): Likewise.
14482         (MethodData.ApplyConditionalAttribute): Likewise.
14483         (MethodData.ApplyDllImportAttribute): Likewise.
14484         (MethodData.CheckAbstractAndExternal): Likewise.
14485         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
14486         (MethodData.Emit): Formerly known as Method.Emit().
14487         (MemberBase): Moved everything which was specific to a single
14488         accessor/method to MethodData.
14489         (Method): Create a new MethodData and call Define() and Emit() on it.
14490         (Property, Indexer, Event): Create a new MethodData objects for each
14491         accessor and call Define() and Emit() on them.
14492
14493 2002-07-25  Martin Baulig  <martin@gnome.org>
14494
14495         Made MethodCore derive from MemberBase to reuse the code from there.
14496         MemberBase now also checks for attributes.
14497
14498         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
14499         (MemberBase.GetMethodFlags): Moved here from class Method and marked
14500         as virtual.
14501         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
14502         `CallingConventions cc' and `Attributes opt_attrs' arguments.
14503         (MemberBase.ApplyAttributes): New virtual method; applies the
14504         attributes to a method or accessor.
14505         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
14506         (MemberBase.ApplyConditionalAttribute): Likewise.
14507         (MemberBase.ApplyDllImportAttribute): Likewise.
14508         (MemberBase.CheckAbstractAndExternal): Likewise.
14509         (MethodCore.ParameterTypes): This is now a property instead of a
14510         method, it's initialized from DoDefineParameters().
14511         (MethodCore.ParameterInfo): Removed the set accessor.
14512         (MethodCore.DoDefineParameters): New protected virtual method to
14513         initialize ParameterTypes and ParameterInfo.
14514         (Method.GetReturnType): We can now simply return the MemberType.
14515         (Method.GetMethodFlags): Override the MemberBase version and add
14516         the conditional flags.
14517         (Method.CheckBase): Moved some code from Define() here, call
14518         DoDefineParameters() here.
14519         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
14520         here to avoid some larger code duplication.
14521         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
14522         ensure that abstract and external accessors don't declare a body.
14523
14524         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
14525         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
14526         lookup in the attribute's parent classes, so we need to abort as soon
14527         as we found the first match.
14528         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
14529         the attribute has no arguments.
14530
14531         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
14532         of a Method.
14533
14534 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14535
14536         * cs-parser.jay: reverted previous patch.
14537
14538 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14539
14540         * cs-parser.jay: fixed bug #22119.
14541
14542 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14543
14544         * attribute.cs: fixed compilation. The error was:
14545         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
14546         be assigned to before control leaves the current method."
14547         [FIXME:  Filed as bug #28186: MCS must report this error.]
14548
14549 2002-07-25  Martin Baulig  <martin@gnome.org>
14550
14551         * attribute.cs (Attribute.Conditional_GetConditionName): New static
14552         method to pull the condition name ouf of a Conditional attribute.
14553         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
14554         the obsolete message and error flag out of an Obsolete attribute.
14555
14556         * class.cs (Method.GetMethodFlags): New public method to get the
14557         TypeManager.MethodFlags for this method.
14558         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
14559         private methods.
14560         (Method.Define): Get and apply the Obsolete and Conditional attributes;
14561         if we're overriding a virtual function, set the new private variable
14562         `parent_method'; call the new TypeManager.AddMethod().
14563
14564         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
14565         the MethodBuilder and the Method in a PtrHashtable.
14566         (TypeManager.builder_to_method): Added for this purpose.
14567         (TypeManager.MethodFlags): Added IsObsoleteError.
14568         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
14569         Obsolete and Conditional arguments in MethodBuilders.  If we discover
14570         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
14571         the message from the attribute.
14572
14573 2002-07-24  Martin Baulig  <martin@gnome.org>
14574
14575         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
14576         preprocessor directives, ensure that the argument to #define/#undef is
14577         exactly one identifier and that it's actually an identifier.
14578
14579         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
14580         did not work ....
14581
14582 2002-07-24  Martin Baulig  <martin@gnome.org>
14583
14584         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
14585         initialize it to TypeManager.object_type in the constructor.
14586         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
14587         of the `hm.get_current' method if we're using the collection pattern.
14588         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
14589         for the explicit conversion to make it work when we're using the collection
14590         pattern and the `Current' property has a different return type than `object'.
14591         Fixes #27713.
14592
14593 2002-07-24  Martin Baulig  <martin@gnome.org>
14594
14595         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
14596         does not match, but don't report any errors.  This method is called in
14597         order for all methods in a MethodGroupExpr until a matching method is
14598         found, so we don't want to bail out if the first method doesn't match.
14599         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
14600         matches, report the 123.  Fixes #28070.
14601
14602 2002-07-24  Martin Baulig  <martin@gnome.org>
14603
14604         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
14605         TypeManager.TypeToCoreType() to the top of the method so the
14606         following equality checks will work.  Fixes #28107.
14607
14608 2002-07-24  Martin Baulig  <martin@gnome.org>
14609
14610         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
14611         operand is of type uint, and the other operand is of type sbyte,
14612         short or int, the operands are converted to type long." -
14613         Actually do what this comment already told us.  Fixes bug #28106,
14614         added test-150.cs.
14615
14616 2002-07-24  Martin Baulig  <martin@gnome.org>
14617
14618         * class.cs (MethodBase): New abstract class.  This is now a base
14619         class for Property, Indexer and Event to avoid some code duplication
14620         in their Define() and DefineMethods() methods.
14621         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
14622         generic methods for Define() and DefineMethods().
14623         (FieldBase): Derive from MemberBase, not MemberCore.
14624         (Property): Derive from MemberBase, not MemberCore.
14625         (Property.DefineMethod): Moved all the code from this method to the
14626         new MethodBase.DefineAccessor(), just call it with appropriate
14627         argumetnts.
14628         (Property.Define): Call the new Property.DoDefine(), this does some
14629         sanity checks and we don't need to duplicate the code everywhere.
14630         (Event): Derive from MemberBase, not MemberCore.
14631         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
14632         accessors, this will also make them work with interface events.
14633         (Indexer): Derive from MemberBase, not MemberCore.
14634         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
14635         (Indexer.Define): Use the new MethodBase functions.
14636
14637         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
14638         argument to the constructor.
14639         (Interface.FindMembers): Added support for interface events.
14640         (Interface.PopluateEvent): Implemented.
14641
14642         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
14643
14644 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
14645
14646         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
14647         but this is required to check for a method name being the same as
14648         the containing class.  
14649
14650         Handle this now.
14651
14652 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14653
14654         * interface.cs: initialize variable.
14655
14656 2002-07-23  Martin Baulig  <martin@gnome.org>
14657
14658         Implemented the IndexerName attribute in interfaces.
14659
14660         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
14661         name if this is an explicit interface implementation.
14662         (Indexer.InterfaceIndexerName): New public variable.  If we're
14663         implementing an interface indexer, this is the IndexerName in that
14664         interface.  Otherwise, it's the IndexerName.
14665         (Indexer.DefineMethod): If we're implementing interface indexer,
14666         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
14667         and Pending.ImplementIndexer methods.
14668         (Indexer.Define): Also define the PropertyBuilder if we're
14669         implementing an interface indexer and this is neither an explicit
14670         interface implementation nor do the IndexerName match the one in
14671         the interface.
14672
14673         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
14674         If a method is defined here, then we always need to create a proxy
14675         for it.  This is used when implementing interface indexers.
14676         (Pending.IsInterfaceIndexer): New public method.
14677         (Pending.ImplementIndexer): New public method.
14678         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
14679         This is used when implementing interface indexers to define a proxy
14680         if necessary.
14681         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
14682         define a proxy if necessary.
14683
14684         * interface.cs (Interface.IndexerName): New public variable.
14685         (Interface.PopulateIndexer): Set the IndexerName.
14686         (Interface.DefineIndexers): New private method.  Populate all the
14687         indexers and make sure their IndexerNames match.
14688
14689         * typemanager.cs (IndexerPropertyName): Added support for interface
14690         indexers.
14691
14692 2002-07-22  Martin Baulig  <martin@gnome.org>
14693
14694         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
14695         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
14696         ret if HasReturnLabel.
14697         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
14698         variables.
14699
14700         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
14701         and set the ec.LoopBeginTryCatchLevel.
14702         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
14703         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
14704         the current ec.TryCatchLevel, the branch goes out of an exception
14705         block.  In this case, we need to use Leave and not Br.
14706
14707 2002-07-22  Martin Baulig  <martin@gnome.org>
14708
14709         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
14710         block unless the block does not always return or it is contained in
14711         another try { ... } catch { ... } block.  Fixes bug #26506.
14712         Added verify-1.cs to the test suite.
14713
14714 2002-07-22  Martin Baulig  <martin@gnome.org>
14715
14716         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
14717         then we do not always return.  Fixes bug #24985.
14718
14719 2002-07-22  Martin Baulig  <martin@gnome.org>
14720
14721         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
14722         lookup on a per-class level; ie. walk up the class hierarchy until we
14723         found at least one applicable method, then choose the best among them.
14724         Fixes bug #24463 and test-29.cs.
14725
14726 2002-07-22  Martin Baulig  <martin@gnome.org>
14727
14728         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
14729         return types of the methods.  The return type is not part of the
14730         signature and we must not check it to make the `new' modifier work.
14731         Fixes bug #27999, also added test-147.cs.
14732         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
14733
14734         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
14735         on the method's return type.
14736
14737 2002-07-21  Martin Baulig  <martin@gnome.org>
14738
14739         * assign.cs: Make this work if the rightmost source is a constant and
14740         we need to do an implicit type conversion.  Also adding a few more tests
14741         to test-38.cs which should have caught this.
14742
14743         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
14744         target in the makefile for this.  The makefile.gnu is primarily intended
14745         for end-users who don't want to debug the compiler.
14746
14747 2002-07-21  Martin Baulig  <martin@gnome.org>
14748
14749         * assign.cs: Improved the Assign class so it can now handle embedded
14750         assignments (X = Y = Z = something).  As a side-effect this'll now also
14751         consume less local variables.  test-38.cs now passes with MCS, added
14752         a few new test cases to that test.
14753
14754 2002-07-20  Martin Baulig  <martin@gnome.org>
14755
14756         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
14757         instructions.  Fixes bug #27977, also added test-146.cs.
14758
14759 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14760
14761         * cs-tokenizer.cs: fixed getHex ().
14762
14763 2002-07-19  Martin Baulig  <martin@gnome.org>
14764
14765         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
14766         not Type.GetType() to lookup the array type.  This is needed when
14767         we're constructing an array of a user-defined type.
14768         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
14769         single-dimensional arrays, but also for single-dimensial arrays of
14770         type decimal.
14771
14772 2002-07-19  Martin Baulig  <martin@gnome.org>
14773
14774         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
14775         this function is called, it's not allowed to share LocalBuilders
14776         among ILGenerators.
14777
14778 2002-07-19  Martin Baulig  <martin@gnome.org>
14779
14780         * expression.cs (Argument.Resolve): Report an error 118 when trying
14781         to pass a type as argument.
14782
14783 2002-07-18  Martin Baulig  <martin@gnome.org>
14784
14785         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
14786         Conv_R_Un for the signed `long' type.
14787
14788 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
14789
14790         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
14791         `expr' for the temporary result, as that will fail if we do
14792         multiple resolves on the same expression.
14793
14794 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
14795
14796         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
14797         ec.TypeContainer for looking up aliases. 
14798
14799         * class.cs (TypeContainer): Remove LookupAlias from here.
14800
14801         * decl.cs (DeclSpace); Move here.
14802
14803 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
14804
14805         * class.cs (FindMembers): Only call filter if the constructor
14806         bulider is not null.
14807
14808         Also handle delegates in `NestedTypes' now.  Now we will perform
14809         type lookups using the standard resolution process.  This also
14810         fixes a bug.
14811
14812         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
14813         This uses Expressions (the limited kind that can be parsed by the
14814         tree) instead of strings.
14815
14816         * expression.cs (ComposedCast.ToString): Implement, used to flag
14817         errors since now we have to render expressions.
14818
14819         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
14820         FormArrayType. 
14821
14822         * ecore.cs (SimpleName.ToString): ditto.
14823
14824         * cs-parser.jay: Instead of using strings to assemble types, use
14825         Expressions to assemble the type (using SimpleName, ComposedCast,
14826         MemberAccess).  This should fix the type lookups in declarations,
14827         because we were using a different code path for this.
14828
14829         * statement.cs (Block.Resolve): Continue processing statements
14830         even when there is an error.
14831
14832 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
14833
14834         * class.cs (Event.Define): Also remove the `remove' method from
14835         the list of pending items.
14836
14837         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
14838         generate more compact code. 
14839
14840 2002-07-17  Martin Baulig  <martin@gnome.org>
14841
14842         * const.cs (Const.LookupConstantValue): Add support for constant
14843         `unchecked' and `checked' expressions.
14844         Also adding test case test-140.cs for this.
14845
14846 2002-07-17  Martin Baulig  <martin@gnome.org>
14847
14848         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
14849         check whether mi.ReturnType implements the IEnumerator interface; the
14850         `==' and the IsAssignableFrom() will fail in this situation.
14851
14852 2002-07-16  Ravi Pratap  <ravi@ximian.com>
14853
14854         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
14855         here too.
14856
14857 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14858
14859         * expression.cs: fixed bug #27811.
14860
14861 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
14862
14863         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
14864         Molaro: when we are a ref, the value already contains a pointer
14865         value, do not take the address of it.
14866
14867 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
14868         * removed mb-parser.jay and mb-tokenizer.cs
14869
14870 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
14871
14872         * expression.cs: check against the building corlib void type.
14873
14874 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
14875
14876         * ecore.cs: fix for valuetype static readonly fields: when 
14877         initializing them, we need their address, not the address of a copy.
14878
14879 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
14880
14881         * typemanager.cs: register also enum_type in corlib.
14882
14883 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
14884
14885         * class.cs: allow calling this (but not base) initializers in structs.
14886
14887 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
14888
14889         * ecore.cs: make sure we compare against the building base types
14890         in GetTypeSize ().
14891
14892 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
14893
14894         * typemanager.cs: fix TypeToCoreType() to handle void and object
14895         (corlib gets no more typerefs after this change).
14896
14897 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
14898
14899         * expression.cs (ArrayCreation.EmitArrayArguments): use
14900         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
14901
14902         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
14903         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
14904         array indexes, the runtime actually forbids them.
14905
14906         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
14907         for array arguments here.
14908
14909         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
14910         instead of the default for ValueTypes.
14911
14912         (New.DoEmit): Use IsValueType instead of
14913         IsSubclassOf (value_type)
14914         (New.DoResolve): ditto.
14915         (Invocation.EmitCall): ditto.
14916
14917         * assign.cs (Assign): ditto.
14918
14919         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
14920         Statements *are* currently doing part of their resolution during
14921         Emit.  
14922
14923         Expressions do always resolve during resolve, but statements are
14924         only required to propagate resolution to their children.
14925
14926 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
14927
14928         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
14929
14930         (LoadAssembly): Do not add the dll if it is already specified
14931
14932         (MainDriver): Add the System directory to the link path at the end,
14933         after all the other -L arguments. 
14934
14935         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
14936         wrong opcode for loading bytes and bools (ldelem.i1 instead of
14937         ldelem.u1) and using the opposite for sbytes.
14938
14939         This fixes Digger, and we can finally run it.
14940
14941         * driver.cs (UnixParseOption): Move the option parsing here.  
14942         (CSCParseOption): Implement CSC-like parsing of options.
14943
14944         We now support both modes of operation, the old Unix way, and the
14945         new CSC-like way.  This should help those who wanted to make cross
14946         platform makefiles.
14947
14948         The only thing broken is that /r:, /reference: and /lib: are not
14949         implemented, because I want to make those have the same semantics
14950         as the CSC compiler has, and kill once and for all the confussion
14951         around this.   Will be doing this tomorrow.
14952
14953         * statement.cs (Unsafe.Resolve): The state is checked during
14954         resolve, not emit, so we have to set the flags for IsUnsfe here.
14955
14956 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
14957
14958         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
14959         not catch the Error_ObjectRefRequired in SimpleName (as it is
14960         possible to have a class/instance variable name that later gets
14961         deambiguated), we have to check this here.      
14962
14963 2002-07-10  Ravi Pratap  <ravi@ximian.com>
14964
14965         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
14966         make static and put into Expression.
14967
14968         (Event.Define): Register the private field of the event with the 
14969         TypeManager so that GetFieldFromEvent can get at it.
14970
14971         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
14972         keep track of the private field associated with an event which
14973         has no accessors.
14974
14975         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
14976         private field.
14977
14978         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
14979
14980 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
14981
14982         * expression.cs (Binary.EmitBranchable): this routine emits the
14983         Binary expression in a branchable context.  This basically means:
14984         we need to branch somewhere, not just get the value on the stack.
14985
14986         This works together with Statement.EmitBoolExpression.
14987
14988         * statement.cs (Statement.EmitBoolExpression): Use
14989         EmitBranchable. 
14990
14991 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
14992
14993         * statement.cs (For): Reduce the number of jumps in loops.
14994
14995         (For): Implement loop inversion for the For statement.
14996
14997         (Break): We can be breaking out of a Try/Catch controlled section
14998         (foreach might have an implicit try/catch clause), so we need to
14999         use Leave instead of Br.
15000
15001         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
15002         now).  If the instace expression supports IMemoryLocation, we use
15003         the AddressOf method from the IMemoryLocation to extract the
15004         address instead of emitting the instance.
15005
15006         This showed up with `This', as we were emitting the instance
15007         always (Emit) instead of the Address of This.  Particularly
15008         interesting when This is a value type, as we dont want the Emit
15009         effect (which was to load the object).
15010
15011 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
15012
15013         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
15014
15015         * statement.cs (Checked): Set the CheckedState during the resolve
15016         process too, as the ConvCast operations track the checked state on
15017         the resolve process, and not emit.
15018
15019         * cs-parser.jay (namespace_member_declaration): Flag that we have
15020         found a declaration when we do.  This is used to flag error 1529
15021
15022         * driver.cs: Report ok when we display the help only.
15023
15024 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
15025
15026         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
15027
15028 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
15029
15030         * cs-tokenizer.cs (define): We also have to track locally the
15031         defines.  AllDefines is just used for the Conditional Attribute,
15032         but we also need the local defines for the current source code. 
15033
15034 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
15035
15036         * statement.cs (While, For, Do): These loops can exit through a
15037         Break statement, use this information to tell whether the
15038         statement is the last piece of code.
15039
15040         (Break): Flag that we break.
15041
15042         * codegen.cs (EmitContexts): New `Breaks' state variable.
15043
15044 2002-07-03  Martin Baulig  <martin@gnome.org>
15045
15046         * class.cs (TypeContainer.MethodModifiersValid): Allow override
15047         modifiers in method declarations in structs.  Otherwise, you won't
15048         be able to override things like Object.Equals().
15049
15050 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
15051
15052         * class.cs (Method, Property, Indexer): Do not allow the public
15053         modifier to be used in explicit interface implementations.
15054
15055         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
15056         override modifiers in method declarations in structs
15057
15058 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
15059
15060         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
15061         integer or real overflow, report an error
15062
15063 2002-07-02  Martin Baulig  <martin@gnome.org>
15064
15065         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
15066         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
15067         to tell the runtime about our newly created System.Object and
15068         System.ValueType types.
15069
15070 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
15071
15072         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
15073         struct instead of Ldarg/Starg.
15074
15075 2002-07-02  Martin Baulig  <martin@gnome.org>
15076
15077         * expression.cs (Indirection.Indirection): Call
15078         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
15079
15080 2002-07-02  Martin Baulig  <martin@gnome.org>
15081
15082         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
15083         ValueType, call TypeManager.TypeToCoreType() on it.
15084         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
15085         the OpCodes.Newarr argument.
15086
15087 2002-07-02  Martin Baulig  <martin@gnome.org>
15088
15089         * expression.cs (Invocation.EmitCall): When compiling corlib,
15090         replace all calls to the system's System.Array type to calls to
15091         the newly created one.
15092
15093         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
15094         System.Array methods.
15095         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
15096         from the system's System.Array type which must be replaced.
15097
15098 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
15099
15100         * typemanager.cs: load unverifiable_code_ctor so we can build
15101         corlib using the correct type. Avoid using GetTypeCode() with
15102         TypeBuilders.
15103         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
15104         TypeManager.object_type to allow building corlib.
15105
15106 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
15107
15108         * ecore.cs: handle System.Enum separately in LoadFromPtr().
15109
15110 2002-07-01  Martin Baulig  <martin@gnome.org>
15111
15112         * class.cs: Make the last change actually work, we need to check
15113         whether `ifaces != null' to avoid a crash.
15114
15115 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
15116
15117         * class.cs: when we build structs without fields that implement
15118         interfaces, we need to add the interfaces separately, since there is
15119         no API to both set the size and add the interfaces at type creation
15120         time.
15121
15122 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
15123
15124         * expression.cs: the dimension arguments to the array constructors
15125         need to be converted if they are a long.
15126
15127 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
15128
15129         * class.cs: don't emit ldarg.0 if there is no parent constructor
15130         (fixes showstopper for corlib).
15131
15132 2002-06-29  Martin Baulig  <martin@gnome.org>
15133
15134         MCS now compiles corlib on GNU/Linux :-)
15135
15136         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
15137         ie. check for MethodImplOptions.InternalCall.
15138
15139         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
15140         and TypeManager.attribute_type are null, so we must explicitly check
15141         whether parent is not null to find out whether it's an attribute type.
15142         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
15143         and SetBuilder, not only if the property is neither abstract nor external.
15144         This is necessary to set the MethodImplOptions on the accessor methods.
15145         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
15146         SetBuilder, see Property.Emit().
15147
15148         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
15149         populate "System.Object", "System.ValueType" and "System.Attribute" since
15150         they've already been populated from BootCorlib_PopulateCoreTypes().
15151
15152 2002-06-29  Martin Baulig  <martin@gnome.org>
15153
15154         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
15155         is the NullLiteral, we also need to make sure that target_type is not
15156         an enum type.   
15157
15158 2002-06-29  Martin Baulig  <martin@gnome.org>
15159
15160         * rootcontext.cs (RootContext.ResolveCore): We must initialize
15161         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
15162         before calling BootstrapCorlib_ResolveDelegate ().
15163
15164 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15165
15166         * statement.cs: fixed build-breaker. All tests passed ok.
15167
15168 2002-06-27  Martin Baulig  <martin@gnome.org>
15169
15170         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
15171         for System.Decimal when compiling corlib.
15172
15173 2002-06-27  Martin Baulig  <martin@gnome.org>
15174
15175         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
15176         switch blocks which contain nothing but a default clause.
15177
15178 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
15179
15180        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
15181
15182 2002-06-27  Martin Baulig  <martin@gnome.org>
15183
15184         * ecore.cs (PropertyExpr.PropertyExpr): Call
15185         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
15186
15187         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
15188         is already a TypeBuilder.
15189
15190 2002-06-27  Martin Baulig  <martin@gnome.org>
15191
15192         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
15193         `target_type == TypeManager.array_type', not IsAssignableFrom() in
15194         the "from an array-type to System.Array" case.  This makes it work
15195         when compiling corlib.
15196
15197 2002-06-27  Martin Baulig  <martin@gnome.org>
15198
15199         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
15200         non-static PropertyExpr, set its InstanceExpression.  This makes
15201         the `ICollection.Count' property work in System/Array.cs.
15202
15203 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
15204
15205         * driver.cs: Made error handling more consistent.  Errors now
15206         tracked by Report class, so many methods which used to return int
15207         now return void.  Main() now prints success/failure and 
15208         errors/warnings message.
15209
15210         Renamed '--probe' compiler argument to '--expect-error'.  Removed
15211         the magic number return values (123 and 124).  Now, if the
15212         expected error occurs, the compiler exits with success (exit value
15213         0).  If the compilation completes without seeing that particular
15214         error, the compiler exits with failure (exit value 1).  The
15215         makefile in mcs/errors has been changed to handle the new behaviour.
15216
15217         * report.cs: Made 'expected error' number a property and renamed
15218         it from 'Probe' to 'ExpectedError'.
15219
15220         * genericparser.cs: Removed error handling support, since it is
15221         now all done by Report class.
15222
15223         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
15224         class, so parse() no longer returns an int.
15225
15226         * namespace.cs: Use Report.Error instead of GenericParser.error
15227
15228 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
15229
15230         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
15231         TypeContainer.AddOperator): At the front of the list put the
15232         explicit implementations, so they get resolved/defined first. 
15233
15234 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
15235
15236         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
15237         interface type is implemented by this TypeContainer.  Used during
15238         explicit interface implementation.
15239
15240         (Property.Define, Indexer.Define, Method.Define): Validate that
15241         the given interface in the explicit implementation is one of the
15242         base classes for the containing type.
15243
15244         Also if we are explicitly implementing an interface, but there is
15245         no match in the pending implementation table, report an error.
15246
15247         (Property.Define): Only define the property if we are
15248         not explicitly implementing a property from an interface.  Use the
15249         correct name also for those properties (the same CSC uses,
15250         although that is really not needed).
15251
15252         (Property.Emit): Do not emit attributes for explicitly implemented
15253         properties, as there is no TypeBuilder.
15254
15255         (Indexer.Emit): ditto.
15256
15257         Hiding then means that we do not really *implement* a pending
15258         implementation, which makes code fail.
15259
15260 2002-06-22  Martin Baulig  <martin@gnome.org>
15261
15262         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
15263         the return value of Object.GetType().  [FIXME: we need to do this whenever
15264         we get a type back from the reflection library].
15265
15266 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
15267
15268         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
15269
15270 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
15271
15272         * attribute.cs: Return null if we can not look up the type.
15273
15274         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
15275         the interface types found.
15276
15277         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
15278         interface types found.
15279
15280         * typemanager.cs (GetInterfaces): Make this routine returns alll
15281         the interfaces and work around the lame differences between
15282         System.Type and System.Reflection.Emit.TypeBuilder in the results
15283         result for GetInterfaces.
15284
15285         (ExpandInterfaces): Given an array of interface types, expand and
15286         eliminate repeated ocurrences of an interface.  This expands in
15287         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
15288         be IA, IB, IC.
15289
15290 2002-06-21  Martin Baulig  <martin@gnome.org>
15291
15292         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
15293         on System.Enum.
15294
15295 2002-06-21  Martin Baulig  <martin@gnome.org>
15296
15297         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
15298         and called with one of the core types, return the corresponding typebuilder for
15299         that type.
15300
15301         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
15302         element type.
15303
15304 2002-06-21  Martin Baulig  <martin@gnome.org>
15305
15306         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
15307         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
15308         (Expression.ConvertReferenceExplicit): Likewise.
15309
15310         * expression.cs (ElementAccess.DoResolve): Likewise.
15311         (ElementAccess.DoResolveLValue): Likewise.
15312
15313 2002-06-10  Martin Baulig  <martin@gnome.org>
15314
15315         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
15316         add the "value" parameter to the parameter list.
15317
15318         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
15319         to our caller.
15320
15321 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
15322
15323         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
15324         the argument to an int, uint, long or ulong, per the spec.  Also
15325         catch negative constants in array creation.
15326
15327 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
15328
15329         * class.cs: do not allow the same interface to appear twice in
15330         the definition list.
15331
15332 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
15333
15334         * ecore.cs: don't use ldlen with System.Array.
15335
15336 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
15337
15338         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
15339
15340 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
15341
15342         * modifiers.cs: produce correct field attributes for protected
15343         internal. Easy fix so miguel can work on ther harder stuff:-)
15344
15345 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
15346
15347         * pending.cs: New file.  Move the code from class.cs here.
15348         Support clearning the pending flag for all methods (when not doing
15349         explicit interface implementation).
15350
15351 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
15352
15353         * rootcontext.cs: added a couple more types needed to bootstrap.
15354
15355 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
15356
15357         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
15358         constructor in the type, instead of any constructor in the type
15359         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
15360         a bug in the Mono runtime when applying the params attribute). 
15361
15362 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
15363         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
15364
15365 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
15366
15367         * expression.cs (Unary.ResolveOperator): Use TypeManager
15368         to resolve the type.
15369
15370 2002-06-13  Ravi Pratap  <ravi@ximian.com>
15371
15372         * cs-parser.jay (enum_member_declaration): Pass in the attributes
15373         attached.
15374
15375         * enum.cs (AddEnumMember): Add support to store the attributes associated 
15376         with each member too.
15377
15378         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
15379         field builders too - this takes care of the enum member case.
15380
15381 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
15382
15383         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
15384         address-of operator on both value types and pointers.
15385
15386 2002-06-10  Martin Baulig  <martin@gnome.org>
15387
15388         * interface.cs (Interface.PopulateIndexer): Add the indexer's
15389         PropertyBuilder to the `property_builders' list.
15390
15391         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
15392         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
15393         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
15394         find any indexers which are inherited from an interface.
15395
15396 2002-06-09  Martin Baulig  <martin@gnome.org>
15397
15398         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
15399         the same type as the constant if necessary.  There's also a test-130.cs
15400         for this.
15401
15402         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
15403
15404         * typemanager.cs (TypeManager.ChangeType): Previously known as
15405         Enum.ChangeEnumType().
15406
15407 2002-06-09  Martin Baulig  <martin@gnome.org>
15408
15409         * expression.cs (Cast.TryReduce): Added support for consts.
15410
15411 2002-06-08  Ravi Pratap  <ravi@ximian.com>
15412
15413         * class.cs (Accessor): Hold attributes information so we can pass
15414         it along.
15415
15416         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
15417         Modify to pass in attributes attached to the methods.
15418
15419         (add_accessor_declaration, remove_accessor_declaration): Ditto.
15420
15421         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
15422         to handle the Accessor kind :-)
15423
15424         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
15425
15426 2002-06-08  Martin Baulig  <martin@gnome.org>
15427
15428         * expression.cs (Unary.TryReduceNegative): Added support for
15429         ULongConstants.
15430
15431 2002-06-08  Martin Baulig  <martin@gnome.org>
15432
15433         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
15434         name can't be found in the `defined_names' - the caller will do a
15435         MemberLookup in this case and thus find methods in System.Enum
15436         such as Enum.IsDefined().
15437
15438 2002-06-08  Martin Baulig  <martin@gnome.org>
15439
15440         * enum.cs (Enum.ChangeEnumType): This is a custom version of
15441         Convert.ChangeType() which works with TypeBuilder created types.
15442         (Enum.LookupEnumValue, Enum.Define): Use it here.
15443
15444         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
15445         `TypeBuilder.BaseType != null' check.
15446         (TypeContainer.FindMembers): Only lookup parent members if we
15447         actually have a parent.
15448         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
15449         (ConstructorInitializer.Resolve): Likewise.
15450
15451         * interface.cs (Interface.FindMembers): Added
15452         `TypeBuilder.BaseType != null' check.
15453
15454         * rootcontext.cs (RootContext.ResolveCore): Added
15455         "System.Runtime.CompilerServices.IndexerNameAttribute" to
15456         classes_second_stage.
15457
15458         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
15459         debug_type and trace_type when compiling with --nostdlib.       
15460
15461 2002-06-07  Martin Baulig  <martin@gnome.org>
15462
15463         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
15464         (AddField): Set it to true when adding a non-static field.
15465         (DefineType): Use `have_nonstatic_fields' to find out whether we
15466         have non-static fields, not `Fields != null'.
15467
15468 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
15469
15470         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
15471         dereferencing a null on the static-field code path)
15472
15473 2002-05-30  Martin Baulig  <martin@gnome.org>
15474
15475         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
15476         to take command line arguments.  Use reflection to call the new
15477         custom `Initialize' function on the symbol writer and pass it the
15478         command line arguments.
15479
15480         * driver.cs (--debug-args): New command line argument to pass command
15481         line arguments to the symbol writer.
15482
15483 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
15484
15485         * assign.cs (DoResolve): Forgot to do the implicit conversion to
15486         the target type for indexers and properties.  Thanks to Joe for
15487         catching this.
15488
15489 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
15490
15491         * typemanager.cs (MethodFlags): returns the method flags
15492         (Obsolete/ShouldIgnore) that control warning emission and whether
15493         the invocation should be made, or ignored. 
15494
15495         * expression.cs (Invocation.Emit): Remove previous hack, we should
15496         not do this on matching a base type, we should do this based on an attribute
15497
15498         Only emit calls to System.Diagnostics.Debug and
15499         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
15500         on the command line.
15501
15502         * rootcontext.cs: Global settings for tracing and debugging.
15503
15504         * cs-tokenizer.cs (define): New utility function to track
15505         defines.   Set the global settings for TRACE and DEBUG if found.
15506
15507 2002-05-25  Ravi Pratap  <ravi@ximian.com>
15508
15509         * interface.cs (Populate*): Pass in the TypeContainer as well as
15510         the DeclSpace as parameters so that we can create EmitContexts and
15511         then use that to apply attributes etc.
15512
15513         (PopulateMethod, PopulateEvent, PopulateProperty)
15514         (PopulateIndexer): Apply attributes everywhere.
15515
15516         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
15517         etc.
15518
15519         (ApplyAttributes): Update accordingly.
15520
15521         We now apply interface attributes for all members too.
15522
15523 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
15524
15525         * class.cs (Indexer.Define); Correctly check if we are explicit
15526         implementation (instead of checking the Name for a ".", we
15527         directly look up if the InterfaceType was specified).
15528
15529         Delay the creation of the PropertyBuilder.
15530
15531         Only create the PropertyBuilder if we are not an explicit
15532         interface implementation.   This means that explicit interface
15533         implementation members do not participate in regular function
15534         lookups, and hence fixes another major ambiguity problem in
15535         overload resolution (that was the visible effect).
15536
15537         (DefineMethod): Return whether we are doing an interface
15538         implementation. 
15539
15540         * typemanager.cs: Temporary hack until we get attributes in
15541         interfaces (Ravi is working on that) and we get IndexerName
15542         support in interfaces.
15543
15544         * interface.cs: Register the indexers as properties.
15545
15546         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
15547         warning, I have verified that this is a bug in the .NET runtime
15548         (JavaScript suffers of the same problem).
15549
15550         * typemanager.cs (MemberLookup): When looking up members for
15551         interfaces, the parent of an interface is the implicit
15552         System.Object (so we succeed in searches of Object methods in an
15553         interface method invocation.  Example:  IEnumerable x;  x.ToString
15554         ()) 
15555
15556 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
15557
15558         * class.cs (Event): Events should also register if they do
15559         implement the methods that an interface requires.
15560
15561         * typemanager.cs (MemberLookup); use the new GetInterfaces
15562         method. 
15563
15564         (GetInterfaces): The code used to lookup interfaces for a type is
15565         used in more than one place, factor it here. 
15566
15567         * driver.cs: Track the errors at the bottom of the file, we kept
15568         on going.
15569
15570         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
15571         instance if the method we are calling is static!
15572
15573 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
15574
15575         * attribute.cs (ApplyAttributes): Make this function filter out
15576         the IndexerName attribute (as that attribute in reality is never
15577         applied) and return the string constant for the IndexerName
15578         attribute. 
15579
15580         * class.cs (TypeContainer.Emit): Validate that all the indexers
15581         have the same IndexerName attribute, and if so, set the
15582         DefaultName attribute on the class. 
15583
15584         * typemanager.cs: The return value might contain other stuff (not
15585         only methods).  For instance, consider a method with an "Item"
15586         property and an Item method.
15587
15588         * class.cs: If there is a problem with the parameter types,
15589         return. 
15590
15591 2002-05-24  Ravi Pratap  <ravi@ximian.com>
15592
15593         * ecore.cs (ImplicitConversionExists): Wrapper function which also
15594         looks at user defined conversion after making a call to 
15595         StandardConversionExists - we need this for overload resolution.
15596
15597         * expression.cs : Update accordingly the various method calls.
15598
15599         This fixes 2 bugs filed against implicit user defined conversions 
15600
15601 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
15602
15603         * statement.cs: Track the result of the assignment.
15604
15605 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
15606
15607         * expression.cs (MemberAccess): Improved error reporting for
15608         inaccessible members.
15609
15610 2002-05-22  Martin Baulig  <martin@gnome.org>
15611
15612         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
15613         itself with debugging support.
15614
15615 2002-05-22  Martin Baulig  <martin@gnome.org>
15616
15617         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
15618         Removed, this isn't needed anymore.
15619
15620 2002-05-20  Martin Baulig  <martin@gnome.org>
15621
15622         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
15623         be underlying type for an enum.
15624
15625 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
15626
15627         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
15628         that splits out the loading of just the core types.
15629
15630         * rootcontext.cs (ResolveCore): Split the struct resolution in
15631         two, so we can load the enumeration underlying types before any
15632         enums are used.
15633
15634         * expression.cs (Is): Bandaid until we fix properly Switch (see
15635         bug #24985 for details).
15636
15637         * typemanager.cs (ImplementsInterface): The hashtable will contain
15638         a null if there are no interfaces implemented.
15639
15640 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
15641
15642         * cs-parser.jay (indexer_declarator): It is fine to have array
15643         parameters
15644
15645 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
15646
15647         * typemanager.cs: (RegisterBuilder): New function used to register
15648         TypeBuilders that implement interfaces.  Since
15649         TypeBuilder.GetInterfaces (as usual) does not work with lame
15650         Reflection.Emit. 
15651         (AddUserType): register interfaces.
15652
15653         (ImplementsInterface): Use the builder_to_ifaces hash if we are
15654         dealing with TypeBuilder.  Also, arrays are showing up as
15655         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
15656         methods can not be invoked on them!
15657
15658         * ecore.cs (ExplicitReferenceConversionExists): Made public.
15659         (ImplicitReferenceConversionExists): Split out from
15660         StandardConversionExists. 
15661
15662         * expression.cs (As): We were only implementing one of the three
15663         cases for the as operator.  We now implement them all.
15664         (Is): Implement the various other cases for Is as well.
15665
15666         * typemanager.cs (CACHE): New define used to control if we want or
15667         not the FindMembers cache.  Seems to have a negative impact on
15668         performance currently
15669
15670         (MemberLookup): Nested types have full acess to
15671         enclosing type members
15672
15673         Remove code that coped with instance/static returns for events, we
15674         now catch this in RealFindMembers.
15675
15676         (RealFindMembers): only perform static lookup if the instance
15677         lookup did not return a type or an event.  
15678
15679 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
15680
15681         * assign.cs (CompoundAssign): We pass more semantic information
15682         now to Compound Assignments than we did before: now we have all
15683         the information at hand, and now we resolve the target *before* we
15684         do the expression expansion, which allows the "CacheValue" method
15685         to have the effect we intended (before, a [x] += 1 would generate
15686         two differen ArrayAccess expressions from the ElementAccess,
15687         during the resolution process).
15688
15689         (CompoundAssign.DoResolve): Resolve target and original_source here.
15690
15691 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
15692
15693         * expression.cs (ArrayAccess): dropped debugging information. 
15694
15695         * typemanager.cs: Small bug fix: I was always returning i_members,
15696         instead of one of i_members or s_members (depending on which had
15697         the content).
15698
15699         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
15700         method is invoked before any code generation takes place, and it
15701         is a mechanism to inform that the expression will be invoked more
15702         than once, and that the method should use temporary values to
15703         avoid having side effects
15704
15705         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
15706
15707         * ecore.cs (Expression.CacheTemporaries): Provide empty default
15708         implementation.
15709
15710         * expression.cs (Indirection, ArrayAccess): Add support for
15711         CacheTemporaries in these two bad boys. 
15712
15713         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
15714         ldobj or ldind_ref.  
15715         (StoreFromPtr): Handle stobj as well.
15716
15717         * expression.cs (UnaryMutator): Share more code.
15718
15719         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
15720         down: I was not tracking the Filter function as well, which
15721         was affecting the results of the cache.
15722
15723 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
15724
15725         * attribute.cs: Remove the hack to handle the CharSet property on
15726         StructLayouts. 
15727
15728 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
15729
15730         * attribute.cs (DoResolve): More uglyness, we now only try to
15731         resolve the attribute partially, to extract the CharSet
15732         information (only if we are a StructLayout attribute).  Otherwise 
15733
15734         (GetExtraTypeInfo): Add some code to conditionally kill in the
15735         future this.   I am more and more convinced that the .NET
15736         framework has special code to handle the attribute setting on
15737         certain elements.
15738
15739         * expression.cs (IsParamsMethodApplicable): Revert my previous
15740         foreach change here, it was wrong.
15741
15742 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
15743
15744         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
15745         (pp_expr): do not abort on unknown input, just return.
15746         (eval): abort if there are pending chars.
15747
15748         * attribute.cs (Attribute.Resolve): Positional parameters are
15749         optional.  Deal with that case.
15750
15751         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
15752         the Ansi/Unicode/Auto information for the type.
15753
15754         (TypeContainer.DefineType): instantiate the EmitContext here, as
15755         we will be using it during the type definition (to resolve
15756         attributes) and during the emit phase.
15757
15758         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
15759         to pull type information out of the attributes
15760
15761         (Attribute.Resolve): track the constructor builder, and allow for
15762         multiple invocations (structs and classes will use this).
15763
15764         * ecore.cs (MemberLookupFinal): new version with all the
15765         parameters customizable.
15766
15767         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
15768         constructors.  Return if the result value is null (as the error
15769         would have been flagged already by MemberLookupFinal)
15770
15771         Do not allow instances of abstract classes or interfaces to be
15772         created.
15773
15774         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
15775         We have to compare the assembly property here when dealing with
15776         FamANDAssem and Assembly access modifiers, because we might be
15777         creating an assembly from *modules* (that means that we are not
15778         getting TypeBuilders for types defined in other modules that are
15779         part of this assembly).
15780
15781         (Method.Emit): If the method is marked abstract and has a body,
15782         emit an error. 
15783
15784         (TypeContainer.DefineMembers): If both the defined member and the
15785         parent name match are methods, then do not emit any warnings: let
15786         the Method.Define routine take care of flagging warnings.  But if
15787         there is a mismatch (method overrides something else, or method is
15788         overriwritten by something, then emit warning).
15789
15790         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
15791         set to null, this means `do not check for the return type on the
15792         signature'. 
15793
15794         (Method.Define): set the return type for the method signature to
15795         null, so that we get methods with the same name and parameters and
15796         different return types.  This is used to flag warning 114 (you are
15797         hiding a method, and you probably want to use the new/override
15798         keywords instead).
15799
15800         * typemanager.cs (MemberLookup): Implemented proper access
15801         control, closing a long standing set of bug reports.  The problem
15802         was that the Framework only has two bits: Public and NonPublic,
15803         and NonPublic includes private and protected methods, but we need
15804         to enforce the FamANDAssem, FamOrAssem and Family. 
15805
15806 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
15807
15808         * statement.cs (GotoCase): Return true: Ammounts to giving up
15809         knowledge on whether we return or not, and letting the other case
15810         be responsible for it.
15811
15812 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
15813
15814         * driver.cs: Do not load directories for each file processed, only
15815         do it if there is a pattern.
15816
15817         * ecore.cs: Report readonly assigns here as well, as we might have
15818         been resolved only by MemberAccess.
15819
15820         (SimpleName.SimpleNameResolve): Also be useful for LValue
15821         resolution.   We need this to propagate assign to local readonly variables
15822
15823         * typemanager.cs: Use a ptrhashtable for the criteria, because we
15824         do not want to reuse potential criteria memory.
15825
15826         * class.cs (MyEventBuilder): Set reflected_type;
15827
15828         * ecore.cs (Constantify): Added support for constifying bools.
15829
15830         (RootContext.LookupType): Added a cache for values looked up in
15831         the declaration space.
15832
15833         * typemanager.cs (FindMembers): Now is a front-end to
15834         RealFindMembers, and provides a two-level hashtable-based cache to
15835         the request.  
15836
15837         15% performance improvement: from 22.5 to 19.2 seconds.
15838
15839         * expression.cs (IsParamsMethodApplicable): use foreach.
15840         (Invocation.DoResolve): ditto.
15841         (New.DoResolve): ditto.
15842         (ArrayCreation.DoResolve): ditto.
15843
15844         * ecore.cs (FindMostEncompassingType): use foreach.
15845
15846         * delegate.cs (NewDelegate.DoResolve): Use foreach
15847
15848         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
15849         (RemoveMethods): use foreach.
15850
15851         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
15852         nested foreach statements instead of for, and also break out of
15853         the inner loop once a match is found.
15854
15855         (Invocation.OverloadResolve): Use foreach, simplify the code. 
15856
15857 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
15858
15859         * cfold.cs (BinaryFold): During an enumeration evaluation context,
15860         we actually unwrap the expression to allow for extra information
15861         to be extracted. 
15862
15863         * expression.cs: Use Shr_Un on unsigned operations. 
15864
15865 2002-05-08  Ravi Pratap  <ravi@ximian.com>
15866
15867         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
15868         applicable operators was not being considered correctly. This closes
15869         the bug Miguel reported.
15870
15871 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
15872
15873         * attribute.cs: check that the type derives from System.Attribute
15874         and report the correct error in that case (moved the duplicate code to
15875         its own method, too).
15876
15877 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
15878
15879         * attribute.cs: lookup attribute type name as the spec says: first the
15880         bare attribute name and then name + "Attribute" (nant compiles with
15881         mcs after this fix).
15882
15883 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
15884
15885         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
15886         Because of the way we parse things, we should try to see if a
15887         UIntConstant can fit in an integer.
15888
15889 2002-05-07  Ravi Pratap  <ravi@ximian.com>
15890
15891         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
15892         when we are in an explicit context.
15893
15894         (ConvertReferenceExplicit): When converting from Iface type S to Class
15895         T make sure the rules are implemented as an OR.
15896
15897         * parameter.cs (ParameterType): Make it a property for now although the
15898         purpose really isn't anything immediate.
15899
15900         * expression.cs (Is*Applicable): Do better checking on the parameter type
15901         of a ref/out parameter. The ones from the system assemblies are already 
15902         marked with the correct type so we don't need to do any correction.
15903
15904         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
15905         the object type is standard too so include that.
15906
15907 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
15908
15909         * ecore.cs (StandardConversionExists): Augment with missing code:
15910         deal with IntConstant, LongConstants and Enumerations.
15911
15912         * assign.cs: Report the error, instead of failing silently
15913
15914         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
15915         typecontainer that they are declared, because the
15916         typecontainer/namespace will have the list of using clauses that
15917         need to be applied.
15918
15919         Assembly Attributes were escaping the normal registration
15920         mechanism. 
15921
15922         (EmitCode): Apply attributes within an EmitContext that represents
15923         the container they were declared on.
15924
15925         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
15926
15927 2002-05-06  Ravi Pratap  <ravi@ximian.com>
15928
15929         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
15930         Revamp completely - make much cleaner as we now operate only
15931         on a set of Types.
15932
15933         (FindMostSpecificSource, FindMostSpecificTarget): New methods
15934         to implement the logic detailed in the spec more correctly.
15935
15936         (UserDefinedConversion): Update accordingly.
15937
15938 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
15939
15940         * statement.cs: Return flow analysis information up.
15941
15942         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
15943         and the default.
15944
15945         (token): Do not consume an extra character before calling
15946         decimal_digits.
15947
15948 2002-05-06  Piers Haken <piersh@friskit.com>
15949
15950         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
15951
15952 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
15953
15954         * class.cs (Constructor.Emit): Set the IsStatic flag in the
15955         EmitContext during the instance constructor initializer
15956         resolution, to stop access to instance variables.
15957
15958         This is mandated by the spec, last paragraph of the `constructor
15959         initializers' section. 
15960
15961 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
15962
15963         * cs-parser.jay, class.cs (Accessor): new class used to represent
15964         an accessor (get or set).  In the past we used `null' to represent
15965         a missing accessor.  But this is ambiguous because there was no
15966         way to tell in abstract indexers/properties if one of them was
15967         specified.
15968
15969         Now there is a way of addressing that.
15970
15971         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
15972         instead of FindMembers.
15973
15974         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
15975         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
15976
15977         * attribute.cs: Treat indexers and properties as the same in terms
15978         of applying attributes
15979
15980         * ecore.cs (FindMostEncompassedType): Use statically initialized
15981         EmptyExpressions()s like we do elsewhere to avoid creating useless
15982         objects (and we take this out of the tight loop).
15983
15984         (GetConversionOperators): Move the code to extract the actual
15985         operators to a separate routine to clean things up.
15986
15987 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
15988
15989         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
15990         events are always registered FieldBuilders.
15991
15992         * class.cs (FieldBase): New class shared by Fields 
15993
15994         * delegate.cs: If we are a toplevel delegate, use our full name.
15995         If we are a nested delegate, then only use our tail name.
15996
15997 2002-05-02  Ravi Pratap  <ravi@ximian.com>
15998
15999         * expression.cs (IsApplicable): Ensure that we add the "&" to
16000         ref/out types before comparing it with the type of the argument.
16001
16002         (IsParamsMethodApplicable): Ditto.
16003
16004         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
16005         silly me ;-)
16006
16007         * delegate.cs : Handle the case when we have more than one applicable
16008         method. Flag an error only when we finish checking all.
16009
16010 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
16011
16012         * expression.cs: Add support for boolean static initializers.
16013
16014 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
16015
16016         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
16017
16018         * parameter.cs (ComputeParameterTypes,
16019         ComputeAndDefineParameterTypes): Better error handling: now we
16020         clear the `types' cache if we fail during any of the type lookups.
16021         We also return the status code correctly to our caller
16022
16023         * delegate.cs: If we fail to define a delegate, abort the extra
16024         steps. 
16025
16026         * expression.cs (Binary.ResolveOperator): for
16027         operator==(object,object) and operator !=(object, object) we also
16028         have to verify that there is an implicit conversion from one to
16029         the other.
16030
16031         (ArrayAccess.DoResolve): Array Access can operate on
16032         non-variables. 
16033
16034 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
16035
16036         * assign.cs (CompoundAssign): A new class used as a "flag" that
16037         the assignment actually is happening as part of a compound
16038         assignment operator.
16039
16040         During compound assignment, a few new rules exist to enable things
16041         like:
16042
16043         byte b |= 1 + 2
16044
16045         From the spec:
16046
16047         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
16048         to the type of x) if y is implicitly convertible to the type of x,
16049         and the operator is a builtin operator and the return type of the
16050         operator is explicitly convertible to the type of x. 
16051
16052         * rootcontext.cs: Reset warning level to 2.  4 catches various
16053         "interesting" features in mcs, we must clean this up at some
16054         point, but currently am trying to kill other bugs ;-)
16055
16056         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
16057         in container classes as well.  
16058
16059         * expression.cs (Binary.ResolveOperator): Handle string case
16060         before anything else (as operator overloading does emit an error
16061         before doing anything else).
16062
16063         This code could go away when we move to a table driven model, but
16064         i could not come up with a good plan last night.
16065
16066 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
16067
16068         * typemanager.cs (CSharpName): reimplementation using regex.
16069         * class.cs: added null check for fields in Emit
16070         * rootcontext.cs: set warninglevel to 4
16071
16072 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
16073
16074         * typemanager.cs (CSharpName): reimplemented with Lupus
16075         suggestion.
16076
16077 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
16078
16079         * statement.cs (If): correclty implement Resolve, because we were
16080         not catching sem errors in there.  The same process is needed
16081         everywhere else. 
16082         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
16083
16084
16085         (Statement.Warning_DeadCodeFound): Factorize code.
16086         (While): Report dead code here too.
16087
16088         (Statement): Added Resolve virtual method to allow
16089         for resolution split from the emit code.
16090
16091 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
16092
16093         * statement.cs (EmitBoolExpression): No longer try to resolve the
16094         expression here.    
16095         (MakeBoolean): New utility function that resolve, implicitly
16096         converts to boolean and tags the expression. 
16097
16098
16099         (If, Do): Implement dead code elimination.
16100         (While): Implement loop inversion
16101
16102         (Do, While, For, If): Resolve the expression prior to calling our
16103         code generation.
16104
16105 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
16106
16107         * class.cs:
16108           - added method Report28 (warning: program has more than one entry point)
16109           - added method IsEntryPoint, implements paragraph 10.1 of the spec
16110           - modified method Method.Define, the part at the end of the method
16111
16112         * rootcontext.cs: added static public Location EntryPointLocation;
16113           
16114         * ../errors/cs0028.cs : Add test case for the above warning.              
16115
16116         * typemanager.cs:
16117           - modified method CSharpName to allow arrays of primitive type to
16118             be printed nicely (e.g. instead of System.Int32[][] it now prints
16119             int[][])
16120           - added method CSharpSignature: returns the signature of a method
16121             in string format to be used in reporting errors, warnings, etc.
16122
16123         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
16124         with String.Empty.
16125
16126 2002-04-26  Ravi Pratap  <ravi@ximian.com>
16127
16128         * delegate.cs (Define): Fix extremely silly bug where I was
16129         setting the type of the 'object' parameter of the BeginInvoke
16130         method to System.IAsyncResult instead of System.Object ;-)
16131
16132 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
16133
16134         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
16135         here. 
16136
16137         (Constructor.Emit): return if we fail to initialize the
16138         constructor.  Another door closed!  
16139
16140         * expression.cs (New.DoResolve): Improve error message (from -6 to
16141         1501).  Use DeclaredOnly lookup to find the exact constructor.
16142
16143         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
16144         loop.  This is useful.
16145
16146         * cs-parser.jay: Adjust the default parameters so that destructors
16147         have the proper signature.
16148
16149 2002-04-26  Martin Baulig  <martin@gnome.org>
16150
16151         * driver.cs (LoadAssembly): If `assembly' contains any characters
16152         which are only valid in path names and not in assembly names
16153         (currently slash, backslash and point), use Assembly.LoadFrom ()
16154         instead of Assembly.Load () on the `assembly' (before iteration
16155         over the link_paths).
16156
16157 2002-04-26  Martin Baulig  <martin@gnome.org>
16158
16159         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
16160
16161 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
16162
16163         * class.cs (Property): use the new typemanager.MemberLookup
16164
16165         (TypeContainer.MemberLookup): Implement using the
16166         TypeManager.MemberLookup now. 
16167
16168         * typemanager.cs: Make MemberLookup a function of the TypeManager,
16169         and return MemberInfos, so that these can be used without an
16170         EmitContext (what we had before).
16171
16172 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
16173
16174         * expression.cs: Fix the case where the argument to params if the
16175         type of the params.  I omitted handling this before.   Fixed
16176
16177 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
16178
16179         * driver.cs: Call BootCorlib_PopulateCoreType
16180
16181         * class.cs (Property.CheckBase): Check for properties only, not
16182         for all members. 
16183
16184         * interface.cs: Temporary hack: try/catch around the
16185         CustomAttributeBuilder, because I am getting an exception that I
16186         do not understand.
16187
16188         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
16189         types whose definitions are required to be there (attributes are
16190         defined before standard types).
16191
16192         Compute definitions as we boot the various types, as they are used
16193         immediately (value_type class will need object_type, but if we do
16194         not initialize object_type, we will pass a null, which will let
16195         the runtime pick the System.Object from the existing corlib, which
16196         is not what we want).
16197
16198 2002-04-22  Patrik Torstensson <totte@labs2.com>
16199
16200         * cs-tokenizer.cs: fixed a number of trim() issues.
16201
16202 2002-04-22  Ravi Pratap  <ravi@ximian.com>
16203
16204         * expression.cs (Argument.Type): Ensure that we return the correct
16205         type when we have out or ref parameters [in which case we 
16206         append a "&"].
16207
16208 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
16209
16210         * class.cs (Property, Indexer): Allow extern modifier in there. 
16211
16212         * typemanager.cs (InitBaseTypes): Initializes object_type and
16213         value_type, since those will be used early on during the bootstrap
16214         process to compile corlib.
16215
16216         (InitCoreTypes): Move code from here to InitBaseTypes.
16217
16218 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
16219
16220         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
16221         single-dimension arrays as using the ldlen opcode.  
16222
16223         Daniel Lewis discovered this optimization.  
16224
16225         * typemanager.cs: Add signature for System.Array::get_Length
16226
16227 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16228
16229         * statement.cs: report the error when the foreach does not apply to an
16230         array nor a collection.
16231
16232 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
16233
16234         * expression.cs: Add implicit conversions to the operator ~.
16235
16236         * constant.cs (DecimalConstant.Emit): Emit decimal value.
16237
16238         * typemanager.cs: Locate the decimal constructor.
16239
16240 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16241
16242         * attribute.cs: use the new property of TypeOf.
16243         * expression.cs: added 'get' property around typearg.
16244
16245         These changes fix a build breaker reported by NickD. Is this the
16246         correct way to fix?  If not, please, revert my changes and make it
16247         work :-).
16248
16249 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
16250
16251         * attribute.cs: Add support for typeof in attribute invocations.
16252         I am not sure that this is right though.
16253
16254 2002-04-14  Duncan Mak  <duncan@ximian.com>
16255
16256         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
16257         Binary.Operator.Division case.
16258
16259 2002-04-13  Ravi Pratap  <ravi@ximian.com>
16260
16261         * class.cs (DefineType): Ensure that we do a proper check on
16262         attribute types and also register it with the TypeManager.
16263
16264         (TypeContainer.Targets): The default for attribute types is
16265         AttributeTargets.All.
16266
16267         * attribute.cs (ApplyAttributes): Registering the attribute type
16268         is done elsewhere, not when we discover we have a Usage attribute.
16269
16270 2002-04-12  Ravi Pratap  <ravi@ximian.com>
16271
16272         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
16273         and get rid of is_delegate parameter.
16274
16275         * everywhere : update.
16276
16277 2002-04-12  Ravi Pratap  <ravi@ximian.com>
16278
16279         * cs-parser.jay (compilation_unit): Revamp completely to use
16280         some new ideas that I got from Rhys' grammar to solve the problems
16281         with assembly level attributes.
16282
16283         (outer_declaration): New grammar production.
16284
16285         (attribute_sections): Add.
16286
16287         (opt_attributes): Base on attribute_sections
16288
16289         (namespace_declaration): Allow opt_attributes to tackle the case
16290         when we have assembly level attributes - we are clever in this
16291         regard now ;-)
16292
16293         * attribute.cs (ApplyAttributes): Do not worry about assembly 
16294         attributes in the non-global context.
16295
16296         * rootcontext.cs (AddGlobalAttributes): Go back to using this
16297         instead of SetGlobalAttributes.
16298
16299         * class.cs, rootcontext.cs : Ensure we define and generate 
16300         attribute types before anything else.
16301
16302         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
16303         and flag the new error -20 for the case when the attribute type
16304         does not have valid targets specified. csc does not catch this.
16305
16306         * ../errors/errors.txt : update for error # -20
16307
16308 2002-04-11  Ravi Pratap  <ravi@ximian.com>
16309
16310         * support.cs (InternalParameters.ParameterModifier): Do some null
16311         checking and return sane values.
16312
16313         * class.cs (Method.Define): If we are a PInvoke method, ensure
16314         that we are static and extern. Report error # 601
16315
16316         * ../errors/cs0601.cs : Add test case for the above error.
16317
16318 2002-04-07  Ravi Pratap  <ravi@ximian.com>
16319
16320         * rootcontext.cs (attribute_types): We need to keep type of
16321         all attribute types separately and emit code for them first.
16322
16323         (RegisterAttribute) : Implement.
16324
16325         * class.cs (DefineType): Check if the current Type is a custom
16326         attribute type and register it accordingly.
16327
16328         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
16329         adding the first attribute twice and rename to
16330
16331         (SetGlobalAttributes): this.
16332
16333         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
16334         lookups.
16335
16336         * attribute.cs (ApplyAttributes): Take an additional argument telling us
16337         if we are processing global arguments. Hmm, I am unsure of this.
16338
16339 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16340
16341         * expression.cs: added static array of strings to avoid calling
16342         Enum.ToString () for Operator in Binary. Significant recover of
16343         performance.
16344
16345 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
16346
16347         * class.cs (FindMembers): Allow the Builders of the various
16348         members to be null.  If they are skip them.  This only happens
16349         during the PInvoke declaration.
16350
16351 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
16352
16353         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
16354         failure, so we do not keep going afterwards.
16355
16356         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
16357         wanted to pass `false' as the `is_delegate' argument.  If this is
16358         the case, why not use delegate_type == null to mean `is_delegate =
16359         false' and anything else as is_delegate = true.
16360
16361 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
16362
16363         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
16364         code for the section, not the beginning of the tests.
16365
16366 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
16367
16368         * cfold.cs: Handle operator + (Enum x, Underlying x) 
16369
16370         * expression.cs (Binary): same.  Warn about errors where we have
16371         Enum/Enum in operator + as well.
16372
16373 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
16374
16375         * statement.cs:
16376                 - added support for switch(bool)
16377                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
16378                 - add TableSwitchEmit() to handle table-based switch statements
16379
16380 2002-04-05  Ravi Pratap  <ravi@ximian.com>
16381
16382         * expression.cs (Invocation.OverloadResolve): Factor out code which
16383         does parameter compatibility checking with arguments so that we can 
16384         re-use the code even from Delegate.VerifyApplicability
16385
16386         (VerifyArgumentsCompat): Move above code here.
16387
16388         * delegate.cs (VerifyApplicability): Get rid of duplicate code
16389         and instead make a call to the above method.
16390
16391 2002-03-31  Ravi Pratap  <ravi@ximian.com>
16392
16393         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
16394         We use it to keep track of classes which are attribute types.
16395
16396 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
16397
16398         * delegate.cs (Delegate.Define): Correctly define the types in the
16399         presence of fixed and array parameters.
16400
16401         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
16402         doing FindMembers.
16403
16404         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
16405         include NonPublic after the first iteration.
16406
16407         * class.cs (Indexer.CheckBase): Only check if both parents are
16408         non-null. 
16409
16410         * cs-parser.jay (accessor_body): If empty, set to null.
16411
16412         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
16413         same code path here to resolve constants names that we did have in
16414         MemberAccess.DoResolve.  There is too much code duplicated here.
16415
16416 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
16417
16418         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
16419
16420         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
16421         to MakeUnionSet.
16422
16423         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
16424         tokens, numbers and strings.
16425
16426         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
16427         parenthesis.
16428
16429         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
16430         asyncronous parameters and the regular parameters.  
16431
16432         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
16433         specify the target directory.
16434
16435         * expression.cs: (This.DoResolve): Simplify
16436         (As.Emit): Optimize, do not generate IsInst if the expression is
16437         always of the given type.
16438
16439         (Is.DoResolve): Bug fix, we were reporting both always/never for
16440         the is expression.
16441
16442         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
16443         creating too many unnecessary arrays.
16444
16445 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
16446
16447         * class.cs (EmitFieldInitializer): Use Assign expression to assign
16448         fields instead of rolling our own initializer.   Takes care of all
16449         implicit conversions, and drops unnecessary static checks/argument.
16450
16451 2002-03-31  Dick Porter  <dick@ximian.com>
16452
16453         * driver.cs: use the GetDirectories() return values properly, and
16454         use "/" as path separator.
16455
16456 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
16457
16458         * expression.cs (Unary): Optimize - - expr into expr.
16459         (Binary): Optimize a + (-b) into a -b.
16460
16461         * codegen.cs (CodeGen): Made all methods static.
16462
16463 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
16464
16465         * rootcontext.cs: 
16466
16467         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
16468         TypeBuilder property.
16469
16470         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
16471         instead. 
16472
16473         * tree.cs: Removed the various RecordXXXX, and replaced with a
16474         single RecordDecl.  Removed all the accessor methods, and just
16475         left a single access point Type 
16476
16477         * enum.cs: Rename DefineEnum to DefineType.
16478
16479         * decl.cs: New abstract method `DefineType' used to unify the
16480         Defines for Enumerations, Interfaces, TypeContainers and
16481         Delegates.
16482
16483         (FindType): Moved LookupInterfaceOrClass here.  Moved the
16484         LookupBaseClasses method that used to live in class.cs and
16485         interface.cs here, and renamed to FindType.
16486
16487         * delegate.cs: Implement DefineType.  Take advantage of the
16488         refactored pattern for locating the parent builder without taking
16489         the parent_builder argument (which we know does not work if we are
16490         nested, and triggering a toplevel definition).
16491
16492 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
16493
16494         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
16495         accessibility of a member has changed during override and report
16496         an error if so.
16497
16498         * class.cs (Method.Define, Property.Define): Only complain on
16499         overrides if the method is private, any other accessibility is
16500         fine (and since we just checked the permission is the same, we are
16501         good to go).
16502
16503         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
16504         and elif are processed always.  The other pre-processing
16505         directives are only processed if we are "taking" the path
16506
16507 2002-03-29  Martin Baulig  <martin@gnome.org>
16508
16509         * class.cs (Method.Emit): Only emit symbolic debugging info if the
16510         current location is not Null.
16511
16512         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
16513         a separate method so we can profile it.
16514
16515         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
16516         `span.Seconds' are just seconds, but no minutes or hours.
16517         (MainDriver): Profile the CodeGen.SaveSymbols calls.
16518
16519 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
16520
16521         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
16522         Remove the gratuitous set of Final:
16523
16524                                 // If an interface implementation, then we can set Final.
16525                                 if (((flags & MethodAttributes.Abstract) == 0) &&
16526                                     implementing.DeclaringType.IsInterface)
16527                                         flags |= MethodAttributes.Final;
16528
16529         I do not know what I was smoking when I used that.
16530
16531
16532         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
16533         step into fixing the name resolution issues for delegates and
16534         unifying the toplevel name resolution.
16535
16536 2002-03-28  Martin Baulig  <martin@gnome.org>
16537
16538         * class.cs (Method.Emit): If we have a symbol writer, call its
16539         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
16540         tell it about the current method.
16541
16542         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
16543         writer that we're going to emit the first byte of IL code for a new
16544         statement (a new source line).
16545         (EmitContext.EmitTopBlock): If we have a symbol writer, call
16546         EmitContext.Mark() before emitting any code.
16547
16548         * location.cs (SymbolDocument): Return null when we're Null.
16549
16550         * statement.cs (Statement): Moved the `Location loc' variable here.
16551         (Statement.EmitBoolExpression): If we have a symbol writer, call
16552         ec.Mark() before emitting any code to tell it that we're at the
16553         beginning of a new statement.
16554         (StatementExpression): Added `Location' argument to the constructor.
16555         (Block): Added public readonly variable `StartLocation' and public
16556         variable `EndLocation'.  The latter is to be set using SetEndLocation().
16557         (Block): Added constructor which takes a start and end location.
16558         (Block.SetEndLocation): New method. This sets the end location.
16559         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
16560         local variables we create.
16561         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
16562         each statement and do also mark the begin and end of the block.
16563
16564         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
16565         tell it the current lexer.Location, use Location.Null for the end of the
16566         block.
16567         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
16568         current block, set its end location using SetEndLocation().
16569         (statement_expression): StatementExpression constructor now takes the
16570         lexer.Location as additional argument.
16571         (for_statement, declare_local_variables): Likewise.
16572         (declare_local_variables): When creating a new implicit block, use the
16573         new Block constructor and pass it the lexer.Location.
16574
16575 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
16576
16577         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
16578         members also on the parent interfaces recursively.
16579
16580 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
16581
16582         * report.cs: Use new formats, since Gonzalo finished the missing
16583         bits. 
16584
16585         * expression.cs (Binary.ResolveOperator): added missing operator|
16586         operator& and operator^ for bool/bool.
16587
16588         * cs-parser.jay: CheckDef now takes a Location argument that is
16589         used to report errors more precisly (instead of reporting the end
16590         of a definition, we try to track something which is a lot closer
16591         to the source of the problem).
16592
16593         * cs-tokenizer.cs: Track global token use, so we can properly flag
16594         the use of #define/#undef after the first token has been seen.
16595
16596         Also, rename the reportXXXX to Error_DescriptiveName
16597
16598         * decl.cs (DeclSpace.IsTopLevel): Move property here from
16599         TypeContainer, so that Enum and Interface can use this too.
16600
16601         * class.cs (TypeContainer.LookupInterfaceOrClass,
16602         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
16603         `builder' argument.  Typically this was used to pass the parent
16604         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
16605         the definition).  
16606
16607         The problem is that a nested class could trigger the definition of
16608         a toplevel class, and the builder would be obviously wrong in that
16609         case. 
16610
16611         So we drop this argument, and we compute dynamically the
16612         TypeBuilder/ModuleBuilder (the correct information was available
16613         to us anyways from DeclSpace.Parent)
16614
16615         * interface.cs (Interface.DefineInterface): Drop builder
16616         parameter cleanup like class.cs
16617
16618         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
16619         like class.cs
16620
16621         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
16622         values. 
16623
16624         (Try.Emit): Propagate the returns value from the statement.
16625
16626         (Return.Emit): Even if we are leavning 
16627
16628         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
16629
16630         * modifiers.cs: Fix the computation of MethodAttributes flags.
16631
16632 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
16633
16634         * driver.cs: allow compilation of files that start with '/'.
16635         Add a default case when checking the argument of --target.
16636
16637 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
16638
16639         * interface.cs: Implement the same search algorithm for types in
16640         the interface code.
16641
16642         * delegate.cs: Do not allow multiple definition.
16643
16644         * Recovered ChangeLog that got accidentally amputated
16645
16646         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
16647
16648         * rootcontext.cs: Load manually enum to allow core classes to
16649         contain enumerations.
16650
16651         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
16652         Update to new static methods in TypeManager.
16653
16654         * typemanager.cs (GetMethod, GetConstructor): Use our
16655         implementation of FindMembers to find the members, since during
16656         corlib compilation, the types are TypeBuilders and GetMethod and
16657         GetConstructor do not work.
16658
16659         Make all methods in TypeManager static.
16660
16661         (InitCodeHelpers): Split the functionality from
16662         the InitCodeTypes function.
16663
16664         * driver.cs: Call InitCodeHelpers after we have populated the
16665         types. 
16666
16667         * cs-parser.jay (delegate_declaration): we did not used to compute
16668         the delegate name correctly for void delegates.
16669
16670 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
16671
16672         * rootcontext.cs (RootContext): Init the interface_resolve_order
16673         and type_container_resolve_order always.
16674
16675         (ResolveCore, BootstrapCorlib_ResolveClass,
16676         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
16677         compiler when compiling with --nostdlib
16678
16679         * class.cs (TypeContainer.DefineType): Check that our parent is
16680         not null.  This test is most important when we are bootstraping
16681         the core types.
16682
16683         * codegen.cs: Split out the symbol writing code.
16684
16685 2002-03-25  Martin Baulig  <martin@gnome.org>
16686
16687         * driver.cs (-g): Made -g an alias for --debug.
16688
16689 2002-03-24  Martin Baulig  <martin@gnome.org>
16690
16691         * codegen.cs (SymbolWriter): New public variable. Returns the
16692         current symbol writer.
16693         (CodeGen): Added `bool want_debugging_support' argument to the
16694          constructor. If true, tell the ModuleBuild that we want debugging
16695         support and ask it for the ISymbolWriter.
16696         (Save): If we have a symbol writer, call it's Close() method after
16697         saving the assembly.
16698
16699         * driver.c (--debug): New command line argument to create a
16700         debugger information file.
16701
16702         * location.cs (SymbolDocument): New public property. Returns an
16703         ISymbolDocumentWriter object for the current source file or null
16704         if we don't have a symbol writer.
16705
16706 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
16707
16708         * driver.cs (LoadAssembly): Correctly return when all the paths
16709         have been tried and not before.
16710
16711         * statement.cs (Switch.Emit): return the actual coverage for this
16712         statement (returns/not-returns)
16713
16714         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
16715         switch of the statement if we are the last switch section.  That
16716         kills two problems: try/catch problems (we used to emit an empty
16717         nop at the end) and switch statements where all branches would
16718         return. 
16719
16720 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
16721
16722         * driver.cs: Add default assemblies (the equivalent to the
16723         Microsoft CSC.RSP file)
16724
16725         * cs-tokenizer.cs: When updating `cols and setting it to zero,
16726         also update tokens_seen and set it to false.
16727
16728         * driver.cs: Implement --recurse for Mike.
16729
16730         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
16731         correctly splitting out the paths.
16732
16733 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
16734
16735         * interface.cs (Interface.PopulateProperty): Instead of using
16736         `parent' as the declaration space for the set parameters, use
16737         `this' 
16738
16739         * support.cs (InternalParameters): InternalParameters constructor
16740         takes a DeclSpace instead of a TypeContainer.
16741
16742         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
16743         types are being initialized, load the address of it before calling
16744         the function.  
16745
16746         (New): Provide a mechanism to disable the generation of local
16747         value type temporaries when the caller will be providing us with
16748         an address to store it.
16749
16750         (ArrayCreation.EmitDynamicInitializers): Use it.
16751
16752 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
16753
16754         * expression.cs (Invocation.EmitArguments): Only probe for array
16755         property if there is more than one argument.  Sorry about that.
16756
16757         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
16758         empty param arrays.
16759
16760         * class.cs (Method.LabelParameters): Fix incorrect code path that
16761         prevented the `ParamArrayAttribute' from being applied to the
16762         params attribute.
16763
16764 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
16765
16766         * support.cs (ReflectionParameters): Correctly compute whether the
16767         last argument is a params array.  Fixes the problem with
16768         string.Split ('a')
16769
16770         * typemanager.cs: Make the assemblies array always be non-null
16771         (empty, but non-null)
16772
16773         * tree.cs (RecordDecl): New function that abstracts the recording
16774         of names.  This reports error 101, and provides a pointer to the
16775         previous declaration.  Fixes a crash in the compiler.
16776
16777         * cs-parser.jay (constructor_declaration): Update to new grammar,
16778         and provide a constructor_body that can be empty.
16779
16780 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
16781
16782         * driver.cs: Add support for --resources.
16783
16784         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
16785         Make all types for the various array helper methods be integer.
16786
16787         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
16788         CheckState to ConvCast.
16789
16790         (ConvCast): Now it takes a `checked' state argument, to avoid
16791         depending on the emit context for the conversion, and just using
16792         the resolve time setting.
16793
16794         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
16795         instead of Invocation.EmitArguments.  We do not emit the original
16796         arguments, instead we emit those which have been converted to
16797         unsigned int expressions.
16798
16799         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
16800
16801         * codegen.cs: ditto.
16802
16803         * expression.cs (LocalVariableReference): Drop the use of the
16804         Store function that depended on the variable index.
16805
16806         * statement.cs (VariableInfo): Drop the `Idx' property from this
16807         class, as this is not taking into account the indexes for
16808         temporaries tat we generate during the execution, getting the
16809         indexes wrong.
16810
16811         * class.cs: First emit class initializers, then call the parent
16812         constructor. 
16813
16814         * expression.cs (Binary): Fix opcode emision.
16815         (UnaryMutator.EmitCode): Support checked code generation
16816
16817         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
16818         matches for events for both the Static and Instance scans,
16819         pointing to the same element.   Fix that.
16820
16821 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
16822
16823         * rootcontext.cs (ResolveTree): Always set the
16824         interface_resolve_order, because nested interfaces will be calling
16825         into us.
16826
16827         * class.cs (GetInterfaceOrClass): Track the same resolution
16828         process used by TypeManager.LookupType.  This fixes the nested
16829         type lookups in class declarations (separate path from
16830         LookupType). 
16831
16832         (TypeContainer.DefineType): Also define nested interfaces.
16833         (TypeContainer.RegisterOrder): New public function used to
16834         register the order in which child interfaces need to be closed.
16835
16836         Nested interfaces need to be closed after their parents have been
16837         created. 
16838
16839         * interface.cs (InterfaceAttr): Put all the logic for computing
16840         the interface attribute here. 
16841
16842         (DefineInterface): Register our interface order with the
16843         RootContext or with the TypeContainer depending on the case.
16844
16845 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
16846
16847         * cs-parser.jay: rework foreach statement to work with the new
16848         changes to the policy on SimpleNames.
16849
16850         * report.cs: support Stacktrace on warnings as well.
16851
16852         * makefile: drop --unsafe and /unsafe from the compile.
16853
16854 2002-03-13  Ravi Pratap  <ravi@ximian.com>
16855
16856         * ecore.cs (StandardConversionExists): Modify to take an Expression
16857         as the first parameter. Ensure we do null -> reference type conversion
16858         checking.
16859
16860         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
16861         temporary Expression objects.
16862
16863 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
16864
16865         * interface.cs: workaround bug in method overloading resolution
16866         (there is already a bugzilla bug for it).
16867
16868 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
16869
16870         We could also solve this problem by having a separate path for
16871         performing type lookups, instead of DoResolve, we could have a
16872         ResolveType entry point, and only participating pieces of the
16873         production (simplename, deref, array) would implement this. 
16874
16875         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
16876         signal SimpleName to only resolve type names and not attempt to
16877         resolve anything else.
16878
16879         * expression.cs (Cast): Set the flag.
16880
16881         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
16882
16883         * class.cs: Only report 108 if there is no `new' modifier.
16884
16885         * cs-parser.jay: rework foreach statement to work with the new
16886         changes to the policy on SimpleNames.
16887         
16888         * report.cs: support Stacktrace on warnings as well.
16889
16890         * makefile: drop --unsafe and /unsafe from the compile.
16891
16892 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
16893
16894         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
16895         lookups here, instead of doing that at parse time.  This means
16896         that our grammar will not introduce `LocalVariableReferences' as
16897         expressions at this point.  That solves the problem of code like
16898         this:
16899
16900         class X {
16901            static void Main ()
16902            { int X = 1;
16903             { X x = null }}}
16904
16905         This is only half the fix.  The full fix requires parameters to
16906         also be handled in this way.
16907
16908         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
16909         makes the use more obvious of the DeclSpace.  The
16910         ec.TypeContainer.TypeBuilder is now only used to pull the
16911         TypeBuilder for it.
16912
16913         My theory is that I can get rid of the TypeBuilder completely from
16914         the EmitContext, and have typecasts where it is used (from
16915         DeclSpace to where it matters).  
16916
16917         The only pending problem is that the code that implements Aliases
16918         is on TypeContainer, and probably should go in DeclSpace.
16919
16920         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
16921         lookups here, instead of doing that at parse time.  This means
16922         that our grammar will not introduce `LocalVariableReferences' as
16923         expressions at this point.  That solves the problem of code like
16924         this:
16925
16926         class X {
16927            static void Main ()
16928            { int X = 1;
16929             { X x = null }}}
16930
16931         This is only half the fix.  The full fix requires parameters to
16932         also be handled in this way.
16933
16934         * class.cs (Property.DefineMethod): When implementing an interface
16935         method, set newslot, when implementing an abstract method, do not
16936         set the flag (before we tried never setting it, or always setting
16937         it, which is the difference).
16938         (Indexer.DefineMethod): same.
16939         (Method.DefineMethod): same.
16940
16941         * ecore.cs: Only set the status used flag if we get back a Field.
16942
16943         * attribute.cs: Temporary hack, so Paolo can keep working.
16944
16945 2002-03-08  Ravi Pratap  <ravi@ximian.com>
16946
16947         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
16948         the unmanaged type in the case we have a MarshalAs attribute.
16949
16950         (Resolve): Handle the case when we are parsing the special MarshalAs
16951         attribute [we need to store the unmanaged type to use later]
16952
16953         * typemanager.cs (marshal_as_attr_type): Built in type for the 
16954         MarshalAs Attribute.
16955
16956         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
16957         on parameters and accordingly set the marshalling info.
16958
16959 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
16960
16961         * class.cs: Optimizing slightly by removing redundant code after
16962         we switched to the `NoTypes' return value.
16963         (Property.DefineMethod): use NoTypes here too.
16964
16965         This fixes the bug I introduced in my last batch of changes.
16966
16967 2002-03-05  Ravi Pratap  <ravi@ximian.com>
16968
16969         * tree.cs (RecordEnum): Add. We now keep track of enums too.
16970
16971         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
16972         Enums since those are types too. 
16973
16974         * cs-parser.jay (enum_declaration): Record enums as we parse them.
16975
16976         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
16977         thanks to a call during the lookup process.
16978
16979 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
16980
16981         * statement.cs (Foreach): Lots of work to accomodate a particular
16982         kind of foreach statement that I had not kept in mind.  It is
16983         possible to have foreachs on classes that provide a GetEnumerator
16984         method that return objects that implement the "pattern" for using
16985         a foreach, there is no need to support GetEnumerator
16986         specifically. 
16987
16988         This is needed to compile nant.
16989
16990         * decl.cs: Only report 114 if the member is not `Finalize' and if
16991         the warning level is at least 2.
16992
16993         * class.cs: Moved the compare function from Method to
16994         MethodSignature. 
16995
16996         (MethodSignature.InheritableMemberSignatureCompare): Add new
16997         filter function that is used to extract inheritable methods from a
16998         class. 
16999
17000         (Method.Define): Use the new `inheritable_method_signature_filter'
17001         delegate
17002
17003         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
17004         command. 
17005
17006 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
17007
17008         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
17009
17010         * cs-parser.jay: Add opt_semicolon to the interface declaration.
17011
17012         * expression.cs: Pass location information to
17013         ConvertImplicitStandard. 
17014
17015         * class.cs: Added debugging code to track return values from
17016         interfaces. 
17017
17018 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
17019
17020         * expression.cs (Is.DoResolve): If either side of the `is' is an
17021         interface, do not flag the warning.
17022
17023         * ecore.cs (ImplicitReferenceConversion): We need a separate test
17024         for interfaces
17025
17026         * report.cs: Allow for --fatal to be used with --probe.
17027
17028         * typemanager.cs (NoTypes): Move the definition for the empty Type
17029         array here. 
17030
17031         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
17032         properties. 
17033         (TypeContainer.DefineProxy): New function used to proxy to parent
17034         implementations when implementing interfaces.
17035         (TypeContainer.ParentImplements): used to lookup if our parent
17036         implements a public function that is required by an interface.
17037         (TypeContainer.VerifyPendingMethods): Hook this up.
17038
17039         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
17040         `modules' and `assemblies' arraylists into arrays.  We only grow
17041         these are the very early start up of the program, so this improves
17042         the speedof LookupType (nicely measured).
17043
17044         * expression.cs (MakeByteBlob): Replaced unsafe code with
17045         BitConverter, as suggested by Paolo.
17046
17047         * cfold.cs (ConstantFold.Binary): Special case: perform constant
17048         folding of string concatenation, but if either side is a string,
17049         and the other is not, then return null, and let the runtime use
17050         the concatenation on the string plus the object (using
17051         `Object.ToString'). 
17052
17053 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
17054
17055         Constant Folding has been implemented now.
17056
17057         * expression.cs (Unary.Reduce): Do not throw an exception, catch
17058         the error instead on types that are not supported in one's
17059         complement. 
17060
17061         * constant.cs (Constant and all children): New set of functions to
17062         perform implict and explicit conversions.
17063
17064         * ecore.cs (EnumConstant): Implement the new functions to perform
17065         conversion by proxying to the child expression.
17066
17067         * codegen.cs: (ConstantCheckState): Constant evaluation has its
17068         own separate setting that can not be turned off from the command
17069         line using --unchecked or --checked and is only controlled using
17070         the checked/unchecked statements and expressions.  This setting is
17071         used by the constant folder to flag errors.
17072
17073         * expression.cs (CheckedExpr, UncheckedExpr): Set the
17074         ConstantCheckState as well.   
17075
17076         During Resolve, they also have to flag the state, because the
17077         constant folder runs completely in the Resolve phase.
17078
17079         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
17080         well.
17081
17082 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
17083
17084         * cfold.cs: New file, this file contains the constant folder.
17085
17086         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
17087         argument to track whether we are using the resulting address to
17088         load or store a value and provide better error messages. 
17089
17090         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
17091         new AddressOf arguments.
17092
17093         * statement.cs (Foreach.EmitCollectionForeach): Update
17094
17095         * expression.cs (Argument.Emit): Call AddressOf with proper
17096         arguments to track usage.
17097
17098         (New.DoEmit): Call AddressOf with new arguments.
17099
17100         (Unary.Emit): Adjust AddressOf call.
17101
17102 2002-03-01  Ravi Pratap  <ravi@ximian.com>
17103
17104         * cs-parser.jay (member_access): Change the case for pre-defined types
17105         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
17106         this suggestion.
17107
17108         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
17109         a method body.
17110
17111         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
17112         essentially like methods and apply attributes like MethodImplOptions to them too.
17113
17114         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
17115         not being null.
17116
17117         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
17118         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
17119         is the DeclSpace.
17120
17121         * Update code everywhere accordingly.
17122
17123         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
17124
17125         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
17126
17127 2002-02-28  Ravi Pratap  <ravi@ximian.com>
17128
17129         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
17130         try performing lookups against those instead of jumping straight into using
17131         the 'using' clauses.
17132
17133         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
17134
17135         (LookupType): Perform lookups in implicit parents too.
17136
17137         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
17138         sequence as RootContext.LookupType. 
17139
17140         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
17141         the various cases of namespace lookups into this method.
17142
17143 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
17144
17145         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
17146         in positional arguments)
17147
17148         * class.cs (Operator): Update the AllowedModifiers to contain
17149         extern. 
17150
17151         * cs-parser.jay: Update operator declaration to allow for the
17152         operator body to be empty.
17153
17154         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
17155         values. 
17156
17157 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
17158
17159         * class.cs (Method.Emit): Label parameters.
17160
17161         * driver.cs: Return 1 or 0 as the program exit code.
17162
17163 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
17164
17165         * expression.cs: Special case the `null' object when trying to
17166         auto-compute the type, as anything can be explicitly converted to
17167         that. 
17168
17169         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
17170         spotting this Paolo.
17171
17172         (Expression.ImplicitNumericConversion): Perform comparissions of
17173         the type using the underlying type in the case of an enumeration
17174         rather than using the enumeration type for the compare.
17175
17176         Cope with the underlying == type case, which is not possible to
17177         catch before. 
17178
17179         (Expression.ConvertNumericExplicit): Perform comparissions of
17180         the type using the underlying type in the case of an enumeration
17181         rather than using the enumeration type for the compare.
17182
17183         * driver.cs: If the user does not supply an extension, assume .exe
17184
17185         * cs-parser.jay (if_statement): Rewrote so that we can track the
17186         location for the if statement.
17187
17188         * expression.cs (Binary.ConstantFold): Only concat strings when
17189         the operation is "+", not everything ;-)
17190
17191         * statement.cs (Statement.EmitBoolExpression): Take a location
17192         argument. 
17193         (If, While, Do): Track location.
17194
17195         * expression.cs (Binary.ResolveOperator): In the object + string
17196         case, I was missing a call to ConvertImplicit
17197
17198 2002-02-25  Ravi Pratap  <ravi@ximian.com>
17199
17200         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
17201         Location arguments. Ensure we use RootContext.LookupType to do our work
17202         and not try to do a direct Type.GetType and ModuleBuilder.GetType
17203
17204         * interface.cs (PopulateMethod): Handle the type of the parameter being
17205         null gracefully.
17206
17207         * expression.cs (Invocation.BetterFunction): Handle the case when we 
17208         have a params method with no fixed arguments and a call is made with no
17209         arguments.
17210
17211 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
17212
17213         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
17214         the verbatim-string-literal
17215
17216         * support.cs (InternalParameters.ParameterModifier): handle null
17217         fixed parameters.
17218         (InternalParameters.ParameterType): ditto.
17219
17220         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
17221         duplicating the name of the variable parameter.
17222         (GetParameterByName): Fix bug where we were not looking up array
17223         paramters if they were the only present (thanks Paolo!).
17224         (GetParameterInfo): We only have an empty set of types if both
17225         fixed and array are set to null.
17226         (GetParameterInfo-idx): Handle FixedParameter == null
17227
17228         * cs-parser.jay: Handle the case where there is no catch
17229         statements (missing null test).
17230
17231 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
17232
17233         * driver.cs (MainDriver): Be conservative on our command line
17234         handling.
17235
17236         Catch DirectoryNotFoundException when calling GetFiles.
17237
17238         (SplitPathAndPattern): Used to split the input specification into
17239         a path and a pattern that we can feed to Directory.GetFiles.
17240
17241 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
17242
17243         * statement.cs (Fixed): Implement the last case of the Fixed
17244         statement (string handling).
17245
17246         * expression.cs (StringPtr): New class used to return a char * to
17247         a string;  Used by the Fixed statement.
17248
17249         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
17250
17251         * expression.cs (Binary.ResolveOperator): Remove redundant
17252         MemberLookup pn parent type.
17253         Optimize union call, we do not need a union if the types are the same.
17254         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
17255         type.
17256
17257         Specialize the use of MemberLookup everywhere, instead of using
17258         the default settings. 
17259
17260         (StackAlloc): Implement stackalloc keyword.
17261
17262         * cs-parser.jay: Add rule to parse stackalloc.
17263
17264         * driver.cs: Handle /h, /help, /?
17265
17266         * expression.cs (MakeByteBlob): Removed the hacks we had in place
17267         before we supported unsafe code.
17268
17269         * makefile: add --unsafe to the self compilation of mcs.
17270
17271 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
17272
17273         * expression.cs (PointerArithmetic): New class that is used to
17274         perform pointer arithmetic.
17275         (Binary.Resolve): Handle pointer arithmetic
17276         Handle pointer comparission.
17277         (ArrayPtr): Utility expression class that is used to take the
17278         address of an array.
17279
17280         (ElementAccess): Implement array access for pointers
17281
17282         * statement.cs (Fixed): Implement fixed statement for arrays, we
17283         are missing one more case before we are done.
17284
17285         * expression.cs (Indirection): Implement EmitAssign and set the
17286         ExprClass to Variable.  This allows pointer dereferences to be
17287         treated as variables, and to have values assigned to them.
17288
17289         * ecore.cs (Expression.StoreFromPtr): New utility function to
17290         store values dereferencing.
17291
17292 2002-02-20  Ravi Pratap  <ravi@ximian.com>
17293
17294         * expression.cs (Binary.ResolveOperator): Ensure that we are
17295         not trying to operate on a void type - this fixes the reported
17296         bug.
17297
17298         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
17299         the parent implementation is sealed.
17300
17301         * ../errors/cs0239.cs : Add.
17302
17303         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
17304
17305         * typemanager.cs (unverifiable_code_type): Corresponds to 
17306         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
17307         which have unsafe code in them.
17308
17309         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
17310         unsafe context.
17311
17312 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
17313
17314         * cs-tokenizer.cs: Add support for @"litreal strings"
17315
17316         Make tokenizer accept pre-processor directives
17317         on any column (remove the old C-like limitation). 
17318
17319         * rootcontext.cs (EmitCode): Emit any global attributes.
17320         (AddGlobalAttributes): Used to keep track of assembly attributes. 
17321
17322         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
17323
17324         * cs-parser.jay: Add support for global attributes.  
17325
17326 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
17327
17328         * expression.cs (Indirection): New helper class.  Unary will
17329         create Indirection classes to be able to implement the
17330         IMemoryLocation interface on it.
17331
17332 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
17333
17334         * cs-parser.jay (fixed_statement): reference the right statement.
17335
17336         * statement.cs (Fixed.Emit): Finish implementing the fixed
17337         statement for the &x case.
17338
17339 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
17340
17341         * class.cs (Property.Define, Method.Define): Remove newslot when
17342         `implementing'.  
17343
17344         * modifiers.cs: My use of NewSlot when `Abstract' was set was
17345         wrong.  NewSlot should only be used if the `new' keyword is present.
17346
17347         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
17348         locating our system dir.  Sorry about this.
17349
17350 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
17351
17352         * driver.cs (GetSystemDir): Compute correctly the location of our
17353         system assemblies.  I was using the compiler directory instead of
17354         the library directory.
17355
17356 2002-02-13  Ravi Pratap  <ravi@ximian.com>
17357
17358         * expression.cs (BetterFunction): Put back in what Miguel commented out
17359         since it is the correct fix. The problem is elsewhere ;-)
17360
17361         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
17362         parameters of the parms method are themselves compatible or not !
17363
17364         (StandardConversionExists): Fix very dangerous bug where we were forgetting
17365         to check that a class implements an interface before saying that an implicit
17366         conversion was allowed. Use ImplementsInterface to do the checking.
17367
17368 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
17369
17370         * class.cs (Method.Define): Track whether we are an explicit
17371         implementation or not.  And only call DefineMethodOverride if we
17372         are an explicit implementation.
17373
17374         (Property.DefineMethod): Ditto.
17375
17376 2002-02-11  Ravi Pratap  <ravi@ximian.com>
17377
17378         * expression.cs (BetterFunction): Catch hideous bug which was
17379          preventing us from detecting ambiguous calls due to implicit casts i.e
17380         cs0121.
17381
17382 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
17383
17384         * support.cs (Pair): Remove un-needed method.  I figured why I was
17385         getting the error in cs-parser.jay, the variable in a foreach loop
17386         is readonly, and the compiler does not really treat this as a variable.
17387
17388         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
17389         instead of EQUALS in grammar.  
17390
17391         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
17392
17393         * expression.cs (Unary.DoResolve): Check whether the argument is
17394         managed or not.
17395
17396 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
17397
17398         * support.cs: Api for Pair to set a value.  Despite the fact that
17399         the variables are public the MS C# compiler refuses to compile
17400         code that accesses the field if the variable is part of a foreach
17401         statement. 
17402
17403         * statement.cs (Fixed): Begin implementation of the fixed
17404         statement.
17405
17406         (Block.AddVariable): Return the VariableInfo on success and null
17407         on failure instead of true/false. 
17408
17409         * cs-parser.jay (foreach): Catch errors on variables already
17410         defined (we were ignoring this value before) and properly unwind
17411         the block hierarchy
17412
17413         (fixed_statement): grammar for the fixed statement.
17414
17415 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
17416
17417         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
17418         pointer types to be incretemented.
17419
17420         (SizeOf): Implement.
17421
17422         * cs-parser.jay (pointer_member_access): Implement
17423         expr->IDENTIFIER production.
17424
17425         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
17426         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
17427         on safe contexts.
17428
17429         (Unary): Implement indirection.
17430
17431         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
17432         use in non-unsafe context).
17433
17434         (SimpleName.DoResolve): Check for pointers in field access on safe
17435         contexts. 
17436
17437         (Expression.LoadFromPtr): Factor the load-indirect code in this
17438         function.  This was duplicated in UnboxCast and ParameterReference
17439
17440 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
17441
17442         * expression.cs (ComposedCast): report an error if a pointer cast
17443         is used in a safe region.
17444
17445         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
17446         pointer type casts in unsafe context.
17447
17448         * codegen.cs (EmitContext): Set up IsUnsafe.
17449
17450         * cs-parser.jay (non_expression_type): Add productions for pointer
17451         casts. 
17452
17453         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
17454         code.  We should not use force into static mode if the method is
17455         not virtual.  Fixes bug in MIS
17456
17457         * statement.cs (Do.Emit, While.Emit, For.Emit,
17458         Statement.EmitBoolExpression): Add support to Do and While to
17459         propagate infinite loop as `I do return' semantics.
17460
17461         Improve the For case to also test for boolean constants.
17462
17463         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
17464         to the list of attributes we can add.
17465
17466         Remove `EmitContext' argument.
17467
17468         * class.cs (Method.Define): Apply parameter attributes.
17469         (Constructor.Define): Apply parameter attributes.
17470         (MethodCore.LabelParameters): Move here the core of labeling
17471         parameters. 
17472
17473         * support.cs (ReflectionParameters.ParameterModifier,
17474         InternalParameters.ParameterModifier): Use IsByRef on the type and
17475         only return the OUT bit for these parameters instead of in/out/ref
17476         flags.
17477
17478         This is because I miss-understood things.  The ParameterInfo.IsIn
17479         and IsOut represent whether the parameter has the [In] and [Out]
17480         attributes set.  
17481
17482 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
17483
17484         * ecore.cs (FieldExpr.Emit): Release temporaries.
17485
17486         * assign.cs (LocalTemporary.Release): new function.
17487
17488         * codegen.cs (EmitContext.GetTemporaryStorage,
17489         EmitContext.FreeTemporaryStorage): Rework the way we deal with
17490         temporary storage.  Now we can "put back" localbuilders when we
17491         are done with them
17492
17493 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
17494
17495         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
17496         need to make a copy of the variable to generate verifiable code.
17497
17498 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
17499
17500         * driver.cs: Compute dynamically the system directory.
17501
17502         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
17503         Slower, but more generally useful.  Used by the abstract
17504         registering implementation. 
17505
17506         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
17507         the rules for the special rule on Type/instances.  First check if
17508         we have the same name, and if so, try that special static path
17509         rather than the instance path.
17510
17511 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
17512
17513         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
17514         for, while and if.
17515
17516         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
17517         Enum, ValueType, Delegate or Array for non-corlib compiles.
17518
17519         * cs-tokenizer.cs: Catch long identifiers (645)
17520
17521         * typemanager.cs (IndexerPropetyName): Ravi never tested this
17522         piece of code.
17523
17524         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
17525         fix, we were returning too early, so we were not registering
17526         pending methods from abstract classes.
17527
17528         Do not register pending methods if the class is abstract.
17529
17530         * expression.cs (Conditional.DoResolve): Report circular implicit
17531         conversions when we neecd to compute it for conditional
17532         expressions. 
17533
17534         (Is.DoResolve): If the expression is always of the provided type,
17535         flag warning 183.  If the expression can not ever be of the
17536         provided type flag warning 184.
17537
17538         * class.cs: Catch 169 as well.
17539
17540         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
17541         read. 
17542
17543 2002-01-18  Nick Drochak  <ndrochak@gol.com>
17544
17545         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
17546
17547 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
17548
17549         * interface.cs: (PopulateMethod): Check for pointers being defined
17550         only if the unsafe context is active.
17551         (PopulateProperty): ditto.
17552         (PopulateIndexer): ditto.
17553
17554         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
17555         specified.  If pointers are present, make sure that they are
17556         present in an unsafe context.
17557         (Constructor, Constructor.Define): ditto.
17558         (Field, Field.Define): ditto.
17559         (Property, Property.Define): ditto.
17560         (Event, Event.Define): ditto.
17561
17562         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
17563         hashtable if there are classes or structs defined.
17564
17565         * expression.cs (LocalVariableReference.DoResolve): Simplify this
17566         code, as the constant resolution moved.
17567
17568         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
17569         the metadata, so we can flag error 133. 
17570
17571         * decl.cs (MemberCore.UnsafeOK): New function to test that a
17572         pointer is being declared in an unsafe context.
17573
17574 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
17575
17576         * modifiers.cs (Modifiers.Check): Require a Location argument.
17577         Report error 227 for Unsafe use.
17578
17579         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
17580
17581         * statement.cs (For.Emit): If the test is null, then report that
17582         we do `return', as we wont reach anything afterwards.
17583
17584         (Switch.SwitchGoverningType): Track the expression that matched
17585         the conversion.
17586
17587         * driver.cs: Allow negative numbers as an error code to flag.
17588
17589         * cs-parser.jay: Handle 1551.
17590
17591         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
17592
17593 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
17594
17595         * cs-parser.jay: Report 1518 (type declaration can only contain
17596         class, struct, interface, enum or delegate)
17597
17598         (switch_label): Report 1523 (keywords `case' or `default' must
17599         preced code)
17600
17601         (opt_switch_sections): Report 1522 (empty switch)
17602
17603         * driver.cs: Report 1515 (response file specified multiple times)
17604         Report 1516 (Source file specified multiple times).
17605
17606         * expression.cs (Argument.Resolve): Signal 1510
17607
17608         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
17609         access not allowed in static code)
17610
17611 2002-01-11  Ravi Pratap  <ravi@ximian.com>
17612
17613         * typemanager.cs (IsPointerType): Utility method which we are going
17614         to need a lot.
17615
17616         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
17617         the object type, so we take care of that.
17618
17619         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
17620
17621         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
17622         added to non-params parameters :-)
17623
17624         * typemanager.cs (CSharpName): Include 'void' type too. 
17625
17626         (void_ptr_type): Include in the set of core types.
17627
17628         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
17629         duplicating code.
17630
17631         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
17632         an unsafe context.
17633
17634         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
17635         completely forgotten about it.
17636
17637 2002-01-10  Ravi Pratap  <ravi@ximian.com>
17638
17639         * cs-parser.jay (pointer_type): Add. This begins our implementation
17640         of parsing rules for unsafe code.
17641
17642         (unsafe_statement): Implement.
17643
17644         (embedded_statement): Modify to include the above.
17645
17646         * statement.cs (Unsafe): Implement new class for unsafe blocks.
17647
17648         * codegen.cs (EmitContext.InUnsafe): Add. This determines
17649         if the current context is an unsafe one.
17650
17651         * cs-parser.jay (local_variable_pointer_type): Since local variable types
17652         are handled differently, we need separate rules for them.
17653
17654         (local_variable_declaration): Update to use local_variable_pointer_type
17655         to allow variable declarations of unmanaged pointer types.
17656
17657         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
17658         in unsafe contexts.
17659
17660         * ../errors/cs0214.cs : Add.
17661
17662 2002-01-16  Nick Drochak  <ndrochak@gol.com>
17663
17664         * makefile: remove 'response' file when cleaning.
17665
17666 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
17667
17668         * cs-parser.jay: Report 1524.
17669
17670 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
17671
17672         * typemanager.cs (RegisterMethod): drop checking if we have
17673         registered this from here
17674
17675 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
17676
17677         * class.cs (Method.EmitDestructor): Implement calling our base
17678         destructor. 
17679
17680         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
17681         value of InFinally.
17682
17683         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
17684         this routine and will wrap the call in a try/catch block.  Deal
17685         with the case.
17686
17687 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
17688
17689         * ecore.cs (Expression.MemberLookup): instead of taking a
17690         parameter `same_type' that was used to tell whether we could
17691         access private members we compute our containing type from the
17692         EmitContext.
17693
17694         (FieldExpr): Added partial support for volatile fields.  This does
17695         not work for volatile fields exposed from assemblies, as I can not
17696         figure out how to extract the modreq from it.
17697
17698         Updated all the source files to use this.
17699
17700         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
17701         because it is referenced by MemberLookup very often. 
17702
17703 2002-01-09  Ravi Pratap  <ravi@ximian.com>
17704
17705         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
17706         TypeBuilder.GetCustomAttributes to retrieve what we need.
17707
17708         Get rid of redundant default_member_attr_type as this is the same as
17709         default_member_type which already exists.
17710
17711         * interface.cs, attribute.cs : Update accordingly.
17712
17713 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
17714
17715         * typemanager.cs: Enable IndexerPropertyName again.  It does not
17716         work for TYpeBuilders though.  Ravi, can you please fix this?
17717
17718         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
17719
17720         * expression.cs (Argument.Emit): Handle the case of ref objects
17721         being passed to ref functions;  
17722
17723         (ParameterReference.EmitLoad): Loads the content of the pointer
17724         without dereferencing.
17725
17726 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
17727
17728         * cs-tokenizer.cs: Implemented the pre-processing expressions.
17729
17730 2002-01-08  Ravi Pratap  <ravi@ximian.com>
17731
17732         * class.cs (Indexer.DefineMethod): Incorporate the interface
17733         type in the name of the method if we are doing explicit interface
17734         implementation.
17735
17736         * expression.cs (ConversionExists): Remove as it is completely obsolete.
17737
17738         (BetterConversion): Fix extremely trivial bug where we were referring to
17739         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
17740         again !
17741
17742         * ../errors/bug16.cs : Add although we have fixed it.
17743
17744 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
17745
17746         * expression.cs (BaseIndexer): Begin implementation.
17747
17748         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
17749
17750         * cs-parser.jay (indexer_declarator): Use qualified_identifier
17751         production directly to remove a shift/reduce, and implement
17752         explicit interface implementation.
17753
17754         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
17755         after a floating point suffix.
17756
17757         * expression.cs (DoNumericPromotions): Improved the conversion for
17758         uint/uint.  If we have a constant, we avoid doing a typecast to a
17759         larger type.
17760
17761         * class.cs (Indexer): Implement explicit interface implementation
17762         for indexers.
17763
17764 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
17765
17766         * class.cs: make the default instance constructor public and hidebysig.
17767
17768 2001-01-03  Ravi Pratap  <ravi@ximian.com>
17769
17770         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
17771         so we can call it from elsewhere.
17772
17773         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
17774         we emit it internally if the class has a defined indexer; otherwise the user
17775         emits it by decorating the class definition with the DefaultMemberAttribute.
17776
17777         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
17778         attribute is not used on a type which defines an indexer.
17779
17780         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
17781         character when we skip whitespace.
17782
17783         * ../errors/cs0646.cs : Add.
17784
17785 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
17786
17787         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
17788         again. 
17789
17790         * makefile: Add practical target `mcs3.exe' which builds the third
17791         generation compiler. 
17792
17793         * expression.cs (New): Fix structures constructor calling.
17794
17795         * class.cs (Property, Method, Indexer): Emit Final flag on the
17796         method if we are an interface implementation and we are not
17797         abstract. 
17798
17799         * ecore.cs (PropertyExpr): New public field `IsBase', tells
17800         whether this property is referencing a `base' method.
17801
17802         * expression.cs (Invocation.EmitCall): take an extra argument:
17803         is_base, this is used to determine whether the `call' or
17804         `callvirt' opcode should be used.
17805
17806
17807         * delegate.cs: update EmitCall.
17808
17809         * class.cs (Method.Define): Set NewSlot for the cases where we are
17810         not implementing an interface method.
17811
17812         (Property.Define): ditto.
17813
17814 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
17815
17816         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
17817         'r'.  Allows mcs to parse itself fully.
17818
17819 2002-01-02  Ravi Pratap  <ravi@ximian.com>
17820
17821         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
17822         of the number of initializers that require the InitializeArray method.
17823
17824         (CheckIndices): Store the Expression in all cases - not the plain value. Also
17825         update the above field where necessary.
17826
17827         (MakeByteBlob): Update accordingly.
17828
17829         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
17830         greater than 2.
17831
17832         (EmitDynamicInitializers): Update in accordance with the new optimization.
17833
17834         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
17835         same OpCode applies.
17836
17837         * cs-parser.jay : Fix some glaring errors I introduced.
17838
17839 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
17840
17841         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
17842         so that we can check for name clashes there too.
17843
17844         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
17845         for interface indexers.
17846
17847         * interfaces.cs (Define): Emit the default member attribute.
17848
17849         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
17850         variable was being referred to while setting the value ;-)
17851
17852 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
17853
17854         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
17855         byte-by-byte information when we know the data is zero.
17856
17857         Make the block always a multiple of 4, because
17858         DefineInitializedData has a bug.
17859
17860         * assign.cs: Fix, we should assign from the temporary, not from
17861         the source. 
17862
17863         * expression.cs (MakeByteBlob): Fix my incorrect code.
17864
17865 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
17866
17867         * typemanager.cs (EnumToUnderlying): This function is used to get
17868         the underlying type from an enumeration, because it does not
17869         always work. 
17870
17871         * constant.cs: Use the I4_S form for values between -128 and 127.
17872
17873         * statement.cs (Block.LookupLabel): Looks up a label.
17874         (Block): Drop support for labeled blocks.
17875
17876         (LabeledStatement): New kind of statement that represents a label
17877         only.
17878
17879         (Goto): Finally implement this bad boy.
17880
17881         * cs-parser.jay: Update to reflect new mechanism to implement
17882         labels.
17883
17884 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
17885
17886         * codegen.cs (EmitContext.This): a codegen property that keeps the
17887         a single instance of this instead of creating many different this
17888         instances. 
17889
17890         * delegate.cs (Delegate.DoResolve): Update to use the property;
17891
17892         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
17893
17894         * expression.cs (BaseAccess.DoResolve): Ditto.
17895
17896 2001-12-29  Ravi Pratap  <ravi@ximian.com>
17897
17898         * typemanager.cs (methodimpl_attr_type): Add to hold the type
17899         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
17900
17901         (InitCoreTypes): Update accordingly.
17902
17903         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
17904         so we can quickly store the state.
17905
17906         (ApplyAttributes): Set the correct implementation flags
17907         for InternalCall methods.
17908
17909 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
17910
17911         * expression.cs (EmitCall): if a method is not virtual, then do
17912         not use callvirt on it.
17913
17914         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
17915         user defined stuff) requires the use of stobj, which takes an
17916         address on the stack instead of an array and an index.  So emit
17917         the Ldelema operation for it.
17918
17919         (EmitStoreOpcode): Use stobj for valuetypes.
17920
17921         (UnaryMutator.EmitCode): Use the right 1 value depending on
17922         whether we are dealing with int64/uint64, float or doubles.
17923
17924         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
17925         constructors that I implemented last night.
17926
17927         (Constructor.IsDefault): Fix to work properly for static
17928         constructors.
17929
17930         * cs-parser.jay (CheckDef): report method signature errors.
17931         Update error number 103 to be 132.
17932
17933         * decl.cs: New AdditionResult enumeration value: MethodExists.
17934         Although we do this check for methods later on in the semantic
17935         analysis, catching repeated default constructors is so easy that
17936         we catch these here. 
17937
17938         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
17939         promotions code.
17940
17941         (ParameterReference.EmitAssign, Emit): handle
17942         bools as bytes.
17943
17944         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
17945         (ArrayAccess.EmitStoreOpcode): ditto.
17946
17947         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
17948
17949         * expression.cs (MakeByteBlob): Complete all the missing types
17950         (uint, short, ushort, byte, sbyte)
17951
17952         * class.cs: Only init instance field initializers on instance
17953         constructors. 
17954
17955         Rename `constructors' to instance_constructors. 
17956
17957         (TypeContainer.AddConstructor): Only add constructors to the list
17958         if it is not static.
17959
17960         Make sure that we handle default_static_constructor independently
17961         everywhere where we handle instance_constructors
17962
17963 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
17964
17965         * class.cs: Do not lookup or create a base initializer for a
17966         static constructor.
17967
17968         (ConstructorInitializer.Resolve): use the proper type to lookup
17969         for constructors.
17970
17971         * cs-parser.jay: Report error 1585 (modifiers between type and name).
17972
17973         * enum.cs, interface.cs: Remove CloseType, this is taken care by
17974         in DeclSpace. 
17975
17976         * decl.cs: CloseType is now an virtual method, the default
17977         implementation just closes this type.
17978
17979 2001-12-28  Ravi Pratap  <ravi@ximian.com>
17980
17981         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
17982         to PreserveSig by default. Also emit HideBySig on such methods.
17983
17984         Basically, set the defaults to standard values.
17985
17986         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
17987         argument, if candidate is better, it can't be worse than the best !
17988
17989         (Invocation): Re-write bits to differentiate between methods being
17990         applicable in their expanded form and their normal form - for params
17991         methods of course.
17992
17993         Get rid of use_standard everywhere as only standard conversions are allowed
17994         in overload resolution. 
17995
17996         More spec conformance.
17997
17998 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
17999
18000         * driver.cs: Add --timestamp, to see where the compiler spends
18001         most of its time.
18002
18003         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
18004         `this' in static code.
18005
18006         (SimpleName.DoResolve): Implement in terms of a helper function
18007         that allows static-references to be passed upstream to
18008         MemberAccess.
18009
18010         (Expression.ResolveWithSimpleName): Resolve specially simple
18011         names when called by MemberAccess to implement the special
18012         semantics. 
18013
18014         (Expression.ImplicitReferenceConversion): Handle conversions from
18015         Null to reference types before others, as Null's type is
18016         System.Object. 
18017
18018         * expression.cs (Invocation.EmitCall): Handle the special case of
18019         calling methods declared on a reference type from a ValueType
18020         (Base classes System.Object and System.Enum)
18021
18022         (MemberAccess.Resolve): Only perform lookups on Enumerations if
18023         the left hand side is a TypeExpr, not on every enumeration. 
18024
18025         (Binary.Resolve): If types are reference types, then do a cast to
18026         object on operators != and == of both arguments.
18027
18028         * typemanager.cs (FindMembers): Extract instance and static
18029         members if requested.
18030
18031         * interface.cs (PopulateProperty): Use void_type instead of null
18032         as the return type for the setter method.
18033
18034         (PopulateIndexer): ditto.
18035
18036 2001-12-27  Ravi Pratap  <ravi@ximian.com>
18037
18038         * support.cs (ReflectionParameters): Fix minor bug where we
18039         were examining the wrong parameter for the ParamArray attribute.
18040
18041         Cope with requests for the type of the parameter at position
18042         greater than the params parameter's. We now return the element
18043         type of the params array as that makes more sense.
18044
18045         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
18046         accordingly as we no longer have to extract the element type
18047         ourselves.
18048
18049         (Invocation.OverloadResolve): Update.
18050
18051 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
18052
18053         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
18054         against IEnumerator, test whether the return value is a descendant
18055         of the IEnumerator interface.
18056
18057         * class.cs (Indexer.Define): Use an auxiliary method to implement
18058         the other bits of the method definition.  Begin support for
18059         explicit interface implementation.
18060
18061         (Property.DefineMethod): Use TypeManager.void_type instead of null
18062         for an empty return value.
18063
18064 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
18065
18066         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
18067         dealing with a FieldExpr which is composed of a FieldBuilder, in
18068         the code path we did extract the constant, but we should have
18069         obtained the underlying value to be able to cast it (otherwise we
18070         end up in an infinite loop, this is what Ravi was running into).
18071
18072         (ArrayCreation.UpdateIndices): Arrays might be empty.
18073
18074         (MemberAccess.ResolveMemberAccess): Add support for section
18075         14.5.4.1 that deals with the special case of E.I when E is a type
18076         and something else, that I can be a reference to a static member.
18077
18078         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
18079         handle a particular array type to create byte blobs, it is just
18080         something we dont generate byteblobs for.
18081
18082         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
18083         arguments. 
18084
18085         * location.cs (Push): remove the key from the hashtable that we
18086         are about to add.   This happens for empty files.
18087
18088         * driver.cs: Dispose files after we have parsed them.
18089
18090         (tokenize): new function that only runs the tokenizer on its
18091         input, for speed testing.
18092
18093 2001-12-26  Ravi Pratap  <ravi@ximian.com>
18094
18095         * class.cs (Event.Define): Define the private field only if there
18096         are no accessors defined.
18097
18098         * expression.cs (ResolveMemberAccess): If there is no associated
18099         field with the event, that means we have an event defined with its
18100         own accessors and we should flag error cs0070 since transforming
18101         ourselves into a field is not valid in that case.
18102
18103         * ecore.cs (SimpleName.DoResolve): Same as above.
18104
18105         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
18106         and charset to sane values.
18107
18108 2001-12-25  Ravi Pratap  <ravi@ximian.com>
18109
18110         * assign.cs (DoResolve): Perform check on events only if they 
18111         are being accessed outside the declaring type.
18112
18113         * cs-parser.jay (event_declarations): Update rules to correctly
18114         set the type of the implicit parameter etc.
18115
18116         (add_accessor, remove_accessor): Set current local parameters.
18117
18118         * expression.cs (Binary): For delegate addition and subtraction,
18119         cast the return value from the method into the appropriate delegate
18120         type.
18121
18122 2001-12-24  Ravi Pratap  <ravi@ximian.com>
18123
18124         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
18125         of these as the workaround is unnecessary.
18126
18127         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
18128         delegate data - none of that is needed at all.
18129
18130         Re-write bits to extract the instance expression and the delegate method
18131         correctly.
18132
18133         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
18134         on delegates too.
18135
18136         * attribute.cs (ApplyAttributes): New method to take care of common tasks
18137         of attaching attributes instead of duplicating code everywhere.
18138
18139         * everywhere : Update code to do attribute emission using the above method.
18140
18141 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
18142
18143         * expression.cs (IsParamsMethodApplicable): if there are not
18144         parameters, return immediately.
18145
18146         * ecore.cs: The 0 literal can be implicity converted to an enum
18147         type. 
18148
18149         (SimpleName.DoResolve): First lookup the type, then lookup the
18150         members. 
18151
18152         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
18153         want to get its address.  If the InstanceExpression is not
18154         addressable, store the result in a temporary variable, then get
18155         the address of it.
18156
18157         * codegen.cs: Only display 219 errors on warning level or above. 
18158
18159         * expression.cs (ArrayAccess): Make it implement the
18160         IMemoryLocation interface.
18161
18162         (Binary.DoResolve): handle the operator == (object a, object b)
18163         and operator != (object a, object b) without incurring into a
18164         BoxedCast (because 5 != o should never be performed).
18165
18166         Handle binary enumerator operators.
18167
18168         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
18169         value type, otherwise use Ldelem_ref.
18170
18171         Use precomputed names;
18172
18173         (AddressOf): Implement address of
18174
18175         * cs-parser.jay (labeled_statement): Fix recursive block
18176         addition by reworking the production.
18177
18178         * expression.cs (New.DoEmit): New has a special case:
18179                 
18180                  If we are dealing with a ValueType, we have a few
18181                  situations to deal with:
18182                 
18183                     * The target of New is a ValueType variable, that is
18184                       easy, we just pass this as the variable reference
18185                 
18186                     * The target of New is being passed as an argument,
18187                       to a boxing operation or a function that takes a
18188                       ValueType.
18189                 
18190                       In this case, we need to create a temporary variable
18191                       that is the argument of New.
18192
18193
18194 2001-12-23  Ravi Pratap  <ravi@ximian.com>
18195
18196         * rootcontext.cs (LookupType): Check that current_type is not null before
18197         going about looking at nested types.
18198
18199         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
18200         not implement the IAssignMethod interface any more.
18201
18202         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
18203         where we tranform them into FieldExprs if they are being resolved from within
18204         the declaring type.
18205
18206         * ecore.cs (SimpleName.DoResolve): Do the same here.
18207
18208         * assign.cs (DoResolve, Emit): Clean up code considerably. 
18209
18210         * ../errors/bug10.cs : Add.
18211
18212         * ../errors/cs0070.cs : Add.
18213
18214         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
18215
18216         * assign.cs : Get rid of EventIsLocal everywhere.
18217
18218 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
18219
18220         * ecore.cs (ConvertIntLiteral): finished the implementation.
18221
18222         * statement.cs (SwitchLabel): Convert the value we are using as a
18223         key before looking up the table.
18224
18225 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
18226
18227         * codegen.cs (EmitTopBlock): Require a Location argument now.
18228
18229         * cs-parser.jay (constructor_declarator): We need to setup
18230         current_local_parameters before we parse the
18231         opt_constructor_initializer, to allow the variables to be bound
18232         to the constructor arguments.
18233
18234         * rootcontext.cs (LookupType): First lookup nested classes in our
18235         class and our parents before we go looking outside our class.
18236
18237         * expression.cs (ConstantFold): Extract/debox the values at the
18238         beginnning. 
18239
18240         * rootcontext.cs (EmitCode): Resolve the constants first before we
18241         resolve the types.  This is not really needed, but it helps debugging.
18242
18243         * statement.cs: report location.
18244
18245         * cs-parser.jay: pass location to throw statement.
18246
18247         * driver.cs: Small bug fix.
18248
18249         * report.cs: Updated format to be 4-zero filled digits.
18250
18251 2001-12-22  Ravi Pratap  <ravi@ximian.com>
18252
18253         * expression.cs (CheckIndices): Fix minor bug where the wrong
18254         variable was being referred to ;-)
18255
18256         (DoEmit): Do not call EmitStaticInitializers when the 
18257         underlying type is System.Object.
18258
18259 2001-12-21  Ravi Pratap  <ravi@ximian.com>
18260
18261         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
18262         and do the usual workaround for SRE.
18263
18264         * class.cs (MyEventBuilder.EventType): New member to get at the type
18265         of the event, quickly.
18266
18267         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
18268
18269         * assign.cs (Assign.DoResolve): Handle the case when the target
18270         is an EventExpr and perform the necessary checks.
18271
18272         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
18273         interface.
18274
18275         (SimpleName.MemberStaticCheck): Include check for EventExpr.
18276
18277         (EventExpr): Set the type in the constructor itself since we 
18278         are meant to be born fully resolved.
18279
18280         (EventExpr.Define): Revert code I wrote earlier.
18281                 
18282         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
18283         instance expression is null. The instance expression is a This in that case
18284         or a null, depending on whether it is a static method or not.
18285
18286         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
18287         refers to more than one method.
18288
18289         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
18290         and accordingly flag errors.
18291
18292 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
18293
18294         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
18295
18296 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
18297
18298         * location.cs (ToString): Provide useful rutine.
18299
18300 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
18301
18302         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
18303         objects, return the actual integral boxed.
18304
18305         * statement.cs (SwitchLabel): define an ILLabel for each
18306         SwitchLabel. 
18307
18308         (Switch.CheckSwitch): If the value is a Literal, extract
18309         the underlying literal.
18310
18311         Also in the unused hashtable we had, add the SwitchLabel so we can
18312         quickly look this value up.
18313
18314         * constant.cs: Implement a bunch of new constants.  Rewrite
18315         Literal based on this.  Made changes everywhere to adapt to this.
18316
18317         * expression.cs (Expression.MakeByteBlob): Optimize routine by
18318         dereferencing array only once, and also copes with enumrations.
18319
18320         bytes are two bytes wide, not one.
18321
18322         (Cast): Perform constant conversions.
18323
18324         * ecore.cs (TryImplicitIntConversion): Return literals instead of
18325         wrappers to the literals here.
18326
18327         * expression.cs (DoNumericPromotions): long literals can converted
18328         to ulong implicity (this is taken care of elsewhere, but I was
18329         missing this spot).
18330
18331         * ecore.cs (Expression.Literalize): Make the return type Literal,
18332         to improve type checking.
18333
18334         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
18335
18336 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
18337
18338         * literal.cs: Revert code from ravi that checked the bounds.  The
18339         bounds are sane by the definition of the type itself. 
18340
18341         * typemanager.cs: Fix implementation of ImplementsInterface.  We
18342         need to actually look up in our parent hierarchy for interfaces
18343         implemented. 
18344
18345         * const.cs: Use the underlying type for enumerations
18346
18347         * delegate.cs: Compute the basename for the delegate creation,
18348         that should fix the delegate test case, and restore the correct
18349         Type Lookup semantics in rootcontext
18350
18351         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
18352         referencing a nested type with the Reflection API is using the "+"
18353         sign. 
18354
18355         * cs-parser.jay: Do not require EOF token at the end.
18356
18357 2001-12-20  Ravi Pratap  <ravi@ximian.com>
18358
18359         * rootcontext.cs (LookupType): Concatenate type names with
18360         a '.' instead of a '+' The test suite passes again.
18361
18362         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
18363         field of the enumeration.
18364
18365         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
18366         the case when the member is an EventExpr.
18367
18368         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
18369         static has an associated instance expression.
18370
18371         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
18372
18373         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
18374
18375         * class.cs (Event.Define): Register event and perform appropriate checks
18376         for error #111.
18377
18378         We define the Add and Remove methods even if the use provides none because
18379         in that case, we provide default implementations ourselves.
18380
18381         Define a private field of the type of the event. This is done by the CSC compiler
18382         and we should be doing it too ;-)
18383
18384         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
18385         More methods we use in code we generate.
18386
18387         (multicast_delegate_type, delegate_type): Two separate types since the distinction
18388         is important.
18389
18390         (InitCoreTypes): Update accordingly for the above.
18391
18392         * class.cs (Event.Emit): Generate code for default accessors that we provide
18393
18394         (EmitDefaultMethod): Do the job in the above.
18395
18396         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
18397         appropriate place.
18398
18399 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
18400
18401         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
18402         builders even if we were missing one.
18403
18404         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
18405         pass the Basename as our class name instead of the Name.  The
18406         basename will be correctly composed for us.
18407
18408         * parameter.cs (Paramters): Now takes a Location argument.
18409
18410         * decl.cs (DeclSpace.LookupType): Removed convenience function and
18411         make all the code call directly LookupType in RootContext and take
18412         this chance to pass the Location information everywhere.
18413
18414         * Everywhere: pass Location information.
18415
18416 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
18417
18418         * class.cs (Constructor.Define): Updated way of detecting the
18419         length of the parameters.
18420
18421         (TypeContainer.DefineType): Use basename as the type name for
18422         nested types.
18423
18424         (TypeContainer.Define): Do not recursively define types here, as
18425         definition is taken care in order by the RootContext.
18426
18427         * tree.cs: Keep track of namespaces in a per-file basis.
18428
18429         * parameter.cs (Parameter.ComputeSignature): Update to use
18430         DeclSpace. 
18431
18432         (Parameters.GetSignature): ditto.
18433
18434         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
18435         instead of a TypeContainer.
18436
18437         (Interface.SemanticAnalysis): Use `this' instead of our parent to
18438         resolve names.  Because we need to be resolve in our context, not
18439         our parents.
18440
18441         * driver.cs: Implement response files.
18442
18443         * class.cs (TypeContainer.DefineType): If we are defined, do not
18444         redefine ourselves.
18445
18446         (Event.Emit): Emit the code for add/remove handlers.
18447         (Event.Define): Save the MethodBuilders for add/remove.
18448
18449         * typemanager.cs: Use pair here too.
18450
18451         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
18452         DictionaryEntry requires the first argument to be non-null.  
18453
18454         (enum_declaration): Compute full name for registering the
18455         enumeration.
18456
18457         (delegate_declaration): Instead of using
18458         formal_parameter_list, use opt_formal_parameter_list as the list
18459         can be empty.
18460
18461         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
18462         (EventParsing): New property that controls whether `add' and
18463         `remove' are returned as tokens or identifiers (for events);
18464
18465 2001-12-19  Ravi Pratap  <ravi@ximian.com>
18466
18467         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
18468         use MyEventBuilder only and let it wrap the real builder for us.
18469
18470         (MyEventBuilder): Revamp constructor etc.
18471
18472         Implement all operations that we perform on EventBuilder in precisely the same
18473         way here too.
18474
18475         (FindMembers): Update to use the EventBuilder member.
18476
18477         (Event.Emit): Update accordingly.
18478
18479 2001-12-18  Ravi Pratap  <ravi@ximian.com>
18480
18481         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
18482         by calling the appropriate methods.
18483
18484         (GetCustomAttributes): Make stubs as they cannot possibly do anything
18485         useful.
18486
18487         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
18488
18489 2001-12-17  Ravi Pratap  <ravi@ximian.com>
18490
18491         * delegate.cs (Delegate.Populate): Check that the return type
18492         and various parameters types are indeed accessible.
18493
18494         * class.cs (Constructor.Define): Same here.
18495
18496         (Field.Define): Ditto.
18497
18498         (Event.Define): Ditto.
18499
18500         (Operator.Define): Check that the underlying Method defined itself
18501         correctly - so it's MethodBuilder should not be null.
18502
18503         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
18504         expression happens to be null.
18505
18506         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
18507         members but as of now we don't seem to be able to do anything really useful with it.
18508
18509         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
18510         not the EventBuilder.
18511
18512 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
18513
18514         * cs-tokenizer.cs: Add support for defines.
18515         Add support for #if, #elif, #else, #endif
18516
18517         (eval_var): evaluates a variable.
18518         (eval): stubbed for evaluating functions.
18519
18520         * cs-parser.jay: Pass the defines information
18521
18522         * driver.cs: Add --define command line option.
18523
18524         * decl.cs: Move MemberCore here.
18525
18526         Make it the base class for DeclSpace.  This allows us to catch and
18527         report 108 and 109 for everything now.
18528
18529         * class.cs (TypeContainer.Define): Extract all the members
18530         before populating and emit the warning 108 (new keyword required
18531         to override) instead of having each member implement this.
18532
18533         (MemberCore.Define): New abstract method, we will be using this in
18534         the warning reporting engine in Populate.
18535
18536         (Operator.Define): Adjust to new MemberCore protocol. 
18537
18538         * const.cs (Const): This does not derive from Expression, it is a
18539         temporary object we use to create fields, it is a MemberCore. 
18540
18541         * class.cs (Method.Define): Allow the entry point to be in a
18542         specific class.
18543
18544         * driver.cs: Rewrite the argument handler to clean it up a bit.
18545
18546         * rootcontext.cs: Made it just an auxiliary namespace feature by
18547         making everything static.
18548
18549         * driver.cs: Adapt code to use RootContext type name instead of
18550         instance variable.
18551
18552         * delegate.cs: Remove RootContext argument.
18553
18554         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
18555         argument. 
18556
18557         * class.cs (Event.Define): The lookup can fail.
18558
18559         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
18560
18561         * expression.cs: Resolve the this instance before invoking the code.
18562
18563 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
18564
18565         * cs-parser.jay: Add a production in element_access that allows
18566         the thing to become a "type" reference.  This way we can parse
18567         things like "(string [])" as a type.
18568
18569         Note that this still does not handle the more complex rules of
18570         casts. 
18571
18572
18573         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
18574
18575         * ecore.cs: (CopyNewMethods): new utility function used to
18576         assemble the list of methods from running FindMembers.
18577
18578         (MemberLookup): Rework FindMembers so that 
18579
18580 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
18581
18582         * class.cs (TypeContainer): Remove Delegates who fail to be
18583         defined.
18584
18585         * delegate.cs (Populate): Verify that we dont get null return
18586         values.   TODO: Check for AsAccessible.
18587
18588         * cs-parser.jay: Use basename to emit error 574 (destructor should
18589         have the same name as container class), not the full name.
18590
18591         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
18592         possible representation.  
18593
18594         Also implements integer type suffixes U and L.
18595
18596 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
18597
18598         * expression.cs (ArrayCreation.DoResolve): We need to do the
18599         argument resolution *always*.
18600
18601         * decl.cs: Make this hold the namespace.  Hold the root context as
18602         well.
18603         (LookupType): Move here.
18604
18605         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
18606
18607         * location.cs (Row, Name): Fixed the code, it was always returning
18608         references to the first file.
18609
18610         * interface.cs: Register properties defined through interfaces.
18611
18612         * driver.cs: Add support for globbing on the command line
18613
18614         * class.cs (Field): Make it derive from MemberCore as well.
18615         (Event): ditto.
18616
18617 2001-12-15  Ravi Pratap  <ravi@ximian.com>
18618
18619         * class.cs (Event::Define): Check that the type of the event is a delegate
18620         type else flag error #66.
18621
18622         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
18623         same.
18624
18625         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
18626         values of EntryPoint, CharSet etc etc.
18627
18628         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
18629
18630         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
18631         be null and we should ignore this. I am not sure if this is really clean. Apparently,
18632         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
18633         which needs this to do its work.
18634
18635         * ../errors/cs0066.cs : Add.
18636
18637 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
18638
18639         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
18640         helper functions.
18641
18642         * class.cs: (MethodSignature.MethodSignature): Removed hack that
18643         clears out the parameters field.
18644         (MemberSignatureCompare): Cleanup
18645
18646         (MemberCore): New base class used to share code between MethodCore
18647         and Property.
18648
18649         (RegisterRequiredImplementations) BindingFlags.Public requires
18650         either BindingFlags.Instace or Static.  Use instance here.
18651
18652         (Property): Refactored code to cope better with the full spec.
18653
18654         * parameter.cs (GetParameterInfo): Return an empty array instead
18655         of null on error.
18656
18657         * class.cs (Property): Abstract or extern properties have no bodies.
18658
18659         * parameter.cs (GetParameterInfo): return a zero-sized array.
18660
18661         * class.cs (TypeContainer.MethodModifiersValid): Move all the
18662         method modifier validation to the typecontainer so we can reuse
18663         this on properties.
18664
18665         (MethodCore.ParameterTypes): return an empty sized array of types.
18666
18667         (Property.Define): Test property modifier validity.
18668
18669         Add tests for sealed/override too.
18670
18671         (Method.Emit): abstract or extern methods have no bodies.
18672
18673 2001-12-14  Ravi Pratap  <ravi@ximian.com>
18674
18675         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
18676         thing.
18677
18678         (Method::Define, ::Emit): Modify accordingly.
18679
18680         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
18681
18682         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
18683
18684         * makefile: Pass in /unsafe.
18685
18686 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
18687
18688         * class.cs (MakeKey): Kill routine.
18689
18690         * class.cs (TypeContainer.Define): Correctly define explicit
18691         method implementations (they require the full interface name plus
18692         the method name).
18693
18694         * typemanager.cs: Deply the PtrHashtable here and stop using the
18695         lame keys.  Things work so much better.
18696
18697         This of course broke everyone who depended on `RegisterMethod' to
18698         do the `test for existance' test.  This has to be done elsewhere.
18699
18700         * support.cs (PtrHashtable): A hashtable that avoid comparing with
18701         the object stupid Equals method (because, that like fails all over
18702         the place).  We still do not use it.
18703
18704         * class.cs (TypeContainer.SetRequiredInterface,
18705         TypeContainer.RequireMethods): Killed these two routines and moved
18706         all the functionality to RegisterRequiredImplementations.
18707
18708         (TypeContainer.RegisterRequiredImplementations): This routine now
18709         registers all the implementations required in an array for the
18710         interfaces and abstract methods.  We use an array of structures
18711         which can be computed ahead of time to reduce memory usage and we
18712         also assume that lookups are cheap as most classes will not
18713         implement too many interfaces.
18714
18715         We also avoid creating too many MethodSignatures.
18716
18717         (TypeContainer.IsInterfaceMethod): Update and optionally does not
18718         clear the "pending" bit if we find that there are problems with
18719         the declaration.
18720
18721         (TypeContainer.VerifyPendingMethods): Update to report errors of
18722         methods that look like implementations but are not.
18723
18724         (TypeContainer.Define): Add support for explicit interface method
18725         implementation. 
18726
18727 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
18728
18729         * typemanager.cs: Keep track of the parameters here instead of
18730         being a feature of the TypeContainer.
18731
18732         * class.cs: Drop the registration of parameters here, as
18733         InterfaceMethods are also interface declarations.
18734
18735         * delegate.cs: Register methods with the TypeManager not only with
18736         the TypeContainer.  This code was buggy.
18737
18738         * interface.cs: Full registation here.
18739
18740 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
18741
18742         * expression.cs: Remove reducer for binary expressions, it can not
18743         be done this way.
18744
18745         * const.cs: Put here the code that used to go into constant.cs
18746
18747         * constant.cs: Put here the code for constants, this is a new base
18748         class for Literals.
18749
18750         * literal.cs: Make Literal derive from Constant.
18751
18752 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
18753
18754         * statement.cs (Return.Emit): Report error 157 if the user
18755         attempts to return from a finally block.
18756
18757         (Return.Emit): Instead of emitting a return, jump to the end of
18758         the function.
18759
18760         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
18761         LocalBuilder to store the result of the function.  ReturnLabel is
18762         the target where we jump.
18763
18764
18765 2001-12-09  Radek Doulik  <rodo@ximian.com>
18766
18767         * cs-parser.jay: remember alias in current namespace
18768
18769         * ecore.cs (SimpleName::DoResolve): use aliases for types or
18770         namespaces
18771
18772         * class.cs (LookupAlias): lookup alias in my_namespace
18773
18774         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
18775         aliases hashtable
18776         (LookupAlias): lookup alias in this and if needed in parent
18777         namespaces
18778
18779 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
18780
18781         * support.cs: 
18782
18783         * rootcontext.cs: (ModuleBuilder) Made static, first step into
18784         making things static.  I need this to avoid passing the
18785         TypeContainer when calling ParameterType.
18786
18787         * support.cs (InternalParameters.ParameterType): Remove ugly hack
18788         that did string manipulation to compute the type and then call
18789         GetType.  Use Parameter.ParameterType instead.
18790
18791         * cs-tokenizer.cs: Consume the suffix for floating values.
18792
18793         * expression.cs (ParameterReference): figure out whether this is a
18794         reference parameter or not.  Kill an extra variable by computing
18795         the arg_idx during emission.
18796
18797         * parameter.cs (Parameters.GetParameterInfo): New overloaded
18798         function that returns whether a parameter is an out/ref value or not.
18799
18800         (Parameter.ParameterType): The type of the parameter (base,
18801         without ref/out applied).
18802
18803         (Parameter.Resolve): Perform resolution here.
18804         (Parameter.ExternalType): The full type (with ref/out applied).
18805
18806         * statement.cs (Using.Emit, Using.EmitExpression): Implement
18807         support for expressions on the using statement.
18808
18809 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
18810
18811         * statement.cs (Using.EmitLocalVariableDecls): Split the
18812         localvariable handling of the using statement.
18813
18814         (Block.EmitMeta): Keep track of variable count across blocks.  We
18815         were reusing slots on separate branches of blocks.
18816
18817         (Try.Emit): Emit the general code block, we were not emitting it. 
18818
18819         Check the type of the declaration to be an IDisposable or
18820         something that can be implicity converted to it. 
18821
18822         Emit conversions if required.
18823
18824         * ecore.cs (EmptyExpression): New utility class.
18825         (Expression.ImplicitConversionExists): New utility function.
18826
18827 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
18828
18829         * statement.cs (Using): Implement.
18830
18831         * expression.cs (LocalVariableReference): Support read only variables.
18832
18833         * statement.cs: Remove the explicit emit for the Leave opcode.
18834         (VariableInfo): Add a readonly field.
18835
18836 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
18837
18838         * ecore.cs (ConvCast): new class used to encapsulate the various
18839         explicit integer conversions that works in both checked and
18840         unchecked contexts.
18841
18842         (Expression.ConvertNumericExplicit): Use new ConvCast class to
18843         properly generate the overflow opcodes.
18844
18845 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
18846
18847         * statement.cs: The correct type for the EmptyExpression is the
18848         element_type, not the variable type.  Ravi pointed this out.
18849
18850 2001-12-04  Ravi Pratap  <ravi@ximian.com>
18851
18852         * class.cs (Method::Define): Handle PInvoke methods specially
18853         by using DefinePInvokeMethod instead of the usual one.
18854
18855         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
18856         above to do the task of extracting information and defining the method.
18857
18858 2001-12-04  Ravi Pratap  <ravi@ximian.com>
18859
18860         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
18861         of the condition for string type.
18862
18863         (Emit): Move that here. 
18864
18865         (ArrayCreation::CheckIndices): Keep string literals in their expression
18866         form.
18867
18868         (EmitDynamicInitializers): Handle strings appropriately.
18869
18870 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
18871
18872         * codegen.cs (EmitContext): Replace multiple variables with a
18873         single pointer to the current Switch statement.
18874
18875         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
18876         EmitContext.
18877
18878 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
18879
18880         * statement.cs 
18881
18882         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
18883         default'.
18884
18885         (Foreach.Emit): Foreach on arrays was not setting
18886         up the loop variables (for break/continue).
18887
18888         (GotoCase): Semi-implented.
18889
18890 2001-12-03  Ravi Pratap  <ravi@ximian.com>
18891
18892         * attribute.cs (CheckAttribute): Handle system attributes by using
18893         Attribute.GetAttributes to examine information we need.
18894
18895         (GetValidPlaces): Same here.
18896
18897         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
18898
18899         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
18900
18901         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
18902
18903         (Method::Define): Set appropriate flags if we have a DllImport attribute.
18904
18905         (Method::Emit): Handle the case when we are a PInvoke method.
18906
18907 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
18908
18909         * expression.cs: Use ResolveWithSimpleName on compound names.
18910
18911 2001-12-02  Ravi Pratap  <ravi@ximian.com>
18912
18913         * constant.cs (EmitConstant): Make sure we resolve the associated expression
18914         before trying to reduce it.
18915
18916         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
18917
18918         * constant.cs (LookupConstantValue): Implement.
18919
18920         (EmitConstant): Use the above in emitting the constant.
18921
18922         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
18923         that are user-defined by doing a LookupConstantValue on them.
18924
18925         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
18926         too, like above.
18927
18928 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
18929
18930         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
18931
18932         (BaseAccess.DoResolve): Implement.
18933
18934         (MemberAccess.DoResolve): Split this routine into a
18935         ResolveMemberAccess routine that can be used independently
18936
18937 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
18938
18939         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
18940         As that share bits of the implementation.  Is returns a boolean,
18941         while As returns the Type that is being probed.
18942
18943 2001-12-01  Ravi Pratap  <ravi@ximian.com>
18944
18945         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
18946         instead of a Literal - much easier.
18947
18948         (EnumInTransit): Remove - utterly useless :-)
18949
18950         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
18951
18952         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
18953
18954         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
18955         chain when we have no associated expression.
18956
18957 2001-11-30  Ravi Pratap  <ravi@ximian.com>
18958
18959         * constant.cs (Define): Use Location while reporting the errror.
18960
18961         Also emit a warning when 'new' is used and there is no inherited
18962         member to hide.
18963
18964         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
18965         populated.
18966
18967         (LookupEnumValue): Implement to lookup an enum member's value and define it
18968         if necessary.
18969
18970         (Populate): Re-write accordingly to use the above routine.
18971
18972 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
18973
18974         * expression.cs (This): Fix prototype for DoResolveLValue to
18975         override the base class DoResolveLValue.
18976
18977         * cs-parser.cs: Report errors cs574 and cs575 (destructor
18978         declarations) 
18979
18980         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
18981         (we need to load the address of the field here).  This fixes
18982         test-22. 
18983
18984         (FieldExpr.DoResolveLValue): Call the DoResolve
18985         function to initialize the Instance expression.
18986
18987         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
18988         correctly the GetEnumerator operation on a value type.
18989
18990         * cs-parser.jay: Add more simple parsing error catches.
18991
18992         * statement.cs (Switch): Add support for string switches.
18993         Handle null specially.
18994
18995         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
18996
18997 2001-11-28  Ravi Pratap  <ravi@ximian.com>
18998
18999         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
19000
19001         (declare_local_constant): New helper function.
19002
19003         * statement.cs (AddConstant): Keep a separate record of constants
19004
19005         (IsConstant): Implement to determine if a variable is a constant.
19006
19007         (GetConstantExpression): Implement.
19008
19009         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
19010
19011         * statement.cs (IsVariableDefined): Re-write.
19012
19013 2001-11-27  Ravi Pratap  <ravi@ximian.com>
19014
19015         * class.cs (TypeContainer::FindMembers): Look for constants
19016         in the case when we are looking for MemberTypes.Field
19017
19018         * expression.cs (MemberAccess::DoResolve): Check that in the
19019         case we are a FieldExpr and a Literal, we are not being accessed
19020         by an instance reference.
19021
19022         * cs-parser.jay (local_constant_declaration): Implement.
19023
19024         (declaration_statement): Implement for constant declarations.
19025
19026 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
19027
19028         * statement.cs (Switch): Catch double defaults.
19029
19030         (Switch): More work on the switch() statement
19031         implementation.  It works for integral values now, need to finish
19032         string support.
19033
19034
19035 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
19036
19037         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
19038         integer literals into other integer literals.  To be used by
19039         switch. 
19040
19041 2001-11-24  Ravi Pratap  <ravi@ximian.com>
19042
19043         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
19044         some memory.
19045
19046         (EmitDynamicInitializers): Cope with the above since we extract data
19047         directly from ArrayData now.
19048
19049         (ExpectInitializers): Keep track of whether initializers are mandatory
19050         or not.
19051
19052         (Bounds): Make it a hashtable to prevent the same dimension being 
19053         recorded for every element in that dimension.
19054
19055         (EmitDynamicInitializers): Fix bug which prevented the Set array method
19056         from being found.
19057
19058         Also fix bug which was causing the indices to be emitted in the reverse
19059         order.
19060
19061 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
19062
19063         * expression.cs (ArrayCreation): Implement the bits that Ravi left
19064         unfinished.  They do not work, because the underlying code is
19065         sloppy.
19066
19067 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
19068
19069         * cs-parser.jay: Remove bogus fixme.
19070
19071         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
19072         on Switch statement.
19073
19074 2001-11-23  Ravi Pratap  <ravi@ximian.com>
19075
19076         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
19077         the same. 
19078
19079         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
19080         parameter. Apparently, any expression is allowed. 
19081
19082         (ValidateInitializers): Update accordingly.
19083
19084         (CheckIndices): Fix some tricky bugs thanks to recursion.
19085
19086         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
19087         I was being completely brain-dead.
19088
19089         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
19090         and re-write acordingly.
19091
19092         (DelegateInvocation): Re-write accordingly.
19093
19094         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
19095
19096         (MakeByteBlob): Handle types more correctly.
19097
19098         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
19099         initialization from expressions but it is incomplete because I am a complete
19100         Dodo :-|
19101
19102 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
19103
19104         * statement.cs (If.Emit): Fix a bug that generated incorrect code
19105         on If.  Basically, we have to return `true' (ie, we do return to
19106         our caller) only if both branches of the if return.
19107
19108         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
19109         short-circuit operators, handle them as short circuit operators. 
19110
19111         (Cast.DoResolve): Resolve type.
19112         (Cast.Cast): Take an expression as the target type.
19113
19114         * cs-parser.jay (cast_expression): Remove old hack that only
19115         allowed a limited set of types to be handled.  Now we take a
19116         unary_expression and we resolve to a type during semantic
19117         analysis.
19118
19119         Use the grammar productions from Rhys to handle casts (this is
19120         not complete like Rhys syntax yet, we fail to handle that corner
19121         case that C# has regarding (-x), but we will get there.
19122
19123 2001-11-22  Ravi Pratap  <ravi@ximian.com>
19124
19125         * class.cs (EmitFieldInitializer): Take care of the case when we have a
19126         field which is an array type.
19127
19128         * cs-parser.jay (declare_local_variables): Support array initialization too.
19129
19130         * typemanager.cs (MakeKey): Implement.
19131
19132         (everywhere): Use the above appropriately.
19133
19134         * cs-parser.jay (for_statement): Update for array initialization while
19135         declaring variables.
19136
19137         * ecore.cs : The error message was correct, it's the variable's names that
19138         were misleading ;-) Make the code more readable.
19139
19140         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
19141         the correct type etc.
19142
19143         (ConvertExplicit): Handle Enum types by examining the underlying type.
19144
19145 2001-11-21  Ravi Pratap  <ravi@ximian.com>
19146
19147         * parameter.cs (GetCallingConvention): Always return
19148         CallingConventions.Standard for now.
19149
19150 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
19151
19152         * expression.cs (Binary.ResolveOperator): Update the values of `l'
19153         and `r' after calling DoNumericPromotions.
19154
19155         * ecore.cs: Fix error message (the types were in the wrong order).
19156
19157         * statement.cs (Foreach.ProbeCollectionType): Need to pass
19158         BindingFlags.Instance as well 
19159
19160         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
19161         implicit int literal conversion in an empty cast so that we
19162         propagate the right type upstream.
19163
19164         (UnboxCast): new class used to unbox value types.
19165         (Expression.ConvertExplicit): Add explicit type conversions done
19166         by unboxing.
19167
19168         (Expression.ImplicitNumericConversion): Oops, forgot to test for
19169         the target type before applying the implicit LongLiterals to ULong
19170         literal cast.
19171
19172 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
19173
19174         * cs-parser.jay (for_statement): Reworked the way For works: now
19175         we declare manually any variables that are introduced in
19176         for_initializer to solve the problem of having out-of-band code
19177         emition (that is what got for broken).
19178
19179         (declaration_statement): Perform the actual variable declaration
19180         that used to be done in local_variable_declaration here.
19181
19182         (local_variable_declaration): Do not declare anything, just pass
19183         the information on a DictionaryEntry
19184
19185 2001-11-20  Ravi Pratap  <ravi@ximian.com>
19186
19187         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
19188         re-write of the logic to now make it recursive.
19189
19190         (UpdateIndices): Re-write accordingly.
19191
19192         Store element data in a separate ArrayData list in the above methods.
19193
19194         (MakeByteBlob): Implement to dump the array data into a byte array.
19195
19196 2001-11-19  Ravi Pratap  <ravi@ximian.com>
19197
19198         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
19199         into CheckIndices.
19200
19201         * constant.cs (Define): Implement.
19202
19203         (EmitConstant): Re-write fully.
19204
19205         Pass in location info.
19206
19207         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
19208         respectively.
19209
19210         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
19211         DictionaryEntry since we need location info too.
19212
19213         (constant_declaration): Update accordingly.
19214
19215         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
19216         code into another method : UpdateIndices.
19217
19218 2001-11-18  Ravi Pratap  <ravi@ximian.com>
19219
19220         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
19221         some type checking etc.
19222
19223 2001-11-17  Ravi Pratap  <ravi@ximian.com>
19224
19225         * expression.cs (ArrayCreation::ValidateInitializers): Implement
19226         bits to provide dimension info if the user skips doing that.
19227
19228         Update second constructor to store the rank correctly.
19229
19230 2001-11-16  Ravi Pratap  <ravi@ximian.com>
19231
19232         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
19233         and try to implement.
19234
19235         * ../errors/cs0150.cs : Add.
19236
19237         * ../errors/cs0178.cs : Add.
19238
19239 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
19240
19241         * statement.cs: Implement foreach on multi-dimensional arrays. 
19242
19243         * parameter.cs (Parameters.GetParameterByName): Also lookup the
19244         name of the params argument.
19245
19246         * expression.cs: Use EmitStoreOpcode to get the right opcode while
19247         initializing the array.
19248
19249         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
19250         we can use this elsewhere.
19251
19252         * statement.cs: Finish implementation of foreach for single
19253         dimension arrays.
19254
19255         * cs-parser.jay: Use an out-of-band stack to pass information
19256         around, I wonder why I need this.
19257
19258         foreach_block: Make the new foreach_block the current_block.
19259
19260         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
19261         function used to return a static Parameters structure.  Used for
19262         empty parameters, as those are created very frequently.
19263
19264         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
19265
19266 2001-11-15  Ravi Pratap  <ravi@ximian.com>
19267
19268         * interface.cs : Default modifier is private, not public. The
19269         make verify test passes again.
19270
19271 2001-11-15  Ravi Pratap  <ravi@ximian.com>
19272
19273         * support.cs (ReflectionParameters): Fix logic to determine
19274         whether the last parameter is a params one. Test 9 passes again.
19275
19276         * delegate.cs (Populate): Register the builders we define with
19277         RegisterParameterForBuilder. Test 19 passes again.
19278
19279         * cs-parser.jay (property_declaration): Reference $6 instead
19280         of $$ to get at the location.
19281
19282         (indexer_declaration): Similar stuff.
19283
19284         (attribute): Ditto.
19285
19286         * class.cs (Property): Register parameters for the Get and Set methods
19287         if they exist. Test 23 passes again.
19288
19289         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
19290         call to EmitArguments as we are sure there aren't any params arguments. 
19291         Test 32 passes again.
19292
19293         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
19294         IndexOutOfRangeException. 
19295
19296         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
19297         Test 33 now passes again.
19298
19299 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
19300
19301         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
19302         broke a bunch of things.  Will have to come up with a better way
19303         of tracking locations.
19304
19305         * statement.cs: Implemented foreach for single dimension arrays.
19306
19307 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
19308
19309         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
19310         an error.  This removes the lookup from the critical path.
19311
19312         * cs-parser.jay: Removed use of temporary_loc, which is completely
19313         broken. 
19314
19315 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
19316
19317         * support.cs (ReflectionParameters.ParameterModifier): Report
19318         whether the argument is a PARAMS argument or not.
19319
19320         * class.cs: Set the attribute `ParamArrayAttribute' on the
19321         parameter argument.
19322
19323         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
19324         and cons_param_array_attribute (ConstructorInfo for
19325         ParamArrayAttribute)., 
19326
19327         * codegen.cs: Emit the return using the `Return' statement, that
19328         way we can report the error correctly for missing return values. 
19329
19330         * class.cs (Method.Emit): Clean up.
19331
19332         * expression.cs (Argument.Resolve): Take another argument: the
19333         location where this argument is used.  Notice that this is not
19334         part of the "Argument" class as to reduce the size of the
19335         structure (we know the approximate location anyways).
19336
19337         Test if the argument is a variable-reference, if not, then
19338         complain with a 206.
19339
19340         (Argument.Emit): Emit addresses of variables.
19341
19342         (Argument.FullDesc): Simplify.
19343
19344         (Invocation.DoResolve): Update for Argument.Resolve.
19345
19346         (ElementAccess.DoResolve): ditto.
19347
19348         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
19349         method should be virtual, as this method is always virtual.
19350
19351         (NewDelegate.DoResolve): Update for Argument.Resolve.
19352
19353         * class.cs (ConstructorInitializer.DoResolve): ditto.
19354
19355         * attribute.cs (Attribute.Resolve): ditto.
19356
19357 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
19358
19359         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
19360
19361         * expression.cs (ParameterReference): Drop IStackStorage and implement
19362         IAssignMethod instead. 
19363
19364         (LocalVariableReference): ditto.
19365
19366         * ecore.cs (FieldExpr): Drop IStackStorage and implement
19367         IAssignMethod instead. 
19368
19369 2001-11-13  Miguel de Icaza <miguel@ximian.com>
19370
19371         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
19372         enumerations that are used in heavily used structures derive from
19373         byte in a laughable and pathetic attempt to reduce memory usage.
19374         This is the kind of pre-optimzations that you should not do at
19375         home without adult supervision.
19376
19377         * expression.cs (UnaryMutator): New class, used to handle ++ and
19378         -- separatedly from the other unary operators.  Cleans up the
19379         code, and kills the ExpressionStatement dependency in Unary.
19380
19381         (Unary): Removed `method' and `Arguments' from this class, making
19382         it smaller, and moving it all to SimpleCall, so I can reuse this
19383         code in other locations and avoid creating a lot of transient data
19384         strucutres when not required.
19385
19386         * cs-parser.jay: Adjust for new changes.
19387
19388 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
19389
19390         * enum.cs (Enum.Populate): If there is a failure during
19391         definition, return
19392
19393         * cs-parser.jay (opt_enum_base): we used to catch type errors
19394         here, but this is really incorrect.  The type error should be
19395         catched during semantic analysis.
19396
19397 2001-12-11  Ravi Pratap  <ravi@ximian.com>
19398
19399         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
19400         current_local_parameters as expected since I, in my stupidity, had forgotten
19401         to do this :-)
19402
19403         * attribute.cs (GetValidPlaces): Fix stupid bug.
19404
19405         * class.cs (Method::Emit): Perform check on applicability of attributes.
19406
19407         (Constructor::Emit): Ditto.
19408
19409         (Field::Emit): Ditto.
19410
19411         (Field.Location): Store location information.
19412
19413         (Property, Event, Indexer, Operator): Ditto.
19414
19415         * cs-parser.jay (field_declaration): Pass in location for each field.
19416
19417         * ../errors/cs0592.cs : Add.
19418
19419 2001-11-12  Ravi Pratap  <ravi@ximian.com>
19420
19421         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
19422
19423         (InitCoreTypes): Update accordingly.
19424
19425         (RegisterAttrType, LookupAttr): Implement.
19426
19427         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
19428         info about the same.
19429
19430         (Resolve): Update to populate the above as necessary.
19431
19432         (Error592): Helper.
19433
19434         (GetValidPlaces): Helper to the above.
19435
19436         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
19437
19438         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
19439
19440 2001-11-12  Ravi Pratap  <ravi@ximian.com>
19441
19442         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
19443
19444         * ../errors/cs0617.cs : Add.
19445
19446 2001-11-11  Ravi Pratap  <ravi@ximian.com>
19447
19448         * enum.cs (Emit): Rename to Populate to be more consistent with what
19449         we expect it to do and when exactly it is called.
19450
19451         * class.cs, rootcontext.cs : Update accordingly.
19452
19453         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
19454         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
19455
19456         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
19457
19458         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
19459         of a fieldinfo using the above, when dealing with a FieldBuilder.
19460
19461 2001-11-10  Ravi Pratap  <ravi@ximian.com>
19462
19463         * ../errors/cs0031.cs : Add.
19464
19465         * ../errors/cs1008.cs : Add.
19466
19467         * ../errrors/cs0543.cs : Add.
19468
19469         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
19470         enum type.
19471
19472         (FindMembers): Implement.
19473
19474         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
19475         enums and delegates too.
19476
19477         (enum_types): Rename to builder_to_enum.
19478
19479         (delegate_types): Rename to builder_to_delegate.
19480
19481         * delegate.cs (FindMembers): Implement.
19482
19483 2001-11-09  Ravi Pratap  <ravi@ximian.com>
19484
19485         * typemanager.cs (IsEnumType): Implement.
19486
19487         * enum.cs (Emit): Re-write parts to account for the underlying type
19488         better and perform checking etc.
19489
19490         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
19491         of the underlying type.
19492
19493         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
19494         value
19495
19496         * enum.cs (error31): Helper to report error #31.
19497
19498         * cs-parser.jay (enum_declaration): Store location of each member too.
19499
19500         * enum.cs (member_to_location): New hashtable. 
19501
19502         (AddEnumMember): Update location hashtable.
19503
19504         (Emit): Use the location of each member while reporting errors.
19505
19506 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
19507
19508         * cs-parser.jay: A for_initializer if is a
19509         local_variable_declaration really ammount to have an implicit
19510         block with the variable declaration and no initializer for for.
19511
19512         * statement.cs (For.Emit): Cope with null initializers.
19513
19514         This fixes the infinite loop on for initializers.
19515
19516 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
19517
19518         * enum.cs: More cleanup.
19519
19520         * ecore.cs: Remove dead code.
19521
19522         * class.cs (Property.Emit): More simplification.
19523         (Event.Emit): ditto.
19524
19525         Reworked to have less levels of indentation.
19526
19527 2001-11-08  Ravi Pratap  <ravi@ximian.com>
19528
19529         * class.cs (Property): Emit attributes.
19530
19531         (Field): Ditto.
19532
19533         (Event): Ditto.
19534
19535         (Indexer): Ditto.
19536
19537         (Operator): Ditto.
19538
19539         * enum.cs (Emit): Ditto.
19540
19541         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
19542         Enums too.
19543
19544         * class.cs (Field, Event, etc.): Move attribute generation into the
19545         Emit method everywhere.
19546
19547         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
19548         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
19549         as we had no way of defining nested enums !
19550
19551         * rootcontext.cs : Adjust code accordingly.
19552
19553         * typemanager.cs (AddEnumType): To keep track of enum types separately.
19554
19555 2001-11-07  Ravi Pratap  <ravi@ximian.com>
19556
19557         * expression.cs (EvalConstantExpression): Move into ecore.cs
19558
19559         * enum.cs (Enum): Rename some members and make them public and readonly
19560         according to our convention.
19561
19562         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
19563         nothing else.
19564
19565         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
19566
19567         (Enum::Emit): Write a simple version for now which doesn't try to compute
19568         expressions. I shall modify this to be more robust in just a while.
19569
19570         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
19571
19572         (TypeContainer::CloseType): Create the Enum types too.
19573
19574         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
19575
19576         * expression.cs (EvalConstantExpression): Get rid of completely.
19577
19578         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
19579         user-defined values and other cases.
19580
19581         (IsValidEnumLiteral): Helper function.
19582
19583         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
19584         out there in the case we had a literal FieldExpr.
19585
19586         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
19587
19588         (Literalize): Revamp a bit to take two arguments.
19589
19590         (EnumLiteral): New class which derives from Literal to wrap enum literals.
19591
19592 2001-11-06  Ravi Pratap  <ravi@ximian.com>
19593
19594         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
19595
19596         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
19597
19598         (Resolve): Use the above to ensure we have proper initializers.
19599
19600 2001-11-05  Ravi Pratap  <ravi@ximian.com>
19601
19602         * expression.cs (Expression::EvalConstantExpression): New method to 
19603         evaluate constant expressions.
19604
19605         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
19606
19607 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
19608
19609         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
19610         in an array.
19611
19612         (Binary.ResolveOperator): Handle operator != (object a, object b)
19613         and operator == (object a, object b);
19614
19615         (Binary.DoNumericPromotions): Indicate whether the numeric
19616         promotion was possible.
19617
19618         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
19619         Implement.  
19620
19621         Made the ArrayAccess implement interface IAssignMethod instead of
19622         IStackStore as the order in which arguments are passed reflects
19623         this.
19624
19625         * assign.cs: Instead of using expr.ExprClass to select the way of
19626         assinging, probe for the IStackStore/IAssignMethod interfaces.
19627
19628         * typemanager.cs: Load InitializeArray definition.
19629
19630         * rootcontext.cs (RootContext.MakeStaticData): Used to define
19631         static data that can be used to initialize arrays. 
19632
19633 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
19634
19635         * expression.cs: Handle operator== and operator!= for booleans.
19636
19637         (Conditioal.Reduce): Implement reducer for the ?: operator.
19638
19639         (Conditional.Resolve): Implement dead code elimination.
19640
19641         (Binary.Resolve): Catch string literals and return a new
19642         concatenated string.
19643
19644         (Unary.Reduce): Implement reduction of unary expressions.
19645
19646         * ecore.cs: Split out the expression core handling here.
19647
19648         (Expression.Reduce): New method used to perform constant folding
19649         and CSE.  This is needed to support constant-expressions. 
19650
19651         * statement.cs (Statement.EmitBoolExpression): Pass true and false
19652         targets, and optimize for !x.
19653
19654 2001-11-04  Ravi Pratap  <ravi@ximian.com>
19655
19656         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
19657         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
19658         set custom atttributes.
19659
19660         * literal.cs (Literal::GetValue): New abstract method to return the actual
19661         value of the literal, cast as an object.
19662
19663         (*Literal): Implement GetValue method.
19664
19665         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
19666         expressions to the arraylist but objects of type Argument.
19667
19668         * class.cs (TypeContainer::Emit): Emit our attributes too.
19669
19670         (Method::Emit, Constructor::Emit): Ditto.
19671
19672         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
19673         to be ignoring earlier.
19674
19675 2001-11-03  Ravi Pratap  <ravi@ximian.com>
19676
19677         * attribute.cs (AttributeSection::Define): Implement to do the business
19678         of constructing a CustomAttributeBuilder.
19679
19680         (Attribute): New trivial class. Increases readability of code.  
19681
19682         * cs-parser.jay : Update accordingly.
19683
19684         (positional_argument_list, named_argument_list, named_argument): New rules
19685
19686         (attribute_arguments): Use the above so that we are more correct.
19687
19688 2001-11-02  Ravi Pratap  <ravi@ximian.com>
19689
19690         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
19691         to perform all checks for a method with a params parameter.
19692
19693         (Invocation::OverloadResolve): Update to use the above method and therefore
19694         cope correctly with params method invocations.
19695
19696         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
19697         params too.
19698
19699         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
19700         constructors in our parent too because we can't afford to miss out on 
19701         protected ones ;-)
19702
19703         * attribute.cs (AttributeSection): New name for the class Attribute
19704
19705         Other trivial changes to improve readability.
19706
19707         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
19708         use the new class names.
19709
19710 2001-11-01  Ravi Pratap  <ravi@ximian.com>
19711
19712         * class.cs (Method::Define): Complete definition for params types too
19713
19714         (Indexer::Define): Ditto.
19715
19716         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
19717         Cope everywhere with a request for info about the array parameter.
19718
19719 2001-11-01  Ravi Pratap  <ravi@ximian.com>
19720
19721         * tree.cs (RecordNamespace): Fix up to check for the correct key.
19722
19723         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
19724         local_variable_type to extract the string corresponding to the type.
19725
19726         (local_variable_type): Fixup the action to use the new helper method.
19727
19728         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
19729         go.
19730
19731         * expression.cs : Clean out code which uses the above.
19732
19733 2001-10-31  Ravi Pratap  <ravi@ximian.com>
19734
19735         * typemanager.cs (RegisterMethod): Check if we already have an existing key
19736         and bale out if necessary by returning a false.
19737
19738         (RegisterProperty): Ditto.
19739
19740         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
19741         and print out appropriate error messages.
19742
19743         * interface.cs (everywhere): Ditto.
19744
19745         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
19746         location to constructor.
19747
19748         * class.cs (Property, Event, Indexer): Update accordingly.
19749
19750         * ../errors/cs111.cs : Added.
19751
19752         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
19753         of a method, as laid down by the spec.
19754
19755         (Invocation::OverloadResolve): Use the above method.
19756
19757 2001-10-31  Ravi Pratap  <ravi@ximian.com>
19758
19759         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
19760         now take a TypeContainer and a Parameters object.
19761
19762         (ParameterData): Modify return type of ParameterModifier method to be 
19763         Parameter.Modifier and not a string.
19764
19765         (ReflectionParameters, InternalParameters): Update accordingly.
19766
19767         * expression.cs (Argument::GetParameterModifier): Same here.
19768
19769         * support.cs (InternalParameters::ParameterType): Find a better way of determining
19770         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
19771         symbol in it at all so maybe this is only for now.
19772
19773 2001-10-30  Ravi Pratap  <ravi@ximian.com>
19774
19775         * support.cs (InternalParameters): Constructor now takes an extra argument 
19776         which is the actual Parameters class.
19777
19778         (ParameterDesc): Update to provide info on ref/out modifiers.
19779
19780         * class.cs (everywhere): Update call to InternalParameters to pass in
19781         the second argument too.
19782
19783         * support.cs (ParameterData): Add ParameterModifier, which is a method 
19784         to return the modifier info [ref/out etc]
19785
19786         (InternalParameters, ReflectionParameters): Implement the above.
19787
19788         * expression.cs (Argument::ParameterModifier): Similar function to return
19789         info about the argument's modifiers.
19790
19791         (Invocation::OverloadResolve): Update to take into account matching modifiers 
19792         too.
19793
19794         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
19795         a new SetFormalParameters object which we pass to InternalParameters.
19796
19797 2001-10-30  Ravi Pratap  <ravi@ximian.com>
19798
19799         * expression.cs (NewArray): Merge into the ArrayCreation class.
19800
19801 2001-10-29  Ravi Pratap  <ravi@ximian.com>
19802
19803         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
19804         NewUserdefinedArray into one as there wasn't much of a use in having
19805         two separate ones.
19806
19807         * expression.cs (Argument): Change field's name to ArgType from Type.
19808
19809         (Type): New readonly property which returns the proper type, taking into 
19810         account ref/out modifiers.
19811
19812         (everywhere): Adjust code accordingly for the above.
19813
19814         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
19815         whether we are emitting for a ref or out parameter.
19816
19817         * expression.cs (Argument::Emit): Use the above field to set the state.
19818
19819         (LocalVariableReference::Emit): Update to honour the flag and emit the
19820         right stuff.
19821
19822         * parameter.cs (Attributes): Set the correct flags for ref parameters.
19823
19824         * expression.cs (Argument::FullDesc): New function to provide a full desc.
19825
19826         * support.cs (ParameterData): Add method ParameterDesc to the interface.
19827
19828         (ReflectionParameters, InternalParameters): Implement the above method.
19829
19830         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
19831         reporting errors.
19832
19833         (Invocation::FullMethodDesc): Ditto. 
19834
19835 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
19836
19837         * cs-parser.jay: Add extra production for the second form of array
19838         creation. 
19839
19840         * expression.cs (ArrayCreation): Update to reflect the above
19841         change. 
19842
19843         * Small changes to prepare for Array initialization.
19844
19845 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
19846
19847         * typemanager.cs (ImplementsInterface): interface might be null;
19848         Deal with this problem;
19849
19850         Also, we do store negative hits on the cache (null values), so use
19851         this instead of calling t.GetInterfaces on the type everytime.
19852
19853 2001-10-28  Ravi Pratap  <ravi@ximian.com>
19854
19855         * typemanager.cs (IsBuiltinType): New method to help determine the same.
19856
19857         * expression.cs (New::DoResolve): Get rid of array creation code and instead
19858         split functionality out into different classes.
19859
19860         (New::FormArrayType): Move into NewBuiltinArray.
19861
19862         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
19863         quite useless.
19864
19865         (NewBuiltinArray): New class to handle creation of built-in arrays.
19866
19867         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
19868         account creation of one-dimensional arrays.
19869
19870         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
19871
19872         (NewUserdefinedArray::DoResolve): Implement.
19873
19874         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
19875
19876         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
19877         we maintain inside the TypeManager. This is necessary to perform lookups on the
19878         module builder.
19879
19880         (LookupType): Update to perform GetType on the module builders too.     
19881
19882         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
19883
19884         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
19885
19886 2001-10-23  Ravi Pratap  <ravi@ximian.com>
19887
19888         * expression.cs (New::DoResolve): Implement guts of array creation.
19889
19890         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
19891
19892 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
19893
19894         * expression.cs: Fix bug I introduced lsat night that broke
19895         Delegates. 
19896
19897         (Expression.Resolve): Report a 246 error (can not resolve name)
19898         if we find a SimpleName in the stream.
19899
19900         (Expression.ResolveLValue): Ditto.
19901
19902         (Expression.ResolveWithSimpleName): This function is a variant of
19903         ResolveName, this one allows SimpleNames to be returned without a
19904         warning.  The only consumer of SimpleNames is MemberAccess
19905
19906 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
19907
19908         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
19909         might arrive here.  I have my doubts that this is correct.
19910
19911         * statement.cs (Lock): Implement lock statement.
19912
19913         * cs-parser.jay: Small fixes to support `lock' and `using'
19914
19915         * cs-tokenizer.cs: Remove extra space
19916
19917         * driver.cs: New flag --checked, allows to turn on integer math
19918         checking. 
19919
19920         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
19921         Threading.Monitor.Exit 
19922
19923 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
19924
19925         * expression.cs (IndexerAccess::DoResolveLValue): Set the
19926         Expression Class to be IndexerAccess.
19927
19928         Notice that Indexer::DoResolve sets the eclass to Value.
19929
19930 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
19931
19932         * class.cs (TypeContainer::Emit): Emit code for indexers.
19933
19934         * assign.cs (IAssignMethod): New interface implemented by Indexers
19935         and Properties for handling assignment.
19936
19937         (Assign::Emit): Simplify and reuse code. 
19938
19939         * expression.cs (IndexerAccess, PropertyExpr): Implement
19940         IAssignMethod, clean up old code. 
19941
19942 2001-10-22  Ravi Pratap  <ravi@ximian.com>
19943
19944         * typemanager.cs (ImplementsInterface): New method to determine if a type
19945         implements a given interface. Provides a nice cache too.
19946
19947         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
19948         method.
19949
19950         (ConvertReferenceExplicit): Ditto.
19951
19952         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
19953         various methods, with correct names etc.
19954
19955         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
19956         Operator.UnaryNegation.
19957
19958         * cs-parser.jay (operator_declarator): Be a little clever in the case where
19959         we have a unary plus or minus operator.
19960
19961         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
19962         UnaryMinus.
19963
19964         * everywhere : update accordingly.
19965
19966         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
19967         respectively.
19968
19969         * class.cs (Method::Define): For the case where we are implementing a method
19970         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
19971         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
19972
19973 2001-10-21  Ravi Pratap  <ravi@ximian.com>
19974
19975         * interface.cs (FindMembers): Implement to work around S.R.E
19976         lameness.
19977
19978         * typemanager.cs (IsInterfaceType): Implement.
19979
19980         (FindMembers): Update to handle interface types too.
19981
19982         * expression.cs (ImplicitReferenceConversion): Re-write bits which
19983         use IsAssignableFrom as that is not correct - it doesn't work.
19984
19985         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
19986         and accordingly override EmitStatement.
19987
19988         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
19989         using the correct logic :-)
19990
19991 2001-10-19  Ravi Pratap  <ravi@ximian.com>
19992
19993         * ../errors/cs-11.cs : Add to demonstrate error -11 
19994
19995 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
19996
19997         * assign.cs (Assign::Resolve): Resolve right hand side first, and
19998         then pass this as a hint to ResolveLValue.
19999
20000         * expression.cs (FieldExpr): Add Location information
20001
20002         (FieldExpr::LValueResolve): Report assignment to readonly
20003         variable. 
20004
20005         (Expression::ExprClassFromMemberInfo): Pass location information.
20006
20007         (Expression::ResolveLValue): Add new method that resolves an
20008         LValue. 
20009
20010         (Expression::DoResolveLValue): Default invocation calls
20011         DoResolve. 
20012
20013         (Indexers): New class used to keep track of indexers in a given
20014         Type. 
20015
20016         (IStackStore): Renamed from LValue, as it did not really describe
20017         what this did.  Also ResolveLValue is gone from this interface and
20018         now is part of Expression.
20019
20020         (ElementAccess): Depending on the element access type
20021
20022         * typemanager.cs: Add `indexer_name_type' as a Core type
20023         (System.Runtime.CompilerServices.IndexerNameAttribute)
20024
20025         * statement.cs (Goto): Take a location.
20026
20027 2001-10-18  Ravi Pratap  <ravi@ximian.com>
20028
20029         * delegate.cs (Delegate::VerifyDelegate): New method to verify
20030         if two delegates are compatible.
20031
20032         (NewDelegate::DoResolve): Update to take care of the case when
20033         we instantiate a delegate from another delegate.
20034
20035         * typemanager.cs (FindMembers): Don't even try to look up members
20036         of Delegate types for now.
20037
20038 2001-10-18  Ravi Pratap  <ravi@ximian.com>
20039
20040         * delegate.cs (NewDelegate): New class to take care of delegate
20041         instantiation.
20042
20043         * expression.cs (New): Split the delegate related code out into 
20044         the NewDelegate class.
20045
20046         * delegate.cs (DelegateInvocation): New class to handle delegate 
20047         invocation.
20048
20049         * expression.cs (Invocation): Split out delegate related code into
20050         the DelegateInvocation class.
20051
20052 2001-10-17  Ravi Pratap  <ravi@ximian.com>
20053
20054         * expression.cs (New::DoResolve): Implement delegate creation fully
20055         and according to the spec.
20056
20057         (New::DoEmit): Update to handle delegates differently.
20058
20059         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
20060         because of which we were printing out arguments in reverse order !
20061
20062         * delegate.cs (VerifyMethod): Implement to check if the given method
20063         matches the delegate.
20064
20065         (FullDelegateDesc): Implement.
20066
20067         (VerifyApplicability): Implement.
20068
20069         * expression.cs (Invocation::DoResolve): Update to accordingly handle
20070         delegate invocations too.
20071
20072         (Invocation::Emit): Ditto.
20073
20074         * ../errors/cs1593.cs : Added.
20075
20076         * ../errors/cs1594.cs : Added.
20077
20078         * delegate.cs (InstanceExpression, TargetMethod): New properties.
20079
20080 2001-10-16  Ravi Pratap  <ravi@ximian.com>
20081
20082         * typemanager.cs (intptr_type): Core type for System.IntPtr
20083
20084         (InitCoreTypes): Update for the same.
20085
20086         (iasyncresult_type, asynccallback_type): Ditto.
20087
20088         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
20089         correct.
20090
20091         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
20092         too.
20093
20094         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
20095         the builders for the 4 members of a delegate type :-)
20096
20097         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
20098         type.
20099
20100         * expression.cs (New::DoResolve): Implement guts for delegate creation.
20101
20102         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
20103
20104 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
20105
20106         * statement.cs (Break::Emit): Implement.   
20107         (Continue::Emit): Implement.
20108
20109         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
20110         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
20111         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
20112         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
20113         end loop
20114
20115         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
20116         properties that track the label for the current loop (begin of the
20117         loop and end of the loop).
20118
20119 2001-10-15  Ravi Pratap  <ravi@ximian.com>
20120
20121         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
20122         use of emitting anything at all.
20123
20124         * class.cs, rootcontext.cs : Get rid of calls to the same.
20125
20126         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
20127
20128         (Populate): Define the constructor correctly and set the implementation
20129         attributes.
20130
20131         * typemanager.cs (delegate_types): New hashtable to hold delegates that
20132         have been defined.
20133
20134         (AddDelegateType): Implement.
20135
20136         (IsDelegateType): Implement helper method.
20137
20138         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
20139
20140         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
20141         and accordingly handle it.
20142
20143         * delegate.cs (Populate): Take TypeContainer argument.
20144         Implement bits to define the Invoke method. However, I still haven't figured out
20145         how to take care of the native int bit :-(
20146
20147         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
20148         Qualify the name of the delegate, not its return type !
20149
20150         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
20151         conversion.
20152
20153         (StandardConversionExists): Checking for array types turns out to be recursive.
20154
20155         (ConvertReferenceExplicit): Implement array conversion.
20156
20157         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
20158
20159 2001-10-12  Ravi Pratap  <ravi@ximian.com>
20160
20161         * cs-parser.jay (delegate_declaration): Store the fully qualified
20162         name as it is a type declaration.
20163
20164         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
20165         readonly.
20166
20167         (DefineDelegate): Renamed from Define. Does the same thing essentially,
20168         as TypeContainer::DefineType.
20169
20170         (Populate): Method in which all the definition of the various methods (Invoke)
20171         etc is done.
20172
20173         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
20174         see.
20175
20176         (CloseDelegate): Finally creates the delegate.
20177
20178         * class.cs (TypeContainer::DefineType): Update to define delegates.
20179         (Populate, Emit and CloseType): Do the same thing here too.
20180
20181         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
20182         delegates in all these operations.
20183
20184 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
20185
20186         * expression.cs: LocalTemporary: a new expression used to
20187         reference a temporary that has been created.
20188
20189         * assign.cs: Handle PropertyAccess back here, so that we can
20190         provide the proper semantic access to properties.
20191
20192         * expression.cs (Expression::ConvertReferenceExplicit): Implement
20193         a few more explicit conversions. 
20194
20195         * modifiers.cs: `NEW' modifier maps to HideBySig.
20196
20197         * expression.cs (PropertyExpr): Make this into an
20198         ExpressionStatement, and support the EmitStatement code path. 
20199
20200         Perform get/set error checking, clean up the interface.
20201
20202         * assign.cs: recognize PropertyExprs as targets, and if so, turn
20203         them into toplevel access objects.
20204
20205 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
20206
20207         * expression.cs: PropertyExpr::PropertyExpr: use work around the
20208         SRE.
20209
20210         * typemanager.cs: Keep track here of our PropertyBuilders again to
20211         work around lameness in SRE.
20212
20213 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
20214
20215         * expression.cs (LValue::LValueResolve): New method in the
20216         interface, used to perform a second resolution pass for LValues. 
20217
20218         (This::DoResolve): Catch the use of this in static methods.
20219
20220         (This::LValueResolve): Implement.
20221
20222         (This::Store): Remove warning, assigning to `this' in structures
20223         is 
20224
20225         (Invocation::Emit): Deal with invocation of
20226         methods on value types.  We need to pass the address to structure
20227         methods rather than the object itself.  (The equivalent code to
20228         emit "this" for structures leaves the entire structure on the
20229         stack instead of a pointer to it). 
20230
20231         (ParameterReference::DoResolve): Compute the real index for the
20232         argument based on whether the method takes or not a `this' pointer
20233         (ie, the method is static).
20234
20235         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
20236         value types returned from functions when we need to invoke a
20237         method on the sturcture.
20238
20239
20240 2001-10-11  Ravi Pratap  <ravi@ximian.com>
20241
20242         * class.cs (TypeContainer::DefineType): Method to actually do the business of
20243         defining the type in the Modulebuilder or Typebuilder. This is to take
20244         care of nested types which need to be defined on the TypeBuilder using
20245         DefineNestedMethod.
20246
20247         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
20248         methods in RootContext, only ported to be part of TypeContainer.
20249
20250         (TypeContainer::GetInterfaceOrClass): Ditto.
20251
20252         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
20253
20254         * interface.cs (Interface::DefineInterface): New method. Does exactly
20255         what RootContext.CreateInterface did earlier, only it takes care of nested types 
20256         too.
20257
20258         (Interface::GetInterfaces): Move from RootContext here and port.
20259
20260         (Interface::GetInterfaceByName): Same here.
20261
20262         * rootcontext.cs (ResolveTree): Re-write.
20263
20264         (PopulateTypes): Re-write.
20265
20266         * class.cs (TypeContainer::Populate): Populate nested types too.
20267         (TypeContainer::Emit): Emit nested members too.
20268
20269         * typemanager.cs (AddUserType): Do not make use of the FullName property,
20270         instead just use the name argument passed in as it is already fully
20271         qualified.
20272
20273         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
20274         to TypeContainer mapping to see if a type is user-defined.
20275
20276         * class.cs (TypeContainer::CloseType): Implement. 
20277
20278         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
20279         the default constructor.
20280
20281         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
20282         twice.
20283
20284         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
20285
20286         * interface.cs (CloseType): Create the type here.
20287
20288         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
20289         the hierarchy.
20290
20291         Remove all the methods which are now in TypeContainer.
20292
20293 2001-10-10  Ravi Pratap  <ravi@ximian.com>
20294
20295         * delegate.cs (Define): Re-write bits to define the delegate
20296         correctly.
20297
20298 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
20299
20300         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
20301
20302         * expression.cs (ImplicitReferenceConversion): handle null as well
20303         as a source to convert to any reference type.
20304
20305         * statement.cs (Return): Perform any implicit conversions to
20306         expected return type.  
20307
20308         Validate use of return statement.  
20309
20310         * codegen.cs (EmitContext): Pass the expected return type here.
20311
20312         * class.cs (Method, Constructor, Property): Pass expected return
20313         type to EmitContext.
20314
20315 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
20316
20317         * expression.cs: Make DoResolve take an EmitContext instead of a
20318         TypeContainer.
20319
20320         Replaced `l' and `location' for `loc', for consistency.
20321
20322         (Error, Warning): Remove unneeded Tc argument.
20323
20324         * assign.cs, literal.cs, constant.cs: Update to new calling
20325         convention. 
20326
20327         * codegen.cs: EmitContext now contains a flag indicating whether
20328         code is being generated in a static method or not.
20329
20330         * cs-parser.jay: DecomposeQI, new function that replaces the old
20331         QualifiedIdentifier.  Now we always decompose the assembled
20332         strings from qualified_identifier productions into a group of
20333         memberaccesses.
20334
20335 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
20336
20337         * rootcontext.cs: Deal with field-less struct types correctly now
20338         by passing the size option to Define Type.
20339
20340         * class.cs: Removed hack that created one static field. 
20341
20342 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
20343
20344         * statement.cs: Moved most of the code generation here. 
20345
20346 2001-10-09  Ravi Pratap  <ravi@ximian.com>
20347
20348         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
20349         seem very right.
20350
20351         (ElementAccess): Remove useless bits for now - keep checks as the spec
20352         says.
20353
20354 2001-10-08  Ravi Pratap  <ravi@ximian.com>
20355
20356         * expression.cs (ElementAccess::DoResolve): Remove my crap code
20357         and start performing checks according to the spec.
20358
20359 2001-10-07  Ravi Pratap  <ravi@ximian.com>
20360
20361         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
20362         rank_specifiers instead.
20363
20364         (rank_specifiers): Change the order in which the rank specifiers are stored
20365
20366         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
20367
20368         * expression.cs (ElementAccess): Implement the LValue interface too.
20369
20370 2001-10-06  Ravi Pratap  <ravi@ximian.com>
20371
20372         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
20373         except that user defined conversions are not included.
20374
20375         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
20376         perform the conversion of the return type, if necessary.
20377
20378         (New::DoResolve): Check whether we are creating an array or an object
20379         and accordingly do the needful.
20380
20381         (New::Emit): Same here.
20382
20383         (New::DoResolve): Implement guts of array creation.
20384
20385         (New::FormLookupType): Helper function.
20386
20387 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
20388
20389         * codegen.cs: Removed most of the code generation here, and move the
20390         corresponding code generation bits to the statement classes. 
20391
20392         Added support for try/catch/finalize and throw.
20393
20394         * cs-parser.jay: Added support for try/catch/finalize.
20395
20396         * class.cs: Catch static methods having the flags override,
20397         virtual or abstract.
20398
20399         * expression.cs (UserCast): This user cast was not really doing
20400         what it was supposed to do.  Which is to be born in fully resolved
20401         state.  Parts of the resolution were being performed at Emit time! 
20402
20403         Fixed this code.
20404
20405 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
20406
20407         * expression.cs: Implicity convert the result from UserCast.
20408
20409 2001-10-05  Ravi Pratap  <ravi@ximian.com>
20410
20411         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
20412         prevented it from working correctly. 
20413
20414         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
20415         merely ConvertImplicit.
20416
20417 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
20418
20419         * typemanager.cs: Make the LookupTypeContainer function static,
20420         and not per-instance.  
20421
20422         * class.cs: Make static FindMembers (the one that takes a Type
20423         argument). 
20424
20425         * codegen.cs: Add EmitForeach here.
20426
20427         * cs-parser.jay: Make foreach a toplevel object instead of the
20428         inline expansion, as we need to perform semantic analysis on it. 
20429
20430 2001-10-05  Ravi Pratap  <ravi@ximian.com>
20431
20432         * expression.cs (Expression::ImplicitUserConversion): Rename to
20433         UserDefinedConversion.
20434
20435         (Expression::UserDefinedConversion): Take an extra argument specifying 
20436         whether we look for explicit user conversions too.
20437
20438         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
20439
20440         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
20441
20442         (ExplicitUserConversion): Make it a call to UserDefinedConversion
20443         with the appropriate arguments.
20444
20445         * cs-parser.jay (cast_expression): Record location too.
20446
20447         * expression.cs (Cast): Record location info.
20448
20449         (Expression::ConvertExplicit): Take location argument.
20450
20451         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
20452         to determine if we are doing explicit conversions.
20453
20454         (UserCast::Emit): Update accordingly.
20455
20456         (Expression::ConvertExplicit): Report an error if everything fails.
20457
20458         * ../errors/cs0030.cs : Add.
20459
20460 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
20461
20462         * modifiers.cs: If the ABSTRACT keyword is present, also set the
20463         virtual and newslot bits. 
20464
20465         * class.cs (TypeContainer::RegisterRequiredImplementations):
20466         Record methods we need.
20467
20468         (TypeContainer::MakeKey): Helper function to make keys for
20469         MethodBases, since the Methodbase key is useless.
20470
20471         (TypeContainer::Populate): Call RegisterRequiredImplementations
20472         before defining the methods.   
20473
20474         Create a mapping for method_builders_to_methods ahead of time
20475         instead of inside a tight loop.
20476
20477         (::RequireMethods):  Accept an object as the data to set into the
20478         hashtable so we can report interface vs abstract method mismatch.
20479
20480 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
20481
20482         * report.cs: Make all of it static.
20483
20484         * rootcontext.cs: Drop object_type and value_type computations, as
20485         we have those in the TypeManager anyways.
20486
20487         Drop report instance variable too, now it is a global.
20488
20489         * driver.cs: Use try/catch on command line handling.
20490
20491         Add --probe option to debug the error reporting system with a test
20492         suite. 
20493
20494         * report.cs: Add support for exiting program when a probe
20495         condition is reached.
20496
20497 2001-10-03  Ravi Pratap  <ravi@ximian.com>
20498
20499         * expression.cs (Binary::DoNumericPromotions): Fix the case when
20500         we do a forcible conversion regardless of type, to check if 
20501         ForceConversion returns a null.
20502
20503         (Binary::error19): Use location to report error.
20504
20505         (Unary::error23): Use location here too.
20506
20507         * ../errors/cs0019.cs : Check in.
20508
20509         * ../errors/cs0023.cs : Check in.
20510
20511         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
20512         case of a non-null MethodInfo object with a length of 0 !
20513
20514         (Binary::ResolveOperator): Flag error if overload resolution fails to find
20515         an applicable member - according to the spec :-)
20516         Also fix logic to find members in base types.
20517
20518         (Unary::ResolveOperator): Same here.
20519
20520         (Unary::report23): Change name to error23 and make first argument a TypeContainer
20521         as I was getting thoroughly confused between this and error19 :-)
20522
20523         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
20524         (::FindMostEncompassedType): Implement.
20525         (::FindMostEncompassingType): Implement.
20526         (::StandardConversionExists): Implement.
20527
20528         (UserImplicitCast): Re-vamp. We now need info about most specific
20529         source and target types so that we can do the necessary conversions.
20530
20531         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
20532         mathematical union with no duplicates.
20533
20534 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
20535
20536         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
20537         in order from base classes to child classes, so that we can in
20538         child classes look up in our parent for method names and
20539         attributes (required for handling abstract, virtual, new, override
20540         constructs: we need to instrospect our base class, and if we dont
20541         populate the classes in order, the introspection might be
20542         incorrect.  For example, a method could query its parent before
20543         the parent has any methods and would determine that the parent has
20544         no abstract methods (while it could have had them)).
20545
20546         (RootContext::CreateType): Record the order in which we define the
20547         classes.
20548
20549 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
20550
20551         * class.cs (TypeContainer::Populate): Also method definitions can
20552         fail now, keep track of this.
20553
20554         (TypeContainer::FindMembers): Implement support for
20555         DeclaredOnly/noDeclaredOnly flag.
20556
20557         (Constructor::Emit) Return the ConstructorBuilder.
20558
20559         (Method::Emit) Return the MethodBuilder. 
20560         Check for abstract or virtual methods to be public.
20561
20562         * rootcontext.cs (RootContext::CreateType): Register all the
20563         abstract methods required for the class to be complete and the
20564         interface methods that must be implemented. 
20565
20566         * cs-parser.jay: Report error 501 (method requires body if it is
20567         not marked abstract or extern).
20568
20569         * expression.cs (TypeOf::Emit): Implement.
20570
20571         * typemanager.cs: runtime_handle_type, new global type.
20572
20573         * class.cs (Property::Emit): Generate code for properties.
20574
20575 2001-10-02  Ravi Pratap  <ravi@ximian.com>
20576
20577         * expression.cs (Unary::ResolveOperator): Find operators on base type
20578         too - we now conform exactly to the spec.
20579
20580         (Binary::ResolveOperator): Same here.
20581
20582         * class.cs (Operator::Define): Fix minor quirk in the tests.
20583
20584         * ../errors/cs0215.cs : Added.
20585
20586         * ../errors/cs0556.cs : Added.
20587
20588         * ../errors/cs0555.cs : Added.
20589
20590 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
20591
20592         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
20593         single integer which is really efficient
20594
20595 2001-10-01  Ravi Pratap  <ravi@ximian.com>
20596
20597         *  expression.cs (Expression::ImplicitUserConversion): Use location
20598         even in the case when we are examining True operators.
20599  
20600         * class.cs (Operator::Define): Perform extensive checks to conform
20601         with the rules for operator overloading in the spec.
20602
20603         * expression.cs (Expression::ImplicitReferenceConversion): Implement
20604         some of the other conversions mentioned in the spec.
20605
20606         * typemanager.cs (array_type): New static member for the System.Array built-in
20607         type.
20608
20609         (cloneable_interface): For System.ICloneable interface.
20610
20611         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
20612         we start resolving the tree and populating types.
20613
20614         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
20615  
20616 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
20617
20618         * expression.cs (Expression::ExprClassFromMemberInfo,
20619         Expression::Literalize): Create literal expressions from
20620         FieldInfos which are literals.
20621
20622         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
20623         type casts, because they were wrong.  The test suite in tests
20624         caught these ones.
20625
20626         (ImplicitNumericConversion): ushort to ulong requires a widening
20627         cast. 
20628
20629         Int32 constant to long requires widening cast as well.
20630
20631         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
20632         for integers because the type on the stack is not i4.
20633
20634 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
20635
20636         * expression.cs (report118): require location argument. 
20637
20638         * parameter.cs: Do not dereference potential null value.
20639
20640         * class.cs: Catch methods that lack the `new' keyword when
20641         overriding a name.  Report warnings when `new' is used without
20642         anything being there to override.
20643
20644         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
20645
20646         * class.cs: Only add constructor to hashtable if it is non-null
20647         (as now constructors can fail on define).
20648
20649         (TypeManager, Class, Struct): Take location arguments.
20650
20651         Catch field instance initialization in structs as errors.
20652
20653         accepting_filter: a new filter for FindMembers that is static so
20654         that we dont create an instance per invocation.
20655
20656         (Constructor::Define): Catch errors where a struct constructor is
20657         parameterless 
20658
20659         * cs-parser.jay: Pass location information for various new
20660         constructs. 
20661
20662         * delegate.cs (Delegate): take a location argument.
20663
20664         * driver.cs: Do not call EmitCode if there were problesm in the
20665         Definition of the types, as many Builders wont be there. 
20666
20667         * decl.cs (Decl::Decl): Require a location argument.
20668
20669         * cs-tokenizer.cs: Handle properly hex constants that can not fit
20670         into integers, and find the most appropiate integer for it.
20671
20672         * literal.cs: Implement ULongLiteral.
20673
20674         * rootcontext.cs: Provide better information about the location of
20675         failure when CreateType fails.
20676
20677 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
20678
20679         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
20680         as well.
20681
20682         * expression.cs (Binary::CheckShiftArguments): Add missing type
20683         computation.
20684         (Binary::ResolveOperator): Add type to the logical and and logical
20685         or, Bitwise And/Or and Exclusive Or code paths, it was missing
20686         before.
20687
20688         (Binary::DoNumericPromotions): In the case where either argument
20689         is ulong (and most signed types combined with ulong cause an
20690         error) perform implicit integer constant conversions as well.
20691
20692 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
20693
20694         * expression.cs (UserImplicitCast): Method should always be
20695         non-null. 
20696         (Invocation::BetterConversion): Simplified test for IntLiteral.
20697
20698         (Expression::ImplicitNumericConversion): Split this routine out.
20699         Put the code that performs implicit constant integer conversions
20700         here. 
20701
20702         (Expression::Resolve): Become a wrapper around DoResolve so we can
20703         check eclass and type being set after resolve.
20704
20705         (Invocation::Badness): Remove this dead function
20706
20707         (Binary::ResolveOperator): Do not compute the expensive argumnets
20708         unless we have a union for it.
20709
20710         (Probe::Emit): Is needs to do an isinst and then
20711         compare against null.
20712
20713         (::CanConvert): Added Location argument.  If the Location argument
20714         is null (Location.Null), then we do not report errors.  This is
20715         used by the `probe' mechanism of the Explicit conversion.  We do
20716         not want to generate an error for something that the user
20717         explicitly requested to be casted.  But the pipeline for an
20718         explicit cast first tests for potential implicit casts.
20719
20720         So for now, if the Location is null, it means `Probe only' to
20721         avoid adding another argument.   Might have to revise this
20722         strategy later.
20723
20724         (ClassCast): New class used to type cast objects into arbitrary
20725         classes (used in Explicit Reference Conversions).
20726
20727         Implement `as' as well.
20728
20729         Reverted all the patches from Ravi below: they were broken:
20730
20731                 * The use of `level' as a mechanism to stop recursive
20732                   invocations is wrong.  That was there just to catch the
20733                   bug with a strack trace but not as a way of addressing
20734                   the problem.
20735
20736                   To fix the problem we have to *understand* what is going
20737                   on and the interactions and come up with a plan, not
20738                   just get things going.
20739
20740                 * The use of the type conversion cache that I proposed
20741                   last night had an open topic: How does this work across
20742                   protection domains.  A user defined conversion might not
20743                   be public in the location where we are applying the
20744                   conversion, a different conversion might be selected
20745                   (ie, private A->B (better) but public B->A (worse),
20746                   inside A, A->B applies, but outside it, B->A will
20747                   apply).
20748
20749                 * On top of that (ie, even if the above is solved),
20750                   conversions in a cache need to be abstract.  Ie, `To
20751                   convert from an Int to a Short use an OpcodeCast', not
20752                   `To convert from an Int to a Short use the OpcodeCast on
20753                   the variable 5' (which is what this patch was doing).
20754
20755 2001-09-28  Ravi Pratap  <ravi@ximian.com>
20756
20757         * expression.cs (Invocation::ConversionExists): Re-write to use
20758         the conversion cache
20759
20760         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
20761         cache all conversions done, not just user-defined ones.
20762
20763         (Invocation::BetterConversion): The real culprit. Use ConversionExists
20764         to determine if a conversion exists instead of acutually trying to 
20765         perform the conversion. It's faster too.
20766
20767         (Expression::ConvertExplicit): Modify to use ConversionExists to check
20768         and only then attempt the implicit conversion.
20769
20770 2001-09-28  Ravi Pratap  <ravi@ximian.com>
20771
20772         * expression.cs (ConvertImplicit): Use a cache for conversions
20773         already found. Check level of recursion and bail out if necessary.
20774
20775 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
20776
20777         * typemanager.cs (string_concat_string_string, string_concat_object_object):
20778         Export standard methods that we expect for string operations.
20779
20780         * statement.cs (Block::UsageWarning): Track usage of variables and
20781         report the errors for not used variables.
20782
20783         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
20784         operator. 
20785
20786 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
20787
20788         * codegen.cs: remove unnneded code 
20789
20790         * expression.cs: Removed BuiltinTypeAccess class
20791
20792         Fix the order in which implicit conversions are
20793         done.  
20794
20795         The previous fixed dropped support for boxed conversions (adding a
20796         test to the test suite now)
20797
20798         (UserImplicitCast::CanConvert): Remove test for source being null,
20799         that code is broken.  We should not feed a null to begin with, if
20800         we do, then we should track the bug where the problem originates
20801         and not try to cover it up here.
20802
20803         Return a resolved expression of type UserImplicitCast on success
20804         rather than true/false.  Ravi: this is what I was talking about,
20805         the pattern is to use a static method as a "constructor" for
20806         objects. 
20807
20808         Also, do not create arguments until the very last minute,
20809         otherwise we always create the arguments even for lookups that
20810         will never be performed. 
20811
20812         (UserImplicitCast::Resolve): Eliminate, objects of type
20813         UserImplicitCast are born in a fully resolved state. 
20814
20815         * typemanager.cs (InitCoreTypes): Init also value_type
20816         (System.ValueType). 
20817
20818         * expression.cs (Cast::Resolve): First resolve the child expression.
20819
20820         (LValue): Add new method AddressOf to be used by
20821         the `&' operator.  
20822
20823         Change the argument of Store to take an EmitContext instead of an
20824         ILGenerator, because things like FieldExpr need to be able to call
20825         their children expression to generate the instance code. 
20826
20827         (Expression::Error, Expression::Warning): Sugar functions for
20828         reporting errors.
20829
20830         (Expression::MemberLookup): Accept a TypeContainer instead of a
20831         Report as the first argument.
20832
20833         (Expression::ResolvePrimary): Killed.  I still want to improve
20834         this as currently the code is just not right.
20835
20836         (Expression::ResolveMemberAccess): Simplify, but it is still
20837         wrong. 
20838
20839         (Unary::Resolve): Catch errors in AddressOf operators.
20840
20841         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
20842         index to a byte for the short-version, or the compiler will choose
20843         the wrong Emit call, which generates the wrong data.
20844
20845         (ParameterReference::Emit, ::Store): same.
20846
20847         (FieldExpr::AddressOf): Implement.
20848
20849         * typemanager.cs: TypeManager: made public variable instead of
20850         property.
20851
20852         * driver.cs: document --fatal.
20853
20854         * report.cs (ErrorMessage, WarningMessage): new names for the old
20855         Error and Warning classes.
20856
20857         * cs-parser.jay (member_access): Turn built-in access to types
20858         into a normal simplename
20859
20860 2001-09-27  Ravi Pratap  <ravi@ximian.com>
20861
20862         * expression.cs (Invocation::BetterConversion): Fix to cope
20863         with q being null, since this was introducing a bug.
20864
20865         * expression.cs (ConvertImplicit): Do built-in conversions first.
20866
20867 2001-09-27  Ravi Pratap  <ravi@ximian.com>
20868
20869         * expression.cs (UserImplicitCast::Resolve): Fix bug.
20870
20871 2001-09-27  Ravi Pratap  <ravi@ximian.com>
20872
20873         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
20874         I had introduced long ago (what's new ?).
20875
20876         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
20877         the work of all the checking. 
20878         (ConvertImplicit): Call CanConvert and only then create object if necessary.
20879         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
20880
20881         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
20882         that is the right way. 
20883
20884         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
20885         overloading resolution. Use everywhere instead of cutting and pasting code.
20886
20887         (Binary::ResolveOperator): Use MakeUnionSet.
20888
20889         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
20890         we have to convert to bool types. Not complete yet.
20891
20892 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
20893
20894         * typemanager.cs (TypeManager::CSharpName): support ushort.
20895
20896         * expression.cs (Expression::TryImplicitIntConversion): Attempts
20897         to provide an expression that performsn an implicit constant int
20898         conversion (section 6.1.6).
20899         (Expression::ConvertImplicitRequired): Reworked to include
20900         implicit constant expression conversions.
20901
20902         (Expression::ConvertNumericExplicit): Finished.
20903
20904         (Invocation::Emit): If InstanceExpression is null, then it means
20905         that we perform a call on this.
20906
20907 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
20908
20909         * expression.cs (Unary::Emit): Remove some dead code.
20910         (Probe): Implement Resolve and Emit for `is'.
20911         (Expression::ConvertImplicitRequired): Attempt to do constant
20912         expression conversions here.  Maybe should be moved to
20913         ConvertImplicit, but I am not sure.
20914         (Expression::ImplicitLongConstantConversionPossible,
20915         Expression::ImplicitIntConstantConversionPossible): New functions
20916         that tell whether is it possible to apply an implicit constant
20917         expression conversion.
20918
20919         (ConvertNumericExplicit): Started work on explicit numeric
20920         conversions.
20921
20922         * cs-parser.jay: Update operator constants.
20923
20924         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
20925         (Parameters::GetSignature): Hook up VerifyArgs here.
20926         (Parameters::VerifyArgs): Verifies that no two arguments have the
20927         same name. 
20928
20929         * class.cs (Operator): Update the operator names to reflect the
20930         ones that the spec expects (as we are just stringizing the
20931         operator names).
20932
20933         * expression.cs (Unary::ResolveOperator): Fix bug: Use
20934         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
20935         previous usage did only work for our methods.
20936         (Expression::ConvertImplicit): Handle decimal implicit numeric
20937         conversions as well.
20938         (Expression::InternalTypeConstructor): Used to invoke constructors
20939         on internal types for default promotions.
20940
20941         (Unary::Emit): Implement special handling for the pre/post
20942         increment/decrement for overloaded operators, as they need to have
20943         the same semantics as the other operators.
20944
20945         (Binary::ResolveOperator): ditto.
20946         (Invocation::ConversionExists): ditto.
20947         (UserImplicitCast::Resolve): ditto.
20948
20949 2001-09-26  Ravi Pratap  <ravi@ximian.com>
20950
20951         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
20952         operator, return after emitting body. Regression tests pass again !
20953
20954         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
20955         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
20956         (Invocation::OverloadResolve): Ditto.
20957         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
20958
20959         * everywhere : update calls to the above methods accordingly.
20960
20961 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
20962
20963         * assign.cs (Assign): Make it inherit from ExpressionStatement.
20964
20965         * expression.cs (ExpressionStatement): New base class used for
20966         expressions that can appear in statements, so that we can provide
20967         an alternate path to generate expression that do not leave a value
20968         on the stack.
20969
20970         (Expression::Emit, and all the derivatives): We no longer return
20971         whether a value is left on the stack or not.  Every expression
20972         after being emitted leaves a single value on the stack.
20973
20974         * codegen.cs (EmitContext::EmitStatementExpression): Use the
20975         facilties of ExpressionStatement if possible.
20976
20977         * cs-parser.jay: Update statement_expression.
20978
20979 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
20980
20981         * driver.cs: Change the wording of message
20982
20983 2001-09-25  Ravi Pratap  <ravi@ximian.com>
20984
20985         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
20986         the type of the expression to the return type of the method if
20987         we have an overloaded operator match ! The regression tests pass again !
20988         (Unary::ResolveOperator): Ditto.
20989
20990         * expression.cs (Invocation::ConversionExists): Correct the member lookup
20991         to find "op_Implicit", not "implicit" ;-)
20992         (UserImplicitCast): New class to take care of user-defined implicit conversions.
20993         (ConvertImplicit, ForceConversion): Take TypeContainer argument
20994
20995         * everywhere : Correct calls to the above accordingly.
20996
20997         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
20998         (ConvertImplicit): Do user-defined conversion if it exists.
20999
21000 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
21001
21002         * assign.cs: track location.
21003         (Resolve): Use implicit conversions on assignment.
21004
21005         * literal.cs: Oops.  Not good, Emit of short access values should
21006         pass (Bytes) or the wrong argument will be selected.
21007
21008         * expression.cs (Unary::Emit): Emit code for -expr.
21009
21010         (Unary::ResolveOperator): Handle `Substract' for non-constants
21011         (substract from zero from the non-constants).
21012         Deal with Doubles as well. 
21013
21014         (Expression::ConvertImplicitRequired): New routine that reports an
21015         error if no implicit conversion exists. 
21016
21017         (Invocation::OverloadResolve): Store the converted implicit
21018         expressions if we make them
21019
21020 2001-09-24  Ravi Pratap  <ravi@ximian.com>
21021
21022         * class.cs (ConstructorInitializer): Take a Location argument.
21023         (ConstructorBaseInitializer): Same here.
21024         (ConstructorThisInitializer): Same here.
21025
21026         * cs-parser.jay : Update all calls accordingly.
21027
21028         * expression.cs (Unary, Binary, New): Take location argument.
21029         Update accordingly everywhere.
21030
21031         * cs-parser.jay : Update all calls to the above to take a location
21032         argument.
21033
21034         * class.cs : Ditto.
21035
21036 2001-09-24  Ravi Pratap  <ravi@ximian.com>
21037
21038         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
21039         (Invocation::BetterConversion): Same here
21040         (Invocation::ConversionExists): Ditto.
21041
21042         (Invocation::ConversionExists): Implement.
21043
21044 2001-09-22  Ravi Pratap  <ravi@ximian.com>
21045
21046         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
21047         Also take an additional TypeContainer argument.
21048
21049         * All over : Pass in TypeContainer as argument to OverloadResolve.
21050
21051         * typemanager.cs (CSharpName): Update to check for the string type and return
21052         that too.
21053
21054         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
21055         a given method.
21056
21057 2001-09-21  Ravi Pratap  <ravi@ximian.com>
21058
21059         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
21060         (Invocation::BetterFunction): Implement.
21061         (Invocation::BetterConversion): Implement.
21062         (Invocation::ConversionExists): Skeleton, no implementation yet.
21063
21064         Okay, things work fine !
21065
21066 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
21067
21068         * typemanager.cs: declare and load enum_type, delegate_type and
21069         void_type. 
21070
21071         * expression.cs (Expression::Emit): Now emit returns a value that
21072         tells whether a value is left on the stack or not.  This strategy
21073         might be reveted tomorrow with a mechanism that would address
21074         multiple assignments.
21075         (Expression::report118): Utility routine to report mismatches on
21076         the ExprClass.
21077
21078         (Unary::Report23): Report impossible type/operator combination
21079         utility function.
21080
21081         (Unary::IsIncrementableNumber): Whether the type can be
21082         incremented or decremented with add.
21083         (Unary::ResolveOperator): Also allow enumerations to be bitwise
21084         complemented. 
21085         (Unary::ResolveOperator): Implement ++, !, ~,
21086
21087         (Invocation::Emit): Deal with new Emit convetion.
21088
21089         * All Expression derivatives: Updated their Emit method to return
21090         whether they leave values on the stack or not.
21091
21092         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
21093         stack for expressions that are statements. 
21094
21095 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
21096
21097         * expression.cs (LValue): New interface.  Must be implemented by
21098         LValue objects.
21099         (LocalVariableReference, ParameterReference, FieldExpr): Implement
21100         LValue interface.
21101
21102         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
21103         interface for generating code, simplifies the code.
21104
21105 2001-09-20  Ravi Pratap  <ravi@ximian.com>
21106
21107         * expression.cs (everywhere): Comment out return statements in ::Resolve
21108         methods to avoid the warnings.
21109
21110 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
21111
21112         * driver.cs (parse): Report error 2001 if we can not open the
21113         source file.
21114
21115         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
21116         not resolve it.
21117
21118         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
21119         object. 
21120
21121         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
21122         otherwise nested blocks end up with the same index.
21123
21124         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
21125
21126         * expression.cs:  Instead of having FIXMEs in the Resolve
21127         functions, throw exceptions so it is obvious that we are facing a
21128         bug. 
21129
21130         * cs-parser.jay (invocation_expression): Pass Location information.
21131
21132         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
21133         Use a basename for those routines because .NET does not like paths
21134         on them. 
21135
21136         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
21137         already defined.
21138
21139 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
21140
21141         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
21142         are loading the correct data types (throws an exception if not).
21143         (TypeManager::InitCoreTypes): Use CoreLookupType
21144
21145         * expression.cs (Unary::ResolveOperator): return the child
21146         expression for expressions which are just +expr.
21147         (Unary::ResolveOperator): Return negative literals for -LITERAL
21148         expressions (otherwise they are Unary {Literal}).
21149         (Invocation::Badness): Take into account `Implicit constant
21150         expression conversions'.
21151
21152         * literal.cs (LongLiteral): Implement long literal class.
21153         (IntLiteral): export the `Value' of the intliteral. 
21154
21155 2001-09-19  Ravi Pratap  <ravi@ximian.com>
21156
21157         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
21158
21159         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
21160         instead of 'Operator'
21161
21162         * expression.cs (Binary::ResolveOperator): Update accordingly.
21163         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
21164         and 'Minus'
21165
21166         * cs-parser.jay (unary_expression): Update to use the new names.
21167
21168         * gen-treedump.cs (GetUnary): Same here.
21169
21170         * expression.cs (Unary::Resolve): Implement.
21171         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
21172         operators are found instead of making noise ;-)
21173         (Unary::ResolveOperator): New method to do precisely the same thing which
21174         Binary::ResolveOperator does for Binary expressions.
21175         (Unary.method, .Arguments): Add.
21176         (Unary::OperName): Implement.   
21177         (Unary::ForceConversion): Copy and Paste !
21178
21179         * class.cs (Operator::Define): Fix a small bug for the case when we have 
21180         a unary operator.
21181
21182         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
21183         for the inbuilt operators. Only overloading works for now ;-)
21184
21185 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
21186
21187         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
21188         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
21189
21190         * expression.cs (This::Emit): Implement. 
21191         (This::Resolve): Implement.
21192         (TypeOf:Resolve): Implement.
21193         (Expression::ResolveSimpleName): Add an implicit this to instance
21194         field references. 
21195         (MemberAccess::Resolve): Deal with Parameters and Fields. 
21196         Bind instance variable to Field expressions.
21197         (FieldExpr::Instance): New field used to track the expression that
21198         represents the object instance.
21199         (FieldExpr::Resolve): Track potential errors from MemberLookup not
21200         binding 
21201         (FieldExpr::Emit): Implement.
21202
21203         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
21204         the last instruction contains a return opcode to avoid generating
21205         the last `ret' instruction (this generates correct code, and it is
21206         nice to pass the peverify output).
21207
21208         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
21209         initializer for static and instance variables.
21210         (Constructor::Emit): Allow initializer to be null in the case of
21211         static constructors.  Only emit initializer for instance
21212         constructors. 
21213
21214         (TypeContainer::FindMembers): Return a null array if there are no
21215         matches.
21216
21217         Also fix the code for the MemberTypes.Method branch, as it was not
21218         scanning that for operators (or tried to access null variables before).
21219
21220         * assign.cs (Assign::Emit): Handle instance and static fields. 
21221
21222         * TODO: Updated.
21223
21224         * driver.cs: Stop compilation if there are parse errors.
21225
21226         * cs-parser.jay (constructor_declaration): Provide default base
21227         initializer for non-static constructors.
21228         (constructor_declarator): Do not provide a default base
21229         initializers if none was specified.
21230         Catch the fact that constructors should not have parameters.
21231
21232         * class.cs: Do not emit parent class initializers for static
21233         constructors, that should be flagged as an error.
21234
21235 2001-09-18  Ravi Pratap  <ravi@ximian.com>
21236
21237         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
21238         Move back code into TypeContainer::Populate.
21239
21240 2001-09-18  Ravi Pratap  <ravi@ximian.com>
21241
21242         * class.cs (TypeContainer::AddConstructor): Fix the check to
21243         compare against Name, not Basename. 
21244         (Operator::OpType): Change Plus and Minus to Add and Subtract.
21245
21246         * cs-parser.jay : Update accordingly.
21247
21248         * class.cs (TypeContainer::FindMembers): For the case where we are searching
21249         for methods, don't forget to look into the operators too.
21250         (RegisterMethodBuilder): Helper method to take care of this for
21251         methods, constructors and operators.
21252         (Operator::Define): Completely revamp.
21253         (Operator.OperatorMethod, MethodName): New fields.
21254         (TypeContainer::Populate): Move the registering of builders into
21255         RegisterMethodBuilder.
21256         (Operator::Emit): Re-write.
21257
21258         * expression.cs (Binary::Emit): Comment out code path to emit method
21259         invocation stuff for the case when we have a user defined operator. I am
21260         just not able to get it right !
21261
21262 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
21263
21264         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
21265         argument. 
21266
21267         (Expression::MemberLookup): Provide a version that allows to
21268         specify the MemberTypes and BindingFlags. 
21269
21270         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
21271         so it was not fetching variable information from outer blocks.
21272
21273         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
21274         Beforefieldinit as it was buggy.
21275
21276         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
21277         that Ravi put here.  
21278
21279         * class.cs (Constructor::Emit): Only emit if block is not null.
21280         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
21281         deal with this by semantically definining it as if the user had
21282         done it.
21283
21284         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
21285         constructors as we now "emit" them at a higher level.
21286
21287         (TypeContainer::DefineDefaultConstructor): Used to define the
21288         default constructors if none was provided.
21289
21290         (ConstructorInitializer): Add methods Resolve and Emit. 
21291
21292         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
21293
21294 2001-09-17  Ravi Pratap  <ravi@ximian.com>
21295
21296         * class.cs (TypeContainer::EmitDefaultConstructor): Register
21297         the default constructor builder with our hashtable for methodbuilders
21298         to methodcores.
21299
21300         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
21301         and argument_count is 0 in which case we have a match.
21302         (Binary::ResolveOperator): More null checking and miscellaneous coding
21303         style cleanup.
21304
21305 2001-09-17  Ravi Pratap  <ravi@ximian.com>
21306
21307         * rootcontext.cs (IsNameSpace): Compare against null.
21308
21309         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
21310
21311         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
21312         and Unary::Operator.
21313
21314         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
21315         accordingly.
21316
21317         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
21318         we have overloaded operators.
21319         (Binary::ResolveOperator): Implement the part which does the operator overload
21320         resolution.
21321
21322         * class.cs (Operator::Emit): Implement.
21323         (TypeContainer::Emit): Emit the operators we have too.
21324
21325         * expression.cs (Binary::Emit): Update to emit the appropriate code for
21326         the case when we have a user-defined operator.
21327
21328 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
21329
21330         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
21331
21332 2001-09-16  Ravi Pratap  <ravi@ximian.com>
21333
21334         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
21335         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
21336         (Constructor::Emit): Implement.
21337         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
21338         if we have no work to do. 
21339         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
21340         Emit method.
21341
21342         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
21343         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
21344
21345         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
21346         of parent.parent.
21347
21348 2001-09-15  Ravi Pratap  <ravi@ximian.com>
21349
21350         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
21351         in the source.
21352         (Tree::RecordNamespace): Method to do what the name says ;-)
21353         (Tree::Namespaces): Property to get at the namespaces hashtable.
21354
21355         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
21356         keep track.
21357
21358         * rootcontext.cs (IsNamespace): Fixed it :-)
21359
21360 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
21361
21362         * class.cs (TypeContainer::FindMembers): Add support for
21363         constructors. 
21364         (MethodCore): New class that encapsulates both the shared aspects
21365         of a Constructor and a Method.  
21366         (Method, Constructor): Factored pieces into MethodCore.
21367
21368         * driver.cs: Added --fatal which makes errors throw exceptions.
21369         Load System assembly as well as part of the standard library.
21370
21371         * report.cs: Allow throwing exceptions on errors for debugging.
21372
21373         * modifiers.cs: Do not use `parent', instead use the real type
21374         container to evaluate permission settings.
21375
21376         * class.cs: Put Ravi's patch back in.  He is right, and we will
21377         have to cope with the
21378
21379 2001-09-14  Ravi Pratap  <ravi@ximian.com>
21380
21381         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
21382         FamORAssem, not FamANDAssem.
21383
21384 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
21385
21386         * driver.cs: Added --parse option that only parses its input files
21387         and terminates.
21388
21389         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
21390         incorrect.  IsTopLevel is not used to tell whether an object is
21391         root_types or not (that can be achieved by testing this ==
21392         root_types).  But to see if this is a top-level *class* (not
21393         necessarly our "toplevel" container). 
21394
21395 2001-09-14  Ravi Pratap  <ravi@ximian.com>
21396
21397         * enum.cs (Enum::Define): Modify to call the Lookup method on the
21398         parent instead of a direct call to GetType.
21399
21400 2001-09-14  Ravi Pratap  <ravi@ximian.com>
21401
21402         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
21403         Modifiers.TypeAttr. This should just be a call to that method.
21404
21405         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
21406         object so that we can determine if we are top-level or not.
21407
21408         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
21409         TypeContainer too.
21410
21411         * enum.cs (Enum::Define): Ditto.
21412
21413         * modifiers.cs (FieldAttr): Re-write.
21414
21415         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
21416         (TypeContainer::HaveStaticConstructor): New property to provide access
21417         to precisely that info.
21418
21419         * modifiers.cs (MethodAttr): Re-write.
21420         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
21421
21422         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
21423         of top-level types as claimed.
21424
21425 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
21426
21427         * expression.cs (MemberLookup): Fruitless attempt to lookup
21428         constructors.  Maybe I need to emit default constructors?  That
21429         might be it (currently .NET emits this for me automatically).
21430         (Invocation::OverloadResolve): Cope with Arguments == null.
21431         (Invocation::EmitArguments): new function, shared by the new
21432         constructor and us.
21433         (Invocation::Emit): Handle static and instance methods.  Emit
21434         proper call instruction for virtual or non-virtual invocations.
21435         (New::Emit): Implement.
21436         (New::Resolve): Implement.
21437         (MemberAccess:Resolve): Implement.
21438         (MethodGroupExpr::InstanceExpression): used conforming to the spec
21439         to track instances.
21440         (FieldExpr::Resolve): Set type.
21441
21442         * support.cs: Handle empty arguments.
21443                 
21444         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
21445         SimpleLookup): Auxiliary routines to help parse a qualifier
21446         identifier.  
21447
21448         Update qualifier_identifier rule.
21449
21450         * codegen.cs: Removed debugging messages.
21451
21452         * class.cs: Make this a global thing, this acts just as a "key" to
21453         objects that we might have around.
21454
21455         (Populate): Only initialize method_builders_to_methods once.
21456
21457         * expression.cs (PropertyExpr): Initialize type from the
21458         PropertyType. 
21459
21460         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
21461         Resolve pattern.  Attempt to implicitly convert value to boolean.
21462         Emit code.
21463
21464         * expression.cs: Set the type for the int32/int32 argument case.
21465         (Binary::ResolveOperator): Set the return type to boolean for
21466         comparission operators
21467
21468         * typemanager.cs: Remove debugging print code.
21469
21470         (Invocation::Resolve): resolve type.
21471
21472         * class.cs: Allocate a MemberInfo of the correct size, as the code
21473         elsewhere depends on the test to reflect the correct contents.
21474
21475         (Method::) Keep track of parameters, due to System.Reflection holes
21476
21477         (TypeContainer::Populate): Keep track of MethodBuilders to Method
21478         mapping here.
21479
21480         (TypeContainer::FindMembers): Use ArrayList and then copy an array
21481         of the exact size and return that.
21482
21483         (Class::LookupMethodByBuilder): New function that maps
21484         MethodBuilders to its methods.  Required to locate the information
21485         on methods because System.Reflection bit us again.
21486
21487         * support.cs: New file, contains an interface ParameterData and
21488         two implementations: ReflectionParameters and InternalParameters
21489         used to access Parameter information.  We will need to grow this
21490         as required.
21491
21492         * expression.cs (Invocation::GetParameterData): implement a cache
21493         and a wrapper around the ParameterData creation for methods. 
21494         (Invocation::OverloadResolve): Use new code.
21495
21496 2001-09-13  Ravi Pratap  <ravi@ximian.com>
21497
21498         * class.cs (TypeContainer::EmitField): Remove and move into 
21499         (Field::Define): here and modify accordingly.
21500         (Field.FieldBuilder): New member.
21501         (TypeContainer::Populate): Update accordingly.
21502         (TypeContainer::FindMembers): Implement.
21503
21504 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
21505
21506         * statement.cs: (VariableInfo::VariableType): New field to be
21507         initialized with the full type once it is resolved. 
21508
21509 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
21510
21511         * parameter.cs (GetParameterInfo): Use a type cache to compute
21512         things only once, and to reuse this information
21513
21514         * expression.cs (LocalVariableReference::Emit): Implement.
21515         (OpcodeCast::Emit): fix.
21516
21517         (ParameterReference::Resolve): Implement.
21518         (ParameterReference::Emit): Implement.
21519
21520         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
21521         that are expressions need to stay as Expressions.
21522
21523         * typemanager.cs (CSharpName): Returns the C# name of a type if
21524         possible. 
21525
21526         * expression.cs (Expression::ConvertImplicit): New function that
21527         implements implicit type conversions.
21528
21529         (Expression::ImplicitReferenceConversion): Implements implicit
21530         reference conversions.
21531
21532         (EmptyCast): New type for transparent casts.
21533
21534         (OpcodeCast): New type for casts of types that are performed with
21535         a sequence of bytecodes.
21536
21537         (BoxedCast): New type used for casting value types into reference
21538         types.  Emits a box opcode.
21539
21540         (Binary::DoNumericPromotions): Implements numeric promotions of
21541         and computation of the Binary::Type.
21542
21543         (Binary::EmitBranchable): Optimization.
21544
21545         (Binary::Emit): Implement code emission for expressions.
21546
21547         * typemanager.cs (TypeManager): Added two new core types: sbyte
21548         and byte.
21549
21550 2001-09-12  Ravi Pratap  <ravi@ximian.com>
21551
21552         * class.cs (TypeContainer::FindMembers): Method which does exactly
21553         what Type.FindMembers does, only we don't have to use reflection. No
21554         implementation yet.
21555
21556         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
21557         typecontainer objects as we need to get at them.
21558         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
21559
21560         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
21561         typecontainer object.
21562
21563         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
21564         of just a Report object.
21565
21566 2001-09-11  Ravi Pratap  <ravi@ximian.com>
21567
21568         * class.cs (Event::Define): Go back to using the prefixes "add_" and
21569         "remove_"
21570         (TypeContainer::Populate): Now define the delegates of the type too.
21571         (TypeContainer.Delegates): Property to access the list of delegates defined
21572         in the type.
21573
21574         * delegates.cs (Delegate::Define): Implement partially.
21575
21576         * modifiers.cs (TypeAttr): Handle more flags.
21577
21578 2001-09-11  Ravi Pratap  <ravi@ximian.com>
21579
21580         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
21581         and not <=
21582         (Operator::Define): Re-write logic to get types by using the LookupType method
21583         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
21584         (Indexer::Define): Ditto.
21585         (Event::Define): Ditto.
21586         (Property::Define): Ditto.
21587
21588 2001-09-10  Ravi Pratap  <ravi@ximian.com>
21589
21590         * class.cs (TypeContainer::Populate): Now define operators too. 
21591         (TypeContainer.Operators): New property to access the list of operators
21592         in a type.
21593         (Operator.OperatorMethodBuilder): New member to hold the method builder
21594         for the operator we are defining.
21595         (Operator::Define): Implement.
21596
21597 2001-09-10  Ravi Pratap  <ravi@ximian.com>
21598
21599         * class.cs (Event::Define): Make the prefixes of the accessor methods
21600         addOn_ and removeOn_ 
21601
21602         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
21603         of the location being passed in too. Ideally, this should go later since all
21604         error reporting should be done through the Report object.
21605
21606         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
21607         (Populate): Iterate thru the indexers we have and define them too.
21608         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
21609         for the get and set accessors.
21610         (Indexer::Define): Implement.
21611
21612 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
21613
21614         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
21615         my previous implementation, did not work.
21616
21617         * typemanager.cs: Add a couple of missing types (the longs).
21618
21619         * literal.cs: Use TypeManager.bool_type instead of getting it.
21620
21621         * expression.cs (EventExpr): New kind of expressions.
21622         (Expressio::ExprClassFromMemberInfo): finish
21623
21624 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
21625
21626         * assign.cs: Emit stores to static fields differently.
21627
21628 2001-09-08  Ravi Pratap  <ravi@ximian.com>
21629
21630         * Merge in changes and adjust code to tackle conflicts. Backed out my
21631         code in Assign::Resolve ;-) 
21632
21633 2001-09-08  Ravi Pratap  <ravi@ximian.com>
21634
21635         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
21636         instead Report.Error and also pass in the location.
21637         (CSharpParser::Lexer): New readonly property to return the reference
21638         to the Tokenizer object.
21639         (declare_local_variables): Use Report.Error with location instead of plain 
21640         old error.
21641         (CheckDef): Ditto.
21642
21643         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
21644         (Operator.CheckBinaryOperator): Ditto.
21645
21646         * cs-parser.jay (operator_declarator): Update accordingly.
21647
21648         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
21649         (CheckBinaryOperator): Same here.
21650
21651         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
21652         on the name without any prefixes of namespace names etc. This is because we
21653         already might have something already fully qualified like 
21654         'System.Console.WriteLine'
21655
21656         * assign.cs (Resolve): Begin implementation. Stuck ;-)
21657
21658 2001-09-07  Ravi Pratap  <ravi@ximian.com>
21659
21660         * cs-tokenizer.cs (location): Return a string which also contains
21661         the file name.
21662
21663         * expression.cs (ElementAccess): New class for expressions of the
21664         type 'element access.'
21665         (BaseAccess): New class for expressions of the type 'base access.'
21666         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
21667         respectively.
21668
21669         * cs-parser.jay (element_access): Implement action.
21670         (base_access): Implement actions.
21671         (checked_expression, unchecked_expression): Implement.
21672
21673         * cs-parser.jay (local_variable_type): Correct and implement.
21674         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
21675
21676         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
21677
21678         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
21679         name and the specifiers.
21680
21681         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
21682
21683         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
21684         making them all public ;-)
21685
21686         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
21687         class anyways.
21688
21689 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
21690
21691         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
21692         PropertyExprs.
21693         (FieldExpr, PropertyExprs): New resolved expressions.
21694         (SimpleName::MemberStaticCheck): Perform static checks for access
21695         to non-static fields on static methods. Maybe this should be
21696         generalized for MemberAccesses. 
21697         (SimpleName::ResolveSimpleName): More work on simple name
21698         resolution. 
21699
21700         * cs-parser.jay (primary_expression/qualified_identifier): track
21701         the parameter index.
21702
21703         * codegen.cs (CodeGen::Save): Catch save exception, report error.
21704         (EmitContext::EmitBoolExpression): Chain to expression generation
21705         instead of temporary hack.
21706         (::EmitStatementExpression): Put generic expression code generation.
21707
21708         * assign.cs (Assign::Emit): Implement variable assignments to
21709         local variables, parameters and fields.
21710
21711 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
21712
21713         * statement.cs (Block::GetVariableInfo): New method, returns the
21714         VariableInfo for a variable name in a block.
21715         (Block::GetVariableType): Implement in terms of GetVariableInfo
21716
21717         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
21718         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
21719
21720 2001-09-06  Ravi Pratap  <ravi@ximian.com>
21721
21722         * cs-parser.jay (operator_declaration): Continue on my quest : update
21723         to take attributes argument.
21724         (event_declaration): Ditto.
21725         (enum_declaration): Ditto.
21726         (indexer_declaration): Ditto.
21727
21728         * class.cs (Operator::Operator): Update constructor accordingly.
21729         (Event::Event): Ditto.
21730
21731         * delegate.cs (Delegate::Delegate): Same here.
21732
21733         * enum.cs (Enum::Enum): Same here.
21734
21735 2001-09-05  Ravi Pratap  <ravi@ximian.com>
21736
21737         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
21738
21739         * ../tests/cs0658.cs : New file to demonstrate error 0658.
21740
21741         * attribute.cs (Attributes): New class to encapsulate all attributes which were
21742         being passed around as an arraylist.
21743         (Attributes::AddAttribute): Method to add attribute sections.
21744
21745         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
21746         (struct_declaration): Update accordingly.
21747         (constant_declaration): Update.
21748         (field_declaration): Update.
21749         (method_header): Update.
21750         (fixed_parameter): Update.
21751         (parameter_array): Ditto.
21752         (property_declaration): Ditto.
21753         (destructor_declaration): Ditto.
21754
21755         * class.cs (Struct::Struct): Update constructors accordingly.
21756         (Class::Class): Ditto.
21757         (Field::Field): Ditto.
21758         (Method::Method): Ditto.
21759         (Property::Property): Ditto.
21760         (TypeContainer::OptAttribute): update property's return type.
21761
21762         * interface.cs (Interface.opt_attributes): New member.
21763         (Interface::Interface): Update to take the extra Attributes argument.
21764
21765         * parameter.cs (Parameter::Parameter): Ditto.
21766
21767         * constant.cs (Constant::Constant): Ditto.
21768
21769         * interface.cs (InterfaceMemberBase): New OptAttributes field.
21770         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
21771         the attributes as a parameter.
21772         (InterfaceProperty): Update constructor call.
21773         (InterfaceEvent): Ditto.
21774         (InterfaceMethod): Ditto.
21775         (InterfaceIndexer): Ditto.
21776
21777         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
21778         pass the attributes too.
21779         (interface_event_declaration): Ditto.
21780         (interface_property_declaration): Ditto.
21781         (interface_method_declaration): Ditto.
21782         (interface_declaration): Ditto.
21783
21784 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
21785
21786         * class.cs (Method::Define): Track the "static Main" definition to
21787         create an entry point. 
21788
21789         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
21790         EntryPoint if we find it. 
21791
21792         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
21793         (EmitContext::ig): Make this variable public.
21794
21795         * driver.cs: Make the default output file be the first file name
21796         with the .exe extension.  
21797
21798         Detect empty compilations
21799
21800         Handle various kinds of output targets.  Handle --target and
21801         rename -t to --dumper.
21802
21803         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
21804         methods inherited from Expression return now an Expression.  This
21805         will is used during the tree rewriting as we resolve them during
21806         semantic analysis.
21807
21808         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
21809         the spec.  Missing entirely is the information about
21810         accessability of elements of it.
21811
21812         (Expression::ExprClassFromMemberInfo): New constructor for
21813         Expressions that creates a fully initialized Expression based on
21814         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
21815         a Type.
21816
21817         (Invocation::Resolve): Begin implementing resolution of invocations.
21818
21819         * literal.cs (StringLiteral):  Implement Emit.
21820
21821 2001-09-05  Ravi Pratap  <ravi@ximian.com>
21822
21823         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
21824         member.
21825
21826 2001-09-04  Ravi Pratap  <ravi@ximian.com>
21827
21828         * cs-parser.jay (attribute_arguments): Implement actions.
21829         (attribute): Fix bug in production. Implement action.
21830         (attribute_list): Implement.
21831         (attribute_target): Implement.
21832         (attribute_target_specifier, opt_target_specifier): Implement
21833         (CheckAttributeTarget): New method to check if the attribute target
21834         is valid.
21835         (attribute_section): Implement.
21836         (opt_attributes): Implement.
21837
21838         * attribute.cs : New file to handle attributes.
21839         (Attribute): Class to hold attribute info.
21840
21841         * cs-parser.jay (opt_attribute_target_specifier): Remove production
21842         (attribute_section): Modify production to use 2 different rules to 
21843         achieve the same thing. 1 s/r conflict down !
21844         Clean out commented, useless, non-reducing dimension_separator rules.
21845
21846         * class.cs (TypeContainer.attributes): New member to hold list
21847         of attributes for a type.
21848         (Struct::Struct): Modify to take one more argument, the attribute list.
21849         (Class::Class): Ditto.
21850         (Field::Field): Ditto.
21851         (Method::Method): Ditto.
21852         (Property::Property): Ditto.
21853
21854         * cs-parser.jay (struct_declaration): Update constructor call to
21855         pass in the attributes too.
21856         (class_declaration): Ditto.
21857         (constant_declaration): Ditto.
21858         (field_declaration): Ditto.
21859         (method_header): Ditto.
21860         (fixed_parameter): Ditto.
21861         (parameter_array): Ditto.
21862         (property_declaration): Ditto.
21863
21864         * constant.cs (Constant::Constant): Update constructor similarly.
21865         Use System.Collections.
21866
21867         * parameter.cs (Parameter::Parameter): Update as above.
21868
21869 2001-09-02  Ravi Pratap  <ravi@ximian.com>
21870
21871         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
21872         (TypeContainer.delegates): New member to hold list of delegates.
21873
21874         * cs-parser.jay (delegate_declaration): Implement the action correctly 
21875         this time as I seem to be on crack ;-)
21876
21877 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
21878
21879         * rootcontext.cs (RootContext::IsNamespace): new function, used to
21880         tell whether an identifier represents a namespace.
21881
21882         * expression.cs (NamespaceExpr): A namespace expression, used only
21883         temporarly during expression resolution.
21884         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
21885         utility functions to resolve names on expressions.
21886
21887 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
21888
21889         * codegen.cs: Add hook for StatementExpressions. 
21890
21891         * class.cs: Fix inverted test for static flag in methods.
21892
21893 2001-09-02  Ravi Pratap  <ravi@ximian.com>
21894
21895         * class.cs (Operator::CheckUnaryOperator): Correct error number used
21896         to make it coincide with MS' number.
21897         (Operator::CheckBinaryOperator): Ditto.
21898
21899         * ../errors/errors.txt : Remove error numbers added earlier.
21900
21901         * ../errors/cs1019.cs : Test case for error # 1019
21902
21903         * ../errros/cs1020.cs : Test case for error # 1020
21904
21905         * cs-parser.jay : Clean out commented cruft.
21906         (dimension_separators, dimension_separator): Comment out. Ostensibly not
21907         used anywhere - non-reducing rule.
21908         (namespace_declarations): Non-reducing rule - comment out.
21909
21910         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
21911         with TypeContainer::AddEnum.
21912
21913         * delegate.cs : New file for delegate handling classes.
21914         (Delegate): Class for declaring delegates.
21915
21916         * makefile : Update.
21917
21918         * cs-parser.jay (delegate_declaration): Implement.
21919
21920 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
21921
21922         * class.cs (Event::Define): Implement.
21923         (Event.EventBuilder): New member.
21924
21925         * class.cs (TypeContainer::Populate): Update to define all enums and events
21926         we have.
21927         (Events): New property for the events arraylist we hold. Shouldn't we move to using
21928         readonly fields for all these cases ?
21929
21930 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
21931
21932         * class.cs (Property): Revamp to use the convention of making fields readonly.
21933         Accordingly modify code elsewhere.
21934
21935         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
21936         the Define method of the Property class.
21937
21938         * class.cs : Clean up applied patch and update references to variables etc. Fix 
21939         trivial bug.
21940         (TypeContainer::Populate): Update to define all the properties we have. Also
21941         define all enumerations.
21942
21943         * enum.cs (Define): Implement.
21944
21945 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
21946
21947         * cs-parser.jay (overloadable_operator): The semantic value is an
21948         enum of the Operator class.
21949         (operator_declarator): Implement actions.
21950         (operator_declaration): Implement.
21951
21952         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
21953         validity of definitions.
21954         (Operator::CheckBinaryOperator): Static method to check for binary operators
21955         (TypeContainer::AddOperator): New method to add an operator to a type.
21956
21957         * cs-parser.jay (indexer_declaration): Added line to actually call the
21958         AddIndexer method so it gets added ;-)
21959
21960         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
21961         already taken care of by the MS compiler ?  
21962
21963 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
21964
21965         * class.cs (Operator): New class for operator declarations.
21966         (Operator::OpType): Enum for the various operators.
21967
21968 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
21969
21970         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
21971         ostensibly handle this in semantic analysis.
21972
21973         * cs-parser.jay (general_catch_clause): Comment out
21974         (specific_catch_clauses, specific_catch_clause): Ditto.
21975         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
21976         (catch_args, opt_catch_args): New productions.
21977         (catch_clause): Rewrite to use the new productions above
21978         (catch_clauses): Modify accordingly.
21979         (opt_catch_clauses): New production to use in try_statement
21980         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
21981         and re-write the code in the actions to extract the specific and
21982         general catch clauses by being a little smart ;-)
21983
21984         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
21985         Hooray, try and catch statements parse fine !
21986
21987 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
21988
21989         * statement.cs (Block::GetVariableType): Fix logic to extract the type
21990         string from the hashtable of variables.
21991
21992         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
21993         I end up making that mistake ;-)
21994         (catch_clauses): Fixed gross error which made Key and Value of the 
21995         DictionaryEntry the same : $1 !!
21996
21997 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
21998
21999         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
22000
22001         * cs-parser.jay (event_declaration): Correct to remove the semicolon
22002         when the add and remove accessors are specified. 
22003
22004 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
22005
22006         * cs-parser.jay (IndexerDeclaration): New helper class to hold
22007         information about indexer_declarator.
22008         (indexer_declarator): Implement actions.
22009         (parsing_indexer): New local boolean used to keep track of whether
22010         we are parsing indexers or properties. This is necessary because 
22011         implicit_parameters come into picture even for the get accessor in the 
22012         case of an indexer.
22013         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
22014
22015         * class.cs (Indexer): New class for indexer declarations.
22016         (TypeContainer::AddIndexer): New method to add an indexer to a type.
22017         (TypeContainer::indexers): New member to hold list of indexers for the
22018         type.
22019
22020 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
22021
22022         * cs-parser.jay (add_accessor_declaration): Implement action.
22023         (remove_accessor_declaration): Implement action.
22024         (event_accessors_declaration): Implement
22025         (variable_declarators): swap statements for first rule - trivial.
22026
22027         * class.cs (Event): New class to hold information about event
22028         declarations.
22029         (TypeContainer::AddEvent): New method to add an event to a type
22030         (TypeContainer::events): New member to hold list of events.
22031
22032         * cs-parser.jay (event_declaration): Implement actions.
22033
22034 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
22035
22036         * cs-parser.jay (dim_separators): Implement. Make it a string
22037         concatenating all the commas together, just as they appear.
22038         (opt_dim_separators): Modify accordingly
22039         (rank_specifiers): Update accordingly. Basically do the same
22040         thing - instead, collect the brackets here.
22041         (opt_rank_sepcifiers): Modify accordingly.
22042         (array_type): Modify to actually return the complete type string
22043         instead of ignoring the rank_specifiers.
22044         (expression_list): Implement to collect the expressions
22045         (variable_initializer): Implement. We make it a list of expressions
22046         essentially so that we can handle the array_initializer case neatly too.
22047         (variable_initializer_list): Implement.
22048         (array_initializer): Make it a list of variable_initializers
22049         (opt_array_initializer): Modify accordingly.
22050
22051         * expression.cs (New::NType): Add enumeration to help us
22052         keep track of whether we have an object/delegate creation
22053         or an array creation.
22054         (New:NewType, New::Rank, New::Indices, New::Initializers): New
22055         members to hold data about array creation.
22056         (New:New): Modify to update NewType
22057         (New:New): New Overloaded contructor for the array creation
22058         case.
22059
22060         * cs-parser.jay (array_creation_expression): Implement to call
22061         the overloaded New constructor.
22062
22063 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
22064
22065         * class.cs (TypeContainer::Constructors): Return member
22066         constructors instead of returning null.
22067
22068 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
22069
22070         * typemanager.cs (InitCoreTypes): Initialize the various core
22071         types after we have populated the type manager with the user
22072         defined types (this distinction will be important later while
22073         compiling corlib.dll)
22074
22075         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
22076         on Expression Classification.  Now all expressions have a method
22077         `Resolve' and a method `Emit'.
22078
22079         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
22080         generation from working.     Also add some temporary debugging
22081         code. 
22082
22083 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
22084
22085         * codegen.cs: Lots of code generation pieces.  This is only the
22086         beginning, will continue tomorrow with more touches of polish.  We
22087         handle the fundamentals of if, while, do, for, return.  Others are
22088         trickier and I need to start working on invocations soon.
22089
22090         * gen-treedump.cs: Bug fix, use s.Increment here instead of
22091         s.InitStatement. 
22092
22093         * codegen.cs (EmitContext): New struct, used during code
22094         emission to keep a context.   Most of the code generation will be
22095         here. 
22096
22097         * cs-parser.jay: Add embedded blocks to the list of statements of
22098         this block.  So code generation proceeds in a top down fashion.
22099
22100 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
22101
22102         * statement.cs: Add support for multiple child blocks.
22103
22104 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
22105
22106         * codegen.cs (EmitCode): New function, will emit the code for a
22107         Block of code given a TypeContainer and its ILGenerator. 
22108
22109         * statement.cs (Block): Standard public readonly optimization.
22110         (Block::Block constructors): Link children. 
22111         (Block::Child): Child Linker.
22112         (Block::EmitVariables): Emits IL variable declarations.
22113
22114         * class.cs: Drop support for MethodGroups here, delay until
22115         Semantic Analysis.
22116         (Method::): Applied the same simplification that I did before, and
22117         move from Properties to public readonly fields.
22118         (Method::ParameterTypes): Returns the parameter types for the
22119         function, and implements a cache that will be useful later when I
22120         do error checking and the semantic analysis on the methods is
22121         performed.
22122         (Constructor::GetCallingConvention): Renamed from CallingConvetion
22123         and made a method, optional argument tells whether this is a class
22124         or a structure to apply the `has-this' bit.
22125         (Method::GetCallingConvention): Implement, returns the calling
22126         convention. 
22127         (Method::Define): Defines the type, a second pass is performed
22128         later to populate the methods.
22129
22130         (Constructor::ParameterTypes): implement a cache similar to the
22131         one on Method::ParameterTypes, useful later when we do semantic
22132         analysis. 
22133
22134         (TypeContainer::EmitMethod):  New method.  Emits methods.
22135
22136         * expression.cs: Removed MethodGroup class from here.
22137
22138         * parameter.cs (Parameters::GetCallingConvention): new method.
22139
22140 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
22141
22142         * class.cs (TypeContainer::Populate): Drop RootContext from the
22143         argument. 
22144
22145         (Constructor::CallingConvention): Returns the calling convention.
22146         (Constructor::ParameterTypes): Returns the constructor parameter
22147         types. 
22148
22149         (TypeContainer::AddConstructor): Keep track of default constructor
22150         and the default static constructor.
22151
22152         (Constructor::) Another class that starts using `public readonly'
22153         instead of properties. 
22154
22155         (Constructor::IsDefault): Whether this is a default constructor. 
22156
22157         (Field::) use readonly public fields instead of properties also.
22158
22159         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
22160         track of static constructors;  If none is used, turn on
22161         BeforeFieldInit in the TypeAttributes. 
22162
22163         * cs-parser.jay (opt_argument_list): now the return can be null
22164         for the cases where there are no arguments. 
22165
22166         (constructor_declarator): If there is no implicit `base' or
22167         `this', then invoke the default parent constructor. 
22168
22169         * modifiers.cs (MethodAttr): New static function maps a set of
22170         modifiers flags into a MethodAttributes enum
22171         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
22172         MethodAttr, TypeAttr to represent the various mappings where the
22173         modifiers are used.
22174         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
22175
22176 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
22177
22178         * parameter.cs (GetParameterInfo): Fix bug where there would be no
22179         method arguments.
22180
22181         * interface.cs (PopulateIndexer): Implemented the code generator
22182         for interface indexers.
22183
22184 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
22185
22186         * interface.cs (InterfaceMemberBase): Now we track the new status
22187         here.  
22188
22189         (PopulateProperty): Implement property population.  Woohoo!  Got
22190         Methods and Properties going today. 
22191
22192         Removed all the properties for interfaces, and replaced them with
22193         `public readonly' fields. 
22194
22195 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
22196
22197         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
22198         initialize their hashtables/arraylists only when they are needed
22199         instead of doing this always.
22200
22201         * parameter.cs: Handle refs and out parameters.
22202
22203         * cs-parser.jay: Use an ArrayList to construct the arguments
22204         instead of the ParameterCollection, and then cast that to a
22205         Parameter[] array.
22206
22207         * parameter.cs: Drop the use of ParameterCollection and use
22208         instead arrays of Parameters.
22209
22210         (GetParameterInfo): Use the Type, not the Name when resolving
22211         types. 
22212
22213 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
22214
22215         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
22216         and instead use public readonly fields.
22217
22218         * class.cs: Put back walking code for type containers.
22219
22220 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
22221
22222         * class.cs (MakeConstant): Code to define constants.
22223
22224         * rootcontext.cs (LookupType): New function.  Used to locate types 
22225
22226
22227 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
22228
22229         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
22230         this System.Reflection code is.  Kudos to Microsoft
22231
22232         * typemanager.cs: Implement a type cache and avoid loading all
22233         types at boot time.  Wrap in LookupType the internals.  This made
22234         the compiler so much faster.  Wow.  I rule!
22235
22236         * driver.cs: Make sure we always load mscorlib first (for
22237         debugging purposes, nothing really important).
22238
22239         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
22240         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
22241
22242         * rootcontext.cs: Lookup types on their namespace;  Lookup types
22243         on namespaces that have been imported using the `using' keyword.
22244
22245         * class.cs (TypeContainer::TypeAttr): Virtualize.
22246         (Class::TypeAttr): Return attributes suitable for this bad boy.
22247         (Struct::TypeAttr): ditto.
22248         Handle nested classes.
22249         (TypeContainer::) Remove all the type visiting code, it is now
22250         replaced with the rootcontext.cs code
22251
22252         * rootcontext.cs (GetClassBases): Added support for structs. 
22253
22254 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
22255
22256         * interface.cs, statement.cs, class.cs, parameter.cs,
22257         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
22258         Drop use of TypeRefs, and use strings instead.
22259
22260 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
22261
22262         * rootcontext.cs: 
22263
22264         * class.cs (Struct::Struct): set the SEALED flags after
22265         checking the modifiers.
22266         (TypeContainer::TypeAttr): new property, returns the
22267         TypeAttributes for a class.  
22268
22269         * cs-parser.jay (type_list): Oops, list production was creating a
22270         new list of base types.
22271
22272         * rootcontext.cs (StdLib): New property.
22273         (GetInterfaceTypeByName): returns an interface by type name, and
22274         encapsulates error handling here.
22275         (GetInterfaces): simplified.
22276         (ResolveTree): Encapsulated all the tree resolution here.
22277         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
22278         types. 
22279
22280         * driver.cs: Add support for --nostdlib, to avoid loading the
22281         default assemblies.
22282         (Main): Do not put tree resolution here. 
22283
22284         * rootcontext.cs: Beginning of the class resolution.
22285
22286 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
22287
22288         * rootcontext.cs: Provide better error reporting. 
22289
22290         * cs-parser.jay (interface_base): set our $$ to be interfaces.
22291
22292         * rootcontext.cs (CreateInterface): Handle the case where there
22293         are no parent interfaces.
22294
22295         (CloseTypes): Routine to flush types at the end.
22296         (CreateInterface): Track types.
22297         (GetInterfaces): Returns an array of Types from the list of
22298         defined interfaces.
22299
22300         * typemanager.c (AddUserType): Mechanism to track user types (puts
22301         the type on the global type hash, and allows us to close it at the
22302         end). 
22303
22304 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
22305
22306         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
22307         RecordInterface instead.
22308
22309         * cs-parser.jay: Updated to reflect changes above.
22310
22311         * decl.cs (Definition): Keep track of the TypeBuilder type that
22312         represents this type here.  Not sure we will use it in the long
22313         run, but wont hurt for now.
22314
22315         * driver.cs: Smaller changes to accomodate the new code.
22316
22317         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
22318         when done. 
22319
22320         * rootcontext.cs (CreateInterface):  New method, used to create
22321         the System.TypeBuilder type for interfaces.
22322         (ResolveInterfaces): new entry point to resolve the interface
22323         hierarchy. 
22324         (CodeGen): Property, used to keep track of the code generator.
22325
22326 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
22327
22328         * cs-parser.jay: Add a second production for delegate_declaration
22329         with `VOID'.
22330
22331         (enum_body): Put an opt_comma here instead of putting it on
22332         enum_body or enum_member_declarations so we can handle trailing
22333         commas on enumeration members.  Gets rid of a shift/reduce.
22334
22335         (type_list): Need a COMMA in the middle.
22336
22337         (indexer_declaration): Tell tokenizer to recognize get/set
22338
22339         * Remove old targets.
22340
22341         * Re-add the parser target.
22342
22343 2001-07-13  Simon Cozens <simon@simon-cozens.org>
22344
22345         * cs-parser.jay: Add precendence rules for a number of operators
22346         ot reduce the number of shift/reduce conflicts in the grammar.
22347
22348 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
22349
22350         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
22351         and put it here.
22352
22353         Get rid of old crufty code.
22354
22355         * rootcontext.cs: Use this to keep track of the parsed
22356         representation and the defined types available to the program. 
22357
22358         * gen-treedump.cs: adjust for new convention.
22359
22360         * type.cs: Split out the type manager, and the assembly builder
22361         from here. 
22362
22363         * typemanager.cs: the type manager will live here now.
22364
22365         * cil-codegen.cs: And the code generator here. 
22366
22367 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
22368
22369         * makefile: Fixed up for easy making.
22370
22371 2001-07-13  Simon Cozens <simon@simon-cozens.org>
22372
22373         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
22374         the 
22375
22376         (unary_expression): Expand pre_increment_expression and
22377         post_decrement_expression to reduce a shift/reduce.
22378
22379 2001-07-11  Simon Cozens
22380
22381         * cs-tokenizer.cs: Hex numbers should begin with a 0.
22382
22383         Improve allow_keyword_as_indent name.
22384
22385 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
22386
22387         * Adjustments for Beta2. 
22388
22389 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
22390
22391         * decl.cs: Added `Define' abstract method.
22392         (InTransit): new property, used to catch recursive definitions. 
22393
22394         * interface.cs: Implement `Define'. 
22395
22396         * modifiers.cs: Map Modifiers.constants to
22397         System.Reflection.TypeAttribute flags.
22398
22399         * class.cs: Keep track of types and user-defined types.
22400         (BuilderInit): New method for creating an assembly
22401         (ResolveType): New function to launch the resolution process, only
22402         used by interfaces for now.
22403
22404         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
22405         that are inserted into the name space. 
22406
22407 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
22408
22409         * ARGH.  I have screwed up my tree so many times due to the use of
22410         rsync rather than using CVS.  Going to fix this at once. 
22411
22412         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
22413         load types.
22414
22415 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
22416
22417         * Experiment successful: Use System.Type rather that our own
22418         version of Type.  
22419
22420 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
22421
22422         * cs-parser.jay: Removed nsAliases from here.
22423
22424         Use new namespaces, handle `using XXX;' 
22425
22426         * namespace.cs: Reimplemented namespace handling, use a recursive
22427         definition of the class.  Now we can keep track of using clauses
22428         and catch invalid using clauses.
22429
22430 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
22431
22432         * gen-treedump.cs: Adapted for all the renaming.
22433
22434         * expression.cs (Expression): this class now has a Type property
22435         which returns an expression Type.
22436
22437         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
22438         `Type', as this has a different meaning now in the base
22439
22440 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
22441
22442         * interface.cs, class.cs: Removed from all the sources the
22443         references to signature computation, as we can not do method
22444         signature computation during the parsing time, as we are not
22445         trying to solve at that point distinguishing:
22446
22447         class X {
22448                 void a (Blah x) {}
22449                 void a (NS.Blah x) {}
22450         }
22451
22452         Which depending on the context might be valid or not, as we do not
22453         know if Blah is the same thing as NS.Blah at that point.
22454
22455         * Redid everything so the code uses TypeRefs now instead of
22456         Types.  TypeRefs are just temporary type placeholders, that need
22457         to be resolved.  They initially have a pointer to a string and the
22458         current scope in which they are used.  This is used later by the
22459         compiler to resolve the reference to an actual Type. 
22460
22461         * DeclSpace is no longer a CIR.Type, and neither are
22462         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
22463         are all DeclSpaces, but no Types. 
22464
22465         * type.cs (TypeRefManager): This implements the TypeRef manager,
22466         which keeps track of all the types that need to be resolved after
22467         the parsing has finished. 
22468
22469 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
22470
22471         * ARGH.  We are going to have to store `foreach' as a class rather
22472         than resolving it, as we need to verify error 1579 after name
22473         resolution.   *OR* we could keep a flag that says `This request to
22474         IEnumerator comes from a foreach statement' which we can then use
22475         to generate the error.
22476
22477 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
22478
22479         * class.cs (TypeContainer.AddMethod): we now add methods to the
22480         MethodGroup instead of the method hashtable.  
22481
22482         * expression.cs: Add MethodGroup abstraction, which gets us one
22483         step closer to the specification in the way we handle method
22484         declarations.  
22485
22486         * cs-parser.jay (primary_expression): qualified_identifier now
22487         tried to match up an identifier to a local variable reference or
22488         to a parameter reference.
22489
22490         current_local_parameters is now a parser global variable that
22491         points to the current parameters for the block, used during name
22492         lookup.
22493
22494         (property_declaration): Now creates an implicit `value' argument to
22495         the set accessor.
22496
22497 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
22498
22499         * parameter.cs: Do not use `param' arguments as part of the
22500         signature, per the spec.
22501
22502 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
22503
22504         * decl.cs: Base class for classes, structs and interfaces.  This
22505         is the "Declaration Space" 
22506
22507         * cs-parser.jay: Use CheckDef for checking declaration errors
22508         instead of having one on each function.
22509
22510         * class.cs: Factor out some code for handling error handling in
22511         accordance to the "Declarations" section in the "Basic Concepts"
22512         chapter in the ECMA C# spec.
22513
22514         * interface.cs: Make all interface member classes derive from
22515         InterfaceMemberBase.
22516
22517 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
22518
22519         * Many things: all interfaces are parsed and generated in
22520         gen-treedump.  Support for member variables, constructors,
22521         destructors, properties, constants is there.
22522
22523         Beginning of the IL backend, but very little done, just there for
22524         testing purposes. 
22525
22526 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
22527
22528         * cs-parser.jay: Fix labeled statement.
22529
22530         * cs-tokenizer.cs (escape): Escape " and ' always.
22531         ref_line, ref_name: keep track of the line/filename as instructed
22532         by #line by the compiler.
22533         Parse #line.
22534
22535 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
22536
22537         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
22538         to match the values in System.CodeDOM.
22539
22540         Divid renamed to Divide.
22541
22542         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
22543         statements. 
22544         (Statements.set): remove.
22545
22546         * System.CodeDOM/CodeCatchClause.cs: always have a valid
22547         statements. 
22548
22549         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
22550         falseStatements always have valid values. 
22551
22552         * cs-parser.jay: Use System.CodeDOM now.
22553