**** Merged r36952 from MCS ****
[mono.git] / mcs / gmcs / ChangeLog
1 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
2
3         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
4         unwrapping the enumeration values, chain to
5         DoConstantNumericPromotions again, so we can promote things to the
6         fundamental types (takes care of enums that are bytes, sbytes).
7
8         Fixes bug #62054.
9
10 2004-12-01  Raja R Harinath  <rharinath@novell.com>
11
12         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
13         Fix long-standing bug in type-lookup.  Use FindType instead of
14         LookupType when ec.ResolvingTypeTree.
15         (Attribute.ResolveType, Attribute.Resolve)
16         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
17         Update to changes.
18         (Attributes.Search): Remove internal version.  Update.
19         (Attributes.SearchMulti): Update.
20         (Attributes.GetClsCompliantAttribute): Remove.
21         (Attributes.GetIndexerNameAttribute): Remove.
22         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
23         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
24         * class.cs (Indexer.Define): Likewise.
25
26 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
27
28         Fix bug #68790
29         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
30         MarshallByReference members access.
31
32         * expression.cs: Use CheckMarshallByRefAccess;
33         Better error CS0197 message.
34
35         * report.cs: Print whole related error message.
36
37 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
38
39         * class (GetClassBases): Better error 60 report.
40         (EventProperty): Disabled warning 67 detection.
41
42 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
43
44         Fix bug #60324
45         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
46
47         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
48         precise values.
49
50 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
51
52         Fix bug #49488
53         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
54
55         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
56
57 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
58
59         * attribute.cs (Attribute.Resolve): Refine error reporting and
60         report a cs0117 if the identifier does not exist, to distinguish
61         from 0617 which is a miss-use of the actual identifier.
62
63         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
64         between cs0070 and cs0079.
65
66         * class.cs (MemberBase.DoDefine): When reporting a wrong
67         accessibility level, we use MethodCore to compare instead of
68         Method (this was a regression in some refactoring effort).
69
70         So now we correctly report cs0056 again.
71
72         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
73         testing the target_type (which was known to be object_type) and
74         not the source type (which is anonymous_method).
75
76         Fixed reporting of error cs1660.
77
78         * expression.cs (UserCast.Source): Expose the underlying cast.
79
80         * statement.cs (Switch.SwitchGoverningType): Sort the list of
81         allowed types to find a match to int32 first (most common).
82
83         In addition, it ignores any ImplicitUserConversions that did an
84         internal implicit conversion (as the switch statement allows only
85         one integral conversion to exist).
86
87         * class.cs (PartialContainer.Create): rename `name' to
88         `member_name' for clarity.  Then replace the string calls with a
89         call to MemberName.GetPartialName, as now using
90         MemberName.ToString is an error (this is due to the side effects
91         it had, that were fixed in the past).
92
93         This will restore the error reporting on a number of partial class
94         errors that were missusing this (and getting an exception as a
95         results, which is now just a plain textual warning, because
96         yyparse debug output would crash otherwise).
97
98 2004-11-26  Raja R Harinath  <rharinath@novell.com>
99
100         * Makefile (PROGRAM_INSTALL_DIR): Remove.
101
102 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
103
104         * rootcontext.cs (LookupType): Make sure to cache lookups that
105         don't give us a negative result. This saves about 5% of corlib
106         compilation time.
107
108 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
109
110         * report.cs (AbstractMessage.Print): messages are sent to stderr
111
112         * class.cs (TypeContainer.GetClassBases): It is an error to have a
113         non-interface in the list of interfaces (at this point, either
114         parent was properly set, or a base class is being listed in the
115         interfaces section).
116
117         This flags error 1722, and resolves the crash from bug 69259.
118
119 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
120
121         * statement.cs (Using.EmitExpressionFinally): make this work right
122         for valuetypes. Fixes 69926.
123
124 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
125
126         * const.cs (Const.ChangeType): Cope with the "0 literal can be
127         converted to an enum" here, before we try to change the underlying
128         type.  This code exists, but it is a different code path than the
129         one used while encoding constants.
130
131         (ImplicitReferenceConversionExists): In addition, resynchronized
132         the code here, so it matches the same code in
133         ImplicitReferenceConversionExists for the `from any class-type S
134         to any interface-type T'.       
135
136 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
137
138         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
139
140 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
141
142         * cs-parser.jay: Use verbosity accordingly. 
143
144 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
145
146         * expression.cs (Unary.ResolveOperator): Do not report warning;
147         AddressOf reads from variable.
148         
149         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
150
151 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
152
153         Fix bug #69462
154
155         * attribute.cs (Attributable): Removed CheckTargets.
156         (Attributes.Emit): Explicit attribute targets are tested here.
157
158         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
159         not enabled for interfaces.
160
161         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
162         (GetAssemblyName): Ouch next bug there.
163
164 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
165
166         * expression.cs: Error 275 added.
167         
168 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
169
170         Fix bug #69177 (Implemented decimal constant support)
171
172         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
173         (BinaryFold): Add DecimalConstant.
174
175         * const.cs (Define): Decimal constant 
176         (is not constant.
177         (ChangeType): Add decimal type handling.
178         (LookupConstantValue): Don't set value for decimal type but
179         emit DecimalConstantAttribute. Needed for constant optimization.
180
181         * constant.cs (ToDecimal): New method.
182         (ConvertToDecimal): New method.
183         (IntConstant): Implemented ConvertToDecimal.
184         (DecimalConstant.Emit): Emit optimized version for decimals in
185         int range.
186
187         * expression.cs (ResolveOperator): Changed order of constant
188         reduction to work correctly with native types which have
189         overloaded operators.
190         (ResolveMemberAccess): Extract constant value from attribute
191         for decimal type.
192
193         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
194
195         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
196         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
197         (ChangeType): Decimal is special.
198         (TypeToCoreType): Add decimal type.
199
200 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
201
202         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
203         decimal types.
204
205 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
206
207         * class.cs (EventField.ApplyAttributeBuilder): Fix error
208         test cs1667-5.cs.
209
210 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
211
212         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
213
214         * pending.cs (PendingImplementation): Grab only interfaces.
215
216 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
217
218         * statement.cs (ForeachHelperMethods): Add location member and
219         error 202 detection.
220
221 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
222
223         * expression.cs (DoResolveBase): Fixed wrong warning for out
224         variables.
225
226 2004-12-04  Martin Baulig  <martin@ximian.com>
227
228         * convert.cs (Convert.TypeParameter_to_Null): Use the constraints
229         to check whether the conversion is ok.
230
231         * typemanager.cs (TypeManager.GetTypeArguments): Just return
232         `Type.EmptyTypes' if we're not a generic TypeContainer.
233
234 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
235
236         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
237         old bug: when converting from the null literal to a pointer,
238         return an EmptyCast, not the NullLiteral.
239
240         This fixes #69921, the recent null_type changes probably made this
241         bug more prominent.
242
243 2004-12-03  Martin Baulig  <martin@ximian.com>
244
245         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
246         method as our child, call AnonymousMethod.Compatible() on it.
247
248 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
249
250         * class.cs (FieldBase): Use an unused bit field from the field to
251         encode the `has_offset' property from the FieldMember.  This saves
252         a couple of Ks on bootstrap compilation.
253
254         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
255         method as our child, return the AnonymousMethod resolved
256         expression.
257
258         * expression.cs (New.DoResolve): Allow return values from
259         NewDelegate to also include AnonymousMethods.
260
261         Fixes #70150.
262
263 2004-11-29  Raja R Harinath  <rharinath@novell.com>
264
265         * decl.cs (MemberCore.MemberName): Remove readonly to fix an error
266         cs1648 report.
267         * rootcontext.cs (ResolveCore::interfaces_first_stage): Add
268         System.Runtime.InteropServices._Exception, since it's a base
269         interface of the core type System.Exception in the net_2_0 profile.
270
271 2004-11-27  Martin Baulig  <martin@ximian.com>
272
273         * ecore.cs (Expression.StoreFromPtr): Use `stobj' for generic parameters.
274
275 2004-11-26  Raja R Harinath  <rharinath@novell.com>
276
277         * Makefile: Convert to use executable.make.
278         * gmcs.exe.sources: New.
279
280 2004-11-25  Martin Baulig  <martin@ximian.com>
281
282         * expression.cs (Invocation.InferType): Added support for byref types.
283
284 2004-11-25  Martin Baulig  <martin@ximian.com>
285
286         * statement.cs (Foreach.FetchMethodMoveNext): Wrap `mi.ReturnType'
287         in TypeManager.TypeToCoreType().
288
289 2004-11-25  Martin Baulig  <martin@ximian.com>
290
291         * iterators.cs (Iterator.DoDefineMembers): Override and lookup the
292         "Dispose" method from the `current_type'.
293         (Iterator.EmitMoveNext): Use the `dispose_method' we looked up in
294         DoDefineMembers() instead of using the MethodBuilder; this is
295         required for generic iterators.
296
297         * class.cs (TypeContainer.DoDefineMembers): Make this virtual.
298
299 2004-11-24  Martin Baulig  <martin@ximian.com>
300
301         * ecore.cs (Expression.LoadFromPtr): Use `ldobj' for generic parameters.
302
303 2004-11-20  Martin Baulig  <martin@ximian.com>
304
305         * expression.cs (Invocation.InferType): Correctly infer generic
306         instances; see gen-103.cs.
307         (Invocation.InferTypeArguments): If a generic method doesn't have
308         any unbound type parameters, we don't need to infer anything.
309
310 2004-11-19  Raja R Harinath  <rharinath@novell.com>
311
312         * Makefile (gmcs.exe): Update to new location of bootstrap mcs.exe.
313
314 2004-11-17  Raja R Harinath  <rharinath@novell.com>
315
316         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
317         (TypeHandle.GetMemberCache): New.
318         (TypeHandle.TypeHandle): Update.
319         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
320         (TypeManager.LookupParentInterfacesCache):
321         Rename from LookupInterfaceCache.  Optimize slightly.
322         (TypeManager.MemberLookup_FindMembers): Update.
323         * decl.cs (MemberCache.MemberCache): Set Container to null in the
324         multi-type variant.
325         (AddCacheContents): Rename from AddHashtable.
326         * class.cs (TypeContainer.parent_container): Remove.
327         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
328         (TypeContainer.DoDefineMembers): Don't initialize it.
329         Update to name changes.
330         
331 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
332
333         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
334         that factors the code to check access modifiers on override.  
335
336         (PropertyBase): Use the code here.
337
338         Patch from Lluis S'anchez, fixes bug #69361.
339
340 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
341
342         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
343         routine that is used to report the use of a captured variable
344         whose address has been taken.
345
346         There are two checks: one when variables are being captured and
347         the other check is when the address of a variable is taken. 
348         
349         (because an anonymous methods might be resolved before *or* after
350         the address has been taken) and 
351
352         * expression.cs (Conditional.DoResolve): Remove the special
353         casing that Martin added to trueExpr and falseExpr being both
354         NullLiteral.  We get the right behavior now just by introducing
355         the null_type into the compiler. 
356
357         * convert.cs (ExplicitConversion): Change the code to use
358         null_type instead of testing `expr is NullLiteral'.
359         (ImplicitConversionStandard): use null_type too.
360         (ImplicitReferenceConversionExists): use null_type too.
361         (ImplicitReferenceConversion): use null_type too.
362
363         * literal.cs: The type of `NullLiteral' is now null_type instead
364         of object_type. 
365         (Resolve): Set the type here.
366
367         * typemanager.cs: Introduce null_type.
368
369 2004-11-18  Martin Baulig  <martin@ximian.com>
370
371         * rootcontext.cs
372         (RootContext.LookupType): Return a `Type', not a `TypeExpr'.
373
374 2004-11-18  Martin Baulig  <martin@ximian.com>
375
376         * ecore.cs (TypeExpr.DoResolveAsTypeStep): Make this protected.
377
378 2004-11-18  Martin Baulig  <martin@ximian.com>
379
380         * generic.cs (Constraints.Resolve): Take an `EmitContext' instead
381         of a `DeclSpace'.  If one of our constraints is a `ConstructedType',
382         call ResolveConstructedType() on it to resolve it without checking
383         constraints.
384         (Constraints.ResolveTypes): Check them here.
385         (ConstructedType.DoResolveAsTypeStep): Fully resolve ourselves,
386         but don't check constraints.
387         (ConstructedType.ResolveAsTypeTerminal): Override this and also
388         check constraints here.
389         (ConstructedType.ResolveConstructedType): New public method.  This
390         is called from DoResolveAsTypeStep() and Constraints.Resolve() to
391         resolve ourselves without checking constraints.
392
393         * ecore.cs (Expression.ResolveAsTypeTerminal): Make this virtual.
394
395 2004-11-18  Martin Baulig  <martin@ximian.com>
396
397         * decl.cs
398         (DeclSpace.CurrentType): Changed type from `TypeExpr' to `Type'.
399
400         * delegate.cs (Delegate.DefineType): Always create the EmitContext.
401
402 2004-11-18  Martin Baulig  <martin@ximian.com>
403
404         * ecore.cs (TypeExpr.ResolveType): Removed.
405         (Expression.ResolveAsTypeTerminal): We always return a fully
406         resolved `TypeExpr', so we can just access its `Type'.
407
408         * class.cs (TypeContainer.DefineType): Resolve `CurrentType' here.
409
410 2004-11-17  Martin Baulig  <martin@ximian.com>
411
412         * ecore.cs (IAlias.Type): Replaced with ResolveAsType() to make
413         sure we don't return any unresolved TypeExpr's.
414         (TypeAliasExpression): The .ctor now takes an `IAlias' instead of
415         a `TypeExpr'.
416         (Expression.ResolveAsTypeTerminal): Make sure `te.Type != null'.
417
418         * expression.cs (MemberAccess.ResolveAsTypeStep): Don't return any
419         unresolved `ConstructedType's.
420
421 2004-11-17  Martin Baulig  <martin@ximian.com>
422
423         * ecore.cs (TypeExpr.ResolveType): Don't make this virtual.
424
425 2004-11-17  Martin Baulig  <martin@ximian.com>
426
427         * ecore.cs
428         (Expression.ResolveAsTypeTerminal): Removed the `bool silent' argument.
429
430         * decl.cs (DeclSpace.ResolveType): Removed.
431         (DeclSpace.ResolveTypeExpr): Removed the `bool silent' argument.
432
433 2004-11-17  Martin Baulig  <martin@ximian.com>
434
435         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
436         direction, like FindMembers() does.  Fixes #69546, testcase is in
437         test-315.cs.    
438
439 2004-11-16  Martin Baulig  <martin@ximian.com>
440
441         This is based on a patch from Marek Safar, see bug #69082.
442         Fixes bugs #63705 and #67130.
443
444         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
445         method; create a MemberCache for an interface type and cache the
446         result.
447
448         * decl.cs (IMemberContainer.ParentContainer): Removed.
449         (IMemberContainer.ParentCache): New property.
450         (MemberCache.SetupCacheForInterface): Removed.
451         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
452         to create a cache for an interface's "parent".
453
454         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
455         interfaces too.
456
457 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
458
459         * statement.cs: Avoid adding bools to a hashtable.
460
461 2004-11-15  Martin Baulig  <martin@ximian.com>
462
463         * decl.cs (MemberName.GetPartialName): Removed, use GetTypeName() instead.
464
465 2004-11-11  Martin Baulig  <martin@ximian.com>
466
467         * typemanager.cs (TypeManager.GetMethodName): New method.
468
469         * class.cs (MethodData.Define): Include the generic arity in the
470         name of an explicit interface; also add it to the method name.
471
472         * pending.cs (PendingImplementation.InterfaceMethod): The method
473         name now includes the generic arity.
474
475 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
476
477         * expression.cs (Invocation.OverloadResolve): Flag error if we are
478         calling an unsafe method from a safe location.
479
480 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
481
482         Fix #69167
483         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
484
485 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
486
487         * namespace.cs (VerifyUsing): use GetPartialName instead of
488         ToString. 
489
490 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
491
492         * statement.cs (Return.Resolve): Fix regression in typo: if
493         `in_exc', we have to request a NeedReturnLabel, this was a typo
494         introduced in the anonymous method check-in.  Fixes #69131.
495
496         * Indexers were using the ShortName when defining themselves,
497         causing a regression in the compiler bootstrap when applying the
498         patch from 2004-11-02 (first part), now they use their full name
499         and the bug is gone.
500
501 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
502
503         * driver.cs: Strip the path from the names of embedded resources. Fixes
504         #68519.
505
506 2004-11-04  Raja R Harinath  <rharinath@novell.com>
507
508         Fix error message regression: cs0104-2.cs.
509         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
510         (AliasEntry.Resolve): Update.
511         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
512         'silent' flag.
513         (RootContext.LookupType): Update.
514
515 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
516
517         * cs-parser.jay: Add support for handling accessor modifiers
518         * class: Add support port accessor modifiers and error checking,
519         define PropertyMethod.Define as virtual (not abstract anymore)
520         * ecore.cs: Add checking for proeprties access with access modifiers
521         * iterators.cs: Modify Accessor constructor call based in the modified
522         constructor
523 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
524
525         * expression.cs (StringConcat): Handle being called twice,
526         as when we have a concat in a field init with more than two
527         ctors in the class
528
529 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
530
531         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
532         special case explicit implementations, we should always produce
533         the .property or .event declaration.
534         
535         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
536         since it will not return correct data if people use this
537         unresolved in the presence of using statements (see test-313).
538
539         * class.cs (MethodData.Define): If we are an explicit interface
540         implementation, set the method name to the full name of the
541         interface plus the name of the method.  
542
543         Notice that using the method.MethodName.GetFullName() does not
544         work, as it will only contain the name as declared on the source
545         file (it can be a shorthand in the presence of using statements)
546         and not the fully qualifed type name, for example:
547
548         using System;
549
550         class D : ICloneable {
551                 object ICloneable.Clone ()  {
552                 }
553         }
554
555         Would produce a method called `ICloneable.Clone' instead of
556         `System.ICloneable.Clone'.
557
558         * namespace.cs (Alias.Resolve): Use GetPartialName.
559         
560 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
561
562         * cs-parser.jay: Add error 1055 report.
563
564 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
565
566         * assign.cs (Assign.DoResolve): Only do the transform of
567         assignment into a New if the types are compatible, if not, fall
568         through and let the implicit code deal with the errors and with
569         the necessary conversions. 
570
571 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
572
573         * cs-parser.jay: Add error 1031 report.
574
575         * cs-tokenizer.cs: Add location for error 1038.
576
577 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
578
579         * cs-parser.jay: Add error 1016 report.
580
581 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
582
583         * cs-parser.jay: Add errors 1575,1611 report.
584
585 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
586
587         * cs-parser.jay: Add error 1001 report.
588
589 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
590
591         Fix #68850
592         * attribute.cs (GetMarshal): Add method argument for
593         caller identification.
594
595         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
596         agument for GetMarshal and RuntimeMissingSupport.
597
598 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
599
600         * attribute.cs (ExtractSecurityPermissionSet): Removed
601         TypeManager.code_access_permission_type.
602
603         * typemanager.cs: Removed TypeManager.code_access_permission_type.
604
605 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
606
607         * expression.cs (LocalVariableReference.DoResolveLValue): Check
608         for obsolete use of a variable here.   Fixes regression on errors
609         cs0619-25 and cs0619-26.
610
611 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
612
613         Fix #62358, implemented security attribute encoding.
614
615         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
616         Tests permitted SecurityAction for assembly or other types.
617         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
618         data from SecurityPermissionAttribute to PermisionSet class.
619
620         * class.cs (ApplyAttributeBuilder): Added special handling
621         for System.Security.Permissions.SecurityAttribute based types.
622
623         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
624         special handling for System.Security.Permissions.SecurityAttribute
625         based types.
626
627         * enum.cs (ApplyAttributeBuilder): Added special handling
628         for System.Security.Permissions.SecurityAttribute based types.
629
630         * parameter.cs (ApplyAttributeBuilder): Added special handling
631         for System.Security.Permissions.SecurityAttribute based types.
632
633         * rootcontext.cs: Next 2 core types.
634
635         * typemanager.cs (TypeManager.security_permission_attr_type):
636         Built in type for the SecurityPermission Attribute.
637         (code_access_permission_type): Build in type.
638
639 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
640
641         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
642         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
643         all of this information into
644         EmitContext.EmitCapturedVariableInstance.
645         
646         * codegen.cs (EmitCapturedVariableInstance): move here the
647         funcionality of emitting an ldarg.0 in the presence of a
648         remapping.   This centralizes the instance emit code.
649
650         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
651         then emit a load of this: it means that we have reached the
652         topmost ScopeInfo: the one that contains the pointer to the
653         instance of the class hosting the anonymous method.
654
655         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
656         captures to the topmost CaptureContext.
657
658 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
659
660         * expression.cs (LocalVariableReference): Move the knowledge about
661         the iterators into codegen's EmitCapturedVariableInstance.
662
663 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
664
665         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
666         all code paths return a value from an anonymous method (it is the
667         same as the 161 error, but for anonymous methods).
668
669 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
670
671         The introduction of anonymous methods in the compiler changed
672         various ways of doing things in the compiler.  The most
673         significant one is the hard split between the resolution phase
674         and the emission phases of the compiler.
675
676         For instance, routines that referenced local variables no
677         longer can safely create temporary variables during the
678         resolution phase: they must do so from the emission phase,
679         since the variable might have been "captured", hence access to
680         it can not be done with the local-variable operations from the runtime.
681         
682         * statement.cs 
683
684         (Block.Flags): New flag `IsTopLevel' to indicate that this block
685         is a toplevel block.
686
687         (ToplevelBlock): A new kind of Block, these are the blocks that
688         are created by the parser for all toplevel method bodies.  These
689         include methods, accessors and anonymous methods.
690
691         These contain some extra information not found in regular blocks:
692         A pointer to an optional CaptureContext (for tracking captured
693         local variables and parameters).  A pointer to the parent
694         ToplevelBlock.
695         
696         (Return.Resolve): Catch missmatches when returning a value from an
697         anonymous method (error 1662).
698         Invoke NeedReturnLabel from the Resolve phase instead of the emit
699         phase.
700
701         (Break.Resolve): ditto.
702
703         (SwitchLabel): instead of defining the labels during the
704         resolution phase, we now turned the public ILLabel and ILLabelCode
705         labels into methods called GetILLabelCode() and GetILLabel() that
706         only define the label during the Emit phase.
707
708         (GotoCase): Track the SwitchLabel instead of the computed label
709         (its contained therein).  Emit the code by using
710         SwitchLabel.GetILLabelCode ().
711
712         (LocalInfo.Flags.Captured): A new flag has been introduce to track
713         whether the Local has been captured or not.
714
715         (LocalInfo.IsCaptured): New property, used to tell whether the
716         local has been captured.
717         
718         * anonymous.cs: Vastly updated to contain the anonymous method
719         support.
720
721         The main classes here are: CaptureContext which tracks any
722         captured information for a toplevel block and ScopeInfo used to
723         track the activation frames for various local variables.   
724
725         Each toplevel block has an optional capture context associated
726         with it.  When a method contains an anonymous method both the
727         toplevel method and the anonymous method will create a capture
728         context.   When variables or parameters are captured, they are
729         recorded on the CaptureContext that owns them, for example:
730
731         void Demo () {
732              int a;
733              MyDelegate d = delegate {
734                  a = 1;
735              }
736         }
737
738         Here `a' will be recorded as captured on the toplevel
739         CapturedContext, the inner captured context will not have anything
740         (it will only have data if local variables or parameters from it
741         are captured in a nested anonymous method.
742
743         The ScopeInfo is used to track the activation frames for local
744         variables, for example:
745
746         for (int i = 0; i < 10; i++)
747                 for (int j = 0; j < 10; j++){
748                    MyDelegate d = delegate {
749                         call (i, j);
750                    }
751                 }
752
753         At runtime this captures a single captured variable `i', but it
754         captures 10 different versions of the variable `j'.  The variable
755         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
756         recorded on a child.  
757
758         The toplevel ScopeInfo will also track information like the `this'
759         pointer if instance variables were referenced (this is necessary
760         as the anonymous method lives inside a nested class in the host
761         type of the method). 
762
763         (AnonymousMethod): Expanded to track the Toplevel, implement
764         `AnonymousMethod.Compatible' to tell whether an anonymous method
765         can be converted to a target delegate type. 
766
767         The routine now also produces the anonymous method content
768
769         (AnonymousDelegate): A helper class that derives from
770         DelegateCreation, this is used to generate the code necessary to
771         produce the delegate for the anonymous method that was created. 
772
773         * assign.cs: API adjustments for new changes in
774         Convert.ImplicitStandardConversionExists.
775
776         * class.cs: Adjustments to cope with the fact that now toplevel
777         blocks are of type `ToplevelBlock'. 
778
779         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
780         insteda of standard blocks.
781
782         Flag errors if params arguments are passed to anonymous methods.
783
784         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
785         `CurrentAnonymousMethod' which points to the current Anonymous
786         Method.  The variable points to the AnonymousMethod class that
787         holds the code being compiled.  It is set in the new EmitContext
788         created for the anonymous method.
789
790         (EmitContext.Phase): Introduce a variable and an enumeration to
791         assist in enforcing some rules about when and where we are allowed
792         to invoke certain methods (EmitContext.NeedsReturnLabel is the
793         only one that enfonces this right now).
794
795         (EmitContext.HaveCaptureInfo): new helper method that returns
796         whether we have a CapturedContext initialized.
797
798         (EmitContext.CaptureVariable): New method used to register that a
799         LocalInfo must be flagged for capturing. 
800
801         (EmitContext.CapturedParameter): New method used to register that a
802         parameters must be flagged for capturing. 
803         
804         (EmitContext.CapturedField): New method used to register that a
805         field must be flagged for capturing. 
806
807         (EmitContext.HaveCapturedVariables,
808         EmitContext.HaveCapturedFields): Return whether there are captured
809         variables or fields. 
810
811         (EmitContext.EmitMethodHostInstance): This is used to emit the
812         instance for the anonymous method.  The instance might be null
813         (static methods), this (for anonymous methods that capture nothing
814         and happen to live side-by-side with the current method body) or a
815         more complicated expression if the method has a CaptureContext.
816
817         (EmitContext.EmitTopBlock): Routine that drives the emission of
818         code: it will first resolve the top block, then emit any metadata
819         and then emit the code.  The split is done so that we can extract
820         any anonymous methods and flag any captured variables/parameters.
821         
822         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
823         during this phase, the ILGenerator should not be used as labels
824         and local variables declared here might not be accessible to any
825         code that is part of an anonymous method.  
826
827         Exceptions to this include the temporary variables that are
828         created by some statements internally for holding temporary
829         variables. 
830         
831         (EmitContext.EmitMeta): New routine, in charge of emitting all the
832         metadata for a cb
833
834         (EmitContext.TemporaryReturn): This method is typically called
835         from the Emit phase, and its the only place where we allow the
836         ReturnLabel to be defined other than the EmitMeta.  The reason is
837         that otherwise we would have to duplicate a lot of logic in the
838         Resolve phases of various methods that today is on the Emit
839         phase. 
840
841         (EmitContext.NeedReturnLabel): This no longer creates the label,
842         as the ILGenerator is not valid during the resolve phase.
843
844         (EmitContext.EmitThis): Extended the knowledge in this class to
845         work in anonymous methods in addition to iterators. 
846
847         (EmitContext.EmitCapturedVariableInstance): This emits whatever
848         code is necessary on the stack to access the instance to a local
849         variable (the variable will be accessed as a field).
850
851         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
852         EmitContext.EmitAddressOfParameter): Routines to support
853         parameters (not completed at this point). 
854         
855         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
856         will also remove the parameters.
857
858         * convert.cs (Convert): Define a `ConstantEC' which points to a
859         null.  This is just to prefity some code that uses
860         ImplicitStandardConversion code and do not have an EmitContext
861         handy.
862
863         The idea is to flag explicitly that at that point in time, it is
864         known that the conversion will not trigger the delegate checking
865         code in implicit conversions (which requires a valid
866         EmitContext). 
867
868         Everywhere: pass new EmitContext parameter since
869         ImplicitStandardConversionExists now requires it to check for
870         anonymous method conversions. 
871
872         (Convert.ImplicitStandardConversionExists): If the type of an
873         expression is the anonymous_method_type, and the type is a
874         delegate, we invoke the AnonymousMethod.Compatible method to check
875         whether an implicit conversion is possible. 
876
877         (Convert.ImplicitConversionStandard): Only do implicit method
878         group conversions if the language level is not ISO_1.
879
880         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
881         MethodInfo for the Invoke method.  used by Delegate and
882         AnonymousDelegate.
883
884         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
885         method conversions if the target type is a delegate.
886
887         Removed extra debugging nops.
888
889         (LocalVariableReference): Turn the `local_info' into a public
890         field. 
891
892         Add `prepared' field, the same hack used for FieldExprs to cope
893         with composed assignments, as Local variables do not necessarily
894         operate purely on the stack as they used to: they can be captured
895         fields. 
896
897         Add `temp' for a temporary result, like fields.
898
899         Refactor DoResolve and DoResolveLValue into DoResolveBase.
900
901         It now copes with Local variables that are captured and emits the
902         proper instance variable to load it from a field in the captured
903         case. 
904
905         (ParameterReference.DoResolveBase): During the resolve phase,
906         capture parameters if we are in an anonymous method.
907
908         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
909         anonymous method, use the EmitContext helper routines to emit the
910         parameter reference.
911
912         * iterators.cs: Set RemapToProxy to true/false during the
913         EmitDispose class.
914
915         * parameters.cs (GetParameterByName): New helper method. 
916
917         * typemanager.cs (anonymous_method_type) a new type that
918         represents an anonyous method.  This is always an internal type,
919         used as a fencepost to test against the anonymous-methodness of an
920         expression. 
921         
922 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
923
924         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
925         561 report.
926         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
927
928 2004-11-10  Martin Baulig  <martin@ximian.com>
929
930         * expression.cs (Invocation.BetterFunction): If two methods have
931         equal parameter types, but only one of them is generic, the
932         non-generic one wins.
933         (New.DoResolve): Don't set `is_struct' to false if we're a generic
934         instance; just use `Type.IsValueType' to determine whether
935         something is a struct or not.
936         (MemberAccess.DoResolveAsTypeStep): Don't modify the `args' field,
937         so we can be called multiple times.
938
939 2004-11-10  Martin Baulig  <martin@ximian.com>
940
941         * generic.cs (TypeParameter.DefineConstraints): New public method.
942         (TypeParameter.CheckAccessLevel): Override this and return true.
943         (ConstructedType.ResolveType): Renamed to DoResolveType(), don't
944         override ResolveType() anymore.
945         (ConstructedType.DoResolveAsTypeStep): Call DoResolveType() here.
946
947 2004-11-10  Martin Baulig  <martin@ximian.com>
948
949         * rootcontext.cs (RootContext.LookupType): If we're a nested type,
950         call DeclSpace.ResolveNestedType() on it.
951
952 2004-11-10  Martin Baulig  <martin@ximian.com>
953
954         * support.cs (ReflectionParameters.ParameterModifier): If `gpd' is
955         non-null, call ParameterModifier() on it.
956
957 2004-11-10  Martin Baulig  <martin@ximian.com>
958
959         * iterators.cs
960         (Iterators): Added `current_type' and `this_type' fields.
961         (Iterators.DefineIterator): Create a new EmitContext and store it
962         in `ec'; compute `this_type'.
963
964 2004-11-10  Martin Baulig  <martin@ximian.com>
965
966         * typemanager.cs
967         (TypeManager.IsPrivateAccessible): New public method.
968         (Closure.Filter): Use IsPrivateAccessible() instead of IsEqual().
969
970 2004-11-10  Martin Baulig  <martin@ximian.com>
971
972         * class.cs (TypeContainer.DefineType): Call
973         TypeBuilder.DefineGenericParameters() before resolving the type
974         parameters.
975         (MethodData.parent_method): New protected field.
976         (MethodData..ctor): Added `MethodInfo parent_method' argument.
977         (MethodData.Define): Compute `parent_method'.
978
979         * decl.cs
980         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
981         (MemberCore.GetClsCompliantAttributeValue): Likewise.
982         (DeclSpace.ec): New protected field; store the EmitContext here.
983         (DeclSpace.EmitContext): New public property.
984         (DeclSpace.ResolveType): Un-comment from the [Obsolte] attribute.
985         (DeclSpace.ResolveNestedType): New public method.
986         (DeclSpace.ResolveTypeExpr): Just call ResolveAsTypeTerminal() here.
987         (DeclSpace.NestedAccessible): Added `Type tb' argument.
988         (DeclSpace.FamilyAccessible): Likewise.
989         (DeclSpace.FindType): Call ResolveNestedType() for nested types.
990         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
991         EmitContext.
992
993         * delegate.cs (Delegate.Define): Store the EmitContext in the `ec'
994         field.
995
996         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
997         (Enum.Emit): Don't create a new EmitContext.
998
999 2004-10-18  Martin Baulig  <martin@ximian.com>
1000
1001         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
1002         `Type' directly, but call ResolveType() on it.
1003         (Catch.Resolve): Likewise.
1004         (Foreach.Resolve): Likewise.
1005
1006 2004-10-18  Martin Baulig  <martin@ximian.com>
1007
1008         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
1009         `Type' directly, but call ResolveType() on it.
1010         (Probe.DoResolve): Likewise.
1011         (ArrayCreation.LookupType): Likewise.
1012         (TypeOf.DoResolve): Likewise.
1013         (SizeOf.DoResolve): Likewise.
1014
1015 2004-10-18  Raja R Harinath  <rharinath@novell.com>
1016
1017         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
1018         the ResolveType.
1019
1020 2004-10-17  John Luke  <john.luke@gmail.com>
1021
1022         * class.cs (Operator.GetSignatureForError): use CSharpName
1023
1024         * parameter.cs (Parameter.GetSignatureForError): Returns
1025         correct name even if was not defined.
1026
1027 2004-10-13  Raja R Harinath  <rharinath@novell.com>
1028
1029         Fix #65816.
1030         * class.cs (TypeContainer.EmitContext): New property.
1031         (DefineNestedTypes): Create an emitcontext for each part.
1032         (MethodCore.DoDefineParameters): Use container's emitcontext.
1033         Pass type array to InternalParameters.
1034         (MemberBase.DoDefine): Use container's emitcontext.
1035         (FieldMember.Define): Likewise.
1036         (Event.Define): Likewise.
1037         (SetMethod.GetParameterInfo): Change argument to EmitContext.
1038         Pass type array to InternalParameters.
1039         (SetIndexerMethod.GetParameterInfo): Likewise.
1040         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
1041         * delegate.cs (Define): Pass emitcontext to
1042         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
1043         array to InternalParameters.
1044         * expression.cs (ParameterReference.DoResolveBase): Pass
1045         emitcontext to GetParameterInfo.
1046         (ComposedCast.DoResolveAsTypeStep): Remove check on
1047         ec.ResolvingTypeTree.
1048         * parameter.cs (Parameter.Resolve): Change argument to
1049         EmitContext.  Use ResolveAsTypeTerminal.
1050         (Parameter.GetSignature): Change argument to EmitContext.
1051         (Parameters.ComputeSignature): Likewise.
1052         (Parameters.ComputeParameterTypes): Likewise.
1053         (Parameters.GetParameterInfo): Likewise.
1054         (Parameters.ComputeAndDefineParameterTypes): Likewise.
1055         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
1056         * support.cs (InternalParameters..ctor): Remove variant that takes
1057         a DeclSpace.
1058         * typemanager.cs (system_intptr_expr): New.
1059         (InitExpressionTypes): Initialize it.
1060
1061 2004-10-12  Chris Toshok  <toshok@ximian.com>
1062
1063         * cs-parser.jay: fix location for try_statement and catch_clause.
1064
1065 2004-10-18  Martin Baulig  <martin@ximian.com>
1066
1067         * class.cs (FieldMember.Define): Don't access the TypeExpr's
1068         `Type' directly, but call ResolveType() on it.
1069         (MemberBase.DoDefine): Likewise.
1070
1071         * expression.cs (New.DoResolve): Don't access the TypeExpr's
1072         `Type' directly, but call ResolveType() on it.
1073         (ComposedCast.DoResolveAsTypeStep): Likewise.
1074
1075         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
1076         `Type' directly, but call ResolveType() on it.
1077
1078 2004-10-17  John Luke  <john.luke@gmail.com>
1079
1080         * class.cs (Operator.GetSignatureForError): use CSharpName
1081
1082         * parameter.cs (Parameter.GetSignatureForError): Returns
1083         correct name even if was not defined.
1084
1085 2004-10-13  Raja R Harinath  <rharinath@novell.com>
1086
1087         Fix #65816.
1088         * class.cs (TypeContainer.EmitContext): New property.
1089         (DefineNestedTypes): Create an emitcontext for each part.
1090         (MethodCore.DoDefineParameters): Use container's emitcontext.
1091         Pass type array to InternalParameters.
1092         (MemberBase.DoDefine): Use container's emitcontext.
1093         (FieldMember.Define): Likewise.
1094         (Event.Define): Likewise.
1095         (SetMethod.GetParameterInfo): Change argument to EmitContext.
1096         Pass type array to InternalParameters.
1097         (SetIndexerMethod.GetParameterInfo): Likewise.
1098         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
1099         * delegate.cs (Define): Pass emitcontext to
1100         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
1101         array to InternalParameters.
1102         * expression.cs (ParameterReference.DoResolveBase): Pass
1103         emitcontext to GetParameterInfo.
1104         (ComposedCast.DoResolveAsTypeStep): Remove check on
1105         ec.ResolvingTypeTree.
1106         * parameter.cs (Parameter.Resolve): Change argument to
1107         EmitContext.  Use ResolveAsTypeTerminal.
1108         (Parameter.GetSignature): Change argument to EmitContext.
1109         (Parameters.ComputeSignature): Likewise.
1110         (Parameters.ComputeParameterTypes): Likewise.
1111         (Parameters.GetParameterInfo): Likewise.
1112         (Parameters.ComputeAndDefineParameterTypes): Likewise.
1113         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
1114         * support.cs (InternalParameters..ctor): Remove variant that takes
1115         a DeclSpace.
1116         * typemanager.cs (system_intptr_expr): New.
1117         (InitExpressionTypes): Initialize it.
1118
1119 2004-10-12  Chris Toshok  <toshok@ximian.com>
1120
1121         * cs-parser.jay: fix location for try_statement and catch_clause.
1122
1123 2004-10-07  Raja R Harinath  <rharinath@novell.com>
1124
1125         More DeclSpace.ResolveType avoidance.
1126         * decl.cs (MemberCore.InUnsafe): New property.
1127         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
1128         with newly created EmitContext.
1129         (FieldMember.Define): Likewise.
1130         * delegate.cs (Delegate.Define): Likewise.
1131         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
1132         only if normal name-lookup fails.
1133         (TypeExpr.DoResolve): Enable error-checking.
1134         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
1135         (SizeOf.DoResolve): Likewise.
1136         (ComposedCast.DoResolveAsTypeStep): Likewise.
1137         (StackAlloc.DoResolve): Likewise.
1138         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
1139         (Block.Unsafe): New property.
1140         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
1141         (Unsafe): Set 'unsafe' flag of contained block.
1142         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
1143         (Fixed.Resolve): Likewise.
1144         (Catch.Resolve): Likewise.
1145         (Using.ResolveLocalVariableDecls): Likewise.
1146         (Foreach.Resolve): Likewise.
1147
1148 2004-10-05  John Luke <john.luke@gmail.com>
1149
1150         * cs-parser.jay: add location to error CS0175
1151
1152 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
1153
1154         * ecore.cs (Expression.Constantity): Add support for turning null
1155         into a constant.
1156
1157         * const.cs (Const.Define): Allow constants to be reference types
1158         as long as the value is Null.
1159
1160 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
1161
1162         * namespace.cs (NamespaceEntry.Using): No matter which warning
1163         level is set, check if this namespace name has already been added.
1164
1165 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
1166
1167         * expression.cs: reftype [!=]= null should always use br[true,false].
1168         # 67410
1169
1170 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
1171
1172         Fix #67108
1173         * attribute.cs: Enum conversion moved to 
1174         GetAttributeArgumentExpression to be applied to the all
1175         expressions.
1176
1177 2004-10-01  Raja R Harinath  <rharinath@novell.com>
1178
1179         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
1180         * class.c (TypeContainer.DefineType): Flag error if
1181         base types aren't accessible due to access permissions.
1182         * decl.cs (DeclSpace.ResolveType): Move logic to
1183         Expression.ResolveAsTypeTerminal.
1184         (DeclSpace.ResolveTypeExpr): Thin layer over
1185         Expression.ResolveAsTypeTerminal.
1186         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
1187         Refactor code into NestedAccess.  Use it.
1188         (DeclSpace.NestedAccess): New.
1189         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
1190         argument to silence errors.  Check access permissions.
1191         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
1192         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
1193         (Cast.DoResolve): Likewise.
1194         (New.DoResolve): Likewise.
1195         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
1196         (TypeOf.DoResolve): Likewise.
1197
1198         * expression.cs (Invocation.BetterConversion): Return the Type of
1199         the better conversion.  Implement section 14.4.2.3 more faithfully.
1200         (Invocation.BetterFunction): Make boolean.  Make correspondence to
1201         section 14.4.2.2 explicit.
1202         (Invocation.OverloadResolve): Update.
1203         (Invocation): Remove is_base field.
1204         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
1205         (Invocation.Emit): Likewise.
1206
1207 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
1208
1209         * cs-parser.jay: Reverted 642 warning fix.
1210
1211 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
1212
1213         Fix bug #66615
1214         * decl.cs (FindMemberWithSameName): Indexer can have more than
1215         1 argument.
1216
1217 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
1218
1219         * expression.cs (LocalVariableReference.DoResolveLValue):
1220         Do not report warning 219 for out values.
1221         (EmptyExpression.Null): New member to avoid extra allocations.
1222
1223 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
1224
1225         * cs-parser.jay: Fix wrong warning 642 report.
1226
1227         * cs-tokenizer.cs (CheckNextToken): New helper;
1228         Inspect next character if is same as expected.
1229
1230 2004-09-23  Martin Baulig  <martin@ximian.com>
1231
1232         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
1233         (Convert.ImplicitReferenceConversionExists): Likewise.
1234
1235 2004-11-09  Raja R Harinath  <rharinath@novell.com>
1236
1237         * Makefile (DISTFILES): Comment out a few missing files.
1238
1239 2004-10-29  Raja R Harinath  <rharinath@novell.com>
1240
1241         * Makefile (bootstrap_libs,bootstrap_libfiles): New.
1242         (bootstrap-libs): New target.  Invokes the net_2_0_bootstrap profile.
1243         (gmcs.exe): Invoke bootstrap-libs.
1244         (clean-local): Clean the net_2_0_bootstrap profile too.
1245         (PROGRAM_INSTALL_DIR): New.
1246         (install-local): Use it.
1247
1248 2004-10-13  Martin Baulig  <martin@ximian.com>
1249
1250         * generic.cs (TypeManager.InflatedConstraints): New nested class.
1251         (TypeParameter.DefineType): If we're a method type parameter and
1252         that method is overriding something, "inflate" its constraints.
1253
1254 2004-10-12  Martin Baulig  <martin@ximian.com>
1255
1256         * expression.cs (MemberAccess.DoResolve): If we're a SimpleName
1257         and have type arguments, create and resolve a ConstructedType.
1258
1259 2004-10-12  Martin Baulig  <martin@ximian.com>
1260
1261         * decl.cs (MemberCache.FindMemberToOverride): Use
1262         TypeManager.IsEqual() to compare the parameters and Type.Equals()
1263         to compare the invocationType.
1264
1265         * typemanager.cs (TypeManager.IsEqual): Added support for arrays.
1266         When comparing two type parameters, only do the signature-only
1267         comparision for method type parameters.
1268
1269 2004-10-11  Martin Baulig  <martin@ximian.com>
1270
1271         * report.cs: Don't make --fatal abort on warnings, we have
1272         -warnaserror for that.
1273
1274 2004-10-11  Martin Baulig  <martin@ximian.com>
1275
1276         * typemanager.cs
1277         (TypeManager.IsEqualGenericType): Removed, use IsEqual() instead.
1278         (TypeManager.IsEqual): Call ourself recursively instead of using
1279         Type.IsEqual(). 
1280
1281 2004-10-11  Martin Baulig  <martin@ximian.com>
1282
1283         * class.cs (TypeContainer.DefineType): Only call TypeParameter.Define()
1284         on our own type parameters, not on the ones we inherit from a containing
1285         class.
1286
1287         * expression.cs (Invocation.InferType): Use `==', not `Equals()' for
1288         the comparision.
1289
1290         * generic.cs (TypeParameter.Define): We may only be called once.
1291
1292         * pending.cs (Pending.InterfaceMethod): Call TypeManager.Real_IsEqual()
1293         instead of TypeManager.IsEqual().
1294
1295 2004-09-28  Martin Baulig  <martin@ximian.com>
1296
1297         * generic.cs
1298         (GenericConstraints.EffectiveBaseClass): New public property.
1299         (TypeParameter.GenericConstraints): New public property.
1300         (ConstructedType.CheckConstraints): Improved.
1301
1302         * convert.cs (Convert.TypeParam_EffectiveBaseType): New private method.
1303         (Convert.TypeParameterConversion): New private method; use this in
1304         ImplicitReferenceConversion() and ImplicitReferenceConversionExists()
1305         for all conversions related to type parameters.
1306
1307 2004-09-24  Martin Baulig  <martin@ximian.com>
1308
1309         * convert.cs (Convert.ImplicitReferenceConversion): Added implicit
1310         type parameter conversions for type parameters which are known to
1311         be reference types.
1312
1313 2004-09-24  Martin Baulig  <martin@ximian.com>
1314
1315         * generic.cs (GenericConstraints): Added `IsReferenceType' and
1316         `IsValueType' properties.
1317
1318         * support.cs (ReflectionConstraints): Use
1319         Type.GetGenericParameterConstraints() instead of the old hack.
1320
1321 2004-09-24  Martin Baulig  <martin@ximian.com>
1322
1323         * generic.cs (GenericConstraints): Moved here and made it an
1324         abstract class.
1325
1326         * support.cs (GenericConstraints): Moved to generic.cs.
1327
1328 2004-09-24  Martin Baulig  <martin@ximian.com>
1329
1330         * support.cs
1331         (ReflectionConstraints): Un-nested this class and made it public.
1332
1333         * typemanager.cs
1334         (TypeManager.GetTypeParameterConstraints): New public method.
1335         (TypeManager.HasConstructorConstraint): Use the attributes.
1336
1337 2004-09-24  Martin Baulig  <martin@ximian.com>
1338
1339         * support.cs (GenericConstraints): Replaced `HasConstructor',
1340         `IsReferenceType' and `IsValueType' with `Attributes'.
1341         (ReflectionParameters.ReflectionConstraints): Removed the Create()
1342         method and made the .ctor public.
1343
1344         * generic.cs (Constraints.Attributes): New public property.
1345         (Constraints): Renamed `HasConstructor' -> `HasConstructorConstraint',
1346         `IsReferenceType' -> `HasReferenceTypeConstraint' and
1347         `IsValueType' -> `HasValueTypeConstraint'.
1348
1349 2004-09-23  Martin Baulig  <martin@ximian.com>
1350
1351         * generic.cs (Constraints): Reflect latest runtime changes.
1352
1353 2004-09-23  Martin Baulig  <martin@ximian.com>
1354
1355         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
1356         (Convert.ImplicitReferenceConversionExists): Likewise.
1357
1358 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
1359
1360         * class.cs (Operator.Define): Add error 448 and 559 report.
1361         
1362 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
1363
1364         * class.cs (MemberBase.IsTypePermitted): New protected
1365         method for checking error CS0610.
1366
1367 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
1368
1369         * class.cs (TypeContainer.HasExplicitLayout): New property
1370         Returns whether container has StructLayout attribute set Explicit.
1371         (FieldMember): New abstract class for consts and fields.
1372         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
1373         (Field): Reuse FieldMember.
1374
1375         * const.cs (Const): Reuse FieldMember.
1376
1377         * rootcontext.cs: EmitConstants call moved to class.
1378
1379 2004-09-22  Martin Baulig  <martin@ximian.com>
1380
1381         Marek and me just fixed one of our oldest bugs: #28562 :-)
1382
1383         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
1384
1385         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
1386         we're an EnumConstant, just return that.
1387         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
1388         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
1389         to get the value which'll actually be written into the attribute.
1390         However, we have to use GetValue() to access the attribute's value
1391         in the compiler.        
1392
1393 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
1394
1395         * constant.cs (Constant.IsNegative): New abstract property
1396         IsNegative.
1397
1398         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
1399         (StackAlloc.DoResolve): Reused IsNegative.
1400
1401 2004-09-22  Martin Baulig  <martin@ximian.com>
1402
1403         * typemanager.cs (TypeManager.LookupGenericTypeContainer): New
1404         public method; like LookupTypeContainer, but also works for
1405         generic instances.
1406
1407         * report.cs (Report.SymbolRelatedToPreviousError): Use
1408         TypeManager.LookupGenericTypeContainer().       
1409
1410 2004-09-22  Martin Baulig  <martin@ximian.com>
1411
1412         Thanks to Peter Sestoft for this bug report.
1413
1414         * expression.cs (Conditional): If both the `trueExpr' and the
1415         `falseExpr' is a NullLiteral, return a NullLiteral.
1416
1417 2004-09-22  Martin Baulig  <martin@ximian.com>
1418
1419         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
1420         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
1421         for the "get_Current" call.
1422
1423 2004-09-21  Martin Baulig  <martin@ximian.com>
1424
1425         * convert.cs (Convert.ImplicitReferenceConversion): When
1426         converting to an interface type, first check whether we're
1427         converting from a reference type.
1428
1429 2004-09-14  Martin Baulig  <martin@ximian.com>
1430
1431         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
1432
1433 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
1434
1435         Fixed bug #61902
1436         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
1437         called and is obsolete then this member suppress message
1438         when call is inside next [Obsolete] method or type.
1439
1440         * expression.cs: Use TestObsoleteMethodUsage member.
1441
1442 2004-09-14  Martin Baulig  <martin@ximian.com>
1443
1444         * genericparser.cs: Removed.
1445
1446 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
1447
1448         * class.cs (MethodCore.CheckBase): Fix bug #65757.
1449
1450 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
1451
1452         * attribute.cs (Attribute.Resolve): Add error 653 report.
1453
1454         * class.cs (Class.ApplyAttributeBuilder): Add error 641
1455         report.
1456         (Method.ApplyAttributeBuilder): Add error 685 report.
1457         (Operator.Define): Add error 564 report.
1458
1459         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
1460
1461         * expression.cs (Invocation.DoResolve): Add error
1462         245 and 250 report.
1463
1464         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
1465         error 674 report.
1466
1467 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
1468
1469         * class.cs (ConstructorInitializer.Resolve):
1470         Wrong error number (515->516).
1471
1472 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
1473
1474         * class.cs (Indexer.Define): Add error 631 report.
1475
1476 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
1477
1478         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
1479
1480 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
1481
1482         * expression.cs (Probe.DoResolve): Add error CS0241 report.
1483
1484 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
1485
1486         * cs-parser.jay: Added error CS0241 report.
1487
1488 2004-09-10  Raja R Harinath  <rharinath@novell.com>
1489
1490         * cs-parser.jay (fixed_statement): Introduce a scope for the
1491         declaration in the 'fixed' statement.
1492
1493 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
1494
1495         * cs-parser.jay: Added CS0230 error report.
1496
1497 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
1498
1499         * cs-parser.jay: Added errors CS0231 and CS0257 report.
1500
1501 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
1502
1503         * expression.cs (Argument.Resolve): Added error CS0192 and
1504         CS0199 report.
1505
1506 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
1507
1508         C# 2.0 #pragma warning feature
1509
1510         * cs-tokenizer.cs (PreProcessPragma): New method; 
1511         Handles #pragma directive.
1512
1513         * report.cs (WarningRegions): New class; Support
1514         class for #pragma warning directive. It tests whether
1515         warning is enabled for a given line.
1516
1517 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
1518
1519         * const.cs: Add more descriptive error report, tahnks to
1520         Sebastien. 
1521
1522 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
1523
1524         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
1525
1526 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
1527
1528         * expression.cs: Apply patch from Ben: Remove dead code from
1529         ArrayCreation, and remove the TurnintoConstant call in const.cs,
1530         as that code just threw an exception anwyays.
1531
1532         * const.cs: Remove the call to the turnintoconstant, for details
1533         see bug: #63144
1534         
1535         * literal.cs: The type of the null-literal is the null type;  So
1536         we use a placeholder type (literal.cs:System.Null, defined here)
1537         for it.
1538
1539         * expression.cs (Conditional.DoResolve): Remove some old code that
1540         is no longer needed, conversions have been fixed.
1541
1542         (ArrayCreationExpression.DoResolve): Return false if we fail to
1543         resolve the inner expression.
1544
1545 2004-09-07  Raja R Harinath  <rharinath@novell.com>
1546
1547         Fix test-290.cs.
1548         * cs-parser.jay (delegate_declaration): Record a delegate
1549         declaration as a type declaration.
1550         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
1551
1552 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
1553
1554         * parameter.cs: Do not crash if the type can not be resolved. 
1555
1556         * expression.cs: Report errors with unsafe pointers, fixes #64896
1557
1558 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
1559
1560         * expression.cs: Pointer arith always needs to do a conv.i
1561         if the operand is a long. fix 65320
1562
1563 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
1564
1565         Fixed cs0619-37.cs, cs0619-38.cs
1566
1567         * enum.cs (GetObsoleteAttribute): Removed.
1568
1569         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
1570         on Enum member is double staged. The first is tested member
1571         and then enum.
1572
1573 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
1574
1575         Fixed #56986, #63631, #65231
1576
1577         * class.cs: (TypeContainer.AddToMemberContainer): New method,
1578         adds member to name container.
1579         (TypeContainer.AddToTypeContainer): New method, adds type to
1580         name container.
1581         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
1582         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
1583         AddOperator): Simplified by reusing AddToMemberContainer.
1584         (TypeContainer.UserDefinedStaticConstructor): Changed to property
1585         instead of field.
1586         (Method.CheckForDuplications): Fixed implementation to test all
1587         possibilities.
1588         (MemberBase): Detection whether member is explicit interface
1589         implementation is now in constructor.
1590         (MemberBase.UpdateMemberName): Handles IndexerName.
1591         (Accessor): Changed to keep also location information.
1592         (AbstractPropertyEventMethod): Is derived from MemberCore.
1593         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
1594         will be emited or not.
1595         (PropertyBase.AreAccessorsDuplicateImplementation):
1596         Tests whether accessors are not in collision with some method.
1597         (Operator): Is derived from MethodCore to simplify common
1598         operations.
1599
1600         * decl.cs (Flags.TestMethodDuplication): Test for duplication
1601         must be performed.
1602         (DeclSpace.AddToContainer): Adds the member to defined_names
1603         table. It tests for duplications and enclosing name conflicts.
1604
1605         * enum.cs (EnumMember): Clean up to reuse the base structures
1606
1607 2004-09-03  Martin Baulig  <martin@ximian.com>
1608
1609         Merged latest changes into gmcs.  Please keep this comment in
1610         here, it makes it easier for me to see what changed in MCS since
1611         the last time I merged.
1612
1613 2004-09-03  Martin Baulig  <martin@ximian.com>
1614
1615         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
1616         into TypeContainer, to make partial classes work again.
1617
1618 2004-09-03  Martin Baulig  <martin@ximian.com>
1619
1620         * rootcontext.cs (RootContext.V2): Removed.
1621
1622 2004-03-23  Martin Baulig  <martin@ximian.com>
1623
1624         * expression.cs (Invocation.OverloadResolve): Added `bool
1625         may_fail' argument and use it instead of the Location.IsNull() hack.
1626
1627 2004-09-09  Martin Baulig  <martin@ximian.com>
1628
1629         * cs-parser.jay (namespace_declaration): Fixed CS0134 reporting.
1630
1631 2004-09-09  Martin Baulig  <martin@ximian.com>
1632
1633         * generic.cs (TypeParameter.DefineType): Added support for
1634         explicit interface methods.
1635
1636 2004-09-09  Martin Baulig  <martin@ximian.com>
1637
1638         * README.Changes: New document.  Started to list important changes
1639         between MCS and GMCS here.
1640
1641 2004-09-08  Martin Baulig  <martin@ximian.com>
1642
1643         * class.cs
1644         (TypeContainer.CheckRecursiveDefinition): New protected method.
1645         (TypeContainer.DefineType): Move the CS0146 check into
1646         CheckRecursiveDefinition().     
1647
1648 2004-09-06  Martin Baulig  <martin@ximian.com>
1649
1650         * generic.cs (ConstructedType.CheckConstraints): Allow builtin
1651         types for the constructor constraint.
1652
1653 2004-09-03  Martin Baulig  <martin@ximian.com>
1654
1655         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
1656         into TypeContainer, to make partial classes work again.
1657
1658 2004-09-03  Martin Baulig  <martin@ximian.com>
1659
1660         * rootcontext.cs (RootContext.V2): Removed.
1661
1662 2004-03-23  Martin Baulig  <martin@ximian.com>
1663
1664         * expression.cs (Invocation.OverloadResolve): Added `bool
1665         may_fail' argument and use it instead of the Location.IsNull() hack.
1666
1667 2004-09-03  Martin Baulig  <martin@ximian.com>
1668
1669         Merged latest changes into gmcs.  Please keep this comment in
1670         here, it makes it easier for me to see what changed in MCS since
1671         the last time I merged.
1672
1673 2004-09-03  Raja R Harinath  <rharinath@novell.com>
1674
1675         Fix #61128.
1676         * expression.cs (BetterConversion): Don't allow either conversion 
1677         to be null.  Remove redundant implicit conversion test when 'q ==
1678         null' -- when this function is invoked, we already know that the
1679         implicit conversion exists.
1680         (BetterFunction): Assume that 'best' is non-null.  Remove
1681         redundant reimplementation of IsApplicable when 'best' is null.
1682         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
1683         number of arguments.
1684         (IsAncestralType): Extract from OverloadResolve.
1685         (OverloadResolve): Make robust to the MethodGroupExpr being
1686         unsorted.  Implement all the logic of Section 14.5.5.1, and
1687         support overloading of methods from multiple applicable types.
1688         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
1689
1690         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
1691         (RealError, Warning): Append type of report to related symbol.
1692
1693 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
1694
1695         * enum.cs: Fixed CLS-Compliance checks for enum members.
1696         Error tests cs3008-8.cs, cs3014-8.cs
1697
1698 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
1699
1700         Fixed bug #62342, #63102
1701         * class.cs: ImplementIndexer uses member.IsExplicitImpl
1702         like ImplementMethod.
1703
1704 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
1705
1706         * attribute.cs (Attribute.GetAttributeArgumentExpression):
1707         Fixed bug #65170.
1708
1709 2004-09-02  Martin Baulig  <martin@ximian.com>
1710
1711         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
1712         TypeManager.GetArgumentTypes() rather than calling GetParameters()
1713         on the MethodBase.
1714
1715 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
1716
1717         C# 2.0 Static classes implemented
1718
1719         * class.cs (TypeContainer): instance_constructors,
1720         initialized_fields, initialized_static_fields,
1721         default_constructor, base_inteface_types are protected to be
1722         accessible from StaticClass.
1723         (TypeContainer.DefineDefaultConstructor): New virtual method
1724         for custom default constructor generating
1725         (StaticClass): New class to handle "Static classes" feature.
1726
1727         * cs-parser.jay: Handle static keyword on class like instance
1728         of StaticClass.
1729
1730         * driver.cs: Added "/langversion" command line switch with two
1731         options (iso-1, default).
1732
1733 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
1734
1735         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
1736
1737 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
1738
1739         * delegate.cs: Style.
1740
1741 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
1742
1743         * delegate.cs: Add seperate instance expr field for miguel.
1744
1745 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
1746
1747         * PointerArithmetic (Resolve): make sure we are not doing
1748         pointer arith on void*. Also, make sure we are resolved
1749         by not setting eclass until resolve.
1750
1751         All callers: Make sure that PointerArithmetic gets resolved.
1752
1753 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
1754
1755         * ArrayCreation (LookupType): If the type does not resolve 
1756         to an array, give an error.
1757
1758 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
1759
1760         * statement.cs (Try.Resolve): Fixed bug #64222
1761
1762 2004-08-27  Martin Baulig  <martin@ximian.com>
1763
1764         * class.cs
1765         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
1766         crash here.     
1767
1768 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
1769
1770         * ecore.cs (Constantify): Get underlying type via
1771         System.Enum.GetUnderlyingType to avoid StackOverflow on the
1772         Windows in special cases.
1773
1774 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
1775
1776         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
1777         for obtaining also private methods.
1778         (GetRemoveMethod): Used GetRemoveMethod (true)
1779         for obtaining also private methods.
1780
1781 2004-09-02  Martin Baulig  <martin@ximian.com>
1782
1783         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
1784         TypeManager.GetArgumentTypes() rather than calling GetParameters()
1785         on the MethodBase.
1786
1787 2004-08-27  Martin Baulig  <martin@ximian.com>
1788
1789         * class.cs
1790         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
1791         crash here.     
1792
1793 2004-08-25  Martin Baulig  <martin@ximian.com>
1794
1795         * support.cs (ReflectionParameters..ctor): If this is a generic
1796         method, retrieve and store its type parameters.
1797         (InternalParameters..ctor): Added `TypeParameter[]' argument.
1798         (ReflectionParameters.GenericConstraints): The argument specifies
1799         the type parameter, not the method parameter.
1800         (InternalParameters.GenericConstraints): Likewise.
1801
1802         * generic.cs (TypeParameter.DefineType): Correctly handle
1803         constraints wrt. generic methods in interfaces and their
1804         implementations.        
1805
1806 2004-08-24  Martin Baulig  <martin@ximian.com>
1807
1808         * generic.cs (TypeParameter.IsSubclassOf): New public method.
1809         (Constraints.IsSubclassOf): New internal method.
1810
1811         * typemanager.cs (TypeManager.FindMembers): Added special support
1812         for GenericTypeParameterBuilder's.      
1813         (TypeManager.IsSubclassOf, IsFamilyAccessible): Added support for
1814         type parameters.
1815
1816 2004-08-24  Martin Baulig  <martin@ximian.com>
1817
1818         * typemanager.cs
1819         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
1820         this for accessibility checks.
1821         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
1822         IsNestedFamilyAccessible.
1823         (TypeManager.IsSubclassOf): New method, do what the name actually
1824         says.   
1825
1826 2004-08-24  Martin Baulig  <martin@ximian.com>
1827
1828         * expression.cs (MemberAccess.DoResolve): When resolving ourselves
1829         as a SimpleName, include the generic arity.
1830
1831 2004-08-24  Martin Baulig  <martin@ximian.com>
1832
1833         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
1834         MethodAttributes.HideBySig for operators.
1835
1836 2004-08-23  Martin Baulig  <martin@ximian.com>
1837
1838         Back to the old error reporting system :-)
1839
1840         * report.cs (Message): Removed.
1841         (Report.MessageData, ErrorData, WarningData): Removed.
1842         (Report.Error, Warning): Back to the old system.
1843
1844 2004-08-23  Martin Baulig  <martin@ximian.com>
1845
1846         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
1847
1848         * class.cs (TypeContainer.ParentContainer): New public virtual
1849         method; replaces the explicit interface implementation.
1850         (ClassPart.ParentContainer): Override.
1851
1852 2004-08-23  Martin Baulig  <martin@ximian.com>
1853
1854         * statement.cs (Switch): Added support for constant switches; see
1855         #59428 or test-285.cs.
1856
1857 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
1858
1859         Fixed bug #62740.
1860         * statement.cs (GetEnumeratorFilter): Removed useless
1861         logic because C# specs is strict. GetEnumerator must be
1862         public.
1863
1864 2004-08-22  Martin Baulig  <martin@ximian.com>
1865
1866         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
1867         a switch and may break, reset the barrier.  Fixes #59867.
1868
1869 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
1870
1871         CLS-Compliance speed up (~5% for corlib)
1872
1873         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
1874         New method. Tests container for CLS-Compliant names
1875
1876         * class.cs (TypeContainer.VerifyClsName): New method.
1877         Checks whether container name is CLS Compliant.
1878         (Constructor): Implements IMethodData.
1879
1880         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
1881         low-case table for CLS Compliance test.
1882         (MemberCache.VerifyClsParameterConflict): New method.
1883         Checks method parameters for CS3006 error.
1884
1885         * enum.cs (EnumMember): Is derived from MemberCore.
1886         (Enum.VerifyClsName): Optimized for better performance.
1887
1888 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
1889
1890         * report.cs: Renamed Error_T to Error and changed all
1891         references.
1892
1893 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
1894
1895         * class.cs (TypeContainer.IndexerArrayList): New inner class
1896         container for indexers.
1897         (TypeContainer.DefaultIndexerName): New constant for default
1898         indexer name. Replaced all "Item" with this constant.
1899         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
1900
1901         * typemanager.cs (TypeManager.default_member_ctor): Cache here
1902         DefaultMemberAttribute constructor.
1903
1904 2004-08-05  Martin Baulig  <martin@ximian.com>
1905
1906         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
1907         Fix bug #59429.
1908
1909 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
1910
1911         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
1912         multi platforms problem.
1913
1914         * compiler.csproj: Included shared files.
1915
1916 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
1917
1918         Fix bug 60333, 55971 in the more general way
1919         * attribute.cs (Attribute.GetAttributeArgumentExpression):
1920         Added arg_type argument for constant conversion.
1921         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
1922
1923 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
1924
1925         Fix bug #59760
1926         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
1927         OperatorArrayList, MethodCoreArrayList for typecontainer
1928         containers. Changed class member types to these new types.
1929         (MethodArrayList.DefineMembers): Added test for CS0659.
1930
1931 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
1932
1933         * cfold.cs: Synchronize the folding with the code in expression.cs
1934         Binary.DoNumericPromotions for uint operands.
1935
1936         * attribute.cs: Revert patch from Raja, it introduced a regression
1937         while building Blam-1.2.1 (hard to isolate a test case).
1938
1939 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
1940
1941         Fix for #55382
1942         * class.cs:
1943         (TypeContainer.Define): Renamed to DefineContainerMembers because of
1944         name collision.
1945         (MethodCore.parent_method): New member. The method we're overriding
1946         if this is an override method.
1947         (MethodCore.CheckBase): Moved from Method class and made common.
1948         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
1949         private.
1950         (MethodCore.CheckForDuplications): New abstract method. For custom
1951         member duplication search in a container
1952         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
1953         method and its return type.
1954         (Event.conflict_symbol): New member. Symbol with same name in the
1955         parent class.
1956
1957         * decl.cs:
1958         (MemberCache.FindMemberWithSameName): New method. The method
1959         is looking for conflict with inherited symbols.
1960
1961 2004-08-04  Martin Baulig  <martin@ximian.com>
1962
1963         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
1964
1965         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
1966
1967 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
1968
1969         * report.cs (Message): New enum for better error, warning reference in
1970         the code.
1971         (MessageData): New inner abstract class. It generally handles printing of
1972         error and warning messages.
1973         Removed unused Error, Warning, Message methods.
1974
1975 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
1976
1977         Fix for cs0592-8.cs test
1978         * attribute.cs
1979         (Attributable.ValidAttributeTargets): Made public.
1980         (Attribute.ExplicitTarget): New member for explicit target value.
1981         (Attribute.CheckTargets): Now we translate explicit attribute
1982         target to Target here.
1983
1984 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
1985
1986         * ecore.cs (MethodGroupExpr): new IsBase property.
1987
1988         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
1989
1990         * delegate.cs (DelegateCreation): store a MethodGroupExpr
1991         rather than an instance expr.
1992
1993         (DelegateCreation.Emit): Use the method group rather than
1994         the instance expression. Also, if you have base.Foo as the
1995         method for a delegate, make sure to emit ldftn, not ldftnvirt.
1996
1997         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
1998
1999         (NewDelegate.DoResolve): Only check for the existance of Invoke
2000         if the method is going to be needed. Use MethodGroupExpr.
2001
2002         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
2003
2004         * expression.cs: For pointer arith., make sure to use
2005         the size of the type, not the size of the pointer to
2006         the type.
2007
2008 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
2009
2010         Fix for #60722
2011         * class.cs (Class): Added error CS0502 test.
2012
2013 2004-08-03  John Luke  <jluke@cfl.rr.com>
2014             Raja R Harinath  <rharinath@novell.com>
2015
2016         Fix for #60997.
2017         * attribute.cs (Attribute.complained_before): New flag.
2018         (Attribute.ResolveType, Attribute.Resolve),
2019         (Attribute.DefinePInvokeMethod): Set it.
2020         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
2021         
2022 2004-08-03  Martin Baulig  <martin@ximian.com>
2023
2024         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
2025         use a user-defined operator; we still need to do numeric
2026         promotions in case one argument is a builtin type and the other
2027         one has an implicit conversion to that type.  Fixes #62322.
2028
2029 2004-08-18  Martin Baulig  <martin@ximian.com>
2030
2031         * class.cs (Method.Define): Use the correct method name when
2032         creating the MethodBuilder for a generic method.
2033
2034 2004-08-17  Martin Baulig  <martin@ximian.com>
2035
2036         * generic.cs (Constraints): Support type parameter constraints.
2037
2038 2004-08-16  Martin Baulig  <martin@ximian.com>
2039
2040         * cs-tokenizer.cs (Tokenizer.TypeOfParsing): New public property.
2041         (Token.GENERIC_DIMENSION): New token; this is returned if we
2042         encounter an unbound generic type in a typeof() expression.
2043
2044         * cs-parser.jay (opt_type_argument_list): Added GENERIC_DIMENSION;
2045         this token is only generated while parsing a typeof() expression.
2046         (typeof_expression): Removed the old unbound_type hack.
2047
2048         * generic.cs (TypeArguments.IsUnbound): New public property.
2049
2050         * decl.cs (MemberName): Added support for unbound types.
2051
2052 2004-08-14  Martin Baulig  <martin@ximian.com>
2053
2054         * typemanager.cs
2055         (TypeManager.IsEqualGenericInstance): New static method.
2056         (TypeManager.IsSubclassOrNestedChildOf, IsSubclassOf): This is
2057         just used to check accessibility, so follow the rules of 26.1.6.        
2058
2059         * expression.cs (MemberAccess.ResolveAsTypeStep): Return a
2060         ConstructedType instead of a TypeExpression if we have type arguments.
2061
2062         * cs-parser.jay (typeof_expression): Support unbound generic types.
2063
2064         * ecore.cs (UnboundTypeExpression): New public class.
2065
2066 2004-08-12  Martin Baulig  <martin@ximian.com>
2067
2068         * typemanager.cs (TypeManager.IsNestedChildOf): Use
2069         TypeManager.IsEqual() rather than `=='.
2070
2071         * decl.cs (DeclSpace.CheckAccessLevel): Use `tb.FullName' for
2072         generic instances as well.
2073
2074 2004-08-12  Martin Baulig  <martin@ximian.com>
2075
2076         * expression.cs (Invocation.InferType): We can only infer method
2077         type parameters.  Fixes #62647.
2078
2079 2004-08-11  Martin Baulig  <martin@ximian.com>
2080
2081         * class.cs (TypeContainer.DefineType): Create the TypeBuilder
2082         before resolving the base classes.
2083
2084 2004-08-06 Gonzalo Paniagua Javier <gonzalo@ximian.com>
2085
2086         * Makefile: install .mdb file too.
2087
2088 2004-08-05  Martin Baulig  <martin@ximian.com>
2089
2090         * ecore.cs (FieldExpr.DoResolveLValue): If we're resolving a field
2091         initializer, the current type is just the TypeBuilder, not the
2092         instantiated generic type.
2093         (FieldExpr.IsFieldInitializer): New public property.
2094
2095 2004-08-04  Martin Baulig  <martin@ximian.com>
2096
2097         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
2098
2099         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
2100
2101 2004-08-03  Martin Baulig  <martin@ximian.com>
2102
2103         * class.cs (MethodData.Define): If we're an explicit
2104         implementation, remove the generic arity from the type name.
2105
2106 2004-08-03  Martin Baulig  <martin@ximian.com>
2107
2108         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
2109         use a user-defined operator; we still need to do numeric
2110         promotions in case one argument is a builtin type and the other
2111         one has an implicit conversion to that type.  Fixes #62322.
2112
2113 2004-08-02  Martin Baulig  <martin@ximian.com>
2114
2115         * class.cs (TypeContainer.ifaces): Make this a `Type[]', not a
2116         `TypeExpr[]' array.
2117         (TypeContainer.GetClassBases): Return the unexpanded list of
2118         interfaces; we expand them later.
2119         (TypeContainer.DefineType): After creating the TypeBuilder, call
2120         TypeManager.ExpandInterfaces() to get an expanded and resolved
2121         list of interfaces.
2122
2123         * ecore.cs (TypeExpr.GetInterfaces): Removed
2124
2125         * generics.cs (Constraints.InterfaceConstraints): Remove.
2126         (TypeParameter.DefineType): Call TypeManager.RegisterBuilder() to
2127         register the interface constraints.
2128
2129         * typemanager.cs
2130         (TypeManager.AddUserType): Removed the `ifaces' argument.
2131         (TypeManager.AddTypeParameter): Likewise.
2132         (TypeManager.AddUserInterface): Removed, was unused.
2133         (TypeManager.RegisterBuilder): Take a `Type[]' instead of a
2134         `TypeExpr[]' array for the interfaces.
2135         (TypeManager.ExpandInterfaces): Call this after the TypeBuilder
2136         has been defined, returns a list of the resolved interfaces types.
2137         (TypeManager.GetInterfaces): Return a `Type[]', not a `TypeExpr[]'.
2138         (TypeManager.GetExplicitInterfaces): Likewise.  
2139
2140 2004-08-02  Martin Baulig  <martin@ximian.com>
2141
2142         * expression.cs (Invocation.EmitCall): If we're invoking a method
2143         on a type parameter, use the new `Constrained' prefix opcode.
2144
2145 2004-08-02  Martin Baulig  <martin@ximian.com>
2146
2147         * statement.cs (LocalInfo.Flags): Added `IsThis'.
2148         (LocalInfo.IsThis): New public property.
2149         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
2150
2151 2004-08-01  Martin Baulig  <martin@ximian.com>
2152
2153         * class.cs (TypeContainer.GetClassBases): Don't set the default
2154         here since we may get called from GetPartialBases().
2155         (TypeContainer.DefineType): If GetClassBases() didn't return a
2156         parent, use the default one.
2157
2158 2004-07-30  Martin Baulig  <martin@ximian.com>
2159
2160         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
2161
2162         * class.cs (SourceMethod): New public class, derive from the
2163         symbol writer's ISourceMethod.
2164         (Method): Use the new symbol writer API.
2165
2166         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
2167         as argument and use the new symbol writer.
2168
2169         * location.cs
2170         (SourceFile): Implement the symbol writer's ISourceFile.
2171         (Location.SymbolDocument): Removed.
2172         (Location.SourceFile): New public property.
2173
2174         * symbolwriter.cs: Use the new symbol writer API.
2175
2176 2004-07-30  Raja R Harinath  <rharinath@novell.com>
2177
2178         * Makefile (install-local): Remove.  Functionality moved to
2179         executable.make.
2180
2181 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
2182
2183         * Makefile: Install mcs.exe.config file together with mcs.exe.
2184         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
2185         correct runtime version.
2186         
2187 2004-07-25  Martin Baulig  <martin@ximian.com>
2188
2189         * class.cs
2190         (TypeContainer.RegisterOrder): Removed, this was unused.
2191         (TypeContainer, interface_order): Removed.
2192         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
2193         TypeContainer as argument since we can also be called with a
2194         `PartialContainer' for a partial class/struct/interface.
2195         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
2196         of checking whether we're an `Interface' - we could be a
2197         `PartialContainer'.
2198         (PartialContainer.Register): Override; call
2199         AddClass()/AddStruct()/AddInterface() on our parent.
2200
2201         * cs-parser.jay (interface_member_declaration): Add things to the
2202         `current_container', not the `current_class'.
2203
2204         * rootcontext.cs (RegisterOrder): The overloaded version which
2205         takes an `Interface' was unused, removed.
2206
2207         * typemanager.cs (TypeManager.LookupInterface): Return a
2208         `TypeContainer', not an `Interface'.
2209         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
2210         contain a `PartialContainer' for an interface, so check it's
2211         `Kind' to figure out what it is.
2212
2213 2004-07-25  Martin Baulig  <martin@ximian.com>
2214
2215         * class.cs (Class.DefaultTypeAttributes): New public constant.
2216         (Struct.DefaultTypeAttributes): Likewise.
2217         (Interface.DefaultTypeAttributes): Likewise.
2218         (PartialContainer.TypeAttr): Override this and add the
2219         DefaultTypeAttributes.
2220
2221 2004-07-25  Martin Baulig  <martin@ximian.com>
2222
2223         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
2224         we can just use the `Parent' field instead.
2225
2226 2004-07-25  Martin Baulig  <martin@ximian.com>
2227
2228         * class.cs (TypeContainer.Emit): Renamed to EmitType().
2229
2230 2004-07-25  Martin Baulig  <martin@ximian.com>
2231
2232         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
2233         our parts before defining any methods.
2234         (TypeContainer.VerifyImplements): Make this virtual.
2235         (ClassPart.VerifyImplements): Override and call VerifyImplements()
2236         on our PartialContainer.
2237
2238 2004-07-25  Martin Baulig  <martin@ximian.com>
2239
2240         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
2241
2242         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
2243         argument, we can just use the `Parent' field instead.
2244
2245         * class.cs
2246         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
2247         (MemberBase.DoDefine): Likewise.
2248
2249 2004-07-24  Martin Baulig  <martin@ximian.com>
2250
2251         * decl.cs (MemberCore.Parent): New public field.
2252         (DeclSpace.Parent): Moved to MemberCore.
2253
2254         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
2255         (MemberBase.ctor): Added TypeContainer argument, pass it to our
2256         parent's .ctor.
2257         (FieldBase, Field, Operator): Likewise.
2258         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
2259         (EventField, Event): Likewise.
2260
2261 2004-07-23  Martin Baulig  <martin@ximian.com>
2262
2263         * class.cs (PartialContainer): New public class.
2264         (ClassPart): New public class.
2265         (TypeContainer): Added support for partial classes.
2266         (TypeContainer.GetClassBases): Splitted some of the functionality
2267         out into GetNormalBases() and GetPartialBases().
2268
2269         * cs-tokenizer.cs (Token.PARTIAL): New token.
2270         (Tokenizer.consume_identifier): Added some hacks to recognize
2271         `partial', but only if it's immediately followed by `class',
2272         `struct' or `interface'.
2273
2274         * cs-parser.jay: Added support for partial clases.
2275
2276 2004-07-23  Martin Baulig  <martin@ximian.com>
2277
2278         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
2279         a `DeclSpace' and also made it readonly.
2280         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
2281         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
2282         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
2283
2284         * cs-parser.jay: Pass the `current_class', not the
2285         `current_container' (at the moment, this is still the same thing)
2286         to a new Method, Property, Event, Indexer or Constructor.
2287
2288 2004-07-23  Martin Baulig  <martin@ximian.com>
2289
2290         * cs-parser.jay (CSharpParser): Added a new `current_class' field
2291         and removed the `current_interface' one.
2292         (struct_declaration, class_declaration, interface_declaration):
2293         Set `current_class' to the newly created class/struct/interface;
2294         set their `Bases' and call Register() before parsing their body.
2295
2296 2004-07-23  Martin Baulig  <martin@ximian.com>
2297
2298         * class.cs (Kind): New public enum.
2299         (TypeContainer): Made this class abstract.
2300         (TypeContainer.Kind): New public readonly field.
2301         (TypeContainer.CheckDef): New public method; moved here from
2302         cs-parser.jay.
2303         (TypeContainer.Register): New public abstract method.
2304         (TypeContainer.GetPendingImplementations): New public abstract
2305         method.
2306         (TypeContainer.GetClassBases): Removed the `is_class' and
2307         `is_iface' parameters.
2308         (TypeContainer.DefineNestedTypes): Formerly known as
2309         DoDefineType().
2310         (ClassOrStruct): Made this class abstract.
2311
2312         * tree.cs (RootTypes): New public type. 
2313
2314 2004-07-20  Martin Baulig  <martin@ximian.com>
2315
2316         * tree.cs (Tree.RecordNamespace): Removed.
2317         (Tree.Namespaces): Removed.
2318
2319         * rootcontext.cs (RootContext.IsNamespace): Removed.
2320
2321         * cs-parser.jay (namespace_declaration): Just create a new
2322         NamespaceEntry here.
2323
2324 2004-07-21  Lluis Sanchez Gual  <lluis@novell.com>
2325
2326         * Makefile: Install gmcs.exe.config file together with gmcs.exe.
2327         * gmcs.exe.config: Renamed from mcs.exe.config. Added supportedRuntime
2328         entry to make sure it runs in the correct runtime version.
2329         
2330 2004-07-18  Martin Baulig  <martin@ximian.com>
2331
2332         * generic.cs (ConstructedType.CheckConstraints): Improved
2333         constraints checking.
2334
2335 2004-07-18  Martin Baulig  <martin@ximian.com>
2336
2337         * expression.cs (Invocation.BetterMethod): Call
2338         TypeManager.TypeToCoreType() on all types and removed my previous
2339         hack; we're already doig the right thing here.
2340
2341 2004-07-17  Martin Baulig  <martin@ximian.com>
2342
2343         * decl.cs (MemberName.MakeName): Create the "class`1" names here.
2344
2345 2004-07-16  Martin Baulig  <martin@ximian.com>
2346
2347         * iterators.cs: Added generics support.
2348
2349 2004-07-16  Martin Baulig  <martin@ximian.com>
2350
2351         * iterators.cs: Rewrote this.  We're now using one single Proxy
2352         class for both the IEnumerable and the IEnumerator interface and
2353         `Iterator' derives from Class so we can use the high-level API.
2354
2355         * class.cs (TypeContainer.AddIterator): New method.
2356         (TypeContainer.DoDefineType): New protected virtual method, which
2357         is called from DefineType().
2358         (TypeContainer.DoDefineMembers): Call DefineType() and
2359         DefineMembers() on all our iterators.
2360         (TypeContainer.Emit): Call Emit() on all our iterators.
2361         (TypeContainer.CloseType): Call CloseType() on all our iterators.
2362
2363         * codegen.cs (EmitContext.CurrentIterator): New public field.
2364
2365 2004-07-15  Martin Baulig  <martin@ximian.com>
2366
2367         * typemanager.cs
2368         (TypeManager.not_supported_exception_type): New type.   
2369
2370 2004-07-14  Martin Baulig  <martin@ximian.com>
2371
2372         * typemanager.cs
2373         (TypeManager.generic_ienumerable_type): New type.
2374         (TypeManager.generic_ienumerator_type): New type.
2375
2376         * rootcontext.cs
2377         (RootContext.interfaces_first_stage): Added
2378         "System.Collections.Generic.IEnumerator`1" and
2379         "System.Collections.Generic.IEnumerable`1".     
2380
2381 2004-07-14  Martin Baulig  <martin@ximian.com>
2382
2383         * iterators.cs: Use real error numbers.
2384
2385 2004-07-14  Martin Baulig  <martin@ximian.com>
2386
2387         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
2388         requires this to be a System.Collection.IEnumerable and not a
2389         class implementing that interface.
2390         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
2391
2392 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
2393
2394         * class.cs: Fixed previous fix, it broke some error tests.
2395
2396 2004-07-12  Martin Baulig  <martin@ximian.com>
2397
2398         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
2399         Fixes #61293.
2400
2401 2004-07-14  Martin Baulig  <martin@ximian.com>
2402
2403         * decl.cs, expression.cs, generic.cs: Use a backqoute (`) and not
2404         an exclamation mark (!) for the generic arity to reflect the
2405         latest spec changes; ie. use "System.Collections.Generic.IList`1".
2406
2407 2004-07-13  Martin Baulig  <martin@ximian.com>
2408
2409         * cs-tokenizer.cs (Tokenizer.parse_less_than): Allow array rank
2410         specifiers being part of a type argument.
2411
2412 2004-07-13  Martin Baulig  <martin@ximian.com>
2413
2414         * expression.cs (MemberAccess.ResolveAsTypeStep): Use the full `!'
2415         name for generic types.
2416
2417 2004-07-13  Martin Baulig  <martin@ximian.com>
2418
2419         * assign.cs (Assign.DoResolve): Moved the CS0131 check up a little
2420         bit to fix #60119.
2421
2422 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
2423
2424         * assign.cs (LocalTemporary): Add new argument: is_address,If
2425         `is_address' is true, then the value that we store is the address
2426         to the real value, and not the value itself.
2427         
2428         * ecore.cs (PropertyExpr): use the new local temporary
2429         stuff to allow us to handle X.Y += z (where X is a struct)
2430
2431 2004-07-08  Martin Baulig  <martin@ximian.com>
2432
2433         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
2434         not always return, just like we're doing in Using.Resolve().
2435
2436 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
2437
2438         * cs-parser.jay (fixed_statement): flag this as Pinned.
2439
2440 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
2441
2442         * typemanager.cs (TypeManager): Removed MakePinned method, this
2443         mechanism is replaced with the .NET 2.x compatible mechanism of
2444         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
2445
2446         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
2447         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
2448         `IsFixed' property which has a different meaning.
2449
2450 2004-07-02  Raja R Harinath  <rharinath@novell.com>
2451
2452         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
2453         visible from inside a nested class, not just the names of the
2454         immediately enclosing class.
2455         Fix for bug #60730.
2456
2457 2004-06-24  Raja R Harinath  <rharinath@novell.com>
2458
2459         * expression.cs (BetterConversion): Remove buggy special-case
2460         handling of "implicit constant expression conversions".  At this
2461         point, we already know that the conversion is possible -- we're
2462         only checking to see which is better.
2463
2464 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
2465
2466         * cs-parser.jay: Added error CS0210 test.
2467
2468 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
2469
2470         * cs-parser.jay: Added error CS0134 test.
2471
2472 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
2473
2474         Fix bug #52507
2475         * cs-parser.jay: Added error CS0145 test.
2476
2477 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
2478
2479         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
2480
2481 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
2482         
2483         * expression.cs (StackAlloc.Resolve): The argument may not
2484         be a constant; deal with this case.
2485         
2486 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
2487
2488         * attribute.cs (IndexerName_GetIndexerName): Renamed to
2489         GetIndexerAttributeValue.
2490         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
2491
2492         * class.cs (Indexer.Define): Added error tests for CS0415,
2493         CS0609.
2494
2495 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
2496
2497         * attribute.cs (Attribute.Resolve): Keep field code in sync with
2498         property code.
2499
2500 2004-06-23  Martin Baulig  <martin@ximian.com>
2501
2502         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
2503         neither return nor throw, reset the barrier as well.  Fixes #60457.
2504
2505 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
2506
2507         * class.cs : EventAttributes is now set to None by default.
2508           This fixes bug #60459.
2509
2510 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
2511
2512         Fix bug #60219
2513         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
2514         Don't throw exception but return null (it's sufficient now).
2515
2516 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
2517
2518         * typemanager.cs (GetArgumentTypes): Faster implementation.
2519
2520 2004-06-18  Martin Baulig  <martin@ximian.com>
2521
2522         * attribute.cs (Attribute.Resolve): Check whether we're an
2523         EmptyCast which a Constant child.  Fixes #60333.
2524
2525 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
2526
2527         * statement.cs (EmitCollectionForeach): Account for the fact that
2528         not all valuetypes are in areas which we can take the address of.
2529         For these variables, we store to a temporary variable. Also, make
2530         sure that we dont emit a `callvirt' on a valuetype method.
2531
2532 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
2533
2534         * expression.cs (StackAlloc.DoReSolve): Added test for
2535         negative parameter (CS0247).
2536
2537 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
2538
2539         Fix bug #59792
2540         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
2541
2542 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
2543
2544         Fix bug #59781
2545         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
2546         ulong.
2547
2548 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
2549
2550         Fix bug #58254 & cs1555.cs, cs1556.cs
2551         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
2552
2553 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
2554
2555         * cs-parser.jay: Added error CS1669 test for indexers.
2556
2557 2004-06-18  Martin Baulig  <martin@ximian.com>
2558
2559         * generics.cs (GenericMethod.ctor): Don't take an Attributes
2560         argument.  Fixes #60441.
2561
2562 2004-06-16  Ben Maurer  <bmaurer@ximian.com>
2563         * ecore.cs (MethodGroupExpr.Name): Revert Martin's patch.
2564         The name needs to have the actual name of the method in order
2565         for other tests (such as the one in OverloadResolve for Invoke
2566         on a delegate) to work. As well, it does not really help
2567         error reporting because the method group had multiple methods.
2568         * Makefile: Remove MCS_DEBUG, you can enable with the DEBUG_FLAGS.
2569         Make profiling work.
2570         
2571 2004-06-13  Martin Baulig  <martin@ximian.com>
2572
2573         * cs-parser.jay: Don't allow generic attributes.
2574
2575 2004-06-13  Martin Baulig  <martin@ximian.com>
2576
2577         * class.cs (MemberBase.DoDefineBase): New protected method.
2578         (MemberBase.DoDefine): Compute the `flags' in the new
2579         DoDefineBase() which must be called first.
2580         (Method.Define): Call DoDefineBase() first so we have the flags
2581         when defining the generic method.
2582
2583         * cs-parser.jay (interface_method_declaration): Support generic methods.
2584
2585 2004-06-13  Martin Baulig  <martin@ximian.com>
2586
2587         * decl.cs (TypeName): Removed.
2588         (MemberName): Removed TypeName and MemberNow; now we just have
2589         MemberName.
2590
2591         * cs-parser.jay: Don't distinguish between type arguments and type
2592         parameters in the grammar and simplified the rules a bit.  The
2593         reduce/reduce conflicts are now gone (except the one we inherited
2594         from mcs).
2595
2596 2004-06-11  Martin Baulig  <martin@ximian.com>
2597
2598         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
2599         call this twice: for params and varargs methods.
2600
2601 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
2602
2603         * class.cs:
2604         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
2605
2606 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
2607
2608         * attribute.cs (Attribute.GetValidTargets): Made public.
2609
2610         * class.cs: 
2611         (AbstractPropertyEventMethod): New class for better code sharing.
2612         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
2613         CS1667 report.
2614         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
2615
2616 2004-06-09  Martin Baulig  <martin@ximian.com>
2617
2618         * cs-parser.jay: Removed a reduce/reduce conflict.
2619
2620 2004-06-03  Martin Baulig  <martin@ximian.com>
2621
2622         * generic.cs (ConstructedType.GetMemberAccess): Renamed to
2623         GetSimpleName() and return a SimpleName.
2624
2625         * ecore.cs (SimpleName.Arguments): New public field.
2626         (SimpleName): Added overloaded ctor which takes an additional
2627         TypeArguments argument.
2628         (SimpleName.SimpleNameResolve): Added support for generic methods.
2629         (MethodGroupExpr.ResolveGeneric): New public method.  The code was
2630         formerly in MemberAccess.DoResolve(), but we also need it in
2631         SimpleNameResolve().
2632
2633         * expression.cs (MemberAccess.DoResolve): Use the new
2634         MethodGroupExpr.ResolveGeneric().       
2635
2636 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
2637
2638         * decl.cs: If possible, use lookuptypedirect here. We can only do
2639         this if there is no `.' after the namespace. Avoids using
2640         LookupType, which does lots of slow processing.
2641         (FindNestedType) New method, does what it says :-).
2642         * namespace.cs: use LookupTypeDirect.
2643         * rootcontext.cs: use membercache, if possible.
2644         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
2645
2646 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
2647
2648         * expression.cs:
2649         According to the spec, 
2650
2651         In a member access of the form E.I, if E is a single identifier,
2652         and if the meaning of E as a simple-name (§7.5.2) is a constant,
2653         field, property, localvariable, or parameter with the same type as
2654         the meaning of E as a type-name (§3.8), then both possible
2655         meanings of E are permitted.
2656
2657         We did not check that E as a simple-name had the same type as E as
2658         a type name.
2659
2660         This trivial check gives us 5-7% on bootstrap time.
2661
2662 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
2663
2664         * expression.cs (Invocation.OverloadResolve): Avoid the
2665         use of hashtables and boxing here by allocating on demand.
2666
2667 2004-05-30  Martin Baulig  <martin@ximian.com>
2668
2669         * rootcontext.cs (RootContext.LookupType): Don't cache things if
2670         we're doing a silent lookup.  Don't try to lookup nested types in
2671         TypeManager.object_type (thanks to Ben Maurer).
2672
2673 2004-05-30  Martin Baulig  <martin@ximian.com>
2674
2675         Committing a patch from Ben Maurer.
2676
2677         * rootcontext.cs (RootContext.LookupType): Cache negative results.
2678
2679 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
2680
2681         * convert.cs: add a trivial cache for overload operator resolution.
2682
2683 2004-05-31  Marek Safar  <marek.safar@seznam.cz>
2684
2685         * attribute.cs
2686         (AttributeTester.GetObsoleteAttribute): Returns instance of
2687         ObsoleteAttribute when type is obsolete.
2688
2689         * class.cs
2690         (TypeContainer.VerifyObsoleteAttribute): Override.
2691         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
2692         (MethodCode.VerifyObsoleteAttribute): Override.
2693         (MemberBase.VerifyObsoleteAttribute): Override.
2694
2695         * decl.cs
2696         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
2697         and report proper error.
2698
2699         *delegate.cs
2700         (Delegate.VerifyObsoleteAttribute): Override.
2701
2702         * ecore.cs
2703         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
2704         and report proper error.
2705         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
2706
2707         * enum.cs
2708         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
2709         and enum member.
2710
2711         * expression.cs
2712         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
2713         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
2714         Added test for ObsoleteAttribute.
2715
2716         * statement.cs
2717         (Catch): Derived from Statement.
2718
2719 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
2720
2721         * decl.cs: If possible, use lookuptypedirect here. We can only do
2722         this if there is no `.' after the namespace. Avoids using
2723         LookupType, which does lots of slow processing.
2724         (FindNestedType) New method, does what it says :-).
2725         * namespace.cs: use LookupTypeDirect.
2726         * rootcontext.cs: use membercache, if possible.
2727         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
2728
2729 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
2730
2731         * expression.cs:
2732         According to the spec, 
2733
2734         In a member access of the form E.I, if E is a single identifier,
2735         and if the meaning of E as a simple-name (§7.5.2) is a constant,
2736         field, property, localvariable, or parameter with the same type as
2737         the meaning of E as a type-name (§3.8), then both possible
2738         meanings of E are permitted.
2739
2740         We did not check that E as a simple-name had the same type as E as
2741         a type name.
2742
2743         This trivial check gives us 5-7% on bootstrap time.
2744
2745 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
2746
2747         Fixed bug #59071 & cs0160.cs
2748         * statement.cs (Try.Resolve): Check here whether order of catch
2749         clauses matches their dependencies.
2750
2751 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
2752
2753         Fixed bug #58624
2754         * ecore.cs (SimpleName.SimpleNameResolve): Added test for
2755         unsafe type.
2756
2757 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
2758
2759         * expression.cs (Invocation.OverloadResolve): Avoid the
2760         use of hashtables and boxing here by allocating on demand.
2761
2762 2004-05-30  Martin Baulig  <martin@ximian.com>
2763
2764         * rootcontext.cs (RootContext.LookupType): Don't cache things if
2765         we're doing a silent lookup.  Don't try to lookup nested types in
2766         TypeManager.object_type (thanks to Ben Maurer).
2767
2768 2004-05-30  Martin Baulig  <martin@ximian.com>
2769
2770         Committing a patch from Ben Maurer.
2771
2772         * rootcontext.cs (RootContext.LookupType): Cache negative results.      
2773
2774 2004-05-29  Martin Baulig  <martin@ximian.com>
2775
2776         * class.cs (IMethodData.ShouldIgnore): New method.
2777
2778         * typemanager.cs (TypeManager.MethodFlags): Don't take a
2779         `Location' argument, we don't need it anywhere.  Use
2780         `IMethodData.ShouldIgnore ()' instead of
2781         `MethodData.GetMethodFlags ()'.
2782         (TypeManager.AddMethod): Removed.
2783         (TypeManager.AddMethod2): Renamed to AddMethod.
2784
2785 2004-05-29  Martin Baulig  <martin@ximian.com>
2786
2787         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
2788
2789         * convert.cs (Convert.ImplicitReferenceConversion): If we're
2790         converting from a class type S to an interface type and we already
2791         have an object on the stack, don't box it again.  Fixes #52578.
2792
2793 2004-05-29  Martin Baulig  <martin@ximian.com>
2794
2795         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
2796         Added support for `params' parameters.  Fixes #59267.
2797
2798 2004-05-29  Martin Baulig  <martin@ximian.com>
2799
2800         * literal.cs (NullPointer): Provide a private .ctor which sets
2801         `type' to TypeManager.object_type.  Fixes #59048.
2802
2803 2004-05-29  Martin Baulig  <martin@ximian.com>
2804
2805         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
2806         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
2807
2808         * ecore.cs (EventExpr.instance_expr): Make the field private.
2809
2810 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
2811
2812         Fixed bug #50080 & cs0214-2.cs
2813         * expression.cs (Cast.DoResolve): Check unsafe context here.
2814         
2815         * statement.cs (Resolve.DoResolve): Likewise.
2816
2817 2004-05-26  Martin Baulig  <martin@ximian.com>
2818
2819         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
2820
2821         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
2822         (RootContext.LookupType): Pass down the `silent' flag.
2823
2824 2004-05-25  Martin Baulig  <martin@ximian.com>
2825
2826         * expression.cs
2827         (MethodGroupExpr.IdenticalTypeName): New public property.
2828         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
2829         expression actually refers to a type.
2830
2831 2004-05-25  Martin Baulig  <martin@ximian.com>
2832
2833         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
2834         for #56176 and made it actually work.
2835
2836 2004-05-25  Martin Baulig  <martin@ximian.com>
2837
2838         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
2839         (FieldExpr, PropertyExpr): Override and implement
2840         CacheTemporaries.  Fixes #52279.
2841
2842 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
2843
2844         * location.cs: In the new compiler listing a file twice is a
2845         warning, not an error.
2846
2847 2004-05-24  Martin Baulig  <martin@ximian.com>
2848
2849         * enum.cs (Enum.DefineType): For the `BaseType' to be a
2850         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
2851
2852 2004-05-24  Martin Baulig  <martin@ximian.com>
2853
2854         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
2855         walking the `using' list.  Fixes #53921.
2856
2857 2004-05-24  Martin Baulig  <martin@ximian.com>
2858
2859         * const.cs (Const.LookupConstantValue): Added support for
2860         EmptyCast's; fixes #55251.
2861
2862 2004-05-24  Martin Baulig  <martin@ximian.com>
2863
2864         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
2865         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
2866         which does the CS0135 check.  The reason is that we first need to
2867         check whether the variable actually exists.
2868
2869 2004-05-24  Martin Baulig  <martin@ximian.com>
2870
2871         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
2872         than RootContext.LookupType() to find the explicit interface
2873         type.  Fixes #58584.
2874
2875 2004-05-24  Raja R Harinath  <rharinath@novell.com>
2876
2877         * Makefile: Simplify.  Use executable.make.
2878         * mcs.exe.sources: New file.  List of sources of mcs.exe.
2879
2880 2004-05-24  Anders Carlsson  <andersca@gnome.org>
2881
2882         * decl.cs:
2883         * enum.cs:
2884         Use the invariant culture when doing String.Compare for CLS case
2885         sensitivity.
2886         
2887 2004-05-23  Martin Baulig  <martin@ximian.com>
2888
2889         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
2890         don't have any dots.  Fixes #52622, added cs0246-8.cs.
2891
2892         * namespace.cs (NamespaceEntry.Lookup): Likewise.
2893
2894 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
2895
2896         * class.cs (MemberBase.Define): Reuse MemberType member for 
2897         resolved type. Other methods can use it too.
2898
2899 2004-05-23  Martin Baulig  <martin@ximian.com>
2900
2901         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
2902         the variable also exists in the current block (otherwise, we need
2903         to report a CS0103).  Fixes #58670.
2904
2905 2004-05-23  Martin Baulig  <martin@ximian.com>
2906
2907         * flowanalysis.cs (Reachability.Reachable): Compute this
2908         on-the-fly rather than storing it as a field.
2909
2910 2004-05-23  Martin Baulig  <martin@ximian.com>
2911
2912         * flowanalysis.cs (Reachability.And): Manually compute the
2913         resulting `barrier' from the reachability.      
2914        
2915 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
2916
2917         Fix bug #57835
2918         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
2919         instance of ObsoleteAttribute when symbol is obsolete.
2920
2921         * class.cs
2922         (IMethodData): Extended interface for ObsoleteAttribute support.
2923
2924 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
2925
2926         * attribute.cs: Fix bug #55970
2927
2928 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
2929
2930         Fix bug #52705
2931         * attribute.cs
2932         (GetObsoleteAttribute): New method. Creates the instance of
2933         ObsoleteAttribute.
2934         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
2935         ObsoleteAttribute when member is obsolete.
2936         (AttributeTester.Report_ObsoleteMessage): Common method for
2937         Obsolete error/warning reporting.
2938
2939         * class.cs
2940         (TypeContainer.base_classs_type): New member for storing parent type.
2941
2942         * decl.cs
2943         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
2944         for this MemberCore.
2945
2946 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
2947
2948         * attribute.cs, const.cs: Fix bug #58590
2949
2950 2004-05-21  Martin Baulig  <martin@ximian.com>
2951
2952         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
2953         out parameters if the end of the method is unreachable.  Fixes
2954         #58098. 
2955
2956 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
2957
2958         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
2959         Hari was right, why extra method.
2960
2961 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
2962
2963         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
2964
2965 2004-05-20  Martin Baulig  <martin@ximian.com>
2966
2967         * delegate.cs: Convert this file to Unix mode - like the original
2968         version in mcs is.
2969
2970 2004-05-20  Martin Baulig  <martin@ximian.com>
2971
2972         * attribute.cs: Convert this file to Unix mode - like the original
2973         version in mcs is.
2974
2975 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
2976
2977        Fix bug #58688 (MCS does not report error when the same attribute
2978        is assigned twice)
2979
2980        * attribute.cs (Attribute.Emit): Distinction between null and default.
2981
2982 2004-05-19  Raja R Harinath  <rharinath@novell.com>
2983
2984        * cs-parser.jay (attribute): Create a GlobalAttribute for the case
2985        of a top-level attribute without an attribute target.
2986        * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
2987        Make non-static.
2988        (Attribute.Conditional_GetConditionName), 
2989        (Attribute.Obsolete_GetObsoleteMessage): Update.
2990        (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
2991        part of ScanForIndexerName.
2992        (Attribute.CanIgnoreInvalidAttribute): New function.
2993        (Attribute.ScanForIndexerName): Move to ...
2994        (Attributes.ScanForIndexerName): ... here.
2995        (Attributes.Attrs): Rename from now-misnamed AttributeSections.
2996        (Attributes.Search): New internal variant that can choose not to
2997        complain if types aren't resolved.  The original signature now
2998        complains.
2999        (Attributes.GetClsCompliantAttribute): Use internal variant, with
3000        complaints suppressed.
3001        (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
3002        only if it not useful.
3003        (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
3004        top-level for attributes that are shared between the assembly
3005        and a top-level class.
3006        * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
3007        * class.cs: Update to reflect changes.
3008        (DefineIndexers): Fuse loops.
3009        * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
3010        a couple more variants of attribute names.
3011
3012 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
3013
3014         Fix bug #52585 (Implemented explicit attribute declaration)
3015
3016         * attribute.cs:
3017         (Attributable.ValidAttributeTargets): New abstract method. It gets
3018         list of valid attribute targets for explicit target declaration.
3019         (Attribute.Target): It holds target itself.
3020         (AttributeSection): Removed.
3021         (Attribute.CheckTargets): New method. It checks whether attribute
3022         target is valid for the current element.
3023
3024         * class.cs:
3025         (EventProperty): New class. For events that are declared like
3026         property (with add and remove accessors).
3027         (EventField): New class. For events that are declared like field.
3028         class.cs
3029
3030         * cs-parser.jay: Implemented explicit attribute target declaration.
3031
3032         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
3033         Override ValidAttributeTargets.
3034
3035         * parameter.cs:
3036         (ReturnParameter): Class for applying custom attributes on 
3037         the return type.
3038         (ParameterAtribute): New class. Class for applying custom
3039         attributes on the parameter type.
3040
3041 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
3042
3043         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
3044         definitions. 
3045
3046         (Method): Allow UNSAFE here.
3047
3048         * modifiers.cs: Support unsafe reporting.
3049
3050 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
3051
3052         * decl.cs: Fix bug #58478.
3053
3054 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
3055
3056         * statement.cs: When checking for unreachable code on an EmptyStatement,
3057         set the location. Fixes bug #58488.
3058
3059 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
3060
3061         * driver.cs: Add -pkg handling.
3062
3063         From Gonzalo: UseShelLExecute=false
3064
3065 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
3066
3067         * attribute.cs:
3068         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
3069         for attribute.
3070         (Attribute.IsClsCompliaceRequired): Moved to base for better
3071         accesibility.
3072         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
3073         when attribute is AttributeUsageAttribute.
3074         (Attribute.GetValidTargets): Simplified.
3075         (Attribute.GetAttributeUsage): New method returns AttributeUsage
3076         attribute for this type.
3077         (Attribute.ApplyAttributes): Method renamed to Emit and make
3078         non-static.
3079         (GlobalAttributeSection): New class for special handling of global
3080         attributes (assembly, module).
3081         (AttributeSection.Emit): New method.
3082
3083         * class.cs: Implemented Attributable abstract methods.
3084         (MethodCore.LabelParameters): Moved to Parameter class.
3085         (Accessor): Is back simple class.
3086         (PropertyMethod): Implemented Attributable abstract class.
3087         (DelegateMethod): Implemented Attributable abstract class.
3088         (Event): New constructor for disctintion between normal Event
3089         and Event with accessors.
3090
3091         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
3092
3093         * codegen.cs, const.cs, decl.cs, delegate.cs:
3094         (CommonAssemblyModulClass): Implemented Attributable abstract class
3095         and simplified.
3096
3097         * enum.cs: Implement IAttributeSupport interface.
3098         (EnumMember): New class for emum members. Implemented Attributable
3099         abstract class
3100
3101         * parameter.cs:
3102         (ParameterBase): Is abstract.
3103         (ReturnParameter): New class for easier [return:] attribute handling.
3104
3105         * typemanager.cs: Removed builder_to_attr.
3106
3107 2004-05-11  Raja R Harinath  <rharinath@novell.com>
3108
3109         Fix bug #57151.
3110         * attribute.cs (Attribute.GetPositionalValue): New function.
3111         * class.cs (TypeContainer.VerifyMembers): New function.
3112         (TypeContainer.Emit): Use it.
3113         (ClassOrStruct): New base class for Class and Struct.
3114         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
3115         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
3116         class.
3117         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
3118         then each non-static field should have a FieldOffset attribute.
3119         Otherwise, none of the fields should have a FieldOffset attribute.
3120         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
3121         and FieldOffset attributes.
3122         * typemanager.cs (TypeManager.struct_layout_attribute_type)
3123         (TypeManager.field_offset_attribute_type): New core types.
3124         (TypeManager.InitCoreTypes): Initialize them.
3125
3126 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
3127
3128         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
3129         Return correct type.
3130         From bug #58270.
3131
3132 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
3133
3134         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
3135         be implicitly converted to ulong.
3136         
3137         * expression.cs: The logic for allowing operator &, | and ^ worked
3138         was wrong, it worked before because we did not report an error in
3139         an else branch.  Fixes 57895.
3140
3141         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
3142         allow volatile fields to be reference types.
3143
3144 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
3145
3146         * driver.cs: Add support for /debug-
3147
3148 2004-05-07  Raja R Harinath  <rharinath@novell.com>
3149
3150         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
3151         Add a 'complain' parameter to silence errors.
3152         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
3153         silently overlooked type-resolutions.
3154         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
3155         to reflect changes.
3156         (Attributes.Search): New function.
3157         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
3158         (Attributes.GetAttributeFullName): Remove hack.
3159         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
3160         Update to reflect changes.
3161         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
3162         Use Attributes.Search instead of nested loops.
3163
3164 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
3165
3166         * decl.cs:
3167         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
3168         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
3169         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
3170
3171         * report.cs: (Report.Warning): Renamed to Warning_T because of
3172         parameter collision.
3173
3174 2004-05-05  Raja R Harinath  <rharinath@novell.com>
3175
3176         * expression.cs (MemberAccess.ResolveMemberAccess):
3177         Exit with non-zero status after Report.Error.
3178         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
3179         Likewise.
3180         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
3181
3182 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
3183
3184         * support.cs: Don't hang when the file is empty.
3185
3186 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
3187
3188         * support.cs: In SeekableStreamReader, compute the preamble size of the
3189           underlying stream. Position changes should take into account that initial
3190           count of bytes.
3191
3192 2004-05-03  Todd Berman  <tberman@sevenl.net>
3193
3194         * driver.cs: remove unused GetSysVersion function.
3195
3196 2004-05-03  Todd Berman  <tberman@sevenl.net>
3197
3198         * driver.cs: Remove the hack from saturday, as well as the hack
3199         from jackson (LoadAssemblyFromGac), also adds the CWD to the
3200         link_paths to get that bit proper.
3201
3202 2004-05-01  Todd Berman  <tberman@sevenl.net>
3203
3204         * driver.cs: Try a LoadFrom before a Load, this checks the current
3205         path. This is currently a bug in mono that is be fixed, however, this
3206         provides a workaround for now. This will be removed when the bug
3207         is fixed.
3208
3209 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
3210
3211         * CryptoConvert.cs: Updated to latest version. Fix issue with 
3212         incomplete key pairs (#57941).
3213
3214 2004-05-01  Todd Berman  <tberman@sevenl.net>
3215
3216         * driver.cs: Remove '.' from path_chars, now System.* loads properly
3217         from the GAC
3218
3219 2004-04-30  Jackson Harper  <jackson@ximian.com>
3220
3221         * codegen.cs: Open keys readonly.
3222         
3223 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
3224
3225         * typemanager.cs: don't report cyclic struct layout when a struct
3226         contains 2 or more fields of the same type. Failed for Pango.AttrShape
3227         which has 2 Pango.Rectangle fields.
3228
3229 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
3230
3231         * expression.cs: Handle IntPtr comparisons with IL code
3232         rather than a method call.
3233
3234 2004-04-29  Martin Baulig  <martin@ximian.com>
3235
3236         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
3237         the list of PropertyInfo's in class hierarchy and find the
3238         accessor.  Fixes #56013.
3239
3240 2004-04-29  Martin Baulig  <martin@ximian.com>
3241
3242         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
3243
3244 2004-04-29  Martin Baulig  <martin@ximian.com>
3245
3246         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
3247
3248         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
3249
3250 2004-04-29  Martin Baulig  <martin@ximian.com>
3251
3252         * class.cs (ConstructorInitializer.Resolve): Check whether the
3253         parent .ctor is accessible.  Fixes #52146.
3254
3255 2004-04-29  Martin Baulig  <martin@ximian.com>
3256
3257         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
3258
3259         * statement.cs (Using.EmitLocalVariableDecls): Use
3260         TypeManager.idisposable_type, not typeof (IDisposable).
3261         (Foreach.EmitCollectionForeach): Added support for valuetypes.
3262
3263 2004-04-29  Martin Baulig  <martin@ximian.com>
3264
3265         * class.cs (Event.Define): Don't emit the field and don't set
3266         RTSpecialName and SpecialName for events on interfaces.  Fixes
3267         #57703. 
3268
3269 2004-04-29  Raja R Harinath  <rharinath@novell.com>
3270
3271         Refactor Attribute.ApplyAttributes.
3272         * attribute.cs (Attributable): New base class for objects that can
3273         have Attributes applied on them.
3274         (Attribute): Make AttributeUsage fields public.
3275         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
3276         (Attribute.IsInternalCall): New property.
3277         (Attribute.UsageAttr): Convert to a public read-only property.
3278         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
3279         (Attribute.ResolveType, Attribute.Resolve)
3280         (Attribute.ScanForIndexerName): Update to reflect changes.
3281         (Attribute.CheckAttributeTarget): Re-format.
3282         (Attribute.ApplyAttributes): Refactor, to various
3283         Attributable.ApplyAttributeBuilder methods.
3284         * decl.cs (MemberCore): Make Attributable.
3285         * class.cs (Accessor): Make Attributable.
3286         (MethodData.ApplyAttributes): Use proper attribute types, not
3287         attribute names.
3288         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
3289         (TypeContainer.ApplyAttributeBuilder)
3290         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
3291         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
3292         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
3293         (Operator.ApplyAttributeBuilder): New factored-out methods.
3294         * const.cs (Const.ApplyAttributeBuilder): Likewise.
3295         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
3296         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
3297         * parameter.cs (ParameterBase): New Attributable base class
3298         that can also represent Return types.
3299         (Parameter): Update to the changes.
3300
3301 2004-04-29  Jackson Harper  <jackson@ximian.com>
3302
3303         * driver.cs: Prefer the corlib system version when looking for
3304         assemblies in the GAC. This is still a hack, but its a better hack
3305         now.
3306         
3307 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
3308
3309         * decl.cs, enum.cs: Improved error 3005 reporting.
3310   
3311         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
3312         (related_symbols): New private member for list of symbols
3313         related to reported error/warning.
3314         
3315         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
3316
3317 2004-04-29  Martin Baulig  <martin@ximian.com>
3318
3319         * ecore.cs (Expression.Constantify): If we're an enum and
3320         TypeManager.TypeToCoreType() doesn't give us another type, use
3321         t.UnderlyingSystemType.  Fixes #56178.  
3322
3323 2004-04-29  Martin Baulig  <martin@ximian.com>
3324
3325         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
3326         interfaces and for each interface, only add members directly
3327         declared in that interface.  Fixes #53255.
3328
3329 2004-04-28  Martin Baulig  <martin@ximian.com>
3330
3331         * expression.cs (ConditionalLogicalOperator): Use a temporary
3332         variable for `left' to avoid that we evaluate it more than once;
3333         bug #52588.
3334
3335 2004-04-28  Martin Baulig  <martin@ximian.com>
3336
3337         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
3338         `void[]' (CS1547).
3339
3340 2004-04-28  Martin Baulig  <martin@ximian.com>
3341
3342         * statement.cs (LocalInfo.Resolve): Check whether the type is not
3343         void (CS1547).
3344
3345         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
3346         whether the type is not void (CS1547).
3347
3348 2004-04-28  Martin Baulig  <martin@ximian.com>
3349
3350         * expression.cs (Unary.DoResolveLValue): Override this and report
3351         CS0131 for anything but Operator.Indirection.
3352
3353 2004-04-28  Martin Baulig  <martin@ximian.com>
3354
3355         Committing a patch from Ben Maurer; see bug #50820.
3356
3357         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
3358         check for classes.
3359
3360         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
3361         classes.        
3362
3363 2004-04-28  Martin Baulig  <martin@ximian.com>
3364
3365         Committing a patch from Ben Maurer; see bug #50820.
3366
3367         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
3368         check for classes.
3369
3370         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
3371         classes.        
3372
3373 2004-04-28  Martin Baulig  <martin@ximian.com>
3374
3375         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
3376         (Block.AddLabel): Call DoLookupLabel() to only search in the
3377         current block.
3378
3379 2004-04-28  Martin Baulig  <martin@ximian.com>
3380
3381         * cfold.cs (ConstantFold.BinaryFold): Added special support for
3382         comparing StringConstants and NullLiterals in Equality and Inequality.
3383
3384 2004-04-28  Jackson Harper  <jackson@ximian.com>
3385
3386         * driver.cs: Attempt to load referenced assemblies from the
3387         GAC. This is the quick and dirty version of this method that
3388         doesnt take into account versions and just takes the first
3389         canidate found. Will be good enough for now as we will not have more
3390         then one version installed into the GAC until I update this method.
3391
3392 2004-04-28  Martin Baulig  <martin@ximian.com>
3393
3394         * typemanager.cs (TypeManager.CheckStructCycles): New public
3395         static method to check for cycles in the struct layout.
3396
3397         * rootcontext.cs (RootContext.PopulateTypes): Call
3398         TypeManager.CheckStructCycles() for each TypeContainer.
3399         [Note: We only need to visit each type once.]
3400
3401 2004-04-28  Martin Baulig  <martin@ximian.com>
3402
3403         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
3404
3405         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
3406         success and added `out object value'.  Use a `bool resolved' field
3407         to check whether we've already been called rather than
3408         `ConstantValue != null' since this breaks for NullLiterals.
3409
3410 2004-04-28  Raja R Harinath  <rharinath@novell.com>
3411
3412         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
3413         setting of this flag, since the 'set' method may be non-public.
3414
3415 2004-04-28  Raja R Harinath  <rharinath@novell.com>
3416
3417         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
3418         check on current_vector.Block.
3419
3420 2004-04-27  Martin Baulig  <martin@ximian.com>
3421
3422         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
3423         a field initializer.  Fixes #56459.
3424
3425 2004-04-27  Martin Baulig  <martin@ximian.com>
3426
3427         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
3428         we're not attempting to use an indexer.  Fixes #52154.
3429
3430 2004-04-27  Martin Baulig  <martin@ximian.com>
3431
3432         * statement.cs (Return): Don't create a return label if we don't
3433         need it; reverts my change from January 20th.  Thanks to Ben
3434         Maurer for this.
3435
3436 2004-04-27  Martin Baulig  <martin@ximian.com>
3437
3438         According to the spec, `goto' can only leave a nested scope, but
3439         never enter it.
3440
3441         * statement.cs (Block.LookupLabel): Only lookup in the current
3442         block, don't recurse into parent or child blocks.
3443         (Block.AddLabel): Check in parent and child blocks, report
3444         CS0140/CS0158 if we find a duplicate.
3445         (Block): Removed this indexer for label lookups.
3446         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
3447         this already does the error reporting for us.
3448
3449         * flowanalysis.cs
3450         (FlowBranching.UsageVector.Block): New public variable; may be null.
3451         (FlowBranching.CreateSibling): Added `Block' argument.
3452         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
3453         label for the target of a `goto' and check whether we're not
3454         leaving a `finally'.
3455
3456 2004-04-27  Martin Baulig  <martin@ximian.com>
3457
3458         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
3459         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
3460         just for returns).
3461
3462 2004-04-27  Martin Baulig  <martin@ximian.com>
3463
3464         * statement.cs (Block.AddLabel): Also check for implicit blocks
3465         and added a CS0158 check.
3466
3467 2004-04-27  Martin Baulig  <martin@ximian.com>
3468
3469         * flowanalysis.cs (FlowBranchingLoop): New class.
3470         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
3471         UsageVector's instead of an ArrayList.
3472         (FlowBranching.Label): Likewise.
3473         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
3474         (FlowBranching.AddBreakVector): New method.
3475
3476 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
3477
3478         * attribute.cs: Small regression fix: only convert the type if we
3479         the type is different, fixes System.Drawing build.
3480
3481 2004-04-27  Martin Baulig  <martin@ximian.com>
3482
3483         * attribute.cs (Attribute.Resolve): If we have a constant value
3484         for a named field or property, implicity convert it to the correct
3485         type.
3486
3487 2004-04-27  Raja R Harinath  <rharinath@novell.com>
3488
3489         * statement.cs (Block.Block): Implicit blocks share
3490         'child_variable_names' fields with parent blocks.
3491         (Block.AddChildVariableNames): Remove.
3492         (Block.AddVariable): Mark variable as "used by a child block" in
3493         every surrounding block.
3494         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
3495         been used in a child block, complain about violation of "Invariant
3496         meaning in blocks" rule.
3497         * cs-parser.jay (declare_local_variables): Don't use
3498         AddChildVariableNames.
3499         (foreach_statement): Don't create an implicit block: 'foreach'
3500         introduces a scope.
3501
3502 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
3503
3504         * convert.cs (ImplicitNumericConversion): 0 is also positive when
3505         converting from 0L to ulong.  Fixes 57522.
3506
3507 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
3508
3509         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
3510         derived class hides via 'new' keyword field from base class (test-242.cs).
3511         TODO: Handle this in the more general way.
3512         
3513         * class.cs (CheckBase): Ditto.
3514
3515 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
3516
3517         * decl.cs (caching_flags): New member for storing cached values
3518         as bit flags.
3519         (MemberCore.Flags): New enum where bit flags for caching_flags
3520         are defined.
3521         (MemberCore.cls_compliance): Moved to caching_flags.
3522         (DeclSpace.Created): Moved to caching_flags.
3523
3524         * class.cs: Use caching_flags instead of DeclSpace.Created
3525         
3526 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
3527
3528         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
3529         if we are only a derived class, not a nested class.
3530
3531         * typemanager.cs: Same as above, but do this at the MemberLookup
3532         level (used by field and methods, properties are handled in
3533         PropertyExpr).   Allow for the qualified access if we are a nested
3534         method. 
3535
3536 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
3537
3538         * class.cs: Refactoring.
3539         (IMethodData): New inteface; Holds links to parent members
3540         to avoid member duplication (reduced memory allocation).
3541         (Method): Implemented IMethodData interface.
3542         (PropertyBase): New inner classes for get/set methods.
3543         (PropertyBase.PropertyMethod): Implemented IMethodData interface
3544         (Event): New inner classes for add/remove methods.
3545         (Event.DelegateMethod): Implemented IMethodData interface.
3546
3547         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
3548         EmitContext (related to class.cs refactoring).
3549
3550 2004-04-21  Raja R Harinath  <rharinath@novell.com>
3551
3552         * delegate.cs (Delegate.VerifyApplicability): If the number of
3553         arguments are the same as the number of parameters, first try to
3554         verify applicability ignoring  any 'params' modifier on the last
3555         parameter.
3556         Fixes #56442.
3557
3558 2004-04-08  Martin Baulig  <martin@ximian.com>
3559
3560         Merged latest changes into gmcs.  Please keep this comment in
3561         here, it makes it easier for me to see what changed in MCS since
3562         the last time I merged.
3563
3564 2004-04-16  Raja R Harinath  <rharinath@novell.com>
3565
3566         * class.cs (TypeContainer.AddIndexer): Use
3567         'ExplicitInterfaceName' to determine if interface name was
3568         explicitly specified.  'InterfaceType' is not initialized at this time.
3569         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
3570         Indexers array is already in the required order.  Initialize
3571         'IndexerName' only if there are normal indexers.
3572         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
3573         (TypeContainer.Emit): Emit DefaultMember attribute only if
3574         IndexerName is initialized.
3575         Fixes #56300.
3576
3577 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
3578
3579         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
3580         Fixes #57007
3581
3582 2004-04-15  Raja R Harinath  <rharinath@novell.com>
3583
3584         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
3585         attributes.
3586         Fix for #56456.
3587
3588         * attribute.cs (Attribute.Resolve): Check for duplicate named
3589         attributes.
3590         Fix for #56463.
3591
3592 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
3593
3594         * iterators.cs (MarkYield): track whether we are in an exception,
3595         and generate code accordingly.  Use a temporary value to store the
3596         result for our state.
3597
3598         I had ignored a bit the interaction of try/catch with iterators
3599         since their behavior was not entirely obvious, but now it is
3600         possible to verify that our behavior is the same as MS .NET 2.0
3601
3602         Fixes 54814
3603
3604 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
3605
3606         * iterators.cs: Avoid creating temporaries if there is no work to
3607         do. 
3608
3609         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
3610         Enumerations, use TypeManager.EnumToUnderlying and call
3611         recursively. 
3612
3613         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
3614         bug #57013
3615
3616         (This.Emit): Use EmitContext.EmitThis to emit our
3617         instance variable.
3618
3619         (This.EmitAssign): Ditto.
3620
3621         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
3622         codepaths, we will move all the functionality into
3623         Mono.CSharp.This 
3624
3625         (FieldExpr.EmitAssign): Ditto.
3626
3627         This fixes several hidden bugs that I uncovered while doing a code
3628         review of this today.
3629
3630         * codegen.cs (EmitThis): reworked so the semantics are more clear
3631         and also support value types "this" instances.
3632
3633         * iterators.cs: Changed so that for iterators in value types, we
3634         do not pass the value type as a parameter.  
3635
3636         Initialization of the enumerator helpers is now done in the caller
3637         instead of passing the parameters to the constructors and having
3638         the constructor set the fields.
3639
3640         The fields have now `assembly' visibility instead of private.
3641
3642 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
3643
3644         * expression.cs (Argument.Resolve): Check if fields passed as ref
3645         or out are contained in a MarshalByRefObject.
3646
3647         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
3648         another compiler type.
3649
3650 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
3651
3652         * class.cs (Indexer.Define): use the new name checking method.
3653         Also, return false on an error.
3654         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
3655         (is_identifier_[start/part]_character): make static.
3656
3657 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
3658
3659         * expression.cs (Binary.ResolveOperator): Do no append strings
3660         twice: since we can be invoked more than once (array evaluation)
3661         on the same concatenation, take care of this here.  Based on a fix
3662         from Ben (bug #56454)
3663
3664 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
3665
3666         * codegen.cs: Fix another case where CS1548 must be reported (when 
3667         delay-sign isn't specified and no private is available #56564). Fix
3668         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
3669         error when MCS is used on the MS runtime and we need to delay-sign 
3670         (which seems unsupported by AssemblyBuilder - see #56621).
3671
3672 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
3673
3674         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
3675         (TypeManager.ComputeNamespaces): Faster implementation for
3676         Microsoft runtime.
3677
3678         * compiler.csproj: Updated AssemblyName to mcs.
3679
3680 2004-05-11  Jackson Harper  <jackson@ximian.com>
3681
3682         * Makefile: Preserve MONO_PATH
3683         
3684 2004-05-11  Jackson Harper  <jackson@ximian.com>
3685
3686         * Makefile: Use mono and mcs to build gmcs
3687         
3688 2004-05-03  Miguel de Icaza  <miguel@ximian.com>
3689
3690         * codegen.cs: Add patch from Robert Shade
3691         <rshade@dvsconsulting.com>, use FileAccess.Read on the keyfile, to
3692         sync with mcs.
3693
3694 2004-05-02  Sebastien Pouliot  <sebastien@ximian.com>
3695
3696         * CryptoConvert.cs: Updated to latest version. Fix issue with 
3697         incomplete key pairs (#57941).
3698
3699 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
3700
3701         * codegen.cs: Fix another case where CS1548 must be reported (when 
3702         delay-sign isn't specified and no private is available #56564). Fix
3703         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
3704         error when MCS is used on the MS runtime and we need to delay-sign 
3705         (which seems unsupported by AssemblyBuilder - see #56621).
3706
3707 2004-04-29  Jackson Harper  <jackson@ximian.com>
3708
3709         * Makefile: Set MONO_PATH to use the bootstrap corlib
3710         * driver.cs: Check the GAC for referenced assemblies.
3711                 
3712 2004-04-29  Martin Baulig  <martin@ximian.com>
3713
3714         * Makefile (gmcs.exe): Set MONO_PATH to use `../class/lib/net_2_0'.
3715
3716 2004-04-07  Martin Baulig  <martin@ximian.com>
3717
3718         * expression.cs (Binary.ResolveOperator): Added special case for
3719         Equality/Inequality between a type parameter and a null literal.
3720
3721 2004-04-07  Martin Baulig  <martin@ximian.com>
3722
3723         * convert.cs: Check null literal -> type parameter conversions.
3724
3725 2004-04-07  Martin Baulig  <martin@ximian.com>
3726
3727         * generic.cs (ConstructedType.CheckConstraints): Enforce the
3728         `class' and `struct' constraints.
3729
3730 2004-04-07  Martin Baulig  <martin@ximian.com>
3731
3732         * generic.cs (SpecialConstraint): New public enum.
3733         (Constraints.Resolve): Added support for the `class' and `struct'
3734         constraints.
3735
3736         * cs-parser.jay (type_parameter_constraint): Added support for the
3737         `class' and `struct' constraints.
3738
3739 2004-04-07  Martin Baulig  <martin@ximian.com>
3740
3741         * support.cs (GenericConstraints): Replaced `Types' by
3742         `ClassConstraint' and `InterfaceConstraints'; added
3743         `HasClassConstraint'.   
3744
3745 2004-04-07  Martin Baulig  <martin@ximian.com>
3746
3747         * generic.cs
3748         (Constraints.InterfaceConstraints): New public property.
3749         (Constraints.Types): Make this property public
3750         (TypeParameter): Implement IMemberContainer.
3751         (TypeParameter.Define): Take a `GenericTypeParameterBuilder'
3752         instead of a TypeBuilder/MethodBuilder; pass the interface
3753         constraints to TypeManager.AddTypeParameter().
3754         (TypeParameter.DefineType): Just take an EmitContext and no
3755         TypeBuilder/MethodBuilder.  Use the new public API.
3756
3757         * typemanager.cs (TypeManager.AddTypeParameter): Added
3758         `TypeExpr[]' argument; add the interfaces to the
3759         `builder_to_ifaces' hash.
3760         (TypeManager.LookupMemberContainer): For
3761         GenericTypeParameterBuilders, get the TypeParameter from the
3762         `builder_to_type_param'.
3763         (TypeManager.FindMembers): For GenericTypeParameterBuilders, get
3764         the TypeParameter and call FindMembers on it.
3765
3766 2004-04-07  Martin Baulig  <martin@ximian.com>
3767
3768         * class.cs
3769         (MethodCore.GenericMethod): Moved this field here from Method.
3770         (MethodCore.IsDuplicateImplementation): Take the number of type
3771         parameters into account if we're a generic method.
3772
3773         * expression.cs (Invocation.InferTypeArguments): Don't return true
3774         if `arguments' is null; we still need to check whether we actually
3775         don't need to infer anything in this case.
3776         (MemberAccess): Merged the functionality from GenericMemberAccess
3777         into this class.
3778
3779         * generic.cs (GenericMemberAccess): Removed.
3780
3781 2004-04-05  Martin Baulig  <martin@ximian.com>
3782
3783         * decl.cs (MemberCore): For generic classes, interfaces and
3784         structs, `Name' now includes the number of type parameters
3785         ("Stack!1.Node!1").
3786         (DeclSpace.FindType): Removed the `num_type_args' argument; we now
3787         encode the number of type arguments in the type name.
3788
3789         * expression.cs (Expression.MemberLookup): Removed the
3790         `num_type_args' argument; we now encode the number of type
3791         arguments in the type name.
3792
3793         * ecore.cs (SimpleName): Encode the number of type arguments in
3794         the type name itself.
3795
3796         * generic.cs (ConstructedType): Likewise.
3797
3798         * tree.cs (Tree.RecordDecl): Take a `string' instead of a
3799         `MemberName'; we now include the number of type parameters in the
3800         type name.
3801
3802         * typemanager.cs (TypeManager.CheckGeneric): Removed.
3803         (TypeManager.MemberLookup): Removed the
3804         `num_type_args' argument; we now encode the number of type
3805         arguments in the type name.     
3806
3807 2004-04-03  Martin Baulig  <martin@ximian.com>
3808
3809         * decl.cs (MemberCore.ctor): Take a MemberName instead of a sting.
3810         (MemberCore.MemberName): Moved here from MemberBase.
3811         (DeclSpace.SetParameterInfo): Just take the constraints as an
3812         ArrayList; we already have the type parameters in our
3813         `MemberName'; also do the CS0080 reporting here.
3814
3815         * cs-parser.jay (struct_declaration): Use `member_name' instead of
3816         `IDENTIFIER opt_type_parameter_list'; when constructing our
3817         `MemberName', it'll already include our type parameters.
3818         (class_declaration, interface_declaration): Likewise.
3819         (delegate_declaration): Likewise.
3820         (MakeName): Take a MemberName and return a MemberName.
3821         The following two changes are required to avoid shift/reduce conflicts:
3822         (member_name): Don't include a TypeName anymore; ie. this is now
3823         just 'IDENTIFIER opt_type_parameter_list'.
3824         (property_declaration, event_declaration): Use a
3825         `namespace_or_type_name' instead of a `member_name'.            
3826
3827 2004-04-03  Martin Baulig  <martin@ximian.com>
3828
3829         * decl.cs (MemberName): Renamed to `TypeName' and created a new
3830         `MemberName' class.
3831         (TypeName): Formerly known as MemberName.
3832
3833         * namespace.cs (NamespaceEntry.UsingAlias): Take a `TypeName'
3834         instead of a `MemberName'.
3835
3836         * cs-parser.jay (namespace_or_type_name): Create a TypeName.
3837         (member_name): New rule; create a MemberName.
3838
3839 2004-04-02  Martin Baulig  <martin@ximian.com>
3840
3841         * namespace.cs (NamespaceEntry.VerifyUsing): Added error checking
3842         (CS0305 and CS0308).
3843
3844 2004-04-02  Martin Baulig  <martin@ximian.com>
3845
3846         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Added
3847         support for nested types.
3848
3849 2004-04-02  Martin Baulig  <martin@ximian.com>
3850
3851         * ecore.cs (IAlias): New public interface.
3852         (TypeExpr, TypeExpression): Implement IAlias.
3853         (TypeAliasExpression): New public class.
3854
3855         * namespace.cs (Namespace): Implement IAlias.
3856         (Namespace.Lookup): Return an IAlias instead on an object.
3857         (Namespace.DefineName): Take an IAlias instead of an object.
3858         (NamespaceEntry.AliasEntry.Resolve): Return an IAlias instead of
3859         an object.
3860         (NamespaceEntry.UsingAlias): Take a Membername instead of an
3861         Expression.
3862         (NamespaceEntry.LookupAlias): Return an IAlias instead on an
3863         object.
3864         (NamespaceEntry.Lookup): Likewise.
3865
3866         * rootcontext.cs (RootContext.LookupType): Return a TypeExpr
3867         instead of a Type.      
3868
3869         * decl.cs (DeclSpace): Implement IAlias.
3870         (DeclSpace.LookupAlias): Return an IAlias instead of a string.
3871
3872         * generic.cs (ConstructedType): Improved error checking.
3873
3874 2004-04-02  Martin Baulig  <martin@ximian.com>
3875
3876         * convert.cs: Added type parameter conversions.
3877
3878         * ecore.cs
3879         (UnboxCast.Emit): Emit an `unbox.any' for type params.
3880         (ClassCast.Emit): If the source type is a type parameter, box it.
3881         If the target type is a type parameter, emit an `unbox.any'
3882         instead of a `classcast'.1      
3883
3884 2004-04-01  Martin Baulig  <martin@ximian.com>
3885
3886         * cs-tokenizer.cs (parse_less_than): Allow Token.DOT.
3887
3888 2004-04-01  Martin Baulig  <martin@ximian.com>
3889
3890         * generic.cs (ConstructedType.CheckConstraints): Use
3891         Convert.ImplicitStandardConversionExists(); user-defined implicit
3892         conversions are not allowed according to the spec.
3893
3894 2004-03-30  Martin Baulig  <martin@ximian.com>
3895
3896         * expression.cs (New): Added support for type parameters.
3897
3898         * typemanager.cs
3899         (TypeManager.activator_type): New public static field.
3900         (TypeManager.activator_create_instance): Likewise.
3901
3902 2004-03-30  Martin Baulig  <martin@ximian.com>
3903
3904         * typemanager.cs (TypeManager.HasConstructorConstraint): New
3905         public method.
3906
3907 2004-03-30  Martin Baulig  <martin@ximian.com>
3908
3909         * generic.cs (ConstructedType.CheckConstraints): Actually follow
3910         the spec here: the argument type must be convertible to the
3911         constraints.
3912
3913 2004-03-30  Martin Baulig  <martin@ximian.com>
3914
3915         * generic.cs
3916         (TypeParameter.Define, TypeParameter.DefineMethod): Call
3917         TypeManager.AddTypeParameter().
3918         (ConstructedType.CheckConstraints): Re-enable this and actually
3919         check whether we have a constructor constraint.
3920
3921         * typemanager.cs
3922         (TypeManager.builder_to_type_param): New static field.
3923         (TypeManager.AddTypeParameter): New static method.
3924         (TypeManager.LookupTypeParameter): New public method.
3925
3926 2004-03-30  Martin Baulig  <martin@ximian.com>
3927
3928         * generic.cs (TypeParameter.DefineType): Return a boolean and use
3929         the new API to actually define the constructor constraint.
3930
3931         * typemanager.cs
3932         (TypeManager.new_constraint_attr_type): New static field.
3933         (TypeManager.InitCoreTypes): Initialize it.
3934
3935 2004-03-30  Martin Baulig  <martin@ximian.com>
3936
3937         * generic.cs (Constraints): Completed error checking, use correct
3938         error numbers.
3939
3940 2004-03-29  Martin Baulig  <martin@ximian.com>
3941
3942         * delegate.cs (Delegate.VerifyMethod): Infer type arguments.
3943
3944         * expression.cs (Invocation.InferTypeArguments): Added overloaded
3945         public version which takes a `ParameterData pd' instead of an
3946         `ArrayList args'.
3947
3948 2004-03-29  Martin Baulig  <martin@ximian.com>
3949
3950         * typemanager.cs (TypeManager.IsGenericMethod): Take a MethodBase,
3951         not a MethodInfo.       
3952
3953 2004-03-29  Martin Baulig  <martin@ximian.com>
3954
3955         * expression.cs (Argument.ResolveMethodGroup): If we're a
3956         ConstructedType, call GetMemberAccess() on it.  
3957
3958 2004-03-29  Martin Baulig  <martin@ximian.com>
3959
3960         * class.cs (MethodBase.CheckGenericOverride): New abstract method.
3961         (MethodCore.CheckGenericOverride): When overriding a generic
3962         method, check whether the constraints match.
3963
3964         * support.cs (GenericConstraints): New public interface.
3965         (ParameterData.GenericConstraints): New public method.
3966
3967         * parameter.cs (Parameter.Resolve): Check whether we're a generic
3968         method parameter and compute our constraints if appropriate.
3969         (Parameter.GenericConstraints): New public property.
3970
3971         * generic.cs (Constraints): Implement GenericConstraints.
3972
3973 2004-03-29  Martin Baulig  <martin@ximian.com>
3974
3975         * decl.cs (MemberCache.FindMemberToOverride): Use
3976         `paramTypes [j].Equals (cmpAttrs [j])' instead of `=='.
3977
3978 2004-03-29  Martin Baulig  <martin@ximian.com>
3979
3980         * generic.cs (GenericMethod.Define): Resolve our type parameters.
3981
3982 2004-03-29  Martin Baulig  <martin@ximian.com>
3983
3984         * cs-parser.jay: Report CS0080 instead of -200 ("Constraints are
3985         not allowed on non-generic declarations").
3986
3987 2004-03-29  Martin Baulig  <martin@ximian.com>
3988
3989         * expression.cs (Invocation.InferTypeArguments): Added overloaded
3990         public version of this method.
3991
3992         * class.cs (MethodCore.IsDuplicateImplementation): Use
3993         Invocation.InferTypeArguments() to check this.
3994
3995 2004-03-29  Martin Baulig  <martin@ximian.com>
3996
3997         * convert.cs: Use TypeManager.IsDelegateType() instead of
3998         comparing types correctly.
3999
4000 2004-03-29  Martin Baulig  <martin@ximian.com>
4001
4002         * convert.cs: Use TypeManager.IsSubclassOf() instead of comparing
4003         types directly to make it work for generic instances.
4004
4005         * typemanager.cs (TypeManager.IsSubclassOf): New static method.
4006
4007 2004-03-29  Martin Baulig  <martin@ximian.com>
4008
4009         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Added
4010         support for arrays.     
4011
4012 2004-03-24  Martin Baulig  <martin@ximian.com>
4013
4014         * decl.cs (DeclSpace.FindType): Also use
4015         TypeManager.CheckGeneric() for types from the using clauses.
4016
4017 2004-03-23  Martin Baulig  <martin@ximian.com>
4018
4019         * expression.cs (Invocation.OverloadResolve): Added `bool
4020         may_fail' argument and use it instead of the Location.IsNull() hack.
4021
4022 2004-03-23  Martin Baulig  <martin@ximian.com>
4023
4024         * expression.cs (Invocation.InferType): Use correct type inference
4025         rules here.     
4026
4027 2004-03-23  Martin Baulig  <martin@ximian.com>
4028
4029         * ecore.cs (MethodGroupExpr.Name): Use
4030         TypeManager.CSharpSignature() instead of just the name.
4031
4032         * expression.cs (Invocation.OverloadResolve): Provide better error
4033         reporting.
4034         (Invocation.DoResolve): OverloadResolve() never returns null
4035         without reporting an error, so removed the error -6 reporting here.
4036
4037 2004-03-23  Martin Baulig  <martin@ximian.com>
4038
4039         * typemanager.cs (TypeManager.GetMethodFlags): Fixed the FIXME for
4040         generic methods.
4041
4042         * cs-parser.jay (delegate_declaration): Support generic delegates.
4043
4044         * delegate.cs: Support generic delegates.
4045
4046 2004-03-22  Martin Baulig  <martin@ximian.com>
4047
4048         * expression.cs (Invocation.InferParamsTypeArguments): New static
4049         method; does type inference for params arguments.
4050
4051 2004-03-21  Martin Baulig  <martin@ximian.com>
4052
4053         * typemanager.cs (TypeManager.IsGenericMethod): New public static
4054         method; checks whether a method is a generic method.    
4055
4056         * expression.cs (Invocation.InferTypeArguments): New static method;
4057         infer type arguments for generic method invocation.
4058
4059         * ecore.cs (MethodGroupExpr.HasTypeArguments): New public
4060         property; we set this to true if we're resolving a generic method
4061         invocation and the user specified type arguments, ie. we're not
4062         doing type inference.
4063
4064 2004-03-20  Martin Baulig  <martin@ximian.com>
4065
4066         * class.cs (MethodData.DeclaringType): New public property.
4067         (MethodData.Define): Set DeclaringType here.
4068         (Operator.Define): Use OperatorMethod.MethodData.DeclaringType
4069         instead of OperatorMethodBuilder.DeclaringType.
4070
4071 2004-03-20  Martin Baulig  <martin@ximian.com>
4072
4073         * cs-tokenizer.cs (xtoken): Return a special
4074         Token.DEFAULT_OPEN_PARENS for "`default' followed by open parens".
4075
4076         * cs-parser.jay (default_value_expression): Switch to the new
4077         syntax (14.5.13).
4078
4079 2004-03-19  Martin Baulig  <martin@ximian.com>
4080
4081         * decl.cs (MemberName): New class.  We use this to "construct"
4082         namespace_or_type_name's.
4083
4084         * generics.cs (TypeArguments.GetDeclarations): New public method;
4085         returns the type arguments as a string[] and reports a CS0081 if
4086         one of them is not an identifier.
4087
4088         * class.cs (MemberBase): The .ctor now takes the name as a
4089         MemberName instead of a string.
4090         (MemberBase.ExplicitInterfaceName): Changed type from string to
4091         Expression.
4092         (MemberBase.DoDefine): If we're an explicit implementation, the
4093         InterfaceType may be a generic instance.
4094
4095         * cs-parser.jay (namespace_or_type_name): Return a MemberName.
4096         (namespace_name): Call MemberName.GetName () to transform the
4097         MemberName into a string and ensure we don't have any type
4098         arguments.
4099         (type_name): Call MemberName.GetTypeExpression() to transfrom the
4100         MemberName into an expression.
4101         (method_header): Use namespace_or_type_name instead of member_name.     
4102
4103 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
4104
4105         * rootcontext.cs: Add new types to the boot resolution.
4106
4107         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
4108         MulticastDelegate is not allowed.
4109
4110         * typemanager.cs: Add new types to lookup: System.TypedReference
4111         and ArgIterator.
4112
4113         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
4114         check for TypedReference or ArgIterator, they are not allowed. 
4115
4116         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
4117         makes us properly catch 1510 in some conditions (see bug 56016 for
4118         details). 
4119
4120 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
4121
4122         * CryptoConvert.cs: update from corlib version
4123         with endian fixes.
4124
4125 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
4126
4127         * class.cs (Indexer.Define): Check indexername declaration
4128
4129 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
4130
4131         * attribute.cs (IsClsCompliant): Fixed problem with handling
4132         all three states (compliant, not-compliant, undetected).
4133
4134 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
4135
4136         * attribute.cs (Attribute): Location is now public.
4137         (Resolve): Store resolved arguments (pos_values) in attribute class.
4138         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
4139         (GetClsCompliantAttributeValue): New method that gets
4140         CLSCompliantAttribute value.
4141         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
4142         if exists else null.
4143         (AttributeTester): New class for CLS-Compliant verification routines.
4144
4145         * class.cs (Emit): Add CLS-Compliant verification.
4146         (Method.GetSignatureForError): Implemented.
4147         (Constructor.GetSignatureForError): Implemented
4148         (Constructor.HasCompliantArgs): Returns if constructor has
4149         CLS-Compliant arguments.
4150         (Constructor.Emit): Override.
4151         (Construcor.IsIdentifierClsCompliant): New method; For constructors
4152         is needed to test only parameters.
4153         (FieldBase.GetSignatureForError): Implemented.
4154         (TypeContainer): New member for storing base interfaces.
4155         (TypeContainer.FindMembers): Search in base interfaces too.
4156
4157         * codegen.cs (GetClsComplianceAttribute): New method that gets
4158         assembly or module CLSCompliantAttribute value.
4159         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
4160         for assembly.
4161         (ModuleClass.Emit): Add error 3012 test.
4162
4163         * const.cs (Emit): Override and call base for CLS-Compliant tests.
4164
4165         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
4166         state for all decl types.
4167         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
4168         if CLS-Compliant tests are required.
4169         (IsClsCompliaceRequired): New method. Analyze whether code
4170         must be CLS-Compliant.
4171         (IsExposedFromAssembly): New method. Returns true when MemberCore
4172         is exposed from assembly.
4173         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
4174         value or gets cached value.
4175         (HasClsCompliantAttribute): New method. Returns true if MemberCore
4176         is explicitly marked with CLSCompliantAttribute.
4177         (IsIdentifierClsCompliant): New abstract method. This method is
4178         used to testing error 3005.
4179         (IsIdentifierAndParamClsCompliant): New method. Common helper method
4180         for identifier and parameters CLS-Compliant testing.
4181         (VerifyClsCompliance): New method. The main virtual method for
4182         CLS-Compliant verifications.
4183         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
4184         null. I don't know why is null (too many public members !).
4185         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
4186         and get value of first CLSCompliantAttribute that found.
4187
4188         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
4189         (VerifyClsCompliance): Override and add extra tests.
4190
4191         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
4192         clscheck- disable CLS-Compliant verification event if assembly is has
4193         CLSCompliantAttribute(true).
4194
4195         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
4196         ApllyAttribute is now called in emit section as in the other cases.
4197         Possible future Emit integration.
4198         (IsIdentifierClsCompliant): New override.
4199         (VerifyClsCompliance): New override.
4200         (GetEnumeratorName): Returns full enum name.
4201
4202         * parameter.cs (GetSignatureForError): Implemented.
4203
4204         * report.cs (WarningData): New struct for Warning message information.
4205         (LocationOfPreviousError): New method.
4206         (Warning): New method. Reports warning based on the warning table.
4207         (Error_T): New method. Reports error based on the error table.
4208
4209         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
4210         verifications are done here.
4211
4212         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
4213
4214         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
4215         CLSCompliantAttribute.
4216         (all_imported_types): New member holds all imported types from other
4217         assemblies.
4218         (LoadAllImportedTypes): New method fills static table with exported types
4219         from all referenced assemblies.
4220         (Modules): New property returns all assembly modules.
4221
4222 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
4223
4224         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
4225         throwing a parser error.
4226
4227         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
4228         which removes the hardcoded get_/set_ prefixes for properties, as
4229         IL allows for the properties to be named something else.  
4230
4231         Bug #56013
4232
4233         * expression.cs: Do not override operand before we know if it is
4234         non-null.  Fix 56207
4235
4236 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
4237
4238         * typemanager.cs: support for pinned variables.
4239
4240 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
4241
4242         * decl.cs, typemanager.cs: Avoid using an arraylist
4243         as a buffer if there is only one result set.
4244
4245 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
4246
4247         * expression.cs: Make sure you cant call a static method
4248         with an instance expression, bug #56174.
4249
4250 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
4251
4252         * class.cs (IsDuplicateImplementation): Improve error reporting to
4253         flag 663 (method only differs in parameter modifier).
4254
4255         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
4256         in preprocessor directives.
4257
4258         * location.cs (LookupFile): Allow for the empty path.
4259
4260         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
4261         better approach for some of that patch, but its failing with the
4262         CharSet enumeration.  For now try/catch will do.
4263
4264         * typemanager.cs: Do not crash if a struct does not have fields.
4265         Fixes 56150.
4266
4267 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
4268
4269         * expression.cs: cs0213, cant fix a fixed expression.
4270         fixes 50231.
4271
4272 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
4273
4274         * cs-parser.jay: detect invalid embeded statements gracefully.
4275         bug #51113.
4276
4277 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
4278
4279         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
4280         As a regex:
4281         s/
4282         the invocation type may not be a subclass of the tye of the item/
4283         The type of the item must be a subclass of the invocation item.
4284         /g
4285
4286         Fixes bug #50820.
4287
4288 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
4289
4290         * attribute.cs: Added methods to get a string and a bool from an
4291         attribute. Required to information from AssemblyKeyFileAttribute,
4292         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
4293         * codegen.cs: Modified AssemblyName creation to include support for
4294         strongnames. Catch additional exceptions to report them as CS1548.
4295         * compiler.csproj: Updated include CryptoConvert.cs.
4296         * compiler.csproj.user: Removed file - user specific configuration.
4297         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
4298         Mono.Security assembly. The original class is maintained and tested in
4299         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
4300         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
4301         like CSC 8.0 (C# v2) supports.
4302         * Makefile: Added CryptoConvert.cs to mcs sources.
4303         * rootcontext.cs: Added new options for strongnames.
4304
4305 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
4306
4307         * driver.cs: For --expect-error, report error code `2'
4308         if the program compiled with no errors, error code `1' if
4309         it compiled with an error other than the one expected.
4310
4311 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
4312
4313         * compiler.csproj: Updated for Visual Studio .NET 2003.
4314         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
4315         * compiler.sln: Updated for Visual Studio .NET 2003.
4316
4317 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
4318
4319         * expression.cs: Fix bug #47234. We basically need to apply the
4320         rule that we prefer the conversion of null to a reference type
4321         when faced with a conversion to 'object' (csc behaviour).
4322
4323 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
4324
4325         * statement.cs: Shorter form for foreach, eliminates
4326         a local variable. r=Martin.
4327
4328 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
4329
4330         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
4331         checks if we can use brtrue/brfalse to test for 0.
4332         * expression.cs: use the above in the test for using brtrue/brfalse.
4333         cleanup code a bit.
4334
4335 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
4336
4337         * expression.cs: Rewrite string concat stuff. Benefits:
4338
4339         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
4340         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
4341         rather than a concat chain.
4342
4343         * typemanager.cs: Add lookups for more concat overloads.
4344
4345 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
4346
4347         * expression.cs: Emit shorter il code for array init.
4348
4349         newarr
4350         dup
4351         // set 1
4352
4353         // set 2
4354
4355         newarr
4356         stloc.x
4357
4358         ldloc.x
4359         // set 1
4360
4361         ldloc.x
4362         // set 2
4363
4364 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
4365
4366         * statement.cs: Before, two switch blocks would be merged if the
4367         total size of the blocks (end_item - begin_item + 1) was less than
4368         two times the combined sizes of the blocks.
4369
4370         Now, it will only merge if after the merge at least half of the
4371         slots are filled.
4372
4373         fixes 55885.
4374
4375 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
4376
4377         * class.cs : csc build fix for GetMethods(). See bug #52503.
4378
4379 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
4380
4381         * expression.cs: Make sure fp comparisons work with NaN.
4382         This fixes bug #54303. Mig approved this patch a long
4383         time ago, but we were not able to test b/c the runtime
4384         had a related bug.
4385
4386 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
4387
4388         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
4389
4390 2004-03-19  Martin Baulig  <martin@ximian.com>
4391
4392         * class.cs (MemberCore.IsDuplicateImplementation): Check whether
4393         two overloads may unify for some type parameter substitutions and
4394         report a CS0408 if appropriate.
4395
4396 2004-03-19  Martin Baulig  <martin@ximian.com>
4397
4398         * class.cs (MemberCore.IsDuplicateImplementation): Report the
4399         error here and not in our caller.
4400
4401 2004-03-19  Martin Baulig  <martin@ximian.com>
4402
4403         * interface.cs: Completely killed this file.
4404         (Interface): We're now a TypeContainer and live in class.cs.
4405
4406         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
4407         argument; we're now also called for interfaces.
4408         (TypeContainer.DefineMembers): Allow this method being called
4409         multiple times.
4410         (TypeContainer.GetMethods): New public method; formerly known as
4411         Interface.GetMethod().  This is used by PendingImplementation.
4412         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
4413         it's now private and non-static.
4414         (Interface): Moved this here; it's now implemented similar to
4415         Class and Struct.
4416         (Method, Property, Event, Indexer): Added `bool is_interface'
4417         argument to their .ctor's.
4418         (MemberBase.IsInterface): New public field.
4419
4420         * cs-parser.jay: Create normal Method, Property, Event, Indexer
4421         instances instead of InterfaceMethod, InterfaceProperty, etc.
4422         (opt_interface_base): Removed; we now use `opt_class_base' instead.
4423         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
4424
4425 2004-03-19  Martin Baulig  <martin@ximian.com>
4426
4427         * class.cs (MethodCore.IsDuplicateImplementation): New private
4428         method which does the CS0111 checking.
4429         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
4430         Use IsDuplicateImplementation().
4431
4432 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
4433
4434         * decl.cs (FindMemberToOverride): New method to find the correct
4435         method or property to override in the base class.
4436         * class.cs
4437             - Make Method/Property use the above method to find the
4438               version in the base class.
4439             - Remove the InheritableMemberSignatureCompare as it is now
4440               dead code.
4441
4442         This patch makes large code bases much faster to compile, as it is
4443         O(n) rather than O(n^2) to do this validation.
4444
4445         Also, it fixes bug 52458 which is that nested classes are not
4446         taken into account when finding the base class member.
4447
4448         Reviewed/Approved by Martin.
4449
4450 2004-03-17  Martin Baulig  <martin@ximian.com>
4451
4452         * expression.cs (MemberAccess.DoResolve): Take the parent's number
4453         of type arguments into account; use the `real_num_type_args'
4454         approach like in DoResolveAsTypeStep().
4455
4456         * generic.cs (GenericMemberAccess.DoResolve): Make this work for
4457         nested types.
4458
4459 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
4460
4461         * interface.cs: In all interface classes removed redundant
4462         member initialization.
4463
4464 2004-03-16  Martin Baulig  <martin@ximian.com>
4465
4466         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
4467
4468 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
4469
4470         * decl.cs (DefineTypeAndParents): New helper method to define a
4471         type's containers before the type itself is defined;  This is a
4472         bug exposed by the recent changes to Windows.Forms when an
4473         implemented interface was defined inside a class that had not been
4474         built yet.   
4475
4476         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
4477
4478         (Check): Loop correctly to report errors modifiers
4479         (UNSAFE was not in the loop, since it was the same as TOP).
4480
4481         * interface.cs: Every interface member now takes a ModFlags,
4482         instead of a "is_new" bool, which we set on the base MemberCore. 
4483
4484         Every place where we called "UnsafeOk" in the interface, now we
4485         call the proper member (InterfaceMethod.UnsafeOK) instead to get
4486         the unsafe settings from the member declaration instead of the
4487         container interface. 
4488
4489         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
4490
4491         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
4492         `set_indexer_name' to the pending bits (one per type).
4493
4494         We fixed a bug today that was picking the wrong method to
4495         override, since for properties the existing InterfaceMethod code
4496         basically ignored the method name.  Now we make sure that the
4497         method name is one of the valid indexer names.
4498
4499 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
4500  
4501         * support.cs (SeekableStreamReader): Keep track of stream byte
4502         positions and don't mix them with character offsets to the buffer.
4503
4504         Patch from Gustavo Giráldez
4505
4506 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
4507
4508         * interface.cs (InterfaceSetGetBase): Removed double member
4509         initialization, base class does it as well.
4510
4511 2004-03-13  Martin Baulig  <martin@ximian.com>
4512
4513         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
4514         when compiling corlib.
4515
4516 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
4517
4518         * convert.cs (ExplicitConversion): We were reporting an error on
4519         certain conversions (object_type source to a value type, when the
4520         expression was `null') before we had a chance to pass it through
4521         the user defined conversions.
4522
4523         * driver.cs: Replace / and \ in resource specifications to dots.
4524         Fixes 50752
4525
4526         * class.cs: Add check for duplicate operators.  Fixes 52477
4527
4528 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
4529
4530         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
4531         that are in the middle of the statements, not only at the end.
4532         Fixes #54987
4533
4534         * class.cs (TypeContainer.AddField): No longer set the
4535         `HaveStaticConstructor' flag, now we call it
4536         `UserDefineStaticConstructor' to diferentiate the slightly
4537         semantic difference.
4538
4539         The situation is that we were not adding BeforeFieldInit (from
4540         Modifiers.TypeAttr) to classes that could have it.
4541         BeforeFieldInit should be set to classes that have no static
4542         constructor. 
4543
4544         See:
4545
4546         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
4547
4548         And most importantly Zoltan's comment:
4549
4550         http://bugzilla.ximian.com/show_bug.cgi?id=44229
4551
4552         "I think beforefieldinit means 'it's ok to initialize the type sometime 
4553          before its static fields are used', i.e. initialization does not need
4554          to be triggered by the first access to the type. Setting this flag
4555          helps the JIT to compile better code, since it can run the static
4556          constructor at JIT time, and does not need to generate code to call it
4557          (possibly lots of times) at runtime. Unfortunately, mcs does not set
4558          this flag for lots of classes like String. 
4559          
4560          csc sets this flag if the type does not have an explicit static 
4561          constructor. The reasoning seems to be that if there are only static
4562          initalizers for a type, and no static constructor, then the programmer
4563          does not care when this initialization happens, so beforefieldinit
4564          can be used.
4565          
4566          This bug prevents the AOT compiler from being usable, since it 
4567          generates so many calls to mono_runtime_class_init that the AOT code
4568          is much slower than the JITted code. The JITted code is faster, 
4569          because it does not generate these calls if the vtable is type is
4570          already initialized, which is true in the majority of cases. But the
4571          AOT compiler can't do this."
4572
4573 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
4574
4575         * class.cs (MethodData.Emit): Refactor the code so symbolic
4576         information is generated for destructors;  For some reasons we
4577         were taking a code path that did not generate symbolic information
4578         before. 
4579
4580 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
4581
4582         * class.cs: Create a Constructor.CheckBase method that
4583         takes care of all validation type code. The method
4584         contains some code that was moved from Define.
4585
4586         It also includes new code that checks for duplicate ctors.
4587         This fixes bug #55148.
4588
4589 2004-03-09  Joshua Tauberer <tauberer@for.net>
4590
4591         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
4592         a { ... }-style array creation invokes EmitStaticInitializers
4593         which is not good for reference-type arrays.  String, decimal
4594         and now null constants (NullCast) are not counted toward
4595         static initializers.
4596
4597 2004-03-05  Martin Baulig  <martin@ximian.com>
4598
4599         * location.cs (SourceFile.HasLineDirective): New public field;
4600         specifies whether the file contains or is referenced by a "#line"
4601         directive.
4602         (Location.DefineSymbolDocuments): Ignore source files which
4603         either contain or are referenced by a "#line" directive.        
4604
4605 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
4606
4607         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
4608         direct access to our parent, so check the method inline there.
4609
4610 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
4611
4612         * expression.cs (Invocation.EmitCall): Miguel's last commit
4613         caused a regression. If you had:
4614
4615             T t = null;
4616             t.Foo ();
4617
4618         In Foo the implict this would be null.
4619
4620 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
4621
4622         * expression.cs (Invocation.EmitCall): If the method is not
4623         virtual, do not emit a CallVirt to it, use Call.
4624
4625         * typemanager.cs (GetFullNameSignature): Improve the method to
4626         cope with ".ctor" and replace it with the type name.
4627
4628         * class.cs (ConstructorInitializer.Resolve): Now the method takes
4629         as an argument the ConstructorBuilder where it is being defined,
4630         to catch the recursive constructor invocations.
4631
4632 2004-03-16  Martin Baulig  <martin@ximian.com>
4633
4634         * expression.cs (MemberAccess.DoResolve): If `expr' resolved to a
4635         ConstructedType, call ResolveType() on it to get the type rather
4636         than just using `expr.Type'.
4637
4638 2004-03-16  Martin Baulig  <martin@ximian.com>
4639
4640         * generics.cs (ConstructedType.GetMemberAccess): Take the
4641         EmitContext instead on the TypeExpr and use
4642         ec.TypeContainer.CurrentType/ec.ContainerType.
4643
4644 2004-03-16  Martin Baulig  <martin@ximian.com>
4645
4646         * ecore.cs (SimpleName.DoResolveAsTypeStep): Lookup type
4647         parameters before aliases.
4648
4649 2004-03-16  Martin Baulig  <martin@ximian.com>
4650
4651         * typemanager.cs (TypeManager.MayBecomeEqualGenericInstances):
4652         New oublic function; checks whether two generic instances may become
4653         equal under some instantiations (26.3.1).
4654
4655         * class.cs (TypeContainer.Define): Call
4656         TypeManager.MayBecomeEqualGenericInstances() and report CS0695 on
4657         error.
4658
4659 2004-03-16  Martin Baulig  <martin@ximian.com>
4660
4661         * class.cs (TypeContainer.GetClassBases): Moved
4662         Error_TypeParameterAsBase() here and also check whether the base
4663         class is not an attribute.
4664
4665 2004-03-16  Martin Baulig  <martin@ximian.com>
4666
4667         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
4668
4669 2004-03-16  Martin Baulig  <martin@ximian.com>
4670
4671         * class.cs (Error_TypeParameterAsBase): Use correct error number
4672         here (CS0689).  
4673
4674 2004-03-16  Martin Baulig  <martin@ximian.com>
4675
4676         * decl.cs (DeclSpace.ResolveTypeExpr): Added more error checking
4677         for generics.
4678
4679         * generics.cs (ConstructedType.DoResolveAsTypeStep): Added better
4680         error reporting.
4681
4682 2004-03-15  Martin Baulig  <martin@ximian.com>
4683
4684         * typemanager.cs (TypeManager.GetFullName): New public method.
4685         (TypeManager.MemberLookup): Added `int_num_type_arguments'
4686         argument; only return members with the correct number of type
4687         arguments.
4688         (TypeManager.CheckGeneric): Allow -1 to bypass the check.
4689         (TypeManager.FilterWithClosure): Call CheckGeneric() to check
4690         whether the number of type arguments matches.
4691
4692         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Allow `expr'
4693         not being a ConstructedType; we can now do "typeof (Foo.Bar<U>)".
4694
4695         * expression.cs (MemberAccess): Added public `NumTypeArguments'
4696         field; it's set by the protected .ctor when we're actually a
4697         GenericMemberAccess.
4698         (MemberAccess.ResolveAsTypeStep): Compute the total number of type
4699         arguments and pass it to MemberLookupFinal ().
4700
4701         * ecore.cs (Expression.MemberLookup): Added `int
4702         num_type_arguments' argument; only return members with the correct
4703         number of type arguments.
4704         (Expression.MemberLookupFailed): Check whether the MemberLookup
4705         failed because we did not have the correct number of type
4706         arguments; report CS0305 in this case.
4707
4708         * decl.cs (DeclSpace.ResolveTypeExpr): Don't report an error if
4709         `e.ResolveAsTypeTerminal()' already did so.
4710
4711 2004-03-15  Martin Baulig  <martin@ximian.com>
4712
4713         * ecore.cs (Expression.ResolveLValue): Allow e.type being null if
4714         we're a ConstructedType; in this case, the caller must report an
4715         error (for instance CS0131).
4716
4717         * generic.cs (TypeArguments): Added Location argument to the .ctor.
4718         (TypeArguments.Resolve): Actually report errors here.
4719
4720 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
4721
4722         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
4723         `set_indexer_name' to the pending bits (one per type).
4724
4725         We fixed a bug today that was picking the wrong method to
4726         override, since for properties the existing InterfaceMethod code
4727         basically ignored the method name.  Now we make sure that the
4728         method name is one of the valid indexer names.
4729
4730 2004-03-15  Martin Baulig  <martin@ximian.com>
4731
4732         * typemanager.cs (TypeManager.IndexerPropertyName): Added support
4733         for generic instances.
4734
4735 2004-03-13  Martin Baulig  <martin@ximian.com>
4736
4737         * class.cs (TypeContainer.DefineType): Call
4738         TypeManager.AddUserType() immediately after creating the
4739         TypeBuilder; pass all type parameters when creating the
4740         CurrentType.
4741
4742         * decl.cs (DeclSpace.FindNestedType): New public method.
4743         (DeclSpace.FindType): Added `int num_type_args' argument; only
4744         return types with the correct number of type parameters.
4745         (DeclSpace.CountTypeParams): New public property.
4746
4747         * ecore.cs (SimpleName.ctor): Added overloaded version which takes
4748         the number of type parameters; defaults to zero.
4749
4750         * generic.cs (TypeArguments.Count): New public property.
4751         (ConstructedType.DoResolveAsTypeStep): First call
4752         ds.FindNestedType() to find out whether we're nested in the
4753         current generic type; in this case, we inherit all type parameters
4754         from the current class.
4755
4756         * rootcontext.cs (RootContext.NamespaceLookup): Added `int
4757         num_type_args' argument.
4758         (RootContext.LookupType): Added overloaded version which takes the
4759         number of type arguments; only return types with the correct
4760         number of type arguments.
4761
4762         * typemanager.cs (TypeManager.CheckGeneric): New public function;
4763         checks whether `Type t' has `int num_type_args'.
4764
4765 2004-03-13  Martin Baulig  <martin@ximian.com>
4766
4767         * generic.cs (GenericMethod.DefineType): New method; calls
4768         DefineType() on all the type parameters.
4769
4770         * class.cs (MethodData.ctor): Added `GenericMethod generic' argument.
4771         (MethodData.Define): If we're a generic method, call
4772         GenericMethod.DefineType() to define the type parameters.       
4773
4774 2004-03-10  Martin Baulig  <martin@ximian.com>
4775
4776         * pending.cs (Pending.InterfaceMethod): Use TypeManager.IsEqual()
4777         instead of IsAssignableFrom.    
4778
4779 2004-03-10  Martin Baulig  <martin@ximian.com>
4780
4781         * ecore.cs (FieldExpr.ctor): Use TypeManager.TypeToCoreType().
4782
4783         * support.cs (ParameterData.HasArrayParameter): New property.
4784         (ReflectionParameters.ctor): Take a MethodBase instead of a
4785         ParameterInfo[].  If we have any type parameters, get the generic
4786         method definition and ask it whether we have variable arguments.
4787
4788 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
4789
4790         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
4791         routines to check if a type is an enumerable/enumerator allow
4792         classes that implement the IEnumerable or IEnumerator interfaces.
4793
4794         * class.cs (Property, Operator): Implement IIteratorContainer, and
4795         implement SetYields.
4796
4797         (Property.Define): Do the block swapping for get_methods in the
4798         context of iterators.   We need to check if Properties also
4799         include indexers or not.
4800
4801         (Operator): Assign the Block before invoking the
4802         OperatorMethod.Define, so we can trigger the Iterator code
4803         replacement. 
4804
4805         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
4806         Property and Operator classes are not created when we parse the
4807         declarator but until we have the block completed, so we use a
4808         singleton SimpleIteratorContainer.Simple to flag whether the
4809         SetYields has been invoked.
4810
4811         We propagate this setting then to the Property or the Operator to
4812         allow the `yield' to function.
4813
4814 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
4815
4816         * codegen.cs: Implemented attribute support for modules.
4817         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
4818         Assembly/Module functionality.
4819
4820         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
4821         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
4822         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
4823
4824 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
4825
4826         * interface.cs (FindMembers): The operation is performed on all base
4827         interfaces and not only on the first. It is required for future CLS Compliance patch.
4828
4829 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
4830
4831         * statement.cs, codegen.cs:
4832         This patch deals with patterns such as:
4833
4834         public class List : IEnumerable {
4835
4836                 public MyEnumerator GetEnumerator () {
4837                         return new MyEnumerator(this);
4838                 }
4839
4840                 IEnumerator IEnumerable.GetEnumerator () {
4841                         ...
4842                 }
4843                 
4844                 public struct MyEnumerator : IEnumerator {
4845                         ...
4846                 }
4847         }
4848
4849         Before, there were a few things we did wrong:
4850         1) we would emit callvirt on a struct, which is illegal
4851         2) we emited ldarg when we needed to emit ldarga
4852         3) we would mistakenly call the interface methods on an enumerator
4853         type that derived from IEnumerator and was in another assembly. For example:
4854
4855         public class MyEnumerator : IEnumerator
4856
4857         Would have the interface methods called, even if there were public impls of the
4858         method. In a struct, this lead to invalid IL code.
4859
4860 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
4861
4862         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
4863           renamed to Emit.
4864
4865         * delegate.cs (Define): Fixed crash when delegate type is undefined.
4866
4867 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
4868
4869         * cs-parser.jay: Fix small regression: we were not testing V2
4870         compiler features correctly.
4871
4872         * interface.cs: If the emit context is null, then create one
4873
4874 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
4875
4876         * decl.cs (GetSignatureForError): New virtual method to get full name
4877           for error messages.
4878
4879         * attribute.cs (IAttributeSupport): New interface for attribute setting.
4880           Now it is possible to rewrite ApplyAttributes method to be less if/else.
4881
4882         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
4883           Duplicated members and code in these classes has been removed.
4884           Better encapsulation in these classes.
4885
4886 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
4887
4888         * assign.cs (Assign.DoResolve): When dealing with compound
4889         assignments, there is a new rule in ECMA C# 2.4 (might have been
4890         there before, but it is documented here) that states that in:
4891
4892         a op= b;
4893
4894         If b is of type int, and the `op' is a shift-operator, then the
4895         above is evaluated as:
4896
4897         a = (int) a op b 
4898
4899         * expression.cs (Binary.ResolveOperator): Instead of testing for
4900         int/uint/long/ulong, try to implicitly convert to any of those
4901         types and use that in pointer arithmetic.
4902
4903         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
4904         method to print information for from the type, not from the
4905         null-method we were given.
4906
4907 2004-02-01  Duncan Mak  <duncan@ximian.com>
4908
4909         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
4910         parsing for cmd, fixes bug #53694.
4911
4912 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
4913
4914         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
4915         in the member name duplication tests. Property and operator name duplication
4916         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
4917
4918 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
4919
4920         * interface.cs (PopulateMethod): Fixed crash when interface method
4921         returns not existing type (error test cs0246-3.cs).
4922
4923 2004-02-02  Ravi Pratap M <ravi@ximian.com>
4924
4925         * cs-parser.jay (interface_accessors): Re-write actions to also
4926         store attributes attached to get and set methods. Fix spelling
4927         while at it.
4928
4929         (inteface_property_declaration): Modify accordingly.
4930
4931         (InterfaceAccessorInfo): New helper class to store information to pass
4932         around between rules that use interface_accessors.
4933
4934         * interface.cs (Emit): Apply attributes on the get and set
4935         accessors of properties and indexers too.
4936
4937         * attribute.cs (ApplyAttributes): Modify accordingly to use the
4938         right MethodBuilder when applying attributes to the get and set accessors.
4939
4940 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
4941
4942         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
4943
4944 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
4945
4946         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
4947
4948 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
4949
4950         * cs-parser.jay: Remove YIELD token, instead use the new grammar
4951         changes that treat `yield' specially when present before `break'
4952         or `return' tokens.
4953
4954         * cs-tokenizer.cs: yield is no longer a keyword.
4955
4956 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
4957
4958         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
4959         setting for default constructors.
4960         For default constructors are almost every time set wrong Modifier. The
4961         generated IL code has been alright. But inside mcs this values was
4962         wrong and this was reason why several of my CLS Compliance tests
4963         failed.
4964
4965 2004-02-27  Martin Baulig  <martin@ximian.com>
4966
4967         * generics.cs (ConstructedType.ResolveType): Make the nested type
4968         stuff actually work.
4969
4970 2004-02-25  Martin Baulig  <martin@ximian.com>
4971
4972         * decl.cs (DeclSpace.CurrentTypeParameters): New protected
4973         property; returns the type parameters just from the current type,
4974         ie. with the ones from outer classes.
4975         (DeclSpace.LookupGeneric): First search in the current class, then
4976         in outer classes.
4977         (DeclSpace.initialize_type_params): When hiding a type parameter
4978         from an outer class, put it into the `type_param_list' anyways.
4979
4980         * expression.cs (MemberAccess.expr): Made this field protected.
4981
4982         * class.cs (TypeContainer.Define): The `CurrentType' just contains
4983         the type parameters from the current class.
4984
4985         * generic.cs (ConstructedType.ResolveType): Support nested generic
4986         types by taking the type parameters which we inherit from outer
4987         classes into account.
4988         (GenericMemberAccess.ResolveAsTypeStep): Override this and added
4989         support for nested generic types.
4990
4991 2004-02-23  Martin Baulig  <martin@ximian.com>
4992
4993         * decl.cs (DeclSpace.IsGeneric): Make this a property instead of a
4994         field and check whether we're nested inside a generic type.
4995         (DeclSpace.ResolveType): If we're resolving to a generic type
4996         definition, create a ConstructedType and return its resolved type.
4997         (DeclSpace.initialize_type_params): New private method;
4998         initializes the `type_param_list' field from the type parameters
4999         from this and all enclosing classes.
5000         (DeclSpace.TypeParameters): Call initialize_type_params() unless
5001         we're already initialized.
5002
5003 2004-02-23  Martin Baulig  <martin@ximian.com>
5004
5005         * class.cs (Method.Define): Create the generic method before
5006         calling DoDefine().
5007         (Memberbase.DoDefine): Added DeclSpace argument (in addition to
5008         the TypeContainer one); we use this for generic methods.
5009
5010         * decl.cs (CheckAccessLevel): If we're a GenericMethod, use our
5011         parent's TypeBuilder.
5012
5013 2004-02-18  Martin Baulig  <martin@ximian.com>
5014
5015         * ecore.cs (FieldExpr.DoResolveLValue): Use TypeManager.IsEqual()
5016         to check for equality.
5017
5018 2004-02-05  Martin Baulig  <martin@ximian.com>
5019
5020         * ecore.cs (FieldExpr.DoResolveLValue): If we have an
5021         `ec.TypeContainer.CurrentType', use it instead of
5022         `ec.ContainerType' to check whether we're in the type's ctor.
5023
5024 2004-01-29  Martin Baulig  <martin@ximian.com>
5025
5026         * expression.cs (Invocation.DoResolve): If we're a
5027         `ConstructedType', then we're actually a generic method, so
5028         rewrite the expr as a GenericMemberAccess.
5029
5030         * cs-parser.jay (member_name): Don't use `namespace_or_type_name'
5031         here; manually parse it into a string.
5032
5033 2004-01-28  Martin Baulig  <martin@ximian.com>
5034
5035         * typemanager.cs (TypeManager.IsEqual): New static method.
5036         (TypeManager.FilterWithClosure): Call TypeManager.IsEqual() to
5037         check for equality instead of using `=='.
5038
5039 2004-01-26  Martin Baulig  <martin@ximian.com>
5040
5041         * decl.cs (DeclSpace.CurrentType): New public field.
5042
5043         * expression.cs (This.ResolveBase): If we have an
5044         `ec.TypeContainer.CurrentType', use it instead of
5045         `ec.ContainerType'.
5046
5047         * class.cs (TypeContainer.DefineType): If we're a generic type,
5048         create the `CurrentType' (unresolved).
5049         (TypeContainer.GenericType): New private field.
5050         (TypeContainer.DefineMembers): If we have a `CurrentType', resolve
5051         it and store it in `GenericType' before creating the MemberCache.
5052         (TypeContainer.GetMembers): If we have a `GenericType', call
5053         TypeManager.FindMembers() on it.
5054
5055         * interface.cs (Interface.GenericType): New private field.
5056         (Interface.DefineType): If we're a generic type, create the
5057         `CurrentType' (unresolved).
5058         (Interface.DefineMembers): If we have a `CurrentType', resolve it
5059         and store it in `GenericType' before creating the MemberCache.
5060         (Interface.GetMembers): If we have a `GenericType', call
5061         TypeManager.FindMembers() on it.
5062
5063 2004-01-22  Martin Baulig  <martin@ximian.com>
5064
5065         * cs-parser.jay (namespace_or_type_name): Return an Expression,
5066         not a QualifiedIdentifier.  This is what `type_name_expression'
5067         was previously doing.
5068         (type_name_expression): Removed; the code is now in
5069         `namespace_or_type_name'.
5070         (qualified_identifier): Removed, use `namespace_or_type_name'
5071         instead.
5072         (QualifiedIdentifier): Removed this class.      
5073
5074 2004-01-22  Martin Baulig  <martin@ximian.com>
5075
5076         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
5077         not a string as alias name.
5078
5079 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
5080
5081         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
5082         #52730 bug, and instead compute correctly the need to use a
5083         temporary variable when requesting an address based on the
5084         static/instace modified of the field and the constructor.
5085  
5086 2004-01-21  Martin Baulig  <martin@ximian.com>
5087
5088         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
5089         class and namespace before looking up aliases.  Fixes #52517.
5090
5091 2004-01-21  Martin Baulig  <martin@ximian.com>
5092
5093         * flowanalysis.cs (UsageVector.Merge): Allow variables being
5094         assinged in a 'try'; fixes exception4.cs.
5095
5096 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
5097         * class.cs : Implemented parameter-less constructor for TypeContainer
5098
5099         * decl.cs: Attributes are now stored here. New property OptAttributes
5100
5101         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
5102
5103         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
5104
5105 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
5106
5107         * typemanager.cs (CSharpSignature): Now reports also inner class name.
5108           (CSharpSignature): New method for indexer and property signature.
5109
5110 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
5111
5112         * pending.cs (IsVirtualFilter): Faster implementation.
5113
5114 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
5115
5116         * typemanager.cs: Avoid inclusion of same assembly more than once.
5117
5118 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
5119
5120         * cs-parser.jay: Fixed problem where the last assembly attribute
5121           has been applied also to following declaration (class, struct, etc.)
5122           
5123 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
5124
5125         * class.cs: Added error CS0538, CS0539 reporting.
5126         Fixed crash on Microsoft runtime when field type is void.
5127
5128         * cs-parser.jay: Added error CS0537 reporting.
5129
5130         * pending.cs: Added error CS0535 reporting.
5131         Improved error report for errors CS0536, CS0534.
5132
5133 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
5134
5135         Merge a few bits from the Anonymous Method MCS tree.
5136
5137         * statement.cs (ToplevelBlock): New class for toplevel methods,
5138         will hold anonymous methods, lifted variables.
5139
5140         * cs-parser.jay: Create toplevel blocks for delegates and for
5141         regular blocks of code. 
5142
5143 2004-01-20  Martin Baulig  <martin@ximian.com>
5144
5145         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
5146         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
5147         and `NeedExplicitReturn'; added `IsLastStatement'.
5148         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
5149         have a `ReturnLabel' or we're not unreachable.
5150
5151         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
5152         child's reachability; don't just override ours with it.  Fixes
5153         #58058 (lluis's example).
5154         (FlowBranching): Added public InTryOrCatch(), InCatch(),
5155         InFinally(), InLoop(), InSwitch() and
5156         BreakCrossesTryCatchBoundary() methods.
5157
5158         * statement.cs (Return): Do all error checking in Resolve().
5159         Unless we are the last statement in a top-level block, always
5160         create a return label and jump to it.
5161         (Break, Continue): Do all error checking in Resolve(); also make
5162         sure we aren't leaving a `finally'.
5163         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
5164         statement in a top-level block.
5165         (Block.Flags): Added `IsDestructor'.
5166         (Block.IsDestructor): New public property.
5167
5168 2004-01-20  Martin Baulig  <martin@ximian.com>
5169
5170         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
5171
5172 2004-01-20  Martin Baulig  <martin@ximian.com>
5173
5174         * statement.cs (Statement.ResolveUnreachable): New public method.
5175         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
5176         (Block.Resolve): Resolve unreachable statements.
5177
5178 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
5179
5180         * expression.cs: We need to fix the case where we do
5181         not have a temp variable here.
5182
5183         * assign.cs: Only expression compound assignments need
5184         temporary variables.
5185
5186 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
5187
5188         * flowanalysis.cs: Reduce memory allocation in a few ways:
5189           - A block with no variables should not allocate a bit
5190             vector for itself.
5191           - A method with no out parameters does not need any tracking
5192             for assignment of the parameters, so we need not allocate
5193             any data for it.
5194           - The arrays:
5195                 public readonly Type[] VariableTypes;
5196                 public readonly string[] VariableNames;
5197             Are redundant. The data is already stored in the variable
5198             map, so we need not allocate another array for it.
5199           - We need to add alot of checks for if (params | locals) == null
5200             due to the first two changes.
5201
5202 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
5203
5204         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
5205         implement IMemoryLocation, we store a copy on a local variable and
5206         take the address of it.  Patch from Benjamin Jemlich
5207
5208         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
5209         to use a special "type_name_expression" rule which reduces the
5210         number of "QualifiedIdentifier" classes created, and instead
5211         directly creates MemberAccess expressions.
5212
5213 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
5214
5215         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
5216         that fixes #52853.  Null literal assignment to ValueType
5217
5218         * class.cs (MethodData.Emit): Instead of checking the name of the
5219         method to determine if its a destructor, create a new derived
5220         class from Method called Destructor, and test for that.  
5221
5222         * cs-parser.jay: Create a Destructor object instead of a Method.  
5223
5224         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
5225
5226         Fixes: 52933
5227
5228 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
5229
5230         * expression.cs (Binary.ResolveOperator): Perform an implicit
5231         conversion from MethodGroups to their delegate types on the
5232         Addition operation.
5233
5234         * delegate.cs: Introduce a new class DelegateCreation that is the
5235         base class for `NewDelegate' and `ImplicitDelegateCreation',
5236         factor some code in here.
5237
5238         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
5239         conversion from MethodGroups to compatible delegate types. 
5240
5241         * ecore.cs (Expression.Resolve): Do not flag error 654
5242         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
5243         we allow conversions from MethodGroups to delegate types now.
5244
5245         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
5246         assignments in v2 either.
5247
5248 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
5249
5250         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
5251         static read-only fields in ctors.
5252
5253         Applied patch from Benjamin Jemlich 
5254
5255         * expression.cs (UnaryMutator): Avoid leaking local variables. 
5256
5257 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
5258
5259         * cs-tokenizer.cs (IsCastToken): Allow the various native types
5260         here to return true, as they can be used like this:
5261
5262                 (XXX) int.MEMBER ()
5263
5264         Fixed 49836 and all the other dups
5265
5266 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
5267
5268         * driver.cs: Implement /win32res and /win32icon.
5269
5270 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
5271
5272         * cs-parser.jay: Add a rule to improve error handling for the
5273         common mistake of placing modifiers after the type.
5274
5275 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
5276
5277         * cs-parser.jay (interface_event_declaration): Catch
5278         initialization of events on interfaces, and report cs0068
5279
5280         * cs-parser.jay (interface_event_declaration): Catch
5281         initialization of events. 
5282
5283         * ecore.cs: Better report missing constructors.
5284
5285         * expression.cs (Binary.ResolveOperator): My previous bug fix had
5286         the error reporting done in the wrong place.  Fix.
5287
5288         * expression.cs (Binary.ResolveOperator): Catch the 
5289         operator + (E x, E y) error earlier, and later allow for implicit
5290         conversions in operator +/- (E e, U x) from U to the underlying
5291         type of E.
5292
5293         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
5294         52596, if the container class is abstract, the default constructor
5295         is protected otherwise its public (before, we were always public).
5296
5297         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
5298         fixed statement.
5299
5300         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
5301         Jemlich that fixes bug #52597, MCS was generating invalid code for
5302         idisposable structs.   Thanks to Ben for following up with this
5303         bug as well.
5304
5305 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
5306
5307         * driver.cs: Allow assemblies without code to be generated, fixes
5308         52230.
5309
5310 2004-01-07  Nick Drochak <ndrochak@gol.com>
5311
5312         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
5313
5314 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
5315
5316         * cs-parser.jay: Add rules to improve error reporting if fields or
5317         methods are declared at the namespace level (error 116)
5318
5319         * Add rules to catch event add/remove
5320
5321 2004-01-04  David Sheldon <dave-mono@earth.li>
5322
5323   * expression.cs: Added matching ")" to error message for 
5324   CS0077
5325
5326 2004-01-03 Todd Berman <tberman@gentoo.org>
5327
5328         * ecore.cs, attribute.cs:
5329         Applying fix from #52429.
5330
5331 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
5332
5333         * ecore.cs, expression.cs, statement.cs:
5334         Total rewrite of how we handle branching. We
5335         now handle complex boolean expressions with fewer
5336         jumps. As well if (x == 0) no longer emits a ceq.
5337
5338         if (x is Foo) is much faster now, because we generate
5339         better code.
5340
5341         Overall, we get a pretty big improvement on our benchmark
5342         tests. The code we generate is smaller and more readable.
5343
5344         I did a full two-stage bootstrap. The patch was reviewed
5345         by Martin and Miguel.
5346
5347 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
5348
5349         * cs-parser.jay: Make primary_expression not take a QI.
5350         we dont need this because the member_access rule covers
5351         us here. So we replace the rule with just IDENTIFIER.
5352
5353         This has two good effects. First, we remove a s/r conflict.
5354         Second, we allocate many fewer QualifiedIdentifier objects.
5355
5356 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
5357
5358         * attribute.cs: Handle MarshalAs attributes as pseudo, and
5359         set the correct information via SRE. This prevents
5360         hanging on the MS runtime. Fixes #29374.
5361
5362 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
5363
5364         * convert.cs: correctly handle conversions to value types
5365         from Enum and ValueType as unboxing conversions.
5366
5367         Fixes bug #52569. Patch by Benjamin Jemlich.
5368
5369 2004-01-02  Ravi Pratap  <ravi@ximian.com>
5370
5371         * expression.cs (BetterConversion): Prefer int -> uint
5372         over int -> ulong (csc's behaviour). This fixed bug #52046.
5373
5374 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
5375
5376         * decl.cs (MemberCache.FindMembers): now returns a
5377         MemberInfo [].
5378
5379         * typemanager.cs: In general, go with with ^^.
5380         (CopyNewMethods): take an IList.
5381         (RealMemberLookup): Only allocate an arraylist
5382         if we copy from two sets of methods.
5383
5384         This change basically does two things:
5385         1) Fewer array lists allocated due to CopyNewMethods.
5386         2) the explicit cast in MemberList costed ALOT.
5387
5388 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
5389
5390         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
5391         a hashtable to avoid needless string allocations when an identifier is
5392         used more than once (the common case).
5393
5394 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
5395
5396         * pending.cs: MS's TypeBuilder.GetInterfaces ()
5397         is broken, it will not return anything. So, we
5398         have to use the information we have in mcs to
5399         do the task.
5400
5401         * typemanager.cs: Add a cache for GetInterfaces,
5402         since this will now be used more often (due to ^^)
5403
5404         (GetExplicitInterfaces) New method that gets the
5405         declared, not effective, interfaces on a type
5406         builder (eg, if you have interface IFoo, interface
5407         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
5408         { IBar }.
5409
5410         This patch makes MCS able to bootstrap itself on
5411         Windows again.
5412
5413 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
5414
5415         * expression.cs: Remove the Nop's that Miguel put
5416         in by mistake.
5417
5418 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
5419
5420         * report.cs, codegen.cs: Give the real stack trace to
5421         the error when an exception is thrown.
5422
5423 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
5424
5425         * decl.cs: only allocate hashtables for ifaces if 
5426         it is an iface!
5427
5428 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
5429
5430         * expression.cs: fix the error from cs0121-2.cs
5431         (a parent interface has two child interfaces that
5432         have a function with the same name and 0 params
5433         and the function is called through the parent).
5434
5435 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
5436
5437         * class.cs, rootcontext.cs, typmanager.cs: do not
5438         leak pointers.
5439
5440 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
5441
5442         * codegen.cs: remove stack for the ec flow branching.
5443         It is already a linked list, so no need.
5444
5445 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
5446
5447         * Makefile: Allow custom profiler here.
5448
5449 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
5450
5451         * typemanager.cs (LookupType):
5452           - Use a static char [], because split takes
5453             a param array for args, so it was allocating
5454             every time.
5455           - Do not store true in a hashtable, it boxes.
5456
5457 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
5458
5459         * flowanalysis.cs: bytify common enums.
5460
5461 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
5462
5463         * modifiers.cs: Add a new set of flags for the
5464         flags allowed on explicit interface impls.
5465         * cs-parser.jay: catch the use of modifiers in
5466         interfaces correctly.
5467         * class.cs: catch private void IFoo.Blah ().
5468
5469         All related to bug #50572.
5470
5471 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
5472
5473         * decl.cs: Rewrite the consistant accessability checking.
5474         Accessability is not linear, it must be implemented in
5475         a tableish way. Fixes #49704.
5476
5477 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
5478
5479         * expression.cs: Handle negation in a checked context.
5480         We must use subtraction from zero. Fixes #38674.
5481
5482 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
5483
5484         * class.cs: Ignore static void main in DLLs.
5485         * rootcontext.cs: Handle the target type here,
5486         since we are have to access it from class.cs
5487         * driver.cs: account for the above.
5488
5489 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
5490
5491         * report.cs: Give line numbers and files if available.
5492
5493 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
5494
5495         * driver.cs: Implement /addmodule.
5496
5497         * typemanager.cs:  Change 'modules' field so it now contains Modules not
5498         ModuleBuilders.
5499
5500 2003-12-20  Martin Baulig  <martin@ximian.com>
5501
5502         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
5503         (FieldBase.IsAssigned): Removed this field.
5504         (FieldBase.SetAssigned): New public method.
5505         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
5506
5507 2003-12-20  Martin Baulig  <martin@ximian.com>
5508
5509         * expression.cs (LocalVariableReference.DoResolve): Don't set
5510         `vi.Used' if we're called from DoResolveLValue().
5511
5512         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
5513         returns the usage vector it just merged into the current one -
5514         pass this one to UsageWarning().
5515         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
5516         of the `EmitContext', don't call this recursively on our children.
5517
5518 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
5519
5520         * driver.cs: Implement /target:module.
5521
5522 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
5523
5524         * support.cs (CharArrayHashtable): New helper class.
5525
5526         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
5527         char arrays, not strings, so we can avoid creating a string in
5528         consume_identifier if the identifier is a keyword.
5529
5530 2003-12-16  Martin Baulig  <martin@ximian.com>
5531
5532         * statement.cs (LocalInfo.Assigned): Removed this property.
5533         (LocalInfo.Flags): Removed `Assigned'.
5534         (LocalInfo.IsAssigned): New public method; takes the EmitContext
5535         and uses flow analysis.
5536         (Block.UsageWarning): Made this method private.
5537         (Block.Resolve): Call UsageWarning() if appropriate.
5538
5539         * expression.cs (LocalVariableReference.DoResolve): Always set
5540         LocalInfo.Used here.
5541
5542 2003-12-13  Martin Baulig  <martin@ximian.com>
5543
5544         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
5545         any value here; we're now using flow analysis to figure out
5546         whether a statement/block returns a value.
5547
5548 2003-12-13  Martin Baulig  <martin@ximian.com>
5549
5550         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
5551         working again.
5552         (FlowBranching.MergeFinally): Don't call
5553         `branching.CheckOutParameters()' here, this is called in
5554         MergeTopBlock().
5555         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
5556         when adding the `finally' vector.       
5557
5558 2003-12-13  Martin Baulig  <martin@ximian.com>
5559
5560         * flowanalysis.cs
5561         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
5562         actually work and also fix #48962.
5563
5564 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
5565
5566         * decl.cs: Do not check System.Object for nested types,
5567         since we know it does not have any. Big bang for buck:
5568
5569         BEFORE:
5570            Run 1:   8.35 seconds
5571            Run 2:   8.32 seconds
5572            corlib:  17.99 seconds
5573         AFTER:
5574            Run 1:   8.17 seconds
5575            Run 2:   8.17 seconds
5576            corlib:  17.39 seconds
5577
5578 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
5579
5580         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
5581         time we are returning 0 members, so we save alot here.
5582
5583 2003-12-11  Martin Baulig  <martin@ximian.com>
5584
5585         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
5586         `MergeChild()', also just take the `FlowBranching' as argument;
5587         call Merge() on it and return the result.
5588         (FlowBranching.Merge): We don't need to do anything if we just
5589         have one sibling.
5590
5591 2003-12-11  Martin Baulig  <martin@ximian.com>
5592
5593         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
5594         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
5595         Maurer for this idea.
5596
5597 2003-12-11  Martin Baulig  <martin@ximian.com>
5598
5599         * flowanalysis.cs (MergeResult): This class is now gone; we now
5600         use the `UsageVector' for this.  The reason for this is that if a
5601         branching just has one sibling, we don't need to "merge" them at
5602         all - that's the next step to do.
5603         (FlowBranching.Merge): We now return a `UsageVector' instead of a
5604         `MergeResult'.
5605
5606 2003-12-11  Martin Baulig  <martin@ximian.com>
5607
5608         Reworked flow analyis and made it more precise and bug-free.  The
5609         most important change is that we're now using a special `Reachability'
5610         class instead of having "magic" meanings of `FlowReturns'.  I'll
5611         do some more cleanups and optimizations and also add some more
5612         documentation this week.
5613
5614         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
5615         largely reworked this class.
5616         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
5617         the new `Reachability' class instead of having "magic" values here.
5618         (FlowBranching): We're now using an instance of `Reachability'
5619         instead of having separate `Returns', `Breaks' etc. fields.
5620
5621         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
5622         based on flow analysis; ignore the return value of block.Emit ().
5623
5624 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
5625
5626         * driver.cs typemanager.cs: Find the mono extensions to corlib even
5627         if they are private.
5628
5629 2003-12-09  Martin Baulig  <martin@ximian.com>
5630
5631         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
5632         call them directly on the UsageVector.
5633
5634 2003-12-09  Martin Baulig  <martin@ximian.com>
5635
5636         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
5637         Changed return type from `FlowReturns' to `Reachability'.
5638
5639 2003-12-09  Martin Baulig  <martin@ximian.com>
5640
5641         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
5642         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
5643         `Reachable' fields with a single `Reachability' one.
5644
5645 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
5646
5647         * class.cs (FindMembers): Remove foreach's.
5648
5649         Bootstrap times:
5650
5651         BEFORE
5652                 Run 1:   8.74 seconds
5653                 Run 2:   8.71 seconds
5654
5655         AFTER
5656                 Run 1:   8.64 seconds
5657                 Run 2:   8.58 seconds
5658
5659
5660 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
5661
5662         * cs-parser.jay:
5663         * gen-treedump.cs:
5664         * statement.cs:
5665         This patch does a few things:
5666                 1. EmptyStatement is now a singleton, so it is never reallocated.
5667                 2. All blah is EmptyStatement constructs have been changed to
5668                    blah == EmptyStatement.Value, which is much faster and valid
5669                    now that EmptyStatement is a singleton.
5670                 3. When resolving a block, rather than allocating a new array for
5671                    the non-empty statements, empty statements are replaced with
5672                    EmptyStatement.Value
5673                 4. Some recursive functions have been made non-recursive.
5674         Mainly the performance impact is from (3), however (1) and (2) are needed for
5675         this to work. (4) does not make a big difference in normal situations, however
5676         it makes the profile look saner.
5677
5678         Bootstrap times:
5679
5680         BEFORE
5681         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
5682         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
5683         Total memory allocated: 56397 KB
5684
5685         AFTER
5686         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
5687         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
5688         Total memory allocated: 55666 KB
5689
5690 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
5691
5692         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
5693         than the hashtable in a hashtable version
5694
5695         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
5696         we always end up concating a string. This results in a huge perf
5697         loss, because many strings have to be tracked by the GC. In this
5698         patch, we first use a hashtable that works with two keys, so that
5699         the strings do not need to be concat'ed.
5700
5701         Bootstrap times:
5702         BEFORE
5703                 Run 1:   8.74 seconds
5704                 Run 2:   8.71 seconds
5705
5706         AFTER
5707                 Run 1:   8.65 seconds
5708                 Run 2:   8.56 seconds
5709
5710 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
5711
5712         * Makefile: Add a new target `do-time' that does a quick and simple
5713         profile, leaving easy to parse output.
5714
5715 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
5716
5717         * codegen.cs (Init): Create the dynamic assembly with 
5718         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
5719
5720 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
5721
5722         * support.cs: Make the PtrHashtable use only one
5723         instance of its comparer.
5724
5725 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
5726
5727         * typemanager.cs: Fix lookup of GetNamespaces.
5728
5729 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
5730
5731         * expression.cs: Removed redundant line.
5732
5733         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
5734         ArrayLists, use for loops with bounds.  
5735
5736         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
5737         arraylist.
5738
5739         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
5740         arraylists, use for loop with bounds.
5741
5742         The above three changes give us a 0.071 second performance
5743         improvement out of 3.294 seconds down to 3.223.  On my machine
5744         the above changes reduced the memory usage by 1,387 KB during
5745         compiler bootstrap.
5746
5747         * cs-parser.jay (QualifiedIdentifier): New class used to represent
5748         QualifiedIdentifiers.  Before we created a new string through
5749         concatenation, and mostly later on, the result would be
5750         manipulated by DecomposeQI through string manipulation.
5751
5752         This reduced the compiler memory usage for bootstrapping from
5753         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
5754         compile times in 0.05 seconds.
5755
5756 2003-11-28  Dick Porter  <dick@ximian.com>
5757
5758         * support.cs: Do string compares with the Invariant culture.
5759
5760         * rootcontext.cs: 
5761         * gen-treedump.cs: 
5762         * expression.cs: 
5763         * driver.cs: 
5764         * decl.cs: 
5765         * codegen.cs: 
5766         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
5767         the comparison is done with the Invariant culture.
5768
5769 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
5770
5771         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
5772         GetEnumerator method.
5773
5774         (ProbeCollectionType): Iterate starting at the most specific type
5775         upwards looking for a GetEnumerator
5776
5777         * expression.cs: Shift count can be up to 31 for int/uint and 63
5778         for long/ulong.
5779
5780 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
5781
5782         * statement.cs (Block.LookupLabel): Also look for the label on the
5783         children blocks.  Use a hash table to keep track of visited
5784         nodes. 
5785
5786         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
5787         we actually did transform the other operand, otherwise fall back
5788         to the common codepath that casts to long.
5789
5790         * cs-tokenizer.cs: Use the same code pattern as the int case.
5791         Maybe I should do the parsing myself, and avoid depending on the
5792         Parse routines to get this done.
5793
5794 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
5795
5796         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
5797         which fixes bug 51347.  This time test it.
5798
5799         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
5800         attributes for example can not tell the difference between these.
5801         The difference was only a syntax feature of the language. 
5802
5803         * attribute.cs: Apply attributes to delegates.
5804
5805         * delegate.cs: Call the apply attributes method.
5806
5807 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
5808
5809         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
5810         comparing 0 vs Byte.MinValue, not the value
5811
5812         (ImplicitConversionRequired): When reporting a conversion error,
5813         use error 31 to print out the constant error instead of the
5814         simpler 29.
5815
5816         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
5817         which fixes bug 51347.
5818
5819 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
5820
5821         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
5822         which fixes the -warnaserror command line option.
5823
5824 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
5825
5826         * cfold.cs (DoNumericPromotions): During constant folding of
5827         additions on UIntConstant, special case intconstants with
5828         IntConstants like we do on the expression binary operator. 
5829
5830 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
5831
5832         * convert.cs (ImplicitReferenceConversion): We were missing a case
5833         (System.Enum are not value types or class types, so we need to
5834         classify them separatedly).
5835
5836         * driver.cs: We do not support error 2007.
5837
5838 2003-11-12 Jackson Harper <jackson@ximian.com>
5839
5840         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
5841         system directory. Also use the full file name so users can
5842         libraries names mscorlib-o-tron.dll in a non system dir.
5843         
5844 2004-01-04  David Sheldon <dave-mono@earth.li>
5845
5846         * expression.cs: Added matching ")" to error message for CS0077.
5847
5848 2003-12-19  Martin Baulig  <martin@ximian.com>
5849
5850         * typemanager.cs (TypeManager.IsEqualGenericType): New public
5851         static method; see documentation in the method.
5852         (TypeManager.IsSubclassOrNestedChild): Allow IsEqualGenericType().
5853
5854         * convert.cs (Convert.ImplicitReferenceConversion,
5855         Convert.ImplicitReferenceConversionExists): Add support for
5856         generic type declarations; see gen-36.cs.
5857
5858 2003-12-19  Martin Baulig  <martin@ximian.com>
5859
5860         * pending.cs (Pending.InterfaceMethod): Use
5861         `Type.IsAssignableFrom()' instead of `=='.
5862
5863 2003-12-18  Martin Baulig  <martin@ximian.com>
5864
5865         * decl.cs (DeclSpace.AsAccessible): Check for array, pointer and
5866         byref types first.
5867
5868         * convert.cs (Convert.ImplicitStandardConversionExists): Use
5869         `expr_type.Equals (target_type)' instead of `=='.
5870
5871 2003-12-08  Martin Baulig  <martin@ximian.com>
5872
5873         * generics.cs (Constraints.Types): Removed.
5874         (Constraints.Resolve): Just resolve everything to TypeExpr's, not
5875         to Type's.
5876         (Constraints.ResolveTypes): New public method; resolves the
5877         TypeExpr's to Type's.
5878         (TypeParameter.Define): TypeBuilder.DefineGenericParameter() no
5879         longer takes the constraints.
5880         (TypeParameter.DefineMethod): Likewise.
5881         (TypeParameter.DefineType): New public method.  Calls
5882         `TypeBuilder/MethodBuilder.SetGenericParameterConstraints()' to set
5883         the constraints.
5884
5885 2003-12-08  Martin Baulig  <martin@ximian.com>
5886
5887         * convert.cs (Convert.ImplicitConversionStandard): Use
5888         `expr_type.Equals (target_type)' instead of `=='.
5889
5890 2003-12-08  Martin Baulig  <martin@ximian.com>
5891
5892         * typemanager.cs (TypeManager.GetReferenceType): Call
5893         `Type.MakeByRefType ()'.
5894
5895 2003-12-08  Martin Baulig  <martin@ximian.com>
5896
5897         * cs-parser.jay, cs-tokenizer.cs: `where' is not a keyword, it
5898         just has some special meaning in some situations.  For instance,
5899         it is allowed to use `where' as the name of a variable etc.
5900
5901 2003-12-04  Martin Baulig  <martin@ximian.com>
5902
5903         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
5904         `Type.MakeArrayType()' for array types.
5905
5906 2003-11-18  Miguel de Icaza  <miguel@ximian.com>
5907
5908         * expression.cs (Invocation.VerifyArgumentsCompat): Remove
5909         debugging message.
5910
5911         (SizeOf.DoResolve): assign the `type_queried' field.  This gets
5912         corlib to compile.
5913
5914 2003-11-16  Martin Baulig  <martin@ximian.com>
5915
5916         * codegen.cs (EmitContext.IsGeneric): Removed.
5917
5918         * ecore.cs (SimpleName.ResolveAsTypeStep): Always call
5919         ResolveGeneric() on the DeclSpace.
5920
5921 2003-11-16  Martin Baulig  <martin@ximian.com>
5922
5923         * generic.cs (TypeArguments.Resolve):
5924         `Expression.ResolveAsTypeTerminal()' returns a TypeExpr; call
5925         `ResolveType()' on it to get the Type.
5926
5927 2003-11-15  Martin Baulig  <martin@ximian.com>
5928
5929         * generic.cs (ConstructedType.GetInterfaces): Override this.
5930
5931 2003-11-14  Martin Baulig  <martin@ximian.com>
5932
5933         * interface.cs (Interface.DefineType): Define all type parameters
5934         before adding the interfaces we inherit.
5935
5936 2003-11-11  Martin Baulig  <martin@ximian.com>
5937
5938         * generic.cs (ConstructedType.ResolveType): Always call
5939         `gt.BindGenericParameters (atypes)'; also if `args.HasTypeArguments'.
5940
5941 2003-11-10  Martin Baulig  <martin@ximian.com>
5942
5943         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
5944         (TypeManager.InitCoreTypes): Initialize them here, but instead of
5945         calling `ResolveType()' on them, directly assign their `Type'.
5946
5947 2003-11-08  Martin Baulig  <martin@ximian.com>
5948
5949         * generic.cs (ConstructedType): Override `IsClass' etc.
5950
5951 2003-11-08  Martin Baulig  <martin@ximian.com>
5952
5953         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
5954         return value and the `out parent' parameter.
5955         (TypeContainer.DefineType): Moved the CS0644 check into
5956         GetClassBases().  Don't pass the interface types to the
5957         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
5958         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
5959
5960         * ecore.cs (TypeExpr.IsAttribute): New property.
5961         (TypeExpr.GetInterfaces): New method.
5962
5963         * interface.cs (Interface.GetInterfaceTypeByName): Return a
5964         TypeExpr instead of a Type.
5965         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
5966         (Interface.DefineType): Don't pass the interface types to the
5967         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
5968         them later and then call `TypeBulider.AddInterfaceImplementation()'.
5969
5970         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
5971         instead of a `Type[]'.
5972         (TypeManager.RegisterBuilder): Likewise.
5973         (TypeManager.AddUserInterface): Likewise.
5974         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
5975         `Type[]' and also return a `TypeExpr[]'.
5976         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
5977
5978 2003-11-08  Martin Baulig  <martin@ximian.com>
5979
5980         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
5981         Expression.     
5982
5983 2003-11-08  Martin Baulig  <martin@ximian.com>
5984
5985         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
5986         TypeManager.ResolveExpressionTypes().
5987
5988         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
5989         instead of an Expression.
5990         (TypeExpr): This is now an abstract base class for `TypeExpression'.
5991         (TypeExpression): New public class; formerly known as `TypeExpr'.
5992
5993         * expression.cs (ComposedCast): Derive from TypeExpr.
5994
5995         * typemanager.cs (TypeManager.system_*_expr): These are now
5996         TypExpr's instead of Expression's.
5997         (TypeManager.ResolveExpressionTypes): New public static function;
5998         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
5999         of them.        
6000
6001 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
6002
6003         * expression.cs (New.DoResolve): Do not dereference value that
6004         might be a null return.
6005
6006         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
6007         sure that the constant value has the right type.  Fixes an
6008         unreported bug, similar to 50425.
6009
6010         * const.cs (Const.LookupConstantValue): Call
6011         ImplicitStandardConversionExists before doing a conversion to
6012         avoid havng the TypeManager.ChangeType do conversions.
6013
6014         Reduced the number of casts used
6015
6016         (Const.ChangeType): New routine to enable reuse of the constant
6017         type changing code from statement.
6018
6019         * typemanager.cs (ChangeType): Move common initialization to
6020         static global variables.
6021
6022         Fixes #50425.
6023
6024         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
6025         every value type to go through, even if it was void.  Fix that. 
6026
6027         * cs-tokenizer.cs: Use is_identifier_start_character on the start
6028         character of the define, and the is_identifier_part_character for
6029         the rest of the string.
6030
6031 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
6032
6033         * expression.cs (UnaryMutator.EmitCode): When I updated
6034         LocalVariableReference.DoResolve, I overdid it, and dropped an
6035         optimization done on local variable references.
6036
6037 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
6038
6039         * ecore.cs: Convert the return from Ldlen into an int.
6040
6041 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
6042
6043         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
6044         the accessibility, this is a special case for toplevel non-public
6045         classes (internal for instance).
6046
6047 2003-10-20  Nick Drochak <ndrochak@gol.com>
6048
6049         * ecore.cs: Fix typo and build.  Needed another right paren.
6050
6051 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
6052
6053         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
6054         `internal' case regular and protected, but not allowing protected
6055         to be evaluated later.  Bug 49840
6056
6057 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
6058
6059         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
6060         to kb.Nlast, and not the kb.nFirst to isolate the switch
6061         statement.
6062
6063         Extract the underlying type, so enumerations of long/ulong are
6064         treated like long/ulong.
6065
6066 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
6067
6068         * expression.cs (New): Overload the meaning of RequestedType to
6069         track the possible creation of the NewDelegate type, since
6070         DoResolve is invoked more than once for new constructors on field
6071         initialization.
6072
6073         See bugs: #48800 and #37014
6074
6075         * cs-parser.jay (declare_local_constants): Take an arraylist
6076         instead of a single constant.
6077
6078         (local_constant_declaration): It should take a
6079         constant_declarators, not a constant_declarator.  Fixes 49487
6080
6081         * convert.cs: Fix error report.
6082
6083 2003-10-13 Jackson Harper <jackson@ximian.com>
6084
6085         * typemanager.cs (TypeToCoreType): Add float and double this fixes
6086         bug #49611
6087         
6088 2003-11-03  Martin Baulig  <martin@ximian.com>
6089
6090         * expression.cs (ArrayAccess.GetStoreOpcode): Added
6091         `out bool has_type_arg'; if set, we need to pass the type to
6092         ig.Emit().
6093         (ArrayAccess.GetStoreOpcode, ArrayAccess.EmitLoadOpcode): Use
6094         Stelem_Any/Ldelem_Any for generic parameters.   
6095
6096 2003-11-02  Martin Baulig  <martin@ximian.com>
6097
6098         * expression.cs (Invocation.EmitCall): Use
6099         `TypeManager.IsValueType()' to check whether it's a value type.
6100         Don't set `struct_call' when calling a method on a type parameter.
6101
6102 2003-11-02  Martin Baulig  <martin@ximian.com>
6103
6104         * generics.cs (ConstructedType.Resolve): Renamed to ResolveType()
6105         and removed the TypeBuilder argument.
6106
6107         * typemanager.cs (TypeManager.IsValueType): Return
6108         `t.IsGenericParameter || t.IsValueType'.
6109
6110 2003-10-25  Martin Baulig  <martin@ximian.com>
6111
6112         * decl.cs (DeclSpace.ResolveType): If we're a ConstructedType,
6113         call ConstructedType.Resolve() on it.
6114
6115         * generic.cs (ConstructedType.Resolve): Set `type' on success.
6116
6117 2003-10-25  Martin Baulig  <martin@ximian.com>
6118
6119         * class.cs (TypeContainer.GetClassBases): Changed
6120         `out Type parent' into `out TypeExpr parent'.  Moved CS0644 and
6121         CS8214 reporting here.
6122         (TypeContainer.DefineType): GetClassBases() gives us a `TypeExpr'
6123         instead of a `Type' for our parent.  In case of a recursive
6124         declaration (see tests/gen-23.cs for an example), our parent is a
6125         ConstructedType and it doesn't have its type set.  So, first
6126         create our own TypeBuilder, then call constructed.Resolve() to get
6127         the parent's type and finally TypeBuilder.SetParent() it.
6128
6129         * ecore.cs (TypeExpr.Name): New public virtual property.
6130
6131         * generic.cs
6132         (ConstructedType): We're now a TypeExpr and not just an Expression.
6133         (ConstructedType.ResolveAsTypeStep): Don't resolve our type
6134         arguments here; this is done later.
6135         (ConstructedType.Resolve): New public method to resolve the type
6136         arguments and bind them.
6137
6138 2003-10-21  Martin Baulig  <martin@ximian.com>
6139
6140         * convert.cs: Use `TypeManager.IsValueType' instead of
6141         'type.IsValueType' everywhere.
6142
6143         * typemanager.cs (TypeManager.IsValueType): Return true for type
6144         parameters.  The reason for this is that we need to box a type
6145         parameter when converting it to a reference type.
6146
6147         * cs-parser.jay: Added support for default value expressions.
6148
6149         * generics.cs (DefaultValueExpression): New public class.       
6150
6151 2003-10-17  Martin Baulig  <martin@ximian.com>
6152
6153         * generic.cs (Constraints.Resolve): Take a DecpSpace instead of a
6154         TypeContainer so we can also use this for Interfaces.
6155         (TypeParameter.Resolve): Likewise.
6156
6157         * interface.cs (Interface.DefineType): Added support for generic
6158         interfaces.
6159
6160         * cs-parser.jay: Added support for generic structs and interfaces.
6161
6162 2003-10-17  Martin Baulig  <martin@ximian.com>
6163
6164         * generic.cs (GenericMemberAccess.DoResolve): We can now actually
6165         call generic methods :-)
6166
6167 2003-10-16  Martin Baulig  <martin@ximian.com>
6168
6169         * cs-parser.jay (namespace_or_type_name): Only create a
6170         GenericMemberAccess if we actually have type arguments.
6171
6172 2003-10-13  Martin Baulig  <martin@ximian.com>
6173
6174         * class.cs (Method.Define): If we're a generic method, call
6175         TypeBuilder.DefineGenericMethod () before resolving
6176         the parameters.
6177         (MethodData): Added .ctor which takes an additional MethodBuilder
6178         argument; this is used for generic methods.
6179         (MethodData.Define): Call `builder.SetGenericMethodSignature()' if
6180         we already have a MethodBuilder.
6181
6182 2003-10-10  Martin Baulig  <martin@ximian.com>
6183
6184         * class.cs (Method): Added .ctor which takes a `GenericMethod'
6185         instead of a `DeclSpace'.  This is used for generic methods.
6186
6187         * cs-parser.jay (method_header): Added support for generic
6188         methods; create a `GenericMethod' instance and pass it to the
6189         `Method's .ctor; it'll be used as the `DeclSpace' to lookup
6190         parameters and locals.
6191
6192         * decl.cs (DeclSpace.SetParameterInfo): Removed Location argument
6193         since we already have the location.  Check whether we're a generic
6194         type declaration or a generic method and create the correct type
6195         parameter.
6196
6197         * generic.cs (TypeParameter.DefineMethod): New public method.
6198         (GenericMethod): New public class; derives from DeclSpace and is
6199         used for generic methods.       
6200
6201 2003-10-09  Martin Baulig  <martin@ximian.com>
6202
6203         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
6204         to the .ctor.
6205         (MethodCore.DoDefineParameters): Removed the TypeContainer
6206         argument; use the DeclSpace which was passed to the .ctor instead.
6207         (MethodCore.CheckParameter): Take a DeclSpace instead of a
6208         TypeContainer; we only need a DeclSpace here.
6209
6210 2003-10-09  Martin Baulig  <martin@ximian.com>
6211
6212         * class.cs (MethodData): Added additional `DeclSpace ds' argument
6213         to the .ctor.
6214         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
6215         EmitContext's .ctor.    
6216
6217 2003-10-09  Martin Baulig  <martin@ximian.com>
6218
6219         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
6220         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
6221         AsAccessible(), moved them as well.
6222
6223         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
6224
6225 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
6226
6227         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
6228         generation for >=, as spotted by Paolo, bug 48679.  
6229         Patch from David Waite.
6230
6231         * cs-tokenizer.cs: Add handling for #pragma.
6232
6233         * cs-parser.jay: Allow for both yield and yield return in the
6234         syntax.  The anti-cobolization of C# fight will go on!
6235
6236         * class.cs (TypeBuilder.DefineType): Catch error condition here
6237         (Parent.DefineType erroring out and returning null).
6238
6239         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
6240         coping with enumerations variables, we were mistakenly processing
6241         them as a regular value type instead of built-in types.  Fixes the
6242         bug #48063
6243
6244         * typemanager.cs (IsBuiltinOrEnum): New method.
6245
6246 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
6247
6248         * cs-parser.jay: Upgrade: yield now needs the return clause.
6249
6250 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
6251
6252         * cs-parser.jay : Renamed yyName to yyNames related to jay.
6253
6254 2003-09-29  Martin Baulig  <martin@ximian.com>
6255
6256         * typemanager.cs (TypeManager.GetMethodFlags): Added support for
6257         inflated generic methods.
6258
6259         * generics.cs (ConstructedType): Distinguish between open and
6260         closed constructed types; correctly resolve the arguments.
6261
6262 2003-09-22  Martin Baulig  <martin@ximian.com>
6263
6264         * generic.cs (ConstructedType.ResolveAsTypeCheck): Check whether
6265         all type arguments meet their constraints.
6266
6267 2003-09-19  Martin Baulig  <martin@ximian.com>
6268
6269         * decl.cs (MemberCache.SetupCacheForInterface): Take a
6270         `MemberCache parent' argument.  Normally, an interface doesn't
6271         have a parent type except System.Object, but we use this in gmcs
6272         for generic type parameters.
6273
6274 2003-09-18  Martin Baulig  <martin@ximian.com>
6275
6276         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
6277         on `type.IsInterface'; don't check whether the type has a parent
6278         to determine whether it's an interface.
6279
6280 2003-09-17  Martin Baulig  <martin@ximian.com>
6281
6282         * generic.cs (ConstructedType.ToString): Always use `name' as the
6283         type name.
6284
6285 2003-09-15  Martin Baulig  <martin@ximian.com>
6286
6287         * cs-parser.jay: Fix grammar wrt. type_parameter_constraints.
6288
6289         * generic.cs (Constraints.Resolve): New public method; this is
6290         called to resolve the constraint types and to check whether all
6291         the constraints are correct.
6292         (Constraints.Types): New public property.
6293         (TypeParameter.Resolve): New public method; resolves all the
6294         type's constraints.
6295
6296         * class.cs (TypeContainer.DefineType): Call
6297         TypeParameter.Resolve() before actually defining the type.
6298
6299 2003-09-15  Martin Baulig  <martin@ximian.com>
6300
6301         * class.cs (TypeContainer.DefineType): Added an error flag to
6302         avoid reporting duplicate CS0146's ("class definition is
6303         circular.").
6304
6305         * driver.cs (Driver.MainDriver): Abort if
6306         RootContext.ResolveTree() reported any errors.
6307
6308 2003-09-07  Martin Baulig  <martin@ximian.com>
6309
6310         * report.cs (Error, Warning): Added overloaded versions which take
6311         a `params object[] args' and call String.Format().
6312
6313 2003-09-07  Martin Baulig  <martin@ximian.com>
6314
6315         * decl.cs (DeclSpace..ctor): Don't call
6316         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
6317         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
6318         (DeclSpace.RecordDecl): New method.
6319
6320         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
6321
6322 2003-09-02  Ravi Pratap  <ravi@ximian.com>
6323
6324         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
6325         value attributes to be applied to ParameterBuilders.
6326
6327         * class.cs (MethodCore.LabelParameters): Make static and more
6328         generic so that it can be used from other places - like interface
6329         methods, for instance.
6330
6331         * interface.cs (Interface.Emit): Call LabelParameters before
6332         emitting attributes on the InterfaceMethod.
6333
6334 2003-09-07  Martin Baulig  <martin@ximian.com>
6335
6336         * generic.cs (ConstructedType.ResolveAsTypeStep): Report a CS8217
6337         if the number of type parameters doesn't match.
6338
6339 2003-09-04  Martin Baulig  <martin@ximian.com>
6340
6341         * expression.cs (ComposedCast.ResolveAsTypeStep): Added support
6342         for arrays of generic type params (ie. `!0[]').
6343
6344 2003-09-04  Martin Baulig  <martin@ximian.com>
6345
6346         * class.cs (TypeContainer.AsAccessible): Ignore generic parameters
6347         for the moment.
6348
6349 2003-09-04  Martin Baulig  <martin@ximian.com>
6350
6351         * decl.cs (DeclSpace.LookupGeneric): New method.
6352         (DeclSpace.CheckAccessLevel): Ignore generic parameters for the
6353         moment.
6354
6355         * generic.cs (TypeParameterExpr): Take a TypeParameter as
6356         argument, not just a string.
6357         (TypeParameter.Define): New public method; this is called to
6358         actually define the generic parameter; after this, you can use the
6359         new `Type' property to get the type.
6360
6361 2003-09-04  Martin Baulig  <martin@ximian.com>
6362
6363         * decl.cs (DeclSpace.SetParameterInfo): The `constraints' argument
6364         is now an ArrayList; initialize the result of the `TypeParameters'
6365         property here.
6366         (DeclSpace.GetGenericData): Removed.
6367         (DeclSpace.LookupGeneric): Temporarily removed; we need to
6368         implement this in a different way.
6369         (DeclSpace.GetTypeParameters): Removed; there's now a
6370         `TypeParameters' property.
6371         (DeclSpace.TypeParameters): New public property.
6372
6373         * generic.cs (Constraints): Make this class public.
6374         (TypeParameter): New public class.
6375
6376 2003-09-04  Martin Baulig  <martin@ximian.com>
6377
6378         * decl.cs (DeclSpace.GetTypeParameters): New method to return the
6379         generic parameters.
6380
6381         * class.cs (TypeContainer.DefineType): Call
6382         TypeBuilder.DefineGenericParameter () on all generic parameters if
6383         this is a generic type.
6384
6385 2003-08-28  Martin Baulig  <martin@ximian.com>
6386
6387         * sample-stack.il: Compile this with ilasm: "ilasm /dll
6388         sample-stack.il".
6389
6390         * sample-hello.cs: Compile this with gmcs: "gmcs
6391         /r:sample-stack.dll sample-hello.cs".
6392
6393 2003-08-28  Martin Baulig  <martin@ximian.com>
6394
6395         * generic.cs (ConstructedType.ResolveAsTypeStep): Actually bind
6396         the parameters to the generic type.
6397
6398 2003-08-28  Martin Baulig  <martin@ximian.com>
6399
6400         * cs-tokenizer.cs (parse_less_than): Also allow all builtin types.
6401
6402 2003-08-28  Martin Baulig  <martin@ximian.com>
6403
6404         * cs-parser.jay (opt_type_argument_list): Use
6405         `OP_GENERICS_LT type_arguments OP_GENERICS_GT'.
6406         (primary_expression): Replace `qualified_identifier' with `type_name'.
6407         (type_parameter_list): Use `OP_GENERICS_LT type_parameters OP_GENERICS_GT'.
6408
6409         * cs-tokenizer.cs (is_punct): When reading a `<', invoke a custom
6410         parser to check whether it is syntactically a type parameter list;
6411         return OP_GENERICS_LT/OP_GENERICS_GT instead of OP_LT/OP_GT in
6412         this case.
6413
6414 2003-08-26  Martin Baulig  <martin@ximian.com>
6415
6416         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
6417         resolving aliases; fixes #47927.
6418
6419 2003-08-26  Martin Baulig  <martin@ximian.com>
6420
6421         * statement.cs (Using.DoResolve): This is internally emitting a
6422         try/finally clause, so we need to set ec.NeedExplicitReturn if we
6423         do not always return.  Fixes #47681.
6424
6425 2003-08-26  Martin Baulig  <martin@ximian.com>
6426
6427         * decl.cs (MemberCore): Moved WarningNotHiding(),
6428         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
6429         into MemberBase.
6430         (AdditionResult): Make this nested in DeclSpace.
6431         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
6432         argument; call NamespaceEntry.Define() unless we're nested in a
6433         class or struct.
6434
6435         * namespace.cs (Namespace.DefineName): New public function.  This
6436         is called from DeclSpace's .ctor to add 
6437         (Namespace.Lookup): Include DeclSpaces in the lookup.
6438
6439         * class.cs (Operator): Derive from MemberBase, not MemberCore.
6440
6441         * const.cs (Const): Derive from MemberBase, not MemberCore.     
6442
6443 2003-08-25  Martin Baulig  <martin@ximian.com>
6444
6445         * convert.cs (Convert.ExplicitReferenceConversion): When
6446         converting from an interface type to a class, unbox if the target
6447         type is a struct type.  Fixes #47822.
6448
6449 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
6450
6451         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
6452         #47854.
6453
6454 2003-08-22  Martin Baulig  <martin@ximian.com>
6455
6456         * class.cs (TypeManager.DefineType): When defining a nested type,
6457         call DefineType() on our parent; fixes #47801.
6458
6459 2003-08-22  Martin Baulig  <martin@ximian.com>
6460
6461         * class.cs (MethodData.Define): While checking if a method is an
6462         interface implementation, improve the test a bit more to fix #47654.
6463
6464 2003-08-22  Martin Baulig  <martin@ximian.com>
6465
6466         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
6467         correctly; fixes #47722.
6468
6469 2003-08-22  Martin Baulig  <martin@ximian.com>
6470
6471         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
6472         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
6473
6474         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
6475
6476 2003-08-22  Martin Baulig  <martin@ximian.com>
6477
6478         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
6479         can only be assigned in static constructors.  Fixes #47161.
6480
6481 2003-08-22  Martin Baulig  <martin@ximian.com>
6482
6483         Rewrote and improved the flow analysis code.
6484
6485         * flowbranching.cs (FlowBranching): Make this class abstract.
6486         (FlowBranching.CreateBranching): New static function to create a
6487         new flow branching.
6488         (FlowBranchingBlock, FlowBranchingException): New classes.
6489         (FlowBranching.UsageVector.Type): New public readonly field.
6490         (FlowBranching.UsageVector.Breaks): Removed the setter.
6491         (FlowBranching.UsageVector.Returns): Removed the setter.
6492         (FlowBranching.UsageVector): Added Break(), Return(),
6493         NeverReachable() and Throw() methods to modify the reachability.
6494         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
6495         done by FlowBranching.Merge().
6496         (FlowBranching.UsageVector.MergeChild): New method; merges the
6497         merge result into the current vector.
6498         (FlowBranching.Merge): New abstract method to merge a branching.
6499
6500 2003-08-12  Martin Baulig  <martin@ximian.com>
6501
6502         * expression.cs (Indirection.CacheTemporaries): Create the
6503         LocalTemporary with the pointer type, not its element type.
6504
6505 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
6506
6507         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
6508         token was a keyword or not.
6509
6510         Add `error' options where an IDENTIFIER was expected;  Provide
6511         CheckToken and CheckIdentifierToken convenience error reporting
6512         functions. 
6513
6514         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
6515
6516         * decl.cs: Rename `NamespaceEntry Namespace' public field into
6517         NameSpaceEntry NameSpaceEntry.
6518
6519         (LookupInterfaceOrClass): Avoid creating a full qualified name
6520         from namespace and name: avoid doing lookups when we know the
6521         namespace is non-existant.   Use new Tree.LookupByNamespace which
6522         looks up DeclSpaces based on their namespace, name pair.
6523
6524         * driver.cs: Provide a new `parser verbose' to display the
6525         exception thrown during parsing.  This is turned off by default
6526         now, so the output of a failure from mcs is more graceful.
6527
6528         * namespace.cs: Track all the namespaces defined in a hashtable
6529         for quick lookup.
6530
6531         (IsNamespace): New method
6532
6533 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
6534
6535         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
6536         we know that we need to concatenate (full typename can never be
6537         null). 
6538
6539         * class.cs: ditto.
6540
6541         * statement.cs: Use a bitfield;  Do not initialize to null things
6542         which are done by the constructor by default.
6543
6544         * cs-parser.jay: bug fix, parameter was 4, not 3.
6545
6546         * expression.cs: Just use the property;
6547
6548         * statement.cs: No need for GetVariableInfo method.
6549
6550 2003-08-08  Martin Baulig  <martin@ximian.com>
6551
6552         * flowanalysis.cs (FlowReturns): This is now nested in the
6553         `FlowBranching' class.
6554         (MyBitVector): Moved this here from statement.cs.
6555         (FlowBranching.SiblingType): New enum type.
6556         (FlowBranching.CreateSibling): Added `SiblingType' argument.
6557
6558 2003-08-07  Martin Baulig  <martin@ximian.com>
6559
6560         * flowanalysis.cs (FlowBranchingType): This is now nested in the
6561         `FlowBranching' class and called `BranchingType'.
6562
6563 2003-08-07  Martin Baulig  <martin@ximian.com>
6564
6565         * flowanalysis.cs: Moved all the control flow analysis code into
6566         its own file.
6567
6568 2003-08-07  Martin Baulig  <martin@ximian.com>
6569
6570         * assign.cs (Assign.DoResolve): `target' must either be an
6571         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
6572         #37319.
6573
6574 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
6575
6576         * expression.cs (BinaryMethod): This kind of expression is created by the
6577         Binary class if it determines that the operator has to be handled
6578         by a method.
6579
6580         (BinaryDelegate): This kind of expression is created if we are
6581         dealing with a + or - operator on delegates.
6582
6583         (Binary): remove method, argumetns, and DelegateOperator: when
6584         dealing with methods, 
6585
6586         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
6587
6588         * statement.cs (Block): use bitfields for the three extra booleans
6589         we had in use.   Remove unused topblock parameter.
6590
6591         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
6592
6593         * assign.cs: Drop extra unneeded tests.
6594
6595 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
6596
6597         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
6598
6599         * statement.cs (Foreach): Use VariableStorage instead of
6600         LocalBuilders.   
6601
6602         * codegen.cs (VariableStorage): New class used by clients that
6603         require a variable stored: locals or fields for variables that
6604         need to live across yield.
6605
6606         Maybe provide a convenience api for EmitThis+EmitLoad?
6607
6608         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
6609         these bad boys.
6610
6611 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
6612
6613         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
6614         RemapParameterLValue): New methods that are used to turn a
6615         precomputed FieldInfo into an expression like this:
6616
6617                 instance.FieldInfo
6618
6619         The idea is to use this instead of making LocalVariableReference
6620         have more than one meaning.
6621
6622         * cs-parser.jay: Add error production to BASE.
6623
6624         * ecore.cs: Deal with TypeManager.GetField returning null, which
6625         is now a valid return value.
6626
6627         (FieldExprNoAddress): New expression for Fields whose address can
6628         not be taken.
6629
6630         * expression.cs (LocalVariableReference): During the resolve
6631         phases, create new expressions if we are in a remapping context.
6632         Remove code that dealt with remapping here.
6633
6634         (ParameterReference): same.
6635
6636         (ProxyInstance): New expression, like the `This' expression, but
6637         it is born fully resolved.  We know what we are doing, so remove
6638         the errors that are targeted to user-provided uses of `this'.
6639
6640         * statement.cs (Foreach): our variable is now stored as an
6641         Expression;  During resolution, follow the protocol, dont just
6642         assume it will return this.
6643
6644 2003-08-06  Martin Baulig  <martin@ximian.com>
6645
6646         * support.cs (SeekableStreamReader.cs): New public class.
6647
6648         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
6649         SeekableStreamReader instead of the normal StreamReader.
6650
6651 2003-08-04  Martin Baulig  <martin@ximian.com>
6652
6653         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
6654         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
6655         deambiguate casts and delegate invocations.
6656         (parenthesized_expression): Use the new tokens to ensure this is
6657         not a cast of method invocation.
6658
6659         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
6660         when reading a `)' and Deambiguate_CloseParens () was previously
6661         called.
6662
6663         * expression.cs (ParenthesizedExpression): New class.  This is
6664         just used for the CS0075 test.
6665         (Binary.DoResolve): Check for CS0075.   
6666
6667 2003-07-29  Ravi Pratap  <ravi@ximian.com>
6668
6669         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
6670         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
6671         reference comparison.
6672
6673         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
6674         examine the ReturnType for equality - this is necessary in the
6675         cases of implicit and explicit operators whose signature also
6676         includes the return type.
6677
6678 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
6679
6680         * namespace.cs: Cache the result of the namespace computation,
6681         instead of computing it every time.
6682
6683 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
6684
6685         * decl.cs: Use a global arraylist that we reuse over invocations
6686         to avoid excesive memory consumption.  Reduces memory usage on an
6687         mcs compile by one meg (45 average).
6688
6689         * typemanager.cs (LookupTypeReflection): In .NET pointers are
6690         private, work around that.
6691
6692 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
6693
6694         * literal.cs (IntLiteral): Define Zero and One static literals. 
6695
6696         * cs-parser.jay (integer_literal): use static literals to reduce
6697         memory usage for the most used literals (0, 1 and -1).  211kb
6698         reduced in memory usage.
6699
6700         Replace all calls to `new ArrayList' with `new
6701         ArrayList(4)' which is a good average number for most allocations,
6702         and also requires only 16 bytes of memory for its buffer by
6703         default. 
6704
6705         This reduced MCS memory usage in seven megabytes for the RSS after
6706         bootstrapping.
6707
6708 2003-07-28  Ravi Pratap  <ravi@ximian.com>
6709
6710         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
6711         handle params methods the correct way by forming only one
6712         applicable set with params and normal methods in them. Earlier we
6713         were looking at params methods only if we found no normal methods
6714         which was not the correct thing to do.
6715
6716         (Invocation.BetterFunction): Take separate arguments indicating
6717         when candidate and the best method are params methods in their
6718         expanded form.
6719
6720         This fixes bugs #43367 and #46199.
6721
6722         * attribute.cs: Documentation updates.
6723
6724         (CheckAttribute): Rename to CheckAttributeTarget.
6725         (GetValidPlaces): Rename to GetValidTargets.
6726
6727         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
6728         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
6729
6730         Fixes bug #44468.
6731
6732 2003-07-28  Miguel de Icaza  <miguel@ximian.com>
6733
6734         * codegen.cs: Compute IsGeneric correctly.
6735
6736         * cs-parser.jay: Introduce OP_GENERIC_LT for the grammar ambiguity
6737         resolution. 
6738
6739         Bring back (temporarily) OP_LEFT_SHIFT, OP_RIGHT_SHIFT,
6740         OP_SHIFT_RIGHT_ASSIGN, OP_SHIFT_LEFT_ASSIGN.  There were too many
6741         regressions, and I was chasing more bugs than I required.
6742
6743         * interface.cs: Use expressions for base type names (like classes
6744         and structs have been doing for a while now), and resolve that.
6745         This patch should probably go into head as well.
6746
6747         This makes it one less user of FindType.
6748
6749 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
6750
6751         This compiler can not self host currently.  Need to fix that.
6752         
6753         * Makefile: compile to `gmcs.exe'
6754
6755         * driver.cs: Turn on v2 by default on gmcs.
6756
6757         * generic.cs (ConstructedType): Does no longer take a container
6758         type argument;  That will be taken care of later.
6759
6760         (ConstructedType.DoResolve, ConstructedType.ResolveAsTypeStep):
6761         Use SimpleName to resolve for now, so we can continue the work on
6762         the parser, until we get Type.GetType that understands generics.
6763
6764         (ConstructedType.ToString): Implement
6765
6766         (TypeArguments.Resolve): Resolve the child expressions as types. 
6767         
6768         * cs-parser.jay: Rename interface_constraints to
6769         type_parameter_constraints
6770
6771         (namespace_or_type_name): Only use constructed types for the basic
6772         construction, we will deal with identifier<...> later.
6773
6774         (type/type_name): No longer call DecomposeQI, as
6775         namespace_or_type_name is always decoded now.
6776         
6777 2003-07-22  Ravi Pratap  <ravi@ximian.com>
6778
6779         * expression.cs (Invocation.OverloadResolve): Follow the spec more
6780         closely: we eliminate methods in base types when we have an
6781         applicable method in a top-level type.
6782
6783         Please see section 14.5.5.1 for an exact description of what goes
6784         on. 
6785
6786         This fixes bug #45127 and a host of other related to corlib compilation.
6787
6788         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
6789         array is the method corresponding to the top-level type (this is
6790         because of the changes made to icall.c) so we change this
6791         accordingly.
6792
6793         (MethodGroupExpr.Name): This too.
6794
6795         * typemanager.cs (GetElementType): New method which does the right
6796         thing when compiling corlib. 
6797
6798         * everywhere: Make use of the above in the relevant places.
6799
6800 2003-07-22  Martin Baulig  <martin@ximian.com>
6801
6802         * cs-parser.jay (invocation_expression): Moved
6803         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
6804         `cast_expression', but create a InvocationOrCast which later
6805         resolves to either an Invocation or a Cast.
6806
6807         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
6808         method; call this before EmitStatement() to make sure that this
6809         expression can be used as a statement.
6810
6811         * expression.cs (InvocationOrCast): New class; resolves to either
6812         an Invocation or a Cast.
6813
6814         * statement.cs (StatementExpression): Call ResolveStatement() on
6815         the ExpressionStatement before emitting it.
6816
6817 2003-07-21  Martin Baulig  <martin@ximian.com>
6818
6819         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
6820         `ref' and `out' attributes match; fixes #46220.
6821         (MemberAccess.ResolveMemberAccess): You can't reference a type
6822         through an expression; fixes #33180.
6823         (Indexers.GetIndexersForType): Don't return the indexers from
6824         interfaces the class implements; fixes #46502.
6825
6826 2003-07-21  Martin Baulig  <martin@ximian.com>
6827
6828         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
6829         CS0661 checks; fixes bug #30442.
6830
6831 2003-07-21  Martin Baulig  <martin@ximian.com>
6832
6833         * decl.cs (AdditionResult): Added `Error'.
6834
6835         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
6836
6837         * typemanager.cs (TypeManager.ChangeType): Catch exceptions; makes
6838         cs0031.cs actually work.
6839
6840  2003-07-20  Miguel de Icaza  <miguel@ximian.com>
6841  
6842         * cs-parser.jay (namespace_name): do not use
6843         namespace_or_type_name, use qualified_identifier, because
6844         namespace_or_type_name will soon return a composed expression
6845         instead of a string.
6846  
6847         (namespace_or_type_name): Instead of returning a string, now this
6848         production returns an expression.
6849  
6850         * codegen.cs (EmitContext): Setup IsGeneric property based on
6851         whether our DeclSpace is generic, our the method is generic.
6852  
6853         * modifier.cs (Modifiers.METHOD_GENERIC): New definition, use if
6854         the method is generic.
6855  
6856         * cs-parser.jay (type_arguments, opt_type_argument_list,
6857         type_parameters, type_parameter_list, opt_type_parameter_list,
6858         type_parameter,, opt_type_parameter_constraints_clauses,
6859         type_parameter_constraints_clauses,
6860         type_parameter_constraint_clause, type_parameter_constraint,
6861         interface_constraints): Add new production
6862  
6863         * decl.cs (DeclSpace): IsGeneric, flag to track whether this
6864         DeclSpace is generic or not.
6865  
6866         (DeclSpace.SetParameterInfo): New routine, used to set the
6867         parameter info for a type.
6868  
6869         (DeclSpace.LookupGeneric): Lookups a name, and if it is a generic,
6870         returns a GenericTypeExpr
6871  
6872         * ecore.cs (SimpleName.ResolveAsTypeStep): If our container is
6873         generic, lookup the generic argument.
6874  
6875         * attribute.cs: Do not allow TypeParameterExpressions in
6876         Attributes.
6877  
6878         * class.cs: Do not allow the Main method to be defined in a
6879         Generic container.
6880  
6881         * expression.cs (SizeOf): Do not allow generic types to be used as
6882         arguments to sizeof.
6883  
6884         * typemanager.cs (IsGeneric): Wrapper for Reflection when we have
6885         it: whether a type is generic or not.  Only works for types we are
6886         currently building for now.
6887         
6888 2003-07-20  Martin Baulig  <martin@ximian.com>
6889
6890         * namespace.cs: Fixed that bug which caused a crash when compiling
6891         the debugger's GUI.
6892
6893 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
6894
6895         * typemanager.cs (LookupTypeReflection): Never expose types which
6896         are NotPublic, NestedPrivate, NestedAssembly, or
6897         NestedFamANDAssem.  We used to return these, and later do a check
6898         that would report a meaningful error, but the problem is that we
6899         would not get the real match, if there was a name override.
6900
6901 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
6902
6903         * namespace.cs (Namespace, Name): Do not compute the namespace
6904         name dynamically, compute it in the constructor.  This reduced
6905         memory usage by 1697 KB.
6906
6907         * driver.cs: Use --pause to pause at the end.
6908
6909 2003-07-17  Peter Williams  <peter@newton.cx>
6910
6911         * Makefile: Change the name of the test target so that it doesn't
6912         conflict with the recursive test target.
6913
6914 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
6915
6916         * expression.cs (LocalVariableReference.Emit, EmitAssign,
6917         AddressOf): Do not use EmitThis, that was wrong, use the actual
6918         this pointer.
6919
6920 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
6921
6922         * class.cs (MethodData.Define): While checking if a method is an
6923         interface implementation, improve the test: If we are not public
6924         (use new test here: use the computed MethodAttributes directly,
6925         instead of the parsed modifier flags) check if the `implementing'
6926         method comes from an interface or not.
6927
6928         * pending.cs (VerifyPendingMethods): Slightly better error
6929         message.
6930
6931         * makefile: add test target that does the mcs bootstrap.
6932
6933 2003-07-16  Ravi Pratap  <ravi@ximian.com>
6934
6935         * interface.cs (Define): Do nothing here since there are no
6936         members to populate etc. Move the attribute emission out of here
6937         since this was just totally the wrong place to put it. Attribute
6938         application happens during the 'Emit' phase, not in the 'Define'
6939         phase.
6940
6941         (Emit): Add this method and move the attribute emission here
6942
6943         * rootcontext.cs (EmitCode): Call the Emit method on interface
6944         types too.
6945
6946 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
6947
6948         * expression.cs (OverloadResolve): Report error only if Location
6949         is not 'Null' which means that there was a probe going on.
6950
6951 2003-07-14  Martin Baulig  <martin@ximian.com>
6952
6953         * expression.cs (ConditionalLogicalOperator): New public class to
6954         implement user defined conditional logical operators.
6955         This is section 14.11.2 in the spec and bug #40505.
6956
6957 2003-07-14  Martin Baulig  <martin@ximian.com>
6958
6959         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
6960
6961 2003-07-14  Martin Baulig  <martin@ximian.com>
6962
6963         * codegen.cs (EmitContext.InFixedInitializer): New public field.
6964
6965         * ecore.cs (IVariable.VerifyFixed): New interface method.
6966
6967         * expression.cs (Unary.ResolveOperator): When resolving the `&'
6968         operator, check whether the variable is actually fixed.  Fixes bug
6969         #36055.  Set a variable definitely assigned when taking its
6970         address as required by the spec.
6971
6972         * statement.cs (LocalInfo.IsFixed): New field.
6973         (LocalInfo.MakePinned): Set `IsFixed' to true.
6974
6975 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
6976
6977         * attribute.cs (Attribute.Resolve): While doing a Member lookup
6978         for .ctors, ensure that we only ask for members declared in the
6979         attribute type (BindingFlags.DeclaredOnly).
6980
6981         Fixes bug #43632.
6982
6983         * expression.cs (Error_WrongNumArguments): Report error 1501
6984         correctly the way CSC does.
6985
6986 2003-07-13  Martin Baulig  <martin@ximian.com>
6987
6988         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
6989         lookup on the fully qualified name, to make things like "X.X" work
6990         where "X.X" is a fully qualified type name, but we also have a
6991         namespace "X" in the using list.  Fixes #41975.
6992
6993 2003-07-13  Martin Baulig  <martin@ximian.com>
6994
6995         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
6996         function. If we're a CompoundAssign, we need to create an embedded
6997         CompoundAssign, not an embedded Assign.
6998         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
6999         Fixes #45854.
7000
7001 2003-07-13  Martin Baulig  <martin@ximian.com>
7002
7003         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
7004         work to fix bug #46088.
7005
7006 2003-07-13  Ravi Pratap <ravi@ximian.com>
7007
7008         * class.cs (Operator.Emit): Do not emit attributes here - it is
7009         taken care of by the Method class that we delegate too. This takes
7010         care of bug #45876.
7011
7012 2003-07-10  Martin Baulig  <martin@ximian.com>
7013
7014         * expression.cs (TypeOfVoid): New class.
7015         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
7016
7017 2003-07-10  Martin Baulig  <martin@ximian.com>
7018
7019         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
7020         bug #35957.
7021
7022 2003-07-10  Martin Baulig  <martin@ximian.com>
7023
7024         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
7025         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
7026
7027         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
7028
7029         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
7030
7031 2003-07-10  Martin Baulig  <martin@ximian.com>
7032
7033         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
7034         of decimal.  Fixes #42850.
7035
7036         NOTE: I also fixed the created byte blob, but this doesn't work on
7037         the MS runtime and csc never produces any byte blobs for decimal
7038         arrays.
7039
7040 2003-07-10  Martin Baulig  <martin@ximian.com>
7041
7042         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
7043         structs; fixes #32068.
7044         (Block.AddChildVariableNames): Fixed #44302.
7045
7046 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7047
7048         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
7049
7050 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
7051
7052         * attribute.cs: And this test is onger needed.
7053
7054 2003-07-08  Martin Baulig  <martin@ximian.com>
7055
7056         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
7057         inaccessible types.  Fixes #36313.
7058
7059         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
7060
7061         * namespace.cs (NamespaceEntry): Create implicit entries for all
7062         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
7063         implicit entries for N1.N2 and N1.
7064
7065 2003-07-08  Martin Baulig  <martin@ximian.com>
7066
7067         Rewrote the handling of namespaces to fix a lot of the issues
7068         wrt. `using' aliases etc.
7069
7070         * namespace.cs (Namespace): Splitted this class into a
7071         per-assembly `Namespace' and a per-file `NamespaceEntry'.
7072
7073         * typemanager.cs (TypeManager.IsNamespace): Removed.
7074         (TypeManager.ComputeNamespaces): Only compute namespaces from
7075         loaded assemblies here, not the namespaces from the assembly we're
7076         currently compiling.
7077
7078 2003-07-08  Martin Baulig  <martin@ximian.com>
7079
7080         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
7081
7082 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
7083
7084         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
7085         already fixed it.  
7086
7087         I thought about the memory savings here, but LookupTypeReflection
7088         is used under already very constrained scenarios.  Compiling
7089         corlib or mcs only exposes one hit, so it would not really reduce
7090         any memory consumption.
7091
7092 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7093
7094         * typemanager.cs: fixes bug #45889 by only adding public types from
7095         other assemblies to the list of known types.
7096
7097 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
7098
7099         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
7100         on the type we resolved.
7101
7102 2003-07-05  Martin Baulig  <martin@ximian.com>
7103
7104         * pending.cs (PendingImplementation.ParentImplements): Don't
7105         create the proxy if the parent is abstract.
7106
7107         * class.cs (TypeContainer.DefineIndexers): Process explicit
7108         interface implementations first.  Fixes #37714.
7109
7110 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
7111
7112         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
7113         defined recursively;  but since we modify the input parameters
7114         (left is set to `this' temporarily), we reset this value if the
7115         left_is_explicit is false, which gives the original semantics to
7116         the code.  
7117
7118         * literal.cs (NullPointer): new class used to represent a null
7119         literal in a pointer context.
7120
7121         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
7122         type is a pointer, use a NullPointer object instead of a
7123         NullLiteral.   Closes 43687
7124
7125         (ExplicitConversion): Convert pointer values using
7126         the conv opcode to the proper type.
7127
7128         * ecore.cs (New): change ValueTypeVariable property into a method,
7129         that returns whether the valuetype is suitable for being used.
7130
7131         * expression.cs (Binary.DoNumericPromotions): Only return if we
7132         the int constant was a valid uint, and we can return both left and
7133         right as uints.  If not, we continue processing, to trigger the
7134         type conversion.  This fixes 39018.
7135
7136         * statement.cs (Block.EmitMeta): During constant resolution, set
7137         the CurrentBlock property on the emitcontext, so that we resolve
7138         constants propertly.
7139
7140 2003-07-02  Martin Baulig  <martin@ximian.com>
7141
7142         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
7143         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
7144
7145         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
7146         than emitting it here.
7147
7148         * statement.cs: Fixed some more flow analysis bugs.
7149
7150 2003-07-02  Martin Baulig  <martin@ximian.com>
7151
7152         * class.cs (MethodData.Define): When implementing interface
7153         methods, set Final unless we're Virtual.
7154
7155         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
7156         check work for interface methods.
7157
7158 2003-07-01  Martin Baulig  <martin@ximian.com>
7159
7160         * ecore.cs (EmitContext.This): Replaced this property with a
7161         GetThis() method which takes a Location argument.  This ensures
7162         that we get the correct error location for a CS0188.
7163
7164 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
7165
7166         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
7167         ImplicitStandardConversion.
7168
7169         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
7170
7171 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
7172
7173         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
7174         optimization.
7175
7176 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
7177
7178         * class.cs (Constructor.Define): Turn off initlocals for unsafe
7179         constructors.
7180
7181         (MethodData.Define): Turn off initlocals for unsafe methods.
7182
7183 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
7184
7185         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
7186         complete;  Fixes #37521.
7187
7188         * delegate.cs: Use Modifiers.TypeAttr to compute the
7189         TypeAttributes, instead of rolling our own.  This makes the flags
7190         correct for the delegates.
7191
7192 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
7193
7194         * class.cs (Constructor.Define): Set the private flag for static
7195         constructors as well.
7196
7197         * cs-parser.jay (statement_expression): Set the return value to
7198         null, to avoid a crash when we catch an error.
7199
7200 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
7201
7202         * cs-parser.jay: Applied patch from Jackson that adds support for
7203         extern and unsafe modifiers to destructor declarations.
7204
7205         * expression.cs: Report error 21 if the user is trying to index a
7206         System.Array.
7207
7208         * driver.cs: Add an error message, suggested by the bug report.
7209
7210         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
7211         if we do not have a ": this ()" constructor initializer.  Fixes 45149
7212
7213 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
7214
7215         * namespace.cs: Add some information to reduce FAQs.
7216
7217 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
7218
7219         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
7220         underlying enumeration types.  Fixes #43915.
7221
7222         * expression.cs: Treat ushort/short as legal values to be used in
7223         bitwise operations.
7224
7225 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
7226
7227         * delegate.cs: transfer custom attributes for paramenters from
7228         the delegate declaration to Invoke and BeginInvoke.
7229
7230 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
7231
7232         * attribute.cs: handle custom marshalers and emit marshal info
7233         for fields, too.
7234
7235 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
7236
7237         * makefile.gnu: Added anonymous.cs to the compiler sources.
7238
7239 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
7240
7241         * iterators.cs: Change the name of the proxy class to include two
7242         underscores.
7243
7244         * cs-parser.jay: Update grammar to include anonymous methods.
7245
7246         * anonymous.cs: new file.
7247
7248 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
7249
7250         * class.cs (Field.Define): Add missing test for pointers and
7251         safety. 
7252
7253 2003-05-27  Ravi Pratap  <ravi@ximian.com>
7254
7255         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
7256         we use the stobj opcode.
7257
7258         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
7259         since it wasn't the correct fix. 
7260
7261         It still is puzzling that we are required to use stobj for IntPtr
7262         which seems to be a ValueType.
7263
7264 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
7265
7266         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
7267         during regular simple name resolution.   Now, the trick is that
7268         instead of returning for processing the simplename, we do a
7269         TypeManager.LookupType (ie, a rooted lookup as opposed to a
7270         contextual lookup type).   If a match is found, return that, if
7271         not, return for further composition.
7272
7273         This fixes long-standing 30485.
7274
7275         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
7276         using the address to initialize an object, do an Stobj instead of
7277         using the regular Stelem.
7278
7279         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
7280         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
7281         Because if we are a BaseIndexerAccess that value will be true.
7282         Fixes 43643.
7283
7284         * statement.cs (GotoCase.Resolve): Return after reporting an
7285         error, do not attempt to continue. 
7286
7287         * expression.cs (PointerArithmetic.Emit): If our operand is a
7288         long, convert our constants to match the operand before
7289         multiplying.  Convert to I type before adding.   Fixes 43670.
7290
7291 2003-05-14  Ravi Pratap  <ravi@ximian.com>
7292
7293         * enum.cs (ImplicitConversionExists) : Rename to
7294         ImplicitEnumConversionExists to remove ambiguity. 
7295
7296         * ecore.cs (NullCast): New type of cast expression class which
7297         basically is very similar to EmptyCast with the difference being
7298         it still is a constant since it is used only to cast a null to
7299         something else
7300         (eg. (string) null)
7301
7302         * convert.cs (ImplicitReferenceConversion): When casting a null
7303         literal, we return a NullCast.
7304
7305         * literal.cs (NullLiteralTyped): Remove - I don't see why this
7306         should be around anymore.
7307
7308         The renaming (reported was slightly wrong). Corrections:
7309
7310         ConvertImplicitStandard -> ImplicitConversionStandard
7311         ConvertExplicitStandard -> ExplicitConversionStandard
7312
7313         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
7314         before passing them in !
7315
7316         * convert.cs (ImplicitConversionStandard): When comparing for
7317         equal expr and target types, ensure that expr is not a
7318         NullLiteral.
7319
7320         In general, we must not be checking (expr_type ==
7321         target_type) in the top level conversion methods
7322         (ImplicitConversion, ExplicitConversion etc). This checking is
7323         done in the methods that they delegate to.
7324
7325 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
7326
7327         * convert.cs: Move Error_CannotConvertType,
7328         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
7329         ImplicitNumericConversion, ImplicitConversionExists,
7330         ImplicitUserConversionExists, StandardConversionExists,
7331         FindMostEncompassedType, FindMostSpecificSource,
7332         FindMostSpecificTarget, ImplicitUserConversion,
7333         ExplicitUserConversion, GetConversionOperators,
7334         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
7335         TryImplicitIntConversion, Error_CannotConvertImplicit,
7336         ConvertImplicitRequired, ConvertNumericExplicit,
7337         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
7338         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
7339         its own file.
7340
7341         Perform the following renames:
7342
7343         StandardConversionExists -> ImplicitStandardConversionExists
7344         ConvertImplicit -> ImplicitConversion
7345         ConvertImplicitStandard -> ImplicitStandardConversion
7346         TryImplicitIntConversion -> ImplicitIntConversion
7347         ConvertImplicitRequired -> ImplicitConversionRequired
7348         ConvertNumericExplicit -> ExplicitNumericConversion
7349         ConvertReferenceExplicit -> ExplicitReferenceConversion
7350         ConvertExplicit -> ExplicitConversion
7351         ConvertExplicitStandard -> ExplicitStandardConversion
7352
7353 2003-05-19  Martin Baulig  <martin@ximian.com>
7354
7355         * statement.cs (TypeInfo.StructInfo): Made this type protected.
7356         (TypeInfo): Added support for structs having structs as fields.
7357
7358         * ecore.cs (FieldExpr): Implement IVariable.
7359         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
7360         VariableInfo for the field.
7361
7362 2003-05-18  Martin Baulig  <martin@ximian.com>
7363
7364         * expression.cs (This.DoResolve): Report a CS0027 if we're
7365         emitting a field initializer.
7366
7367 2003-05-18  Martin Baulig  <martin@ximian.com>
7368
7369         * expression.cs (This.ResolveBase): New public function.
7370         (This.DoResolve): Check for CS0188.
7371
7372         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
7373         This.Resolve().
7374
7375         * ecore.cs (MethodGroupExpr.DoResolve): Set the
7376         `instance_expression' to null if we don't have any non-static
7377         methods.
7378
7379 2003-05-18  Martin Baulig  <martin@ximian.com>
7380
7381         Reworked the way how local variables and parameters are handled by
7382         the flow analysis code.
7383
7384         * statement.cs (TypeInfo, VariableMap): New public classes.
7385         (VariableInfo): New public class.  This is now responsible for
7386         checking whether a variable has been assigned.  It is used for
7387         parameters and local variables.
7388         (Block.EmitMeta): Take the InternalParameters as argument; compute
7389         the layout of the flow vectors here.
7390         (Block.LocalMap, Block.ParameterMap): New public properties.
7391         (FlowBranching): The .ctor doesn't get the InternalParameters
7392         anymore since Block.EmitMeta() now computes the layout of the flow
7393         vector.
7394         (MyStructInfo): This class is now known as `StructInfo' and nested
7395         in `TypeInfo'; we don't access this directly anymore.
7396
7397         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
7398         property and removed IsAssigned(), IsFieldAssigned(),
7399         SetAssigned() and SetFieldAssigned(); we now call them on the
7400         VariableInfo so we don't need to duplicate this code everywhere.
7401
7402         * expression.cs (ParameterReference): Added `Block block' argument
7403         to the .ctor.
7404         (LocalVariableReference, ParameterReference, This): The new
7405         VariableInfo class is now responsible for all the definite
7406         assignment stuff.
7407
7408         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
7409         IsParameterAssigned, SetParameterAssigned): Removed.
7410
7411 2003-05-18  Martin Baulig  <martin@ximian.com>
7412
7413         * typemanager.cs (InitCoreTypes): Try calling
7414         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
7415         the 3-args-version.  Corlib now also needs our `void_type'.
7416         (GetMethod): Added overloaded version which takes an optional
7417         `bool report_errors' to allow lookups of optional methods.
7418
7419 2003-05-12  Martin Baulig  <martin@ximian.com>
7420
7421         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
7422         only used for locals and not for parameters.
7423
7424 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
7425
7426         * support.cs (InternalParameters.ParameterType): Return the
7427         ExternalType of the parameter.
7428
7429         * parameter.cs (Parameter.ExternalType): drop the two arguments,
7430         they were unused.
7431
7432 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
7433
7434         * class.cs (MethodData.Define): Do not set the `newslot' on
7435         interface members, if they are also flagged as "override".
7436
7437         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
7438         better code for ++i and i++.  This only works for static fields
7439         and local variables.
7440
7441         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
7442         want to pull the DeclSpace out of the builder_to_declspace instead
7443         of the TypeBuilder (like in TypeContainer.FindMembers).
7444
7445         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
7446         instead of LookupTypeContainer.  Fixes the crash on .NET for
7447         looking up interface members.
7448
7449         * const.cs: Create our own emit context during the Definition
7450         stage, so that constants are evaluated in the proper context, when
7451         a recursive definition happens.
7452
7453 2003-05-11  Martin Baulig  <martin@ximian.com>
7454
7455         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
7456         new block for a switch section.
7457         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
7458         the adding/lookup in the switch block.  Fixes #39828.
7459
7460 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
7461
7462         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
7463         functionality: I needed to convert the data after I had performed
7464         the add/sub operation into the operands type size.
7465
7466         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
7467         pass the type for the box operation, otherwise the resulting
7468         object would have been of type object.
7469
7470         (BoxedCast): Add constructor to specify the type to box as.
7471
7472 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
7473
7474         * iterators.cs: I was reusing the `count' variable inadvertently,
7475         take steps to not allow this to happen.
7476
7477 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
7478
7479         * attribute.cs (Attribute.Resolve): Params attributes are encoded
7480         by creating an array at the point where the params starts and
7481         putting all those arguments there, then adjusting the size of the
7482         array.
7483
7484 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
7485
7486         * expression.cs (New.AddressOf): Implement interface
7487         IMemoryLocation.  This is used when the `new' operator is used in
7488         the context of an invocation to a method on a value type.
7489
7490         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
7491         example. 
7492
7493         * namespace.cs: Also check the using aliases here.
7494
7495         * driver.cs: Move the test for using validity after the types have
7496         been entered, so we do a single pass that also includes the using
7497         aliases. 
7498
7499         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
7500         in the regular case.   CreateSiblingForFinally is doing extra
7501         error checking.
7502
7503         * attribute.cs (GetAttributeArgumentExpression): Store the result
7504         on an out value, and use the return value to indicate failure
7505         instead of using null (which is a valid return for Constant.GetValue).
7506
7507         * statement.cs: Perform the analysis flow for the increment
7508         portion after the statement, because this will be the real flow of
7509         execution.  Fixes #42385
7510
7511         * codegen.cs (EmitContext.EmitArgument,
7512         EmitContext.EmitStoreArgument): New helper functions when the
7513         RemapToProxy flag is set.
7514
7515         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
7516         function.
7517
7518         Add support for remapping parameters. 
7519
7520         * iterators.cs: Propagate parameter values;  Store parameter
7521         values in the proxy classes.
7522
7523 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
7524
7525         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
7526         need a proxy reference;  I do not know what I was thinking
7527
7528         * cs-parser.jay (constructor_initializer): catch another error,
7529         and display nice message.
7530
7531         (field_declaration): catch void field declaration
7532         to flag a better error. 
7533
7534         * class.cs (MemberBase.CheckBase): Report an error instead of a
7535         warning if a new protected member is declared in a struct. 
7536         (Field.Define): catch the error of readonly/volatile.
7537
7538         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
7539
7540         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
7541         volatile variable is taken
7542
7543 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
7544
7545         * statement.cs (Fixed.Resolve): Report an error if we are not in
7546         an unsafe context.
7547
7548 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
7549
7550         * typemanager.cs: reuse the code that handles type clashes for
7551         delegates and enumerations.
7552
7553         * class.cs (Report28): Always report.
7554
7555         * expression.cs (EncodeAsAttribute): Allow nulls here.
7556
7557 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
7558
7559         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
7560         the functionality for testing whether an expression is valid for
7561         an attribute here.  Also handle the case of arrays of elements
7562         being stored. 
7563
7564         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
7565         encoding a linear array into an array of objects that are suitable
7566         to be passed to an CustomAttributeBuilder.
7567
7568         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
7569
7570         * ecore.cs: (FieldExpr): Handle field remapping here.
7571
7572         * iteratators.cs: Pass the instance variable (if the method is an
7573         instance method) to the constructors, so we can access the field
7574         variables on the class.
7575
7576         TODO: Test this with structs.  I think the THIS variable on
7577         structs might have to be a pointer, and not a refenrece
7578
7579 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
7580
7581         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
7582         local variables to fields in a proxy class.
7583
7584         * iterators.cs (PopulateProxy): Rename our internal fields to
7585         <XXX>.  
7586         Create a <THIS> field if we are an instance method, so we can
7587         reference our parent container variables.
7588         (MapVariable): Called back from the EmitContext code to enter a
7589         new variable to field mapping into the proxy class (we just create
7590         a FieldBuilder).
7591
7592         * expression.cs
7593         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
7594         for using the remapped locals to fields.
7595
7596         I placed the code here, because that gives the same semantics to
7597         local variables, and only changes the Emit code.
7598
7599         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
7600         statements inside iterators.
7601         (VariableInfo): Add a FieldBuilder for the cases when we are
7602         remapping local variables to fields in a proxy class
7603
7604         * ecore.cs (SimpleNameResolve): Avoid testing two times for
7605         current_block != null.
7606
7607         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
7608         not cope with strings, as it has been moved to the
7609         TableSwitchEmit.  Fixed bug in switch generation.
7610
7611         * expression.cs (New.DoResolve): Provide more context for the user
7612         when reporting an error.
7613
7614         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
7615         pointers. 
7616
7617         * expression.cs (MemberAccess.DoResolve): When we get a type back,
7618         check the permissions for it.  Note than in a type-resolution
7619         context the check was already present in DeclSpace.ResolveType,
7620         but was missing from the MemberAccess.
7621
7622         (ArrayCreation.CheckIndices): warn if the user has
7623         more nested levels of expressions, but there are no more
7624         dimensions specified.  Avoids crash on bug 41906.
7625
7626 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
7627
7628         * statement.cs (Block): replace Implicit bool, for a generic
7629         flags.   
7630         New flag: `Unchecked'.  This is used during the EmitMeta phase
7631         (which is out-of-line with the regular Resolve/Emit process for a
7632         statement, as this is done ahead of time, but still gets a chance
7633         to call constant resolve).
7634
7635         (Block.Flags): new enum for adding a new flag.
7636
7637         (Block.EmitMeta): track the state of unchecked.
7638
7639         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
7640         to enable constant resolution to work there as well.
7641
7642 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
7643
7644         * typemanager.cs (ienumerable_type): Also look up
7645         System.Collections.IEnumerable. 
7646
7647 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
7648
7649         TODO: Test more than one conditional per method.
7650
7651         * class.cs (Indexer.Define): Report the location where the user is
7652         referencing the unsupported feature.
7653
7654         (MethodData): Overload the use of `conditionals' to
7655         minimize the creation of needless ArrayLists.   This saves roughly
7656         212kb on my machine.
7657
7658         (Method): Implement the new IIteratorContainer interface.
7659         (Method.SetYields): Implement the method by setting the ModFlags
7660         to contain METHOD_YIELDS.
7661
7662         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
7663         which just got set to null.
7664
7665         * iterators.cs: New file.
7666
7667         (Yield, YieldBreak): New statements.
7668
7669         * statement.cs (Return.Resolve): Flag an error if we are used in
7670         an iterator method.
7671
7672         * codegen.cs (InIterator): New flag set if the code is being
7673         compiled in an iterator method.
7674
7675         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
7676         internal modifier, and we just use it to avoid adding extra
7677         fields, as this is seldom used.  
7678
7679         * cs-parser.jay: Add yield_statement (yield and yield break).
7680
7681         * driver.cs: New flag -v2 to turn on version 2 features. 
7682
7683         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
7684         hashtable when v2 is enabled.
7685
7686 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
7687
7688         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
7689         there is already a namespace defined with this name.
7690
7691         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
7692         people upgraded their corlibs.
7693
7694         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
7695         always use fully qualified types, no need to use the compiler
7696         front end.
7697
7698         (TypeManager.IsNamespace): Use binarysearch.
7699
7700         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
7701         AddDelegate): I did not quite use the new IsValid API properly: I
7702         have to pass the short-name and the fullname.  I was passing only
7703         the basename instead of the fullname sometimes. 
7704
7705         (TypeContainer.DefineType): call NamespaceClash.
7706
7707         * interface.cs (Interface.DefineType): use NamespaceClash before
7708         defining the type.
7709
7710         * delegate.cs (Delegate.DefineType): use NamespaceClash before
7711         defining the type.
7712
7713         * enum.cs: (Enum.DefineType): use NamespaceClash before
7714         defining the type.
7715
7716         * typemanager.cs (: 3-line patch that gives us some tasty 11%
7717         speed increase.  First, use the negative_hits cache when we get a
7718         negative.  Second, add the type with its full original name
7719         instead of the new . and + encoded name (reflection uses + to
7720         separate type from a nested type).  Use LookupTypeReflection
7721         directly which bypasses the type->name hashtable (that we already
7722         know does not contain the type.
7723
7724         * decl.cs (DeclSpace.ResolveTypeExpr): track the
7725         location/container type. 
7726
7727         * driver.cs: When passing utf8, use directly the UTF8Encoding.
7728
7729 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
7730
7731         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
7732
7733         * delegate.cs (NewDelegate.Resolve): Test whether an instance
7734         method is being referenced in the method group from a static
7735         context, and report error 120 if so.
7736
7737         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
7738         Error118. 
7739
7740         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
7741         is created, we create the A namespace).
7742
7743         * cs-parser.jay: A namespace also introduces a DeclarationFound.
7744         Fixes #41591
7745
7746 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
7747
7748         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
7749         invocation to ModuleBuilder.GetType with the same values will
7750         return a new type instance, so we need to cache its return
7751         values. 
7752
7753         * expression.cs (Binary.ResolveOperator): Only allow the compare
7754         operators on enums if they are of the same type.
7755
7756         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
7757         types of ValueType on their own case.  Before we were giving them
7758         the same treatment as objects.
7759
7760         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
7761         fullname.  Short name is used to compare against container name.
7762         Fullname is used to check against defined namespace names.
7763
7764         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
7765         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
7766
7767         (Method.CheckBase): Call parent.
7768         (MemberBase.CheckBase): Check for protected members on sealed
7769         classes.
7770         (PropertyBase.CheckBase): Call parent.
7771         (Field.Define): Call parent.
7772
7773         * report.cs: Negative error codes are now mapped to 8000 - code,
7774         so that the display is render more nicely.
7775
7776         * typemanager.cs: Do not use try/catch, instead report a regular
7777         error. 
7778
7779         (GetPointerType, GetReferenceType): These methods provide
7780         mechanisms to obtain the T* and T& from a T.  We had the code
7781         previously scattered around the code base, and it also used
7782         TypeManager.LookupType that would go through plenty of caches.
7783         This one goes directly to the type source.
7784
7785         In some places we did the Type.GetType followed by
7786         ModuleBuilder.GetType, but not in others, so this unifies the
7787         processing as well.
7788
7789         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
7790         statements now that we have namespace information.
7791
7792         * typemanager.cs (IsNamespace): New method, returns whether the
7793         string presented is a namespace or not.
7794
7795         (ComputeNamespaces): New public entry point, computes the list of
7796         available namespaces, using the GetNamespaces API call in Mono, or
7797         the slower version in MS.NET.   
7798
7799         Now before we start the semantic analysis phase, we have a
7800         complete list of namespaces including everything that the user has
7801         provided.
7802
7803         Deleted old code to cache namespaces in .nsc files.
7804
7805 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
7806
7807         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
7808         class/struct location definition Location for the implicit
7809         constructor location.
7810
7811         (Operator.Define): Use the location of the operator for the
7812         implicit Method definition.
7813
7814         (Constructor.Emit): use the constructor location for the implicit
7815         base initializer constructor.
7816
7817         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
7818         and the Expression class now contains two new methods:
7819
7820         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
7821         isolate type lookup from the rest of the resolution process.
7822
7823         Since we use Expressions to hold type definitions due to the way
7824         we parse the input we have historically overloaded Resolve to
7825         perform the Type lookups if a special flag is passed.  Now this is
7826         eliminated and two methods take their place. 
7827
7828         The differences in the two methods between xStep and xTerminal is
7829         that xStep is involved in our current lookup system that uses
7830         SimpleNames to compose a name, while xTerminal is used just to
7831         catch the case where the simplename lookup failed.
7832
7833 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
7834
7835         * expression.cs (ResolveMemberAccess): Remove redundant code.
7836         TypeExpr expressions are always born fully resolved.
7837
7838         * interface.cs (PopulateMethod): Do not lookup the types twice.
7839         We were doing it once during SemanticAnalysis and once during
7840         PopulateMethod.
7841
7842         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
7843         in local variable type definitions, were being returned as a
7844         SimpleName (we decomposed everything into a string), that is
7845         because primary_expression was being used instead of a type in the
7846         grammar (reduce/reduce conflicts).
7847
7848         The part that was wrong is that we converted the expression into a
7849         string (an oversimplification in one hand, compounded with primary
7850         expressions doing string concatenation).
7851
7852         So things like:
7853
7854         A.B.C [] x;
7855
7856         Would return "A.B.C[]" as a SimpleName.  This stopped things like
7857         using clauses from working on this particular context.  And a type
7858         was being matched directly against "A.B.C[]".
7859
7860         We now use the correct approach, and allow for ComposedCast to be
7861         part of the unary expression.  So the "A.B.C []" become a composed
7862         cast of "A.B.C" (as a nested group of MemberAccess with a
7863         SimpleName at the end) plus the rank composition "[]". 
7864
7865         Also fixes 35567
7866
7867 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
7868
7869         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
7870         for the access level checking.
7871
7872         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
7873         `TypeContainer container', because I kept getting confused when I
7874         was debugging this code.
7875
7876         * expression.cs (Indexers): Instead of tracking getters/setters,
7877         we now track them in parallel.  We create one arraylist less, but
7878         most importantly it is possible now for the LValue code to find a
7879         matching get for a set.
7880
7881         (IndexerAccess.DoResolveLValue): Update the code.
7882         GetIndexersForType has been modified already to extract all the
7883         indexers from a type.  The code assumed it did not.
7884
7885         Also make the code set the correct return type for the indexer.
7886         This was fixed a long time ago for properties, but was missing for
7887         indexers.  It used to be void_type.
7888
7889         (Binary.Emit): Test first for doubles instead of
7890         floats, as they are more common.
7891
7892         (Binary.EmitBranchable): Use the .un version of the branch opcodes
7893         when dealing with floats and the <=, >= operators.  This fixes bug
7894         #39314 
7895
7896         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
7897         to load the array value by emitting a load on the foreach variable
7898         type.  This was incorrect.  
7899
7900         We now emit the code to load an element using the the array
7901         variable type, and then we emit the conversion operator.
7902
7903         Fixed #40176
7904
7905 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
7906
7907         * attribute.cs: Avoid allocation of ArrayLists in the common case.
7908
7909 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
7910
7911         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
7912         test for protection before we test for signatures. 
7913
7914         (MethodSignature.ToString): implement.
7915
7916         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
7917         to the case where we reduced into a LongConstant.
7918
7919         * decl.cs (CheckAccessLevel): If the type is an array, we can not
7920         depend on whether the information is acurrate, because the
7921         Microsoft runtime will always claim that the array type is public,
7922         regardless of the real state.
7923
7924         If the type is a pointer, another problem happens: the type is
7925         reported as non-public in Microsoft.  
7926
7927         In both cases we have to call CheckAccessLevel recursively with
7928         the underlying type as the argument to be tested.
7929
7930 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
7931
7932         * assign.cs (Assign.Emit): If we are dealing with a compound
7933         assignment expression, we should use the code path that stores the
7934         intermediate result in a temporary value.  This fixes #40903.
7935
7936         *expression.cs (Indirection.ToString): Provide ToString method for
7937         debugging. 
7938
7939 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
7940
7941         * class.cs: Null out fields holding references to Block objects so
7942         they can be garbage collected.
7943
7944         * expression.cs (OverloadResolve): Remove unused local.
7945
7946 2003-04-07  Martin Baulig  <martin@ximian.com>
7947
7948         * codegen.cs (EmitContext.CurrentFile): New public field.
7949         (EmitContext.Mark): Use the CurrentFile to check whether the
7950         location is in the correct file.
7951         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
7952
7953 2003-04-07  Martin Baulig  <martin@ximian.com>
7954
7955         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
7956
7957         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
7958         location.  [FIXME: The location argument which gets passed to this
7959         method is sometimes wrong!]
7960
7961 2003-04-07  Nick Drochak <ndrochak@gol.com>
7962
7963         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
7964
7965 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
7966
7967         * expression.cs (Indirection.EmitAssign): We were using the
7968         temporary, but returning immediately instead of continuing the
7969         EmitAssing flow.
7970
7971 2003-04-06  Martin Baulig  <martin@ximian.com>
7972
7973         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
7974         if it's a nested child, but also deriving from the outer class.
7975         See test 190.cs.
7976
7977         * typemanager.cs (IsNestedChildOf): Make this work if it's a
7978         nested child, but also deriving from the outer class.  See
7979         test-190.cs.
7980         (FilterWithClosure): We may access private members of the outer
7981         class if we're a nested child and deriving from the outer class.
7982         (RealMemberLookup): Only set `closure_private_ok' if the
7983         `original_bf' contained BindingFlags.NonPublic.
7984
7985 2003-04-05  Martin Baulig  <martin@ximian.com>
7986
7987         * expression.cs (SizeOf.DoResolve): Use ResolveTypeExpr, so we can
7988         probe if its a type parameter, and if so, flag an error.
7989
7990         * decl.cs: Move here the SetParameterInfo code from class.cs.
7991         Handle IsGeneric here.
7992
7993         Handle a variety of errors in the parameter info definition.
7994
7995         * ecore.cs (SimpleName.DoResolveType): Handle look ups for generic
7996         type parameters here.
7997
7998         * cs-parser.jay (class_declaration): report errors for parameters
7999         here as well.
8000
8001 2003-01-21  Miguel de Icaza  <miguel@ximian.com>
8002
8003         * generic.cs: New file, contains support code for generics.
8004
8005         * cs-parser.jay: Remove OP_SHIFT_LEFT, OP_SHIFT_RIGHT,
8006         OP_SHIFT_LEFT_ASSIGN, OP_SHIFT_RIGHT_ASSIGN.
8007
8008         Update parser for the above removals.
8009
8010         * cs-tokenizer.cs: Do not handle <<= or >>= specially.  This is
8011         now taken care of in the parser.
8012
8013 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
8014
8015         * class.cs (Event.Define): Do not allow abstract events to have
8016         initializers. 
8017
8018 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
8019
8020         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
8021         block in event declarations.
8022
8023         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
8024         value type, get its address.
8025
8026         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
8027         leaving a class on the stack instead of a boolean value (int
8028         0/1).  Change the code so we compare against null, and then the
8029         result against zero.
8030
8031         * class.cs (TypeContainer.GetClassBases): We were checking for the
8032         parent class being sealed too late.
8033
8034         * expression.cs (Binary.Emit): For <= and >= when dealing with
8035         floating point values, use cgt.un and clt.un instead of cgt and
8036         clt alone.
8037
8038 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
8039
8040         * statement.cs: Apply the same optimization as MS: skip the 
8041         GetEnumerator returning an IEnumerator, and use the one returning a 
8042         CharEnumerator instead. This allows us to avoid the try-finally block 
8043         and the boxing.
8044
8045 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
8046
8047         * cs-parser.jay: Attributes cannot be applied to
8048                          namespaces. Fixes #40473
8049
8050 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8051
8052         * class.cs:
8053         (Add*): check if the name is valid using the full name for constants,
8054         fields, properties and events.
8055
8056 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
8057
8058         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
8059         char constants to be part of the enumeration.
8060
8061         * expression.cs (Conditional.DoResolve): Add support for operator
8062         true. Implements the missing functionality from 14.12
8063
8064         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
8065         operator true/false as required by the spec.
8066
8067         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
8068         implicit conversion to boolean.
8069
8070         * statement.cs (Statement.ResolveBoolean): A boolean expression is
8071         also one where the type implements `operator true'. 
8072
8073         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
8074         get an expression that will invoke operator true based on an
8075         expression.  
8076
8077         (GetConversionOperators): Removed the hack that called op_True
8078         here.  
8079
8080         (Expression.ResolveBoolean): Move this from Statement.
8081
8082 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
8083
8084         * ecore.cs (FieldExpr): do not allow initialization of initonly
8085         fields on derived classes
8086
8087 2003-03-13  Martin Baulig  <martin@ximian.com>
8088
8089         * statement.cs (Block.Emit): Call ig.BeginScope() and
8090         ig.EndScope() when compiling with debugging info; call
8091         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
8092
8093 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
8094
8095         * expression.cs (Indexers): Do not construct immediately, allow
8096         for new members to be appended as we go.  Fixes 38143
8097
8098 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8099
8100         * expression.cs: save/restore context when resolving an unchecked
8101         expression.
8102
8103 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
8104
8105         * cfold.cs: Catch division by zero in modulus operator during
8106         constant folding.
8107
8108 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
8109
8110         * interface.cs (Interface.DefineMembers): Avoid defining members
8111         twice. 
8112
8113 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
8114
8115         * driver.cs: handle the +/- options for -noconfig
8116
8117         * statement.cs (Unckeched.Resolve): Also track the state of
8118         unchecked in the Resolve phase.
8119
8120 2003-02-27  Martin Baulig  <martin@ximian.com>
8121
8122         * ecore.cs (Expression.MemberLookup): Don't create a
8123         MethodGroupExpr for something which is not a method.  Fixes #38291.
8124
8125 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
8126
8127         * class.cs (MemberBase.CheckParameters): Also check that the type
8128         is unmanaged if it is a pointer.
8129
8130         * expression.cs (SizeOf.Resolve): Add location information.
8131
8132         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
8133         a managed type is declared.
8134
8135         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
8136         parameter modifiers as well.  Fixes bug 38606
8137
8138         * class.cs: Very sad.  Am backing out the speed up changes
8139         introduced by the ArrayList -> Array in the TypeContainer, as they
8140         were not actually that much faster, and introduced a bug (no error
8141         reports on duplicated methods).
8142
8143         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
8144         source first, this will guarantee that we have a valid expression
8145         before calling in lower levels functions that will require a
8146         resolved object.  Then use this original_source in the
8147         target.ResolveLValue instead of the original source that was
8148         passed to us.
8149
8150         Another change.  Use target.Resolve instead of LValueResolve.
8151         Although we are resolving for LValues, we will let the Assign code
8152         take care of that (it will be called again from Resolve).  This
8153         basically allows code like this:
8154
8155         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
8156         class Y { void A (X x) { x [0] += o; }
8157
8158         The problem was that the indexer was trying to resolve for
8159         set_Item (idx, object o) and never finding one.  The real set_Item
8160         was set_Item (idx, X).  By delaying the process we get the right
8161         semantics. 
8162
8163         Fixes bug 36505
8164
8165 2003-02-23  Martin Baulig  <martin@ximian.com>
8166
8167         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
8168         while calling DoEmit ().
8169
8170         * codegen.cs (EmitContext.Mark): Don't mark locations in other
8171         source files; if you use the #line directive inside a method, the
8172         compiler stops emitting line numbers for the debugger until it
8173         reaches the end of the method or another #line directive which
8174         restores the original file.
8175
8176 2003-02-23  Martin Baulig  <martin@ximian.com>
8177
8178         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
8179
8180 2003-02-23  Martin Baulig  <martin@ximian.com>
8181
8182         * statement.cs (Block.AddChildVariableNames): We need to call this
8183         recursively, not just for our immediate children.
8184
8185 2003-02-23  Martin Baulig  <martin@ximian.com>
8186
8187         * class.cs (Event.Define): Always make the field private, like csc does.
8188
8189         * typemanager.cs (TypeManager.RealMemberLookup): Make events
8190         actually work, fixes bug #37521.
8191
8192 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
8193
8194         * delegate.cs: When creating the various temporary "Parameters"
8195         classes, make sure that we call the ComputeAndDefineParameterTypes
8196         on those new parameters (just like we do with the formal ones), to
8197         allow them to be resolved in the context of the DeclSpace.
8198
8199         This fixes the bug that Dick observed in Bugzilla #38530.
8200
8201 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
8202
8203         * expression.cs (ResolveMemberAccess): When resolving a constant,
8204         do not attempt to pull a constant if the value was not able to
8205         generate a valid constant.
8206
8207         * const.cs (LookupConstantValue): Do not report more errors than required.
8208
8209 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8210
8211         * expression.cs: fixes bug #38328.
8212
8213 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
8214
8215         * class.cs: Changed all the various members that can be part of a
8216         class from being an ArrayList to be an Array of the right type.
8217         During the DefineType type_list, interface_list, delegate_list and
8218         enum_list are turned into types, interfaces, delegates and enums
8219         arrays.  
8220
8221         And during the member population, indexer_list, event_list,
8222         constant_list, field_list, instance_constructor_list, method_list,
8223         operator_list and property_list are turned into their real arrays.
8224
8225         Although we could probably perform this operation earlier, for
8226         good error reporting we need to keep the lists and remove the
8227         lists for longer than required.
8228
8229         This optimization was triggered by Paolo profiling the compiler
8230         speed on the output of `gen-sample-program.pl' perl script. 
8231
8232         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
8233         not crash in methods like MemberLookupFailed that use this field.  
8234
8235         This problem arises when the compiler fails to resolve a type
8236         during interface type definition for example.
8237
8238 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
8239
8240         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
8241         inherit from System.Object, so we have to stop at null, not only
8242         when reaching System.Object.
8243
8244 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
8245
8246         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
8247         DeclaredOnly because the parent indexer might have had a different
8248         name, but did not loop until the top of the hierarchy was reached.
8249
8250         The problem this one fixes is 35492: when a class implemented an
8251         indexer from an interface, we were getting the interface method
8252         (which was abstract) and we were flagging an error (can not invoke
8253         abstract method).
8254
8255         This also keeps bug 33089 functioning, and test-148 functioning.
8256
8257         * typemanager.cs (IsSpecialMethod): The correct way of figuring
8258         out if a method is special is to see if it is declared in a
8259         property or event, or whether it is one of the predefined operator
8260         names.   This should fix correctly #36804.
8261
8262 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
8263
8264         The goal here is to remove the dependency on EmptyCast.Peel ().
8265         Killing it completely.
8266
8267         The problem is that currently in a number of places where
8268         constants are expected, we have to "probe" for an EmptyCast, and
8269         Peel, which is not the correct thing to do, as this will be
8270         repetitive and will likely lead to errors. 
8271
8272         The idea is to remove any EmptyCasts that are used in casts that
8273         can be reduced to constants, so we only have to cope with
8274         constants. 
8275
8276         This bug hunt was triggered by Bug 37363 and the desire to remove
8277         the duplicate pattern where we were "peeling" emptycasts to check
8278         whether they were constants.  Now constants will always be
8279         constants.
8280
8281         * ecore.cs: Use an enumconstant here instead of wrapping with
8282         EmptyCast.  
8283
8284         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
8285         throwing me off.  By handling this we can get rid of a few hacks.
8286
8287         * statement.cs (Switch): Removed Peel() code.
8288
8289 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
8290
8291         * class.cs: Location information for error 508
8292
8293         * expression.cs (New.DoResolve): Add a guard against double
8294         resolution of an expression.  
8295
8296         The New DoResolve might be called twice when initializing field
8297         expressions (see EmitFieldInitializers, the call to
8298         GetInitializerExpression will perform a resolve on the expression,
8299         and later the assign will trigger another resolution
8300
8301         This leads to bugs (#37014)
8302
8303         * delegate.cs: The signature for EndInvoke should contain any ref
8304         or out parameters as well.  We were not doing this in the past. 
8305
8306         * class.cs (Field.Define): Do not overwrite the type definition
8307         inside the `volatile' group.  Turns out that volatile enumerations
8308         were changing the type here to perform a validity test, which
8309         broke conversions. 
8310
8311 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
8312
8313         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
8314         and structs, we do not want to load the instance variable
8315
8316         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
8317         enum_type has to be handled like an object reference (implicit
8318         conversions exists from this to object), but the regular IsClass
8319         and IsValueType tests will never return true for this one.
8320
8321         Also we use TypeManager.IsValueType instead of type.IsValueType,
8322         just for consistency with the rest of the code (this is only
8323         needed if we ever use the construct exposed by test-180.cs inside
8324         corlib, which we dont today).
8325
8326 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
8327
8328         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
8329         just InternalCall.
8330
8331 2003-02-09  Martin Baulig  <martin@ximian.com>
8332
8333         * namespace.cs (Namespace..ctor): Added SourceFile argument.
8334         (Namespace.DefineNamespaces): New static public method; this is
8335         called when we're compiling with debugging to add all namespaces
8336         to the symbol file.
8337
8338         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
8339         pass it to the Namespace's .ctor.
8340
8341         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
8342         and MethodBase arguments; pass the namespace ID to the symwriter;
8343         pass the MethodBase instead of the token to the symwriter.
8344         (SymbolWriter.DefineNamespace): New method to add a namespace to
8345         the symbol file.
8346
8347 2003-02-09  Martin Baulig  <martin@ximian.com>
8348
8349         * symbolwriter.cs: New file.  This is a wrapper around
8350         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
8351         methods here in near future.
8352
8353 2003-02-09  Martin Baulig  <martin@ximian.com>
8354
8355         * codegen.cs (EmitContext.Mark): Just pass the arguments to
8356         ILGenerator.MarkSequencePoint() which are actually used by the
8357         symbol writer.
8358
8359 2003-02-09  Martin Baulig  <martin@ximian.com>
8360
8361         * location.cs (SourceFile): New public sealed class.  This
8362         contains the name and an index which is used in the location's token.
8363         (Location): Reserve an appropriate number of bits in the token for
8364         the source file instead of walking over that list, this gives us a
8365         really huge performance improvement when compiling with debugging.
8366
8367         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
8368         `SourceFile' argument instead of a string.
8369         (Driver.ProcessFile): Add all the files via Location.AddFile(),
8370         but don't parse/tokenize here, we need to generate the list of all
8371         source files before we do that.
8372         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
8373         the files.
8374
8375         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
8376         instead of a string.
8377
8378         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
8379         of a string.
8380
8381 2003-02-09  Martin Baulig  <martin@ximian.com>
8382
8383         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
8384         filename on `#line default'.
8385
8386 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
8387
8388         * statement.cs: don't clear the pinned var when the fixed statement
8389         returns from the method (fixes bug#37752).
8390
8391 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
8392
8393         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
8394         to IsValueType.
8395
8396 2003-02-07  Martin Baulig  <martin@ximian.com>
8397
8398         * driver.cs: Removed the `--debug-args' command line argument.
8399
8400         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
8401         automatically by the AsssemblyBuilder.
8402         (CodeGen.InitializeSymbolWriter): We don't need to call any
8403         initialization function on the symbol writer anymore.  This method
8404         doesn't take any arguments.
8405
8406 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
8407
8408         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
8409         from referenced assemblies as well.
8410
8411 2003-02-02  Martin Baulig  <martin@ximian.com>
8412
8413         * class.cs (MethodData.Emit): Generate debugging info for external methods.
8414
8415 2003-02-02  Martin Baulig  <martin@ximian.com>
8416
8417         * class.cs (Constructor.Emit): Open the symbol writer before
8418         emitting the constructor initializer.
8419         (ConstructorInitializer.Emit): Call ec.Mark() to allow
8420         single-stepping through constructor initializers.
8421
8422 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
8423
8424         * class.cs: Handle error 549: do not allow virtual methods in
8425         sealed classes. 
8426
8427 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
8428
8429         * decl.cs: Check access levels when resolving types
8430
8431 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
8432
8433         * statement.cs: Add parameters and locals set in catch blocks that might 
8434         return to set vector
8435
8436 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
8437
8438         * class.cs (Operator): Set the SpecialName flags for operators.
8439
8440         * expression.cs (Invocation.DoResolve): Only block calls to
8441         accessors and operators on SpecialName methods.
8442
8443         (Cast.TryReduce): Handle conversions from char constants.
8444
8445
8446 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
8447
8448         * statement.cs: small memory and time optimization in FlowBranching.
8449
8450 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
8451
8452         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
8453         problem that the last fix but in the other sid (Set).
8454
8455         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
8456         access when there is no indexer in the hierarchy.
8457
8458 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
8459
8460         * class.cs: Combine some if statements.
8461
8462 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8463
8464         * driver.cs: fixed bug #37187.
8465
8466 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
8467
8468         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
8469         any indexer, it's needed to build a list with all the indexers in the
8470         hierarchy (AllGetters), else we have problems. Fixes #35653.
8471
8472 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
8473
8474         * class.cs (MethodData.Define): It is wrong for an interface
8475         implementation to be static in both cases: explicit and implicit.
8476         We were only handling this in one case.
8477
8478         Improve the if situation there to not have negations.
8479
8480         * class.cs (Field.Define): Turns out that we do not need to check
8481         the unsafe bit on field definition, only on usage.  Remove the test.
8482
8483 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8484
8485         * driver.cs: use assembly.Location instead of Codebase (the latest
8486         patch made mcs fail when using MS assemblies).
8487
8488 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
8489
8490         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
8491         get the path to *corlib.dll.
8492
8493 2003-01-21  Nick Drochak <ndrochak@gol.com>
8494
8495         * cs-tokenizer.cs:
8496         * pending.cs:
8497         * typemanager.cs: Remove compiler warnings
8498
8499 2003-01-20  Duncan Mak  <duncan@ximian.com>
8500
8501         * AssemblyInfo.cs: Bump the version number to 0.19.
8502
8503 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8504
8505         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
8506
8507 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
8508
8509         * class.cs (Constructor::Emit): Emit debugging info for constructors.
8510
8511 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
8512
8513         * cs-parser.jay: Small fix: we were not comparing the constructor
8514         name correctly.   Thanks to Zoltan for the initial pointer.
8515
8516 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
8517
8518         * cs-tokenizer.cs: Set file name when specified with #line
8519
8520 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
8521
8522         * cs-parser.jay: Only perform the constructor checks here if we
8523         are named like the class;  This will help provider a better
8524         error.  The constructor path is taken when a type definition is
8525         not found, but most likely the user forgot to add the type, so
8526         report that rather than the constructor error.
8527
8528 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
8529
8530         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
8531         allocations.
8532
8533 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
8534
8535         * cs-parser.jay: Add cleanup call.
8536
8537 2003-01-13  Duncan Mak  <duncan@ximian.com>
8538
8539         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
8540         consistent with other methods.
8541
8542 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
8543
8544         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
8545
8546 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
8547
8548         * attribute.cs: only set GuidAttr to true when we have a
8549         GuidAttribute.
8550
8551 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8552
8553         * ecore.cs:
8554         * expression.cs:
8555         * typemanager.cs: fixes to allow mcs compile corlib with the new
8556         Type.IsSubclassOf fix.
8557
8558 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
8559
8560         * expression.cs (LocalVariableReference.DoResolve): Classify a
8561         constant as a value, not as a variable.   Also, set the type for
8562         the variable.
8563
8564         * cs-parser.jay (fixed_statement): take a type instead of a
8565         pointer_type, so we can produce a better error message later.
8566
8567         * statement.cs (Fixed.Resolve): Flag types that are not pointers
8568         as an error.  
8569
8570         (For.DoEmit): Make inifinite loops have a
8571         non-conditional branch back.
8572
8573         (Fixed.DoEmit): First populate the pinned variables, then emit the
8574         statement, then clear the variables.  Before I was emitting the
8575         code once for each fixed piece.
8576
8577
8578 2003-01-08  Martin Baulig  <martin@ximian.com>
8579
8580         * statement.cs (FlowBranching.MergeChild): A break in a
8581         SWITCH_SECTION does not leave a loop.  Fixes #36155.
8582
8583 2003-01-08  Martin Baulig  <martin@ximian.com>
8584
8585         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
8586         lives in the same number space than `param_map'.  Fixes #36154.
8587
8588 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
8589
8590         * cs-parser.jay (constructor_declaration): Set the
8591         Constructor.ModFlags before probing for it.  This makes the
8592         compiler report 514, 515 and 132 (the code was there, but got
8593         broken). 
8594
8595         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
8596         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
8597         (GotoCase.Resolve): Set `Returns' to ALWAYS.
8598
8599 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
8600
8601         * enum.cs: create the enum static fields using the enum type.
8602
8603 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
8604
8605         * class.cs: don't try to create the ParamBuilder for the return
8606         type if it's not needed (and handle it breaking for the ms runtime
8607         anyway).
8608
8609 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
8610
8611         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
8612
8613 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
8614
8615         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
8616         the command.   This showed up while compiling the JANET source
8617         code, which used \r as its only newline separator.
8618
8619 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
8620
8621         * class.cs (Method.Define): If we are an operator (because it
8622         reuses our code), then set the SpecialName and HideBySig.  #36128
8623
8624 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
8625
8626         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
8627         exception, report error 120 `object reference required'.
8628
8629         * driver.cs: Add --pause option, used during to measure the size
8630         of the process as it goes with --timestamp.
8631
8632         * expression.cs (Invocation.DoResolve): Do not allow methods with
8633         SpecialName to be invoked.
8634
8635 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
8636
8637         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
8638         number before adding it.
8639
8640 2002-12-21  Ravi Pratap  <ravi@ximian.com>
8641
8642         * ecore.cs (StandardImplicitConversion): When in an unsafe
8643         context, we allow conversion between void * to any other pointer
8644         type. This fixes bug #35973.
8645
8646 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
8647
8648         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
8649         is not thrown when extensionless outputs are used 
8650
8651 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8652
8653         * rootcontext.cs: fixed compilation of corlib.
8654
8655 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
8656
8657         * attribute.cs (Attributes.Contains): Add new method.
8658
8659         * class.cs (MethodCore.LabelParameters): if the parameter is an
8660         `out' parameter, check that no attribute `[In]' has been passed.
8661
8662         * enum.cs: Handle the `value__' name in an enumeration.
8663
8664 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
8665
8666         * decl.cs: Added special case to allow overrides on "protected
8667         internal" methods
8668
8669 2002-12-18  Ravi Pratap  <ravi@ximian.com>
8670
8671         * attribute.cs (Attributes.AddAttributeSection): Rename to this
8672         since it makes much more sense.
8673
8674         (Attributes.ctor): Don't require a Location parameter.
8675
8676         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
8677
8678         * attribute.cs (ApplyAttributes): Remove extra Location parameters
8679         since we already have that information per attribute.
8680
8681         * everywhere : make appropriate changes.
8682
8683         * class.cs (LabelParameters): Write the code which actually
8684         applies attributes to the return type. We can't do this on the MS
8685         .NET runtime so we flag a warning in the case an exception is
8686         thrown.
8687
8688 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
8689
8690         * const.cs: Handle implicit null conversions here too.
8691
8692 2002-12-17  Ravi Pratap  <ravi@ximian.com>
8693
8694         * class.cs (MethodCore.LabelParameters): Remove the extra
8695         Type [] parameter since it is completely unnecessary. Instead
8696         pass in the method's attributes so that we can extract
8697         the "return" attribute.
8698
8699 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
8700
8701         * cs-parser.jay (parse): Use Report.Error to flag errors instead
8702         of ignoring it and letting the compile continue.
8703
8704         * typemanager.cs (ChangeType): use an extra argument to return an
8705         error condition instead of throwing an exception.
8706
8707 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
8708
8709         * expression.cs (Unary.TryReduce): mimic the code for the regular
8710         code path.  Perform an implicit cast in the cases where we can
8711         implicitly convert to one of the integral types, and then reduce
8712         based on that constant.   This fixes bug #35483.
8713
8714 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8715
8716         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
8717
8718 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8719
8720         * namespace.cs: fixed bug #35489.
8721
8722 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
8723
8724         * class.cs: Remove some dead code.
8725
8726         * cs-parser.jay: Estimate the number of methods needed
8727         (RootContext.MethodCount);
8728
8729         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
8730         numbers instead of StringBuilders.
8731
8732         * support.cs (PtrHashtable): Add constructor with initial size;
8733         We can now reduce reallocations of the method table.
8734
8735 2002-12-10  Ravi Pratap  <ravi@ximian.com>
8736
8737         * attribute.cs (ApplyAttributes): Keep track of the emitted
8738         attributes on a per-target basis. This fixes bug #35413.
8739
8740 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
8741
8742         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
8743         default to the Windows 1252 encoding.
8744
8745         (UnixParseOption): Support version, thanks to Alp for the missing
8746         pointer. 
8747
8748         * AssemblyInfo.cs: Add nice assembly information.
8749
8750         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
8751         (bug 35169).
8752
8753         * cs-parser.jay: Allow a trailing comma before the close bracked
8754         in the attribute_section production.
8755
8756         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
8757         address of the instance was being taken, I will take this out,
8758         because we take the address of the object immediately here.
8759
8760 2002-12-09  Ravi Pratap  <ravi@ximian.com>
8761
8762         * typemanager.cs (AreMultipleAllowed): Take care of the most
8763         obvious case where attribute type is not in the current assembly -
8764         stupid me ;-)
8765
8766 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
8767
8768         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
8769         definitions, instead of doing that afterwards.  
8770
8771         Also we use a nice little hack, depending on the constructor, we
8772         know if we are a "composed" name or a simple name.  Hence, we
8773         avoid the IndexOf test, and we avoid 
8774
8775         * codegen.cs: Add code to assist in a bug reporter to track down
8776         the source of a compiler crash. 
8777
8778 2002-12-07  Ravi Pratap  <ravi@ximian.com>
8779
8780         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
8781         types have been emitted for a given element and flag an error
8782         if something which does not have AllowMultiple set is used more
8783         than once.
8784
8785         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
8786         attribute types and their corresponding AllowMultiple properties
8787
8788         (AreMultipleAllowed): Check the property for a given type.
8789
8790         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
8791         property in the case we have a TypeContainer.
8792
8793         (Attributes.AddAttribute): Detect duplicates and just skip on
8794         adding them. This trivial fix catches a pretty gross error in our
8795         attribute emission - global attributes were being emitted twice!
8796
8797         Bugzilla bug #33187 is now fixed.
8798
8799 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
8800
8801         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
8802         instead of pp_and).
8803
8804         * expression.cs (Binary.ResolveOperator): I can only use the
8805         Concat (string, string, string) and Concat (string, string,
8806         string, string) if the child is actually a concatenation of
8807         strings. 
8808
8809 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
8810
8811         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
8812         context where we need a 2-character lookahead.
8813
8814         * pending.cs (PendingImplementation): Rework so we can keep track
8815         of interface types all the time, and flag those which were
8816         implemented by parents as optional.
8817
8818 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
8819
8820         * expression.cs (Binary.ResolveOperator): Use
8821         String.Concat(string,string,string) or
8822         String.Concat(string,string,string,string) when possible. 
8823
8824         * typemanager: More helper methods.
8825
8826
8827 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
8828
8829         * pending.cs: remove the bogus return from GetMissingInterfaces()
8830         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
8831
8832 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8833
8834         * namespace.cs: avoid duplicated 'using xxx' being added to
8835         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
8836         when we get more than one 'using' statement for the same namespace.
8837         Report a CS0105 warning for it.
8838
8839 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
8840
8841         * cs-tokenizer.cs (consume_identifier): use read directly, instead
8842         of calling getChar/putback, uses internal knowledge of it.    
8843
8844         (xtoken): Reorder tokenizer so most common patterns are checked
8845         first.  This reduces the compilation time in another 5% (from 8.11s
8846         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
8847
8848         The parsing time is 22% of the compilation in mcs, and from that
8849         64% is spent on the tokenization process.  
8850
8851         I tried using a binary search for keywords, but this is slower
8852         than the hashtable.  Another option would be to do a couple of
8853         things:
8854
8855                 * Not use a StringBuilder, instead use an array of chars,
8856                   with a set value.  Notice that this way we could catch
8857                   the 645 error without having to do it *afterwards*.
8858
8859                 * We could write a hand-parser to avoid the hashtable
8860                   compares altogether.
8861
8862         The identifier consumption process takes 37% of the tokenization
8863         time.  Another 15% is spent on is_number.  56% of the time spent
8864         on is_number is spent on Int64.Parse:
8865
8866                 * We could probably choose based on the string length to
8867                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
8868                   computations. 
8869
8870         Another 3% is spend on wrapping `xtoken' in the `token' function.
8871
8872         Handle 0xa0 as whitespace (#34752)
8873
8874 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
8875
8876         * typemanager.cs (IsCLRType): New routine to tell whether a type
8877         is one of the builtin types.  
8878
8879         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
8880         typecode in more places instead of doing pointer comparissions.
8881         We could leverage some knowledge about the way the typecodes are
8882         laid out.
8883
8884         New code to cache namespaces in assemblies, it is currently not
8885         invoked, to be used soon.
8886
8887         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
8888
8889         * expression.cs (Binary.ResolveOperator): specially handle
8890         strings, and do not perform user-defined operator overloading for
8891         built-in types.
8892
8893 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
8894
8895         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
8896         internalcall as it is a pretty simple operation;  Avoid whenever
8897         possible to call Char.IsLetter.
8898
8899         (consume_identifier): Cut by half the number of
8900         hashtable calls by merging the is_keyword and GetKeyword behavior.
8901
8902         Do not short-circuit, because if we do, we
8903         report errors (ie, #if false && true would produce an invalid
8904         directive error);
8905
8906
8907 2002-11-24  Martin Baulig  <martin@ximian.com>
8908
8909         * expression.cs (Cast.TryReduce): If we're in checked syntax,
8910         check constant ranges and report a CS0221.  Fixes #33186.
8911
8912 2002-11-24  Martin Baulig  <martin@ximian.com>
8913
8914         * cs-parser.jay: Make this work for uninitialized variable
8915         declarations in the `for' initializer.  Fixes #32416.
8916
8917 2002-11-24  Martin Baulig  <martin@ximian.com>
8918
8919         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
8920         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
8921
8922 2002-11-24  Martin Baulig  <martin@ximian.com>
8923
8924         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
8925         argument; if true, we also check for user-defined conversions.
8926         This is only needed if both arguments are of a user-defined type.
8927         Fixes #30443, added test-175.cs.
8928         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
8929
8930         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
8931
8932 2002-11-24  Martin Baulig  <martin@ximian.com>
8933
8934         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
8935         function to get the store opcode.
8936         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
8937         only emit the Ldelema if the store opcode is Stobj.  You must run
8938         both test-34 and test-167 to test this.  Fixes #34529.
8939
8940 2002-11-23  Martin Baulig  <martin@ximian.com>
8941
8942         * ecore.cs (Expression.MemberLookup): Added additional
8943         `qualifier_type' argument which is used when we're being called
8944         from MemberAccess.DoResolve() and null if we're called from a
8945         SimpleName lookup.
8946         (Expression.MemberLookupFailed): New method to report errors; this
8947         does the CS1540 check and reports the correct error message.
8948
8949         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
8950         argument for the CS1540 check and redone the way how we're dealing
8951         with private members.  See the comment in the source code for details.
8952         (FilterWithClosure): Reverted this back to revision 1.197; renamed
8953         `closure_start_type' to `closure_qualifier_type' and check whether
8954         it's not null.  It was not this filter being broken, it was just
8955         being called with the wrong arguments.
8956
8957         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
8958         and pass it the correct `qualifier_type'; this also does the error
8959         handling for us.
8960
8961 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
8962
8963         * expression.cs (Invocation.EmitParams): If the we are dealing
8964         with a non-built-in value type, load its address as well.
8965
8966         (ArrayCreation): Use a a pretty constant instead
8967         of the hardcoded value 2.   Use 6 instead of 2 for the number of
8968         static initializers.  
8969
8970         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
8971         because they are not really value types, just glorified integers. 
8972
8973         * driver.cs: Do not append .exe, the CSC compiler does not do it.
8974
8975         * ecore.cs: Remove redundant code for enumerations, make them use
8976         the same code path as everything else, fixes the casting issue
8977         with enumerations in Windows.Forms.
8978
8979         * attribute.cs: Do only cast to string if it is a string, the
8980         validation happens later.
8981
8982         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
8983         people upgrade their corlibs.
8984
8985         * ecore.cs: Oops, enumerations were not following the entire code path
8986
8987 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
8988
8989         * typemanager.cs (FilterWithClosure): Commented out the test for
8990         1540 in typemanager.cs, as it has problems when accessing
8991         protected methods from a parent class (see test-174.cs). 
8992
8993         * attribute.cs (Attribute.ValidateGuid): new method.
8994         (Attribute.Resolve): Use above.
8995
8996 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
8997
8998         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
8999
9000         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
9001         handling for enumerations, as we only needed the TypeContainer
9002         functionality to begin with (this is required for the fix below to
9003         work for enums that reference constants in a container class for
9004         example). 
9005
9006         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
9007
9008         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
9009         a valid TypeBuilder to perform lookups on.o
9010
9011         * class.cs (InheritableMemberSignatureCompare): Use true in the
9012         call to GetGetMethod and GetSetMethod, because we are comparing
9013         the signature, and we need to get the methods *even* if they are
9014         private. 
9015
9016         (PropertyBase.CheckBase): ditto.
9017
9018         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
9019         GotoCase.Resolve): Use Peel on EmpytCasts.
9020
9021         * ecore.cs (EmptyCast): drop child, add Peel method.
9022
9023 2002-11-17  Martin Baulig  <martin@ximian.com>
9024
9025         * ecore.cs (EmptyCast.Child): New public property.
9026
9027         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
9028         label resolved to an EmptyCast.  Fixes #34162.
9029         (GotoCase.Resolve): Likewise.
9030         (Block.EmitMeta): Likewise.
9031
9032 2002-11-17  Martin Baulig  <martin@ximian.com>
9033
9034         * expression.cs (Invocation.BetterConversion): Prefer int over
9035         uint; short over ushort; long over ulong for integer literals.
9036         Use ImplicitConversionExists instead of StandardConversionExists
9037         since we also need to check for user-defined implicit conversions.
9038         Fixes #34165.  Added test-173.cs.
9039
9040 2002-11-16  Martin Baulig  <martin@ximian.com>
9041
9042         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
9043         with the `true' and `false' literals.  Fixes #33151.
9044
9045 2002-11-16  Martin Baulig  <martin@ximian.com>
9046
9047         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
9048         October 22nd; don't do the cs1540 check for static members.
9049
9050         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
9051         now using our own filter here and doing the cs1540 check again.
9052
9053 2002-11-16  Martin Baulig  <martin@ximian.com>
9054
9055         * support.cs (InternalParameters): Don't crash if we don't have
9056         any fixed parameters.  Fixes #33532.
9057
9058 2002-11-16  Martin Baulig  <martin@ximian.com>
9059
9060         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
9061         when looking up static methods to make this work on Windows.
9062         Fixes #33773.
9063
9064 2002-11-16  Martin Baulig  <martin@ximian.com>
9065
9066         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
9067         a setter rather than using PropertyInfo.CanWrite.
9068
9069 2002-11-15  Nick Drochak  <ndrochak@gol.com>
9070
9071         * class.cs: Allow acces to block member by subclasses. Fixes build
9072         breaker.
9073
9074 2002-11-14  Martin Baulig  <martin@ximian.com>
9075
9076         * class.cs (Constructor.Emit): Added the extern/block check.
9077         Fixes bug #33678.
9078
9079 2002-11-14  Martin Baulig  <martin@ximian.com>
9080
9081         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
9082         iteration while looking for indexers, this is needed because the
9083         indexer may have a different name in our base classes.  Fixed the
9084         error reporting (no indexers at all, not get accessor, no
9085         overloaded match).  Fixes bug #33089.
9086         (IndexerAccess.DoResolveLValue): Likewise.
9087
9088 2002-11-14  Martin Baulig  <martin@ximian.com>
9089
9090         * class.cs (PropertyBase.CheckBase): Make this work for multiple
9091         indexers.  Fixes the first part of bug #33089.
9092         (MethodSignature.InheritableMemberSignatureCompare): Added support
9093         for properties.
9094
9095 2002-11-13  Ravi Pratap  <ravi@ximian.com>
9096
9097         * attribute.cs (Attribute.Resolve): Catch the
9098         NullReferenceException and report it since it isn't supposed to
9099         happen. 
9100
9101 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
9102
9103         * expression.cs (Binary.EmitBranchable): Also handle the cases for
9104         LogicalOr and LogicalAnd that can benefit from recursively
9105         handling EmitBranchable.  The code now should be nice for Paolo.
9106
9107 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
9108
9109         * typemanager.cs (LookupType): Added a negative-hit hashtable for
9110         the Type lookups, as we perform quite a number of lookups on
9111         non-Types.  This can be removed once we can deterministically tell
9112         whether we have a type or a namespace in advance.
9113
9114         But this might require special hacks from our corlib.
9115
9116         * TODO: updated.
9117
9118         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
9119         and double which avoids a conversion from an integer to a double.
9120
9121         * expression.cs: tiny optimization, avoid calling IsConstant,
9122         because it effectively performs the lookup twice.
9123
9124 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
9125
9126         But a bogus return here to keep the semantics of the old code
9127         until the Mono runtime is fixed.
9128
9129         * pending.cs (GetMissingInterfaces): New method used to remove all
9130         the interfaces that are already implemented by our parent
9131         classes from the list of pending methods. 
9132
9133         * interface.cs: Add checks for calls after ResolveTypeExpr.
9134
9135 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
9136
9137         * class.cs (Class.Emit): Report warning 67: event not used if the
9138         warning level is beyond 3.
9139
9140         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
9141         being a NullLiteral.
9142
9143         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
9144         specifiers. 
9145
9146         * class.cs (TypeContainer.GetClassBases): Cover a missing code
9147         path that might fail if a type can not be resolved.
9148
9149         * expression.cs (Binary.Emit): Emit unsigned versions of the
9150         operators. 
9151
9152         * driver.cs: use error 5.
9153
9154 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
9155
9156         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
9157
9158 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
9159
9160         * cs-parser.jay (switch_section): A beautiful patch from Martin
9161         Baulig that fixed 33094.
9162
9163 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
9164
9165         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
9166         Check whether the base is abstract and report an error if so.
9167
9168         * expression.cs (IndexerAccess.DoResolveLValue,
9169         IndexerAccess.DoResolve): ditto. 
9170
9171         (Invocation.DoResolve): ditto.
9172
9173         (Invocation.FullMethodDesc): Improve the report string.
9174
9175         * statement.cs (Block): Eliminate IsVariableDefined as it is
9176         basically just a wrapper for GetVariableInfo.
9177
9178         * ecore.cs (SimpleName): Use new 
9179
9180         * support.cs (ReflectionParamter.ParameterType): We unwrap the
9181         type, as we return the actual parameter ref/unref state on a
9182         different call.
9183
9184 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
9185
9186         * support.cs: Return proper flags REF/OUT fixing the previous
9187         commit.  
9188
9189         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
9190         not used to mean `ref' but `ref or out' in ParameterReference
9191
9192         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
9193         full type signature instead of calling TypeManger.CSharpName
9194         ourselves. 
9195
9196         * support.cs (InternalParameters.ParameterDesc): Do not compare
9197         directly to the modflags, because REF/OUT will actually be bitsets
9198         if set. 
9199
9200         * delegate.cs (VerifyMethod): Check also the modifiers.
9201
9202         * cs-tokenizer.cs: Fix bug where floating point values with an
9203         exponent where a sign was missing was ignored.
9204
9205         * driver.cs: Allow multiple assemblies to be specified in a single
9206         /r: argument
9207
9208 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
9209
9210         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
9211         because identifiers after a parenthesis would end up in this kind
9212         of production, and we needed to desamiguate it for having casts
9213         like:
9214
9215                 (UserDefinedType *) xxx
9216
9217 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
9218
9219         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
9220         we should set on the Bindingflags.NonPublic, but not turn on
9221         private_ok.  private_ok controls whether a Private member is
9222         returned (this is chekced on the filter routine), while the
9223         BindingFlags.NonPublic just controls whether private/protected
9224         will be allowed.   This fixes the problem part of the problem of
9225         private properties being allowed to be used in derived classes.
9226
9227         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
9228         so we can call the children DoResolveLValue method (this will
9229         properly signal errors on lvalue assignments to base properties)
9230
9231         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
9232         getter are null, and we have a property info, we know that this
9233         happened because the lookup failed, so we report an error 122 for
9234         protection level violation.
9235
9236         We also silently return if setter and getter are null in the
9237         resolve functions, this condition only happens if we have flagged
9238         the error before.  This is the other half of the problem. 
9239
9240         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
9241         not have accessibility information, that is why we were returning
9242         true in the filter function in typemanager.cs.
9243
9244         To properly report 122 (property is inaccessible because of its
9245         protection level) correctly, we report this error in ResolveAccess
9246         by failing if both the setter and the getter are lacking (ie, the
9247         lookup failed). 
9248
9249         DoResolve and DoLResolve have been modified to check for both
9250         setter/getter being null and returning silently, the reason being
9251         that I did not want to put the knowledge about this error in upper
9252         layers, like:
9253
9254         int old = Report.Errors;
9255         x = new PropertyExpr (...);
9256         if (old != Report.Errors)
9257                 return null;
9258         else
9259                 return x;
9260
9261         So the property expr is returned, but it is invalid, so the error
9262         will be flagged during the resolve process. 
9263
9264         * class.cs: Remove InheritablePropertySignatureCompare from the
9265         class, as we no longer depend on the property signature to compute
9266         whether it is possible to implement a method or not.
9267
9268         The reason is that calling PropertyInfo.GetGetMethod will return
9269         null (in .NET, in Mono it works, and we should change this), in
9270         cases where the Get Method does not exist in that particular
9271         class.
9272
9273         So this code:
9274
9275         class X { public virtual int A { get { return 1; } } }
9276         class Y : X { }
9277         class Z : Y { public override int A { get { return 2; } } }
9278
9279         Would fail in Z because the parent (Y) would not have the property
9280         defined.  So we avoid this completely now (because the alternative
9281         fix was ugly and slow), and we now depend exclusively on the
9282         method names.
9283
9284         (PropertyBase.CheckBase): Use a method-base mechanism to find our
9285         reference method, instead of using the property.
9286
9287         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
9288         routines are gone now.
9289
9290         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
9291         names, they were incorrectly named.
9292
9293         * cs-tokenizer.cs: Return are more gentle token on failure. 
9294
9295         * pending.cs (PendingImplementation.InterfaceMethod): This routine
9296         had an out-of-sync index variable, which caused it to remove from
9297         the list of pending methods the wrong method sometimes.
9298
9299 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
9300
9301         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
9302         CanWrite, because those refer to this particular instance of the
9303         property, and do not take into account the fact that we can
9304         override single members of a property.
9305
9306         Constructor requires an EmitContext.  The resolution process does
9307         not happen here, but we need to compute the accessors before,
9308         because the resolution does not always happen for properties.
9309
9310         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
9311         subclass, before we did not update this flag, but we did update
9312         bindingflags. 
9313
9314         (GetAccessors): Drop this routine, as it did not work in the
9315         presence of partially overwritten set/get methods. 
9316
9317         Notice that this broke the cs1540 detection, but that will require
9318         more thinking. 
9319
9320 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9321
9322         * class.cs:
9323         * codegen.cs:
9324         * driver.cs: issue a warning instead of an error if we don't support
9325         debugging for the platform. Also ignore a couple of errors that may
9326         arise when trying to write the symbols. Undo my previous patch.
9327
9328 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9329
9330         * driver.cs: ignore /debug switch except for Unix platforms.
9331
9332 2002-10-23  Nick Drochak  <ndrochak@gol.com>
9333
9334         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
9335
9336 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
9337
9338         * driver.cs: Do not make mcs-debug conditional, so we do not break
9339         builds that use it.
9340
9341         * statement.cs (UsageVector.MergeChildren): I would like Martin to
9342         review this patch.  But basically after all the children variables
9343         have been merged, the value of "Breaks" was not being set to
9344         new_breaks for Switch blocks.  I think that it should be set after
9345         it has executed.  Currently I set this to the value of new_breaks,
9346         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
9347         conservative, but I do not understand this code very well.
9348
9349         I did not break anything in the build, so that is good ;-)
9350
9351         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
9352
9353 2002-10-20  Mark Crichton  <crichton@gimp.org>
9354
9355         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
9356
9357 2002-10-20  Nick Drochak  <ndrochak@gol.com>
9358
9359         * cfold.cs: Fixed compile blocker.
9360
9361 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
9362
9363         * driver.cs: I was chekcing the key, not the file.
9364
9365 2002-10-19  Ravi Pratap  <ravi@ximian.com>
9366
9367         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
9368         message that we were generating - we just need to silently return
9369         a null.
9370
9371 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
9372
9373         * class.cs (Event.Define): Change my previous commit, as this
9374         breaks the debugger.  This is a temporary hack, as it seems like
9375         the compiler is generating events incorrectly to begin with.
9376
9377         * expression.cs (Binary.ResolveOperator): Added support for 
9378         "U operator - (E x, E y)"
9379
9380         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
9381         y)".
9382
9383         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
9384         init-only variables, but this path did not take into account that
9385         there might be also instance readonly variables.  Correct this
9386         problem. 
9387
9388         This fixes bug 32253
9389
9390         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
9391         delegates as well.
9392
9393         * driver.cs: Change the extension for modules to `netmodule'
9394
9395         * cs-parser.jay: Improved slightly the location tracking for
9396         the debugger symbols.
9397
9398         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
9399         modifiers that were specified instead of the hardcoded value
9400         (FamAndAssem).  This was basically ignoring the static modifier,
9401         and others.  Fixes 32429.
9402
9403         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
9404         fixed a bug in the process (32476)
9405
9406         * expression.cs (ArrayAccess.EmitAssign): Patch from
9407         hwang_rob@yahoo.ca that fixes bug 31834.3
9408
9409 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
9410
9411         * driver.cs: Make the module extension .netmodule.
9412
9413 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
9414
9415         * driver.cs: Report an error if the resource file is not found
9416         instead of crashing.
9417
9418         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
9419         false, like Emit does.
9420
9421 2002-10-16  Nick Drochak  <ndrochak@gol.com>
9422
9423         * typemanager.cs: Remove unused private member.  Also reported mcs
9424         bug to report this as a warning like csc.
9425
9426 2002-10-15  Martin Baulig  <martin@gnome.org>
9427
9428         * statement.cs (Statement.Emit): Made this a virtual method; emits
9429         the line number info and calls DoEmit().
9430         (Statement.DoEmit): New protected abstract method, formerly knows
9431         as Statement.Emit().
9432
9433         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
9434
9435 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
9436
9437         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
9438         have fixed a remaining problem: not every AddXXXX was adding a
9439         fully qualified name.  
9440
9441         Now everyone registers a fully qualified name in the DeclSpace as
9442         being defined instead of the partial name.  
9443
9444         Downsides: we are slower than we need to be due to the excess
9445         copies and the names being registered this way.  
9446
9447         The reason for this is that we currently depend (on the corlib
9448         bootstrap for instance) that types are fully qualified, because
9449         we dump all the types in the namespace, and we should really have
9450         types inserted into the proper namespace, so we can only store the
9451         basenames in the defined_names array.
9452
9453 2002-10-10  Martin Baulig  <martin@gnome.org>
9454
9455         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
9456         from bug #31834, see the bug report for a testcase which is
9457         miscompiled.
9458
9459 2002-10-10  Martin Baulig  <martin@gnome.org>
9460
9461         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
9462         flow analysis code for this.
9463
9464         * statement.cs (Do, While, For): Tell the flow analysis code about
9465         infinite loops.
9466         (FlowBranching.UsageVector): Added support for infinite loops.
9467         (Block.Resolve): Moved the dead code elimination here and use flow
9468         analysis to do it.
9469
9470 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
9471
9472         * class.cs (Field.Define): Catch cycles on struct type
9473         definitions. 
9474
9475         * typemanager.cs (IsUnmanagedtype): Do not recursively check
9476         fields if the fields are static.  We only need to check instance
9477         fields. 
9478
9479         * expression.cs (As.DoResolve): Test for reference type.
9480
9481         * statement.cs (Using.ResolveExpression): Use
9482         ConvertImplicitRequired, not ConvertImplicit which reports an
9483         error on failture
9484         (Using.ResolveLocalVariableDecls): ditto.
9485
9486         * expression.cs (Binary.ResolveOperator): Report errors in a few
9487         places where we had to.
9488
9489         * typemanager.cs (IsUnmanagedtype): Finish implementation.
9490
9491 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
9492
9493         * expression.cs: Use StoreFromPtr instead of extracting the type
9494         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
9495
9496         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
9497         an enumeration value to a System.Enum, but System.Enum is not a
9498         value type, but an class type, so we need to box.
9499
9500         (Expression.ConvertExplicit): One codepath could return
9501         errors but not flag them.  Fix this.  Fixes #31853
9502
9503         * parameter.cs (Resolve): Do not allow void as a parameter type.
9504
9505 2002-10-06  Martin Baulig  <martin@gnome.org>
9506
9507         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
9508         if it's a class type and not a struct.  Fixes #31815.
9509
9510 2002-10-06  Martin Baulig  <martin@gnome.org>
9511
9512         * statement.cs: Reworked the flow analysis code a bit to make it
9513         usable for dead code elimination.
9514
9515 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9516
9517         * cs-parser.jay: allow empty source files. Fixes bug #31781.
9518
9519 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
9520
9521         * expression.cs (ComposedCast.DoResolveType): A quick workaround
9522         to fix the test 165, will investigate deeper.
9523
9524 2002-10-04  Martin Baulig  <martin@gnome.org>
9525
9526         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
9527         finally blocks actually work.
9528         (Try.Resolve): We don't need to create a sibling for `finally' if
9529         there is no finally block.
9530
9531 2002-10-04  Martin Baulig  <martin@gnome.org>
9532
9533         * class.cs (Constructor.Define): The default accessibility for a
9534         non-default constructor is private, not public.
9535
9536 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
9537
9538         * class.cs (Constructor): Make AllowedModifiers public, add
9539         EXTERN.
9540
9541         * cs-parser.jay: Perform the modifiers test here, as the
9542         constructor for the Constructor class usually receives a zero
9543         because of the way we create it (first we create, later we
9544         customize, and we were never checking the modifiers).
9545
9546         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
9547         is a version of LookupTypeReflection that includes the type-name
9548         cache.  This can be used as a fast path for functions that know
9549         the fully qualified name and are only calling into *.GetType() to
9550         obtain a composed type.
9551
9552         This is also used by TypeManager.LookupType during its type
9553         composition.
9554
9555         (LookupType): We now also track the real type name, as sometimes
9556         we can get a quey for the real type name from things like
9557         ComposedCast.  This fixes bug 31422.
9558
9559         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
9560         complete type fullname, it does not have to go through the type
9561         resolution system to obtain the composed version of the type (for
9562         obtaining arrays or pointers).
9563
9564         (Conditional.Emit): Use the EmitBoolExpression to
9565         generate nicer code, as requested by Paolo.
9566
9567         (ArrayCreation.CheckIndices): Use the patch from
9568         hwang_rob@yahoo.ca to validate the array initializers. 
9569
9570 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
9571
9572         * class.cs (ConstructorInitializer.Emit): simplify code by using
9573         Invocation.EmitCall, and at the same time, fix the bugs in calling
9574         parent constructors that took variable arguments. 
9575
9576         * ecore.cs (Expression.ConvertNumericExplicit,
9577         Expression.ImplicitNumericConversion): Remove the code that
9578         manually wrapped decimal (InternalTypeConstructor call is now gone
9579         as well).
9580
9581         * expression.cs (Cast.TryReduce): Also handle decimal types when
9582         trying to perform a constant fold on the type.
9583
9584         * typemanager.cs (IsUnmanagedtype): Partially implemented.
9585
9586         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
9587         that only turned off an error report, and did nothing else. 
9588
9589 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
9590
9591         * driver.cs: Handle and ignore /fullpaths
9592
9593 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
9594
9595         * expression.cs (Binary.ResolveOperator): Catch the case where
9596         DoNumericPromotions returns true, 
9597
9598         (Binary.DoNumericPromotions): Simplify the code, and the tests.
9599
9600 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
9601
9602         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
9603         report error 70.
9604
9605 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
9606
9607         * ecore.cs (ConvertNumericExplicit): It is not enough that the
9608         conversion exists, but it is also required that the conversion be
9609         performed.  This manifested in "(Type64Enum) 2".  
9610
9611         * class.cs (TypeManager.AddMethod): The fix is not to change
9612         AddEnum, because that one was using a fully qualified name (every
9613         DeclSpace derivative does), but to change the AddMethod routine
9614         that was using an un-namespaced name.  This now correctly reports
9615         the duplicated name.
9616
9617         Revert patch until I can properly fix it.  The issue
9618         is that we have a shared Type space across all namespaces
9619         currently, which is wrong.
9620
9621         Options include making the Namespace a DeclSpace, and merge
9622         current_namespace/current_container in the parser.
9623
9624 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
9625
9626         * cs-parser.jay: Improve error reporting when we get a different
9627         kind of expression in local_variable_type and
9628         local_variable_pointer_type. 
9629
9630         Propagate this to avoid missleading errors being reported.
9631
9632         * ecore.cs (ImplicitReferenceConversion): treat
9633         TypeManager.value_type as a target just like object_type.   As
9634         code like this:
9635
9636         ValueType v = 1;
9637
9638         Is valid, and needs to result in the int 1 being boxed before it
9639         is assigned to the value type v.
9640
9641         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
9642         to validate the enumeration name.
9643
9644         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
9645         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
9646         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
9647
9648         * ecore.cs (TryImplicitIntConversion): When doing an
9649         implicit-enumeration-conversion, check if the type is 64-bits and
9650         perform a conversion before passing to EnumConstant.
9651
9652 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
9653
9654         * decl.cs (Error_AmbiguousTypeReference); New routine used to
9655         report ambiguous type references.  Unlike the MS version, we
9656         report what the ambiguity is.   Innovation at work ;-)
9657
9658         (DeclSpace.FindType): Require a location argument to
9659         display when we display an ambiguous error.
9660
9661         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
9662
9663         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
9664
9665         * expression.cs (EmitDynamicInitializers): Apply patch from
9666         hwang_rob@yahoo.ca that fixes the order in which we emit our
9667         initializers. 
9668
9669 2002-09-21  Martin Baulig  <martin@gnome.org>
9670
9671         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
9672         delegate takes no arguments.
9673
9674 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
9675
9676         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
9677         from integers.
9678
9679         * expression.cs: Extract the underlying type.
9680
9681         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
9682
9683         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
9684
9685 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
9686
9687         * class.cs (TypeContainer.DefineType): We can not use the nice
9688         PackingSize with the size set to 1 DefineType method, because it
9689         will not allow us to define the interfaces that the struct
9690         implements.
9691
9692         This completes the fixing of bug 27287
9693
9694         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
9695         means also structs.  This fixes part of the problem. 
9696         (Expresion.ImplicitReferenceConversionExists): ditto.
9697
9698         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
9699         error if there were no errors reported during the type lookup
9700         process, to avoid duplicates or redundant errors.  Without this
9701         you would get an ambiguous errors plus a type not found.  We have
9702         beaten the user enough with the first error.  
9703
9704         (DeclSparce.FindType): Emit a warning if we have an ambiguous
9705         reference. 
9706
9707         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
9708         during the resolution process, stop the lookup, this avoids
9709         repeated error reports (same error twice).
9710
9711         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
9712
9713         * typemanager.cs (LookupType): Redo the type lookup code to match
9714         the needs of System.Reflection.  
9715
9716         The issue is that System.Reflection requires references to nested
9717         types to begin with a "+" sign instead of a dot.  So toplevel
9718         types look like: "NameSpace.TopLevelClass", and nested ones look
9719         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
9720         levels. 
9721
9722 2002-09-19  Martin Baulig  <martin@gnome.org>
9723
9724         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
9725         says that a method always returns or always throws an exception,
9726         don't report the CS0161.
9727
9728         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
9729         set `Returns = new_returns'.
9730
9731 2002-09-19  Martin Baulig  <martin@gnome.org>
9732
9733         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
9734         to an enum constant, check for a CS0176.
9735
9736 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
9737
9738         * class.cs (TypeContainer.CheckPairedOperators): Now we check
9739         for operators that must be in pairs and report errors.
9740
9741         * ecore.cs (SimpleName.DoResolveType): During the initial type
9742         resolution process, when we define types recursively, we must
9743         check first for types in our current scope before we perform
9744         lookups in the enclosing scopes.
9745
9746         * expression.cs (MakeByteBlob): Handle Decimal blobs.
9747
9748         (Invocation.VerifyArgumentsCompat): Call
9749         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
9750         I thought we were supposed to always call this, but there are a
9751         few places in the code where we dont do it.
9752
9753 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
9754
9755         * driver.cs: Add support in -linkres and -resource to specify the
9756         name of the identifier.
9757
9758 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
9759
9760         * ecore.cs (StandardConversionExists): Sync with the conversion
9761         code: allow anything-* to void* conversions.
9762
9763         (FindMostSpecificSource): Use an Expression argument
9764         instead of a Type, because we might be handed over a Literal which
9765         gets a few more implicit conversions that plain types do not.  So
9766         this information was being lost.
9767
9768         Also, we drop the temporary type-holder expression when not
9769         required.
9770
9771 2002-09-17  Martin Baulig  <martin@gnome.org>
9772
9773         * class.cs (PropertyBase.CheckBase): Don't check the base class if
9774         this is an explicit interface implementation.
9775
9776 2002-09-17  Martin Baulig  <martin@gnome.org>
9777
9778         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
9779         different `IndexerName' attributes.
9780
9781         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
9782         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
9783         virtual CommonResolve().
9784
9785 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
9786
9787         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
9788         and convert that to the UnderlyingType.
9789
9790         * statement.cs (Foreach.Resolve): Indexers are just like variables
9791         or PropertyAccesses.
9792
9793         * cs-tokenizer.cs (consume_string): Track line numbers and columns
9794         inside quoted strings, we were not doing this before.
9795
9796 2002-09-16  Martin Baulig  <martin@gnome.org>
9797
9798         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
9799         resolve it.  This is needed for the definite assignment check of the
9800         instance expression, fixes bug #29846.
9801         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
9802
9803 2002-09-16  Nick Drochak  <ndrochak@gol.com>
9804
9805         * parameter.cs: Fix compile error.  Cannot reference static member
9806         from an instance object.  Is this an mcs bug?
9807
9808 2002-09-14  Martin Baulig  <martin@gnome.org>
9809
9810         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
9811         multiple times.  Fixes bug #30295, added test-166.cs.
9812
9813 2002-09-14  Martin Baulig  <martin@gnome.org>
9814
9815         * statement.cs (Block.Emit): Don't emit unreachable code.
9816         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
9817         `break' statements.
9818         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
9819
9820 2002-09-14  Martin Baulig  <martin@gnome.org>
9821
9822         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
9823         is set.
9824
9825 2002-09-14  Martin Baulig  <martin@gnome.org>
9826
9827         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
9828         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
9829         be false on the ms runtime.
9830
9831 2002-09-13  Martin Baulig  <martin@gnome.org>
9832
9833         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
9834         the CS0038 error message.
9835
9836 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
9837
9838         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
9839         constant inside, return it.
9840
9841 2002-09-12  Martin Baulig  <martin@gnome.org>
9842
9843         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
9844         implicit conversion can be done between enum types.
9845
9846         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
9847         check whether an implicit conversion to the current enum's UnderlyingType
9848         exists and report an error if not.
9849
9850         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
9851         without debugging support.
9852
9853         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
9854         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
9855
9856 2002-09-12  Martin Baulig  <martin@gnome.org>
9857
9858         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
9859
9860         * ecore.cs (IMemberExpr.DeclaringType): New property.
9861         (SimpleName.SimpleNameResolve): Check whether we're accessing a
9862         nonstatic member of an outer type (CS0038).
9863
9864 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
9865
9866         * driver.cs: Activate the using-error detector at warning level
9867         4 (at least for MS-compatible APIs).
9868
9869         * namespace.cs (VerifyUsing): Small buglett fix.
9870
9871         * pending.cs (PendingImplementation): pass the container pointer. 
9872
9873         * interface.cs (GetMethods): Allow for recursive definition.  Long
9874         term, I would like to move every type to support recursive
9875         definitions, not the current ordering mechanism that we have right
9876         now.
9877
9878         The situation is this: Attributes are handled before interfaces,
9879         so we can apply attributes to interfaces.  But some attributes
9880         implement interfaces, we will now handle the simple cases
9881         (recursive definitions will just get an error).  
9882
9883         * parameter.cs: Only invalidate types at the end if we fail to
9884         lookup all types.  
9885
9886 2002-09-09  Martin Baulig  <martin@gnome.org>
9887
9888         * ecore.cs (PropertyExpr.Emit): Also check for
9889         TypeManager.system_int_array_get_length so this'll also work when
9890         compiling corlib.  Fixes #30003.
9891
9892 2002-09-09  Martin Baulig  <martin@gnome.org>
9893
9894         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
9895         and throw an exception if we can't get the type's size.  Fixed #30040,
9896         added test-165.cs.
9897
9898 2002-09-09  Martin Baulig  <martin@gnome.org>
9899
9900         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
9901
9902         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
9903         context.  Fixes bug #30027.
9904
9905         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
9906         virtual functions.  Fixes bug #30043, added test-164.cs.
9907
9908 2002-09-08  Ravi Pratap  <ravi@ximian.com>
9909
9910         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
9911
9912 2002-09-08  Nick Drochak  <ndrochak@gol.com>
9913
9914         * driver.cs: Use an object to get the windows codepage since it's not a
9915         static property.
9916
9917 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
9918
9919         * statement.cs (For.Emit): for infinite loops (test == null)
9920         return whether there is a break inside, not always "true".
9921
9922         * namespace.cs (UsingEntry): New struct to hold the name of the
9923         using definition, the location where it is defined, and whether it
9924         has been used in a successful type lookup.
9925
9926         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
9927         strings.
9928
9929         * decl.cs: ditto.
9930
9931 2002-09-06  Ravi Pratap  <ravi@ximian.com>
9932
9933         * attribute.cs : Fix incorrect code which relied on catching
9934         a NullReferenceException to detect a null being passed in
9935         where an object was expected.
9936
9937 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
9938
9939         * statement.cs (Try): flag the catch variable as assigned
9940
9941         * expression.cs (Cast): Simplified by using ResolveType instead of
9942         manually resolving.
9943
9944         * statement.cs (Catch): Fix bug by using ResolveType.
9945
9946 2002-09-06  Ravi Pratap  <ravi@ximian.com>
9947
9948         * expression.cs (BetterConversion): Special case for when we have
9949         a NullLiteral as the argument and we have to choose between string
9950         and object types - we choose string the way csc does.
9951
9952         * attribute.cs (Attribute.Resolve): Catch the
9953         NullReferenceException and report error #182 since the Mono
9954         runtime no more has the bug and having this exception raised means
9955         we tried to select a constructor which takes an object and is
9956         passed a null.
9957
9958 2002-09-05  Ravi Pratap  <ravi@ximian.com>
9959
9960         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
9961         message (1502, 1503) when we can't locate a method after overload
9962         resolution. This is much more informative and closes the bug
9963         Miguel reported.
9964
9965         * interface.cs (PopulateMethod): Return if there are no argument
9966         types. Fixes a NullReferenceException bug.
9967
9968         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
9969         expressions too. Previously we were checking only in one place for
9970         positional arguments leaving out named arguments.
9971
9972         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
9973         type to the enum type is not allowed. Remove code corresponding to
9974         that.
9975
9976         (ConvertNumericExplicit): Allow explicit conversions from
9977         the underlying type to enum type. This precisely follows the spec
9978         and closes a bug filed by Gonzalo.
9979
9980 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9981
9982         * compiler.csproj:
9983         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
9984
9985 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
9986
9987         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
9988         it was important that we stored the right value after the
9989         reduction in `converted'.
9990
9991 2002-09-04  Martin Baulig  <martin@gnome.org>
9992
9993         * location.cs (Location.SymbolDocument): Use full pathnames for the
9994         source files.
9995
9996 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
9997
9998         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
9999         of the expression resolve mechanism, because that will catch the
10000         SimpleName error failures.
10001
10002         (Conditional): If we can not resolve the
10003         expression, return, do not crash.
10004
10005 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10006
10007         * cs-tokenizer.cs:
10008         (location): display token name instead of its number.
10009
10010 2002-08-28  Martin Baulig  <martin@gnome.org>
10011
10012         * expression.cs (Binary.ResolveOperator): Don't silently return
10013         but return an error if an operator cannot be applied between two
10014         enum types.
10015
10016 2002-08-28  Martin Baulig  <martin@gnome.org>
10017
10018         * class.cs (Constructor.Define): Set the permission attributes
10019         correctly instead of making all constructors public.
10020
10021 2002-08-28  Martin Baulig  <martin@gnome.org>
10022
10023         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
10024         for private members before reporting a CS0103; if we find anything,
10025         it's a CS0122.
10026
10027 2002-08-28  Martin Baulig  <martin@gnome.org>
10028
10029         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
10030         to check whether `closure_start_type == closure_invocation_type',
10031         we also need to check whether `m.DeclaringType == closure_invocation_type'
10032         before bypassing the permission checks.  We might be accessing
10033         protected/private members from the base class.
10034         (TypeManager.RealMemberLookup): Only set private_ok if private
10035         members were requested via BindingFlags.NonPublic.
10036
10037         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
10038
10039         * expression.cs (MemberAccess.ResolveMemberAccess): Set
10040         MethodGroupExpr.IsExplicitImpl if appropriate.
10041         (Invocation.DoResolve): Don't report the CS0120 for explicit
10042         interface implementations.
10043
10044 2002-08-27  Martin Baulig  <martin@gnome.org>
10045
10046         * expression.cs (Invocation.DoResolve): If this is a static
10047         method and we don't have an InstanceExpression, we must report
10048         a CS0120.
10049
10050 2002-08-25  Martin Baulig  <martin@gnome.org>
10051
10052         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
10053         `==' between a valuetype and an object.
10054
10055 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
10056
10057         * ecore.cs (TypeExpr): Provide a ToString method.
10058
10059 2002-08-24  Martin Baulig  <martin@gnome.org>
10060
10061         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
10062         now called proggie.dbg and it's a binary file.
10063
10064 2002-08-23  Martin Baulig  <martin@gnome.org>
10065
10066         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
10067
10068 2002-08-23  Martin Baulig  <martin@gnome.org>
10069
10070         * struct.cs (MyStructInfo.ctor): Make this work with empty
10071         structs; it's not allowed to use foreach() on null.
10072
10073 2002-08-23  Martin Baulig  <martin@gnome.org>
10074
10075         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
10076         writer the full pathname of the generated assembly.
10077
10078 2002-08-23  Martin Baulig  <martin@gnome.org>
10079
10080         * statements.cs (FlowBranching.UsageVector.MergeChildren):
10081         A `finally' block never returns or breaks; improved handling of
10082         unreachable code.
10083
10084 2002-08-23  Martin Baulig  <martin@gnome.org>
10085
10086         * statement.cs (Throw.Resolve): Allow `throw null'.
10087
10088 2002-08-23  Martin Baulig  <martin@gnome.org>
10089
10090         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
10091         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
10092         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
10093         MemberLookup would return a wrong event if this is an explicit
10094         interface implementation and the class has an event with the same
10095         name.
10096
10097 2002-08-23  Martin Baulig  <martin@gnome.org>
10098
10099         * statement.cs (Block.AddChildVariableNames): New public method.
10100         (Block.AddChildVariableName): Likewise.
10101         (Block.IsVariableNameUsedInChildBlock): Likewise.
10102         (Block.AddVariable): Check whether a variable name has already
10103         been used in a child block.
10104
10105         * cs-parser.jay (declare_local_variables): Mark all variable names
10106         from the current block as being used in a child block in the
10107         implicit block.
10108
10109 2002-08-23  Martin Baulig  <martin@gnome.org>
10110
10111         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
10112         find the symbol writer.
10113
10114         * driver.cs: csc also allows the arguments to /define being
10115         separated by commas, not only by semicolons.
10116
10117 2002-08-23  Martin Baulig  <martin@gnome.org>
10118
10119         * interface.cs (Interface.GetMembers): Added static check for events.
10120
10121 2002-08-15  Martin Baulig  <martin@gnome.org>
10122
10123         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
10124         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
10125
10126         * ecore.cs (Expression.MemberLookup): Added documentation and explained
10127         why the MethodData.EmitDestructor() change was necessary.
10128
10129 2002-08-20  Martin Baulig  <martin@gnome.org>
10130
10131         * class.cs (TypeContainer.FindMembers): Added static check for events.
10132
10133         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
10134
10135         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
10136         use Type.GetEvents(), not Type.FindMembers().
10137
10138 2002-08-20  Martin Baulig  <martin@gnome.org>
10139
10140         * decl.cs (MemberCache): Added a special method cache which will
10141         be used for method-only searched.  This ensures that a method
10142         search will return a MethodInfo with the correct ReflectedType for
10143         inherited methods.      
10144
10145 2002-08-20  Martin Baulig  <martin@gnome.org>
10146
10147         * decl.cs (DeclSpace.FindMembers): Made this public.
10148
10149 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10150
10151         * delegate.cs: fixed build on windows.
10152         [FIXME:  Filed as bug #29150: MCS must report these errors.]
10153
10154 2002-08-19  Ravi Pratap  <ravi@ximian.com>
10155
10156         * ecore.cs (StandardConversionExists): Return a false
10157         if we are trying to convert the void type to anything else
10158         since that is not allowed.
10159
10160         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
10161         we flag error 70 in the event an event is trying to be accessed
10162         directly from outside the declaring type.
10163
10164 2002-08-20  Martin Baulig  <martin@gnome.org>
10165
10166         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
10167         MemberCache from typemanager.cs to decl.cs.
10168
10169 2002-08-19  Martin Baulig  <martin@gnome.org>
10170
10171         * class.cs (TypeContainer): Implement IMemberContainer.
10172         (TypeContainer.DefineMembers): Create the MemberCache.
10173         (TypeContainer.FindMembers): Do better BindingFlags checking; only
10174         return public members if BindingFlags.Public was given, check
10175         whether members are static.
10176
10177 2002-08-16  Martin Baulig  <martin@gnome.org>
10178
10179         * decl.cs (DeclSpace.Define): Splitted this in Define and
10180         DefineMembers.  DefineMembers is called first and initializes the
10181         MemberCache.
10182
10183         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
10184         DefineMembers() on all our DeclSpaces.
10185
10186         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
10187         but call DefineMembers() on all nested interfaces.  We call their
10188         Define() in our new Define() function.
10189
10190         * interface.cs (Interface): Implement IMemberContainer.
10191         (Interface.Define): Moved all code except the attribute stuf to
10192         DefineMembers().
10193         (Interface.DefineMembers): Initialize the member cache.
10194
10195         * typemanager.cs (IMemberFinder): Removed this interface, we don't
10196         need this anymore since we can use MemberCache.FindMembers directly.
10197
10198 2002-08-19  Martin Baulig  <martin@gnome.org>
10199
10200         * typemanager.cs (MemberCache): When creating the cache for an
10201         interface type, add all inherited members.
10202         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
10203         to `out bool used_cache' and documented it.
10204         (TypeManager.MemberLookup): If we already used the cache in the first
10205         iteration, we don't need to do the interfaces check.
10206
10207 2002-08-19  Martin Baulig  <martin@gnome.org>
10208
10209         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
10210         here from IMemberFinder and don't implement this interface anymore.
10211         (DeclSpace.MemberCache): Moved here from IMemberFinder.
10212
10213         * typemanager.cs (IMemberFinder): This interface is now only used by
10214         classes which actually support the member cache.
10215         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
10216         since we only put DeclSpaces into this Hashtable.
10217         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
10218         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
10219
10220 2002-08-16  Martin Baulig  <martin@gnome.org>
10221
10222         * typemanager.cs (ICachingMemberFinder): Removed.
10223         (IMemberFinder.MemberCache): New property.
10224         (TypeManager.FindMembers): Merged this with RealFindMembers().
10225         This function will never be called from TypeManager.MemberLookup()
10226         so we can't use the cache here, just the IMemberFinder.
10227         (TypeManager.MemberLookup_FindMembers): Check whether the
10228         IMemberFinder has a MemberCache and call the cache's FindMembers
10229         function.
10230         (MemberCache): Rewrote larger parts of this yet another time and
10231         cleaned it up a bit.
10232
10233 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
10234
10235         * driver.cs (LoadArgs): Support quoting.
10236
10237         (Usage): Show the CSC-like command line arguments.
10238
10239         Improved a few error messages.
10240
10241 2002-08-15  Martin Baulig  <martin@gnome.org>
10242
10243         * typemanager.cs (IMemberContainer.Type): New property.
10244         (IMemberContainer.IsInterface): New property.
10245
10246         The following changes are conditional to BROKEN_RUNTIME, which is
10247         defined at the top of the file.
10248
10249         * typemanager.cs (MemberCache.MemberCache): Don't add the base
10250         class'es members, but add all members from TypeHandle.ObjectType
10251         if we're an interface.
10252         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
10253         is the current type.
10254         (MemberCache.CacheEntry.Container): Removed this field.
10255         (TypeHandle.GetMembers): Include inherited members.
10256
10257 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10258
10259         * typemanager.cs: fixed compilation and added a comment on a field that
10260         is never used.
10261
10262 2002-08-15  Martin Baulig  <martin@gnome.org>
10263
10264         * class.cs (ConstructorInitializer.Resolve): In the
10265         Expression.MemberLookup call, use the queried_type as
10266         invocation_type.
10267
10268         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
10269         declared' attribute, it's always true.
10270         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
10271         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
10272         temporary wrapper for FindMembers which tells MemberLookup whether
10273         members from the base classes are included in the return value.
10274         This will go away soon.
10275         (TypeManager.MemberLookup): Use this temporary hack here; once the
10276         new MemberCache is completed, we don't need to do the DeclaredOnly
10277         looping here anymore since the MemberCache will take care of this.
10278         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
10279         (MemberCache): When creating the MemberCache for a class, get
10280         members from the current class and all its base classes.
10281         (MemberCache.CacheEntry.Container): New field.  This is a
10282         temporary hack until the Mono runtime is fixed to distinguish
10283         between ReflectedType and DeclaringType.  It allows us to use MCS
10284         with both the MS runtime and the unfixed Mono runtime without
10285         problems and without accecting performance.
10286         (MemberCache.SearchMembers): The DeclaredOnly looping from
10287         TypeManager.MemberLookup is now done here.      
10288
10289 2002-08-14  Martin Baulig  <martin@gnome.org>
10290
10291         * statement.cs (MyStructInfo.MyStructInfo): Don't call
10292         Type.GetFields on dynamic types but get the fields from the
10293         corresponding TypeContainer.
10294         (MyStructInfo.GetStructInfo): Added check for enum types.
10295
10296         * typemanager.cs (MemberList.IsSynchronized): Implemented.
10297         (MemberList.SyncRoot): Implemented.
10298         (TypeManager.FilterWithClosure): No need to check permissions if
10299         closure_start_type == closure_invocation_type, don't crash if
10300         closure_invocation_type is null.
10301
10302 2002-08-13  Martin Baulig  <martin@gnome.org>
10303
10304         Rewrote TypeContainer.FindMembers to use a member cache.  This
10305         gives us a speed increase of about 35% for the self-hosting MCS
10306         build and of about 15-20% for the class libs (both on GNU/Linux).
10307
10308         * report.cs (Timer): New class to get enhanced profiling.  This
10309         whole class is "TIMER" conditional since it remarkably slows down
10310         compilation speed.
10311
10312         * class.cs (MemberList): New class.  This is an IList wrapper
10313         which we're now using instead of passing MemberInfo[]'s around to
10314         avoid copying this array unnecessarily.
10315         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
10316         (ICachingMemberFinder, IMemberContainer): New interface.
10317         (TypeManager.FilterWithClosure): If `criteria' is null, the name
10318         has already been checked, otherwise use it for the name comparision.
10319         (TypeManager.FindMembers): Renamed to RealMemberFinder and
10320         provided wrapper which tries to use ICachingMemberFinder.FindMembers
10321         if possible.  Returns a MemberList, not a MemberInfo [].
10322         (TypeHandle): New class, implements IMemberContainer.  We create
10323         one instance of this class per type, it contains a MemberCache
10324         which is used to do the member lookups.
10325         (MemberCache): New class.  Each instance of this class contains
10326         all members of a type and a name-based hash table.
10327         (MemberCache.FindMembers): This is our new member lookup
10328         function.  First, it looks up all members of the requested name in
10329         the hash table.  Then, it walks this list and sorts out all
10330         applicable members and returns them.
10331
10332 2002-08-13  Martin Baulig  <martin@gnome.org>
10333
10334         In addition to a nice code cleanup, this gives us a performance
10335         increase of about 1.4% on GNU/Linux - not much, but it's already
10336         half a second for the self-hosting MCS compilation.
10337
10338         * typemanager.cs (IMemberFinder): New interface.  It is used by
10339         TypeManager.FindMembers to call FindMembers on a TypeContainer,
10340         Enum, Delegate or Interface.
10341         (TypeManager.finder_to_member_finder): New PtrHashtable.
10342         (TypeManager.finder_to_container): Removed.
10343         (TypeManager.finder_to_delegate): Removed.
10344         (TypeManager.finder_to_interface): Removed.
10345         (TypeManager.finder_to_enum): Removed.
10346
10347         * interface.cs (Interface): Implement IMemberFinder.
10348
10349         * delegate.cs (Delegate): Implement IMemberFinder.
10350
10351         * enum.cs (Enum): Implement IMemberFinder.
10352
10353         * class.cs (TypeContainer): Implement IMemberFinder.
10354
10355 2002-08-12  Martin Baulig  <martin@gnome.org>
10356
10357         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
10358
10359 2002-08-12  Martin Baulig  <martin@gnome.org>
10360
10361         * ecore.cs (ITypeExpression): New interface for expressions which
10362         resolve to a type.
10363         (TypeExpression): Renamed to TypeLookupExpression.
10364         (Expression.DoResolve): If we're doing a types-only lookup, the
10365         expression must implement the ITypeExpression interface and we
10366         call DoResolveType() on it.
10367         (SimpleName): Implement the new ITypeExpression interface.
10368         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
10369         hack, the situation that we're only looking up types can't happen
10370         anymore when this method is called.  Moved the type lookup code to
10371         DoResolveType() and call it.
10372         (SimpleName.DoResolveType): This ITypeExpression interface method
10373         is now doing the types-only lookup.
10374         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
10375         (ResolveFlags): Added MaskExprClass.
10376
10377         * expression.cs (MemberAccess): Implement the ITypeExpression
10378         interface.
10379         (MemberAccess.DoResolve): Added support for a types-only lookup
10380         when we're called via ITypeExpression.DoResolveType().
10381         (ComposedCast): Implement the ITypeExpression interface.
10382
10383         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
10384         Expression.Resolve() with ResolveFlags.Type instead.
10385
10386 2002-08-12  Martin Baulig  <martin@gnome.org>
10387
10388         * interface.cs (Interface.Define): Apply attributes.
10389
10390         * attribute.cs (Attribute.ApplyAttributes): Added support for
10391         interface attributes.
10392
10393 2002-08-11  Martin Baulig  <martin@gnome.org>
10394
10395         * statement.cs (Block.Emit): Only check the "this" variable if we
10396         do not always throw an exception.
10397
10398         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
10399         whether the property has a set accessor.
10400
10401 2002-08-11  Martin Baulig  <martin@gnome.org>
10402
10403         Added control flow analysis support for structs.
10404
10405         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
10406         with control flow analysis turned off.
10407         (IVariable): New interface.
10408         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
10409         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
10410         (FieldExpr.DoResolve): Resolve the instance expression with flow
10411         analysis turned off and do the definite assignment check after the
10412         resolving when we know what the expression will resolve to.
10413
10414         * expression.cs (LocalVariableReference, ParameterReference):
10415         Implement the new IVariable interface, only call the flow analysis
10416         code if ec.DoFlowAnalysis is true.
10417         (This): Added constructor which takes a Block argument.  Implement
10418         the new IVariable interface.
10419         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
10420         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
10421         This does the definite assignment checks for struct members.
10422
10423         * class.cs (Constructor.Emit): If this is a non-static `struct'
10424         constructor which doesn't have any initializer, call
10425         Block.AddThisVariable() to tell the flow analysis code that all
10426         struct elements must be initialized before control returns from
10427         the constructor.
10428
10429         * statement.cs (MyStructInfo): New public class.
10430         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
10431         argument to this indexer.  If non-zero, check an individual struct
10432         member, not the whole struct.
10433         (FlowBranching.CheckOutParameters): Check struct members.
10434         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
10435         overloaded versions of these methods which take an additional
10436         `int field_idx' argument to check struct members.
10437         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
10438         overloaded versions of these methods which take an additional
10439         `string field_name' argument to check struct member.s
10440         (VariableInfo): Implement the IVariable interface.
10441         (VariableInfo.StructInfo): New public property.  Returns the
10442         MyStructInfo instance of the variable if it's a struct or null.
10443         (Block.AddThisVariable): New public method.  This is called from
10444         Constructor.Emit() for non-static `struct' constructor which do
10445         not have any initializer.  It creates a special variable for the
10446         "this" instance variable which will be checked by the flow
10447         analysis code to ensure that all of the struct's fields are
10448         initialized before control returns from the constructor.
10449         (UsageVector): Added support for struct members.  If a
10450         variable/parameter is a struct with N members, we reserve a slot
10451         in the usage vector for each member.  A struct is considered fully
10452         initialized if either the struct itself (slot 0) or all its
10453         members are initialized.
10454
10455 2002-08-08  Martin Baulig  <martin@gnome.org>
10456
10457         * driver.cs (Driver.MainDriver): Only report an error CS5001
10458         if there were no compilation errors.
10459
10460         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
10461         `UnsafeContext' property to determine whether the parent is in
10462         unsafe context rather than checking the parent's ModFlags:
10463         classes nested in an unsafe class are unsafe as well.
10464
10465 2002-08-08  Martin Baulig  <martin@gnome.org>
10466
10467         * statement.cs (UsageVector.MergeChildren): Distinguish between
10468         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
10469         we return.  Added test17() and test18() to test-154.cs.
10470
10471 2002-08-08  Martin Baulig  <martin@gnome.org>
10472
10473         * typemanager.cs (TypeManager.FilterWithClosure): If we have
10474         Family access, make sure the invoking type isn't a subclass of the
10475         queried type (that'd be a CS1540).
10476
10477         * ecore.cs (Expression.MemberLookup): Added overloaded version of
10478         this method which takes an additional `Type invocation_type'.
10479
10480         * expression.cs (BaseAccess.DoResolve): Use the base type as
10481         invocation and query type.
10482         (MemberAccess.DoResolve): If the lookup failed and we're about to
10483         report a CS0122, try a lookup with the ec.ContainerType - if this
10484         succeeds, we must report a CS1540.
10485
10486 2002-08-08  Martin Baulig  <martin@gnome.org>
10487
10488         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
10489         (MethodGroupExpr): Implement the IMemberExpr interface.
10490
10491         * expression (MemberAccess.ResolveMemberAccess): No need to have
10492         any special code for MethodGroupExprs anymore, they're now
10493         IMemberExprs.   
10494
10495 2002-08-08  Martin Baulig  <martin@gnome.org>
10496
10497         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
10498         Family, FamANDAssem and FamORAssem permissions.
10499         (TypeManager.IsSubclassOrNestedChildOf): New public method.
10500
10501 2002-08-08  Martin Baulig  <martin@gnome.org>
10502
10503         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
10504         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
10505         or loop block.
10506
10507 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
10508
10509         * driver.cs: implemented /resource option to embed managed resources.
10510
10511 2002-08-07  Martin Baulig  <martin@gnome.org>
10512
10513         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
10514         (FieldBase.HasFieldInitializer): New public property.
10515         (FieldBase.GetInitializerExpression): New public method.  Resolves and
10516         returns the field initializer and makes sure it is only resolved once.
10517         (TypeContainer.EmitFieldInitializers): Call
10518         FieldBase.GetInitializerExpression to get the initializer, this ensures
10519         that it isn't resolved multiple times.
10520
10521         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
10522         the resolving process (SimpleName/MemberLookup) that we're currently
10523         emitting a field initializer (which must not access any instance members,
10524         this is an error CS0236).
10525
10526         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
10527         argument, if the `IsFieldInitializer' flag is set, we must report and
10528         error CS0236 and not an error CS0120.   
10529
10530 2002-08-07  Martin Baulig  <martin@gnome.org>
10531
10532         * ecore.cs (IMemberExpr): New public interface.
10533         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
10534         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
10535         if the expression is an IMemberExpr.
10536
10537         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
10538         to be null, implicitly default to `this' if we're non-static in
10539         this case.  Simplified the code a lot by using the new IMemberExpr
10540         interface.  Also fixed bug #28176 here.
10541
10542 2002-08-06  Martin Baulig  <martin@gnome.org>
10543
10544         * cs-parser.jay (SimpleLookup): Removed.  We need to create
10545         ParameterReferences during semantic analysis so that we can do a
10546         type-only search when resolving Cast, TypeOf and SizeOf.
10547         (block): Pass the `current_local_parameters' to the Block's
10548         constructor.
10549
10550         * class.cs (ConstructorInitializer): Added `Parameters parameters'
10551         argument to the constructor.
10552         (ConstructorInitializer.Resolve): Create a temporary implicit
10553         block with the parameters.
10554
10555         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
10556         references here if we aren't doing a type-only search.
10557
10558         * statement.cs (Block): Added constructor which takes a
10559         `Parameters parameters' argument.
10560         (Block.Parameters): New public property.
10561
10562         * support.cs (InternalParameters.Parameters): Renamed `parameters'
10563         to `Parameters' and made it public readonly.
10564
10565 2002-08-06  Martin Baulig  <martin@gnome.org>
10566
10567         * ecore.cs (Expression.Warning): Made this public as well.
10568
10569         * report.cs (Report.Debug): Print the contents of collections.
10570
10571 2002-08-06  Martin Baulig  <martin@gnome.org>
10572
10573         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
10574         used to tell Resolve() which kinds of expressions it may return.
10575         (Expression.Resolve): Added overloaded version of this method which
10576         takes a `ResolveFlags flags' argument.  This can be used to tell
10577         Resolve() which kinds of expressions it may return.  Reports a
10578         CS0118 on error.
10579         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
10580         ResolveFlags.SimpleName.
10581         (Expression.Error118): Added overloaded version of this method which
10582         takes a `ResolveFlags flags' argument.  It uses the flags to determine
10583         which kinds of expressions are allowed.
10584
10585         * expression.cs (Argument.ResolveMethodGroup): New public method.
10586         Resolves an argument, but allows a MethodGroup to be returned.
10587         This is used when invoking a delegate.
10588
10589         * TODO: Updated a bit.
10590
10591 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10592
10593         Fixed compilation with csc.
10594
10595         * ecore.cs: Expression.Error made public. Is this correct? Should
10596         Warning be made public too?
10597
10598         * expression.cs: use ea.Location instead of ea.loc.
10599         [FIXME:  Filed as bug #28607: MCS must report these errors.]
10600
10601 2002-08-06  Martin Baulig  <martin@gnome.org>
10602
10603         * ecore.cs (Expression.loc): Moved the location here instead of
10604         duplicating it in all derived classes.
10605         (Expression.Location): New public property.
10606         (Expression.Error, Expression.Warning): Made them non-static and
10607         removed the location argument.
10608         (Expression.Warning): Added overloaded version which takes an
10609         `int level' argument.
10610         (Expression.Error118): Make this non-static and removed the
10611         expression and location arguments.
10612         (TypeExpr): Added location argument to the constructor.
10613
10614         * expression.cs (StaticCallExpr): Added location argument to
10615         the constructor.
10616         (Indirection, PointerArithmetic): Likewise.
10617         (CheckedExpr, UnCheckedExpr): Likewise.
10618         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
10619         (StringPtr): Likewise.
10620
10621
10622 2002-08-05  Martin Baulig  <martin@gnome.org>
10623
10624         * expression.cs (BaseAccess.DoResolve): Actually report errors.
10625
10626         * assign.cs (Assign.DoResolve): Check whether the source
10627         expression is a value or variable.
10628
10629         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
10630         while resolving the corresponding blocks.
10631
10632         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
10633         an error, don't silently return null.
10634
10635         * statement.cs (Block.AddVariable): Do the error reporting here
10636         and distinguish between CS0128 and CS0136.
10637         (Block.DoResolve): Report all unused labels (warning CS0164).
10638         (LabeledStatement): Pass the location to the constructor.
10639         (LabeledStatement.HasBeenReferenced): New property.
10640         (LabeledStatement.Resolve): Set it to true here.
10641
10642         * statement.cs (Return.Emit): Return success even after reporting
10643         a type mismatch error (CS0126 or CS0127), this is what csc does and
10644         it avoids confusing the users with any consecutive errors.
10645
10646 2002-08-05  Martin Baulig  <martin@gnome.org>
10647
10648         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
10649
10650         * const.cs (Const.LookupConstantValue): Catch circular definitions.
10651
10652         * expression.cs (MemberAccess.DoResolve): Silently return if an
10653         error has already been reported.
10654
10655         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
10656         error has already been reported.
10657
10658 2002-08-05  Martin Baulig  <martin@gnome.org>
10659
10660         * statement.cs (UsageVector): Only initialize the `parameters'
10661         vector if we actually have any "out" parameters.
10662
10663 2002-08-05  Martin Baulig  <martin@gnome.org>
10664
10665         * expression.cs (Binary.ResolveOperator): When combining delegates,
10666         they must have the same type.
10667
10668 2002-08-05  Martin Baulig  <martin@gnome.org>
10669
10670         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
10671         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
10672         work with the ms runtime and we also don't need it: if we're a
10673         PropertyBuilder and not in the `indexer_arguments' hash, then we
10674         are a property and not an indexer.
10675
10676         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
10677         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
10678         since the latter one doesn't work with the ms runtime.
10679
10680 2002-08-03  Martin Baulig  <martin@gnome.org>
10681
10682         Fixed bugs #27998 and #22735.
10683
10684         * class.cs (Method.IsOperator): New public field.
10685         (Method.CheckBase): Report CS0111 if there's already a method
10686         with the same parameters in the current class.  Report CS0508 when
10687         attempting to change the return type of an inherited method.
10688         (MethodData.Emit): Report CS0179 if a method doesn't have a body
10689         and it's not marked abstract or extern.
10690         (PropertyBase): New abstract base class for Property and Indexer.
10691         (PropertyBase.CheckBase): Moved here from Property and made it work
10692         for indexers.
10693         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
10694         the same so we can reuse it there.
10695         (Property, Indexer): Derive from PropertyBase.
10696         (MethodSignature.inheritable_property_signature_filter): New delegate
10697         to find properties and indexers.
10698
10699         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
10700         argument and improved error reporting.
10701
10702         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
10703         EmptyReadOnlyParameters and made it a property.
10704
10705         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
10706         version of this method which takes a `PropertyInfo indexer'.
10707         (TypeManager.RegisterIndexer): New method.
10708
10709         * class.cs: Added myself as author of this file :-)
10710
10711 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10712
10713         * class.cs: fixed compilation on windoze.
10714
10715 2002-08-03  Martin Baulig  <martin@gnome.org>
10716
10717         * interface.cs (Interface.GetInterfaceBases): Check whether all
10718         base interfaces are at least as accessible than the current one.
10719
10720         * class.cs (TypeContainer.GetClassBases): Check whether base types
10721         are at least as accessible than the current type.
10722         (TypeContainer.AsAccessible): Implemented and made non-static.
10723         (MemberBase.CheckParameters): Report errors if the accessibility
10724         checks fail.
10725
10726         * delegate.cs (Delegate.Delegate): The default visibility is
10727         internal for top-level types and private for nested types.
10728         (Delegate.Define): Report errors if the accessibility checks fail.
10729
10730         * enum.cs (Enum.Enum): The default visibility is internal for
10731         top-level types and private for nested types.
10732         (Enum.DefineType): Compute the correct visibility.
10733
10734         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
10735         function which takes a `bool is_toplevel' instead of a TypeContainer.
10736
10737         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
10738         builtin type.
10739
10740 2002-08-02  Martin Baulig  <martin@gnome.org>
10741
10742         * expression.cs (LocalVariableReferenc): Added constructor which
10743         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
10744         (LocalVariableReference.IsReadOnly): New property.
10745         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
10746         variable is readonly, use our own readonly flag to do this; you can
10747         use the new constructor to get a writable reference to a read-only
10748         variable.
10749
10750         * cs-parser.jay (foreach_statement, using_statement): Get a writable
10751         reference to the local variable.
10752
10753 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
10754
10755         * rootcontext.cs (ResolveCore): Also include System.Exception
10756
10757         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
10758         we reach an EmptyStatement.
10759
10760         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
10761         is also fine.
10762
10763         * expression.cs (Binary.ResolveOperator): Check error result in
10764         two places.
10765
10766         use brtrue/brfalse directly and avoid compares to null.
10767
10768 2002-08-02  Martin Baulig  <martin@gnome.org>
10769
10770         * class.cs (TypeContainer.Define): Define all nested interfaces here.
10771         Fixes bug #28407, added test-155.cs.
10772
10773 2002-08-01  Martin Baulig  <martin@gnome.org>
10774
10775         * class.cs (Event.EmitDefaultMethod): Make this work with static
10776         events.  Fixes #28311, added verify-3.cs.
10777
10778 2002-08-01  Martin Baulig  <martin@gnome.org>
10779
10780         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
10781         `is_disposable' fields.
10782         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
10783         `hm.is_disposable' if we're using the collection pattern.
10784         (Foreach.EmitCollectionForeach): Use the correct type for the
10785         enumerator's local variable, only emit the try/finally block if
10786         necessary (fixes #27713).
10787
10788 2002-08-01  Martin Baulig  <martin@gnome.org>
10789
10790         * ecore.cs (Expression.report118): Renamed to Error118 and made
10791         it public static.
10792
10793         * statement.cs (Throw.Resolve): Check whether the expression is of
10794         the correct type (CS0118) and whether the type derives from
10795         System.Exception (CS0155).
10796         (Catch.Resolve): New method.  Do the type lookup here and check
10797         whether it derives from System.Exception (CS0155).
10798         (Catch.CatchType, Catch.IsGeneral): New public properties.
10799
10800         * typemanager.cs (TypeManager.exception_type): Added.
10801
10802 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
10803
10804         * driver.cs: Updated About function.
10805
10806 2002-07-31  Martin Baulig  <martin@gnome.org>
10807
10808         Implemented Control Flow Analysis.
10809
10810         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
10811         (EmitContext.CurrentBranching): Added.
10812         (EmitContext.StartFlowBranching): Added.
10813         (EmitContext.EndFlowBranching): Added.
10814         (EmitContext.KillFlowBranching): Added.
10815         (EmitContext.IsVariableAssigned): Added.
10816         (EmitContext.SetVariableAssigned): Added.
10817         (EmitContext.IsParameterAssigned): Added.
10818         (EmitContext.SetParameterAssigned): Added.
10819         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
10820         Added control flow analysis stuff here.
10821
10822         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
10823         resolve the expression as lvalue.
10824         (LocalVariableReference.DoResolve): Check whether the variable has
10825         already been assigned.
10826         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
10827         the parameter as assigned here.
10828         (ParameterReference.DoResolve): Check whether the parameter has already
10829         been assigned.
10830         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
10831         expression as lvalue.
10832
10833         * statement.cs (FlowBranching): New class for the flow analysis code.
10834         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
10835         (LabeledStatement.IsDefined): New public property.
10836         (LabeledStatement.AddUsageVector): New public method to tell flow
10837         analyis that the label may be reached via a forward jump.
10838         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
10839         flow analysis.
10840         (VariableInfo.Number): New public field.  This is used by flow analysis
10841         to number all locals of a block.
10842         (Block.CountVariables): New public property.  This is the number of
10843         local variables in this block (including the locals from all parent
10844         blocks).
10845         (Block.EmitMeta): Number all the variables.
10846
10847         * statement.cs: Added flow analysis support to all classes.
10848
10849 2002-07-31  Martin Baulig  <martin@gnome.org>
10850
10851         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
10852         To get debugging messages, compile mcs with /define:MCS_DEBUG and
10853         then use this argument.
10854
10855         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
10856
10857         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
10858         use this to specify /define options.
10859
10860 2002-07-29  Martin Baulig  <martin@gnome.org>
10861
10862         * statement.cs (Fixed): Moved all code that does variable lookups
10863         and resolvings from Emit to Resolve.
10864
10865         * statement.cs (For): Moved all code that does variable lookups
10866         and resolvings from Emit to Resolve.
10867
10868         * statement.cs (Using): Moved all code that does variable lookups
10869         and resolvings from Emit to Resolve.
10870
10871 2002-07-29  Martin Baulig  <martin@gnome.org>
10872
10873         * attribute.cs (Attribute.Resolve): Explicitly catch a
10874         System.NullReferenceException when creating the
10875         CustromAttributeBuilder and report a different warning message.
10876
10877 2002-07-29  Martin Baulig  <martin@gnome.org>
10878
10879         * support.cs (ParameterData.ParameterName): Added method to
10880         get the name of a parameter.
10881
10882         * typemanager.cs (TypeManager.IsValueType): New public method.
10883
10884 2002-07-29  Martin Baulig  <martin@gnome.org>
10885
10886         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
10887         is a flag which specifies that it's either ref or out.
10888         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
10889         the out parameter to `out Parameter.Modifier mod', also set the
10890         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
10891
10892         * support.cs (InternalParameters.ParameterModifier): Distinguish
10893         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
10894         Parameter.Modifier.ISBYREF flag if it's either ref or out.
10895
10896         * expression.cs (Argument.GetParameterModifier): Distinguish
10897         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
10898         Parameter.Modifier.ISBYREF flag if it's either ref or out.
10899
10900 2002-07-29  Martin Baulig  <martin@gnome.org>
10901
10902         * expression.cs (ParameterReference.ParameterReference): Added
10903         `Location loc' argument to the constructor.
10904
10905         * cs-parser.jay: Pass location to ParameterReference.
10906
10907 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
10908
10909         * statement.cs (Try): Initialize the location.
10910
10911         * cs-parser.jay: pass location to Try.
10912
10913         * expression.cs (Unary.Reduce): Change the prototype to return
10914         whether a constant fold could be performed or not.  The result is
10915         returned in an out parameters.  In the case of Indirection and
10916         AddressOf, we want to perform the full tests.
10917
10918 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
10919
10920         * statement.cs (Statement.Emit): Flag dead code.
10921
10922 2002-07-27  Andrew Birkett  <andy@nobugs.org>
10923
10924         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
10925
10926 2002-07-27  Martin Baulig  <martin@gnome.org>
10927
10928         * class.cs (MethodData.Define): Put back call to
10929         TypeManager.AddMethod(), accidentally commented this out.
10930
10931         * report.cs (Debug): New public method to print debugging information,
10932         this is `[Conditional ("DEBUG")]'.
10933
10934 2002-07-26  Martin Baulig  <martin@gnome.org>
10935
10936         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
10937         (switch_statement): Push the current_block to the switch_stack and
10938         pop it again when we're done with the switch.
10939         (switch_section): The new block is a child of the current_block.
10940         Fixes bug #24007, added test-152.cs.
10941
10942 2002-07-27  Martin Baulig  <martin@gnome.org>
10943
10944         * expression.cs (Invocation.EmitArguments): When calling a varargs
10945         function with only its fixed arguments, we need to pass an empty
10946         array.
10947
10948 2002-07-27  Martin Baulig  <martin@gnome.org>
10949
10950         Mono 0.13 has been released.
10951
10952 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
10953
10954         * driver.cs: Rename --resource to --linkres, because that is what
10955         we do currently, we dont support --resource yet.
10956
10957         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
10958
10959 2002-07-25  Martin Baulig  <martin@gnome.org>
10960
10961         * class.cs (MethodData): New public class.  This is a `method builder'
10962         class for a method or one accessor of a Property/Indexer/Event.
10963         (MethodData.GetMethodFlags): Moved here from MemberBase.
10964         (MethodData.ApplyAttributes): Likewise.
10965         (MethodData.ApplyObsoleteAttribute): Likewise.
10966         (MethodData.ApplyConditionalAttribute): Likewise.
10967         (MethodData.ApplyDllImportAttribute): Likewise.
10968         (MethodData.CheckAbstractAndExternal): Likewise.
10969         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
10970         (MethodData.Emit): Formerly known as Method.Emit().
10971         (MemberBase): Moved everything which was specific to a single
10972         accessor/method to MethodData.
10973         (Method): Create a new MethodData and call Define() and Emit() on it.
10974         (Property, Indexer, Event): Create a new MethodData objects for each
10975         accessor and call Define() and Emit() on them.
10976
10977 2002-07-25  Martin Baulig  <martin@gnome.org>
10978
10979         Made MethodCore derive from MemberBase to reuse the code from there.
10980         MemberBase now also checks for attributes.
10981
10982         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
10983         (MemberBase.GetMethodFlags): Moved here from class Method and marked
10984         as virtual.
10985         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
10986         `CallingConventions cc' and `Attributes opt_attrs' arguments.
10987         (MemberBase.ApplyAttributes): New virtual method; applies the
10988         attributes to a method or accessor.
10989         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
10990         (MemberBase.ApplyConditionalAttribute): Likewise.
10991         (MemberBase.ApplyDllImportAttribute): Likewise.
10992         (MemberBase.CheckAbstractAndExternal): Likewise.
10993         (MethodCore.ParameterTypes): This is now a property instead of a
10994         method, it's initialized from DoDefineParameters().
10995         (MethodCore.ParameterInfo): Removed the set accessor.
10996         (MethodCore.DoDefineParameters): New protected virtual method to
10997         initialize ParameterTypes and ParameterInfo.
10998         (Method.GetReturnType): We can now simply return the MemberType.
10999         (Method.GetMethodFlags): Override the MemberBase version and add
11000         the conditional flags.
11001         (Method.CheckBase): Moved some code from Define() here, call
11002         DoDefineParameters() here.
11003         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
11004         here to avoid some larger code duplication.
11005         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
11006         ensure that abstract and external accessors don't declare a body.
11007
11008         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
11009         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
11010         lookup in the attribute's parent classes, so we need to abort as soon
11011         as we found the first match.
11012         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
11013         the attribute has no arguments.
11014
11015         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
11016         of a Method.
11017
11018 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11019
11020         * cs-parser.jay: reverted previous patch.
11021
11022 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11023
11024         * cs-parser.jay: fixed bug #22119.
11025
11026 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11027
11028         * attribute.cs: fixed compilation. The error was:
11029         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
11030         be assigned to before control leaves the current method."
11031         [FIXME:  Filed as bug #28186: MCS must report this error.]
11032
11033 2002-07-25  Martin Baulig  <martin@gnome.org>
11034
11035         * attribute.cs (Attribute.Conditional_GetConditionName): New static
11036         method to pull the condition name ouf of a Conditional attribute.
11037         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
11038         the obsolete message and error flag out of an Obsolete attribute.
11039
11040         * class.cs (Method.GetMethodFlags): New public method to get the
11041         TypeManager.MethodFlags for this method.
11042         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
11043         private methods.
11044         (Method.Define): Get and apply the Obsolete and Conditional attributes;
11045         if we're overriding a virtual function, set the new private variable
11046         `parent_method'; call the new TypeManager.AddMethod().
11047
11048         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
11049         the MethodBuilder and the Method in a PtrHashtable.
11050         (TypeManager.builder_to_method): Added for this purpose.
11051         (TypeManager.MethodFlags): Added IsObsoleteError.
11052         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
11053         Obsolete and Conditional arguments in MethodBuilders.  If we discover
11054         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
11055         the message from the attribute.
11056
11057 2002-07-24  Martin Baulig  <martin@gnome.org>
11058
11059         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
11060         preprocessor directives, ensure that the argument to #define/#undef is
11061         exactly one identifier and that it's actually an identifier.
11062
11063         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
11064         did not work ....
11065
11066 2002-07-24  Martin Baulig  <martin@gnome.org>
11067
11068         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
11069         initialize it to TypeManager.object_type in the constructor.
11070         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
11071         of the `hm.get_current' method if we're using the collection pattern.
11072         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
11073         for the explicit conversion to make it work when we're using the collection
11074         pattern and the `Current' property has a different return type than `object'.
11075         Fixes #27713.
11076
11077 2002-07-24  Martin Baulig  <martin@gnome.org>
11078
11079         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
11080         does not match, but don't report any errors.  This method is called in
11081         order for all methods in a MethodGroupExpr until a matching method is
11082         found, so we don't want to bail out if the first method doesn't match.
11083         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
11084         matches, report the 123.  Fixes #28070.
11085
11086 2002-07-24  Martin Baulig  <martin@gnome.org>
11087
11088         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
11089         TypeManager.TypeToCoreType() to the top of the method so the
11090         following equality checks will work.  Fixes #28107.
11091
11092 2002-07-24  Martin Baulig  <martin@gnome.org>
11093
11094         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
11095         operand is of type uint, and the other operand is of type sbyte,
11096         short or int, the operands are converted to type long." -
11097         Actually do what this comment already told us.  Fixes bug #28106,
11098         added test-150.cs.
11099
11100 2002-07-24  Martin Baulig  <martin@gnome.org>
11101
11102         * class.cs (MethodBase): New abstract class.  This is now a base
11103         class for Property, Indexer and Event to avoid some code duplication
11104         in their Define() and DefineMethods() methods.
11105         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
11106         generic methods for Define() and DefineMethods().
11107         (FieldBase): Derive from MemberBase, not MemberCore.
11108         (Property): Derive from MemberBase, not MemberCore.
11109         (Property.DefineMethod): Moved all the code from this method to the
11110         new MethodBase.DefineAccessor(), just call it with appropriate
11111         argumetnts.
11112         (Property.Define): Call the new Property.DoDefine(), this does some
11113         sanity checks and we don't need to duplicate the code everywhere.
11114         (Event): Derive from MemberBase, not MemberCore.
11115         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
11116         accessors, this will also make them work with interface events.
11117         (Indexer): Derive from MemberBase, not MemberCore.
11118         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
11119         (Indexer.Define): Use the new MethodBase functions.
11120
11121         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
11122         argument to the constructor.
11123         (Interface.FindMembers): Added support for interface events.
11124         (Interface.PopluateEvent): Implemented.
11125
11126         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
11127
11128 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
11129
11130         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
11131         but this is required to check for a method name being the same as
11132         the containing class.  
11133
11134         Handle this now.
11135
11136 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11137
11138         * interface.cs: initialize variable.
11139
11140 2002-07-23  Martin Baulig  <martin@gnome.org>
11141
11142         Implemented the IndexerName attribute in interfaces.
11143
11144         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
11145         name if this is an explicit interface implementation.
11146         (Indexer.InterfaceIndexerName): New public variable.  If we're
11147         implementing an interface indexer, this is the IndexerName in that
11148         interface.  Otherwise, it's the IndexerName.
11149         (Indexer.DefineMethod): If we're implementing interface indexer,
11150         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
11151         and Pending.ImplementIndexer methods.
11152         (Indexer.Define): Also define the PropertyBuilder if we're
11153         implementing an interface indexer and this is neither an explicit
11154         interface implementation nor do the IndexerName match the one in
11155         the interface.
11156
11157         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
11158         If a method is defined here, then we always need to create a proxy
11159         for it.  This is used when implementing interface indexers.
11160         (Pending.IsInterfaceIndexer): New public method.
11161         (Pending.ImplementIndexer): New public method.
11162         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
11163         This is used when implementing interface indexers to define a proxy
11164         if necessary.
11165         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
11166         define a proxy if necessary.
11167
11168         * interface.cs (Interface.IndexerName): New public variable.
11169         (Interface.PopulateIndexer): Set the IndexerName.
11170         (Interface.DefineIndexers): New private method.  Populate all the
11171         indexers and make sure their IndexerNames match.
11172
11173         * typemanager.cs (IndexerPropertyName): Added support for interface
11174         indexers.
11175
11176 2002-07-22  Martin Baulig  <martin@gnome.org>
11177
11178         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
11179         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
11180         ret if HasReturnLabel.
11181         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
11182         variables.
11183
11184         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
11185         and set the ec.LoopBeginTryCatchLevel.
11186         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
11187         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
11188         the current ec.TryCatchLevel, the branch goes out of an exception
11189         block.  In this case, we need to use Leave and not Br.
11190
11191 2002-07-22  Martin Baulig  <martin@gnome.org>
11192
11193         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
11194         block unless the block does not always return or it is contained in
11195         another try { ... } catch { ... } block.  Fixes bug #26506.
11196         Added verify-1.cs to the test suite.
11197
11198 2002-07-22  Martin Baulig  <martin@gnome.org>
11199
11200         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
11201         then we do not always return.  Fixes bug #24985.
11202
11203 2002-07-22  Martin Baulig  <martin@gnome.org>
11204
11205         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
11206         lookup on a per-class level; ie. walk up the class hierarchy until we
11207         found at least one applicable method, then choose the best among them.
11208         Fixes bug #24463 and test-29.cs.
11209
11210 2002-07-22  Martin Baulig  <martin@gnome.org>
11211
11212         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
11213         return types of the methods.  The return type is not part of the
11214         signature and we must not check it to make the `new' modifier work.
11215         Fixes bug #27999, also added test-147.cs.
11216         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
11217
11218         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
11219         on the method's return type.
11220
11221 2002-07-21  Martin Baulig  <martin@gnome.org>
11222
11223         * assign.cs: Make this work if the rightmost source is a constant and
11224         we need to do an implicit type conversion.  Also adding a few more tests
11225         to test-38.cs which should have caught this.
11226
11227         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
11228         target in the makefile for this.  The makefile.gnu is primarily intended
11229         for end-users who don't want to debug the compiler.
11230
11231 2002-07-21  Martin Baulig  <martin@gnome.org>
11232
11233         * assign.cs: Improved the Assign class so it can now handle embedded
11234         assignments (X = Y = Z = something).  As a side-effect this'll now also
11235         consume less local variables.  test-38.cs now passes with MCS, added
11236         a few new test cases to that test.
11237
11238 2002-07-20  Martin Baulig  <martin@gnome.org>
11239
11240         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
11241         instructions.  Fixes bug #27977, also added test-146.cs.
11242
11243 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11244
11245         * cs-tokenizer.cs: fixed getHex ().
11246
11247 2002-07-19  Martin Baulig  <martin@gnome.org>
11248
11249         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
11250         not Type.GetType() to lookup the array type.  This is needed when
11251         we're constructing an array of a user-defined type.
11252         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
11253         single-dimensional arrays, but also for single-dimensial arrays of
11254         type decimal.
11255
11256 2002-07-19  Martin Baulig  <martin@gnome.org>
11257
11258         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
11259         this function is called, it's not allowed to share LocalBuilders
11260         among ILGenerators.
11261
11262 2002-07-19  Martin Baulig  <martin@gnome.org>
11263
11264         * expression.cs (Argument.Resolve): Report an error 118 when trying
11265         to pass a type as argument.
11266
11267 2002-07-18  Martin Baulig  <martin@gnome.org>
11268
11269         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
11270         Conv_R_Un for the signed `long' type.
11271
11272 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
11273
11274         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
11275         `expr' for the temporary result, as that will fail if we do
11276         multiple resolves on the same expression.
11277
11278 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
11279
11280         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
11281         ec.TypeContainer for looking up aliases. 
11282
11283         * class.cs (TypeContainer): Remove LookupAlias from here.
11284
11285         * decl.cs (DeclSpace); Move here.
11286
11287 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
11288
11289         * class.cs (FindMembers): Only call filter if the constructor
11290         bulider is not null.
11291
11292         Also handle delegates in `NestedTypes' now.  Now we will perform
11293         type lookups using the standard resolution process.  This also
11294         fixes a bug.
11295
11296         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
11297         This uses Expressions (the limited kind that can be parsed by the
11298         tree) instead of strings.
11299
11300         * expression.cs (ComposedCast.ToString): Implement, used to flag
11301         errors since now we have to render expressions.
11302
11303         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
11304         FormArrayType. 
11305
11306         * ecore.cs (SimpleName.ToString): ditto.
11307
11308         * cs-parser.jay: Instead of using strings to assemble types, use
11309         Expressions to assemble the type (using SimpleName, ComposedCast,
11310         MemberAccess).  This should fix the type lookups in declarations,
11311         because we were using a different code path for this.
11312
11313         * statement.cs (Block.Resolve): Continue processing statements
11314         even when there is an error.
11315
11316 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
11317
11318         * class.cs (Event.Define): Also remove the `remove' method from
11319         the list of pending items.
11320
11321         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
11322         generate more compact code. 
11323
11324 2002-07-17  Martin Baulig  <martin@gnome.org>
11325
11326         * const.cs (Const.LookupConstantValue): Add support for constant
11327         `unchecked' and `checked' expressions.
11328         Also adding test case test-140.cs for this.
11329
11330 2002-07-17  Martin Baulig  <martin@gnome.org>
11331
11332         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
11333         check whether mi.ReturnType implements the IEnumerator interface; the
11334         `==' and the IsAssignableFrom() will fail in this situation.
11335
11336 2002-07-16  Ravi Pratap  <ravi@ximian.com>
11337
11338         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
11339         here too.
11340
11341 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11342
11343         * expression.cs: fixed bug #27811.
11344
11345 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
11346
11347         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
11348         Molaro: when we are a ref, the value already contains a pointer
11349         value, do not take the address of it.
11350
11351 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
11352         * removed mb-parser.jay and mb-tokenizer.cs
11353
11354 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
11355
11356         * expression.cs: check against the building corlib void type.
11357
11358 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
11359
11360         * ecore.cs: fix for valuetype static readonly fields: when 
11361         initializing them, we need their address, not the address of a copy.
11362
11363 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
11364
11365         * typemanager.cs: register also enum_type in corlib.
11366
11367 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
11368
11369         * class.cs: allow calling this (but not base) initializers in structs.
11370
11371 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
11372
11373         * ecore.cs: make sure we compare against the building base types
11374         in GetTypeSize ().
11375
11376 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
11377
11378         * typemanager.cs: fix TypeToCoreType() to handle void and object
11379         (corlib gets no more typerefs after this change).
11380
11381 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
11382
11383         * expression.cs (ArrayCreation.EmitArrayArguments): use
11384         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
11385
11386         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
11387         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
11388         array indexes, the runtime actually forbids them.
11389
11390         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
11391         for array arguments here.
11392
11393         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
11394         instead of the default for ValueTypes.
11395
11396         (New.DoEmit): Use IsValueType instead of
11397         IsSubclassOf (value_type)
11398         (New.DoResolve): ditto.
11399         (Invocation.EmitCall): ditto.
11400
11401         * assign.cs (Assign): ditto.
11402
11403         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
11404         Statements *are* currently doing part of their resolution during
11405         Emit.  
11406
11407         Expressions do always resolve during resolve, but statements are
11408         only required to propagate resolution to their children.
11409
11410 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
11411
11412         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
11413
11414         (LoadAssembly): Do not add the dll if it is already specified
11415
11416         (MainDriver): Add the System directory to the link path at the end,
11417         after all the other -L arguments. 
11418
11419         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
11420         wrong opcode for loading bytes and bools (ldelem.i1 instead of
11421         ldelem.u1) and using the opposite for sbytes.
11422
11423         This fixes Digger, and we can finally run it.
11424
11425         * driver.cs (UnixParseOption): Move the option parsing here.  
11426         (CSCParseOption): Implement CSC-like parsing of options.
11427
11428         We now support both modes of operation, the old Unix way, and the
11429         new CSC-like way.  This should help those who wanted to make cross
11430         platform makefiles.
11431
11432         The only thing broken is that /r:, /reference: and /lib: are not
11433         implemented, because I want to make those have the same semantics
11434         as the CSC compiler has, and kill once and for all the confussion
11435         around this.   Will be doing this tomorrow.
11436
11437         * statement.cs (Unsafe.Resolve): The state is checked during
11438         resolve, not emit, so we have to set the flags for IsUnsfe here.
11439
11440 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
11441
11442         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
11443         not catch the Error_ObjectRefRequired in SimpleName (as it is
11444         possible to have a class/instance variable name that later gets
11445         deambiguated), we have to check this here.      
11446
11447 2002-07-10  Ravi Pratap  <ravi@ximian.com>
11448
11449         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
11450         make static and put into Expression.
11451
11452         (Event.Define): Register the private field of the event with the 
11453         TypeManager so that GetFieldFromEvent can get at it.
11454
11455         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
11456         keep track of the private field associated with an event which
11457         has no accessors.
11458
11459         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
11460         private field.
11461
11462         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
11463
11464 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
11465
11466         * expression.cs (Binary.EmitBranchable): this routine emits the
11467         Binary expression in a branchable context.  This basically means:
11468         we need to branch somewhere, not just get the value on the stack.
11469
11470         This works together with Statement.EmitBoolExpression.
11471
11472         * statement.cs (Statement.EmitBoolExpression): Use
11473         EmitBranchable. 
11474
11475 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
11476
11477         * statement.cs (For): Reduce the number of jumps in loops.
11478
11479         (For): Implement loop inversion for the For statement.
11480
11481         (Break): We can be breaking out of a Try/Catch controlled section
11482         (foreach might have an implicit try/catch clause), so we need to
11483         use Leave instead of Br.
11484
11485         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
11486         now).  If the instace expression supports IMemoryLocation, we use
11487         the AddressOf method from the IMemoryLocation to extract the
11488         address instead of emitting the instance.
11489
11490         This showed up with `This', as we were emitting the instance
11491         always (Emit) instead of the Address of This.  Particularly
11492         interesting when This is a value type, as we dont want the Emit
11493         effect (which was to load the object).
11494
11495 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
11496
11497         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
11498
11499         * statement.cs (Checked): Set the CheckedState during the resolve
11500         process too, as the ConvCast operations track the checked state on
11501         the resolve process, and not emit.
11502
11503         * cs-parser.jay (namespace_member_declaration): Flag that we have
11504         found a declaration when we do.  This is used to flag error 1529
11505
11506         * driver.cs: Report ok when we display the help only.
11507
11508 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
11509
11510         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
11511
11512 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
11513
11514         * cs-tokenizer.cs (define): We also have to track locally the
11515         defines.  AllDefines is just used for the Conditional Attribute,
11516         but we also need the local defines for the current source code. 
11517
11518 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
11519
11520         * statement.cs (While, For, Do): These loops can exit through a
11521         Break statement, use this information to tell whether the
11522         statement is the last piece of code.
11523
11524         (Break): Flag that we break.
11525
11526         * codegen.cs (EmitContexts): New `Breaks' state variable.
11527
11528 2002-07-03  Martin Baulig  <martin@gnome.org>
11529
11530         * class.cs (TypeContainer.MethodModifiersValid): Allow override
11531         modifiers in method declarations in structs.  Otherwise, you won't
11532         be able to override things like Object.Equals().
11533
11534 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
11535
11536         * class.cs (Method, Property, Indexer): Do not allow the public
11537         modifier to be used in explicit interface implementations.
11538
11539         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
11540         override modifiers in method declarations in structs
11541
11542 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
11543
11544         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
11545         integer or real overflow, report an error
11546
11547 2002-07-02  Martin Baulig  <martin@gnome.org>
11548
11549         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
11550         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
11551         to tell the runtime about our newly created System.Object and
11552         System.ValueType types.
11553
11554 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
11555
11556         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
11557         struct instead of Ldarg/Starg.
11558
11559 2002-07-02  Martin Baulig  <martin@gnome.org>
11560
11561         * expression.cs (Indirection.Indirection): Call
11562         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
11563
11564 2002-07-02  Martin Baulig  <martin@gnome.org>
11565
11566         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
11567         ValueType, call TypeManager.TypeToCoreType() on it.
11568         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
11569         the OpCodes.Newarr argument.
11570
11571 2002-07-02  Martin Baulig  <martin@gnome.org>
11572
11573         * expression.cs (Invocation.EmitCall): When compiling corlib,
11574         replace all calls to the system's System.Array type to calls to
11575         the newly created one.
11576
11577         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
11578         System.Array methods.
11579         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
11580         from the system's System.Array type which must be replaced.
11581
11582 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
11583
11584         * typemanager.cs: load unverifiable_code_ctor so we can build
11585         corlib using the correct type. Avoid using GetTypeCode() with
11586         TypeBuilders.
11587         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
11588         TypeManager.object_type to allow building corlib.
11589
11590 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
11591
11592         * ecore.cs: handle System.Enum separately in LoadFromPtr().
11593
11594 2002-07-01  Martin Baulig  <martin@gnome.org>
11595
11596         * class.cs: Make the last change actually work, we need to check
11597         whether `ifaces != null' to avoid a crash.
11598
11599 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
11600
11601         * class.cs: when we build structs without fields that implement
11602         interfaces, we need to add the interfaces separately, since there is
11603         no API to both set the size and add the interfaces at type creation
11604         time.
11605
11606 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
11607
11608         * expression.cs: the dimension arguments to the array constructors
11609         need to be converted if they are a long.
11610
11611 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
11612
11613         * class.cs: don't emit ldarg.0 if there is no parent constructor
11614         (fixes showstopper for corlib).
11615
11616 2002-06-29  Martin Baulig  <martin@gnome.org>
11617
11618         MCS now compiles corlib on GNU/Linux :-)
11619
11620         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
11621         ie. check for MethodImplOptions.InternalCall.
11622
11623         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
11624         and TypeManager.attribute_type are null, so we must explicitly check
11625         whether parent is not null to find out whether it's an attribute type.
11626         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
11627         and SetBuilder, not only if the property is neither abstract nor external.
11628         This is necessary to set the MethodImplOptions on the accessor methods.
11629         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
11630         SetBuilder, see Property.Emit().
11631
11632         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
11633         populate "System.Object", "System.ValueType" and "System.Attribute" since
11634         they've already been populated from BootCorlib_PopulateCoreTypes().
11635
11636 2002-06-29  Martin Baulig  <martin@gnome.org>
11637
11638         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
11639         is the NullLiteral, we also need to make sure that target_type is not
11640         an enum type.   
11641
11642 2002-06-29  Martin Baulig  <martin@gnome.org>
11643
11644         * rootcontext.cs (RootContext.ResolveCore): We must initialize
11645         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
11646         before calling BootstrapCorlib_ResolveDelegate ().
11647
11648 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11649
11650         * statement.cs: fixed build-breaker. All tests passed ok.
11651
11652 2002-06-27  Martin Baulig  <martin@gnome.org>
11653
11654         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
11655         for System.Decimal when compiling corlib.
11656
11657 2002-06-27  Martin Baulig  <martin@gnome.org>
11658
11659         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
11660         switch blocks which contain nothing but a default clause.
11661
11662 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
11663
11664        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
11665
11666 2002-06-27  Martin Baulig  <martin@gnome.org>
11667
11668         * ecore.cs (PropertyExpr.PropertyExpr): Call
11669         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
11670
11671         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
11672         is already a TypeBuilder.
11673
11674 2002-06-27  Martin Baulig  <martin@gnome.org>
11675
11676         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
11677         `target_type == TypeManager.array_type', not IsAssignableFrom() in
11678         the "from an array-type to System.Array" case.  This makes it work
11679         when compiling corlib.
11680
11681 2002-06-27  Martin Baulig  <martin@gnome.org>
11682
11683         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
11684         non-static PropertyExpr, set its InstanceExpression.  This makes
11685         the `ICollection.Count' property work in System/Array.cs.
11686
11687 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
11688
11689         * driver.cs: Made error handling more consistent.  Errors now
11690         tracked by Report class, so many methods which used to return int
11691         now return void.  Main() now prints success/failure and 
11692         errors/warnings message.
11693
11694         Renamed '--probe' compiler argument to '--expect-error'.  Removed
11695         the magic number return values (123 and 124).  Now, if the
11696         expected error occurs, the compiler exits with success (exit value
11697         0).  If the compilation completes without seeing that particular
11698         error, the compiler exits with failure (exit value 1).  The
11699         makefile in mcs/errors has been changed to handle the new behaviour.
11700
11701         * report.cs: Made 'expected error' number a property and renamed
11702         it from 'Probe' to 'ExpectedError'.
11703
11704         * genericparser.cs: Removed error handling support, since it is
11705         now all done by Report class.
11706
11707         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
11708         class, so parse() no longer returns an int.
11709
11710         * namespace.cs: Use Report.Error instead of GenericParser.error
11711
11712 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
11713
11714         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
11715         TypeContainer.AddOperator): At the front of the list put the
11716         explicit implementations, so they get resolved/defined first. 
11717
11718 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
11719
11720         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
11721         interface type is implemented by this TypeContainer.  Used during
11722         explicit interface implementation.
11723
11724         (Property.Define, Indexer.Define, Method.Define): Validate that
11725         the given interface in the explicit implementation is one of the
11726         base classes for the containing type.
11727
11728         Also if we are explicitly implementing an interface, but there is
11729         no match in the pending implementation table, report an error.
11730
11731         (Property.Define): Only define the property if we are
11732         not explicitly implementing a property from an interface.  Use the
11733         correct name also for those properties (the same CSC uses,
11734         although that is really not needed).
11735
11736         (Property.Emit): Do not emit attributes for explicitly implemented
11737         properties, as there is no TypeBuilder.
11738
11739         (Indexer.Emit): ditto.
11740
11741         Hiding then means that we do not really *implement* a pending
11742         implementation, which makes code fail.
11743
11744 2002-06-22  Martin Baulig  <martin@gnome.org>
11745
11746         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
11747         the return value of Object.GetType().  [FIXME: we need to do this whenever
11748         we get a type back from the reflection library].
11749
11750 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
11751
11752         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
11753
11754 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
11755
11756         * attribute.cs: Return null if we can not look up the type.
11757
11758         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
11759         the interface types found.
11760
11761         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
11762         interface types found.
11763
11764         * typemanager.cs (GetInterfaces): Make this routine returns alll
11765         the interfaces and work around the lame differences between
11766         System.Type and System.Reflection.Emit.TypeBuilder in the results
11767         result for GetInterfaces.
11768
11769         (ExpandInterfaces): Given an array of interface types, expand and
11770         eliminate repeated ocurrences of an interface.  This expands in
11771         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
11772         be IA, IB, IC.
11773
11774 2002-06-21  Martin Baulig  <martin@gnome.org>
11775
11776         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
11777         on System.Enum.
11778
11779 2002-06-21  Martin Baulig  <martin@gnome.org>
11780
11781         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
11782         and called with one of the core types, return the corresponding typebuilder for
11783         that type.
11784
11785         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
11786         element type.
11787
11788 2002-06-21  Martin Baulig  <martin@gnome.org>
11789
11790         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
11791         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
11792         (Expression.ConvertReferenceExplicit): Likewise.
11793
11794         * expression.cs (ElementAccess.DoResolve): Likewise.
11795         (ElementAccess.DoResolveLValue): Likewise.
11796
11797 2002-06-10  Martin Baulig  <martin@gnome.org>
11798
11799         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
11800         add the "value" parameter to the parameter list.
11801
11802         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
11803         to our caller.
11804
11805 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
11806
11807         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
11808         the argument to an int, uint, long or ulong, per the spec.  Also
11809         catch negative constants in array creation.
11810
11811 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
11812
11813         * class.cs: do not allow the same interface to appear twice in
11814         the definition list.
11815
11816 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
11817
11818         * ecore.cs: don't use ldlen with System.Array.
11819
11820 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
11821
11822         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
11823
11824 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
11825
11826         * modifiers.cs: produce correct field attributes for protected
11827         internal. Easy fix so miguel can work on ther harder stuff:-)
11828
11829 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
11830
11831         * pending.cs: New file.  Move the code from class.cs here.
11832         Support clearning the pending flag for all methods (when not doing
11833         explicit interface implementation).
11834
11835 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
11836
11837         * rootcontext.cs: added a couple more types needed to bootstrap.
11838
11839 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
11840
11841         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
11842         constructor in the type, instead of any constructor in the type
11843         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
11844         a bug in the Mono runtime when applying the params attribute). 
11845
11846 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
11847         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
11848
11849 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
11850
11851         * expression.cs (Unary.ResolveOperator): Use TypeManager
11852         to resolve the type.
11853
11854 2002-06-13  Ravi Pratap  <ravi@ximian.com>
11855
11856         * cs-parser.jay (enum_member_declaration): Pass in the attributes
11857         attached.
11858
11859         * enum.cs (AddEnumMember): Add support to store the attributes associated 
11860         with each member too.
11861
11862         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
11863         field builders too - this takes care of the enum member case.
11864
11865 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
11866
11867         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
11868         address-of operator on both value types and pointers.
11869
11870 2002-06-10  Martin Baulig  <martin@gnome.org>
11871
11872         * interface.cs (Interface.PopulateIndexer): Add the indexer's
11873         PropertyBuilder to the `property_builders' list.
11874
11875         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
11876         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
11877         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
11878         find any indexers which are inherited from an interface.
11879
11880 2002-06-09  Martin Baulig  <martin@gnome.org>
11881
11882         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
11883         the same type as the constant if necessary.  There's also a test-130.cs
11884         for this.
11885
11886         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
11887
11888         * typemanager.cs (TypeManager.ChangeType): Previously known as
11889         Enum.ChangeEnumType().
11890
11891 2002-06-09  Martin Baulig  <martin@gnome.org>
11892
11893         * expression.cs (Cast.TryReduce): Added support for consts.
11894
11895 2002-06-08  Ravi Pratap  <ravi@ximian.com>
11896
11897         * class.cs (Accessor): Hold attributes information so we can pass
11898         it along.
11899
11900         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
11901         Modify to pass in attributes attached to the methods.
11902
11903         (add_accessor_declaration, remove_accessor_declaration): Ditto.
11904
11905         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
11906         to handle the Accessor kind :-)
11907
11908         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
11909
11910 2002-06-08  Martin Baulig  <martin@gnome.org>
11911
11912         * expression.cs (Unary.TryReduceNegative): Added support for
11913         ULongConstants.
11914
11915 2002-06-08  Martin Baulig  <martin@gnome.org>
11916
11917         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
11918         name can't be found in the `defined_names' - the caller will do a
11919         MemberLookup in this case and thus find methods in System.Enum
11920         such as Enum.IsDefined().
11921
11922 2002-06-08  Martin Baulig  <martin@gnome.org>
11923
11924         * enum.cs (Enum.ChangeEnumType): This is a custom version of
11925         Convert.ChangeType() which works with TypeBuilder created types.
11926         (Enum.LookupEnumValue, Enum.Define): Use it here.
11927
11928         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
11929         `TypeBuilder.BaseType != null' check.
11930         (TypeContainer.FindMembers): Only lookup parent members if we
11931         actually have a parent.
11932         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
11933         (ConstructorInitializer.Resolve): Likewise.
11934
11935         * interface.cs (Interface.FindMembers): Added
11936         `TypeBuilder.BaseType != null' check.
11937
11938         * rootcontext.cs (RootContext.ResolveCore): Added
11939         "System.Runtime.CompilerServices.IndexerNameAttribute" to
11940         classes_second_stage.
11941
11942         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
11943         debug_type and trace_type when compiling with --nostdlib.       
11944
11945 2002-06-07  Martin Baulig  <martin@gnome.org>
11946
11947         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
11948         (AddField): Set it to true when adding a non-static field.
11949         (DefineType): Use `have_nonstatic_fields' to find out whether we
11950         have non-static fields, not `Fields != null'.
11951
11952 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
11953
11954         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
11955         dereferencing a null on the static-field code path)
11956
11957 2002-05-30  Martin Baulig  <martin@gnome.org>
11958
11959         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
11960         to take command line arguments.  Use reflection to call the new
11961         custom `Initialize' function on the symbol writer and pass it the
11962         command line arguments.
11963
11964         * driver.cs (--debug-args): New command line argument to pass command
11965         line arguments to the symbol writer.
11966
11967 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
11968
11969         * assign.cs (DoResolve): Forgot to do the implicit conversion to
11970         the target type for indexers and properties.  Thanks to Joe for
11971         catching this.
11972
11973 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
11974
11975         * typemanager.cs (MethodFlags): returns the method flags
11976         (Obsolete/ShouldIgnore) that control warning emission and whether
11977         the invocation should be made, or ignored. 
11978
11979         * expression.cs (Invocation.Emit): Remove previous hack, we should
11980         not do this on matching a base type, we should do this based on an attribute
11981
11982         Only emit calls to System.Diagnostics.Debug and
11983         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
11984         on the command line.
11985
11986         * rootcontext.cs: Global settings for tracing and debugging.
11987
11988         * cs-tokenizer.cs (define): New utility function to track
11989         defines.   Set the global settings for TRACE and DEBUG if found.
11990
11991 2002-05-25  Ravi Pratap  <ravi@ximian.com>
11992
11993         * interface.cs (Populate*): Pass in the TypeContainer as well as
11994         the DeclSpace as parameters so that we can create EmitContexts and
11995         then use that to apply attributes etc.
11996
11997         (PopulateMethod, PopulateEvent, PopulateProperty)
11998         (PopulateIndexer): Apply attributes everywhere.
11999
12000         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
12001         etc.
12002
12003         (ApplyAttributes): Update accordingly.
12004
12005         We now apply interface attributes for all members too.
12006
12007 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
12008
12009         * class.cs (Indexer.Define); Correctly check if we are explicit
12010         implementation (instead of checking the Name for a ".", we
12011         directly look up if the InterfaceType was specified).
12012
12013         Delay the creation of the PropertyBuilder.
12014
12015         Only create the PropertyBuilder if we are not an explicit
12016         interface implementation.   This means that explicit interface
12017         implementation members do not participate in regular function
12018         lookups, and hence fixes another major ambiguity problem in
12019         overload resolution (that was the visible effect).
12020
12021         (DefineMethod): Return whether we are doing an interface
12022         implementation. 
12023
12024         * typemanager.cs: Temporary hack until we get attributes in
12025         interfaces (Ravi is working on that) and we get IndexerName
12026         support in interfaces.
12027
12028         * interface.cs: Register the indexers as properties.
12029
12030         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
12031         warning, I have verified that this is a bug in the .NET runtime
12032         (JavaScript suffers of the same problem).
12033
12034         * typemanager.cs (MemberLookup): When looking up members for
12035         interfaces, the parent of an interface is the implicit
12036         System.Object (so we succeed in searches of Object methods in an
12037         interface method invocation.  Example:  IEnumerable x;  x.ToString
12038         ()) 
12039
12040 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
12041
12042         * class.cs (Event): Events should also register if they do
12043         implement the methods that an interface requires.
12044
12045         * typemanager.cs (MemberLookup); use the new GetInterfaces
12046         method. 
12047
12048         (GetInterfaces): The code used to lookup interfaces for a type is
12049         used in more than one place, factor it here. 
12050
12051         * driver.cs: Track the errors at the bottom of the file, we kept
12052         on going.
12053
12054         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
12055         instance if the method we are calling is static!
12056
12057 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
12058
12059         * attribute.cs (ApplyAttributes): Make this function filter out
12060         the IndexerName attribute (as that attribute in reality is never
12061         applied) and return the string constant for the IndexerName
12062         attribute. 
12063
12064         * class.cs (TypeContainer.Emit): Validate that all the indexers
12065         have the same IndexerName attribute, and if so, set the
12066         DefaultName attribute on the class. 
12067
12068         * typemanager.cs: The return value might contain other stuff (not
12069         only methods).  For instance, consider a method with an "Item"
12070         property and an Item method.
12071
12072         * class.cs: If there is a problem with the parameter types,
12073         return. 
12074
12075 2002-05-24  Ravi Pratap  <ravi@ximian.com>
12076
12077         * ecore.cs (ImplicitConversionExists): Wrapper function which also
12078         looks at user defined conversion after making a call to 
12079         StandardConversionExists - we need this for overload resolution.
12080
12081         * expression.cs : Update accordingly the various method calls.
12082
12083         This fixes 2 bugs filed against implicit user defined conversions 
12084
12085 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
12086
12087         * statement.cs: Track the result of the assignment.
12088
12089 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
12090
12091         * expression.cs (MemberAccess): Improved error reporting for
12092         inaccessible members.
12093
12094 2002-05-22  Martin Baulig  <martin@gnome.org>
12095
12096         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
12097         itself with debugging support.
12098
12099 2002-05-22  Martin Baulig  <martin@gnome.org>
12100
12101         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
12102         Removed, this isn't needed anymore.
12103
12104 2002-05-20  Martin Baulig  <martin@gnome.org>
12105
12106         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
12107         be underlying type for an enum.
12108
12109 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
12110
12111         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
12112         that splits out the loading of just the core types.
12113
12114         * rootcontext.cs (ResolveCore): Split the struct resolution in
12115         two, so we can load the enumeration underlying types before any
12116         enums are used.
12117
12118         * expression.cs (Is): Bandaid until we fix properly Switch (see
12119         bug #24985 for details).
12120
12121         * typemanager.cs (ImplementsInterface): The hashtable will contain
12122         a null if there are no interfaces implemented.
12123
12124 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
12125
12126         * cs-parser.jay (indexer_declarator): It is fine to have array
12127         parameters
12128
12129 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
12130
12131         * typemanager.cs: (RegisterBuilder): New function used to register
12132         TypeBuilders that implement interfaces.  Since
12133         TypeBuilder.GetInterfaces (as usual) does not work with lame
12134         Reflection.Emit. 
12135         (AddUserType): register interfaces.
12136
12137         (ImplementsInterface): Use the builder_to_ifaces hash if we are
12138         dealing with TypeBuilder.  Also, arrays are showing up as
12139         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
12140         methods can not be invoked on them!
12141
12142         * ecore.cs (ExplicitReferenceConversionExists): Made public.
12143         (ImplicitReferenceConversionExists): Split out from
12144         StandardConversionExists. 
12145
12146         * expression.cs (As): We were only implementing one of the three
12147         cases for the as operator.  We now implement them all.
12148         (Is): Implement the various other cases for Is as well.
12149
12150         * typemanager.cs (CACHE): New define used to control if we want or
12151         not the FindMembers cache.  Seems to have a negative impact on
12152         performance currently
12153
12154         (MemberLookup): Nested types have full acess to
12155         enclosing type members
12156
12157         Remove code that coped with instance/static returns for events, we
12158         now catch this in RealFindMembers.
12159
12160         (RealFindMembers): only perform static lookup if the instance
12161         lookup did not return a type or an event.  
12162
12163 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
12164
12165         * assign.cs (CompoundAssign): We pass more semantic information
12166         now to Compound Assignments than we did before: now we have all
12167         the information at hand, and now we resolve the target *before* we
12168         do the expression expansion, which allows the "CacheValue" method
12169         to have the effect we intended (before, a [x] += 1 would generate
12170         two differen ArrayAccess expressions from the ElementAccess,
12171         during the resolution process).
12172
12173         (CompoundAssign.DoResolve): Resolve target and original_source here.
12174
12175 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
12176
12177         * expression.cs (ArrayAccess): dropped debugging information. 
12178
12179         * typemanager.cs: Small bug fix: I was always returning i_members,
12180         instead of one of i_members or s_members (depending on which had
12181         the content).
12182
12183         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
12184         method is invoked before any code generation takes place, and it
12185         is a mechanism to inform that the expression will be invoked more
12186         than once, and that the method should use temporary values to
12187         avoid having side effects
12188
12189         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
12190
12191         * ecore.cs (Expression.CacheTemporaries): Provide empty default
12192         implementation.
12193
12194         * expression.cs (Indirection, ArrayAccess): Add support for
12195         CacheTemporaries in these two bad boys. 
12196
12197         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
12198         ldobj or ldind_ref.  
12199         (StoreFromPtr): Handle stobj as well.
12200
12201         * expression.cs (UnaryMutator): Share more code.
12202
12203         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
12204         down: I was not tracking the Filter function as well, which
12205         was affecting the results of the cache.
12206
12207 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
12208
12209         * attribute.cs: Remove the hack to handle the CharSet property on
12210         StructLayouts. 
12211
12212 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
12213
12214         * attribute.cs (DoResolve): More uglyness, we now only try to
12215         resolve the attribute partially, to extract the CharSet
12216         information (only if we are a StructLayout attribute).  Otherwise 
12217
12218         (GetExtraTypeInfo): Add some code to conditionally kill in the
12219         future this.   I am more and more convinced that the .NET
12220         framework has special code to handle the attribute setting on
12221         certain elements.
12222
12223         * expression.cs (IsParamsMethodApplicable): Revert my previous
12224         foreach change here, it was wrong.
12225
12226 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
12227
12228         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
12229         (pp_expr): do not abort on unknown input, just return.
12230         (eval): abort if there are pending chars.
12231
12232         * attribute.cs (Attribute.Resolve): Positional parameters are
12233         optional.  Deal with that case.
12234
12235         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
12236         the Ansi/Unicode/Auto information for the type.
12237
12238         (TypeContainer.DefineType): instantiate the EmitContext here, as
12239         we will be using it during the type definition (to resolve
12240         attributes) and during the emit phase.
12241
12242         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
12243         to pull type information out of the attributes
12244
12245         (Attribute.Resolve): track the constructor builder, and allow for
12246         multiple invocations (structs and classes will use this).
12247
12248         * ecore.cs (MemberLookupFinal): new version with all the
12249         parameters customizable.
12250
12251         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
12252         constructors.  Return if the result value is null (as the error
12253         would have been flagged already by MemberLookupFinal)
12254
12255         Do not allow instances of abstract classes or interfaces to be
12256         created.
12257
12258         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
12259         We have to compare the assembly property here when dealing with
12260         FamANDAssem and Assembly access modifiers, because we might be
12261         creating an assembly from *modules* (that means that we are not
12262         getting TypeBuilders for types defined in other modules that are
12263         part of this assembly).
12264
12265         (Method.Emit): If the method is marked abstract and has a body,
12266         emit an error. 
12267
12268         (TypeContainer.DefineMembers): If both the defined member and the
12269         parent name match are methods, then do not emit any warnings: let
12270         the Method.Define routine take care of flagging warnings.  But if
12271         there is a mismatch (method overrides something else, or method is
12272         overriwritten by something, then emit warning).
12273
12274         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
12275         set to null, this means `do not check for the return type on the
12276         signature'. 
12277
12278         (Method.Define): set the return type for the method signature to
12279         null, so that we get methods with the same name and parameters and
12280         different return types.  This is used to flag warning 114 (you are
12281         hiding a method, and you probably want to use the new/override
12282         keywords instead).
12283
12284         * typemanager.cs (MemberLookup): Implemented proper access
12285         control, closing a long standing set of bug reports.  The problem
12286         was that the Framework only has two bits: Public and NonPublic,
12287         and NonPublic includes private and protected methods, but we need
12288         to enforce the FamANDAssem, FamOrAssem and Family. 
12289
12290 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
12291
12292         * statement.cs (GotoCase): Return true: Ammounts to giving up
12293         knowledge on whether we return or not, and letting the other case
12294         be responsible for it.
12295
12296 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
12297
12298         * driver.cs: Do not load directories for each file processed, only
12299         do it if there is a pattern.
12300
12301         * ecore.cs: Report readonly assigns here as well, as we might have
12302         been resolved only by MemberAccess.
12303
12304         (SimpleName.SimpleNameResolve): Also be useful for LValue
12305         resolution.   We need this to propagate assign to local readonly variables
12306
12307         * typemanager.cs: Use a ptrhashtable for the criteria, because we
12308         do not want to reuse potential criteria memory.
12309
12310         * class.cs (MyEventBuilder): Set reflected_type;
12311
12312         * ecore.cs (Constantify): Added support for constifying bools.
12313
12314         (RootContext.LookupType): Added a cache for values looked up in
12315         the declaration space.
12316
12317         * typemanager.cs (FindMembers): Now is a front-end to
12318         RealFindMembers, and provides a two-level hashtable-based cache to
12319         the request.  
12320
12321         15% performance improvement: from 22.5 to 19.2 seconds.
12322
12323         * expression.cs (IsParamsMethodApplicable): use foreach.
12324         (Invocation.DoResolve): ditto.
12325         (New.DoResolve): ditto.
12326         (ArrayCreation.DoResolve): ditto.
12327
12328         * ecore.cs (FindMostEncompassingType): use foreach.
12329
12330         * delegate.cs (NewDelegate.DoResolve): Use foreach
12331
12332         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
12333         (RemoveMethods): use foreach.
12334
12335         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
12336         nested foreach statements instead of for, and also break out of
12337         the inner loop once a match is found.
12338
12339         (Invocation.OverloadResolve): Use foreach, simplify the code. 
12340
12341 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
12342
12343         * cfold.cs (BinaryFold): During an enumeration evaluation context,
12344         we actually unwrap the expression to allow for extra information
12345         to be extracted. 
12346
12347         * expression.cs: Use Shr_Un on unsigned operations. 
12348
12349 2002-05-08  Ravi Pratap  <ravi@ximian.com>
12350
12351         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
12352         applicable operators was not being considered correctly. This closes
12353         the bug Miguel reported.
12354
12355 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
12356
12357         * attribute.cs: check that the type derives from System.Attribute
12358         and report the correct error in that case (moved the duplicate code to
12359         its own method, too).
12360
12361 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
12362
12363         * attribute.cs: lookup attribute type name as the spec says: first the
12364         bare attribute name and then name + "Attribute" (nant compiles with
12365         mcs after this fix).
12366
12367 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
12368
12369         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
12370         Because of the way we parse things, we should try to see if a
12371         UIntConstant can fit in an integer.
12372
12373 2002-05-07  Ravi Pratap  <ravi@ximian.com>
12374
12375         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
12376         when we are in an explicit context.
12377
12378         (ConvertReferenceExplicit): When converting from Iface type S to Class
12379         T make sure the rules are implemented as an OR.
12380
12381         * parameter.cs (ParameterType): Make it a property for now although the
12382         purpose really isn't anything immediate.
12383
12384         * expression.cs (Is*Applicable): Do better checking on the parameter type
12385         of a ref/out parameter. The ones from the system assemblies are already 
12386         marked with the correct type so we don't need to do any correction.
12387
12388         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
12389         the object type is standard too so include that.
12390
12391 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
12392
12393         * ecore.cs (StandardConversionExists): Augment with missing code:
12394         deal with IntConstant, LongConstants and Enumerations.
12395
12396         * assign.cs: Report the error, instead of failing silently
12397
12398         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
12399         typecontainer that they are declared, because the
12400         typecontainer/namespace will have the list of using clauses that
12401         need to be applied.
12402
12403         Assembly Attributes were escaping the normal registration
12404         mechanism. 
12405
12406         (EmitCode): Apply attributes within an EmitContext that represents
12407         the container they were declared on.
12408
12409         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
12410
12411 2002-05-06  Ravi Pratap  <ravi@ximian.com>
12412
12413         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
12414         Revamp completely - make much cleaner as we now operate only
12415         on a set of Types.
12416
12417         (FindMostSpecificSource, FindMostSpecificTarget): New methods
12418         to implement the logic detailed in the spec more correctly.
12419
12420         (UserDefinedConversion): Update accordingly.
12421
12422 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
12423
12424         * statement.cs: Return flow analysis information up.
12425
12426         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
12427         and the default.
12428
12429         (token): Do not consume an extra character before calling
12430         decimal_digits.
12431
12432 2002-05-06  Piers Haken <piersh@friskit.com>
12433
12434         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
12435
12436 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
12437
12438         * class.cs (Constructor.Emit): Set the IsStatic flag in the
12439         EmitContext during the instance constructor initializer
12440         resolution, to stop access to instance variables.
12441
12442         This is mandated by the spec, last paragraph of the `constructor
12443         initializers' section. 
12444
12445 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
12446
12447         * cs-parser.jay, class.cs (Accessor): new class used to represent
12448         an accessor (get or set).  In the past we used `null' to represent
12449         a missing accessor.  But this is ambiguous because there was no
12450         way to tell in abstract indexers/properties if one of them was
12451         specified.
12452
12453         Now there is a way of addressing that.
12454
12455         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
12456         instead of FindMembers.
12457
12458         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
12459         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
12460
12461         * attribute.cs: Treat indexers and properties as the same in terms
12462         of applying attributes
12463
12464         * ecore.cs (FindMostEncompassedType): Use statically initialized
12465         EmptyExpressions()s like we do elsewhere to avoid creating useless
12466         objects (and we take this out of the tight loop).
12467
12468         (GetConversionOperators): Move the code to extract the actual
12469         operators to a separate routine to clean things up.
12470
12471 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
12472
12473         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
12474         events are always registered FieldBuilders.
12475
12476         * class.cs (FieldBase): New class shared by Fields 
12477
12478         * delegate.cs: If we are a toplevel delegate, use our full name.
12479         If we are a nested delegate, then only use our tail name.
12480
12481 2002-05-02  Ravi Pratap  <ravi@ximian.com>
12482
12483         * expression.cs (IsApplicable): Ensure that we add the "&" to
12484         ref/out types before comparing it with the type of the argument.
12485
12486         (IsParamsMethodApplicable): Ditto.
12487
12488         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
12489         silly me ;-)
12490
12491         * delegate.cs : Handle the case when we have more than one applicable
12492         method. Flag an error only when we finish checking all.
12493
12494 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
12495
12496         * expression.cs: Add support for boolean static initializers.
12497
12498 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
12499
12500         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
12501
12502         * parameter.cs (ComputeParameterTypes,
12503         ComputeAndDefineParameterTypes): Better error handling: now we
12504         clear the `types' cache if we fail during any of the type lookups.
12505         We also return the status code correctly to our caller
12506
12507         * delegate.cs: If we fail to define a delegate, abort the extra
12508         steps. 
12509
12510         * expression.cs (Binary.ResolveOperator): for
12511         operator==(object,object) and operator !=(object, object) we also
12512         have to verify that there is an implicit conversion from one to
12513         the other.
12514
12515         (ArrayAccess.DoResolve): Array Access can operate on
12516         non-variables. 
12517
12518 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
12519
12520         * assign.cs (CompoundAssign): A new class used as a "flag" that
12521         the assignment actually is happening as part of a compound
12522         assignment operator.
12523
12524         During compound assignment, a few new rules exist to enable things
12525         like:
12526
12527         byte b |= 1 + 2
12528
12529         From the spec:
12530
12531         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
12532         to the type of x) if y is implicitly convertible to the type of x,
12533         and the operator is a builtin operator and the return type of the
12534         operator is explicitly convertible to the type of x. 
12535
12536         * rootcontext.cs: Reset warning level to 2.  4 catches various
12537         "interesting" features in mcs, we must clean this up at some
12538         point, but currently am trying to kill other bugs ;-)
12539
12540         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
12541         in container classes as well.  
12542
12543         * expression.cs (Binary.ResolveOperator): Handle string case
12544         before anything else (as operator overloading does emit an error
12545         before doing anything else).
12546
12547         This code could go away when we move to a table driven model, but
12548         i could not come up with a good plan last night.
12549
12550 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
12551
12552         * typemanager.cs (CSharpName): reimplementation using regex.
12553         * class.cs: added null check for fields in Emit
12554         * rootcontext.cs: set warninglevel to 4
12555
12556 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
12557
12558         * typemanager.cs (CSharpName): reimplemented with Lupus
12559         suggestion.
12560
12561 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
12562
12563         * statement.cs (If): correclty implement Resolve, because we were
12564         not catching sem errors in there.  The same process is needed
12565         everywhere else. 
12566         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
12567
12568
12569         (Statement.Warning_DeadCodeFound): Factorize code.
12570         (While): Report dead code here too.
12571
12572         (Statement): Added Resolve virtual method to allow
12573         for resolution split from the emit code.
12574
12575 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
12576
12577         * statement.cs (EmitBoolExpression): No longer try to resolve the
12578         expression here.    
12579         (MakeBoolean): New utility function that resolve, implicitly
12580         converts to boolean and tags the expression. 
12581
12582
12583         (If, Do): Implement dead code elimination.
12584         (While): Implement loop inversion
12585
12586         (Do, While, For, If): Resolve the expression prior to calling our
12587         code generation.
12588
12589 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
12590
12591         * class.cs:
12592           - added method Report28 (warning: program has more than one entry point)
12593           - added method IsEntryPoint, implements paragraph 10.1 of the spec
12594           - modified method Method.Define, the part at the end of the method
12595
12596         * rootcontext.cs: added static public Location EntryPointLocation;
12597           
12598         * ../errors/cs0028.cs : Add test case for the above warning.              
12599
12600         * typemanager.cs:
12601           - modified method CSharpName to allow arrays of primitive type to
12602             be printed nicely (e.g. instead of System.Int32[][] it now prints
12603             int[][])
12604           - added method CSharpSignature: returns the signature of a method
12605             in string format to be used in reporting errors, warnings, etc.
12606
12607         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
12608         with String.Empty.
12609
12610 2002-04-26  Ravi Pratap  <ravi@ximian.com>
12611
12612         * delegate.cs (Define): Fix extremely silly bug where I was
12613         setting the type of the 'object' parameter of the BeginInvoke
12614         method to System.IAsyncResult instead of System.Object ;-)
12615
12616 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
12617
12618         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
12619         here. 
12620
12621         (Constructor.Emit): return if we fail to initialize the
12622         constructor.  Another door closed!  
12623
12624         * expression.cs (New.DoResolve): Improve error message (from -6 to
12625         1501).  Use DeclaredOnly lookup to find the exact constructor.
12626
12627         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
12628         loop.  This is useful.
12629
12630         * cs-parser.jay: Adjust the default parameters so that destructors
12631         have the proper signature.
12632
12633 2002-04-26  Martin Baulig  <martin@gnome.org>
12634
12635         * driver.cs (LoadAssembly): If `assembly' contains any characters
12636         which are only valid in path names and not in assembly names
12637         (currently slash, backslash and point), use Assembly.LoadFrom ()
12638         instead of Assembly.Load () on the `assembly' (before iteration
12639         over the link_paths).
12640
12641 2002-04-26  Martin Baulig  <martin@gnome.org>
12642
12643         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
12644
12645 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
12646
12647         * class.cs (Property): use the new typemanager.MemberLookup
12648
12649         (TypeContainer.MemberLookup): Implement using the
12650         TypeManager.MemberLookup now. 
12651
12652         * typemanager.cs: Make MemberLookup a function of the TypeManager,
12653         and return MemberInfos, so that these can be used without an
12654         EmitContext (what we had before).
12655
12656 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
12657
12658         * expression.cs: Fix the case where the argument to params if the
12659         type of the params.  I omitted handling this before.   Fixed
12660
12661 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
12662
12663         * driver.cs: Call BootCorlib_PopulateCoreType
12664
12665         * class.cs (Property.CheckBase): Check for properties only, not
12666         for all members. 
12667
12668         * interface.cs: Temporary hack: try/catch around the
12669         CustomAttributeBuilder, because I am getting an exception that I
12670         do not understand.
12671
12672         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
12673         types whose definitions are required to be there (attributes are
12674         defined before standard types).
12675
12676         Compute definitions as we boot the various types, as they are used
12677         immediately (value_type class will need object_type, but if we do
12678         not initialize object_type, we will pass a null, which will let
12679         the runtime pick the System.Object from the existing corlib, which
12680         is not what we want).
12681
12682 2002-04-22  Patrik Torstensson <totte@labs2.com>
12683
12684         * cs-tokenizer.cs: fixed a number of trim() issues.
12685
12686 2002-04-22  Ravi Pratap  <ravi@ximian.com>
12687
12688         * expression.cs (Argument.Type): Ensure that we return the correct
12689         type when we have out or ref parameters [in which case we 
12690         append a "&"].
12691
12692 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
12693
12694         * class.cs (Property, Indexer): Allow extern modifier in there. 
12695
12696         * typemanager.cs (InitBaseTypes): Initializes object_type and
12697         value_type, since those will be used early on during the bootstrap
12698         process to compile corlib.
12699
12700         (InitCoreTypes): Move code from here to InitBaseTypes.
12701
12702 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
12703
12704         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
12705         single-dimension arrays as using the ldlen opcode.  
12706
12707         Daniel Lewis discovered this optimization.  
12708
12709         * typemanager.cs: Add signature for System.Array::get_Length
12710
12711 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12712
12713         * statement.cs: report the error when the foreach does not apply to an
12714         array nor a collection.
12715
12716 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
12717
12718         * expression.cs: Add implicit conversions to the operator ~.
12719
12720         * constant.cs (DecimalConstant.Emit): Emit decimal value.
12721
12722         * typemanager.cs: Locate the decimal constructor.
12723
12724 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12725
12726         * attribute.cs: use the new property of TypeOf.
12727         * expression.cs: added 'get' property around typearg.
12728
12729         These changes fix a build breaker reported by NickD. Is this the
12730         correct way to fix?  If not, please, revert my changes and make it
12731         work :-).
12732
12733 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
12734
12735         * attribute.cs: Add support for typeof in attribute invocations.
12736         I am not sure that this is right though.
12737
12738 2002-04-14  Duncan Mak  <duncan@ximian.com>
12739
12740         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
12741         Binary.Operator.Division case.
12742
12743 2002-04-13  Ravi Pratap  <ravi@ximian.com>
12744
12745         * class.cs (DefineType): Ensure that we do a proper check on
12746         attribute types and also register it with the TypeManager.
12747
12748         (TypeContainer.Targets): The default for attribute types is
12749         AttributeTargets.All.
12750
12751         * attribute.cs (ApplyAttributes): Registering the attribute type
12752         is done elsewhere, not when we discover we have a Usage attribute.
12753
12754 2002-04-12  Ravi Pratap  <ravi@ximian.com>
12755
12756         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
12757         and get rid of is_delegate parameter.
12758
12759         * everywhere : update.
12760
12761 2002-04-12  Ravi Pratap  <ravi@ximian.com>
12762
12763         * cs-parser.jay (compilation_unit): Revamp completely to use
12764         some new ideas that I got from Rhys' grammar to solve the problems
12765         with assembly level attributes.
12766
12767         (outer_declaration): New grammar production.
12768
12769         (attribute_sections): Add.
12770
12771         (opt_attributes): Base on attribute_sections
12772
12773         (namespace_declaration): Allow opt_attributes to tackle the case
12774         when we have assembly level attributes - we are clever in this
12775         regard now ;-)
12776
12777         * attribute.cs (ApplyAttributes): Do not worry about assembly 
12778         attributes in the non-global context.
12779
12780         * rootcontext.cs (AddGlobalAttributes): Go back to using this
12781         instead of SetGlobalAttributes.
12782
12783         * class.cs, rootcontext.cs : Ensure we define and generate 
12784         attribute types before anything else.
12785
12786         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
12787         and flag the new error -20 for the case when the attribute type
12788         does not have valid targets specified. csc does not catch this.
12789
12790         * ../errors/errors.txt : update for error # -20
12791
12792 2002-04-11  Ravi Pratap  <ravi@ximian.com>
12793
12794         * support.cs (InternalParameters.ParameterModifier): Do some null
12795         checking and return sane values.
12796
12797         * class.cs (Method.Define): If we are a PInvoke method, ensure
12798         that we are static and extern. Report error # 601
12799
12800         * ../errors/cs0601.cs : Add test case for the above error.
12801
12802 2002-04-07  Ravi Pratap  <ravi@ximian.com>
12803
12804         * rootcontext.cs (attribute_types): We need to keep type of
12805         all attribute types separately and emit code for them first.
12806
12807         (RegisterAttribute) : Implement.
12808
12809         * class.cs (DefineType): Check if the current Type is a custom
12810         attribute type and register it accordingly.
12811
12812         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
12813         adding the first attribute twice and rename to
12814
12815         (SetGlobalAttributes): this.
12816
12817         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
12818         lookups.
12819
12820         * attribute.cs (ApplyAttributes): Take an additional argument telling us
12821         if we are processing global arguments. Hmm, I am unsure of this.
12822
12823 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12824
12825         * expression.cs: added static array of strings to avoid calling
12826         Enum.ToString () for Operator in Binary. Significant recover of
12827         performance.
12828
12829 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
12830
12831         * class.cs (FindMembers): Allow the Builders of the various
12832         members to be null.  If they are skip them.  This only happens
12833         during the PInvoke declaration.
12834
12835 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
12836
12837         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
12838         failure, so we do not keep going afterwards.
12839
12840         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
12841         wanted to pass `false' as the `is_delegate' argument.  If this is
12842         the case, why not use delegate_type == null to mean `is_delegate =
12843         false' and anything else as is_delegate = true.
12844
12845 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
12846
12847         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
12848         code for the section, not the beginning of the tests.
12849
12850 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
12851
12852         * cfold.cs: Handle operator + (Enum x, Underlying x) 
12853
12854         * expression.cs (Binary): same.  Warn about errors where we have
12855         Enum/Enum in operator + as well.
12856
12857 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
12858
12859         * statement.cs:
12860                 - added support for switch(bool)
12861                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
12862                 - add TableSwitchEmit() to handle table-based switch statements
12863
12864 2002-04-05  Ravi Pratap  <ravi@ximian.com>
12865
12866         * expression.cs (Invocation.OverloadResolve): Factor out code which
12867         does parameter compatibility checking with arguments so that we can 
12868         re-use the code even from Delegate.VerifyApplicability
12869
12870         (VerifyArgumentsCompat): Move above code here.
12871
12872         * delegate.cs (VerifyApplicability): Get rid of duplicate code
12873         and instead make a call to the above method.
12874
12875 2002-03-31  Ravi Pratap  <ravi@ximian.com>
12876
12877         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
12878         We use it to keep track of classes which are attribute types.
12879
12880 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
12881
12882         * delegate.cs (Delegate.Define): Correctly define the types in the
12883         presence of fixed and array parameters.
12884
12885         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
12886         doing FindMembers.
12887
12888         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
12889         include NonPublic after the first iteration.
12890
12891         * class.cs (Indexer.CheckBase): Only check if both parents are
12892         non-null. 
12893
12894         * cs-parser.jay (accessor_body): If empty, set to null.
12895
12896         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
12897         same code path here to resolve constants names that we did have in
12898         MemberAccess.DoResolve.  There is too much code duplicated here.
12899
12900 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
12901
12902         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
12903
12904         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
12905         to MakeUnionSet.
12906
12907         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
12908         tokens, numbers and strings.
12909
12910         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
12911         parenthesis.
12912
12913         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
12914         asyncronous parameters and the regular parameters.  
12915
12916         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
12917         specify the target directory.
12918
12919         * expression.cs: (This.DoResolve): Simplify
12920         (As.Emit): Optimize, do not generate IsInst if the expression is
12921         always of the given type.
12922
12923         (Is.DoResolve): Bug fix, we were reporting both always/never for
12924         the is expression.
12925
12926         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
12927         creating too many unnecessary arrays.
12928
12929 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
12930
12931         * class.cs (EmitFieldInitializer): Use Assign expression to assign
12932         fields instead of rolling our own initializer.   Takes care of all
12933         implicit conversions, and drops unnecessary static checks/argument.
12934
12935 2002-03-31  Dick Porter  <dick@ximian.com>
12936
12937         * driver.cs: use the GetDirectories() return values properly, and
12938         use "/" as path separator.
12939
12940 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
12941
12942         * expression.cs (Unary): Optimize - - expr into expr.
12943         (Binary): Optimize a + (-b) into a -b.
12944
12945         * codegen.cs (CodeGen): Made all methods static.
12946
12947 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
12948
12949         * rootcontext.cs: 
12950
12951         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
12952         TypeBuilder property.
12953
12954         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
12955         instead. 
12956
12957         * tree.cs: Removed the various RecordXXXX, and replaced with a
12958         single RecordDecl.  Removed all the accessor methods, and just
12959         left a single access point Type 
12960
12961         * enum.cs: Rename DefineEnum to DefineType.
12962
12963         * decl.cs: New abstract method `DefineType' used to unify the
12964         Defines for Enumerations, Interfaces, TypeContainers and
12965         Delegates.
12966
12967         (FindType): Moved LookupInterfaceOrClass here.  Moved the
12968         LookupBaseClasses method that used to live in class.cs and
12969         interface.cs here, and renamed to FindType.
12970
12971         * delegate.cs: Implement DefineType.  Take advantage of the
12972         refactored pattern for locating the parent builder without taking
12973         the parent_builder argument (which we know does not work if we are
12974         nested, and triggering a toplevel definition).
12975
12976 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
12977
12978         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
12979         accessibility of a member has changed during override and report
12980         an error if so.
12981
12982         * class.cs (Method.Define, Property.Define): Only complain on
12983         overrides if the method is private, any other accessibility is
12984         fine (and since we just checked the permission is the same, we are
12985         good to go).
12986
12987         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
12988         and elif are processed always.  The other pre-processing
12989         directives are only processed if we are "taking" the path
12990
12991 2002-03-29  Martin Baulig  <martin@gnome.org>
12992
12993         * class.cs (Method.Emit): Only emit symbolic debugging info if the
12994         current location is not Null.
12995
12996         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
12997         a separate method so we can profile it.
12998
12999         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
13000         `span.Seconds' are just seconds, but no minutes or hours.
13001         (MainDriver): Profile the CodeGen.SaveSymbols calls.
13002
13003 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
13004
13005         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
13006         Remove the gratuitous set of Final:
13007
13008                                 // If an interface implementation, then we can set Final.
13009                                 if (((flags & MethodAttributes.Abstract) == 0) &&
13010                                     implementing.DeclaringType.IsInterface)
13011                                         flags |= MethodAttributes.Final;
13012
13013         I do not know what I was smoking when I used that.
13014
13015
13016         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
13017         step into fixing the name resolution issues for delegates and
13018         unifying the toplevel name resolution.
13019
13020 2002-03-28  Martin Baulig  <martin@gnome.org>
13021
13022         * class.cs (Method.Emit): If we have a symbol writer, call its
13023         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
13024         tell it about the current method.
13025
13026         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
13027         writer that we're going to emit the first byte of IL code for a new
13028         statement (a new source line).
13029         (EmitContext.EmitTopBlock): If we have a symbol writer, call
13030         EmitContext.Mark() before emitting any code.
13031
13032         * location.cs (SymbolDocument): Return null when we're Null.
13033
13034         * statement.cs (Statement): Moved the `Location loc' variable here.
13035         (Statement.EmitBoolExpression): If we have a symbol writer, call
13036         ec.Mark() before emitting any code to tell it that we're at the
13037         beginning of a new statement.
13038         (StatementExpression): Added `Location' argument to the constructor.
13039         (Block): Added public readonly variable `StartLocation' and public
13040         variable `EndLocation'.  The latter is to be set using SetEndLocation().
13041         (Block): Added constructor which takes a start and end location.
13042         (Block.SetEndLocation): New method. This sets the end location.
13043         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
13044         local variables we create.
13045         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
13046         each statement and do also mark the begin and end of the block.
13047
13048         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
13049         tell it the current lexer.Location, use Location.Null for the end of the
13050         block.
13051         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
13052         current block, set its end location using SetEndLocation().
13053         (statement_expression): StatementExpression constructor now takes the
13054         lexer.Location as additional argument.
13055         (for_statement, declare_local_variables): Likewise.
13056         (declare_local_variables): When creating a new implicit block, use the
13057         new Block constructor and pass it the lexer.Location.
13058
13059 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
13060
13061         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
13062         members also on the parent interfaces recursively.
13063
13064 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
13065
13066         * report.cs: Use new formats, since Gonzalo finished the missing
13067         bits. 
13068
13069         * expression.cs (Binary.ResolveOperator): added missing operator|
13070         operator& and operator^ for bool/bool.
13071
13072         * cs-parser.jay: CheckDef now takes a Location argument that is
13073         used to report errors more precisly (instead of reporting the end
13074         of a definition, we try to track something which is a lot closer
13075         to the source of the problem).
13076
13077         * cs-tokenizer.cs: Track global token use, so we can properly flag
13078         the use of #define/#undef after the first token has been seen.
13079
13080         Also, rename the reportXXXX to Error_DescriptiveName
13081
13082         * decl.cs (DeclSpace.IsTopLevel): Move property here from
13083         TypeContainer, so that Enum and Interface can use this too.
13084
13085         * class.cs (TypeContainer.LookupInterfaceOrClass,
13086         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
13087         `builder' argument.  Typically this was used to pass the parent
13088         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
13089         the definition).  
13090
13091         The problem is that a nested class could trigger the definition of
13092         a toplevel class, and the builder would be obviously wrong in that
13093         case. 
13094
13095         So we drop this argument, and we compute dynamically the
13096         TypeBuilder/ModuleBuilder (the correct information was available
13097         to us anyways from DeclSpace.Parent)
13098
13099         * interface.cs (Interface.DefineInterface): Drop builder
13100         parameter cleanup like class.cs
13101
13102         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
13103         like class.cs
13104
13105         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
13106         values. 
13107
13108         (Try.Emit): Propagate the returns value from the statement.
13109
13110         (Return.Emit): Even if we are leavning 
13111
13112         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
13113
13114         * modifiers.cs: Fix the computation of MethodAttributes flags.
13115
13116 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
13117
13118         * driver.cs: allow compilation of files that start with '/'.
13119         Add a default case when checking the argument of --target.
13120
13121 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
13122
13123         * interface.cs: Implement the same search algorithm for types in
13124         the interface code.
13125
13126         * delegate.cs: Do not allow multiple definition.
13127
13128         * Recovered ChangeLog that got accidentally amputated
13129
13130         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
13131
13132         * rootcontext.cs: Load manually enum to allow core classes to
13133         contain enumerations.
13134
13135         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
13136         Update to new static methods in TypeManager.
13137
13138         * typemanager.cs (GetMethod, GetConstructor): Use our
13139         implementation of FindMembers to find the members, since during
13140         corlib compilation, the types are TypeBuilders and GetMethod and
13141         GetConstructor do not work.
13142
13143         Make all methods in TypeManager static.
13144
13145         (InitCodeHelpers): Split the functionality from
13146         the InitCodeTypes function.
13147
13148         * driver.cs: Call InitCodeHelpers after we have populated the
13149         types. 
13150
13151         * cs-parser.jay (delegate_declaration): we did not used to compute
13152         the delegate name correctly for void delegates.
13153
13154 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
13155
13156         * rootcontext.cs (RootContext): Init the interface_resolve_order
13157         and type_container_resolve_order always.
13158
13159         (ResolveCore, BootstrapCorlib_ResolveClass,
13160         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
13161         compiler when compiling with --nostdlib
13162
13163         * class.cs (TypeContainer.DefineType): Check that our parent is
13164         not null.  This test is most important when we are bootstraping
13165         the core types.
13166
13167         * codegen.cs: Split out the symbol writing code.
13168
13169 2002-03-25  Martin Baulig  <martin@gnome.org>
13170
13171         * driver.cs (-g): Made -g an alias for --debug.
13172
13173 2002-03-24  Martin Baulig  <martin@gnome.org>
13174
13175         * codegen.cs (SymbolWriter): New public variable. Returns the
13176         current symbol writer.
13177         (CodeGen): Added `bool want_debugging_support' argument to the
13178          constructor. If true, tell the ModuleBuild that we want debugging
13179         support and ask it for the ISymbolWriter.
13180         (Save): If we have a symbol writer, call it's Close() method after
13181         saving the assembly.
13182
13183         * driver.c (--debug): New command line argument to create a
13184         debugger information file.
13185
13186         * location.cs (SymbolDocument): New public property. Returns an
13187         ISymbolDocumentWriter object for the current source file or null
13188         if we don't have a symbol writer.
13189
13190 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
13191
13192         * driver.cs (LoadAssembly): Correctly return when all the paths
13193         have been tried and not before.
13194
13195         * statement.cs (Switch.Emit): return the actual coverage for this
13196         statement (returns/not-returns)
13197
13198         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
13199         switch of the statement if we are the last switch section.  That
13200         kills two problems: try/catch problems (we used to emit an empty
13201         nop at the end) and switch statements where all branches would
13202         return. 
13203
13204 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
13205
13206         * driver.cs: Add default assemblies (the equivalent to the
13207         Microsoft CSC.RSP file)
13208
13209         * cs-tokenizer.cs: When updating `cols and setting it to zero,
13210         also update tokens_seen and set it to false.
13211
13212         * driver.cs: Implement --recurse for Mike.
13213
13214         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
13215         correctly splitting out the paths.
13216
13217 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
13218
13219         * interface.cs (Interface.PopulateProperty): Instead of using
13220         `parent' as the declaration space for the set parameters, use
13221         `this' 
13222
13223         * support.cs (InternalParameters): InternalParameters constructor
13224         takes a DeclSpace instead of a TypeContainer.
13225
13226         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
13227         types are being initialized, load the address of it before calling
13228         the function.  
13229
13230         (New): Provide a mechanism to disable the generation of local
13231         value type temporaries when the caller will be providing us with
13232         an address to store it.
13233
13234         (ArrayCreation.EmitDynamicInitializers): Use it.
13235
13236 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
13237
13238         * expression.cs (Invocation.EmitArguments): Only probe for array
13239         property if there is more than one argument.  Sorry about that.
13240
13241         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
13242         empty param arrays.
13243
13244         * class.cs (Method.LabelParameters): Fix incorrect code path that
13245         prevented the `ParamArrayAttribute' from being applied to the
13246         params attribute.
13247
13248 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
13249
13250         * support.cs (ReflectionParameters): Correctly compute whether the
13251         last argument is a params array.  Fixes the problem with
13252         string.Split ('a')
13253
13254         * typemanager.cs: Make the assemblies array always be non-null
13255         (empty, but non-null)
13256
13257         * tree.cs (RecordDecl): New function that abstracts the recording
13258         of names.  This reports error 101, and provides a pointer to the
13259         previous declaration.  Fixes a crash in the compiler.
13260
13261         * cs-parser.jay (constructor_declaration): Update to new grammar,
13262         and provide a constructor_body that can be empty.
13263
13264 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
13265
13266         * driver.cs: Add support for --resources.
13267
13268         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
13269         Make all types for the various array helper methods be integer.
13270
13271         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
13272         CheckState to ConvCast.
13273
13274         (ConvCast): Now it takes a `checked' state argument, to avoid
13275         depending on the emit context for the conversion, and just using
13276         the resolve time setting.
13277
13278         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
13279         instead of Invocation.EmitArguments.  We do not emit the original
13280         arguments, instead we emit those which have been converted to
13281         unsigned int expressions.
13282
13283         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
13284
13285         * codegen.cs: ditto.
13286
13287         * expression.cs (LocalVariableReference): Drop the use of the
13288         Store function that depended on the variable index.
13289
13290         * statement.cs (VariableInfo): Drop the `Idx' property from this
13291         class, as this is not taking into account the indexes for
13292         temporaries tat we generate during the execution, getting the
13293         indexes wrong.
13294
13295         * class.cs: First emit class initializers, then call the parent
13296         constructor. 
13297
13298         * expression.cs (Binary): Fix opcode emision.
13299         (UnaryMutator.EmitCode): Support checked code generation
13300
13301         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
13302         matches for events for both the Static and Instance scans,
13303         pointing to the same element.   Fix that.
13304
13305 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
13306
13307         * rootcontext.cs (ResolveTree): Always set the
13308         interface_resolve_order, because nested interfaces will be calling
13309         into us.
13310
13311         * class.cs (GetInterfaceOrClass): Track the same resolution
13312         process used by TypeManager.LookupType.  This fixes the nested
13313         type lookups in class declarations (separate path from
13314         LookupType). 
13315
13316         (TypeContainer.DefineType): Also define nested interfaces.
13317         (TypeContainer.RegisterOrder): New public function used to
13318         register the order in which child interfaces need to be closed.
13319
13320         Nested interfaces need to be closed after their parents have been
13321         created. 
13322
13323         * interface.cs (InterfaceAttr): Put all the logic for computing
13324         the interface attribute here. 
13325
13326         (DefineInterface): Register our interface order with the
13327         RootContext or with the TypeContainer depending on the case.
13328
13329 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
13330
13331         * cs-parser.jay: rework foreach statement to work with the new
13332         changes to the policy on SimpleNames.
13333
13334         * report.cs: support Stacktrace on warnings as well.
13335
13336         * makefile: drop --unsafe and /unsafe from the compile.
13337
13338 2002-03-13  Ravi Pratap  <ravi@ximian.com>
13339
13340         * ecore.cs (StandardConversionExists): Modify to take an Expression
13341         as the first parameter. Ensure we do null -> reference type conversion
13342         checking.
13343
13344         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
13345         temporary Expression objects.
13346
13347 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
13348
13349         * interface.cs: workaround bug in method overloading resolution
13350         (there is already a bugzilla bug for it).
13351
13352 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
13353
13354         We could also solve this problem by having a separate path for
13355         performing type lookups, instead of DoResolve, we could have a
13356         ResolveType entry point, and only participating pieces of the
13357         production (simplename, deref, array) would implement this. 
13358
13359         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
13360         signal SimpleName to only resolve type names and not attempt to
13361         resolve anything else.
13362
13363         * expression.cs (Cast): Set the flag.
13364
13365         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
13366
13367         * class.cs: Only report 108 if there is no `new' modifier.
13368
13369         * cs-parser.jay: rework foreach statement to work with the new
13370         changes to the policy on SimpleNames.
13371         
13372         * report.cs: support Stacktrace on warnings as well.
13373
13374         * makefile: drop --unsafe and /unsafe from the compile.
13375
13376 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
13377
13378         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
13379         lookups here, instead of doing that at parse time.  This means
13380         that our grammar will not introduce `LocalVariableReferences' as
13381         expressions at this point.  That solves the problem of code like
13382         this:
13383
13384         class X {
13385            static void Main ()
13386            { int X = 1;
13387             { X x = null }}}
13388
13389         This is only half the fix.  The full fix requires parameters to
13390         also be handled in this way.
13391
13392         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
13393         makes the use more obvious of the DeclSpace.  The
13394         ec.TypeContainer.TypeBuilder is now only used to pull the
13395         TypeBuilder for it.
13396
13397         My theory is that I can get rid of the TypeBuilder completely from
13398         the EmitContext, and have typecasts where it is used (from
13399         DeclSpace to where it matters).  
13400
13401         The only pending problem is that the code that implements Aliases
13402         is on TypeContainer, and probably should go in DeclSpace.
13403
13404         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
13405         lookups here, instead of doing that at parse time.  This means
13406         that our grammar will not introduce `LocalVariableReferences' as
13407         expressions at this point.  That solves the problem of code like
13408         this:
13409
13410         class X {
13411            static void Main ()
13412            { int X = 1;
13413             { X x = null }}}
13414
13415         This is only half the fix.  The full fix requires parameters to
13416         also be handled in this way.
13417
13418         * class.cs (Property.DefineMethod): When implementing an interface
13419         method, set newslot, when implementing an abstract method, do not
13420         set the flag (before we tried never setting it, or always setting
13421         it, which is the difference).
13422         (Indexer.DefineMethod): same.
13423         (Method.DefineMethod): same.
13424
13425         * ecore.cs: Only set the status used flag if we get back a Field.
13426
13427         * attribute.cs: Temporary hack, so Paolo can keep working.
13428
13429 2002-03-08  Ravi Pratap  <ravi@ximian.com>
13430
13431         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
13432         the unmanaged type in the case we have a MarshalAs attribute.
13433
13434         (Resolve): Handle the case when we are parsing the special MarshalAs
13435         attribute [we need to store the unmanaged type to use later]
13436
13437         * typemanager.cs (marshal_as_attr_type): Built in type for the 
13438         MarshalAs Attribute.
13439
13440         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
13441         on parameters and accordingly set the marshalling info.
13442
13443 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
13444
13445         * class.cs: Optimizing slightly by removing redundant code after
13446         we switched to the `NoTypes' return value.
13447         (Property.DefineMethod): use NoTypes here too.
13448
13449         This fixes the bug I introduced in my last batch of changes.
13450
13451 2002-03-05  Ravi Pratap  <ravi@ximian.com>
13452
13453         * tree.cs (RecordEnum): Add. We now keep track of enums too.
13454
13455         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
13456         Enums since those are types too. 
13457
13458         * cs-parser.jay (enum_declaration): Record enums as we parse them.
13459
13460         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
13461         thanks to a call during the lookup process.
13462
13463 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
13464
13465         * statement.cs (Foreach): Lots of work to accomodate a particular
13466         kind of foreach statement that I had not kept in mind.  It is
13467         possible to have foreachs on classes that provide a GetEnumerator
13468         method that return objects that implement the "pattern" for using
13469         a foreach, there is no need to support GetEnumerator
13470         specifically. 
13471
13472         This is needed to compile nant.
13473
13474         * decl.cs: Only report 114 if the member is not `Finalize' and if
13475         the warning level is at least 2.
13476
13477         * class.cs: Moved the compare function from Method to
13478         MethodSignature. 
13479
13480         (MethodSignature.InheritableMemberSignatureCompare): Add new
13481         filter function that is used to extract inheritable methods from a
13482         class. 
13483
13484         (Method.Define): Use the new `inheritable_method_signature_filter'
13485         delegate
13486
13487         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
13488         command. 
13489
13490 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
13491
13492         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
13493
13494         * cs-parser.jay: Add opt_semicolon to the interface declaration.
13495
13496         * expression.cs: Pass location information to
13497         ConvertImplicitStandard. 
13498
13499         * class.cs: Added debugging code to track return values from
13500         interfaces. 
13501
13502 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
13503
13504         * expression.cs (Is.DoResolve): If either side of the `is' is an
13505         interface, do not flag the warning.
13506
13507         * ecore.cs (ImplicitReferenceConversion): We need a separate test
13508         for interfaces
13509
13510         * report.cs: Allow for --fatal to be used with --probe.
13511
13512         * typemanager.cs (NoTypes): Move the definition for the empty Type
13513         array here. 
13514
13515         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
13516         properties. 
13517         (TypeContainer.DefineProxy): New function used to proxy to parent
13518         implementations when implementing interfaces.
13519         (TypeContainer.ParentImplements): used to lookup if our parent
13520         implements a public function that is required by an interface.
13521         (TypeContainer.VerifyPendingMethods): Hook this up.
13522
13523         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
13524         `modules' and `assemblies' arraylists into arrays.  We only grow
13525         these are the very early start up of the program, so this improves
13526         the speedof LookupType (nicely measured).
13527
13528         * expression.cs (MakeByteBlob): Replaced unsafe code with
13529         BitConverter, as suggested by Paolo.
13530
13531         * cfold.cs (ConstantFold.Binary): Special case: perform constant
13532         folding of string concatenation, but if either side is a string,
13533         and the other is not, then return null, and let the runtime use
13534         the concatenation on the string plus the object (using
13535         `Object.ToString'). 
13536
13537 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
13538
13539         Constant Folding has been implemented now.
13540
13541         * expression.cs (Unary.Reduce): Do not throw an exception, catch
13542         the error instead on types that are not supported in one's
13543         complement. 
13544
13545         * constant.cs (Constant and all children): New set of functions to
13546         perform implict and explicit conversions.
13547
13548         * ecore.cs (EnumConstant): Implement the new functions to perform
13549         conversion by proxying to the child expression.
13550
13551         * codegen.cs: (ConstantCheckState): Constant evaluation has its
13552         own separate setting that can not be turned off from the command
13553         line using --unchecked or --checked and is only controlled using
13554         the checked/unchecked statements and expressions.  This setting is
13555         used by the constant folder to flag errors.
13556
13557         * expression.cs (CheckedExpr, UncheckedExpr): Set the
13558         ConstantCheckState as well.   
13559
13560         During Resolve, they also have to flag the state, because the
13561         constant folder runs completely in the Resolve phase.
13562
13563         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
13564         well.
13565
13566 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
13567
13568         * cfold.cs: New file, this file contains the constant folder.
13569
13570         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
13571         argument to track whether we are using the resulting address to
13572         load or store a value and provide better error messages. 
13573
13574         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
13575         new AddressOf arguments.
13576
13577         * statement.cs (Foreach.EmitCollectionForeach): Update
13578
13579         * expression.cs (Argument.Emit): Call AddressOf with proper
13580         arguments to track usage.
13581
13582         (New.DoEmit): Call AddressOf with new arguments.
13583
13584         (Unary.Emit): Adjust AddressOf call.
13585
13586 2002-03-01  Ravi Pratap  <ravi@ximian.com>
13587
13588         * cs-parser.jay (member_access): Change the case for pre-defined types
13589         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
13590         this suggestion.
13591
13592         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
13593         a method body.
13594
13595         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
13596         essentially like methods and apply attributes like MethodImplOptions to them too.
13597
13598         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
13599         not being null.
13600
13601         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
13602         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
13603         is the DeclSpace.
13604
13605         * Update code everywhere accordingly.
13606
13607         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
13608
13609         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
13610
13611 2002-02-28  Ravi Pratap  <ravi@ximian.com>
13612
13613         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
13614         try performing lookups against those instead of jumping straight into using
13615         the 'using' clauses.
13616
13617         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
13618
13619         (LookupType): Perform lookups in implicit parents too.
13620
13621         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
13622         sequence as RootContext.LookupType. 
13623
13624         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
13625         the various cases of namespace lookups into this method.
13626
13627 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
13628
13629         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
13630         in positional arguments)
13631
13632         * class.cs (Operator): Update the AllowedModifiers to contain
13633         extern. 
13634
13635         * cs-parser.jay: Update operator declaration to allow for the
13636         operator body to be empty.
13637
13638         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
13639         values. 
13640
13641 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
13642
13643         * class.cs (Method.Emit): Label parameters.
13644
13645         * driver.cs: Return 1 or 0 as the program exit code.
13646
13647 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
13648
13649         * expression.cs: Special case the `null' object when trying to
13650         auto-compute the type, as anything can be explicitly converted to
13651         that. 
13652
13653         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
13654         spotting this Paolo.
13655
13656         (Expression.ImplicitNumericConversion): Perform comparissions of
13657         the type using the underlying type in the case of an enumeration
13658         rather than using the enumeration type for the compare.
13659
13660         Cope with the underlying == type case, which is not possible to
13661         catch before. 
13662
13663         (Expression.ConvertNumericExplicit): Perform comparissions of
13664         the type using the underlying type in the case of an enumeration
13665         rather than using the enumeration type for the compare.
13666
13667         * driver.cs: If the user does not supply an extension, assume .exe
13668
13669         * cs-parser.jay (if_statement): Rewrote so that we can track the
13670         location for the if statement.
13671
13672         * expression.cs (Binary.ConstantFold): Only concat strings when
13673         the operation is "+", not everything ;-)
13674
13675         * statement.cs (Statement.EmitBoolExpression): Take a location
13676         argument. 
13677         (If, While, Do): Track location.
13678
13679         * expression.cs (Binary.ResolveOperator): In the object + string
13680         case, I was missing a call to ConvertImplicit
13681
13682 2002-02-25  Ravi Pratap  <ravi@ximian.com>
13683
13684         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
13685         Location arguments. Ensure we use RootContext.LookupType to do our work
13686         and not try to do a direct Type.GetType and ModuleBuilder.GetType
13687
13688         * interface.cs (PopulateMethod): Handle the type of the parameter being
13689         null gracefully.
13690
13691         * expression.cs (Invocation.BetterFunction): Handle the case when we 
13692         have a params method with no fixed arguments and a call is made with no
13693         arguments.
13694
13695 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
13696
13697         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
13698         the verbatim-string-literal
13699
13700         * support.cs (InternalParameters.ParameterModifier): handle null
13701         fixed parameters.
13702         (InternalParameters.ParameterType): ditto.
13703
13704         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
13705         duplicating the name of the variable parameter.
13706         (GetParameterByName): Fix bug where we were not looking up array
13707         paramters if they were the only present (thanks Paolo!).
13708         (GetParameterInfo): We only have an empty set of types if both
13709         fixed and array are set to null.
13710         (GetParameterInfo-idx): Handle FixedParameter == null
13711
13712         * cs-parser.jay: Handle the case where there is no catch
13713         statements (missing null test).
13714
13715 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
13716
13717         * driver.cs (MainDriver): Be conservative on our command line
13718         handling.
13719
13720         Catch DirectoryNotFoundException when calling GetFiles.
13721
13722         (SplitPathAndPattern): Used to split the input specification into
13723         a path and a pattern that we can feed to Directory.GetFiles.
13724
13725 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
13726
13727         * statement.cs (Fixed): Implement the last case of the Fixed
13728         statement (string handling).
13729
13730         * expression.cs (StringPtr): New class used to return a char * to
13731         a string;  Used by the Fixed statement.
13732
13733         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
13734
13735         * expression.cs (Binary.ResolveOperator): Remove redundant
13736         MemberLookup pn parent type.
13737         Optimize union call, we do not need a union if the types are the same.
13738         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
13739         type.
13740
13741         Specialize the use of MemberLookup everywhere, instead of using
13742         the default settings. 
13743
13744         (StackAlloc): Implement stackalloc keyword.
13745
13746         * cs-parser.jay: Add rule to parse stackalloc.
13747
13748         * driver.cs: Handle /h, /help, /?
13749
13750         * expression.cs (MakeByteBlob): Removed the hacks we had in place
13751         before we supported unsafe code.
13752
13753         * makefile: add --unsafe to the self compilation of mcs.
13754
13755 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
13756
13757         * expression.cs (PointerArithmetic): New class that is used to
13758         perform pointer arithmetic.
13759         (Binary.Resolve): Handle pointer arithmetic
13760         Handle pointer comparission.
13761         (ArrayPtr): Utility expression class that is used to take the
13762         address of an array.
13763
13764         (ElementAccess): Implement array access for pointers
13765
13766         * statement.cs (Fixed): Implement fixed statement for arrays, we
13767         are missing one more case before we are done.
13768
13769         * expression.cs (Indirection): Implement EmitAssign and set the
13770         ExprClass to Variable.  This allows pointer dereferences to be
13771         treated as variables, and to have values assigned to them.
13772
13773         * ecore.cs (Expression.StoreFromPtr): New utility function to
13774         store values dereferencing.
13775
13776 2002-02-20  Ravi Pratap  <ravi@ximian.com>
13777
13778         * expression.cs (Binary.ResolveOperator): Ensure that we are
13779         not trying to operate on a void type - this fixes the reported
13780         bug.
13781
13782         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
13783         the parent implementation is sealed.
13784
13785         * ../errors/cs0239.cs : Add.
13786
13787         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
13788
13789         * typemanager.cs (unverifiable_code_type): Corresponds to 
13790         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
13791         which have unsafe code in them.
13792
13793         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
13794         unsafe context.
13795
13796 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
13797
13798         * cs-tokenizer.cs: Add support for @"litreal strings"
13799
13800         Make tokenizer accept pre-processor directives
13801         on any column (remove the old C-like limitation). 
13802
13803         * rootcontext.cs (EmitCode): Emit any global attributes.
13804         (AddGlobalAttributes): Used to keep track of assembly attributes. 
13805
13806         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
13807
13808         * cs-parser.jay: Add support for global attributes.  
13809
13810 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
13811
13812         * expression.cs (Indirection): New helper class.  Unary will
13813         create Indirection classes to be able to implement the
13814         IMemoryLocation interface on it.
13815
13816 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
13817
13818         * cs-parser.jay (fixed_statement): reference the right statement.
13819
13820         * statement.cs (Fixed.Emit): Finish implementing the fixed
13821         statement for the &x case.
13822
13823 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
13824
13825         * class.cs (Property.Define, Method.Define): Remove newslot when
13826         `implementing'.  
13827
13828         * modifiers.cs: My use of NewSlot when `Abstract' was set was
13829         wrong.  NewSlot should only be used if the `new' keyword is present.
13830
13831         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
13832         locating our system dir.  Sorry about this.
13833
13834 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
13835
13836         * driver.cs (GetSystemDir): Compute correctly the location of our
13837         system assemblies.  I was using the compiler directory instead of
13838         the library directory.
13839
13840 2002-02-13  Ravi Pratap  <ravi@ximian.com>
13841
13842         * expression.cs (BetterFunction): Put back in what Miguel commented out
13843         since it is the correct fix. The problem is elsewhere ;-)
13844
13845         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
13846         parameters of the parms method are themselves compatible or not !
13847
13848         (StandardConversionExists): Fix very dangerous bug where we were forgetting
13849         to check that a class implements an interface before saying that an implicit
13850         conversion was allowed. Use ImplementsInterface to do the checking.
13851
13852 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
13853
13854         * class.cs (Method.Define): Track whether we are an explicit
13855         implementation or not.  And only call DefineMethodOverride if we
13856         are an explicit implementation.
13857
13858         (Property.DefineMethod): Ditto.
13859
13860 2002-02-11  Ravi Pratap  <ravi@ximian.com>
13861
13862         * expression.cs (BetterFunction): Catch hideous bug which was
13863          preventing us from detecting ambiguous calls due to implicit casts i.e
13864         cs0121.
13865
13866 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
13867
13868         * support.cs (Pair): Remove un-needed method.  I figured why I was
13869         getting the error in cs-parser.jay, the variable in a foreach loop
13870         is readonly, and the compiler does not really treat this as a variable.
13871
13872         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
13873         instead of EQUALS in grammar.  
13874
13875         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
13876
13877         * expression.cs (Unary.DoResolve): Check whether the argument is
13878         managed or not.
13879
13880 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
13881
13882         * support.cs: Api for Pair to set a value.  Despite the fact that
13883         the variables are public the MS C# compiler refuses to compile
13884         code that accesses the field if the variable is part of a foreach
13885         statement. 
13886
13887         * statement.cs (Fixed): Begin implementation of the fixed
13888         statement.
13889
13890         (Block.AddVariable): Return the VariableInfo on success and null
13891         on failure instead of true/false. 
13892
13893         * cs-parser.jay (foreach): Catch errors on variables already
13894         defined (we were ignoring this value before) and properly unwind
13895         the block hierarchy
13896
13897         (fixed_statement): grammar for the fixed statement.
13898
13899 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
13900
13901         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
13902         pointer types to be incretemented.
13903
13904         (SizeOf): Implement.
13905
13906         * cs-parser.jay (pointer_member_access): Implement
13907         expr->IDENTIFIER production.
13908
13909         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
13910         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
13911         on safe contexts.
13912
13913         (Unary): Implement indirection.
13914
13915         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
13916         use in non-unsafe context).
13917
13918         (SimpleName.DoResolve): Check for pointers in field access on safe
13919         contexts. 
13920
13921         (Expression.LoadFromPtr): Factor the load-indirect code in this
13922         function.  This was duplicated in UnboxCast and ParameterReference
13923
13924 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
13925
13926         * expression.cs (ComposedCast): report an error if a pointer cast
13927         is used in a safe region.
13928
13929         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
13930         pointer type casts in unsafe context.
13931
13932         * codegen.cs (EmitContext): Set up IsUnsafe.
13933
13934         * cs-parser.jay (non_expression_type): Add productions for pointer
13935         casts. 
13936
13937         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
13938         code.  We should not use force into static mode if the method is
13939         not virtual.  Fixes bug in MIS
13940
13941         * statement.cs (Do.Emit, While.Emit, For.Emit,
13942         Statement.EmitBoolExpression): Add support to Do and While to
13943         propagate infinite loop as `I do return' semantics.
13944
13945         Improve the For case to also test for boolean constants.
13946
13947         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
13948         to the list of attributes we can add.
13949
13950         Remove `EmitContext' argument.
13951
13952         * class.cs (Method.Define): Apply parameter attributes.
13953         (Constructor.Define): Apply parameter attributes.
13954         (MethodCore.LabelParameters): Move here the core of labeling
13955         parameters. 
13956
13957         * support.cs (ReflectionParameters.ParameterModifier,
13958         InternalParameters.ParameterModifier): Use IsByRef on the type and
13959         only return the OUT bit for these parameters instead of in/out/ref
13960         flags.
13961
13962         This is because I miss-understood things.  The ParameterInfo.IsIn
13963         and IsOut represent whether the parameter has the [In] and [Out]
13964         attributes set.  
13965
13966 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
13967
13968         * ecore.cs (FieldExpr.Emit): Release temporaries.
13969
13970         * assign.cs (LocalTemporary.Release): new function.
13971
13972         * codegen.cs (EmitContext.GetTemporaryStorage,
13973         EmitContext.FreeTemporaryStorage): Rework the way we deal with
13974         temporary storage.  Now we can "put back" localbuilders when we
13975         are done with them
13976
13977 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
13978
13979         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
13980         need to make a copy of the variable to generate verifiable code.
13981
13982 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
13983
13984         * driver.cs: Compute dynamically the system directory.
13985
13986         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
13987         Slower, but more generally useful.  Used by the abstract
13988         registering implementation. 
13989
13990         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
13991         the rules for the special rule on Type/instances.  First check if
13992         we have the same name, and if so, try that special static path
13993         rather than the instance path.
13994
13995 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
13996
13997         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
13998         for, while and if.
13999
14000         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
14001         Enum, ValueType, Delegate or Array for non-corlib compiles.
14002
14003         * cs-tokenizer.cs: Catch long identifiers (645)
14004
14005         * typemanager.cs (IndexerPropetyName): Ravi never tested this
14006         piece of code.
14007
14008         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
14009         fix, we were returning too early, so we were not registering
14010         pending methods from abstract classes.
14011
14012         Do not register pending methods if the class is abstract.
14013
14014         * expression.cs (Conditional.DoResolve): Report circular implicit
14015         conversions when we neecd to compute it for conditional
14016         expressions. 
14017
14018         (Is.DoResolve): If the expression is always of the provided type,
14019         flag warning 183.  If the expression can not ever be of the
14020         provided type flag warning 184.
14021
14022         * class.cs: Catch 169 as well.
14023
14024         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
14025         read. 
14026
14027 2002-01-18  Nick Drochak  <ndrochak@gol.com>
14028
14029         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
14030
14031 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
14032
14033         * interface.cs: (PopulateMethod): Check for pointers being defined
14034         only if the unsafe context is active.
14035         (PopulateProperty): ditto.
14036         (PopulateIndexer): ditto.
14037
14038         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
14039         specified.  If pointers are present, make sure that they are
14040         present in an unsafe context.
14041         (Constructor, Constructor.Define): ditto.
14042         (Field, Field.Define): ditto.
14043         (Property, Property.Define): ditto.
14044         (Event, Event.Define): ditto.
14045
14046         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
14047         hashtable if there are classes or structs defined.
14048
14049         * expression.cs (LocalVariableReference.DoResolve): Simplify this
14050         code, as the constant resolution moved.
14051
14052         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
14053         the metadata, so we can flag error 133. 
14054
14055         * decl.cs (MemberCore.UnsafeOK): New function to test that a
14056         pointer is being declared in an unsafe context.
14057
14058 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
14059
14060         * modifiers.cs (Modifiers.Check): Require a Location argument.
14061         Report error 227 for Unsafe use.
14062
14063         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
14064
14065         * statement.cs (For.Emit): If the test is null, then report that
14066         we do `return', as we wont reach anything afterwards.
14067
14068         (Switch.SwitchGoverningType): Track the expression that matched
14069         the conversion.
14070
14071         * driver.cs: Allow negative numbers as an error code to flag.
14072
14073         * cs-parser.jay: Handle 1551.
14074
14075         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
14076
14077 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
14078
14079         * cs-parser.jay: Report 1518 (type declaration can only contain
14080         class, struct, interface, enum or delegate)
14081
14082         (switch_label): Report 1523 (keywords `case' or `default' must
14083         preced code)
14084
14085         (opt_switch_sections): Report 1522 (empty switch)
14086
14087         * driver.cs: Report 1515 (response file specified multiple times)
14088         Report 1516 (Source file specified multiple times).
14089
14090         * expression.cs (Argument.Resolve): Signal 1510
14091
14092         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
14093         access not allowed in static code)
14094
14095 2002-01-11  Ravi Pratap  <ravi@ximian.com>
14096
14097         * typemanager.cs (IsPointerType): Utility method which we are going
14098         to need a lot.
14099
14100         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
14101         the object type, so we take care of that.
14102
14103         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
14104
14105         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
14106         added to non-params parameters :-)
14107
14108         * typemanager.cs (CSharpName): Include 'void' type too. 
14109
14110         (void_ptr_type): Include in the set of core types.
14111
14112         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
14113         duplicating code.
14114
14115         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
14116         an unsafe context.
14117
14118         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
14119         completely forgotten about it.
14120
14121 2002-01-10  Ravi Pratap  <ravi@ximian.com>
14122
14123         * cs-parser.jay (pointer_type): Add. This begins our implementation
14124         of parsing rules for unsafe code.
14125
14126         (unsafe_statement): Implement.
14127
14128         (embedded_statement): Modify to include the above.
14129
14130         * statement.cs (Unsafe): Implement new class for unsafe blocks.
14131
14132         * codegen.cs (EmitContext.InUnsafe): Add. This determines
14133         if the current context is an unsafe one.
14134
14135         * cs-parser.jay (local_variable_pointer_type): Since local variable types
14136         are handled differently, we need separate rules for them.
14137
14138         (local_variable_declaration): Update to use local_variable_pointer_type
14139         to allow variable declarations of unmanaged pointer types.
14140
14141         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
14142         in unsafe contexts.
14143
14144         * ../errors/cs0214.cs : Add.
14145
14146 2002-01-16  Nick Drochak  <ndrochak@gol.com>
14147
14148         * makefile: remove 'response' file when cleaning.
14149
14150 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
14151
14152         * cs-parser.jay: Report 1524.
14153
14154 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
14155
14156         * typemanager.cs (RegisterMethod): drop checking if we have
14157         registered this from here
14158
14159 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
14160
14161         * class.cs (Method.EmitDestructor): Implement calling our base
14162         destructor. 
14163
14164         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
14165         value of InFinally.
14166
14167         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
14168         this routine and will wrap the call in a try/catch block.  Deal
14169         with the case.
14170
14171 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
14172
14173         * ecore.cs (Expression.MemberLookup): instead of taking a
14174         parameter `same_type' that was used to tell whether we could
14175         access private members we compute our containing type from the
14176         EmitContext.
14177
14178         (FieldExpr): Added partial support for volatile fields.  This does
14179         not work for volatile fields exposed from assemblies, as I can not
14180         figure out how to extract the modreq from it.
14181
14182         Updated all the source files to use this.
14183
14184         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
14185         because it is referenced by MemberLookup very often. 
14186
14187 2002-01-09  Ravi Pratap  <ravi@ximian.com>
14188
14189         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
14190         TypeBuilder.GetCustomAttributes to retrieve what we need.
14191
14192         Get rid of redundant default_member_attr_type as this is the same as
14193         default_member_type which already exists.
14194
14195         * interface.cs, attribute.cs : Update accordingly.
14196
14197 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
14198
14199         * typemanager.cs: Enable IndexerPropertyName again.  It does not
14200         work for TYpeBuilders though.  Ravi, can you please fix this?
14201
14202         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
14203
14204         * expression.cs (Argument.Emit): Handle the case of ref objects
14205         being passed to ref functions;  
14206
14207         (ParameterReference.EmitLoad): Loads the content of the pointer
14208         without dereferencing.
14209
14210 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
14211
14212         * cs-tokenizer.cs: Implemented the pre-processing expressions.
14213
14214 2002-01-08  Ravi Pratap  <ravi@ximian.com>
14215
14216         * class.cs (Indexer.DefineMethod): Incorporate the interface
14217         type in the name of the method if we are doing explicit interface
14218         implementation.
14219
14220         * expression.cs (ConversionExists): Remove as it is completely obsolete.
14221
14222         (BetterConversion): Fix extremely trivial bug where we were referring to
14223         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
14224         again !
14225
14226         * ../errors/bug16.cs : Add although we have fixed it.
14227
14228 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
14229
14230         * expression.cs (BaseIndexer): Begin implementation.
14231
14232         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
14233
14234         * cs-parser.jay (indexer_declarator): Use qualified_identifier
14235         production directly to remove a shift/reduce, and implement
14236         explicit interface implementation.
14237
14238         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
14239         after a floating point suffix.
14240
14241         * expression.cs (DoNumericPromotions): Improved the conversion for
14242         uint/uint.  If we have a constant, we avoid doing a typecast to a
14243         larger type.
14244
14245         * class.cs (Indexer): Implement explicit interface implementation
14246         for indexers.
14247
14248 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
14249
14250         * class.cs: make the default instance constructor public and hidebysig.
14251
14252 2001-01-03  Ravi Pratap  <ravi@ximian.com>
14253
14254         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
14255         so we can call it from elsewhere.
14256
14257         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
14258         we emit it internally if the class has a defined indexer; otherwise the user
14259         emits it by decorating the class definition with the DefaultMemberAttribute.
14260
14261         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
14262         attribute is not used on a type which defines an indexer.
14263
14264         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
14265         character when we skip whitespace.
14266
14267         * ../errors/cs0646.cs : Add.
14268
14269 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
14270
14271         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
14272         again. 
14273
14274         * makefile: Add practical target `mcs3.exe' which builds the third
14275         generation compiler. 
14276
14277         * expression.cs (New): Fix structures constructor calling.
14278
14279         * class.cs (Property, Method, Indexer): Emit Final flag on the
14280         method if we are an interface implementation and we are not
14281         abstract. 
14282
14283         * ecore.cs (PropertyExpr): New public field `IsBase', tells
14284         whether this property is referencing a `base' method.
14285
14286         * expression.cs (Invocation.EmitCall): take an extra argument:
14287         is_base, this is used to determine whether the `call' or
14288         `callvirt' opcode should be used.
14289
14290
14291         * delegate.cs: update EmitCall.
14292
14293         * class.cs (Method.Define): Set NewSlot for the cases where we are
14294         not implementing an interface method.
14295
14296         (Property.Define): ditto.
14297
14298 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
14299
14300         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
14301         'r'.  Allows mcs to parse itself fully.
14302
14303 2002-01-02  Ravi Pratap  <ravi@ximian.com>
14304
14305         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
14306         of the number of initializers that require the InitializeArray method.
14307
14308         (CheckIndices): Store the Expression in all cases - not the plain value. Also
14309         update the above field where necessary.
14310
14311         (MakeByteBlob): Update accordingly.
14312
14313         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
14314         greater than 2.
14315
14316         (EmitDynamicInitializers): Update in accordance with the new optimization.
14317
14318         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
14319         same OpCode applies.
14320
14321         * cs-parser.jay : Fix some glaring errors I introduced.
14322
14323 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
14324
14325         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
14326         so that we can check for name clashes there too.
14327
14328         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
14329         for interface indexers.
14330
14331         * interfaces.cs (Define): Emit the default member attribute.
14332
14333         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
14334         variable was being referred to while setting the value ;-)
14335
14336 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
14337
14338         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
14339         byte-by-byte information when we know the data is zero.
14340
14341         Make the block always a multiple of 4, because
14342         DefineInitializedData has a bug.
14343
14344         * assign.cs: Fix, we should assign from the temporary, not from
14345         the source. 
14346
14347         * expression.cs (MakeByteBlob): Fix my incorrect code.
14348
14349 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
14350
14351         * typemanager.cs (EnumToUnderlying): This function is used to get
14352         the underlying type from an enumeration, because it does not
14353         always work. 
14354
14355         * constant.cs: Use the I4_S form for values between -128 and 127.
14356
14357         * statement.cs (Block.LookupLabel): Looks up a label.
14358         (Block): Drop support for labeled blocks.
14359
14360         (LabeledStatement): New kind of statement that represents a label
14361         only.
14362
14363         (Goto): Finally implement this bad boy.
14364
14365         * cs-parser.jay: Update to reflect new mechanism to implement
14366         labels.
14367
14368 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
14369
14370         * codegen.cs (EmitContext.This): a codegen property that keeps the
14371         a single instance of this instead of creating many different this
14372         instances. 
14373
14374         * delegate.cs (Delegate.DoResolve): Update to use the property;
14375
14376         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
14377
14378         * expression.cs (BaseAccess.DoResolve): Ditto.
14379
14380 2001-12-29  Ravi Pratap  <ravi@ximian.com>
14381
14382         * typemanager.cs (methodimpl_attr_type): Add to hold the type
14383         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
14384
14385         (InitCoreTypes): Update accordingly.
14386
14387         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
14388         so we can quickly store the state.
14389
14390         (ApplyAttributes): Set the correct implementation flags
14391         for InternalCall methods.
14392
14393 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
14394
14395         * expression.cs (EmitCall): if a method is not virtual, then do
14396         not use callvirt on it.
14397
14398         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
14399         user defined stuff) requires the use of stobj, which takes an
14400         address on the stack instead of an array and an index.  So emit
14401         the Ldelema operation for it.
14402
14403         (EmitStoreOpcode): Use stobj for valuetypes.
14404
14405         (UnaryMutator.EmitCode): Use the right 1 value depending on
14406         whether we are dealing with int64/uint64, float or doubles.
14407
14408         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
14409         constructors that I implemented last night.
14410
14411         (Constructor.IsDefault): Fix to work properly for static
14412         constructors.
14413
14414         * cs-parser.jay (CheckDef): report method signature errors.
14415         Update error number 103 to be 132.
14416
14417         * decl.cs: New AdditionResult enumeration value: MethodExists.
14418         Although we do this check for methods later on in the semantic
14419         analysis, catching repeated default constructors is so easy that
14420         we catch these here. 
14421
14422         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
14423         promotions code.
14424
14425         (ParameterReference.EmitAssign, Emit): handle
14426         bools as bytes.
14427
14428         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
14429         (ArrayAccess.EmitStoreOpcode): ditto.
14430
14431         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
14432
14433         * expression.cs (MakeByteBlob): Complete all the missing types
14434         (uint, short, ushort, byte, sbyte)
14435
14436         * class.cs: Only init instance field initializers on instance
14437         constructors. 
14438
14439         Rename `constructors' to instance_constructors. 
14440
14441         (TypeContainer.AddConstructor): Only add constructors to the list
14442         if it is not static.
14443
14444         Make sure that we handle default_static_constructor independently
14445         everywhere where we handle instance_constructors
14446
14447 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
14448
14449         * class.cs: Do not lookup or create a base initializer for a
14450         static constructor.
14451
14452         (ConstructorInitializer.Resolve): use the proper type to lookup
14453         for constructors.
14454
14455         * cs-parser.jay: Report error 1585 (modifiers between type and name).
14456
14457         * enum.cs, interface.cs: Remove CloseType, this is taken care by
14458         in DeclSpace. 
14459
14460         * decl.cs: CloseType is now an virtual method, the default
14461         implementation just closes this type.
14462
14463 2001-12-28  Ravi Pratap  <ravi@ximian.com>
14464
14465         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
14466         to PreserveSig by default. Also emit HideBySig on such methods.
14467
14468         Basically, set the defaults to standard values.
14469
14470         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
14471         argument, if candidate is better, it can't be worse than the best !
14472
14473         (Invocation): Re-write bits to differentiate between methods being
14474         applicable in their expanded form and their normal form - for params
14475         methods of course.
14476
14477         Get rid of use_standard everywhere as only standard conversions are allowed
14478         in overload resolution. 
14479
14480         More spec conformance.
14481
14482 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
14483
14484         * driver.cs: Add --timestamp, to see where the compiler spends
14485         most of its time.
14486
14487         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
14488         `this' in static code.
14489
14490         (SimpleName.DoResolve): Implement in terms of a helper function
14491         that allows static-references to be passed upstream to
14492         MemberAccess.
14493
14494         (Expression.ResolveWithSimpleName): Resolve specially simple
14495         names when called by MemberAccess to implement the special
14496         semantics. 
14497
14498         (Expression.ImplicitReferenceConversion): Handle conversions from
14499         Null to reference types before others, as Null's type is
14500         System.Object. 
14501
14502         * expression.cs (Invocation.EmitCall): Handle the special case of
14503         calling methods declared on a reference type from a ValueType
14504         (Base classes System.Object and System.Enum)
14505
14506         (MemberAccess.Resolve): Only perform lookups on Enumerations if
14507         the left hand side is a TypeExpr, not on every enumeration. 
14508
14509         (Binary.Resolve): If types are reference types, then do a cast to
14510         object on operators != and == of both arguments.
14511
14512         * typemanager.cs (FindMembers): Extract instance and static
14513         members if requested.
14514
14515         * interface.cs (PopulateProperty): Use void_type instead of null
14516         as the return type for the setter method.
14517
14518         (PopulateIndexer): ditto.
14519
14520 2001-12-27  Ravi Pratap  <ravi@ximian.com>
14521
14522         * support.cs (ReflectionParameters): Fix minor bug where we
14523         were examining the wrong parameter for the ParamArray attribute.
14524
14525         Cope with requests for the type of the parameter at position
14526         greater than the params parameter's. We now return the element
14527         type of the params array as that makes more sense.
14528
14529         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
14530         accordingly as we no longer have to extract the element type
14531         ourselves.
14532
14533         (Invocation.OverloadResolve): Update.
14534
14535 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
14536
14537         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
14538         against IEnumerator, test whether the return value is a descendant
14539         of the IEnumerator interface.
14540
14541         * class.cs (Indexer.Define): Use an auxiliary method to implement
14542         the other bits of the method definition.  Begin support for
14543         explicit interface implementation.
14544
14545         (Property.DefineMethod): Use TypeManager.void_type instead of null
14546         for an empty return value.
14547
14548 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
14549
14550         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
14551         dealing with a FieldExpr which is composed of a FieldBuilder, in
14552         the code path we did extract the constant, but we should have
14553         obtained the underlying value to be able to cast it (otherwise we
14554         end up in an infinite loop, this is what Ravi was running into).
14555
14556         (ArrayCreation.UpdateIndices): Arrays might be empty.
14557
14558         (MemberAccess.ResolveMemberAccess): Add support for section
14559         14.5.4.1 that deals with the special case of E.I when E is a type
14560         and something else, that I can be a reference to a static member.
14561
14562         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
14563         handle a particular array type to create byte blobs, it is just
14564         something we dont generate byteblobs for.
14565
14566         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
14567         arguments. 
14568
14569         * location.cs (Push): remove the key from the hashtable that we
14570         are about to add.   This happens for empty files.
14571
14572         * driver.cs: Dispose files after we have parsed them.
14573
14574         (tokenize): new function that only runs the tokenizer on its
14575         input, for speed testing.
14576
14577 2001-12-26  Ravi Pratap  <ravi@ximian.com>
14578
14579         * class.cs (Event.Define): Define the private field only if there
14580         are no accessors defined.
14581
14582         * expression.cs (ResolveMemberAccess): If there is no associated
14583         field with the event, that means we have an event defined with its
14584         own accessors and we should flag error cs0070 since transforming
14585         ourselves into a field is not valid in that case.
14586
14587         * ecore.cs (SimpleName.DoResolve): Same as above.
14588
14589         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
14590         and charset to sane values.
14591
14592 2001-12-25  Ravi Pratap  <ravi@ximian.com>
14593
14594         * assign.cs (DoResolve): Perform check on events only if they 
14595         are being accessed outside the declaring type.
14596
14597         * cs-parser.jay (event_declarations): Update rules to correctly
14598         set the type of the implicit parameter etc.
14599
14600         (add_accessor, remove_accessor): Set current local parameters.
14601
14602         * expression.cs (Binary): For delegate addition and subtraction,
14603         cast the return value from the method into the appropriate delegate
14604         type.
14605
14606 2001-12-24  Ravi Pratap  <ravi@ximian.com>
14607
14608         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
14609         of these as the workaround is unnecessary.
14610
14611         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
14612         delegate data - none of that is needed at all.
14613
14614         Re-write bits to extract the instance expression and the delegate method
14615         correctly.
14616
14617         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
14618         on delegates too.
14619
14620         * attribute.cs (ApplyAttributes): New method to take care of common tasks
14621         of attaching attributes instead of duplicating code everywhere.
14622
14623         * everywhere : Update code to do attribute emission using the above method.
14624
14625 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
14626
14627         * expression.cs (IsParamsMethodApplicable): if there are not
14628         parameters, return immediately.
14629
14630         * ecore.cs: The 0 literal can be implicity converted to an enum
14631         type. 
14632
14633         (SimpleName.DoResolve): First lookup the type, then lookup the
14634         members. 
14635
14636         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
14637         want to get its address.  If the InstanceExpression is not
14638         addressable, store the result in a temporary variable, then get
14639         the address of it.
14640
14641         * codegen.cs: Only display 219 errors on warning level or above. 
14642
14643         * expression.cs (ArrayAccess): Make it implement the
14644         IMemoryLocation interface.
14645
14646         (Binary.DoResolve): handle the operator == (object a, object b)
14647         and operator != (object a, object b) without incurring into a
14648         BoxedCast (because 5 != o should never be performed).
14649
14650         Handle binary enumerator operators.
14651
14652         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
14653         value type, otherwise use Ldelem_ref.
14654
14655         Use precomputed names;
14656
14657         (AddressOf): Implement address of
14658
14659         * cs-parser.jay (labeled_statement): Fix recursive block
14660         addition by reworking the production.
14661
14662         * expression.cs (New.DoEmit): New has a special case:
14663                 
14664                  If we are dealing with a ValueType, we have a few
14665                  situations to deal with:
14666                 
14667                     * The target of New is a ValueType variable, that is
14668                       easy, we just pass this as the variable reference
14669                 
14670                     * The target of New is being passed as an argument,
14671                       to a boxing operation or a function that takes a
14672                       ValueType.
14673                 
14674                       In this case, we need to create a temporary variable
14675                       that is the argument of New.
14676
14677
14678 2001-12-23  Ravi Pratap  <ravi@ximian.com>
14679
14680         * rootcontext.cs (LookupType): Check that current_type is not null before
14681         going about looking at nested types.
14682
14683         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
14684         not implement the IAssignMethod interface any more.
14685
14686         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
14687         where we tranform them into FieldExprs if they are being resolved from within
14688         the declaring type.
14689
14690         * ecore.cs (SimpleName.DoResolve): Do the same here.
14691
14692         * assign.cs (DoResolve, Emit): Clean up code considerably. 
14693
14694         * ../errors/bug10.cs : Add.
14695
14696         * ../errors/cs0070.cs : Add.
14697
14698         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
14699
14700         * assign.cs : Get rid of EventIsLocal everywhere.
14701
14702 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
14703
14704         * ecore.cs (ConvertIntLiteral): finished the implementation.
14705
14706         * statement.cs (SwitchLabel): Convert the value we are using as a
14707         key before looking up the table.
14708
14709 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
14710
14711         * codegen.cs (EmitTopBlock): Require a Location argument now.
14712
14713         * cs-parser.jay (constructor_declarator): We need to setup
14714         current_local_parameters before we parse the
14715         opt_constructor_initializer, to allow the variables to be bound
14716         to the constructor arguments.
14717
14718         * rootcontext.cs (LookupType): First lookup nested classes in our
14719         class and our parents before we go looking outside our class.
14720
14721         * expression.cs (ConstantFold): Extract/debox the values at the
14722         beginnning. 
14723
14724         * rootcontext.cs (EmitCode): Resolve the constants first before we
14725         resolve the types.  This is not really needed, but it helps debugging.
14726
14727         * statement.cs: report location.
14728
14729         * cs-parser.jay: pass location to throw statement.
14730
14731         * driver.cs: Small bug fix.
14732
14733         * report.cs: Updated format to be 4-zero filled digits.
14734
14735 2001-12-22  Ravi Pratap  <ravi@ximian.com>
14736
14737         * expression.cs (CheckIndices): Fix minor bug where the wrong
14738         variable was being referred to ;-)
14739
14740         (DoEmit): Do not call EmitStaticInitializers when the 
14741         underlying type is System.Object.
14742
14743 2001-12-21  Ravi Pratap  <ravi@ximian.com>
14744
14745         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
14746         and do the usual workaround for SRE.
14747
14748         * class.cs (MyEventBuilder.EventType): New member to get at the type
14749         of the event, quickly.
14750
14751         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
14752
14753         * assign.cs (Assign.DoResolve): Handle the case when the target
14754         is an EventExpr and perform the necessary checks.
14755
14756         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
14757         interface.
14758
14759         (SimpleName.MemberStaticCheck): Include check for EventExpr.
14760
14761         (EventExpr): Set the type in the constructor itself since we 
14762         are meant to be born fully resolved.
14763
14764         (EventExpr.Define): Revert code I wrote earlier.
14765                 
14766         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
14767         instance expression is null. The instance expression is a This in that case
14768         or a null, depending on whether it is a static method or not.
14769
14770         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
14771         refers to more than one method.
14772
14773         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
14774         and accordingly flag errors.
14775
14776 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
14777
14778         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
14779
14780 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
14781
14782         * location.cs (ToString): Provide useful rutine.
14783
14784 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
14785
14786         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
14787         objects, return the actual integral boxed.
14788
14789         * statement.cs (SwitchLabel): define an ILLabel for each
14790         SwitchLabel. 
14791
14792         (Switch.CheckSwitch): If the value is a Literal, extract
14793         the underlying literal.
14794
14795         Also in the unused hashtable we had, add the SwitchLabel so we can
14796         quickly look this value up.
14797
14798         * constant.cs: Implement a bunch of new constants.  Rewrite
14799         Literal based on this.  Made changes everywhere to adapt to this.
14800
14801         * expression.cs (Expression.MakeByteBlob): Optimize routine by
14802         dereferencing array only once, and also copes with enumrations.
14803
14804         bytes are two bytes wide, not one.
14805
14806         (Cast): Perform constant conversions.
14807
14808         * ecore.cs (TryImplicitIntConversion): Return literals instead of
14809         wrappers to the literals here.
14810
14811         * expression.cs (DoNumericPromotions): long literals can converted
14812         to ulong implicity (this is taken care of elsewhere, but I was
14813         missing this spot).
14814
14815         * ecore.cs (Expression.Literalize): Make the return type Literal,
14816         to improve type checking.
14817
14818         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
14819
14820 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
14821
14822         * literal.cs: Revert code from ravi that checked the bounds.  The
14823         bounds are sane by the definition of the type itself. 
14824
14825         * typemanager.cs: Fix implementation of ImplementsInterface.  We
14826         need to actually look up in our parent hierarchy for interfaces
14827         implemented. 
14828
14829         * const.cs: Use the underlying type for enumerations
14830
14831         * delegate.cs: Compute the basename for the delegate creation,
14832         that should fix the delegate test case, and restore the correct
14833         Type Lookup semantics in rootcontext
14834
14835         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
14836         referencing a nested type with the Reflection API is using the "+"
14837         sign. 
14838
14839         * cs-parser.jay: Do not require EOF token at the end.
14840
14841 2001-12-20  Ravi Pratap  <ravi@ximian.com>
14842
14843         * rootcontext.cs (LookupType): Concatenate type names with
14844         a '.' instead of a '+' The test suite passes again.
14845
14846         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
14847         field of the enumeration.
14848
14849         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
14850         the case when the member is an EventExpr.
14851
14852         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
14853         static has an associated instance expression.
14854
14855         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
14856
14857         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
14858
14859         * class.cs (Event.Define): Register event and perform appropriate checks
14860         for error #111.
14861
14862         We define the Add and Remove methods even if the use provides none because
14863         in that case, we provide default implementations ourselves.
14864
14865         Define a private field of the type of the event. This is done by the CSC compiler
14866         and we should be doing it too ;-)
14867
14868         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
14869         More methods we use in code we generate.
14870
14871         (multicast_delegate_type, delegate_type): Two separate types since the distinction
14872         is important.
14873
14874         (InitCoreTypes): Update accordingly for the above.
14875
14876         * class.cs (Event.Emit): Generate code for default accessors that we provide
14877
14878         (EmitDefaultMethod): Do the job in the above.
14879
14880         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
14881         appropriate place.
14882
14883 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
14884
14885         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
14886         builders even if we were missing one.
14887
14888         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
14889         pass the Basename as our class name instead of the Name.  The
14890         basename will be correctly composed for us.
14891
14892         * parameter.cs (Paramters): Now takes a Location argument.
14893
14894         * decl.cs (DeclSpace.LookupType): Removed convenience function and
14895         make all the code call directly LookupType in RootContext and take
14896         this chance to pass the Location information everywhere.
14897
14898         * Everywhere: pass Location information.
14899
14900 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
14901
14902         * class.cs (Constructor.Define): Updated way of detecting the
14903         length of the parameters.
14904
14905         (TypeContainer.DefineType): Use basename as the type name for
14906         nested types.
14907
14908         (TypeContainer.Define): Do not recursively define types here, as
14909         definition is taken care in order by the RootContext.
14910
14911         * tree.cs: Keep track of namespaces in a per-file basis.
14912
14913         * parameter.cs (Parameter.ComputeSignature): Update to use
14914         DeclSpace. 
14915
14916         (Parameters.GetSignature): ditto.
14917
14918         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
14919         instead of a TypeContainer.
14920
14921         (Interface.SemanticAnalysis): Use `this' instead of our parent to
14922         resolve names.  Because we need to be resolve in our context, not
14923         our parents.
14924
14925         * driver.cs: Implement response files.
14926
14927         * class.cs (TypeContainer.DefineType): If we are defined, do not
14928         redefine ourselves.
14929
14930         (Event.Emit): Emit the code for add/remove handlers.
14931         (Event.Define): Save the MethodBuilders for add/remove.
14932
14933         * typemanager.cs: Use pair here too.
14934
14935         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
14936         DictionaryEntry requires the first argument to be non-null.  
14937
14938         (enum_declaration): Compute full name for registering the
14939         enumeration.
14940
14941         (delegate_declaration): Instead of using
14942         formal_parameter_list, use opt_formal_parameter_list as the list
14943         can be empty.
14944
14945         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
14946         (EventParsing): New property that controls whether `add' and
14947         `remove' are returned as tokens or identifiers (for events);
14948
14949 2001-12-19  Ravi Pratap  <ravi@ximian.com>
14950
14951         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
14952         use MyEventBuilder only and let it wrap the real builder for us.
14953
14954         (MyEventBuilder): Revamp constructor etc.
14955
14956         Implement all operations that we perform on EventBuilder in precisely the same
14957         way here too.
14958
14959         (FindMembers): Update to use the EventBuilder member.
14960
14961         (Event.Emit): Update accordingly.
14962
14963 2001-12-18  Ravi Pratap  <ravi@ximian.com>
14964
14965         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
14966         by calling the appropriate methods.
14967
14968         (GetCustomAttributes): Make stubs as they cannot possibly do anything
14969         useful.
14970
14971         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
14972
14973 2001-12-17  Ravi Pratap  <ravi@ximian.com>
14974
14975         * delegate.cs (Delegate.Populate): Check that the return type
14976         and various parameters types are indeed accessible.
14977
14978         * class.cs (Constructor.Define): Same here.
14979
14980         (Field.Define): Ditto.
14981
14982         (Event.Define): Ditto.
14983
14984         (Operator.Define): Check that the underlying Method defined itself
14985         correctly - so it's MethodBuilder should not be null.
14986
14987         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
14988         expression happens to be null.
14989
14990         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
14991         members but as of now we don't seem to be able to do anything really useful with it.
14992
14993         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
14994         not the EventBuilder.
14995
14996 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
14997
14998         * cs-tokenizer.cs: Add support for defines.
14999         Add support for #if, #elif, #else, #endif
15000
15001         (eval_var): evaluates a variable.
15002         (eval): stubbed for evaluating functions.
15003
15004         * cs-parser.jay: Pass the defines information
15005
15006         * driver.cs: Add --define command line option.
15007
15008         * decl.cs: Move MemberCore here.
15009
15010         Make it the base class for DeclSpace.  This allows us to catch and
15011         report 108 and 109 for everything now.
15012
15013         * class.cs (TypeContainer.Define): Extract all the members
15014         before populating and emit the warning 108 (new keyword required
15015         to override) instead of having each member implement this.
15016
15017         (MemberCore.Define): New abstract method, we will be using this in
15018         the warning reporting engine in Populate.
15019
15020         (Operator.Define): Adjust to new MemberCore protocol. 
15021
15022         * const.cs (Const): This does not derive from Expression, it is a
15023         temporary object we use to create fields, it is a MemberCore. 
15024
15025         * class.cs (Method.Define): Allow the entry point to be in a
15026         specific class.
15027
15028         * driver.cs: Rewrite the argument handler to clean it up a bit.
15029
15030         * rootcontext.cs: Made it just an auxiliary namespace feature by
15031         making everything static.
15032
15033         * driver.cs: Adapt code to use RootContext type name instead of
15034         instance variable.
15035
15036         * delegate.cs: Remove RootContext argument.
15037
15038         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
15039         argument. 
15040
15041         * class.cs (Event.Define): The lookup can fail.
15042
15043         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
15044
15045         * expression.cs: Resolve the this instance before invoking the code.
15046
15047 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
15048
15049         * cs-parser.jay: Add a production in element_access that allows
15050         the thing to become a "type" reference.  This way we can parse
15051         things like "(string [])" as a type.
15052
15053         Note that this still does not handle the more complex rules of
15054         casts. 
15055
15056
15057         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
15058
15059         * ecore.cs: (CopyNewMethods): new utility function used to
15060         assemble the list of methods from running FindMembers.
15061
15062         (MemberLookup): Rework FindMembers so that 
15063
15064 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
15065
15066         * class.cs (TypeContainer): Remove Delegates who fail to be
15067         defined.
15068
15069         * delegate.cs (Populate): Verify that we dont get null return
15070         values.   TODO: Check for AsAccessible.
15071
15072         * cs-parser.jay: Use basename to emit error 574 (destructor should
15073         have the same name as container class), not the full name.
15074
15075         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
15076         possible representation.  
15077
15078         Also implements integer type suffixes U and L.
15079
15080 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
15081
15082         * expression.cs (ArrayCreation.DoResolve): We need to do the
15083         argument resolution *always*.
15084
15085         * decl.cs: Make this hold the namespace.  Hold the root context as
15086         well.
15087         (LookupType): Move here.
15088
15089         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
15090
15091         * location.cs (Row, Name): Fixed the code, it was always returning
15092         references to the first file.
15093
15094         * interface.cs: Register properties defined through interfaces.
15095
15096         * driver.cs: Add support for globbing on the command line
15097
15098         * class.cs (Field): Make it derive from MemberCore as well.
15099         (Event): ditto.
15100
15101 2001-12-15  Ravi Pratap  <ravi@ximian.com>
15102
15103         * class.cs (Event::Define): Check that the type of the event is a delegate
15104         type else flag error #66.
15105
15106         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
15107         same.
15108
15109         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
15110         values of EntryPoint, CharSet etc etc.
15111
15112         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
15113
15114         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
15115         be null and we should ignore this. I am not sure if this is really clean. Apparently,
15116         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
15117         which needs this to do its work.
15118
15119         * ../errors/cs0066.cs : Add.
15120
15121 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
15122
15123         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
15124         helper functions.
15125
15126         * class.cs: (MethodSignature.MethodSignature): Removed hack that
15127         clears out the parameters field.
15128         (MemberSignatureCompare): Cleanup
15129
15130         (MemberCore): New base class used to share code between MethodCore
15131         and Property.
15132
15133         (RegisterRequiredImplementations) BindingFlags.Public requires
15134         either BindingFlags.Instace or Static.  Use instance here.
15135
15136         (Property): Refactored code to cope better with the full spec.
15137
15138         * parameter.cs (GetParameterInfo): Return an empty array instead
15139         of null on error.
15140
15141         * class.cs (Property): Abstract or extern properties have no bodies.
15142
15143         * parameter.cs (GetParameterInfo): return a zero-sized array.
15144
15145         * class.cs (TypeContainer.MethodModifiersValid): Move all the
15146         method modifier validation to the typecontainer so we can reuse
15147         this on properties.
15148
15149         (MethodCore.ParameterTypes): return an empty sized array of types.
15150
15151         (Property.Define): Test property modifier validity.
15152
15153         Add tests for sealed/override too.
15154
15155         (Method.Emit): abstract or extern methods have no bodies.
15156
15157 2001-12-14  Ravi Pratap  <ravi@ximian.com>
15158
15159         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
15160         thing.
15161
15162         (Method::Define, ::Emit): Modify accordingly.
15163
15164         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
15165
15166         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
15167
15168         * makefile: Pass in /unsafe.
15169
15170 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
15171
15172         * class.cs (MakeKey): Kill routine.
15173
15174         * class.cs (TypeContainer.Define): Correctly define explicit
15175         method implementations (they require the full interface name plus
15176         the method name).
15177
15178         * typemanager.cs: Deply the PtrHashtable here and stop using the
15179         lame keys.  Things work so much better.
15180
15181         This of course broke everyone who depended on `RegisterMethod' to
15182         do the `test for existance' test.  This has to be done elsewhere.
15183
15184         * support.cs (PtrHashtable): A hashtable that avoid comparing with
15185         the object stupid Equals method (because, that like fails all over
15186         the place).  We still do not use it.
15187
15188         * class.cs (TypeContainer.SetRequiredInterface,
15189         TypeContainer.RequireMethods): Killed these two routines and moved
15190         all the functionality to RegisterRequiredImplementations.
15191
15192         (TypeContainer.RegisterRequiredImplementations): This routine now
15193         registers all the implementations required in an array for the
15194         interfaces and abstract methods.  We use an array of structures
15195         which can be computed ahead of time to reduce memory usage and we
15196         also assume that lookups are cheap as most classes will not
15197         implement too many interfaces.
15198
15199         We also avoid creating too many MethodSignatures.
15200
15201         (TypeContainer.IsInterfaceMethod): Update and optionally does not
15202         clear the "pending" bit if we find that there are problems with
15203         the declaration.
15204
15205         (TypeContainer.VerifyPendingMethods): Update to report errors of
15206         methods that look like implementations but are not.
15207
15208         (TypeContainer.Define): Add support for explicit interface method
15209         implementation. 
15210
15211 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
15212
15213         * typemanager.cs: Keep track of the parameters here instead of
15214         being a feature of the TypeContainer.
15215
15216         * class.cs: Drop the registration of parameters here, as
15217         InterfaceMethods are also interface declarations.
15218
15219         * delegate.cs: Register methods with the TypeManager not only with
15220         the TypeContainer.  This code was buggy.
15221
15222         * interface.cs: Full registation here.
15223
15224 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
15225
15226         * expression.cs: Remove reducer for binary expressions, it can not
15227         be done this way.
15228
15229         * const.cs: Put here the code that used to go into constant.cs
15230
15231         * constant.cs: Put here the code for constants, this is a new base
15232         class for Literals.
15233
15234         * literal.cs: Make Literal derive from Constant.
15235
15236 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
15237
15238         * statement.cs (Return.Emit): Report error 157 if the user
15239         attempts to return from a finally block.
15240
15241         (Return.Emit): Instead of emitting a return, jump to the end of
15242         the function.
15243
15244         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
15245         LocalBuilder to store the result of the function.  ReturnLabel is
15246         the target where we jump.
15247
15248
15249 2001-12-09  Radek Doulik  <rodo@ximian.com>
15250
15251         * cs-parser.jay: remember alias in current namespace
15252
15253         * ecore.cs (SimpleName::DoResolve): use aliases for types or
15254         namespaces
15255
15256         * class.cs (LookupAlias): lookup alias in my_namespace
15257
15258         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
15259         aliases hashtable
15260         (LookupAlias): lookup alias in this and if needed in parent
15261         namespaces
15262
15263 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
15264
15265         * support.cs: 
15266
15267         * rootcontext.cs: (ModuleBuilder) Made static, first step into
15268         making things static.  I need this to avoid passing the
15269         TypeContainer when calling ParameterType.
15270
15271         * support.cs (InternalParameters.ParameterType): Remove ugly hack
15272         that did string manipulation to compute the type and then call
15273         GetType.  Use Parameter.ParameterType instead.
15274
15275         * cs-tokenizer.cs: Consume the suffix for floating values.
15276
15277         * expression.cs (ParameterReference): figure out whether this is a
15278         reference parameter or not.  Kill an extra variable by computing
15279         the arg_idx during emission.
15280
15281         * parameter.cs (Parameters.GetParameterInfo): New overloaded
15282         function that returns whether a parameter is an out/ref value or not.
15283
15284         (Parameter.ParameterType): The type of the parameter (base,
15285         without ref/out applied).
15286
15287         (Parameter.Resolve): Perform resolution here.
15288         (Parameter.ExternalType): The full type (with ref/out applied).
15289
15290         * statement.cs (Using.Emit, Using.EmitExpression): Implement
15291         support for expressions on the using statement.
15292
15293 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
15294
15295         * statement.cs (Using.EmitLocalVariableDecls): Split the
15296         localvariable handling of the using statement.
15297
15298         (Block.EmitMeta): Keep track of variable count across blocks.  We
15299         were reusing slots on separate branches of blocks.
15300
15301         (Try.Emit): Emit the general code block, we were not emitting it. 
15302
15303         Check the type of the declaration to be an IDisposable or
15304         something that can be implicity converted to it. 
15305
15306         Emit conversions if required.
15307
15308         * ecore.cs (EmptyExpression): New utility class.
15309         (Expression.ImplicitConversionExists): New utility function.
15310
15311 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
15312
15313         * statement.cs (Using): Implement.
15314
15315         * expression.cs (LocalVariableReference): Support read only variables.
15316
15317         * statement.cs: Remove the explicit emit for the Leave opcode.
15318         (VariableInfo): Add a readonly field.
15319
15320 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
15321
15322         * ecore.cs (ConvCast): new class used to encapsulate the various
15323         explicit integer conversions that works in both checked and
15324         unchecked contexts.
15325
15326         (Expression.ConvertNumericExplicit): Use new ConvCast class to
15327         properly generate the overflow opcodes.
15328
15329 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
15330
15331         * statement.cs: The correct type for the EmptyExpression is the
15332         element_type, not the variable type.  Ravi pointed this out.
15333
15334 2001-12-04  Ravi Pratap  <ravi@ximian.com>
15335
15336         * class.cs (Method::Define): Handle PInvoke methods specially
15337         by using DefinePInvokeMethod instead of the usual one.
15338
15339         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
15340         above to do the task of extracting information and defining the method.
15341
15342 2001-12-04  Ravi Pratap  <ravi@ximian.com>
15343
15344         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
15345         of the condition for string type.
15346
15347         (Emit): Move that here. 
15348
15349         (ArrayCreation::CheckIndices): Keep string literals in their expression
15350         form.
15351
15352         (EmitDynamicInitializers): Handle strings appropriately.
15353
15354 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
15355
15356         * codegen.cs (EmitContext): Replace multiple variables with a
15357         single pointer to the current Switch statement.
15358
15359         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
15360         EmitContext.
15361
15362 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
15363
15364         * statement.cs 
15365
15366         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
15367         default'.
15368
15369         (Foreach.Emit): Foreach on arrays was not setting
15370         up the loop variables (for break/continue).
15371
15372         (GotoCase): Semi-implented.
15373
15374 2001-12-03  Ravi Pratap  <ravi@ximian.com>
15375
15376         * attribute.cs (CheckAttribute): Handle system attributes by using
15377         Attribute.GetAttributes to examine information we need.
15378
15379         (GetValidPlaces): Same here.
15380
15381         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
15382
15383         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
15384
15385         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
15386
15387         (Method::Define): Set appropriate flags if we have a DllImport attribute.
15388
15389         (Method::Emit): Handle the case when we are a PInvoke method.
15390
15391 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
15392
15393         * expression.cs: Use ResolveWithSimpleName on compound names.
15394
15395 2001-12-02  Ravi Pratap  <ravi@ximian.com>
15396
15397         * constant.cs (EmitConstant): Make sure we resolve the associated expression
15398         before trying to reduce it.
15399
15400         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
15401
15402         * constant.cs (LookupConstantValue): Implement.
15403
15404         (EmitConstant): Use the above in emitting the constant.
15405
15406         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
15407         that are user-defined by doing a LookupConstantValue on them.
15408
15409         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
15410         too, like above.
15411
15412 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
15413
15414         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
15415
15416         (BaseAccess.DoResolve): Implement.
15417
15418         (MemberAccess.DoResolve): Split this routine into a
15419         ResolveMemberAccess routine that can be used independently
15420
15421 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
15422
15423         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
15424         As that share bits of the implementation.  Is returns a boolean,
15425         while As returns the Type that is being probed.
15426
15427 2001-12-01  Ravi Pratap  <ravi@ximian.com>
15428
15429         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
15430         instead of a Literal - much easier.
15431
15432         (EnumInTransit): Remove - utterly useless :-)
15433
15434         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
15435
15436         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
15437
15438         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
15439         chain when we have no associated expression.
15440
15441 2001-11-30  Ravi Pratap  <ravi@ximian.com>
15442
15443         * constant.cs (Define): Use Location while reporting the errror.
15444
15445         Also emit a warning when 'new' is used and there is no inherited
15446         member to hide.
15447
15448         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
15449         populated.
15450
15451         (LookupEnumValue): Implement to lookup an enum member's value and define it
15452         if necessary.
15453
15454         (Populate): Re-write accordingly to use the above routine.
15455
15456 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
15457
15458         * expression.cs (This): Fix prototype for DoResolveLValue to
15459         override the base class DoResolveLValue.
15460
15461         * cs-parser.cs: Report errors cs574 and cs575 (destructor
15462         declarations) 
15463
15464         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
15465         (we need to load the address of the field here).  This fixes
15466         test-22. 
15467
15468         (FieldExpr.DoResolveLValue): Call the DoResolve
15469         function to initialize the Instance expression.
15470
15471         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
15472         correctly the GetEnumerator operation on a value type.
15473
15474         * cs-parser.jay: Add more simple parsing error catches.
15475
15476         * statement.cs (Switch): Add support for string switches.
15477         Handle null specially.
15478
15479         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
15480
15481 2001-11-28  Ravi Pratap  <ravi@ximian.com>
15482
15483         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
15484
15485         (declare_local_constant): New helper function.
15486
15487         * statement.cs (AddConstant): Keep a separate record of constants
15488
15489         (IsConstant): Implement to determine if a variable is a constant.
15490
15491         (GetConstantExpression): Implement.
15492
15493         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
15494
15495         * statement.cs (IsVariableDefined): Re-write.
15496
15497 2001-11-27  Ravi Pratap  <ravi@ximian.com>
15498
15499         * class.cs (TypeContainer::FindMembers): Look for constants
15500         in the case when we are looking for MemberTypes.Field
15501
15502         * expression.cs (MemberAccess::DoResolve): Check that in the
15503         case we are a FieldExpr and a Literal, we are not being accessed
15504         by an instance reference.
15505
15506         * cs-parser.jay (local_constant_declaration): Implement.
15507
15508         (declaration_statement): Implement for constant declarations.
15509
15510 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
15511
15512         * statement.cs (Switch): Catch double defaults.
15513
15514         (Switch): More work on the switch() statement
15515         implementation.  It works for integral values now, need to finish
15516         string support.
15517
15518
15519 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
15520
15521         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
15522         integer literals into other integer literals.  To be used by
15523         switch. 
15524
15525 2001-11-24  Ravi Pratap  <ravi@ximian.com>
15526
15527         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
15528         some memory.
15529
15530         (EmitDynamicInitializers): Cope with the above since we extract data
15531         directly from ArrayData now.
15532
15533         (ExpectInitializers): Keep track of whether initializers are mandatory
15534         or not.
15535
15536         (Bounds): Make it a hashtable to prevent the same dimension being 
15537         recorded for every element in that dimension.
15538
15539         (EmitDynamicInitializers): Fix bug which prevented the Set array method
15540         from being found.
15541
15542         Also fix bug which was causing the indices to be emitted in the reverse
15543         order.
15544
15545 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
15546
15547         * expression.cs (ArrayCreation): Implement the bits that Ravi left
15548         unfinished.  They do not work, because the underlying code is
15549         sloppy.
15550
15551 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
15552
15553         * cs-parser.jay: Remove bogus fixme.
15554
15555         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
15556         on Switch statement.
15557
15558 2001-11-23  Ravi Pratap  <ravi@ximian.com>
15559
15560         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
15561         the same. 
15562
15563         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
15564         parameter. Apparently, any expression is allowed. 
15565
15566         (ValidateInitializers): Update accordingly.
15567
15568         (CheckIndices): Fix some tricky bugs thanks to recursion.
15569
15570         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
15571         I was being completely brain-dead.
15572
15573         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
15574         and re-write acordingly.
15575
15576         (DelegateInvocation): Re-write accordingly.
15577
15578         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
15579
15580         (MakeByteBlob): Handle types more correctly.
15581
15582         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
15583         initialization from expressions but it is incomplete because I am a complete
15584         Dodo :-|
15585
15586 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
15587
15588         * statement.cs (If.Emit): Fix a bug that generated incorrect code
15589         on If.  Basically, we have to return `true' (ie, we do return to
15590         our caller) only if both branches of the if return.
15591
15592         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
15593         short-circuit operators, handle them as short circuit operators. 
15594
15595         (Cast.DoResolve): Resolve type.
15596         (Cast.Cast): Take an expression as the target type.
15597
15598         * cs-parser.jay (cast_expression): Remove old hack that only
15599         allowed a limited set of types to be handled.  Now we take a
15600         unary_expression and we resolve to a type during semantic
15601         analysis.
15602
15603         Use the grammar productions from Rhys to handle casts (this is
15604         not complete like Rhys syntax yet, we fail to handle that corner
15605         case that C# has regarding (-x), but we will get there.
15606
15607 2001-11-22  Ravi Pratap  <ravi@ximian.com>
15608
15609         * class.cs (EmitFieldInitializer): Take care of the case when we have a
15610         field which is an array type.
15611
15612         * cs-parser.jay (declare_local_variables): Support array initialization too.
15613
15614         * typemanager.cs (MakeKey): Implement.
15615
15616         (everywhere): Use the above appropriately.
15617
15618         * cs-parser.jay (for_statement): Update for array initialization while
15619         declaring variables.
15620
15621         * ecore.cs : The error message was correct, it's the variable's names that
15622         were misleading ;-) Make the code more readable.
15623
15624         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
15625         the correct type etc.
15626
15627         (ConvertExplicit): Handle Enum types by examining the underlying type.
15628
15629 2001-11-21  Ravi Pratap  <ravi@ximian.com>
15630
15631         * parameter.cs (GetCallingConvention): Always return
15632         CallingConventions.Standard for now.
15633
15634 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
15635
15636         * expression.cs (Binary.ResolveOperator): Update the values of `l'
15637         and `r' after calling DoNumericPromotions.
15638
15639         * ecore.cs: Fix error message (the types were in the wrong order).
15640
15641         * statement.cs (Foreach.ProbeCollectionType): Need to pass
15642         BindingFlags.Instance as well 
15643
15644         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
15645         implicit int literal conversion in an empty cast so that we
15646         propagate the right type upstream.
15647
15648         (UnboxCast): new class used to unbox value types.
15649         (Expression.ConvertExplicit): Add explicit type conversions done
15650         by unboxing.
15651
15652         (Expression.ImplicitNumericConversion): Oops, forgot to test for
15653         the target type before applying the implicit LongLiterals to ULong
15654         literal cast.
15655
15656 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
15657
15658         * cs-parser.jay (for_statement): Reworked the way For works: now
15659         we declare manually any variables that are introduced in
15660         for_initializer to solve the problem of having out-of-band code
15661         emition (that is what got for broken).
15662
15663         (declaration_statement): Perform the actual variable declaration
15664         that used to be done in local_variable_declaration here.
15665
15666         (local_variable_declaration): Do not declare anything, just pass
15667         the information on a DictionaryEntry
15668
15669 2001-11-20  Ravi Pratap  <ravi@ximian.com>
15670
15671         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
15672         re-write of the logic to now make it recursive.
15673
15674         (UpdateIndices): Re-write accordingly.
15675
15676         Store element data in a separate ArrayData list in the above methods.
15677
15678         (MakeByteBlob): Implement to dump the array data into a byte array.
15679
15680 2001-11-19  Ravi Pratap  <ravi@ximian.com>
15681
15682         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
15683         into CheckIndices.
15684
15685         * constant.cs (Define): Implement.
15686
15687         (EmitConstant): Re-write fully.
15688
15689         Pass in location info.
15690
15691         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
15692         respectively.
15693
15694         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
15695         DictionaryEntry since we need location info too.
15696
15697         (constant_declaration): Update accordingly.
15698
15699         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
15700         code into another method : UpdateIndices.
15701
15702 2001-11-18  Ravi Pratap  <ravi@ximian.com>
15703
15704         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
15705         some type checking etc.
15706
15707 2001-11-17  Ravi Pratap  <ravi@ximian.com>
15708
15709         * expression.cs (ArrayCreation::ValidateInitializers): Implement
15710         bits to provide dimension info if the user skips doing that.
15711
15712         Update second constructor to store the rank correctly.
15713
15714 2001-11-16  Ravi Pratap  <ravi@ximian.com>
15715
15716         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
15717         and try to implement.
15718
15719         * ../errors/cs0150.cs : Add.
15720
15721         * ../errors/cs0178.cs : Add.
15722
15723 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
15724
15725         * statement.cs: Implement foreach on multi-dimensional arrays. 
15726
15727         * parameter.cs (Parameters.GetParameterByName): Also lookup the
15728         name of the params argument.
15729
15730         * expression.cs: Use EmitStoreOpcode to get the right opcode while
15731         initializing the array.
15732
15733         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
15734         we can use this elsewhere.
15735
15736         * statement.cs: Finish implementation of foreach for single
15737         dimension arrays.
15738
15739         * cs-parser.jay: Use an out-of-band stack to pass information
15740         around, I wonder why I need this.
15741
15742         foreach_block: Make the new foreach_block the current_block.
15743
15744         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
15745         function used to return a static Parameters structure.  Used for
15746         empty parameters, as those are created very frequently.
15747
15748         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
15749
15750 2001-11-15  Ravi Pratap  <ravi@ximian.com>
15751
15752         * interface.cs : Default modifier is private, not public. The
15753         make verify test passes again.
15754
15755 2001-11-15  Ravi Pratap  <ravi@ximian.com>
15756
15757         * support.cs (ReflectionParameters): Fix logic to determine
15758         whether the last parameter is a params one. Test 9 passes again.
15759
15760         * delegate.cs (Populate): Register the builders we define with
15761         RegisterParameterForBuilder. Test 19 passes again.
15762
15763         * cs-parser.jay (property_declaration): Reference $6 instead
15764         of $$ to get at the location.
15765
15766         (indexer_declaration): Similar stuff.
15767
15768         (attribute): Ditto.
15769
15770         * class.cs (Property): Register parameters for the Get and Set methods
15771         if they exist. Test 23 passes again.
15772
15773         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
15774         call to EmitArguments as we are sure there aren't any params arguments. 
15775         Test 32 passes again.
15776
15777         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
15778         IndexOutOfRangeException. 
15779
15780         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
15781         Test 33 now passes again.
15782
15783 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
15784
15785         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
15786         broke a bunch of things.  Will have to come up with a better way
15787         of tracking locations.
15788
15789         * statement.cs: Implemented foreach for single dimension arrays.
15790
15791 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
15792
15793         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
15794         an error.  This removes the lookup from the critical path.
15795
15796         * cs-parser.jay: Removed use of temporary_loc, which is completely
15797         broken. 
15798
15799 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
15800
15801         * support.cs (ReflectionParameters.ParameterModifier): Report
15802         whether the argument is a PARAMS argument or not.
15803
15804         * class.cs: Set the attribute `ParamArrayAttribute' on the
15805         parameter argument.
15806
15807         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
15808         and cons_param_array_attribute (ConstructorInfo for
15809         ParamArrayAttribute)., 
15810
15811         * codegen.cs: Emit the return using the `Return' statement, that
15812         way we can report the error correctly for missing return values. 
15813
15814         * class.cs (Method.Emit): Clean up.
15815
15816         * expression.cs (Argument.Resolve): Take another argument: the
15817         location where this argument is used.  Notice that this is not
15818         part of the "Argument" class as to reduce the size of the
15819         structure (we know the approximate location anyways).
15820
15821         Test if the argument is a variable-reference, if not, then
15822         complain with a 206.
15823
15824         (Argument.Emit): Emit addresses of variables.
15825
15826         (Argument.FullDesc): Simplify.
15827
15828         (Invocation.DoResolve): Update for Argument.Resolve.
15829
15830         (ElementAccess.DoResolve): ditto.
15831
15832         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
15833         method should be virtual, as this method is always virtual.
15834
15835         (NewDelegate.DoResolve): Update for Argument.Resolve.
15836
15837         * class.cs (ConstructorInitializer.DoResolve): ditto.
15838
15839         * attribute.cs (Attribute.Resolve): ditto.
15840
15841 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
15842
15843         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
15844
15845         * expression.cs (ParameterReference): Drop IStackStorage and implement
15846         IAssignMethod instead. 
15847
15848         (LocalVariableReference): ditto.
15849
15850         * ecore.cs (FieldExpr): Drop IStackStorage and implement
15851         IAssignMethod instead. 
15852
15853 2001-11-13  Miguel de Icaza <miguel@ximian.com>
15854
15855         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
15856         enumerations that are used in heavily used structures derive from
15857         byte in a laughable and pathetic attempt to reduce memory usage.
15858         This is the kind of pre-optimzations that you should not do at
15859         home without adult supervision.
15860
15861         * expression.cs (UnaryMutator): New class, used to handle ++ and
15862         -- separatedly from the other unary operators.  Cleans up the
15863         code, and kills the ExpressionStatement dependency in Unary.
15864
15865         (Unary): Removed `method' and `Arguments' from this class, making
15866         it smaller, and moving it all to SimpleCall, so I can reuse this
15867         code in other locations and avoid creating a lot of transient data
15868         strucutres when not required.
15869
15870         * cs-parser.jay: Adjust for new changes.
15871
15872 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
15873
15874         * enum.cs (Enum.Populate): If there is a failure during
15875         definition, return
15876
15877         * cs-parser.jay (opt_enum_base): we used to catch type errors
15878         here, but this is really incorrect.  The type error should be
15879         catched during semantic analysis.
15880
15881 2001-12-11  Ravi Pratap  <ravi@ximian.com>
15882
15883         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
15884         current_local_parameters as expected since I, in my stupidity, had forgotten
15885         to do this :-)
15886
15887         * attribute.cs (GetValidPlaces): Fix stupid bug.
15888
15889         * class.cs (Method::Emit): Perform check on applicability of attributes.
15890
15891         (Constructor::Emit): Ditto.
15892
15893         (Field::Emit): Ditto.
15894
15895         (Field.Location): Store location information.
15896
15897         (Property, Event, Indexer, Operator): Ditto.
15898
15899         * cs-parser.jay (field_declaration): Pass in location for each field.
15900
15901         * ../errors/cs0592.cs : Add.
15902
15903 2001-11-12  Ravi Pratap  <ravi@ximian.com>
15904
15905         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
15906
15907         (InitCoreTypes): Update accordingly.
15908
15909         (RegisterAttrType, LookupAttr): Implement.
15910
15911         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
15912         info about the same.
15913
15914         (Resolve): Update to populate the above as necessary.
15915
15916         (Error592): Helper.
15917
15918         (GetValidPlaces): Helper to the above.
15919
15920         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
15921
15922         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
15923
15924 2001-11-12  Ravi Pratap  <ravi@ximian.com>
15925
15926         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
15927
15928         * ../errors/cs0617.cs : Add.
15929
15930 2001-11-11  Ravi Pratap  <ravi@ximian.com>
15931
15932         * enum.cs (Emit): Rename to Populate to be more consistent with what
15933         we expect it to do and when exactly it is called.
15934
15935         * class.cs, rootcontext.cs : Update accordingly.
15936
15937         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
15938         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
15939
15940         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
15941
15942         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
15943         of a fieldinfo using the above, when dealing with a FieldBuilder.
15944
15945 2001-11-10  Ravi Pratap  <ravi@ximian.com>
15946
15947         * ../errors/cs0031.cs : Add.
15948
15949         * ../errors/cs1008.cs : Add.
15950
15951         * ../errrors/cs0543.cs : Add.
15952
15953         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
15954         enum type.
15955
15956         (FindMembers): Implement.
15957
15958         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
15959         enums and delegates too.
15960
15961         (enum_types): Rename to builder_to_enum.
15962
15963         (delegate_types): Rename to builder_to_delegate.
15964
15965         * delegate.cs (FindMembers): Implement.
15966
15967 2001-11-09  Ravi Pratap  <ravi@ximian.com>
15968
15969         * typemanager.cs (IsEnumType): Implement.
15970
15971         * enum.cs (Emit): Re-write parts to account for the underlying type
15972         better and perform checking etc.
15973
15974         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
15975         of the underlying type.
15976
15977         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
15978         value
15979
15980         * enum.cs (error31): Helper to report error #31.
15981
15982         * cs-parser.jay (enum_declaration): Store location of each member too.
15983
15984         * enum.cs (member_to_location): New hashtable. 
15985
15986         (AddEnumMember): Update location hashtable.
15987
15988         (Emit): Use the location of each member while reporting errors.
15989
15990 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
15991
15992         * cs-parser.jay: A for_initializer if is a
15993         local_variable_declaration really ammount to have an implicit
15994         block with the variable declaration and no initializer for for.
15995
15996         * statement.cs (For.Emit): Cope with null initializers.
15997
15998         This fixes the infinite loop on for initializers.
15999
16000 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
16001
16002         * enum.cs: More cleanup.
16003
16004         * ecore.cs: Remove dead code.
16005
16006         * class.cs (Property.Emit): More simplification.
16007         (Event.Emit): ditto.
16008
16009         Reworked to have less levels of indentation.
16010
16011 2001-11-08  Ravi Pratap  <ravi@ximian.com>
16012
16013         * class.cs (Property): Emit attributes.
16014
16015         (Field): Ditto.
16016
16017         (Event): Ditto.
16018
16019         (Indexer): Ditto.
16020
16021         (Operator): Ditto.
16022
16023         * enum.cs (Emit): Ditto.
16024
16025         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
16026         Enums too.
16027
16028         * class.cs (Field, Event, etc.): Move attribute generation into the
16029         Emit method everywhere.
16030
16031         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
16032         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
16033         as we had no way of defining nested enums !
16034
16035         * rootcontext.cs : Adjust code accordingly.
16036
16037         * typemanager.cs (AddEnumType): To keep track of enum types separately.
16038
16039 2001-11-07  Ravi Pratap  <ravi@ximian.com>
16040
16041         * expression.cs (EvalConstantExpression): Move into ecore.cs
16042
16043         * enum.cs (Enum): Rename some members and make them public and readonly
16044         according to our convention.
16045
16046         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
16047         nothing else.
16048
16049         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
16050
16051         (Enum::Emit): Write a simple version for now which doesn't try to compute
16052         expressions. I shall modify this to be more robust in just a while.
16053
16054         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
16055
16056         (TypeContainer::CloseType): Create the Enum types too.
16057
16058         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
16059
16060         * expression.cs (EvalConstantExpression): Get rid of completely.
16061
16062         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
16063         user-defined values and other cases.
16064
16065         (IsValidEnumLiteral): Helper function.
16066
16067         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
16068         out there in the case we had a literal FieldExpr.
16069
16070         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
16071
16072         (Literalize): Revamp a bit to take two arguments.
16073
16074         (EnumLiteral): New class which derives from Literal to wrap enum literals.
16075
16076 2001-11-06  Ravi Pratap  <ravi@ximian.com>
16077
16078         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
16079
16080         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
16081
16082         (Resolve): Use the above to ensure we have proper initializers.
16083
16084 2001-11-05  Ravi Pratap  <ravi@ximian.com>
16085
16086         * expression.cs (Expression::EvalConstantExpression): New method to 
16087         evaluate constant expressions.
16088
16089         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
16090
16091 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
16092
16093         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
16094         in an array.
16095
16096         (Binary.ResolveOperator): Handle operator != (object a, object b)
16097         and operator == (object a, object b);
16098
16099         (Binary.DoNumericPromotions): Indicate whether the numeric
16100         promotion was possible.
16101
16102         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
16103         Implement.  
16104
16105         Made the ArrayAccess implement interface IAssignMethod instead of
16106         IStackStore as the order in which arguments are passed reflects
16107         this.
16108
16109         * assign.cs: Instead of using expr.ExprClass to select the way of
16110         assinging, probe for the IStackStore/IAssignMethod interfaces.
16111
16112         * typemanager.cs: Load InitializeArray definition.
16113
16114         * rootcontext.cs (RootContext.MakeStaticData): Used to define
16115         static data that can be used to initialize arrays. 
16116
16117 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
16118
16119         * expression.cs: Handle operator== and operator!= for booleans.
16120
16121         (Conditioal.Reduce): Implement reducer for the ?: operator.
16122
16123         (Conditional.Resolve): Implement dead code elimination.
16124
16125         (Binary.Resolve): Catch string literals and return a new
16126         concatenated string.
16127
16128         (Unary.Reduce): Implement reduction of unary expressions.
16129
16130         * ecore.cs: Split out the expression core handling here.
16131
16132         (Expression.Reduce): New method used to perform constant folding
16133         and CSE.  This is needed to support constant-expressions. 
16134
16135         * statement.cs (Statement.EmitBoolExpression): Pass true and false
16136         targets, and optimize for !x.
16137
16138 2001-11-04  Ravi Pratap  <ravi@ximian.com>
16139
16140         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
16141         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
16142         set custom atttributes.
16143
16144         * literal.cs (Literal::GetValue): New abstract method to return the actual
16145         value of the literal, cast as an object.
16146
16147         (*Literal): Implement GetValue method.
16148
16149         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
16150         expressions to the arraylist but objects of type Argument.
16151
16152         * class.cs (TypeContainer::Emit): Emit our attributes too.
16153
16154         (Method::Emit, Constructor::Emit): Ditto.
16155
16156         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
16157         to be ignoring earlier.
16158
16159 2001-11-03  Ravi Pratap  <ravi@ximian.com>
16160
16161         * attribute.cs (AttributeSection::Define): Implement to do the business
16162         of constructing a CustomAttributeBuilder.
16163
16164         (Attribute): New trivial class. Increases readability of code.  
16165
16166         * cs-parser.jay : Update accordingly.
16167
16168         (positional_argument_list, named_argument_list, named_argument): New rules
16169
16170         (attribute_arguments): Use the above so that we are more correct.
16171
16172 2001-11-02  Ravi Pratap  <ravi@ximian.com>
16173
16174         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
16175         to perform all checks for a method with a params parameter.
16176
16177         (Invocation::OverloadResolve): Update to use the above method and therefore
16178         cope correctly with params method invocations.
16179
16180         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
16181         params too.
16182
16183         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
16184         constructors in our parent too because we can't afford to miss out on 
16185         protected ones ;-)
16186
16187         * attribute.cs (AttributeSection): New name for the class Attribute
16188
16189         Other trivial changes to improve readability.
16190
16191         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
16192         use the new class names.
16193
16194 2001-11-01  Ravi Pratap  <ravi@ximian.com>
16195
16196         * class.cs (Method::Define): Complete definition for params types too
16197
16198         (Indexer::Define): Ditto.
16199
16200         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
16201         Cope everywhere with a request for info about the array parameter.
16202
16203 2001-11-01  Ravi Pratap  <ravi@ximian.com>
16204
16205         * tree.cs (RecordNamespace): Fix up to check for the correct key.
16206
16207         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
16208         local_variable_type to extract the string corresponding to the type.
16209
16210         (local_variable_type): Fixup the action to use the new helper method.
16211
16212         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
16213         go.
16214
16215         * expression.cs : Clean out code which uses the above.
16216
16217 2001-10-31  Ravi Pratap  <ravi@ximian.com>
16218
16219         * typemanager.cs (RegisterMethod): Check if we already have an existing key
16220         and bale out if necessary by returning a false.
16221
16222         (RegisterProperty): Ditto.
16223
16224         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
16225         and print out appropriate error messages.
16226
16227         * interface.cs (everywhere): Ditto.
16228
16229         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
16230         location to constructor.
16231
16232         * class.cs (Property, Event, Indexer): Update accordingly.
16233
16234         * ../errors/cs111.cs : Added.
16235
16236         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
16237         of a method, as laid down by the spec.
16238
16239         (Invocation::OverloadResolve): Use the above method.
16240
16241 2001-10-31  Ravi Pratap  <ravi@ximian.com>
16242
16243         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
16244         now take a TypeContainer and a Parameters object.
16245
16246         (ParameterData): Modify return type of ParameterModifier method to be 
16247         Parameter.Modifier and not a string.
16248
16249         (ReflectionParameters, InternalParameters): Update accordingly.
16250
16251         * expression.cs (Argument::GetParameterModifier): Same here.
16252
16253         * support.cs (InternalParameters::ParameterType): Find a better way of determining
16254         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
16255         symbol in it at all so maybe this is only for now.
16256
16257 2001-10-30  Ravi Pratap  <ravi@ximian.com>
16258
16259         * support.cs (InternalParameters): Constructor now takes an extra argument 
16260         which is the actual Parameters class.
16261
16262         (ParameterDesc): Update to provide info on ref/out modifiers.
16263
16264         * class.cs (everywhere): Update call to InternalParameters to pass in
16265         the second argument too.
16266
16267         * support.cs (ParameterData): Add ParameterModifier, which is a method 
16268         to return the modifier info [ref/out etc]
16269
16270         (InternalParameters, ReflectionParameters): Implement the above.
16271
16272         * expression.cs (Argument::ParameterModifier): Similar function to return
16273         info about the argument's modifiers.
16274
16275         (Invocation::OverloadResolve): Update to take into account matching modifiers 
16276         too.
16277
16278         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
16279         a new SetFormalParameters object which we pass to InternalParameters.
16280
16281 2001-10-30  Ravi Pratap  <ravi@ximian.com>
16282
16283         * expression.cs (NewArray): Merge into the ArrayCreation class.
16284
16285 2001-10-29  Ravi Pratap  <ravi@ximian.com>
16286
16287         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
16288         NewUserdefinedArray into one as there wasn't much of a use in having
16289         two separate ones.
16290
16291         * expression.cs (Argument): Change field's name to ArgType from Type.
16292
16293         (Type): New readonly property which returns the proper type, taking into 
16294         account ref/out modifiers.
16295
16296         (everywhere): Adjust code accordingly for the above.
16297
16298         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
16299         whether we are emitting for a ref or out parameter.
16300
16301         * expression.cs (Argument::Emit): Use the above field to set the state.
16302
16303         (LocalVariableReference::Emit): Update to honour the flag and emit the
16304         right stuff.
16305
16306         * parameter.cs (Attributes): Set the correct flags for ref parameters.
16307
16308         * expression.cs (Argument::FullDesc): New function to provide a full desc.
16309
16310         * support.cs (ParameterData): Add method ParameterDesc to the interface.
16311
16312         (ReflectionParameters, InternalParameters): Implement the above method.
16313
16314         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
16315         reporting errors.
16316
16317         (Invocation::FullMethodDesc): Ditto. 
16318
16319 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
16320
16321         * cs-parser.jay: Add extra production for the second form of array
16322         creation. 
16323
16324         * expression.cs (ArrayCreation): Update to reflect the above
16325         change. 
16326
16327         * Small changes to prepare for Array initialization.
16328
16329 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
16330
16331         * typemanager.cs (ImplementsInterface): interface might be null;
16332         Deal with this problem;
16333
16334         Also, we do store negative hits on the cache (null values), so use
16335         this instead of calling t.GetInterfaces on the type everytime.
16336
16337 2001-10-28  Ravi Pratap  <ravi@ximian.com>
16338
16339         * typemanager.cs (IsBuiltinType): New method to help determine the same.
16340
16341         * expression.cs (New::DoResolve): Get rid of array creation code and instead
16342         split functionality out into different classes.
16343
16344         (New::FormArrayType): Move into NewBuiltinArray.
16345
16346         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
16347         quite useless.
16348
16349         (NewBuiltinArray): New class to handle creation of built-in arrays.
16350
16351         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
16352         account creation of one-dimensional arrays.
16353
16354         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
16355
16356         (NewUserdefinedArray::DoResolve): Implement.
16357
16358         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
16359
16360         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
16361         we maintain inside the TypeManager. This is necessary to perform lookups on the
16362         module builder.
16363
16364         (LookupType): Update to perform GetType on the module builders too.     
16365
16366         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
16367
16368         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
16369
16370 2001-10-23  Ravi Pratap  <ravi@ximian.com>
16371
16372         * expression.cs (New::DoResolve): Implement guts of array creation.
16373
16374         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
16375
16376 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
16377
16378         * expression.cs: Fix bug I introduced lsat night that broke
16379         Delegates. 
16380
16381         (Expression.Resolve): Report a 246 error (can not resolve name)
16382         if we find a SimpleName in the stream.
16383
16384         (Expression.ResolveLValue): Ditto.
16385
16386         (Expression.ResolveWithSimpleName): This function is a variant of
16387         ResolveName, this one allows SimpleNames to be returned without a
16388         warning.  The only consumer of SimpleNames is MemberAccess
16389
16390 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
16391
16392         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
16393         might arrive here.  I have my doubts that this is correct.
16394
16395         * statement.cs (Lock): Implement lock statement.
16396
16397         * cs-parser.jay: Small fixes to support `lock' and `using'
16398
16399         * cs-tokenizer.cs: Remove extra space
16400
16401         * driver.cs: New flag --checked, allows to turn on integer math
16402         checking. 
16403
16404         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
16405         Threading.Monitor.Exit 
16406
16407 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
16408
16409         * expression.cs (IndexerAccess::DoResolveLValue): Set the
16410         Expression Class to be IndexerAccess.
16411
16412         Notice that Indexer::DoResolve sets the eclass to Value.
16413
16414 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
16415
16416         * class.cs (TypeContainer::Emit): Emit code for indexers.
16417
16418         * assign.cs (IAssignMethod): New interface implemented by Indexers
16419         and Properties for handling assignment.
16420
16421         (Assign::Emit): Simplify and reuse code. 
16422
16423         * expression.cs (IndexerAccess, PropertyExpr): Implement
16424         IAssignMethod, clean up old code. 
16425
16426 2001-10-22  Ravi Pratap  <ravi@ximian.com>
16427
16428         * typemanager.cs (ImplementsInterface): New method to determine if a type
16429         implements a given interface. Provides a nice cache too.
16430
16431         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
16432         method.
16433
16434         (ConvertReferenceExplicit): Ditto.
16435
16436         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
16437         various methods, with correct names etc.
16438
16439         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
16440         Operator.UnaryNegation.
16441
16442         * cs-parser.jay (operator_declarator): Be a little clever in the case where
16443         we have a unary plus or minus operator.
16444
16445         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
16446         UnaryMinus.
16447
16448         * everywhere : update accordingly.
16449
16450         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
16451         respectively.
16452
16453         * class.cs (Method::Define): For the case where we are implementing a method
16454         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
16455         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
16456
16457 2001-10-21  Ravi Pratap  <ravi@ximian.com>
16458
16459         * interface.cs (FindMembers): Implement to work around S.R.E
16460         lameness.
16461
16462         * typemanager.cs (IsInterfaceType): Implement.
16463
16464         (FindMembers): Update to handle interface types too.
16465
16466         * expression.cs (ImplicitReferenceConversion): Re-write bits which
16467         use IsAssignableFrom as that is not correct - it doesn't work.
16468
16469         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
16470         and accordingly override EmitStatement.
16471
16472         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
16473         using the correct logic :-)
16474
16475 2001-10-19  Ravi Pratap  <ravi@ximian.com>
16476
16477         * ../errors/cs-11.cs : Add to demonstrate error -11 
16478
16479 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
16480
16481         * assign.cs (Assign::Resolve): Resolve right hand side first, and
16482         then pass this as a hint to ResolveLValue.
16483
16484         * expression.cs (FieldExpr): Add Location information
16485
16486         (FieldExpr::LValueResolve): Report assignment to readonly
16487         variable. 
16488
16489         (Expression::ExprClassFromMemberInfo): Pass location information.
16490
16491         (Expression::ResolveLValue): Add new method that resolves an
16492         LValue. 
16493
16494         (Expression::DoResolveLValue): Default invocation calls
16495         DoResolve. 
16496
16497         (Indexers): New class used to keep track of indexers in a given
16498         Type. 
16499
16500         (IStackStore): Renamed from LValue, as it did not really describe
16501         what this did.  Also ResolveLValue is gone from this interface and
16502         now is part of Expression.
16503
16504         (ElementAccess): Depending on the element access type
16505
16506         * typemanager.cs: Add `indexer_name_type' as a Core type
16507         (System.Runtime.CompilerServices.IndexerNameAttribute)
16508
16509         * statement.cs (Goto): Take a location.
16510
16511 2001-10-18  Ravi Pratap  <ravi@ximian.com>
16512
16513         * delegate.cs (Delegate::VerifyDelegate): New method to verify
16514         if two delegates are compatible.
16515
16516         (NewDelegate::DoResolve): Update to take care of the case when
16517         we instantiate a delegate from another delegate.
16518
16519         * typemanager.cs (FindMembers): Don't even try to look up members
16520         of Delegate types for now.
16521
16522 2001-10-18  Ravi Pratap  <ravi@ximian.com>
16523
16524         * delegate.cs (NewDelegate): New class to take care of delegate
16525         instantiation.
16526
16527         * expression.cs (New): Split the delegate related code out into 
16528         the NewDelegate class.
16529
16530         * delegate.cs (DelegateInvocation): New class to handle delegate 
16531         invocation.
16532
16533         * expression.cs (Invocation): Split out delegate related code into
16534         the DelegateInvocation class.
16535
16536 2001-10-17  Ravi Pratap  <ravi@ximian.com>
16537
16538         * expression.cs (New::DoResolve): Implement delegate creation fully
16539         and according to the spec.
16540
16541         (New::DoEmit): Update to handle delegates differently.
16542
16543         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
16544         because of which we were printing out arguments in reverse order !
16545
16546         * delegate.cs (VerifyMethod): Implement to check if the given method
16547         matches the delegate.
16548
16549         (FullDelegateDesc): Implement.
16550
16551         (VerifyApplicability): Implement.
16552
16553         * expression.cs (Invocation::DoResolve): Update to accordingly handle
16554         delegate invocations too.
16555
16556         (Invocation::Emit): Ditto.
16557
16558         * ../errors/cs1593.cs : Added.
16559
16560         * ../errors/cs1594.cs : Added.
16561
16562         * delegate.cs (InstanceExpression, TargetMethod): New properties.
16563
16564 2001-10-16  Ravi Pratap  <ravi@ximian.com>
16565
16566         * typemanager.cs (intptr_type): Core type for System.IntPtr
16567
16568         (InitCoreTypes): Update for the same.
16569
16570         (iasyncresult_type, asynccallback_type): Ditto.
16571
16572         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
16573         correct.
16574
16575         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
16576         too.
16577
16578         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
16579         the builders for the 4 members of a delegate type :-)
16580
16581         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
16582         type.
16583
16584         * expression.cs (New::DoResolve): Implement guts for delegate creation.
16585
16586         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
16587
16588 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
16589
16590         * statement.cs (Break::Emit): Implement.   
16591         (Continue::Emit): Implement.
16592
16593         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
16594         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
16595         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
16596         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
16597         end loop
16598
16599         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
16600         properties that track the label for the current loop (begin of the
16601         loop and end of the loop).
16602
16603 2001-10-15  Ravi Pratap  <ravi@ximian.com>
16604
16605         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
16606         use of emitting anything at all.
16607
16608         * class.cs, rootcontext.cs : Get rid of calls to the same.
16609
16610         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
16611
16612         (Populate): Define the constructor correctly and set the implementation
16613         attributes.
16614
16615         * typemanager.cs (delegate_types): New hashtable to hold delegates that
16616         have been defined.
16617
16618         (AddDelegateType): Implement.
16619
16620         (IsDelegateType): Implement helper method.
16621
16622         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
16623
16624         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
16625         and accordingly handle it.
16626
16627         * delegate.cs (Populate): Take TypeContainer argument.
16628         Implement bits to define the Invoke method. However, I still haven't figured out
16629         how to take care of the native int bit :-(
16630
16631         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
16632         Qualify the name of the delegate, not its return type !
16633
16634         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
16635         conversion.
16636
16637         (StandardConversionExists): Checking for array types turns out to be recursive.
16638
16639         (ConvertReferenceExplicit): Implement array conversion.
16640
16641         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
16642
16643 2001-10-12  Ravi Pratap  <ravi@ximian.com>
16644
16645         * cs-parser.jay (delegate_declaration): Store the fully qualified
16646         name as it is a type declaration.
16647
16648         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
16649         readonly.
16650
16651         (DefineDelegate): Renamed from Define. Does the same thing essentially,
16652         as TypeContainer::DefineType.
16653
16654         (Populate): Method in which all the definition of the various methods (Invoke)
16655         etc is done.
16656
16657         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
16658         see.
16659
16660         (CloseDelegate): Finally creates the delegate.
16661
16662         * class.cs (TypeContainer::DefineType): Update to define delegates.
16663         (Populate, Emit and CloseType): Do the same thing here too.
16664
16665         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
16666         delegates in all these operations.
16667
16668 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
16669
16670         * expression.cs: LocalTemporary: a new expression used to
16671         reference a temporary that has been created.
16672
16673         * assign.cs: Handle PropertyAccess back here, so that we can
16674         provide the proper semantic access to properties.
16675
16676         * expression.cs (Expression::ConvertReferenceExplicit): Implement
16677         a few more explicit conversions. 
16678
16679         * modifiers.cs: `NEW' modifier maps to HideBySig.
16680
16681         * expression.cs (PropertyExpr): Make this into an
16682         ExpressionStatement, and support the EmitStatement code path. 
16683
16684         Perform get/set error checking, clean up the interface.
16685
16686         * assign.cs: recognize PropertyExprs as targets, and if so, turn
16687         them into toplevel access objects.
16688
16689 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
16690
16691         * expression.cs: PropertyExpr::PropertyExpr: use work around the
16692         SRE.
16693
16694         * typemanager.cs: Keep track here of our PropertyBuilders again to
16695         work around lameness in SRE.
16696
16697 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
16698
16699         * expression.cs (LValue::LValueResolve): New method in the
16700         interface, used to perform a second resolution pass for LValues. 
16701
16702         (This::DoResolve): Catch the use of this in static methods.
16703
16704         (This::LValueResolve): Implement.
16705
16706         (This::Store): Remove warning, assigning to `this' in structures
16707         is 
16708
16709         (Invocation::Emit): Deal with invocation of
16710         methods on value types.  We need to pass the address to structure
16711         methods rather than the object itself.  (The equivalent code to
16712         emit "this" for structures leaves the entire structure on the
16713         stack instead of a pointer to it). 
16714
16715         (ParameterReference::DoResolve): Compute the real index for the
16716         argument based on whether the method takes or not a `this' pointer
16717         (ie, the method is static).
16718
16719         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
16720         value types returned from functions when we need to invoke a
16721         method on the sturcture.
16722
16723
16724 2001-10-11  Ravi Pratap  <ravi@ximian.com>
16725
16726         * class.cs (TypeContainer::DefineType): Method to actually do the business of
16727         defining the type in the Modulebuilder or Typebuilder. This is to take
16728         care of nested types which need to be defined on the TypeBuilder using
16729         DefineNestedMethod.
16730
16731         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
16732         methods in RootContext, only ported to be part of TypeContainer.
16733
16734         (TypeContainer::GetInterfaceOrClass): Ditto.
16735
16736         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
16737
16738         * interface.cs (Interface::DefineInterface): New method. Does exactly
16739         what RootContext.CreateInterface did earlier, only it takes care of nested types 
16740         too.
16741
16742         (Interface::GetInterfaces): Move from RootContext here and port.
16743
16744         (Interface::GetInterfaceByName): Same here.
16745
16746         * rootcontext.cs (ResolveTree): Re-write.
16747
16748         (PopulateTypes): Re-write.
16749
16750         * class.cs (TypeContainer::Populate): Populate nested types too.
16751         (TypeContainer::Emit): Emit nested members too.
16752
16753         * typemanager.cs (AddUserType): Do not make use of the FullName property,
16754         instead just use the name argument passed in as it is already fully
16755         qualified.
16756
16757         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
16758         to TypeContainer mapping to see if a type is user-defined.
16759
16760         * class.cs (TypeContainer::CloseType): Implement. 
16761
16762         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
16763         the default constructor.
16764
16765         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
16766         twice.
16767
16768         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
16769
16770         * interface.cs (CloseType): Create the type here.
16771
16772         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
16773         the hierarchy.
16774
16775         Remove all the methods which are now in TypeContainer.
16776
16777 2001-10-10  Ravi Pratap  <ravi@ximian.com>
16778
16779         * delegate.cs (Define): Re-write bits to define the delegate
16780         correctly.
16781
16782 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
16783
16784         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
16785
16786         * expression.cs (ImplicitReferenceConversion): handle null as well
16787         as a source to convert to any reference type.
16788
16789         * statement.cs (Return): Perform any implicit conversions to
16790         expected return type.  
16791
16792         Validate use of return statement.  
16793
16794         * codegen.cs (EmitContext): Pass the expected return type here.
16795
16796         * class.cs (Method, Constructor, Property): Pass expected return
16797         type to EmitContext.
16798
16799 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
16800
16801         * expression.cs: Make DoResolve take an EmitContext instead of a
16802         TypeContainer.
16803
16804         Replaced `l' and `location' for `loc', for consistency.
16805
16806         (Error, Warning): Remove unneeded Tc argument.
16807
16808         * assign.cs, literal.cs, constant.cs: Update to new calling
16809         convention. 
16810
16811         * codegen.cs: EmitContext now contains a flag indicating whether
16812         code is being generated in a static method or not.
16813
16814         * cs-parser.jay: DecomposeQI, new function that replaces the old
16815         QualifiedIdentifier.  Now we always decompose the assembled
16816         strings from qualified_identifier productions into a group of
16817         memberaccesses.
16818
16819 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
16820
16821         * rootcontext.cs: Deal with field-less struct types correctly now
16822         by passing the size option to Define Type.
16823
16824         * class.cs: Removed hack that created one static field. 
16825
16826 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
16827
16828         * statement.cs: Moved most of the code generation here. 
16829
16830 2001-10-09  Ravi Pratap  <ravi@ximian.com>
16831
16832         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
16833         seem very right.
16834
16835         (ElementAccess): Remove useless bits for now - keep checks as the spec
16836         says.
16837
16838 2001-10-08  Ravi Pratap  <ravi@ximian.com>
16839
16840         * expression.cs (ElementAccess::DoResolve): Remove my crap code
16841         and start performing checks according to the spec.
16842
16843 2001-10-07  Ravi Pratap  <ravi@ximian.com>
16844
16845         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
16846         rank_specifiers instead.
16847
16848         (rank_specifiers): Change the order in which the rank specifiers are stored
16849
16850         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
16851
16852         * expression.cs (ElementAccess): Implement the LValue interface too.
16853
16854 2001-10-06  Ravi Pratap  <ravi@ximian.com>
16855
16856         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
16857         except that user defined conversions are not included.
16858
16859         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
16860         perform the conversion of the return type, if necessary.
16861
16862         (New::DoResolve): Check whether we are creating an array or an object
16863         and accordingly do the needful.
16864
16865         (New::Emit): Same here.
16866
16867         (New::DoResolve): Implement guts of array creation.
16868
16869         (New::FormLookupType): Helper function.
16870
16871 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
16872
16873         * codegen.cs: Removed most of the code generation here, and move the
16874         corresponding code generation bits to the statement classes. 
16875
16876         Added support for try/catch/finalize and throw.
16877
16878         * cs-parser.jay: Added support for try/catch/finalize.
16879
16880         * class.cs: Catch static methods having the flags override,
16881         virtual or abstract.
16882
16883         * expression.cs (UserCast): This user cast was not really doing
16884         what it was supposed to do.  Which is to be born in fully resolved
16885         state.  Parts of the resolution were being performed at Emit time! 
16886
16887         Fixed this code.
16888
16889 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
16890
16891         * expression.cs: Implicity convert the result from UserCast.
16892
16893 2001-10-05  Ravi Pratap  <ravi@ximian.com>
16894
16895         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
16896         prevented it from working correctly. 
16897
16898         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
16899         merely ConvertImplicit.
16900
16901 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
16902
16903         * typemanager.cs: Make the LookupTypeContainer function static,
16904         and not per-instance.  
16905
16906         * class.cs: Make static FindMembers (the one that takes a Type
16907         argument). 
16908
16909         * codegen.cs: Add EmitForeach here.
16910
16911         * cs-parser.jay: Make foreach a toplevel object instead of the
16912         inline expansion, as we need to perform semantic analysis on it. 
16913
16914 2001-10-05  Ravi Pratap  <ravi@ximian.com>
16915
16916         * expression.cs (Expression::ImplicitUserConversion): Rename to
16917         UserDefinedConversion.
16918
16919         (Expression::UserDefinedConversion): Take an extra argument specifying 
16920         whether we look for explicit user conversions too.
16921
16922         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
16923
16924         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
16925
16926         (ExplicitUserConversion): Make it a call to UserDefinedConversion
16927         with the appropriate arguments.
16928
16929         * cs-parser.jay (cast_expression): Record location too.
16930
16931         * expression.cs (Cast): Record location info.
16932
16933         (Expression::ConvertExplicit): Take location argument.
16934
16935         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
16936         to determine if we are doing explicit conversions.
16937
16938         (UserCast::Emit): Update accordingly.
16939
16940         (Expression::ConvertExplicit): Report an error if everything fails.
16941
16942         * ../errors/cs0030.cs : Add.
16943
16944 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
16945
16946         * modifiers.cs: If the ABSTRACT keyword is present, also set the
16947         virtual and newslot bits. 
16948
16949         * class.cs (TypeContainer::RegisterRequiredImplementations):
16950         Record methods we need.
16951
16952         (TypeContainer::MakeKey): Helper function to make keys for
16953         MethodBases, since the Methodbase key is useless.
16954
16955         (TypeContainer::Populate): Call RegisterRequiredImplementations
16956         before defining the methods.   
16957
16958         Create a mapping for method_builders_to_methods ahead of time
16959         instead of inside a tight loop.
16960
16961         (::RequireMethods):  Accept an object as the data to set into the
16962         hashtable so we can report interface vs abstract method mismatch.
16963
16964 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
16965
16966         * report.cs: Make all of it static.
16967
16968         * rootcontext.cs: Drop object_type and value_type computations, as
16969         we have those in the TypeManager anyways.
16970
16971         Drop report instance variable too, now it is a global.
16972
16973         * driver.cs: Use try/catch on command line handling.
16974
16975         Add --probe option to debug the error reporting system with a test
16976         suite. 
16977
16978         * report.cs: Add support for exiting program when a probe
16979         condition is reached.
16980
16981 2001-10-03  Ravi Pratap  <ravi@ximian.com>
16982
16983         * expression.cs (Binary::DoNumericPromotions): Fix the case when
16984         we do a forcible conversion regardless of type, to check if 
16985         ForceConversion returns a null.
16986
16987         (Binary::error19): Use location to report error.
16988
16989         (Unary::error23): Use location here too.
16990
16991         * ../errors/cs0019.cs : Check in.
16992
16993         * ../errors/cs0023.cs : Check in.
16994
16995         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
16996         case of a non-null MethodInfo object with a length of 0 !
16997
16998         (Binary::ResolveOperator): Flag error if overload resolution fails to find
16999         an applicable member - according to the spec :-)
17000         Also fix logic to find members in base types.
17001
17002         (Unary::ResolveOperator): Same here.
17003
17004         (Unary::report23): Change name to error23 and make first argument a TypeContainer
17005         as I was getting thoroughly confused between this and error19 :-)
17006
17007         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
17008         (::FindMostEncompassedType): Implement.
17009         (::FindMostEncompassingType): Implement.
17010         (::StandardConversionExists): Implement.
17011
17012         (UserImplicitCast): Re-vamp. We now need info about most specific
17013         source and target types so that we can do the necessary conversions.
17014
17015         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
17016         mathematical union with no duplicates.
17017
17018 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
17019
17020         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
17021         in order from base classes to child classes, so that we can in
17022         child classes look up in our parent for method names and
17023         attributes (required for handling abstract, virtual, new, override
17024         constructs: we need to instrospect our base class, and if we dont
17025         populate the classes in order, the introspection might be
17026         incorrect.  For example, a method could query its parent before
17027         the parent has any methods and would determine that the parent has
17028         no abstract methods (while it could have had them)).
17029
17030         (RootContext::CreateType): Record the order in which we define the
17031         classes.
17032
17033 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
17034
17035         * class.cs (TypeContainer::Populate): Also method definitions can
17036         fail now, keep track of this.
17037
17038         (TypeContainer::FindMembers): Implement support for
17039         DeclaredOnly/noDeclaredOnly flag.
17040
17041         (Constructor::Emit) Return the ConstructorBuilder.
17042
17043         (Method::Emit) Return the MethodBuilder. 
17044         Check for abstract or virtual methods to be public.
17045
17046         * rootcontext.cs (RootContext::CreateType): Register all the
17047         abstract methods required for the class to be complete and the
17048         interface methods that must be implemented. 
17049
17050         * cs-parser.jay: Report error 501 (method requires body if it is
17051         not marked abstract or extern).
17052
17053         * expression.cs (TypeOf::Emit): Implement.
17054
17055         * typemanager.cs: runtime_handle_type, new global type.
17056
17057         * class.cs (Property::Emit): Generate code for properties.
17058
17059 2001-10-02  Ravi Pratap  <ravi@ximian.com>
17060
17061         * expression.cs (Unary::ResolveOperator): Find operators on base type
17062         too - we now conform exactly to the spec.
17063
17064         (Binary::ResolveOperator): Same here.
17065
17066         * class.cs (Operator::Define): Fix minor quirk in the tests.
17067
17068         * ../errors/cs0215.cs : Added.
17069
17070         * ../errors/cs0556.cs : Added.
17071
17072         * ../errors/cs0555.cs : Added.
17073
17074 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
17075
17076         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
17077         single integer which is really efficient
17078
17079 2001-10-01  Ravi Pratap  <ravi@ximian.com>
17080
17081         *  expression.cs (Expression::ImplicitUserConversion): Use location
17082         even in the case when we are examining True operators.
17083  
17084         * class.cs (Operator::Define): Perform extensive checks to conform
17085         with the rules for operator overloading in the spec.
17086
17087         * expression.cs (Expression::ImplicitReferenceConversion): Implement
17088         some of the other conversions mentioned in the spec.
17089
17090         * typemanager.cs (array_type): New static member for the System.Array built-in
17091         type.
17092
17093         (cloneable_interface): For System.ICloneable interface.
17094
17095         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
17096         we start resolving the tree and populating types.
17097
17098         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
17099  
17100 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
17101
17102         * expression.cs (Expression::ExprClassFromMemberInfo,
17103         Expression::Literalize): Create literal expressions from
17104         FieldInfos which are literals.
17105
17106         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
17107         type casts, because they were wrong.  The test suite in tests
17108         caught these ones.
17109
17110         (ImplicitNumericConversion): ushort to ulong requires a widening
17111         cast. 
17112
17113         Int32 constant to long requires widening cast as well.
17114
17115         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
17116         for integers because the type on the stack is not i4.
17117
17118 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
17119
17120         * expression.cs (report118): require location argument. 
17121
17122         * parameter.cs: Do not dereference potential null value.
17123
17124         * class.cs: Catch methods that lack the `new' keyword when
17125         overriding a name.  Report warnings when `new' is used without
17126         anything being there to override.
17127
17128         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
17129
17130         * class.cs: Only add constructor to hashtable if it is non-null
17131         (as now constructors can fail on define).
17132
17133         (TypeManager, Class, Struct): Take location arguments.
17134
17135         Catch field instance initialization in structs as errors.
17136
17137         accepting_filter: a new filter for FindMembers that is static so
17138         that we dont create an instance per invocation.
17139
17140         (Constructor::Define): Catch errors where a struct constructor is
17141         parameterless 
17142
17143         * cs-parser.jay: Pass location information for various new
17144         constructs. 
17145
17146         * delegate.cs (Delegate): take a location argument.
17147
17148         * driver.cs: Do not call EmitCode if there were problesm in the
17149         Definition of the types, as many Builders wont be there. 
17150
17151         * decl.cs (Decl::Decl): Require a location argument.
17152
17153         * cs-tokenizer.cs: Handle properly hex constants that can not fit
17154         into integers, and find the most appropiate integer for it.
17155
17156         * literal.cs: Implement ULongLiteral.
17157
17158         * rootcontext.cs: Provide better information about the location of
17159         failure when CreateType fails.
17160
17161 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
17162
17163         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
17164         as well.
17165
17166         * expression.cs (Binary::CheckShiftArguments): Add missing type
17167         computation.
17168         (Binary::ResolveOperator): Add type to the logical and and logical
17169         or, Bitwise And/Or and Exclusive Or code paths, it was missing
17170         before.
17171
17172         (Binary::DoNumericPromotions): In the case where either argument
17173         is ulong (and most signed types combined with ulong cause an
17174         error) perform implicit integer constant conversions as well.
17175
17176 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
17177
17178         * expression.cs (UserImplicitCast): Method should always be
17179         non-null. 
17180         (Invocation::BetterConversion): Simplified test for IntLiteral.
17181
17182         (Expression::ImplicitNumericConversion): Split this routine out.
17183         Put the code that performs implicit constant integer conversions
17184         here. 
17185
17186         (Expression::Resolve): Become a wrapper around DoResolve so we can
17187         check eclass and type being set after resolve.
17188
17189         (Invocation::Badness): Remove this dead function
17190
17191         (Binary::ResolveOperator): Do not compute the expensive argumnets
17192         unless we have a union for it.
17193
17194         (Probe::Emit): Is needs to do an isinst and then
17195         compare against null.
17196
17197         (::CanConvert): Added Location argument.  If the Location argument
17198         is null (Location.Null), then we do not report errors.  This is
17199         used by the `probe' mechanism of the Explicit conversion.  We do
17200         not want to generate an error for something that the user
17201         explicitly requested to be casted.  But the pipeline for an
17202         explicit cast first tests for potential implicit casts.
17203
17204         So for now, if the Location is null, it means `Probe only' to
17205         avoid adding another argument.   Might have to revise this
17206         strategy later.
17207
17208         (ClassCast): New class used to type cast objects into arbitrary
17209         classes (used in Explicit Reference Conversions).
17210
17211         Implement `as' as well.
17212
17213         Reverted all the patches from Ravi below: they were broken:
17214
17215                 * The use of `level' as a mechanism to stop recursive
17216                   invocations is wrong.  That was there just to catch the
17217                   bug with a strack trace but not as a way of addressing
17218                   the problem.
17219
17220                   To fix the problem we have to *understand* what is going
17221                   on and the interactions and come up with a plan, not
17222                   just get things going.
17223
17224                 * The use of the type conversion cache that I proposed
17225                   last night had an open topic: How does this work across
17226                   protection domains.  A user defined conversion might not
17227                   be public in the location where we are applying the
17228                   conversion, a different conversion might be selected
17229                   (ie, private A->B (better) but public B->A (worse),
17230                   inside A, A->B applies, but outside it, B->A will
17231                   apply).
17232
17233                 * On top of that (ie, even if the above is solved),
17234                   conversions in a cache need to be abstract.  Ie, `To
17235                   convert from an Int to a Short use an OpcodeCast', not
17236                   `To convert from an Int to a Short use the OpcodeCast on
17237                   the variable 5' (which is what this patch was doing).
17238
17239 2001-09-28  Ravi Pratap  <ravi@ximian.com>
17240
17241         * expression.cs (Invocation::ConversionExists): Re-write to use
17242         the conversion cache
17243
17244         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
17245         cache all conversions done, not just user-defined ones.
17246
17247         (Invocation::BetterConversion): The real culprit. Use ConversionExists
17248         to determine if a conversion exists instead of acutually trying to 
17249         perform the conversion. It's faster too.
17250
17251         (Expression::ConvertExplicit): Modify to use ConversionExists to check
17252         and only then attempt the implicit conversion.
17253
17254 2001-09-28  Ravi Pratap  <ravi@ximian.com>
17255
17256         * expression.cs (ConvertImplicit): Use a cache for conversions
17257         already found. Check level of recursion and bail out if necessary.
17258
17259 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
17260
17261         * typemanager.cs (string_concat_string_string, string_concat_object_object):
17262         Export standard methods that we expect for string operations.
17263
17264         * statement.cs (Block::UsageWarning): Track usage of variables and
17265         report the errors for not used variables.
17266
17267         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
17268         operator. 
17269
17270 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
17271
17272         * codegen.cs: remove unnneded code 
17273
17274         * expression.cs: Removed BuiltinTypeAccess class
17275
17276         Fix the order in which implicit conversions are
17277         done.  
17278
17279         The previous fixed dropped support for boxed conversions (adding a
17280         test to the test suite now)
17281
17282         (UserImplicitCast::CanConvert): Remove test for source being null,
17283         that code is broken.  We should not feed a null to begin with, if
17284         we do, then we should track the bug where the problem originates
17285         and not try to cover it up here.
17286
17287         Return a resolved expression of type UserImplicitCast on success
17288         rather than true/false.  Ravi: this is what I was talking about,
17289         the pattern is to use a static method as a "constructor" for
17290         objects. 
17291
17292         Also, do not create arguments until the very last minute,
17293         otherwise we always create the arguments even for lookups that
17294         will never be performed. 
17295
17296         (UserImplicitCast::Resolve): Eliminate, objects of type
17297         UserImplicitCast are born in a fully resolved state. 
17298
17299         * typemanager.cs (InitCoreTypes): Init also value_type
17300         (System.ValueType). 
17301
17302         * expression.cs (Cast::Resolve): First resolve the child expression.
17303
17304         (LValue): Add new method AddressOf to be used by
17305         the `&' operator.  
17306
17307         Change the argument of Store to take an EmitContext instead of an
17308         ILGenerator, because things like FieldExpr need to be able to call
17309         their children expression to generate the instance code. 
17310
17311         (Expression::Error, Expression::Warning): Sugar functions for
17312         reporting errors.
17313
17314         (Expression::MemberLookup): Accept a TypeContainer instead of a
17315         Report as the first argument.
17316
17317         (Expression::ResolvePrimary): Killed.  I still want to improve
17318         this as currently the code is just not right.
17319
17320         (Expression::ResolveMemberAccess): Simplify, but it is still
17321         wrong. 
17322
17323         (Unary::Resolve): Catch errors in AddressOf operators.
17324
17325         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
17326         index to a byte for the short-version, or the compiler will choose
17327         the wrong Emit call, which generates the wrong data.
17328
17329         (ParameterReference::Emit, ::Store): same.
17330
17331         (FieldExpr::AddressOf): Implement.
17332
17333         * typemanager.cs: TypeManager: made public variable instead of
17334         property.
17335
17336         * driver.cs: document --fatal.
17337
17338         * report.cs (ErrorMessage, WarningMessage): new names for the old
17339         Error and Warning classes.
17340
17341         * cs-parser.jay (member_access): Turn built-in access to types
17342         into a normal simplename
17343
17344 2001-09-27  Ravi Pratap  <ravi@ximian.com>
17345
17346         * expression.cs (Invocation::BetterConversion): Fix to cope
17347         with q being null, since this was introducing a bug.
17348
17349         * expression.cs (ConvertImplicit): Do built-in conversions first.
17350
17351 2001-09-27  Ravi Pratap  <ravi@ximian.com>
17352
17353         * expression.cs (UserImplicitCast::Resolve): Fix bug.
17354
17355 2001-09-27  Ravi Pratap  <ravi@ximian.com>
17356
17357         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
17358         I had introduced long ago (what's new ?).
17359
17360         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
17361         the work of all the checking. 
17362         (ConvertImplicit): Call CanConvert and only then create object if necessary.
17363         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
17364
17365         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
17366         that is the right way. 
17367
17368         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
17369         overloading resolution. Use everywhere instead of cutting and pasting code.
17370
17371         (Binary::ResolveOperator): Use MakeUnionSet.
17372
17373         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
17374         we have to convert to bool types. Not complete yet.
17375
17376 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
17377
17378         * typemanager.cs (TypeManager::CSharpName): support ushort.
17379
17380         * expression.cs (Expression::TryImplicitIntConversion): Attempts
17381         to provide an expression that performsn an implicit constant int
17382         conversion (section 6.1.6).
17383         (Expression::ConvertImplicitRequired): Reworked to include
17384         implicit constant expression conversions.
17385
17386         (Expression::ConvertNumericExplicit): Finished.
17387
17388         (Invocation::Emit): If InstanceExpression is null, then it means
17389         that we perform a call on this.
17390
17391 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
17392
17393         * expression.cs (Unary::Emit): Remove some dead code.
17394         (Probe): Implement Resolve and Emit for `is'.
17395         (Expression::ConvertImplicitRequired): Attempt to do constant
17396         expression conversions here.  Maybe should be moved to
17397         ConvertImplicit, but I am not sure.
17398         (Expression::ImplicitLongConstantConversionPossible,
17399         Expression::ImplicitIntConstantConversionPossible): New functions
17400         that tell whether is it possible to apply an implicit constant
17401         expression conversion.
17402
17403         (ConvertNumericExplicit): Started work on explicit numeric
17404         conversions.
17405
17406         * cs-parser.jay: Update operator constants.
17407
17408         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
17409         (Parameters::GetSignature): Hook up VerifyArgs here.
17410         (Parameters::VerifyArgs): Verifies that no two arguments have the
17411         same name. 
17412
17413         * class.cs (Operator): Update the operator names to reflect the
17414         ones that the spec expects (as we are just stringizing the
17415         operator names).
17416
17417         * expression.cs (Unary::ResolveOperator): Fix bug: Use
17418         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
17419         previous usage did only work for our methods.
17420         (Expression::ConvertImplicit): Handle decimal implicit numeric
17421         conversions as well.
17422         (Expression::InternalTypeConstructor): Used to invoke constructors
17423         on internal types for default promotions.
17424
17425         (Unary::Emit): Implement special handling for the pre/post
17426         increment/decrement for overloaded operators, as they need to have
17427         the same semantics as the other operators.
17428
17429         (Binary::ResolveOperator): ditto.
17430         (Invocation::ConversionExists): ditto.
17431         (UserImplicitCast::Resolve): ditto.
17432
17433 2001-09-26  Ravi Pratap  <ravi@ximian.com>
17434
17435         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
17436         operator, return after emitting body. Regression tests pass again !
17437
17438         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
17439         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
17440         (Invocation::OverloadResolve): Ditto.
17441         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
17442
17443         * everywhere : update calls to the above methods accordingly.
17444
17445 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
17446
17447         * assign.cs (Assign): Make it inherit from ExpressionStatement.
17448
17449         * expression.cs (ExpressionStatement): New base class used for
17450         expressions that can appear in statements, so that we can provide
17451         an alternate path to generate expression that do not leave a value
17452         on the stack.
17453
17454         (Expression::Emit, and all the derivatives): We no longer return
17455         whether a value is left on the stack or not.  Every expression
17456         after being emitted leaves a single value on the stack.
17457
17458         * codegen.cs (EmitContext::EmitStatementExpression): Use the
17459         facilties of ExpressionStatement if possible.
17460
17461         * cs-parser.jay: Update statement_expression.
17462
17463 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
17464
17465         * driver.cs: Change the wording of message
17466
17467 2001-09-25  Ravi Pratap  <ravi@ximian.com>
17468
17469         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
17470         the type of the expression to the return type of the method if
17471         we have an overloaded operator match ! The regression tests pass again !
17472         (Unary::ResolveOperator): Ditto.
17473
17474         * expression.cs (Invocation::ConversionExists): Correct the member lookup
17475         to find "op_Implicit", not "implicit" ;-)
17476         (UserImplicitCast): New class to take care of user-defined implicit conversions.
17477         (ConvertImplicit, ForceConversion): Take TypeContainer argument
17478
17479         * everywhere : Correct calls to the above accordingly.
17480
17481         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
17482         (ConvertImplicit): Do user-defined conversion if it exists.
17483
17484 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
17485
17486         * assign.cs: track location.
17487         (Resolve): Use implicit conversions on assignment.
17488
17489         * literal.cs: Oops.  Not good, Emit of short access values should
17490         pass (Bytes) or the wrong argument will be selected.
17491
17492         * expression.cs (Unary::Emit): Emit code for -expr.
17493
17494         (Unary::ResolveOperator): Handle `Substract' for non-constants
17495         (substract from zero from the non-constants).
17496         Deal with Doubles as well. 
17497
17498         (Expression::ConvertImplicitRequired): New routine that reports an
17499         error if no implicit conversion exists. 
17500
17501         (Invocation::OverloadResolve): Store the converted implicit
17502         expressions if we make them
17503
17504 2001-09-24  Ravi Pratap  <ravi@ximian.com>
17505
17506         * class.cs (ConstructorInitializer): Take a Location argument.
17507         (ConstructorBaseInitializer): Same here.
17508         (ConstructorThisInitializer): Same here.
17509
17510         * cs-parser.jay : Update all calls accordingly.
17511
17512         * expression.cs (Unary, Binary, New): Take location argument.
17513         Update accordingly everywhere.
17514
17515         * cs-parser.jay : Update all calls to the above to take a location
17516         argument.
17517
17518         * class.cs : Ditto.
17519
17520 2001-09-24  Ravi Pratap  <ravi@ximian.com>
17521
17522         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
17523         (Invocation::BetterConversion): Same here
17524         (Invocation::ConversionExists): Ditto.
17525
17526         (Invocation::ConversionExists): Implement.
17527
17528 2001-09-22  Ravi Pratap  <ravi@ximian.com>
17529
17530         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
17531         Also take an additional TypeContainer argument.
17532
17533         * All over : Pass in TypeContainer as argument to OverloadResolve.
17534
17535         * typemanager.cs (CSharpName): Update to check for the string type and return
17536         that too.
17537
17538         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
17539         a given method.
17540
17541 2001-09-21  Ravi Pratap  <ravi@ximian.com>
17542
17543         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
17544         (Invocation::BetterFunction): Implement.
17545         (Invocation::BetterConversion): Implement.
17546         (Invocation::ConversionExists): Skeleton, no implementation yet.
17547
17548         Okay, things work fine !
17549
17550 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
17551
17552         * typemanager.cs: declare and load enum_type, delegate_type and
17553         void_type. 
17554
17555         * expression.cs (Expression::Emit): Now emit returns a value that
17556         tells whether a value is left on the stack or not.  This strategy
17557         might be reveted tomorrow with a mechanism that would address
17558         multiple assignments.
17559         (Expression::report118): Utility routine to report mismatches on
17560         the ExprClass.
17561
17562         (Unary::Report23): Report impossible type/operator combination
17563         utility function.
17564
17565         (Unary::IsIncrementableNumber): Whether the type can be
17566         incremented or decremented with add.
17567         (Unary::ResolveOperator): Also allow enumerations to be bitwise
17568         complemented. 
17569         (Unary::ResolveOperator): Implement ++, !, ~,
17570
17571         (Invocation::Emit): Deal with new Emit convetion.
17572
17573         * All Expression derivatives: Updated their Emit method to return
17574         whether they leave values on the stack or not.
17575
17576         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
17577         stack for expressions that are statements. 
17578
17579 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
17580
17581         * expression.cs (LValue): New interface.  Must be implemented by
17582         LValue objects.
17583         (LocalVariableReference, ParameterReference, FieldExpr): Implement
17584         LValue interface.
17585
17586         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
17587         interface for generating code, simplifies the code.
17588
17589 2001-09-20  Ravi Pratap  <ravi@ximian.com>
17590
17591         * expression.cs (everywhere): Comment out return statements in ::Resolve
17592         methods to avoid the warnings.
17593
17594 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
17595
17596         * driver.cs (parse): Report error 2001 if we can not open the
17597         source file.
17598
17599         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
17600         not resolve it.
17601
17602         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
17603         object. 
17604
17605         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
17606         otherwise nested blocks end up with the same index.
17607
17608         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
17609
17610         * expression.cs:  Instead of having FIXMEs in the Resolve
17611         functions, throw exceptions so it is obvious that we are facing a
17612         bug. 
17613
17614         * cs-parser.jay (invocation_expression): Pass Location information.
17615
17616         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
17617         Use a basename for those routines because .NET does not like paths
17618         on them. 
17619
17620         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
17621         already defined.
17622
17623 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
17624
17625         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
17626         are loading the correct data types (throws an exception if not).
17627         (TypeManager::InitCoreTypes): Use CoreLookupType
17628
17629         * expression.cs (Unary::ResolveOperator): return the child
17630         expression for expressions which are just +expr.
17631         (Unary::ResolveOperator): Return negative literals for -LITERAL
17632         expressions (otherwise they are Unary {Literal}).
17633         (Invocation::Badness): Take into account `Implicit constant
17634         expression conversions'.
17635
17636         * literal.cs (LongLiteral): Implement long literal class.
17637         (IntLiteral): export the `Value' of the intliteral. 
17638
17639 2001-09-19  Ravi Pratap  <ravi@ximian.com>
17640
17641         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
17642
17643         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
17644         instead of 'Operator'
17645
17646         * expression.cs (Binary::ResolveOperator): Update accordingly.
17647         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
17648         and 'Minus'
17649
17650         * cs-parser.jay (unary_expression): Update to use the new names.
17651
17652         * gen-treedump.cs (GetUnary): Same here.
17653
17654         * expression.cs (Unary::Resolve): Implement.
17655         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
17656         operators are found instead of making noise ;-)
17657         (Unary::ResolveOperator): New method to do precisely the same thing which
17658         Binary::ResolveOperator does for Binary expressions.
17659         (Unary.method, .Arguments): Add.
17660         (Unary::OperName): Implement.   
17661         (Unary::ForceConversion): Copy and Paste !
17662
17663         * class.cs (Operator::Define): Fix a small bug for the case when we have 
17664         a unary operator.
17665
17666         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
17667         for the inbuilt operators. Only overloading works for now ;-)
17668
17669 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
17670
17671         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
17672         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
17673
17674         * expression.cs (This::Emit): Implement. 
17675         (This::Resolve): Implement.
17676         (TypeOf:Resolve): Implement.
17677         (Expression::ResolveSimpleName): Add an implicit this to instance
17678         field references. 
17679         (MemberAccess::Resolve): Deal with Parameters and Fields. 
17680         Bind instance variable to Field expressions.
17681         (FieldExpr::Instance): New field used to track the expression that
17682         represents the object instance.
17683         (FieldExpr::Resolve): Track potential errors from MemberLookup not
17684         binding 
17685         (FieldExpr::Emit): Implement.
17686
17687         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
17688         the last instruction contains a return opcode to avoid generating
17689         the last `ret' instruction (this generates correct code, and it is
17690         nice to pass the peverify output).
17691
17692         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
17693         initializer for static and instance variables.
17694         (Constructor::Emit): Allow initializer to be null in the case of
17695         static constructors.  Only emit initializer for instance
17696         constructors. 
17697
17698         (TypeContainer::FindMembers): Return a null array if there are no
17699         matches.
17700
17701         Also fix the code for the MemberTypes.Method branch, as it was not
17702         scanning that for operators (or tried to access null variables before).
17703
17704         * assign.cs (Assign::Emit): Handle instance and static fields. 
17705
17706         * TODO: Updated.
17707
17708         * driver.cs: Stop compilation if there are parse errors.
17709
17710         * cs-parser.jay (constructor_declaration): Provide default base
17711         initializer for non-static constructors.
17712         (constructor_declarator): Do not provide a default base
17713         initializers if none was specified.
17714         Catch the fact that constructors should not have parameters.
17715
17716         * class.cs: Do not emit parent class initializers for static
17717         constructors, that should be flagged as an error.
17718
17719 2001-09-18  Ravi Pratap  <ravi@ximian.com>
17720
17721         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
17722         Move back code into TypeContainer::Populate.
17723
17724 2001-09-18  Ravi Pratap  <ravi@ximian.com>
17725
17726         * class.cs (TypeContainer::AddConstructor): Fix the check to
17727         compare against Name, not Basename. 
17728         (Operator::OpType): Change Plus and Minus to Add and Subtract.
17729
17730         * cs-parser.jay : Update accordingly.
17731
17732         * class.cs (TypeContainer::FindMembers): For the case where we are searching
17733         for methods, don't forget to look into the operators too.
17734         (RegisterMethodBuilder): Helper method to take care of this for
17735         methods, constructors and operators.
17736         (Operator::Define): Completely revamp.
17737         (Operator.OperatorMethod, MethodName): New fields.
17738         (TypeContainer::Populate): Move the registering of builders into
17739         RegisterMethodBuilder.
17740         (Operator::Emit): Re-write.
17741
17742         * expression.cs (Binary::Emit): Comment out code path to emit method
17743         invocation stuff for the case when we have a user defined operator. I am
17744         just not able to get it right !
17745
17746 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
17747
17748         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
17749         argument. 
17750
17751         (Expression::MemberLookup): Provide a version that allows to
17752         specify the MemberTypes and BindingFlags. 
17753
17754         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
17755         so it was not fetching variable information from outer blocks.
17756
17757         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
17758         Beforefieldinit as it was buggy.
17759
17760         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
17761         that Ravi put here.  
17762
17763         * class.cs (Constructor::Emit): Only emit if block is not null.
17764         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
17765         deal with this by semantically definining it as if the user had
17766         done it.
17767
17768         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
17769         constructors as we now "emit" them at a higher level.
17770
17771         (TypeContainer::DefineDefaultConstructor): Used to define the
17772         default constructors if none was provided.
17773
17774         (ConstructorInitializer): Add methods Resolve and Emit. 
17775
17776         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
17777
17778 2001-09-17  Ravi Pratap  <ravi@ximian.com>
17779
17780         * class.cs (TypeContainer::EmitDefaultConstructor): Register
17781         the default constructor builder with our hashtable for methodbuilders
17782         to methodcores.
17783
17784         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
17785         and argument_count is 0 in which case we have a match.
17786         (Binary::ResolveOperator): More null checking and miscellaneous coding
17787         style cleanup.
17788
17789 2001-09-17  Ravi Pratap  <ravi@ximian.com>
17790
17791         * rootcontext.cs (IsNameSpace): Compare against null.
17792
17793         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
17794
17795         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
17796         and Unary::Operator.
17797
17798         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
17799         accordingly.
17800
17801         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
17802         we have overloaded operators.
17803         (Binary::ResolveOperator): Implement the part which does the operator overload
17804         resolution.
17805
17806         * class.cs (Operator::Emit): Implement.
17807         (TypeContainer::Emit): Emit the operators we have too.
17808
17809         * expression.cs (Binary::Emit): Update to emit the appropriate code for
17810         the case when we have a user-defined operator.
17811
17812 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
17813
17814         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
17815
17816 2001-09-16  Ravi Pratap  <ravi@ximian.com>
17817
17818         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
17819         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
17820         (Constructor::Emit): Implement.
17821         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
17822         if we have no work to do. 
17823         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
17824         Emit method.
17825
17826         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
17827         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
17828
17829         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
17830         of parent.parent.
17831
17832 2001-09-15  Ravi Pratap  <ravi@ximian.com>
17833
17834         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
17835         in the source.
17836         (Tree::RecordNamespace): Method to do what the name says ;-)
17837         (Tree::Namespaces): Property to get at the namespaces hashtable.
17838
17839         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
17840         keep track.
17841
17842         * rootcontext.cs (IsNamespace): Fixed it :-)
17843
17844 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
17845
17846         * class.cs (TypeContainer::FindMembers): Add support for
17847         constructors. 
17848         (MethodCore): New class that encapsulates both the shared aspects
17849         of a Constructor and a Method.  
17850         (Method, Constructor): Factored pieces into MethodCore.
17851
17852         * driver.cs: Added --fatal which makes errors throw exceptions.
17853         Load System assembly as well as part of the standard library.
17854
17855         * report.cs: Allow throwing exceptions on errors for debugging.
17856
17857         * modifiers.cs: Do not use `parent', instead use the real type
17858         container to evaluate permission settings.
17859
17860         * class.cs: Put Ravi's patch back in.  He is right, and we will
17861         have to cope with the
17862
17863 2001-09-14  Ravi Pratap  <ravi@ximian.com>
17864
17865         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
17866         FamORAssem, not FamANDAssem.
17867
17868 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
17869
17870         * driver.cs: Added --parse option that only parses its input files
17871         and terminates.
17872
17873         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
17874         incorrect.  IsTopLevel is not used to tell whether an object is
17875         root_types or not (that can be achieved by testing this ==
17876         root_types).  But to see if this is a top-level *class* (not
17877         necessarly our "toplevel" container). 
17878
17879 2001-09-14  Ravi Pratap  <ravi@ximian.com>
17880
17881         * enum.cs (Enum::Define): Modify to call the Lookup method on the
17882         parent instead of a direct call to GetType.
17883
17884 2001-09-14  Ravi Pratap  <ravi@ximian.com>
17885
17886         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
17887         Modifiers.TypeAttr. This should just be a call to that method.
17888
17889         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
17890         object so that we can determine if we are top-level or not.
17891
17892         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
17893         TypeContainer too.
17894
17895         * enum.cs (Enum::Define): Ditto.
17896
17897         * modifiers.cs (FieldAttr): Re-write.
17898
17899         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
17900         (TypeContainer::HaveStaticConstructor): New property to provide access
17901         to precisely that info.
17902
17903         * modifiers.cs (MethodAttr): Re-write.
17904         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
17905
17906         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
17907         of top-level types as claimed.
17908
17909 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
17910
17911         * expression.cs (MemberLookup): Fruitless attempt to lookup
17912         constructors.  Maybe I need to emit default constructors?  That
17913         might be it (currently .NET emits this for me automatically).
17914         (Invocation::OverloadResolve): Cope with Arguments == null.
17915         (Invocation::EmitArguments): new function, shared by the new
17916         constructor and us.
17917         (Invocation::Emit): Handle static and instance methods.  Emit
17918         proper call instruction for virtual or non-virtual invocations.
17919         (New::Emit): Implement.
17920         (New::Resolve): Implement.
17921         (MemberAccess:Resolve): Implement.
17922         (MethodGroupExpr::InstanceExpression): used conforming to the spec
17923         to track instances.
17924         (FieldExpr::Resolve): Set type.
17925
17926         * support.cs: Handle empty arguments.
17927                 
17928         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
17929         SimpleLookup): Auxiliary routines to help parse a qualifier
17930         identifier.  
17931
17932         Update qualifier_identifier rule.
17933
17934         * codegen.cs: Removed debugging messages.
17935
17936         * class.cs: Make this a global thing, this acts just as a "key" to
17937         objects that we might have around.
17938
17939         (Populate): Only initialize method_builders_to_methods once.
17940
17941         * expression.cs (PropertyExpr): Initialize type from the
17942         PropertyType. 
17943
17944         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
17945         Resolve pattern.  Attempt to implicitly convert value to boolean.
17946         Emit code.
17947
17948         * expression.cs: Set the type for the int32/int32 argument case.
17949         (Binary::ResolveOperator): Set the return type to boolean for
17950         comparission operators
17951
17952         * typemanager.cs: Remove debugging print code.
17953
17954         (Invocation::Resolve): resolve type.
17955
17956         * class.cs: Allocate a MemberInfo of the correct size, as the code
17957         elsewhere depends on the test to reflect the correct contents.
17958
17959         (Method::) Keep track of parameters, due to System.Reflection holes
17960
17961         (TypeContainer::Populate): Keep track of MethodBuilders to Method
17962         mapping here.
17963
17964         (TypeContainer::FindMembers): Use ArrayList and then copy an array
17965         of the exact size and return that.
17966
17967         (Class::LookupMethodByBuilder): New function that maps
17968         MethodBuilders to its methods.  Required to locate the information
17969         on methods because System.Reflection bit us again.
17970
17971         * support.cs: New file, contains an interface ParameterData and
17972         two implementations: ReflectionParameters and InternalParameters
17973         used to access Parameter information.  We will need to grow this
17974         as required.
17975
17976         * expression.cs (Invocation::GetParameterData): implement a cache
17977         and a wrapper around the ParameterData creation for methods. 
17978         (Invocation::OverloadResolve): Use new code.
17979
17980 2001-09-13  Ravi Pratap  <ravi@ximian.com>
17981
17982         * class.cs (TypeContainer::EmitField): Remove and move into 
17983         (Field::Define): here and modify accordingly.
17984         (Field.FieldBuilder): New member.
17985         (TypeContainer::Populate): Update accordingly.
17986         (TypeContainer::FindMembers): Implement.
17987
17988 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
17989
17990         * statement.cs: (VariableInfo::VariableType): New field to be
17991         initialized with the full type once it is resolved. 
17992
17993 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
17994
17995         * parameter.cs (GetParameterInfo): Use a type cache to compute
17996         things only once, and to reuse this information
17997
17998         * expression.cs (LocalVariableReference::Emit): Implement.
17999         (OpcodeCast::Emit): fix.
18000
18001         (ParameterReference::Resolve): Implement.
18002         (ParameterReference::Emit): Implement.
18003
18004         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
18005         that are expressions need to stay as Expressions.
18006
18007         * typemanager.cs (CSharpName): Returns the C# name of a type if
18008         possible. 
18009
18010         * expression.cs (Expression::ConvertImplicit): New function that
18011         implements implicit type conversions.
18012
18013         (Expression::ImplicitReferenceConversion): Implements implicit
18014         reference conversions.
18015
18016         (EmptyCast): New type for transparent casts.
18017
18018         (OpcodeCast): New type for casts of types that are performed with
18019         a sequence of bytecodes.
18020
18021         (BoxedCast): New type used for casting value types into reference
18022         types.  Emits a box opcode.
18023
18024         (Binary::DoNumericPromotions): Implements numeric promotions of
18025         and computation of the Binary::Type.
18026
18027         (Binary::EmitBranchable): Optimization.
18028
18029         (Binary::Emit): Implement code emission for expressions.
18030
18031         * typemanager.cs (TypeManager): Added two new core types: sbyte
18032         and byte.
18033
18034 2001-09-12  Ravi Pratap  <ravi@ximian.com>
18035
18036         * class.cs (TypeContainer::FindMembers): Method which does exactly
18037         what Type.FindMembers does, only we don't have to use reflection. No
18038         implementation yet.
18039
18040         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
18041         typecontainer objects as we need to get at them.
18042         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
18043
18044         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
18045         typecontainer object.
18046
18047         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
18048         of just a Report object.
18049
18050 2001-09-11  Ravi Pratap  <ravi@ximian.com>
18051
18052         * class.cs (Event::Define): Go back to using the prefixes "add_" and
18053         "remove_"
18054         (TypeContainer::Populate): Now define the delegates of the type too.
18055         (TypeContainer.Delegates): Property to access the list of delegates defined
18056         in the type.
18057
18058         * delegates.cs (Delegate::Define): Implement partially.
18059
18060         * modifiers.cs (TypeAttr): Handle more flags.
18061
18062 2001-09-11  Ravi Pratap  <ravi@ximian.com>
18063
18064         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
18065         and not <=
18066         (Operator::Define): Re-write logic to get types by using the LookupType method
18067         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
18068         (Indexer::Define): Ditto.
18069         (Event::Define): Ditto.
18070         (Property::Define): Ditto.
18071
18072 2001-09-10  Ravi Pratap  <ravi@ximian.com>
18073
18074         * class.cs (TypeContainer::Populate): Now define operators too. 
18075         (TypeContainer.Operators): New property to access the list of operators
18076         in a type.
18077         (Operator.OperatorMethodBuilder): New member to hold the method builder
18078         for the operator we are defining.
18079         (Operator::Define): Implement.
18080
18081 2001-09-10  Ravi Pratap  <ravi@ximian.com>
18082
18083         * class.cs (Event::Define): Make the prefixes of the accessor methods
18084         addOn_ and removeOn_ 
18085
18086         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
18087         of the location being passed in too. Ideally, this should go later since all
18088         error reporting should be done through the Report object.
18089
18090         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
18091         (Populate): Iterate thru the indexers we have and define them too.
18092         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
18093         for the get and set accessors.
18094         (Indexer::Define): Implement.
18095
18096 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
18097
18098         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
18099         my previous implementation, did not work.
18100
18101         * typemanager.cs: Add a couple of missing types (the longs).
18102
18103         * literal.cs: Use TypeManager.bool_type instead of getting it.
18104
18105         * expression.cs (EventExpr): New kind of expressions.
18106         (Expressio::ExprClassFromMemberInfo): finish
18107
18108 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
18109
18110         * assign.cs: Emit stores to static fields differently.
18111
18112 2001-09-08  Ravi Pratap  <ravi@ximian.com>
18113
18114         * Merge in changes and adjust code to tackle conflicts. Backed out my
18115         code in Assign::Resolve ;-) 
18116
18117 2001-09-08  Ravi Pratap  <ravi@ximian.com>
18118
18119         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
18120         instead Report.Error and also pass in the location.
18121         (CSharpParser::Lexer): New readonly property to return the reference
18122         to the Tokenizer object.
18123         (declare_local_variables): Use Report.Error with location instead of plain 
18124         old error.
18125         (CheckDef): Ditto.
18126
18127         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
18128         (Operator.CheckBinaryOperator): Ditto.
18129
18130         * cs-parser.jay (operator_declarator): Update accordingly.
18131
18132         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
18133         (CheckBinaryOperator): Same here.
18134
18135         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
18136         on the name without any prefixes of namespace names etc. This is because we
18137         already might have something already fully qualified like 
18138         'System.Console.WriteLine'
18139
18140         * assign.cs (Resolve): Begin implementation. Stuck ;-)
18141
18142 2001-09-07  Ravi Pratap  <ravi@ximian.com>
18143
18144         * cs-tokenizer.cs (location): Return a string which also contains
18145         the file name.
18146
18147         * expression.cs (ElementAccess): New class for expressions of the
18148         type 'element access.'
18149         (BaseAccess): New class for expressions of the type 'base access.'
18150         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
18151         respectively.
18152
18153         * cs-parser.jay (element_access): Implement action.
18154         (base_access): Implement actions.
18155         (checked_expression, unchecked_expression): Implement.
18156
18157         * cs-parser.jay (local_variable_type): Correct and implement.
18158         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
18159
18160         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
18161
18162         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
18163         name and the specifiers.
18164
18165         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
18166
18167         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
18168         making them all public ;-)
18169
18170         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
18171         class anyways.
18172
18173 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
18174
18175         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
18176         PropertyExprs.
18177         (FieldExpr, PropertyExprs): New resolved expressions.
18178         (SimpleName::MemberStaticCheck): Perform static checks for access
18179         to non-static fields on static methods. Maybe this should be
18180         generalized for MemberAccesses. 
18181         (SimpleName::ResolveSimpleName): More work on simple name
18182         resolution. 
18183
18184         * cs-parser.jay (primary_expression/qualified_identifier): track
18185         the parameter index.
18186
18187         * codegen.cs (CodeGen::Save): Catch save exception, report error.
18188         (EmitContext::EmitBoolExpression): Chain to expression generation
18189         instead of temporary hack.
18190         (::EmitStatementExpression): Put generic expression code generation.
18191
18192         * assign.cs (Assign::Emit): Implement variable assignments to
18193         local variables, parameters and fields.
18194
18195 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
18196
18197         * statement.cs (Block::GetVariableInfo): New method, returns the
18198         VariableInfo for a variable name in a block.
18199         (Block::GetVariableType): Implement in terms of GetVariableInfo
18200
18201         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
18202         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
18203
18204 2001-09-06  Ravi Pratap  <ravi@ximian.com>
18205
18206         * cs-parser.jay (operator_declaration): Continue on my quest : update
18207         to take attributes argument.
18208         (event_declaration): Ditto.
18209         (enum_declaration): Ditto.
18210         (indexer_declaration): Ditto.
18211
18212         * class.cs (Operator::Operator): Update constructor accordingly.
18213         (Event::Event): Ditto.
18214
18215         * delegate.cs (Delegate::Delegate): Same here.
18216
18217         * enum.cs (Enum::Enum): Same here.
18218
18219 2001-09-05  Ravi Pratap  <ravi@ximian.com>
18220
18221         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
18222
18223         * ../tests/cs0658.cs : New file to demonstrate error 0658.
18224
18225         * attribute.cs (Attributes): New class to encapsulate all attributes which were
18226         being passed around as an arraylist.
18227         (Attributes::AddAttribute): Method to add attribute sections.
18228
18229         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
18230         (struct_declaration): Update accordingly.
18231         (constant_declaration): Update.
18232         (field_declaration): Update.
18233         (method_header): Update.
18234         (fixed_parameter): Update.
18235         (parameter_array): Ditto.
18236         (property_declaration): Ditto.
18237         (destructor_declaration): Ditto.
18238
18239         * class.cs (Struct::Struct): Update constructors accordingly.
18240         (Class::Class): Ditto.
18241         (Field::Field): Ditto.
18242         (Method::Method): Ditto.
18243         (Property::Property): Ditto.
18244         (TypeContainer::OptAttribute): update property's return type.
18245
18246         * interface.cs (Interface.opt_attributes): New member.
18247         (Interface::Interface): Update to take the extra Attributes argument.
18248
18249         * parameter.cs (Parameter::Parameter): Ditto.
18250
18251         * constant.cs (Constant::Constant): Ditto.
18252
18253         * interface.cs (InterfaceMemberBase): New OptAttributes field.
18254         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
18255         the attributes as a parameter.
18256         (InterfaceProperty): Update constructor call.
18257         (InterfaceEvent): Ditto.
18258         (InterfaceMethod): Ditto.
18259         (InterfaceIndexer): Ditto.
18260
18261         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
18262         pass the attributes too.
18263         (interface_event_declaration): Ditto.
18264         (interface_property_declaration): Ditto.
18265         (interface_method_declaration): Ditto.
18266         (interface_declaration): Ditto.
18267
18268 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
18269
18270         * class.cs (Method::Define): Track the "static Main" definition to
18271         create an entry point. 
18272
18273         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
18274         EntryPoint if we find it. 
18275
18276         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
18277         (EmitContext::ig): Make this variable public.
18278
18279         * driver.cs: Make the default output file be the first file name
18280         with the .exe extension.  
18281
18282         Detect empty compilations
18283
18284         Handle various kinds of output targets.  Handle --target and
18285         rename -t to --dumper.
18286
18287         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
18288         methods inherited from Expression return now an Expression.  This
18289         will is used during the tree rewriting as we resolve them during
18290         semantic analysis.
18291
18292         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
18293         the spec.  Missing entirely is the information about
18294         accessability of elements of it.
18295
18296         (Expression::ExprClassFromMemberInfo): New constructor for
18297         Expressions that creates a fully initialized Expression based on
18298         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
18299         a Type.
18300
18301         (Invocation::Resolve): Begin implementing resolution of invocations.
18302
18303         * literal.cs (StringLiteral):  Implement Emit.
18304
18305 2001-09-05  Ravi Pratap  <ravi@ximian.com>
18306
18307         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
18308         member.
18309
18310 2001-09-04  Ravi Pratap  <ravi@ximian.com>
18311
18312         * cs-parser.jay (attribute_arguments): Implement actions.
18313         (attribute): Fix bug in production. Implement action.
18314         (attribute_list): Implement.
18315         (attribute_target): Implement.
18316         (attribute_target_specifier, opt_target_specifier): Implement
18317         (CheckAttributeTarget): New method to check if the attribute target
18318         is valid.
18319         (attribute_section): Implement.
18320         (opt_attributes): Implement.
18321
18322         * attribute.cs : New file to handle attributes.
18323         (Attribute): Class to hold attribute info.
18324
18325         * cs-parser.jay (opt_attribute_target_specifier): Remove production
18326         (attribute_section): Modify production to use 2 different rules to 
18327         achieve the same thing. 1 s/r conflict down !
18328         Clean out commented, useless, non-reducing dimension_separator rules.
18329
18330         * class.cs (TypeContainer.attributes): New member to hold list
18331         of attributes for a type.
18332         (Struct::Struct): Modify to take one more argument, the attribute list.
18333         (Class::Class): Ditto.
18334         (Field::Field): Ditto.
18335         (Method::Method): Ditto.
18336         (Property::Property): Ditto.
18337
18338         * cs-parser.jay (struct_declaration): Update constructor call to
18339         pass in the attributes too.
18340         (class_declaration): Ditto.
18341         (constant_declaration): Ditto.
18342         (field_declaration): Ditto.
18343         (method_header): Ditto.
18344         (fixed_parameter): Ditto.
18345         (parameter_array): Ditto.
18346         (property_declaration): Ditto.
18347
18348         * constant.cs (Constant::Constant): Update constructor similarly.
18349         Use System.Collections.
18350
18351         * parameter.cs (Parameter::Parameter): Update as above.
18352
18353 2001-09-02  Ravi Pratap  <ravi@ximian.com>
18354
18355         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
18356         (TypeContainer.delegates): New member to hold list of delegates.
18357
18358         * cs-parser.jay (delegate_declaration): Implement the action correctly 
18359         this time as I seem to be on crack ;-)
18360
18361 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
18362
18363         * rootcontext.cs (RootContext::IsNamespace): new function, used to
18364         tell whether an identifier represents a namespace.
18365
18366         * expression.cs (NamespaceExpr): A namespace expression, used only
18367         temporarly during expression resolution.
18368         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
18369         utility functions to resolve names on expressions.
18370
18371 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
18372
18373         * codegen.cs: Add hook for StatementExpressions. 
18374
18375         * class.cs: Fix inverted test for static flag in methods.
18376
18377 2001-09-02  Ravi Pratap  <ravi@ximian.com>
18378
18379         * class.cs (Operator::CheckUnaryOperator): Correct error number used
18380         to make it coincide with MS' number.
18381         (Operator::CheckBinaryOperator): Ditto.
18382
18383         * ../errors/errors.txt : Remove error numbers added earlier.
18384
18385         * ../errors/cs1019.cs : Test case for error # 1019
18386
18387         * ../errros/cs1020.cs : Test case for error # 1020
18388
18389         * cs-parser.jay : Clean out commented cruft.
18390         (dimension_separators, dimension_separator): Comment out. Ostensibly not
18391         used anywhere - non-reducing rule.
18392         (namespace_declarations): Non-reducing rule - comment out.
18393
18394         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
18395         with TypeContainer::AddEnum.
18396
18397         * delegate.cs : New file for delegate handling classes.
18398         (Delegate): Class for declaring delegates.
18399
18400         * makefile : Update.
18401
18402         * cs-parser.jay (delegate_declaration): Implement.
18403
18404 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
18405
18406         * class.cs (Event::Define): Implement.
18407         (Event.EventBuilder): New member.
18408
18409         * class.cs (TypeContainer::Populate): Update to define all enums and events
18410         we have.
18411         (Events): New property for the events arraylist we hold. Shouldn't we move to using
18412         readonly fields for all these cases ?
18413
18414 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
18415
18416         * class.cs (Property): Revamp to use the convention of making fields readonly.
18417         Accordingly modify code elsewhere.
18418
18419         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
18420         the Define method of the Property class.
18421
18422         * class.cs : Clean up applied patch and update references to variables etc. Fix 
18423         trivial bug.
18424         (TypeContainer::Populate): Update to define all the properties we have. Also
18425         define all enumerations.
18426
18427         * enum.cs (Define): Implement.
18428
18429 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
18430
18431         * cs-parser.jay (overloadable_operator): The semantic value is an
18432         enum of the Operator class.
18433         (operator_declarator): Implement actions.
18434         (operator_declaration): Implement.
18435
18436         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
18437         validity of definitions.
18438         (Operator::CheckBinaryOperator): Static method to check for binary operators
18439         (TypeContainer::AddOperator): New method to add an operator to a type.
18440
18441         * cs-parser.jay (indexer_declaration): Added line to actually call the
18442         AddIndexer method so it gets added ;-)
18443
18444         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
18445         already taken care of by the MS compiler ?  
18446
18447 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
18448
18449         * class.cs (Operator): New class for operator declarations.
18450         (Operator::OpType): Enum for the various operators.
18451
18452 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
18453
18454         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
18455         ostensibly handle this in semantic analysis.
18456
18457         * cs-parser.jay (general_catch_clause): Comment out
18458         (specific_catch_clauses, specific_catch_clause): Ditto.
18459         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
18460         (catch_args, opt_catch_args): New productions.
18461         (catch_clause): Rewrite to use the new productions above
18462         (catch_clauses): Modify accordingly.
18463         (opt_catch_clauses): New production to use in try_statement
18464         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
18465         and re-write the code in the actions to extract the specific and
18466         general catch clauses by being a little smart ;-)
18467
18468         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
18469         Hooray, try and catch statements parse fine !
18470
18471 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
18472
18473         * statement.cs (Block::GetVariableType): Fix logic to extract the type
18474         string from the hashtable of variables.
18475
18476         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
18477         I end up making that mistake ;-)
18478         (catch_clauses): Fixed gross error which made Key and Value of the 
18479         DictionaryEntry the same : $1 !!
18480
18481 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
18482
18483         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
18484
18485         * cs-parser.jay (event_declaration): Correct to remove the semicolon
18486         when the add and remove accessors are specified. 
18487
18488 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
18489
18490         * cs-parser.jay (IndexerDeclaration): New helper class to hold
18491         information about indexer_declarator.
18492         (indexer_declarator): Implement actions.
18493         (parsing_indexer): New local boolean used to keep track of whether
18494         we are parsing indexers or properties. This is necessary because 
18495         implicit_parameters come into picture even for the get accessor in the 
18496         case of an indexer.
18497         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
18498
18499         * class.cs (Indexer): New class for indexer declarations.
18500         (TypeContainer::AddIndexer): New method to add an indexer to a type.
18501         (TypeContainer::indexers): New member to hold list of indexers for the
18502         type.
18503
18504 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
18505
18506         * cs-parser.jay (add_accessor_declaration): Implement action.
18507         (remove_accessor_declaration): Implement action.
18508         (event_accessors_declaration): Implement
18509         (variable_declarators): swap statements for first rule - trivial.
18510
18511         * class.cs (Event): New class to hold information about event
18512         declarations.
18513         (TypeContainer::AddEvent): New method to add an event to a type
18514         (TypeContainer::events): New member to hold list of events.
18515
18516         * cs-parser.jay (event_declaration): Implement actions.
18517
18518 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
18519
18520         * cs-parser.jay (dim_separators): Implement. Make it a string
18521         concatenating all the commas together, just as they appear.
18522         (opt_dim_separators): Modify accordingly
18523         (rank_specifiers): Update accordingly. Basically do the same
18524         thing - instead, collect the brackets here.
18525         (opt_rank_sepcifiers): Modify accordingly.
18526         (array_type): Modify to actually return the complete type string
18527         instead of ignoring the rank_specifiers.
18528         (expression_list): Implement to collect the expressions
18529         (variable_initializer): Implement. We make it a list of expressions
18530         essentially so that we can handle the array_initializer case neatly too.
18531         (variable_initializer_list): Implement.
18532         (array_initializer): Make it a list of variable_initializers
18533         (opt_array_initializer): Modify accordingly.
18534
18535         * expression.cs (New::NType): Add enumeration to help us
18536         keep track of whether we have an object/delegate creation
18537         or an array creation.
18538         (New:NewType, New::Rank, New::Indices, New::Initializers): New
18539         members to hold data about array creation.
18540         (New:New): Modify to update NewType
18541         (New:New): New Overloaded contructor for the array creation
18542         case.
18543
18544         * cs-parser.jay (array_creation_expression): Implement to call
18545         the overloaded New constructor.
18546
18547 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
18548
18549         * class.cs (TypeContainer::Constructors): Return member
18550         constructors instead of returning null.
18551
18552 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
18553
18554         * typemanager.cs (InitCoreTypes): Initialize the various core
18555         types after we have populated the type manager with the user
18556         defined types (this distinction will be important later while
18557         compiling corlib.dll)
18558
18559         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
18560         on Expression Classification.  Now all expressions have a method
18561         `Resolve' and a method `Emit'.
18562
18563         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
18564         generation from working.     Also add some temporary debugging
18565         code. 
18566
18567 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
18568
18569         * codegen.cs: Lots of code generation pieces.  This is only the
18570         beginning, will continue tomorrow with more touches of polish.  We
18571         handle the fundamentals of if, while, do, for, return.  Others are
18572         trickier and I need to start working on invocations soon.
18573
18574         * gen-treedump.cs: Bug fix, use s.Increment here instead of
18575         s.InitStatement. 
18576
18577         * codegen.cs (EmitContext): New struct, used during code
18578         emission to keep a context.   Most of the code generation will be
18579         here. 
18580
18581         * cs-parser.jay: Add embedded blocks to the list of statements of
18582         this block.  So code generation proceeds in a top down fashion.
18583
18584 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
18585
18586         * statement.cs: Add support for multiple child blocks.
18587
18588 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
18589
18590         * codegen.cs (EmitCode): New function, will emit the code for a
18591         Block of code given a TypeContainer and its ILGenerator. 
18592
18593         * statement.cs (Block): Standard public readonly optimization.
18594         (Block::Block constructors): Link children. 
18595         (Block::Child): Child Linker.
18596         (Block::EmitVariables): Emits IL variable declarations.
18597
18598         * class.cs: Drop support for MethodGroups here, delay until
18599         Semantic Analysis.
18600         (Method::): Applied the same simplification that I did before, and
18601         move from Properties to public readonly fields.
18602         (Method::ParameterTypes): Returns the parameter types for the
18603         function, and implements a cache that will be useful later when I
18604         do error checking and the semantic analysis on the methods is
18605         performed.
18606         (Constructor::GetCallingConvention): Renamed from CallingConvetion
18607         and made a method, optional argument tells whether this is a class
18608         or a structure to apply the `has-this' bit.
18609         (Method::GetCallingConvention): Implement, returns the calling
18610         convention. 
18611         (Method::Define): Defines the type, a second pass is performed
18612         later to populate the methods.
18613
18614         (Constructor::ParameterTypes): implement a cache similar to the
18615         one on Method::ParameterTypes, useful later when we do semantic
18616         analysis. 
18617
18618         (TypeContainer::EmitMethod):  New method.  Emits methods.
18619
18620         * expression.cs: Removed MethodGroup class from here.
18621
18622         * parameter.cs (Parameters::GetCallingConvention): new method.
18623
18624 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
18625
18626         * class.cs (TypeContainer::Populate): Drop RootContext from the
18627         argument. 
18628
18629         (Constructor::CallingConvention): Returns the calling convention.
18630         (Constructor::ParameterTypes): Returns the constructor parameter
18631         types. 
18632
18633         (TypeContainer::AddConstructor): Keep track of default constructor
18634         and the default static constructor.
18635
18636         (Constructor::) Another class that starts using `public readonly'
18637         instead of properties. 
18638
18639         (Constructor::IsDefault): Whether this is a default constructor. 
18640
18641         (Field::) use readonly public fields instead of properties also.
18642
18643         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
18644         track of static constructors;  If none is used, turn on
18645         BeforeFieldInit in the TypeAttributes. 
18646
18647         * cs-parser.jay (opt_argument_list): now the return can be null
18648         for the cases where there are no arguments. 
18649
18650         (constructor_declarator): If there is no implicit `base' or
18651         `this', then invoke the default parent constructor. 
18652
18653         * modifiers.cs (MethodAttr): New static function maps a set of
18654         modifiers flags into a MethodAttributes enum
18655         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
18656         MethodAttr, TypeAttr to represent the various mappings where the
18657         modifiers are used.
18658         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
18659
18660 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
18661
18662         * parameter.cs (GetParameterInfo): Fix bug where there would be no
18663         method arguments.
18664
18665         * interface.cs (PopulateIndexer): Implemented the code generator
18666         for interface indexers.
18667
18668 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
18669
18670         * interface.cs (InterfaceMemberBase): Now we track the new status
18671         here.  
18672
18673         (PopulateProperty): Implement property population.  Woohoo!  Got
18674         Methods and Properties going today. 
18675
18676         Removed all the properties for interfaces, and replaced them with
18677         `public readonly' fields. 
18678
18679 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
18680
18681         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
18682         initialize their hashtables/arraylists only when they are needed
18683         instead of doing this always.
18684
18685         * parameter.cs: Handle refs and out parameters.
18686
18687         * cs-parser.jay: Use an ArrayList to construct the arguments
18688         instead of the ParameterCollection, and then cast that to a
18689         Parameter[] array.
18690
18691         * parameter.cs: Drop the use of ParameterCollection and use
18692         instead arrays of Parameters.
18693
18694         (GetParameterInfo): Use the Type, not the Name when resolving
18695         types. 
18696
18697 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
18698
18699         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
18700         and instead use public readonly fields.
18701
18702         * class.cs: Put back walking code for type containers.
18703
18704 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
18705
18706         * class.cs (MakeConstant): Code to define constants.
18707
18708         * rootcontext.cs (LookupType): New function.  Used to locate types 
18709
18710
18711 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
18712
18713         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
18714         this System.Reflection code is.  Kudos to Microsoft
18715
18716         * typemanager.cs: Implement a type cache and avoid loading all
18717         types at boot time.  Wrap in LookupType the internals.  This made
18718         the compiler so much faster.  Wow.  I rule!
18719
18720         * driver.cs: Make sure we always load mscorlib first (for
18721         debugging purposes, nothing really important).
18722
18723         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
18724         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
18725
18726         * rootcontext.cs: Lookup types on their namespace;  Lookup types
18727         on namespaces that have been imported using the `using' keyword.
18728
18729         * class.cs (TypeContainer::TypeAttr): Virtualize.
18730         (Class::TypeAttr): Return attributes suitable for this bad boy.
18731         (Struct::TypeAttr): ditto.
18732         Handle nested classes.
18733         (TypeContainer::) Remove all the type visiting code, it is now
18734         replaced with the rootcontext.cs code
18735
18736         * rootcontext.cs (GetClassBases): Added support for structs. 
18737
18738 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
18739
18740         * interface.cs, statement.cs, class.cs, parameter.cs,
18741         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
18742         Drop use of TypeRefs, and use strings instead.
18743
18744 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
18745
18746         * rootcontext.cs: 
18747
18748         * class.cs (Struct::Struct): set the SEALED flags after
18749         checking the modifiers.
18750         (TypeContainer::TypeAttr): new property, returns the
18751         TypeAttributes for a class.  
18752
18753         * cs-parser.jay (type_list): Oops, list production was creating a
18754         new list of base types.
18755
18756         * rootcontext.cs (StdLib): New property.
18757         (GetInterfaceTypeByName): returns an interface by type name, and
18758         encapsulates error handling here.
18759         (GetInterfaces): simplified.
18760         (ResolveTree): Encapsulated all the tree resolution here.
18761         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
18762         types. 
18763
18764         * driver.cs: Add support for --nostdlib, to avoid loading the
18765         default assemblies.
18766         (Main): Do not put tree resolution here. 
18767
18768         * rootcontext.cs: Beginning of the class resolution.
18769
18770 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
18771
18772         * rootcontext.cs: Provide better error reporting. 
18773
18774         * cs-parser.jay (interface_base): set our $$ to be interfaces.
18775
18776         * rootcontext.cs (CreateInterface): Handle the case where there
18777         are no parent interfaces.
18778
18779         (CloseTypes): Routine to flush types at the end.
18780         (CreateInterface): Track types.
18781         (GetInterfaces): Returns an array of Types from the list of
18782         defined interfaces.
18783
18784         * typemanager.c (AddUserType): Mechanism to track user types (puts
18785         the type on the global type hash, and allows us to close it at the
18786         end). 
18787
18788 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
18789
18790         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
18791         RecordInterface instead.
18792
18793         * cs-parser.jay: Updated to reflect changes above.
18794
18795         * decl.cs (Definition): Keep track of the TypeBuilder type that
18796         represents this type here.  Not sure we will use it in the long
18797         run, but wont hurt for now.
18798
18799         * driver.cs: Smaller changes to accomodate the new code.
18800
18801         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
18802         when done. 
18803
18804         * rootcontext.cs (CreateInterface):  New method, used to create
18805         the System.TypeBuilder type for interfaces.
18806         (ResolveInterfaces): new entry point to resolve the interface
18807         hierarchy. 
18808         (CodeGen): Property, used to keep track of the code generator.
18809
18810 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
18811
18812         * cs-parser.jay: Add a second production for delegate_declaration
18813         with `VOID'.
18814
18815         (enum_body): Put an opt_comma here instead of putting it on
18816         enum_body or enum_member_declarations so we can handle trailing
18817         commas on enumeration members.  Gets rid of a shift/reduce.
18818
18819         (type_list): Need a COMMA in the middle.
18820
18821         (indexer_declaration): Tell tokenizer to recognize get/set
18822
18823         * Remove old targets.
18824
18825         * Re-add the parser target.
18826
18827 2001-07-13  Simon Cozens <simon@simon-cozens.org>
18828
18829         * cs-parser.jay: Add precendence rules for a number of operators
18830         ot reduce the number of shift/reduce conflicts in the grammar.
18831
18832 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
18833
18834         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
18835         and put it here.
18836
18837         Get rid of old crufty code.
18838
18839         * rootcontext.cs: Use this to keep track of the parsed
18840         representation and the defined types available to the program. 
18841
18842         * gen-treedump.cs: adjust for new convention.
18843
18844         * type.cs: Split out the type manager, and the assembly builder
18845         from here. 
18846
18847         * typemanager.cs: the type manager will live here now.
18848
18849         * cil-codegen.cs: And the code generator here. 
18850
18851 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
18852
18853         * makefile: Fixed up for easy making.
18854
18855 2001-07-13  Simon Cozens <simon@simon-cozens.org>
18856
18857         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
18858         the 
18859
18860         (unary_expression): Expand pre_increment_expression and
18861         post_decrement_expression to reduce a shift/reduce.
18862
18863 2001-07-11  Simon Cozens
18864
18865         * cs-tokenizer.cs: Hex numbers should begin with a 0.
18866
18867         Improve allow_keyword_as_indent name.
18868
18869 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
18870
18871         * Adjustments for Beta2. 
18872
18873 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
18874
18875         * decl.cs: Added `Define' abstract method.
18876         (InTransit): new property, used to catch recursive definitions. 
18877
18878         * interface.cs: Implement `Define'. 
18879
18880         * modifiers.cs: Map Modifiers.constants to
18881         System.Reflection.TypeAttribute flags.
18882
18883         * class.cs: Keep track of types and user-defined types.
18884         (BuilderInit): New method for creating an assembly
18885         (ResolveType): New function to launch the resolution process, only
18886         used by interfaces for now.
18887
18888         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
18889         that are inserted into the name space. 
18890
18891 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
18892
18893         * ARGH.  I have screwed up my tree so many times due to the use of
18894         rsync rather than using CVS.  Going to fix this at once. 
18895
18896         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
18897         load types.
18898
18899 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
18900
18901         * Experiment successful: Use System.Type rather that our own
18902         version of Type.  
18903
18904 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
18905
18906         * cs-parser.jay: Removed nsAliases from here.
18907
18908         Use new namespaces, handle `using XXX;' 
18909
18910         * namespace.cs: Reimplemented namespace handling, use a recursive
18911         definition of the class.  Now we can keep track of using clauses
18912         and catch invalid using clauses.
18913
18914 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
18915
18916         * gen-treedump.cs: Adapted for all the renaming.
18917
18918         * expression.cs (Expression): this class now has a Type property
18919         which returns an expression Type.
18920
18921         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
18922         `Type', as this has a different meaning now in the base
18923
18924 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
18925
18926         * interface.cs, class.cs: Removed from all the sources the
18927         references to signature computation, as we can not do method
18928         signature computation during the parsing time, as we are not
18929         trying to solve at that point distinguishing:
18930
18931         class X {
18932                 void a (Blah x) {}
18933                 void a (NS.Blah x) {}
18934         }
18935
18936         Which depending on the context might be valid or not, as we do not
18937         know if Blah is the same thing as NS.Blah at that point.
18938
18939         * Redid everything so the code uses TypeRefs now instead of
18940         Types.  TypeRefs are just temporary type placeholders, that need
18941         to be resolved.  They initially have a pointer to a string and the
18942         current scope in which they are used.  This is used later by the
18943         compiler to resolve the reference to an actual Type. 
18944
18945         * DeclSpace is no longer a CIR.Type, and neither are
18946         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
18947         are all DeclSpaces, but no Types. 
18948
18949         * type.cs (TypeRefManager): This implements the TypeRef manager,
18950         which keeps track of all the types that need to be resolved after
18951         the parsing has finished. 
18952
18953 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
18954
18955         * ARGH.  We are going to have to store `foreach' as a class rather
18956         than resolving it, as we need to verify error 1579 after name
18957         resolution.   *OR* we could keep a flag that says `This request to
18958         IEnumerator comes from a foreach statement' which we can then use
18959         to generate the error.
18960
18961 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
18962
18963         * class.cs (TypeContainer.AddMethod): we now add methods to the
18964         MethodGroup instead of the method hashtable.  
18965
18966         * expression.cs: Add MethodGroup abstraction, which gets us one
18967         step closer to the specification in the way we handle method
18968         declarations.  
18969
18970         * cs-parser.jay (primary_expression): qualified_identifier now
18971         tried to match up an identifier to a local variable reference or
18972         to a parameter reference.
18973
18974         current_local_parameters is now a parser global variable that
18975         points to the current parameters for the block, used during name
18976         lookup.
18977
18978         (property_declaration): Now creates an implicit `value' argument to
18979         the set accessor.
18980
18981 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
18982
18983         * parameter.cs: Do not use `param' arguments as part of the
18984         signature, per the spec.
18985
18986 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
18987
18988         * decl.cs: Base class for classes, structs and interfaces.  This
18989         is the "Declaration Space" 
18990
18991         * cs-parser.jay: Use CheckDef for checking declaration errors
18992         instead of having one on each function.
18993
18994         * class.cs: Factor out some code for handling error handling in
18995         accordance to the "Declarations" section in the "Basic Concepts"
18996         chapter in the ECMA C# spec.
18997
18998         * interface.cs: Make all interface member classes derive from
18999         InterfaceMemberBase.
19000
19001 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
19002
19003         * Many things: all interfaces are parsed and generated in
19004         gen-treedump.  Support for member variables, constructors,
19005         destructors, properties, constants is there.
19006
19007         Beginning of the IL backend, but very little done, just there for
19008         testing purposes. 
19009
19010 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
19011
19012         * cs-parser.jay: Fix labeled statement.
19013
19014         * cs-tokenizer.cs (escape): Escape " and ' always.
19015         ref_line, ref_name: keep track of the line/filename as instructed
19016         by #line by the compiler.
19017         Parse #line.
19018
19019 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
19020
19021         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
19022         to match the values in System.CodeDOM.
19023
19024         Divid renamed to Divide.
19025
19026         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
19027         statements. 
19028         (Statements.set): remove.
19029
19030         * System.CodeDOM/CodeCatchClause.cs: always have a valid
19031         statements. 
19032
19033         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
19034         falseStatements always have valid values. 
19035
19036         * cs-parser.jay: Use System.CodeDOM now.
19037