**** Merged from MCS ****
[mono.git] / mcs / gmcs / ChangeLog
1 2004-10-18  Raja R Harinath  <rharinath@novell.com>
2
3         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
4         the ResolveType.
5
6 2004-10-17  John Luke  <john.luke@gmail.com>
7
8         * class.cs (Operator.GetSignatureForError): use CSharpName
9
10         * parameter.cs (Parameter.GetSignatureForError): Returns
11         correct name even if was not defined.
12
13 2004-10-13  Raja R Harinath  <rharinath@novell.com>
14
15         Fix #65816.
16         * class.cs (TypeContainer.EmitContext): New property.
17         (DefineNestedTypes): Create an emitcontext for each part.
18         (MethodCore.DoDefineParameters): Use container's emitcontext.
19         Pass type array to InternalParameters.
20         (MemberBase.DoDefine): Use container's emitcontext.
21         (FieldMember.Define): Likewise.
22         (Event.Define): Likewise.
23         (SetMethod.GetParameterInfo): Change argument to EmitContext.
24         Pass type array to InternalParameters.
25         (SetIndexerMethod.GetParameterInfo): Likewise.
26         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
27         * delegate.cs (Define): Pass emitcontext to
28         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
29         array to InternalParameters.
30         * expression.cs (ParameterReference.DoResolveBase): Pass
31         emitcontext to GetParameterInfo.
32         (ComposedCast.DoResolveAsTypeStep): Remove check on
33         ec.ResolvingTypeTree.
34         * parameter.cs (Parameter.Resolve): Change argument to
35         EmitContext.  Use ResolveAsTypeTerminal.
36         (Parameter.GetSignature): Change argument to EmitContext.
37         (Parameters.ComputeSignature): Likewise.
38         (Parameters.ComputeParameterTypes): Likewise.
39         (Parameters.GetParameterInfo): Likewise.
40         (Parameters.ComputeAndDefineParameterTypes): Likewise.
41         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
42         * support.cs (InternalParameters..ctor): Remove variant that takes
43         a DeclSpace.
44         * typemanager.cs (system_intptr_expr): New.
45         (InitExpressionTypes): Initialize it.
46
47 2004-10-12  Chris Toshok  <toshok@ximian.com>
48
49         * cs-parser.jay: fix location for try_statement and catch_clause.
50
51 2004-10-18  Martin Baulig  <martin@ximian.com>
52
53         * class.cs (FieldMember.Define): Don't access the TypeExpr's
54         `Type' directly, but call ResolveType() on it.
55         (MemberBase.DoDefine): Likewise.
56
57         * expression.cs (New.DoResolve): Don't access the TypeExpr's
58         `Type' directly, but call ResolveType() on it.
59         (ComposedCast.DoResolveAsTypeStep): Likewise.
60
61         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
62         `Type' directly, but call ResolveType() on it.
63
64 2004-10-07  Raja R Harinath  <rharinath@novell.com>
65
66         More DeclSpace.ResolveType avoidance.
67         * decl.cs (MemberCore.InUnsafe): New property.
68         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
69         with newly created EmitContext.
70         (FieldMember.Define): Likewise.
71         * delegate.cs (Delegate.Define): Likewise.
72         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
73         only if normal name-lookup fails.
74         (TypeExpr.DoResolve): Enable error-checking.
75         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
76         (SizeOf.DoResolve): Likewise.
77         (ComposedCast.DoResolveAsTypeStep): Likewise.
78         (StackAlloc.DoResolve): Likewise.
79         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
80         (Block.Unsafe): New property.
81         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
82         (Unsafe): Set 'unsafe' flag of contained block.
83         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
84         (Fixed.Resolve): Likewise.
85         (Catch.Resolve): Likewise.
86         (Using.ResolveLocalVariableDecls): Likewise.
87         (Foreach.Resolve): Likewise.
88
89 2004-10-05  John Luke <john.luke@gmail.com>
90
91         * cs-parser.jay: add location to error CS0175
92
93 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
94
95         * ecore.cs (Expression.Constantity): Add support for turning null
96         into a constant.
97
98         * const.cs (Const.Define): Allow constants to be reference types
99         as long as the value is Null.
100
101 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
102
103         * namespace.cs (NamespaceEntry.Using): No matter which warning
104         level is set, check if this namespace name has already been added.
105
106 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
107
108         * expression.cs: reftype [!=]= null should always use br[true,false].
109         # 67410
110
111 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
112
113         Fix #67108
114         * attribute.cs: Enum conversion moved to 
115         GetAttributeArgumentExpression to be applied to the all
116         expressions.
117
118 2004-10-01  Raja R Harinath  <rharinath@novell.com>
119
120         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
121         * class.c (TypeContainer.DefineType): Flag error if
122         base types aren't accessible due to access permissions.
123         * decl.cs (DeclSpace.ResolveType): Move logic to
124         Expression.ResolveAsTypeTerminal.
125         (DeclSpace.ResolveTypeExpr): Thin layer over
126         Expression.ResolveAsTypeTerminal.
127         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
128         Refactor code into NestedAccess.  Use it.
129         (DeclSpace.NestedAccess): New.
130         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
131         argument to silence errors.  Check access permissions.
132         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
133         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
134         (Cast.DoResolve): Likewise.
135         (New.DoResolve): Likewise.
136         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
137         (TypeOf.DoResolve): Likewise.
138
139         * expression.cs (Invocation.BetterConversion): Return the Type of
140         the better conversion.  Implement section 14.4.2.3 more faithfully.
141         (Invocation.BetterFunction): Make boolean.  Make correspondence to
142         section 14.4.2.2 explicit.
143         (Invocation.OverloadResolve): Update.
144         (Invocation): Remove is_base field.
145         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
146         (Invocation.Emit): Likewise.
147
148 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
149
150         * cs-parser.jay: Reverted 642 warning fix.
151
152 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
153
154         Fix bug #66615
155         * decl.cs (FindMemberWithSameName): Indexer can have more than
156         1 argument.
157
158 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
159
160         * expression.cs (LocalVariableReference.DoResolveLValue):
161         Do not report warning 219 for out values.
162         (EmptyExpression.Null): New member to avoid extra allocations.
163
164 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
165
166         * cs-parser.jay: Fix wrong warning 642 report.
167
168         * cs-tokenizer.cs (CheckNextToken): New helper;
169         Inspect next character if is same as expected.
170
171 2004-09-23  Martin Baulig  <martin@ximian.com>
172
173         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
174         (Convert.ImplicitReferenceConversionExists): Likewise.
175
176 2004-10-13  Martin Baulig  <martin@ximian.com>
177
178         * generic.cs (TypeManager.InflatedConstraints): New nested class.
179         (TypeParameter.DefineType): If we're a method type parameter and
180         that method is overriding something, "inflate" its constraints.
181
182 2004-10-12  Martin Baulig  <martin@ximian.com>
183
184         * expression.cs (MemberAccess.DoResolve): If we're a SimpleName
185         and have type arguments, create and resolve a ConstructedType.
186
187 2004-10-12  Martin Baulig  <martin@ximian.com>
188
189         * decl.cs (MemberCache.FindMemberToOverride): Use
190         TypeManager.IsEqual() to compare the parameters and Type.Equals()
191         to compare the invocationType.
192
193         * typemanager.cs (TypeManager.IsEqual): Added support for arrays.
194         When comparing two type parameters, only do the signature-only
195         comparision for method type parameters.
196
197 2004-10-11  Martin Baulig  <martin@ximian.com>
198
199         * report.cs: Don't make --fatal abort on warnings, we have
200         -warnaserror for that.
201
202 2004-10-11  Martin Baulig  <martin@ximian.com>
203
204         * typemanager.cs
205         (TypeManager.IsEqualGenericType): Removed, use IsEqual() instead.
206         (TypeManager.IsEqual): Call ourself recursively instead of using
207         Type.IsEqual(). 
208
209 2004-10-11  Martin Baulig  <martin@ximian.com>
210
211         * class.cs (TypeContainer.DefineType): Only call TypeParameter.Define()
212         on our own type parameters, not on the ones we inherit from a containing
213         class.
214
215         * expression.cs (Invocation.InferType): Use `==', not `Equals()' for
216         the comparision.
217
218         * generic.cs (TypeParameter.Define): We may only be called once.
219
220         * pending.cs (Pending.InterfaceMethod): Call TypeManager.Real_IsEqual()
221         instead of TypeManager.IsEqual().
222
223 2004-09-28  Martin Baulig  <martin@ximian.com>
224
225         * generic.cs
226         (GenericConstraints.EffectiveBaseClass): New public property.
227         (TypeParameter.GenericConstraints): New public property.
228         (ConstructedType.CheckConstraints): Improved.
229
230         * convert.cs (Convert.TypeParam_EffectiveBaseType): New private method.
231         (Convert.TypeParameterConversion): New private method; use this in
232         ImplicitReferenceConversion() and ImplicitReferenceConversionExists()
233         for all conversions related to type parameters.
234
235 2004-09-24  Martin Baulig  <martin@ximian.com>
236
237         * convert.cs (Convert.ImplicitReferenceConversion): Added implicit
238         type parameter conversions for type parameters which are known to
239         be reference types.
240
241 2004-09-24  Martin Baulig  <martin@ximian.com>
242
243         * generic.cs (GenericConstraints): Added `IsReferenceType' and
244         `IsValueType' properties.
245
246         * support.cs (ReflectionConstraints): Use
247         Type.GetGenericParameterConstraints() instead of the old hack.
248
249 2004-09-24  Martin Baulig  <martin@ximian.com>
250
251         * generic.cs (GenericConstraints): Moved here and made it an
252         abstract class.
253
254         * support.cs (GenericConstraints): Moved to generic.cs.
255
256 2004-09-24  Martin Baulig  <martin@ximian.com>
257
258         * support.cs
259         (ReflectionConstraints): Un-nested this class and made it public.
260
261         * typemanager.cs
262         (TypeManager.GetTypeParameterConstraints): New public method.
263         (TypeManager.HasConstructorConstraint): Use the attributes.
264
265 2004-09-24  Martin Baulig  <martin@ximian.com>
266
267         * support.cs (GenericConstraints): Replaced `HasConstructor',
268         `IsReferenceType' and `IsValueType' with `Attributes'.
269         (ReflectionParameters.ReflectionConstraints): Removed the Create()
270         method and made the .ctor public.
271
272         * generic.cs (Constraints.Attributes): New public property.
273         (Constraints): Renamed `HasConstructor' -> `HasConstructorConstraint',
274         `IsReferenceType' -> `HasReferenceTypeConstraint' and
275         `IsValueType' -> `HasValueTypeConstraint'.
276
277 2004-09-23  Martin Baulig  <martin@ximian.com>
278
279         * generic.cs (Constraints): Reflect latest runtime changes.
280
281 2004-09-23  Martin Baulig  <martin@ximian.com>
282
283         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
284         (Convert.ImplicitReferenceConversionExists): Likewise.
285
286 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
287
288         * class.cs (Operator.Define): Add error 448 and 559 report.
289         
290 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
291
292         * class.cs (MemberBase.IsTypePermitted): New protected
293         method for checking error CS0610.
294
295 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
296
297         * class.cs (TypeContainer.HasExplicitLayout): New property
298         Returns whether container has StructLayout attribute set Explicit.
299         (FieldMember): New abstract class for consts and fields.
300         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
301         (Field): Reuse FieldMember.
302
303         * const.cs (Const): Reuse FieldMember.
304
305         * rootcontext.cs: EmitConstants call moved to class.
306
307 2004-09-22  Martin Baulig  <martin@ximian.com>
308
309         Marek and me just fixed one of our oldest bugs: #28562 :-)
310
311         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
312
313         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
314         we're an EnumConstant, just return that.
315         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
316         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
317         to get the value which'll actually be written into the attribute.
318         However, we have to use GetValue() to access the attribute's value
319         in the compiler.        
320
321 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
322
323         * constant.cs (Constant.IsNegative): New abstract property
324         IsNegative.
325
326         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
327         (StackAlloc.DoResolve): Reused IsNegative.
328
329 2004-09-22  Martin Baulig  <martin@ximian.com>
330
331         * typemanager.cs (TypeManager.LookupGenericTypeContainer): New
332         public method; like LookupTypeContainer, but also works for
333         generic instances.
334
335         * report.cs (Report.SymbolRelatedToPreviousError): Use
336         TypeManager.LookupGenericTypeContainer().       
337
338 2004-09-22  Martin Baulig  <martin@ximian.com>
339
340         Thanks to Peter Sestoft for this bug report.
341
342         * expression.cs (Conditional): If both the `trueExpr' and the
343         `falseExpr' is a NullLiteral, return a NullLiteral.
344
345 2004-09-22  Martin Baulig  <martin@ximian.com>
346
347         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
348         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
349         for the "get_Current" call.
350
351 2004-09-21  Martin Baulig  <martin@ximian.com>
352
353         * convert.cs (Convert.ImplicitReferenceConversion): When
354         converting to an interface type, first check whether we're
355         converting from a reference type.
356
357 2004-09-14  Martin Baulig  <martin@ximian.com>
358
359         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
360
361 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
362
363         Fixed bug #61902
364         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
365         called and is obsolete then this member suppress message
366         when call is inside next [Obsolete] method or type.
367
368         * expression.cs: Use TestObsoleteMethodUsage member.
369
370 2004-09-14  Martin Baulig  <martin@ximian.com>
371
372         * genericparser.cs: Removed.
373
374 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
375
376         * class.cs (MethodCore.CheckBase): Fix bug #65757.
377
378 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
379
380         * attribute.cs (Attribute.Resolve): Add error 653 report.
381
382         * class.cs (Class.ApplyAttributeBuilder): Add error 641
383         report.
384         (Method.ApplyAttributeBuilder): Add error 685 report.
385         (Operator.Define): Add error 564 report.
386
387         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
388
389         * expression.cs (Invocation.DoResolve): Add error
390         245 and 250 report.
391
392         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
393         error 674 report.
394
395 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
396
397         * class.cs (ConstructorInitializer.Resolve):
398         Wrong error number (515->516).
399
400 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
401
402         * class.cs (Indexer.Define): Add error 631 report.
403
404 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
405
406         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
407
408 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
409
410         * expression.cs (Probe.DoResolve): Add error CS0241 report.
411
412 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
413
414         * cs-parser.jay: Added error CS0241 report.
415
416 2004-09-10  Raja R Harinath  <rharinath@novell.com>
417
418         * cs-parser.jay (fixed_statement): Introduce a scope for the
419         declaration in the 'fixed' statement.
420
421 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
422
423         * cs-parser.jay: Added CS0230 error report.
424
425 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
426
427         * cs-parser.jay: Added errors CS0231 and CS0257 report.
428
429 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
430
431         * expression.cs (Argument.Resolve): Added error CS0192 and
432         CS0199 report.
433
434 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
435
436         C# 2.0 #pragma warning feature
437
438         * cs-tokenizer.cs (PreProcessPragma): New method; 
439         Handles #pragma directive.
440
441         * report.cs (WarningRegions): New class; Support
442         class for #pragma warning directive. It tests whether
443         warning is enabled for a given line.
444
445 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
446
447         * const.cs: Add more descriptive error report, tahnks to
448         Sebastien. 
449
450 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
451
452         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
453
454 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
455
456         * expression.cs: Apply patch from Ben: Remove dead code from
457         ArrayCreation, and remove the TurnintoConstant call in const.cs,
458         as that code just threw an exception anwyays.
459
460         * const.cs: Remove the call to the turnintoconstant, for details
461         see bug: #63144
462         
463         * literal.cs: The type of the null-literal is the null type;  So
464         we use a placeholder type (literal.cs:System.Null, defined here)
465         for it.
466
467         * expression.cs (Conditional.DoResolve): Remove some old code that
468         is no longer needed, conversions have been fixed.
469
470         (ArrayCreationExpression.DoResolve): Return false if we fail to
471         resolve the inner expression.
472
473 2004-09-07  Raja R Harinath  <rharinath@novell.com>
474
475         Fix test-290.cs.
476         * cs-parser.jay (delegate_declaration): Record a delegate
477         declaration as a type declaration.
478         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
479
480 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
481
482         * parameter.cs: Do not crash if the type can not be resolved. 
483
484         * expression.cs: Report errors with unsafe pointers, fixes #64896
485
486 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
487
488         * expression.cs: Pointer arith always needs to do a conv.i
489         if the operand is a long. fix 65320
490
491 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
492
493         Fixed cs0619-37.cs, cs0619-38.cs
494
495         * enum.cs (GetObsoleteAttribute): Removed.
496
497         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
498         on Enum member is double staged. The first is tested member
499         and then enum.
500
501 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
502
503         Fixed #56986, #63631, #65231
504
505         * class.cs: (TypeContainer.AddToMemberContainer): New method,
506         adds member to name container.
507         (TypeContainer.AddToTypeContainer): New method, adds type to
508         name container.
509         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
510         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
511         AddOperator): Simplified by reusing AddToMemberContainer.
512         (TypeContainer.UserDefinedStaticConstructor): Changed to property
513         instead of field.
514         (Method.CheckForDuplications): Fixed implementation to test all
515         possibilities.
516         (MemberBase): Detection whether member is explicit interface
517         implementation is now in constructor.
518         (MemberBase.UpdateMemberName): Handles IndexerName.
519         (Accessor): Changed to keep also location information.
520         (AbstractPropertyEventMethod): Is derived from MemberCore.
521         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
522         will be emited or not.
523         (PropertyBase.AreAccessorsDuplicateImplementation):
524         Tests whether accessors are not in collision with some method.
525         (Operator): Is derived from MethodCore to simplify common
526         operations.
527
528         * decl.cs (Flags.TestMethodDuplication): Test for duplication
529         must be performed.
530         (DeclSpace.AddToContainer): Adds the member to defined_names
531         table. It tests for duplications and enclosing name conflicts.
532
533         * enum.cs (EnumMember): Clean up to reuse the base structures
534
535 2004-09-03  Martin Baulig  <martin@ximian.com>
536
537         Merged latest changes into gmcs.  Please keep this comment in
538         here, it makes it easier for me to see what changed in MCS since
539         the last time I merged.
540
541 2004-09-03  Martin Baulig  <martin@ximian.com>
542
543         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
544         into TypeContainer, to make partial classes work again.
545
546 2004-09-03  Martin Baulig  <martin@ximian.com>
547
548         * rootcontext.cs (RootContext.V2): Removed.
549
550 2004-03-23  Martin Baulig  <martin@ximian.com>
551
552         * expression.cs (Invocation.OverloadResolve): Added `bool
553         may_fail' argument and use it instead of the Location.IsNull() hack.
554
555 2004-09-09  Martin Baulig  <martin@ximian.com>
556
557         * cs-parser.jay (namespace_declaration): Fixed CS0134 reporting.
558
559 2004-09-09  Martin Baulig  <martin@ximian.com>
560
561         * generic.cs (TypeParameter.DefineType): Added support for
562         explicit interface methods.
563
564 2004-09-09  Martin Baulig  <martin@ximian.com>
565
566         * README.Changes: New document.  Started to list important changes
567         between MCS and GMCS here.
568
569 2004-09-08  Martin Baulig  <martin@ximian.com>
570
571         * class.cs
572         (TypeContainer.CheckRecursiveDefinition): New protected method.
573         (TypeContainer.DefineType): Move the CS0146 check into
574         CheckRecursiveDefinition().     
575
576 2004-09-06  Martin Baulig  <martin@ximian.com>
577
578         * generic.cs (ConstructedType.CheckConstraints): Allow builtin
579         types for the constructor constraint.
580
581 2004-09-03  Martin Baulig  <martin@ximian.com>
582
583         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
584         into TypeContainer, to make partial classes work again.
585
586 2004-09-03  Martin Baulig  <martin@ximian.com>
587
588         * rootcontext.cs (RootContext.V2): Removed.
589
590 2004-03-23  Martin Baulig  <martin@ximian.com>
591
592         * expression.cs (Invocation.OverloadResolve): Added `bool
593         may_fail' argument and use it instead of the Location.IsNull() hack.
594
595 2004-09-03  Martin Baulig  <martin@ximian.com>
596
597         Merged latest changes into gmcs.  Please keep this comment in
598         here, it makes it easier for me to see what changed in MCS since
599         the last time I merged.
600
601 2004-09-03  Raja R Harinath  <rharinath@novell.com>
602
603         Fix #61128.
604         * expression.cs (BetterConversion): Don't allow either conversion 
605         to be null.  Remove redundant implicit conversion test when 'q ==
606         null' -- when this function is invoked, we already know that the
607         implicit conversion exists.
608         (BetterFunction): Assume that 'best' is non-null.  Remove
609         redundant reimplementation of IsApplicable when 'best' is null.
610         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
611         number of arguments.
612         (IsAncestralType): Extract from OverloadResolve.
613         (OverloadResolve): Make robust to the MethodGroupExpr being
614         unsorted.  Implement all the logic of Section 14.5.5.1, and
615         support overloading of methods from multiple applicable types.
616         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
617
618         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
619         (RealError, Warning): Append type of report to related symbol.
620
621 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
622
623         * enum.cs: Fixed CLS-Compliance checks for enum members.
624         Error tests cs3008-8.cs, cs3014-8.cs
625
626 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
627
628         Fixed bug #62342, #63102
629         * class.cs: ImplementIndexer uses member.IsExplicitImpl
630         like ImplementMethod.
631
632 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
633
634         * attribute.cs (Attribute.GetAttributeArgumentExpression):
635         Fixed bug #65170.
636
637 2004-09-02  Martin Baulig  <martin@ximian.com>
638
639         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
640         TypeManager.GetArgumentTypes() rather than calling GetParameters()
641         on the MethodBase.
642
643 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
644
645         C# 2.0 Static classes implemented
646
647         * class.cs (TypeContainer): instance_constructors,
648         initialized_fields, initialized_static_fields,
649         default_constructor, base_inteface_types are protected to be
650         accessible from StaticClass.
651         (TypeContainer.DefineDefaultConstructor): New virtual method
652         for custom default constructor generating
653         (StaticClass): New class to handle "Static classes" feature.
654
655         * cs-parser.jay: Handle static keyword on class like instance
656         of StaticClass.
657
658         * driver.cs: Added "/langversion" command line switch with two
659         options (iso-1, default).
660
661 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
662
663         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
664
665 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
666
667         * delegate.cs: Style.
668
669 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
670
671         * delegate.cs: Add seperate instance expr field for miguel.
672
673 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
674
675         * PointerArithmetic (Resolve): make sure we are not doing
676         pointer arith on void*. Also, make sure we are resolved
677         by not setting eclass until resolve.
678
679         All callers: Make sure that PointerArithmetic gets resolved.
680
681 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
682
683         * ArrayCreation (LookupType): If the type does not resolve 
684         to an array, give an error.
685
686 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
687
688         * statement.cs (Try.Resolve): Fixed bug #64222
689
690 2004-08-27  Martin Baulig  <martin@ximian.com>
691
692         * class.cs
693         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
694         crash here.     
695
696 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
697
698         * ecore.cs (Constantify): Get underlying type via
699         System.Enum.GetUnderlyingType to avoid StackOverflow on the
700         Windows in special cases.
701
702 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
703
704         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
705         for obtaining also private methods.
706         (GetRemoveMethod): Used GetRemoveMethod (true)
707         for obtaining also private methods.
708
709 2004-09-02  Martin Baulig  <martin@ximian.com>
710
711         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
712         TypeManager.GetArgumentTypes() rather than calling GetParameters()
713         on the MethodBase.
714
715 2004-08-27  Martin Baulig  <martin@ximian.com>
716
717         * class.cs
718         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
719         crash here.     
720
721 2004-08-25  Martin Baulig  <martin@ximian.com>
722
723         * support.cs (ReflectionParameters..ctor): If this is a generic
724         method, retrieve and store its type parameters.
725         (InternalParameters..ctor): Added `TypeParameter[]' argument.
726         (ReflectionParameters.GenericConstraints): The argument specifies
727         the type parameter, not the method parameter.
728         (InternalParameters.GenericConstraints): Likewise.
729
730         * generic.cs (TypeParameter.DefineType): Correctly handle
731         constraints wrt. generic methods in interfaces and their
732         implementations.        
733
734 2004-08-24  Martin Baulig  <martin@ximian.com>
735
736         * generic.cs (TypeParameter.IsSubclassOf): New public method.
737         (Constraints.IsSubclassOf): New internal method.
738
739         * typemanager.cs (TypeManager.FindMembers): Added special support
740         for GenericTypeParameterBuilder's.      
741         (TypeManager.IsSubclassOf, IsFamilyAccessible): Added support for
742         type parameters.
743
744 2004-08-24  Martin Baulig  <martin@ximian.com>
745
746         * typemanager.cs
747         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
748         this for accessibility checks.
749         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
750         IsNestedFamilyAccessible.
751         (TypeManager.IsSubclassOf): New method, do what the name actually
752         says.   
753
754 2004-08-24  Martin Baulig  <martin@ximian.com>
755
756         * expression.cs (MemberAccess.DoResolve): When resolving ourselves
757         as a SimpleName, include the generic arity.
758
759 2004-08-24  Martin Baulig  <martin@ximian.com>
760
761         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
762         MethodAttributes.HideBySig for operators.
763
764 2004-08-23  Martin Baulig  <martin@ximian.com>
765
766         Back to the old error reporting system :-)
767
768         * report.cs (Message): Removed.
769         (Report.MessageData, ErrorData, WarningData): Removed.
770         (Report.Error, Warning): Back to the old system.
771
772 2004-08-23  Martin Baulig  <martin@ximian.com>
773
774         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
775
776         * class.cs (TypeContainer.ParentContainer): New public virtual
777         method; replaces the explicit interface implementation.
778         (ClassPart.ParentContainer): Override.
779
780 2004-08-23  Martin Baulig  <martin@ximian.com>
781
782         * statement.cs (Switch): Added support for constant switches; see
783         #59428 or test-285.cs.
784
785 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
786
787         Fixed bug #62740.
788         * statement.cs (GetEnumeratorFilter): Removed useless
789         logic because C# specs is strict. GetEnumerator must be
790         public.
791
792 2004-08-22  Martin Baulig  <martin@ximian.com>
793
794         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
795         a switch and may break, reset the barrier.  Fixes #59867.
796
797 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
798
799         CLS-Compliance speed up (~5% for corlib)
800
801         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
802         New method. Tests container for CLS-Compliant names
803
804         * class.cs (TypeContainer.VerifyClsName): New method.
805         Checks whether container name is CLS Compliant.
806         (Constructor): Implements IMethodData.
807
808         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
809         low-case table for CLS Compliance test.
810         (MemberCache.VerifyClsParameterConflict): New method.
811         Checks method parameters for CS3006 error.
812
813         * enum.cs (EnumMember): Is derived from MemberCore.
814         (Enum.VerifyClsName): Optimized for better performance.
815
816 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
817
818         * report.cs: Renamed Error_T to Error and changed all
819         references.
820
821 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
822
823         * class.cs (TypeContainer.IndexerArrayList): New inner class
824         container for indexers.
825         (TypeContainer.DefaultIndexerName): New constant for default
826         indexer name. Replaced all "Item" with this constant.
827         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
828
829         * typemanager.cs (TypeManager.default_member_ctor): Cache here
830         DefaultMemberAttribute constructor.
831
832 2004-08-05  Martin Baulig  <martin@ximian.com>
833
834         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
835         Fix bug #59429.
836
837 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
838
839         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
840         multi platforms problem.
841
842         * compiler.csproj: Included shared files.
843
844 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
845
846         Fix bug 60333, 55971 in the more general way
847         * attribute.cs (Attribute.GetAttributeArgumentExpression):
848         Added arg_type argument for constant conversion.
849         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
850
851 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
852
853         Fix bug #59760
854         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
855         OperatorArrayList, MethodCoreArrayList for typecontainer
856         containers. Changed class member types to these new types.
857         (MethodArrayList.DefineMembers): Added test for CS0659.
858
859 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
860
861         * cfold.cs: Synchronize the folding with the code in expression.cs
862         Binary.DoNumericPromotions for uint operands.
863
864         * attribute.cs: Revert patch from Raja, it introduced a regression
865         while building Blam-1.2.1 (hard to isolate a test case).
866
867 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
868
869         Fix for #55382
870         * class.cs:
871         (TypeContainer.Define): Renamed to DefineContainerMembers because of
872         name collision.
873         (MethodCore.parent_method): New member. The method we're overriding
874         if this is an override method.
875         (MethodCore.CheckBase): Moved from Method class and made common.
876         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
877         private.
878         (MethodCore.CheckForDuplications): New abstract method. For custom
879         member duplication search in a container
880         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
881         method and its return type.
882         (Event.conflict_symbol): New member. Symbol with same name in the
883         parent class.
884
885         * decl.cs:
886         (MemberCache.FindMemberWithSameName): New method. The method
887         is looking for conflict with inherited symbols.
888
889 2004-08-04  Martin Baulig  <martin@ximian.com>
890
891         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
892
893         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
894
895 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
896
897         * report.cs (Message): New enum for better error, warning reference in
898         the code.
899         (MessageData): New inner abstract class. It generally handles printing of
900         error and warning messages.
901         Removed unused Error, Warning, Message methods.
902
903 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
904
905         Fix for cs0592-8.cs test
906         * attribute.cs
907         (Attributable.ValidAttributeTargets): Made public.
908         (Attribute.ExplicitTarget): New member for explicit target value.
909         (Attribute.CheckTargets): Now we translate explicit attribute
910         target to Target here.
911
912 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
913
914         * ecore.cs (MethodGroupExpr): new IsBase property.
915
916         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
917
918         * delegate.cs (DelegateCreation): store a MethodGroupExpr
919         rather than an instance expr.
920
921         (DelegateCreation.Emit): Use the method group rather than
922         the instance expression. Also, if you have base.Foo as the
923         method for a delegate, make sure to emit ldftn, not ldftnvirt.
924
925         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
926
927         (NewDelegate.DoResolve): Only check for the existance of Invoke
928         if the method is going to be needed. Use MethodGroupExpr.
929
930         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
931
932         * expression.cs: For pointer arith., make sure to use
933         the size of the type, not the size of the pointer to
934         the type.
935
936 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
937
938         Fix for #60722
939         * class.cs (Class): Added error CS0502 test.
940
941 2004-08-03  John Luke  <jluke@cfl.rr.com>
942             Raja R Harinath  <rharinath@novell.com>
943
944         Fix for #60997.
945         * attribute.cs (Attribute.complained_before): New flag.
946         (Attribute.ResolveType, Attribute.Resolve),
947         (Attribute.DefinePInvokeMethod): Set it.
948         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
949         
950 2004-08-03  Martin Baulig  <martin@ximian.com>
951
952         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
953         use a user-defined operator; we still need to do numeric
954         promotions in case one argument is a builtin type and the other
955         one has an implicit conversion to that type.  Fixes #62322.
956
957 2004-08-18  Martin Baulig  <martin@ximian.com>
958
959         * class.cs (Method.Define): Use the correct method name when
960         creating the MethodBuilder for a generic method.
961
962 2004-08-17  Martin Baulig  <martin@ximian.com>
963
964         * generic.cs (Constraints): Support type parameter constraints.
965
966 2004-08-16  Martin Baulig  <martin@ximian.com>
967
968         * cs-tokenizer.cs (Tokenizer.TypeOfParsing): New public property.
969         (Token.GENERIC_DIMENSION): New token; this is returned if we
970         encounter an unbound generic type in a typeof() expression.
971
972         * cs-parser.jay (opt_type_argument_list): Added GENERIC_DIMENSION;
973         this token is only generated while parsing a typeof() expression.
974         (typeof_expression): Removed the old unbound_type hack.
975
976         * generic.cs (TypeArguments.IsUnbound): New public property.
977
978         * decl.cs (MemberName): Added support for unbound types.
979
980 2004-08-14  Martin Baulig  <martin@ximian.com>
981
982         * typemanager.cs
983         (TypeManager.IsEqualGenericInstance): New static method.
984         (TypeManager.IsSubclassOrNestedChildOf, IsSubclassOf): This is
985         just used to check accessibility, so follow the rules of 26.1.6.        
986
987         * expression.cs (MemberAccess.ResolveAsTypeStep): Return a
988         ConstructedType instead of a TypeExpression if we have type arguments.
989
990         * cs-parser.jay (typeof_expression): Support unbound generic types.
991
992         * ecore.cs (UnboundTypeExpression): New public class.
993
994 2004-08-12  Martin Baulig  <martin@ximian.com>
995
996         * typemanager.cs (TypeManager.IsNestedChildOf): Use
997         TypeManager.IsEqual() rather than `=='.
998
999         * decl.cs (DeclSpace.CheckAccessLevel): Use `tb.FullName' for
1000         generic instances as well.
1001
1002 2004-08-12  Martin Baulig  <martin@ximian.com>
1003
1004         * expression.cs (Invocation.InferType): We can only infer method
1005         type parameters.  Fixes #62647.
1006
1007 2004-08-11  Martin Baulig  <martin@ximian.com>
1008
1009         * class.cs (TypeContainer.DefineType): Create the TypeBuilder
1010         before resolving the base classes.
1011
1012 2004-08-06 Gonzalo Paniagua Javier <gonzalo@ximian.com>
1013
1014         * Makefile: install .mdb file too.
1015
1016 2004-08-05  Martin Baulig  <martin@ximian.com>
1017
1018         * ecore.cs (FieldExpr.DoResolveLValue): If we're resolving a field
1019         initializer, the current type is just the TypeBuilder, not the
1020         instantiated generic type.
1021         (FieldExpr.IsFieldInitializer): New public property.
1022
1023 2004-08-04  Martin Baulig  <martin@ximian.com>
1024
1025         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
1026
1027         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
1028
1029 2004-08-03  Martin Baulig  <martin@ximian.com>
1030
1031         * class.cs (MethodData.Define): If we're an explicit
1032         implementation, remove the generic arity from the type name.
1033
1034 2004-08-03  Martin Baulig  <martin@ximian.com>
1035
1036         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
1037         use a user-defined operator; we still need to do numeric
1038         promotions in case one argument is a builtin type and the other
1039         one has an implicit conversion to that type.  Fixes #62322.
1040
1041 2004-08-02  Martin Baulig  <martin@ximian.com>
1042
1043         * class.cs (TypeContainer.ifaces): Make this a `Type[]', not a
1044         `TypeExpr[]' array.
1045         (TypeContainer.GetClassBases): Return the unexpanded list of
1046         interfaces; we expand them later.
1047         (TypeContainer.DefineType): After creating the TypeBuilder, call
1048         TypeManager.ExpandInterfaces() to get an expanded and resolved
1049         list of interfaces.
1050
1051         * ecore.cs (TypeExpr.GetInterfaces): Removed
1052
1053         * generics.cs (Constraints.InterfaceConstraints): Remove.
1054         (TypeParameter.DefineType): Call TypeManager.RegisterBuilder() to
1055         register the interface constraints.
1056
1057         * typemanager.cs
1058         (TypeManager.AddUserType): Removed the `ifaces' argument.
1059         (TypeManager.AddTypeParameter): Likewise.
1060         (TypeManager.AddUserInterface): Removed, was unused.
1061         (TypeManager.RegisterBuilder): Take a `Type[]' instead of a
1062         `TypeExpr[]' array for the interfaces.
1063         (TypeManager.ExpandInterfaces): Call this after the TypeBuilder
1064         has been defined, returns a list of the resolved interfaces types.
1065         (TypeManager.GetInterfaces): Return a `Type[]', not a `TypeExpr[]'.
1066         (TypeManager.GetExplicitInterfaces): Likewise.  
1067
1068 2004-08-02  Martin Baulig  <martin@ximian.com>
1069
1070         * expression.cs (Invocation.EmitCall): If we're invoking a method
1071         on a type parameter, use the new `Constrained' prefix opcode.
1072
1073 2004-08-02  Martin Baulig  <martin@ximian.com>
1074
1075         * statement.cs (LocalInfo.Flags): Added `IsThis'.
1076         (LocalInfo.IsThis): New public property.
1077         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
1078
1079 2004-08-01  Martin Baulig  <martin@ximian.com>
1080
1081         * class.cs (TypeContainer.GetClassBases): Don't set the default
1082         here since we may get called from GetPartialBases().
1083         (TypeContainer.DefineType): If GetClassBases() didn't return a
1084         parent, use the default one.
1085
1086 2004-07-30  Martin Baulig  <martin@ximian.com>
1087
1088         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
1089
1090         * class.cs (SourceMethod): New public class, derive from the
1091         symbol writer's ISourceMethod.
1092         (Method): Use the new symbol writer API.
1093
1094         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
1095         as argument and use the new symbol writer.
1096
1097         * location.cs
1098         (SourceFile): Implement the symbol writer's ISourceFile.
1099         (Location.SymbolDocument): Removed.
1100         (Location.SourceFile): New public property.
1101
1102         * symbolwriter.cs: Use the new symbol writer API.
1103
1104 2004-07-30  Raja R Harinath  <rharinath@novell.com>
1105
1106         * Makefile (install-local): Remove.  Functionality moved to
1107         executable.make.
1108
1109 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
1110
1111         * Makefile: Install mcs.exe.config file together with mcs.exe.
1112         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
1113         correct runtime version.
1114         
1115 2004-07-25  Martin Baulig  <martin@ximian.com>
1116
1117         * class.cs
1118         (TypeContainer.RegisterOrder): Removed, this was unused.
1119         (TypeContainer, interface_order): Removed.
1120         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
1121         TypeContainer as argument since we can also be called with a
1122         `PartialContainer' for a partial class/struct/interface.
1123         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
1124         of checking whether we're an `Interface' - we could be a
1125         `PartialContainer'.
1126         (PartialContainer.Register): Override; call
1127         AddClass()/AddStruct()/AddInterface() on our parent.
1128
1129         * cs-parser.jay (interface_member_declaration): Add things to the
1130         `current_container', not the `current_class'.
1131
1132         * rootcontext.cs (RegisterOrder): The overloaded version which
1133         takes an `Interface' was unused, removed.
1134
1135         * typemanager.cs (TypeManager.LookupInterface): Return a
1136         `TypeContainer', not an `Interface'.
1137         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
1138         contain a `PartialContainer' for an interface, so check it's
1139         `Kind' to figure out what it is.
1140
1141 2004-07-25  Martin Baulig  <martin@ximian.com>
1142
1143         * class.cs (Class.DefaultTypeAttributes): New public constant.
1144         (Struct.DefaultTypeAttributes): Likewise.
1145         (Interface.DefaultTypeAttributes): Likewise.
1146         (PartialContainer.TypeAttr): Override this and add the
1147         DefaultTypeAttributes.
1148
1149 2004-07-25  Martin Baulig  <martin@ximian.com>
1150
1151         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
1152         we can just use the `Parent' field instead.
1153
1154 2004-07-25  Martin Baulig  <martin@ximian.com>
1155
1156         * class.cs (TypeContainer.Emit): Renamed to EmitType().
1157
1158 2004-07-25  Martin Baulig  <martin@ximian.com>
1159
1160         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
1161         our parts before defining any methods.
1162         (TypeContainer.VerifyImplements): Make this virtual.
1163         (ClassPart.VerifyImplements): Override and call VerifyImplements()
1164         on our PartialContainer.
1165
1166 2004-07-25  Martin Baulig  <martin@ximian.com>
1167
1168         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
1169
1170         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
1171         argument, we can just use the `Parent' field instead.
1172
1173         * class.cs
1174         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
1175         (MemberBase.DoDefine): Likewise.
1176
1177 2004-07-24  Martin Baulig  <martin@ximian.com>
1178
1179         * decl.cs (MemberCore.Parent): New public field.
1180         (DeclSpace.Parent): Moved to MemberCore.
1181
1182         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
1183         (MemberBase.ctor): Added TypeContainer argument, pass it to our
1184         parent's .ctor.
1185         (FieldBase, Field, Operator): Likewise.
1186         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
1187         (EventField, Event): Likewise.
1188
1189 2004-07-23  Martin Baulig  <martin@ximian.com>
1190
1191         * class.cs (PartialContainer): New public class.
1192         (ClassPart): New public class.
1193         (TypeContainer): Added support for partial classes.
1194         (TypeContainer.GetClassBases): Splitted some of the functionality
1195         out into GetNormalBases() and GetPartialBases().
1196
1197         * cs-tokenizer.cs (Token.PARTIAL): New token.
1198         (Tokenizer.consume_identifier): Added some hacks to recognize
1199         `partial', but only if it's immediately followed by `class',
1200         `struct' or `interface'.
1201
1202         * cs-parser.jay: Added support for partial clases.
1203
1204 2004-07-23  Martin Baulig  <martin@ximian.com>
1205
1206         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
1207         a `DeclSpace' and also made it readonly.
1208         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
1209         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
1210         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
1211
1212         * cs-parser.jay: Pass the `current_class', not the
1213         `current_container' (at the moment, this is still the same thing)
1214         to a new Method, Property, Event, Indexer or Constructor.
1215
1216 2004-07-23  Martin Baulig  <martin@ximian.com>
1217
1218         * cs-parser.jay (CSharpParser): Added a new `current_class' field
1219         and removed the `current_interface' one.
1220         (struct_declaration, class_declaration, interface_declaration):
1221         Set `current_class' to the newly created class/struct/interface;
1222         set their `Bases' and call Register() before parsing their body.
1223
1224 2004-07-23  Martin Baulig  <martin@ximian.com>
1225
1226         * class.cs (Kind): New public enum.
1227         (TypeContainer): Made this class abstract.
1228         (TypeContainer.Kind): New public readonly field.
1229         (TypeContainer.CheckDef): New public method; moved here from
1230         cs-parser.jay.
1231         (TypeContainer.Register): New public abstract method.
1232         (TypeContainer.GetPendingImplementations): New public abstract
1233         method.
1234         (TypeContainer.GetClassBases): Removed the `is_class' and
1235         `is_iface' parameters.
1236         (TypeContainer.DefineNestedTypes): Formerly known as
1237         DoDefineType().
1238         (ClassOrStruct): Made this class abstract.
1239
1240         * tree.cs (RootTypes): New public type. 
1241
1242 2004-07-20  Martin Baulig  <martin@ximian.com>
1243
1244         * tree.cs (Tree.RecordNamespace): Removed.
1245         (Tree.Namespaces): Removed.
1246
1247         * rootcontext.cs (RootContext.IsNamespace): Removed.
1248
1249         * cs-parser.jay (namespace_declaration): Just create a new
1250         NamespaceEntry here.
1251
1252 2004-07-21  Lluis Sanchez Gual  <lluis@novell.com>
1253
1254         * Makefile: Install gmcs.exe.config file together with gmcs.exe.
1255         * gmcs.exe.config: Renamed from mcs.exe.config. Added supportedRuntime
1256         entry to make sure it runs in the correct runtime version.
1257         
1258 2004-07-18  Martin Baulig  <martin@ximian.com>
1259
1260         * generic.cs (ConstructedType.CheckConstraints): Improved
1261         constraints checking.
1262
1263 2004-07-18  Martin Baulig  <martin@ximian.com>
1264
1265         * expression.cs (Invocation.BetterMethod): Call
1266         TypeManager.TypeToCoreType() on all types and removed my previous
1267         hack; we're already doig the right thing here.
1268
1269 2004-07-17  Martin Baulig  <martin@ximian.com>
1270
1271         * decl.cs (MemberName.MakeName): Create the "class`1" names here.
1272
1273 2004-07-16  Martin Baulig  <martin@ximian.com>
1274
1275         * iterators.cs: Added generics support.
1276
1277 2004-07-16  Martin Baulig  <martin@ximian.com>
1278
1279         * iterators.cs: Rewrote this.  We're now using one single Proxy
1280         class for both the IEnumerable and the IEnumerator interface and
1281         `Iterator' derives from Class so we can use the high-level API.
1282
1283         * class.cs (TypeContainer.AddIterator): New method.
1284         (TypeContainer.DoDefineType): New protected virtual method, which
1285         is called from DefineType().
1286         (TypeContainer.DoDefineMembers): Call DefineType() and
1287         DefineMembers() on all our iterators.
1288         (TypeContainer.Emit): Call Emit() on all our iterators.
1289         (TypeContainer.CloseType): Call CloseType() on all our iterators.
1290
1291         * codegen.cs (EmitContext.CurrentIterator): New public field.
1292
1293 2004-07-15  Martin Baulig  <martin@ximian.com>
1294
1295         * typemanager.cs
1296         (TypeManager.not_supported_exception_type): New type.   
1297
1298 2004-07-14  Martin Baulig  <martin@ximian.com>
1299
1300         * typemanager.cs
1301         (TypeManager.generic_ienumerable_type): New type.
1302         (TypeManager.generic_ienumerator_type): New type.
1303
1304         * rootcontext.cs
1305         (RootContext.interfaces_first_stage): Added
1306         "System.Collections.Generic.IEnumerator`1" and
1307         "System.Collections.Generic.IEnumerable`1".     
1308
1309 2004-07-14  Martin Baulig  <martin@ximian.com>
1310
1311         * iterators.cs: Use real error numbers.
1312
1313 2004-07-14  Martin Baulig  <martin@ximian.com>
1314
1315         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
1316         requires this to be a System.Collection.IEnumerable and not a
1317         class implementing that interface.
1318         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
1319
1320 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
1321
1322         * class.cs: Fixed previous fix, it broke some error tests.
1323
1324 2004-07-12  Martin Baulig  <martin@ximian.com>
1325
1326         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
1327         Fixes #61293.
1328
1329 2004-07-14  Martin Baulig  <martin@ximian.com>
1330
1331         * decl.cs, expression.cs, generic.cs: Use a backqoute (`) and not
1332         an exclamation mark (!) for the generic arity to reflect the
1333         latest spec changes; ie. use "System.Collections.Generic.IList`1".
1334
1335 2004-07-13  Martin Baulig  <martin@ximian.com>
1336
1337         * cs-tokenizer.cs (Tokenizer.parse_less_than): Allow array rank
1338         specifiers being part of a type argument.
1339
1340 2004-07-13  Martin Baulig  <martin@ximian.com>
1341
1342         * expression.cs (MemberAccess.ResolveAsTypeStep): Use the full `!'
1343         name for generic types.
1344
1345 2004-07-13  Martin Baulig  <martin@ximian.com>
1346
1347         * assign.cs (Assign.DoResolve): Moved the CS0131 check up a little
1348         bit to fix #60119.
1349
1350 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
1351
1352         * assign.cs (LocalTemporary): Add new argument: is_address,If
1353         `is_address' is true, then the value that we store is the address
1354         to the real value, and not the value itself.
1355         
1356         * ecore.cs (PropertyExpr): use the new local temporary
1357         stuff to allow us to handle X.Y += z (where X is a struct)
1358
1359 2004-07-08  Martin Baulig  <martin@ximian.com>
1360
1361         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
1362         not always return, just like we're doing in Using.Resolve().
1363
1364 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
1365
1366         * cs-parser.jay (fixed_statement): flag this as Pinned.
1367
1368 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
1369
1370         * typemanager.cs (TypeManager): Removed MakePinned method, this
1371         mechanism is replaced with the .NET 2.x compatible mechanism of
1372         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
1373
1374         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
1375         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
1376         `IsFixed' property which has a different meaning.
1377
1378 2004-07-02  Raja R Harinath  <rharinath@novell.com>
1379
1380         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
1381         visible from inside a nested class, not just the names of the
1382         immediately enclosing class.
1383         Fix for bug #60730.
1384
1385 2004-06-24  Raja R Harinath  <rharinath@novell.com>
1386
1387         * expression.cs (BetterConversion): Remove buggy special-case
1388         handling of "implicit constant expression conversions".  At this
1389         point, we already know that the conversion is possible -- we're
1390         only checking to see which is better.
1391
1392 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
1393
1394         * cs-parser.jay: Added error CS0210 test.
1395
1396 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
1397
1398         * cs-parser.jay: Added error CS0134 test.
1399
1400 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
1401
1402         Fix bug #52507
1403         * cs-parser.jay: Added error CS0145 test.
1404
1405 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
1406
1407         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
1408
1409 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
1410         
1411         * expression.cs (StackAlloc.Resolve): The argument may not
1412         be a constant; deal with this case.
1413         
1414 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
1415
1416         * attribute.cs (IndexerName_GetIndexerName): Renamed to
1417         GetIndexerAttributeValue.
1418         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
1419
1420         * class.cs (Indexer.Define): Added error tests for CS0415,
1421         CS0609.
1422
1423 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
1424
1425         * attribute.cs (Attribute.Resolve): Keep field code in sync with
1426         property code.
1427
1428 2004-06-23  Martin Baulig  <martin@ximian.com>
1429
1430         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
1431         neither return nor throw, reset the barrier as well.  Fixes #60457.
1432
1433 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
1434
1435         * class.cs : EventAttributes is now set to None by default.
1436           This fixes bug #60459.
1437
1438 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
1439
1440         Fix bug #60219
1441         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
1442         Don't throw exception but return null (it's sufficient now).
1443
1444 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
1445
1446         * typemanager.cs (GetArgumentTypes): Faster implementation.
1447
1448 2004-06-18  Martin Baulig  <martin@ximian.com>
1449
1450         * attribute.cs (Attribute.Resolve): Check whether we're an
1451         EmptyCast which a Constant child.  Fixes #60333.
1452
1453 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
1454
1455         * statement.cs (EmitCollectionForeach): Account for the fact that
1456         not all valuetypes are in areas which we can take the address of.
1457         For these variables, we store to a temporary variable. Also, make
1458         sure that we dont emit a `callvirt' on a valuetype method.
1459
1460 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
1461
1462         * expression.cs (StackAlloc.DoReSolve): Added test for
1463         negative parameter (CS0247).
1464
1465 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
1466
1467         Fix bug #59792
1468         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
1469
1470 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
1471
1472         Fix bug #59781
1473         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
1474         ulong.
1475
1476 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
1477
1478         Fix bug #58254 & cs1555.cs, cs1556.cs
1479         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
1480
1481 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
1482
1483         * cs-parser.jay: Added error CS1669 test for indexers.
1484
1485 2004-06-18  Martin Baulig  <martin@ximian.com>
1486
1487         * generics.cs (GenericMethod.ctor): Don't take an Attributes
1488         argument.  Fixes #60441.
1489
1490 2004-06-16  Ben Maurer  <bmaurer@ximian.com>
1491         * ecore.cs (MethodGroupExpr.Name): Revert Martin's patch.
1492         The name needs to have the actual name of the method in order
1493         for other tests (such as the one in OverloadResolve for Invoke
1494         on a delegate) to work. As well, it does not really help
1495         error reporting because the method group had multiple methods.
1496         * Makefile: Remove MCS_DEBUG, you can enable with the DEBUG_FLAGS.
1497         Make profiling work.
1498         
1499 2004-06-13  Martin Baulig  <martin@ximian.com>
1500
1501         * cs-parser.jay: Don't allow generic attributes.
1502
1503 2004-06-13  Martin Baulig  <martin@ximian.com>
1504
1505         * class.cs (MemberBase.DoDefineBase): New protected method.
1506         (MemberBase.DoDefine): Compute the `flags' in the new
1507         DoDefineBase() which must be called first.
1508         (Method.Define): Call DoDefineBase() first so we have the flags
1509         when defining the generic method.
1510
1511         * cs-parser.jay (interface_method_declaration): Support generic methods.
1512
1513 2004-06-13  Martin Baulig  <martin@ximian.com>
1514
1515         * decl.cs (TypeName): Removed.
1516         (MemberName): Removed TypeName and MemberNow; now we just have
1517         MemberName.
1518
1519         * cs-parser.jay: Don't distinguish between type arguments and type
1520         parameters in the grammar and simplified the rules a bit.  The
1521         reduce/reduce conflicts are now gone (except the one we inherited
1522         from mcs).
1523
1524 2004-06-11  Martin Baulig  <martin@ximian.com>
1525
1526         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
1527         call this twice: for params and varargs methods.
1528
1529 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
1530
1531         * class.cs:
1532         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
1533
1534 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
1535
1536         * attribute.cs (Attribute.GetValidTargets): Made public.
1537
1538         * class.cs: 
1539         (AbstractPropertyEventMethod): New class for better code sharing.
1540         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
1541         CS1667 report.
1542         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
1543
1544 2004-06-09  Martin Baulig  <martin@ximian.com>
1545
1546         * cs-parser.jay: Removed a reduce/reduce conflict.
1547
1548 2004-06-03  Martin Baulig  <martin@ximian.com>
1549
1550         * generic.cs (ConstructedType.GetMemberAccess): Renamed to
1551         GetSimpleName() and return a SimpleName.
1552
1553         * ecore.cs (SimpleName.Arguments): New public field.
1554         (SimpleName): Added overloaded ctor which takes an additional
1555         TypeArguments argument.
1556         (SimpleName.SimpleNameResolve): Added support for generic methods.
1557         (MethodGroupExpr.ResolveGeneric): New public method.  The code was
1558         formerly in MemberAccess.DoResolve(), but we also need it in
1559         SimpleNameResolve().
1560
1561         * expression.cs (MemberAccess.DoResolve): Use the new
1562         MethodGroupExpr.ResolveGeneric().       
1563
1564 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
1565
1566         * decl.cs: If possible, use lookuptypedirect here. We can only do
1567         this if there is no `.' after the namespace. Avoids using
1568         LookupType, which does lots of slow processing.
1569         (FindNestedType) New method, does what it says :-).
1570         * namespace.cs: use LookupTypeDirect.
1571         * rootcontext.cs: use membercache, if possible.
1572         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
1573
1574 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
1575
1576         * expression.cs:
1577         According to the spec, 
1578
1579         In a member access of the form E.I, if E is a single identifier,
1580         and if the meaning of E as a simple-name (§7.5.2) is a constant,
1581         field, property, localvariable, or parameter with the same type as
1582         the meaning of E as a type-name (§3.8), then both possible
1583         meanings of E are permitted.
1584
1585         We did not check that E as a simple-name had the same type as E as
1586         a type name.
1587
1588         This trivial check gives us 5-7% on bootstrap time.
1589
1590 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
1591
1592         * expression.cs (Invocation.OverloadResolve): Avoid the
1593         use of hashtables and boxing here by allocating on demand.
1594
1595 2004-05-30  Martin Baulig  <martin@ximian.com>
1596
1597         * rootcontext.cs (RootContext.LookupType): Don't cache things if
1598         we're doing a silent lookup.  Don't try to lookup nested types in
1599         TypeManager.object_type (thanks to Ben Maurer).
1600
1601 2004-05-30  Martin Baulig  <martin@ximian.com>
1602
1603         Committing a patch from Ben Maurer.
1604
1605         * rootcontext.cs (RootContext.LookupType): Cache negative results.
1606
1607 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
1608
1609         * convert.cs: add a trivial cache for overload operator resolution.
1610
1611 2004-05-31  Marek Safar  <marek.safar@seznam.cz>
1612
1613         * attribute.cs
1614         (AttributeTester.GetObsoleteAttribute): Returns instance of
1615         ObsoleteAttribute when type is obsolete.
1616
1617         * class.cs
1618         (TypeContainer.VerifyObsoleteAttribute): Override.
1619         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
1620         (MethodCode.VerifyObsoleteAttribute): Override.
1621         (MemberBase.VerifyObsoleteAttribute): Override.
1622
1623         * decl.cs
1624         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
1625         and report proper error.
1626
1627         *delegate.cs
1628         (Delegate.VerifyObsoleteAttribute): Override.
1629
1630         * ecore.cs
1631         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
1632         and report proper error.
1633         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
1634
1635         * enum.cs
1636         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
1637         and enum member.
1638
1639         * expression.cs
1640         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
1641         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
1642         Added test for ObsoleteAttribute.
1643
1644         * statement.cs
1645         (Catch): Derived from Statement.
1646
1647 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
1648
1649         * decl.cs: If possible, use lookuptypedirect here. We can only do
1650         this if there is no `.' after the namespace. Avoids using
1651         LookupType, which does lots of slow processing.
1652         (FindNestedType) New method, does what it says :-).
1653         * namespace.cs: use LookupTypeDirect.
1654         * rootcontext.cs: use membercache, if possible.
1655         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
1656
1657 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
1658
1659         * expression.cs:
1660         According to the spec, 
1661
1662         In a member access of the form E.I, if E is a single identifier,
1663         and if the meaning of E as a simple-name (§7.5.2) is a constant,
1664         field, property, localvariable, or parameter with the same type as
1665         the meaning of E as a type-name (§3.8), then both possible
1666         meanings of E are permitted.
1667
1668         We did not check that E as a simple-name had the same type as E as
1669         a type name.
1670
1671         This trivial check gives us 5-7% on bootstrap time.
1672
1673 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
1674
1675         Fixed bug #59071 & cs0160.cs
1676         * statement.cs (Try.Resolve): Check here whether order of catch
1677         clauses matches their dependencies.
1678
1679 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
1680
1681         Fixed bug #58624
1682         * ecore.cs (SimpleName.SimpleNameResolve): Added test for
1683         unsafe type.
1684
1685 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
1686
1687         * expression.cs (Invocation.OverloadResolve): Avoid the
1688         use of hashtables and boxing here by allocating on demand.
1689
1690 2004-05-30  Martin Baulig  <martin@ximian.com>
1691
1692         * rootcontext.cs (RootContext.LookupType): Don't cache things if
1693         we're doing a silent lookup.  Don't try to lookup nested types in
1694         TypeManager.object_type (thanks to Ben Maurer).
1695
1696 2004-05-30  Martin Baulig  <martin@ximian.com>
1697
1698         Committing a patch from Ben Maurer.
1699
1700         * rootcontext.cs (RootContext.LookupType): Cache negative results.      
1701
1702 2004-05-29  Martin Baulig  <martin@ximian.com>
1703
1704         * class.cs (IMethodData.ShouldIgnore): New method.
1705
1706         * typemanager.cs (TypeManager.MethodFlags): Don't take a
1707         `Location' argument, we don't need it anywhere.  Use
1708         `IMethodData.ShouldIgnore ()' instead of
1709         `MethodData.GetMethodFlags ()'.
1710         (TypeManager.AddMethod): Removed.
1711         (TypeManager.AddMethod2): Renamed to AddMethod.
1712
1713 2004-05-29  Martin Baulig  <martin@ximian.com>
1714
1715         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
1716
1717         * convert.cs (Convert.ImplicitReferenceConversion): If we're
1718         converting from a class type S to an interface type and we already
1719         have an object on the stack, don't box it again.  Fixes #52578.
1720
1721 2004-05-29  Martin Baulig  <martin@ximian.com>
1722
1723         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
1724         Added support for `params' parameters.  Fixes #59267.
1725
1726 2004-05-29  Martin Baulig  <martin@ximian.com>
1727
1728         * literal.cs (NullPointer): Provide a private .ctor which sets
1729         `type' to TypeManager.object_type.  Fixes #59048.
1730
1731 2004-05-29  Martin Baulig  <martin@ximian.com>
1732
1733         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
1734         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
1735
1736         * ecore.cs (EventExpr.instance_expr): Make the field private.
1737
1738 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
1739
1740         Fixed bug #50080 & cs0214-2.cs
1741         * expression.cs (Cast.DoResolve): Check unsafe context here.
1742         
1743         * statement.cs (Resolve.DoResolve): Likewise.
1744
1745 2004-05-26  Martin Baulig  <martin@ximian.com>
1746
1747         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
1748
1749         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
1750         (RootContext.LookupType): Pass down the `silent' flag.
1751
1752 2004-05-25  Martin Baulig  <martin@ximian.com>
1753
1754         * expression.cs
1755         (MethodGroupExpr.IdenticalTypeName): New public property.
1756         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
1757         expression actually refers to a type.
1758
1759 2004-05-25  Martin Baulig  <martin@ximian.com>
1760
1761         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
1762         for #56176 and made it actually work.
1763
1764 2004-05-25  Martin Baulig  <martin@ximian.com>
1765
1766         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
1767         (FieldExpr, PropertyExpr): Override and implement
1768         CacheTemporaries.  Fixes #52279.
1769
1770 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
1771
1772         * location.cs: In the new compiler listing a file twice is a
1773         warning, not an error.
1774
1775 2004-05-24  Martin Baulig  <martin@ximian.com>
1776
1777         * enum.cs (Enum.DefineType): For the `BaseType' to be a
1778         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
1779
1780 2004-05-24  Martin Baulig  <martin@ximian.com>
1781
1782         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
1783         walking the `using' list.  Fixes #53921.
1784
1785 2004-05-24  Martin Baulig  <martin@ximian.com>
1786
1787         * const.cs (Const.LookupConstantValue): Added support for
1788         EmptyCast's; fixes #55251.
1789
1790 2004-05-24  Martin Baulig  <martin@ximian.com>
1791
1792         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
1793         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
1794         which does the CS0135 check.  The reason is that we first need to
1795         check whether the variable actually exists.
1796
1797 2004-05-24  Martin Baulig  <martin@ximian.com>
1798
1799         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
1800         than RootContext.LookupType() to find the explicit interface
1801         type.  Fixes #58584.
1802
1803 2004-05-24  Raja R Harinath  <rharinath@novell.com>
1804
1805         * Makefile: Simplify.  Use executable.make.
1806         * mcs.exe.sources: New file.  List of sources of mcs.exe.
1807
1808 2004-05-24  Anders Carlsson  <andersca@gnome.org>
1809
1810         * decl.cs:
1811         * enum.cs:
1812         Use the invariant culture when doing String.Compare for CLS case
1813         sensitivity.
1814         
1815 2004-05-23  Martin Baulig  <martin@ximian.com>
1816
1817         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
1818         don't have any dots.  Fixes #52622, added cs0246-8.cs.
1819
1820         * namespace.cs (NamespaceEntry.Lookup): Likewise.
1821
1822 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
1823
1824         * class.cs (MemberBase.Define): Reuse MemberType member for 
1825         resolved type. Other methods can use it too.
1826
1827 2004-05-23  Martin Baulig  <martin@ximian.com>
1828
1829         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
1830         the variable also exists in the current block (otherwise, we need
1831         to report a CS0103).  Fixes #58670.
1832
1833 2004-05-23  Martin Baulig  <martin@ximian.com>
1834
1835         * flowanalysis.cs (Reachability.Reachable): Compute this
1836         on-the-fly rather than storing it as a field.
1837
1838 2004-05-23  Martin Baulig  <martin@ximian.com>
1839
1840         * flowanalysis.cs (Reachability.And): Manually compute the
1841         resulting `barrier' from the reachability.      
1842        
1843 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
1844
1845         Fix bug #57835
1846         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
1847         instance of ObsoleteAttribute when symbol is obsolete.
1848
1849         * class.cs
1850         (IMethodData): Extended interface for ObsoleteAttribute support.
1851
1852 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
1853
1854         * attribute.cs: Fix bug #55970
1855
1856 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
1857
1858         Fix bug #52705
1859         * attribute.cs
1860         (GetObsoleteAttribute): New method. Creates the instance of
1861         ObsoleteAttribute.
1862         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
1863         ObsoleteAttribute when member is obsolete.
1864         (AttributeTester.Report_ObsoleteMessage): Common method for
1865         Obsolete error/warning reporting.
1866
1867         * class.cs
1868         (TypeContainer.base_classs_type): New member for storing parent type.
1869
1870         * decl.cs
1871         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
1872         for this MemberCore.
1873
1874 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
1875
1876         * attribute.cs, const.cs: Fix bug #58590
1877
1878 2004-05-21  Martin Baulig  <martin@ximian.com>
1879
1880         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
1881         out parameters if the end of the method is unreachable.  Fixes
1882         #58098. 
1883
1884 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
1885
1886         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
1887         Hari was right, why extra method.
1888
1889 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
1890
1891         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
1892
1893 2004-05-20  Martin Baulig  <martin@ximian.com>
1894
1895         * delegate.cs: Convert this file to Unix mode - like the original
1896         version in mcs is.
1897
1898 2004-05-20  Martin Baulig  <martin@ximian.com>
1899
1900         * attribute.cs: Convert this file to Unix mode - like the original
1901         version in mcs is.
1902
1903 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
1904
1905        Fix bug #58688 (MCS does not report error when the same attribute
1906        is assigned twice)
1907
1908        * attribute.cs (Attribute.Emit): Distinction between null and default.
1909
1910 2004-05-19  Raja R Harinath  <rharinath@novell.com>
1911
1912        * cs-parser.jay (attribute): Create a GlobalAttribute for the case
1913        of a top-level attribute without an attribute target.
1914        * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
1915        Make non-static.
1916        (Attribute.Conditional_GetConditionName), 
1917        (Attribute.Obsolete_GetObsoleteMessage): Update.
1918        (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
1919        part of ScanForIndexerName.
1920        (Attribute.CanIgnoreInvalidAttribute): New function.
1921        (Attribute.ScanForIndexerName): Move to ...
1922        (Attributes.ScanForIndexerName): ... here.
1923        (Attributes.Attrs): Rename from now-misnamed AttributeSections.
1924        (Attributes.Search): New internal variant that can choose not to
1925        complain if types aren't resolved.  The original signature now
1926        complains.
1927        (Attributes.GetClsCompliantAttribute): Use internal variant, with
1928        complaints suppressed.
1929        (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
1930        only if it not useful.
1931        (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
1932        top-level for attributes that are shared between the assembly
1933        and a top-level class.
1934        * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
1935        * class.cs: Update to reflect changes.
1936        (DefineIndexers): Fuse loops.
1937        * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
1938        a couple more variants of attribute names.
1939
1940 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
1941
1942         Fix bug #52585 (Implemented explicit attribute declaration)
1943
1944         * attribute.cs:
1945         (Attributable.ValidAttributeTargets): New abstract method. It gets
1946         list of valid attribute targets for explicit target declaration.
1947         (Attribute.Target): It holds target itself.
1948         (AttributeSection): Removed.
1949         (Attribute.CheckTargets): New method. It checks whether attribute
1950         target is valid for the current element.
1951
1952         * class.cs:
1953         (EventProperty): New class. For events that are declared like
1954         property (with add and remove accessors).
1955         (EventField): New class. For events that are declared like field.
1956         class.cs
1957
1958         * cs-parser.jay: Implemented explicit attribute target declaration.
1959
1960         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
1961         Override ValidAttributeTargets.
1962
1963         * parameter.cs:
1964         (ReturnParameter): Class for applying custom attributes on 
1965         the return type.
1966         (ParameterAtribute): New class. Class for applying custom
1967         attributes on the parameter type.
1968
1969 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
1970
1971         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
1972         definitions. 
1973
1974         (Method): Allow UNSAFE here.
1975
1976         * modifiers.cs: Support unsafe reporting.
1977
1978 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
1979
1980         * decl.cs: Fix bug #58478.
1981
1982 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
1983
1984         * statement.cs: When checking for unreachable code on an EmptyStatement,
1985         set the location. Fixes bug #58488.
1986
1987 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
1988
1989         * driver.cs: Add -pkg handling.
1990
1991         From Gonzalo: UseShelLExecute=false
1992
1993 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
1994
1995         * attribute.cs:
1996         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
1997         for attribute.
1998         (Attribute.IsClsCompliaceRequired): Moved to base for better
1999         accesibility.
2000         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
2001         when attribute is AttributeUsageAttribute.
2002         (Attribute.GetValidTargets): Simplified.
2003         (Attribute.GetAttributeUsage): New method returns AttributeUsage
2004         attribute for this type.
2005         (Attribute.ApplyAttributes): Method renamed to Emit and make
2006         non-static.
2007         (GlobalAttributeSection): New class for special handling of global
2008         attributes (assembly, module).
2009         (AttributeSection.Emit): New method.
2010
2011         * class.cs: Implemented Attributable abstract methods.
2012         (MethodCore.LabelParameters): Moved to Parameter class.
2013         (Accessor): Is back simple class.
2014         (PropertyMethod): Implemented Attributable abstract class.
2015         (DelegateMethod): Implemented Attributable abstract class.
2016         (Event): New constructor for disctintion between normal Event
2017         and Event with accessors.
2018
2019         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
2020
2021         * codegen.cs, const.cs, decl.cs, delegate.cs:
2022         (CommonAssemblyModulClass): Implemented Attributable abstract class
2023         and simplified.
2024
2025         * enum.cs: Implement IAttributeSupport interface.
2026         (EnumMember): New class for emum members. Implemented Attributable
2027         abstract class
2028
2029         * parameter.cs:
2030         (ParameterBase): Is abstract.
2031         (ReturnParameter): New class for easier [return:] attribute handling.
2032
2033         * typemanager.cs: Removed builder_to_attr.
2034
2035 2004-05-11  Raja R Harinath  <rharinath@novell.com>
2036
2037         Fix bug #57151.
2038         * attribute.cs (Attribute.GetPositionalValue): New function.
2039         * class.cs (TypeContainer.VerifyMembers): New function.
2040         (TypeContainer.Emit): Use it.
2041         (ClassOrStruct): New base class for Class and Struct.
2042         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
2043         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
2044         class.
2045         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
2046         then each non-static field should have a FieldOffset attribute.
2047         Otherwise, none of the fields should have a FieldOffset attribute.
2048         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
2049         and FieldOffset attributes.
2050         * typemanager.cs (TypeManager.struct_layout_attribute_type)
2051         (TypeManager.field_offset_attribute_type): New core types.
2052         (TypeManager.InitCoreTypes): Initialize them.
2053
2054 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
2055
2056         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
2057         Return correct type.
2058         From bug #58270.
2059
2060 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
2061
2062         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
2063         be implicitly converted to ulong.
2064         
2065         * expression.cs: The logic for allowing operator &, | and ^ worked
2066         was wrong, it worked before because we did not report an error in
2067         an else branch.  Fixes 57895.
2068
2069         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
2070         allow volatile fields to be reference types.
2071
2072 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
2073
2074         * driver.cs: Add support for /debug-
2075
2076 2004-05-07  Raja R Harinath  <rharinath@novell.com>
2077
2078         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
2079         Add a 'complain' parameter to silence errors.
2080         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
2081         silently overlooked type-resolutions.
2082         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
2083         to reflect changes.
2084         (Attributes.Search): New function.
2085         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
2086         (Attributes.GetAttributeFullName): Remove hack.
2087         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
2088         Update to reflect changes.
2089         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
2090         Use Attributes.Search instead of nested loops.
2091
2092 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
2093
2094         * decl.cs:
2095         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
2096         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
2097         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
2098
2099         * report.cs: (Report.Warning): Renamed to Warning_T because of
2100         parameter collision.
2101
2102 2004-05-05  Raja R Harinath  <rharinath@novell.com>
2103
2104         * expression.cs (MemberAccess.ResolveMemberAccess):
2105         Exit with non-zero status after Report.Error.
2106         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
2107         Likewise.
2108         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
2109
2110 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
2111
2112         * support.cs: Don't hang when the file is empty.
2113
2114 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
2115
2116         * support.cs: In SeekableStreamReader, compute the preamble size of the
2117           underlying stream. Position changes should take into account that initial
2118           count of bytes.
2119
2120 2004-05-03  Todd Berman  <tberman@sevenl.net>
2121
2122         * driver.cs: remove unused GetSysVersion function.
2123
2124 2004-05-03  Todd Berman  <tberman@sevenl.net>
2125
2126         * driver.cs: Remove the hack from saturday, as well as the hack
2127         from jackson (LoadAssemblyFromGac), also adds the CWD to the
2128         link_paths to get that bit proper.
2129
2130 2004-05-01  Todd Berman  <tberman@sevenl.net>
2131
2132         * driver.cs: Try a LoadFrom before a Load, this checks the current
2133         path. This is currently a bug in mono that is be fixed, however, this
2134         provides a workaround for now. This will be removed when the bug
2135         is fixed.
2136
2137 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
2138
2139         * CryptoConvert.cs: Updated to latest version. Fix issue with 
2140         incomplete key pairs (#57941).
2141
2142 2004-05-01  Todd Berman  <tberman@sevenl.net>
2143
2144         * driver.cs: Remove '.' from path_chars, now System.* loads properly
2145         from the GAC
2146
2147 2004-04-30  Jackson Harper  <jackson@ximian.com>
2148
2149         * codegen.cs: Open keys readonly.
2150         
2151 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2152
2153         * typemanager.cs: don't report cyclic struct layout when a struct
2154         contains 2 or more fields of the same type. Failed for Pango.AttrShape
2155         which has 2 Pango.Rectangle fields.
2156
2157 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
2158
2159         * expression.cs: Handle IntPtr comparisons with IL code
2160         rather than a method call.
2161
2162 2004-04-29  Martin Baulig  <martin@ximian.com>
2163
2164         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
2165         the list of PropertyInfo's in class hierarchy and find the
2166         accessor.  Fixes #56013.
2167
2168 2004-04-29  Martin Baulig  <martin@ximian.com>
2169
2170         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
2171
2172 2004-04-29  Martin Baulig  <martin@ximian.com>
2173
2174         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
2175
2176         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
2177
2178 2004-04-29  Martin Baulig  <martin@ximian.com>
2179
2180         * class.cs (ConstructorInitializer.Resolve): Check whether the
2181         parent .ctor is accessible.  Fixes #52146.
2182
2183 2004-04-29  Martin Baulig  <martin@ximian.com>
2184
2185         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
2186
2187         * statement.cs (Using.EmitLocalVariableDecls): Use
2188         TypeManager.idisposable_type, not typeof (IDisposable).
2189         (Foreach.EmitCollectionForeach): Added support for valuetypes.
2190
2191 2004-04-29  Martin Baulig  <martin@ximian.com>
2192
2193         * class.cs (Event.Define): Don't emit the field and don't set
2194         RTSpecialName and SpecialName for events on interfaces.  Fixes
2195         #57703. 
2196
2197 2004-04-29  Raja R Harinath  <rharinath@novell.com>
2198
2199         Refactor Attribute.ApplyAttributes.
2200         * attribute.cs (Attributable): New base class for objects that can
2201         have Attributes applied on them.
2202         (Attribute): Make AttributeUsage fields public.
2203         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
2204         (Attribute.IsInternalCall): New property.
2205         (Attribute.UsageAttr): Convert to a public read-only property.
2206         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
2207         (Attribute.ResolveType, Attribute.Resolve)
2208         (Attribute.ScanForIndexerName): Update to reflect changes.
2209         (Attribute.CheckAttributeTarget): Re-format.
2210         (Attribute.ApplyAttributes): Refactor, to various
2211         Attributable.ApplyAttributeBuilder methods.
2212         * decl.cs (MemberCore): Make Attributable.
2213         * class.cs (Accessor): Make Attributable.
2214         (MethodData.ApplyAttributes): Use proper attribute types, not
2215         attribute names.
2216         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
2217         (TypeContainer.ApplyAttributeBuilder)
2218         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
2219         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
2220         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
2221         (Operator.ApplyAttributeBuilder): New factored-out methods.
2222         * const.cs (Const.ApplyAttributeBuilder): Likewise.
2223         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
2224         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
2225         * parameter.cs (ParameterBase): New Attributable base class
2226         that can also represent Return types.
2227         (Parameter): Update to the changes.
2228
2229 2004-04-29  Jackson Harper  <jackson@ximian.com>
2230
2231         * driver.cs: Prefer the corlib system version when looking for
2232         assemblies in the GAC. This is still a hack, but its a better hack
2233         now.
2234         
2235 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
2236
2237         * decl.cs, enum.cs: Improved error 3005 reporting.
2238   
2239         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
2240         (related_symbols): New private member for list of symbols
2241         related to reported error/warning.
2242         
2243         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
2244
2245 2004-04-29  Martin Baulig  <martin@ximian.com>
2246
2247         * ecore.cs (Expression.Constantify): If we're an enum and
2248         TypeManager.TypeToCoreType() doesn't give us another type, use
2249         t.UnderlyingSystemType.  Fixes #56178.  
2250
2251 2004-04-29  Martin Baulig  <martin@ximian.com>
2252
2253         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
2254         interfaces and for each interface, only add members directly
2255         declared in that interface.  Fixes #53255.
2256
2257 2004-04-28  Martin Baulig  <martin@ximian.com>
2258
2259         * expression.cs (ConditionalLogicalOperator): Use a temporary
2260         variable for `left' to avoid that we evaluate it more than once;
2261         bug #52588.
2262
2263 2004-04-28  Martin Baulig  <martin@ximian.com>
2264
2265         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
2266         `void[]' (CS1547).
2267
2268 2004-04-28  Martin Baulig  <martin@ximian.com>
2269
2270         * statement.cs (LocalInfo.Resolve): Check whether the type is not
2271         void (CS1547).
2272
2273         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
2274         whether the type is not void (CS1547).
2275
2276 2004-04-28  Martin Baulig  <martin@ximian.com>
2277
2278         * expression.cs (Unary.DoResolveLValue): Override this and report
2279         CS0131 for anything but Operator.Indirection.
2280
2281 2004-04-28  Martin Baulig  <martin@ximian.com>
2282
2283         Committing a patch from Ben Maurer; see bug #50820.
2284
2285         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
2286         check for classes.
2287
2288         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
2289         classes.        
2290
2291 2004-04-28  Martin Baulig  <martin@ximian.com>
2292
2293         Committing a patch from Ben Maurer; see bug #50820.
2294
2295         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
2296         check for classes.
2297
2298         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
2299         classes.        
2300
2301 2004-04-28  Martin Baulig  <martin@ximian.com>
2302
2303         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
2304         (Block.AddLabel): Call DoLookupLabel() to only search in the
2305         current block.
2306
2307 2004-04-28  Martin Baulig  <martin@ximian.com>
2308
2309         * cfold.cs (ConstantFold.BinaryFold): Added special support for
2310         comparing StringConstants and NullLiterals in Equality and Inequality.
2311
2312 2004-04-28  Jackson Harper  <jackson@ximian.com>
2313
2314         * driver.cs: Attempt to load referenced assemblies from the
2315         GAC. This is the quick and dirty version of this method that
2316         doesnt take into account versions and just takes the first
2317         canidate found. Will be good enough for now as we will not have more
2318         then one version installed into the GAC until I update this method.
2319
2320 2004-04-28  Martin Baulig  <martin@ximian.com>
2321
2322         * typemanager.cs (TypeManager.CheckStructCycles): New public
2323         static method to check for cycles in the struct layout.
2324
2325         * rootcontext.cs (RootContext.PopulateTypes): Call
2326         TypeManager.CheckStructCycles() for each TypeContainer.
2327         [Note: We only need to visit each type once.]
2328
2329 2004-04-28  Martin Baulig  <martin@ximian.com>
2330
2331         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
2332
2333         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
2334         success and added `out object value'.  Use a `bool resolved' field
2335         to check whether we've already been called rather than
2336         `ConstantValue != null' since this breaks for NullLiterals.
2337
2338 2004-04-28  Raja R Harinath  <rharinath@novell.com>
2339
2340         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
2341         setting of this flag, since the 'set' method may be non-public.
2342
2343 2004-04-28  Raja R Harinath  <rharinath@novell.com>
2344
2345         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
2346         check on current_vector.Block.
2347
2348 2004-04-27  Martin Baulig  <martin@ximian.com>
2349
2350         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
2351         a field initializer.  Fixes #56459.
2352
2353 2004-04-27  Martin Baulig  <martin@ximian.com>
2354
2355         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
2356         we're not attempting to use an indexer.  Fixes #52154.
2357
2358 2004-04-27  Martin Baulig  <martin@ximian.com>
2359
2360         * statement.cs (Return): Don't create a return label if we don't
2361         need it; reverts my change from January 20th.  Thanks to Ben
2362         Maurer for this.
2363
2364 2004-04-27  Martin Baulig  <martin@ximian.com>
2365
2366         According to the spec, `goto' can only leave a nested scope, but
2367         never enter it.
2368
2369         * statement.cs (Block.LookupLabel): Only lookup in the current
2370         block, don't recurse into parent or child blocks.
2371         (Block.AddLabel): Check in parent and child blocks, report
2372         CS0140/CS0158 if we find a duplicate.
2373         (Block): Removed this indexer for label lookups.
2374         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
2375         this already does the error reporting for us.
2376
2377         * flowanalysis.cs
2378         (FlowBranching.UsageVector.Block): New public variable; may be null.
2379         (FlowBranching.CreateSibling): Added `Block' argument.
2380         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
2381         label for the target of a `goto' and check whether we're not
2382         leaving a `finally'.
2383
2384 2004-04-27  Martin Baulig  <martin@ximian.com>
2385
2386         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
2387         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
2388         just for returns).
2389
2390 2004-04-27  Martin Baulig  <martin@ximian.com>
2391
2392         * statement.cs (Block.AddLabel): Also check for implicit blocks
2393         and added a CS0158 check.
2394
2395 2004-04-27  Martin Baulig  <martin@ximian.com>
2396
2397         * flowanalysis.cs (FlowBranchingLoop): New class.
2398         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
2399         UsageVector's instead of an ArrayList.
2400         (FlowBranching.Label): Likewise.
2401         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
2402         (FlowBranching.AddBreakVector): New method.
2403
2404 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
2405
2406         * attribute.cs: Small regression fix: only convert the type if we
2407         the type is different, fixes System.Drawing build.
2408
2409 2004-04-27  Martin Baulig  <martin@ximian.com>
2410
2411         * attribute.cs (Attribute.Resolve): If we have a constant value
2412         for a named field or property, implicity convert it to the correct
2413         type.
2414
2415 2004-04-27  Raja R Harinath  <rharinath@novell.com>
2416
2417         * statement.cs (Block.Block): Implicit blocks share
2418         'child_variable_names' fields with parent blocks.
2419         (Block.AddChildVariableNames): Remove.
2420         (Block.AddVariable): Mark variable as "used by a child block" in
2421         every surrounding block.
2422         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
2423         been used in a child block, complain about violation of "Invariant
2424         meaning in blocks" rule.
2425         * cs-parser.jay (declare_local_variables): Don't use
2426         AddChildVariableNames.
2427         (foreach_statement): Don't create an implicit block: 'foreach'
2428         introduces a scope.
2429
2430 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
2431
2432         * convert.cs (ImplicitNumericConversion): 0 is also positive when
2433         converting from 0L to ulong.  Fixes 57522.
2434
2435 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
2436
2437         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
2438         derived class hides via 'new' keyword field from base class (test-242.cs).
2439         TODO: Handle this in the more general way.
2440         
2441         * class.cs (CheckBase): Ditto.
2442
2443 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
2444
2445         * decl.cs (caching_flags): New member for storing cached values
2446         as bit flags.
2447         (MemberCore.Flags): New enum where bit flags for caching_flags
2448         are defined.
2449         (MemberCore.cls_compliance): Moved to caching_flags.
2450         (DeclSpace.Created): Moved to caching_flags.
2451
2452         * class.cs: Use caching_flags instead of DeclSpace.Created
2453         
2454 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
2455
2456         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
2457         if we are only a derived class, not a nested class.
2458
2459         * typemanager.cs: Same as above, but do this at the MemberLookup
2460         level (used by field and methods, properties are handled in
2461         PropertyExpr).   Allow for the qualified access if we are a nested
2462         method. 
2463
2464 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
2465
2466         * class.cs: Refactoring.
2467         (IMethodData): New inteface; Holds links to parent members
2468         to avoid member duplication (reduced memory allocation).
2469         (Method): Implemented IMethodData interface.
2470         (PropertyBase): New inner classes for get/set methods.
2471         (PropertyBase.PropertyMethod): Implemented IMethodData interface
2472         (Event): New inner classes for add/remove methods.
2473         (Event.DelegateMethod): Implemented IMethodData interface.
2474
2475         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
2476         EmitContext (related to class.cs refactoring).
2477
2478 2004-04-21  Raja R Harinath  <rharinath@novell.com>
2479
2480         * delegate.cs (Delegate.VerifyApplicability): If the number of
2481         arguments are the same as the number of parameters, first try to
2482         verify applicability ignoring  any 'params' modifier on the last
2483         parameter.
2484         Fixes #56442.
2485
2486 2004-04-08  Martin Baulig  <martin@ximian.com>
2487
2488         Merged latest changes into gmcs.  Please keep this comment in
2489         here, it makes it easier for me to see what changed in MCS since
2490         the last time I merged.
2491
2492 2004-04-16  Raja R Harinath  <rharinath@novell.com>
2493
2494         * class.cs (TypeContainer.AddIndexer): Use
2495         'ExplicitInterfaceName' to determine if interface name was
2496         explicitly specified.  'InterfaceType' is not initialized at this time.
2497         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
2498         Indexers array is already in the required order.  Initialize
2499         'IndexerName' only if there are normal indexers.
2500         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
2501         (TypeContainer.Emit): Emit DefaultMember attribute only if
2502         IndexerName is initialized.
2503         Fixes #56300.
2504
2505 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
2506
2507         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
2508         Fixes #57007
2509
2510 2004-04-15  Raja R Harinath  <rharinath@novell.com>
2511
2512         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
2513         attributes.
2514         Fix for #56456.
2515
2516         * attribute.cs (Attribute.Resolve): Check for duplicate named
2517         attributes.
2518         Fix for #56463.
2519
2520 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
2521
2522         * iterators.cs (MarkYield): track whether we are in an exception,
2523         and generate code accordingly.  Use a temporary value to store the
2524         result for our state.
2525
2526         I had ignored a bit the interaction of try/catch with iterators
2527         since their behavior was not entirely obvious, but now it is
2528         possible to verify that our behavior is the same as MS .NET 2.0
2529
2530         Fixes 54814
2531
2532 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
2533
2534         * iterators.cs: Avoid creating temporaries if there is no work to
2535         do. 
2536
2537         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
2538         Enumerations, use TypeManager.EnumToUnderlying and call
2539         recursively. 
2540
2541         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
2542         bug #57013
2543
2544         (This.Emit): Use EmitContext.EmitThis to emit our
2545         instance variable.
2546
2547         (This.EmitAssign): Ditto.
2548
2549         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
2550         codepaths, we will move all the functionality into
2551         Mono.CSharp.This 
2552
2553         (FieldExpr.EmitAssign): Ditto.
2554
2555         This fixes several hidden bugs that I uncovered while doing a code
2556         review of this today.
2557
2558         * codegen.cs (EmitThis): reworked so the semantics are more clear
2559         and also support value types "this" instances.
2560
2561         * iterators.cs: Changed so that for iterators in value types, we
2562         do not pass the value type as a parameter.  
2563
2564         Initialization of the enumerator helpers is now done in the caller
2565         instead of passing the parameters to the constructors and having
2566         the constructor set the fields.
2567
2568         The fields have now `assembly' visibility instead of private.
2569
2570 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
2571
2572         * expression.cs (Argument.Resolve): Check if fields passed as ref
2573         or out are contained in a MarshalByRefObject.
2574
2575         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
2576         another compiler type.
2577
2578 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
2579
2580         * class.cs (Indexer.Define): use the new name checking method.
2581         Also, return false on an error.
2582         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
2583         (is_identifier_[start/part]_character): make static.
2584
2585 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
2586
2587         * expression.cs (Binary.ResolveOperator): Do no append strings
2588         twice: since we can be invoked more than once (array evaluation)
2589         on the same concatenation, take care of this here.  Based on a fix
2590         from Ben (bug #56454)
2591
2592 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
2593
2594         * codegen.cs: Fix another case where CS1548 must be reported (when 
2595         delay-sign isn't specified and no private is available #56564). Fix
2596         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
2597         error when MCS is used on the MS runtime and we need to delay-sign 
2598         (which seems unsupported by AssemblyBuilder - see #56621).
2599
2600 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
2601
2602         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
2603         (TypeManager.ComputeNamespaces): Faster implementation for
2604         Microsoft runtime.
2605
2606         * compiler.csproj: Updated AssemblyName to mcs.
2607
2608 2004-05-11  Jackson Harper  <jackson@ximian.com>
2609
2610         * Makefile: Preserve MONO_PATH
2611         
2612 2004-05-11  Jackson Harper  <jackson@ximian.com>
2613
2614         * Makefile: Use mono and mcs to build gmcs
2615         
2616 2004-05-03  Miguel de Icaza  <miguel@ximian.com>
2617
2618         * codegen.cs: Add patch from Robert Shade
2619         <rshade@dvsconsulting.com>, use FileAccess.Read on the keyfile, to
2620         sync with mcs.
2621
2622 2004-05-02  Sebastien Pouliot  <sebastien@ximian.com>
2623
2624         * CryptoConvert.cs: Updated to latest version. Fix issue with 
2625         incomplete key pairs (#57941).
2626
2627 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
2628
2629         * codegen.cs: Fix another case where CS1548 must be reported (when 
2630         delay-sign isn't specified and no private is available #56564). Fix
2631         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
2632         error when MCS is used on the MS runtime and we need to delay-sign 
2633         (which seems unsupported by AssemblyBuilder - see #56621).
2634
2635 2004-04-29  Jackson Harper  <jackson@ximian.com>
2636
2637         * Makefile: Set MONO_PATH to use the bootstrap corlib
2638         * driver.cs: Check the GAC for referenced assemblies.
2639                 
2640 2004-04-29  Martin Baulig  <martin@ximian.com>
2641
2642         * Makefile (gmcs.exe): Set MONO_PATH to use `../class/lib/net_2_0'.
2643
2644 2004-04-07  Martin Baulig  <martin@ximian.com>
2645
2646         * expression.cs (Binary.ResolveOperator): Added special case for
2647         Equality/Inequality between a type parameter and a null literal.
2648
2649 2004-04-07  Martin Baulig  <martin@ximian.com>
2650
2651         * convert.cs: Check null literal -> type parameter conversions.
2652
2653 2004-04-07  Martin Baulig  <martin@ximian.com>
2654
2655         * generic.cs (ConstructedType.CheckConstraints): Enforce the
2656         `class' and `struct' constraints.
2657
2658 2004-04-07  Martin Baulig  <martin@ximian.com>
2659
2660         * generic.cs (SpecialConstraint): New public enum.
2661         (Constraints.Resolve): Added support for the `class' and `struct'
2662         constraints.
2663
2664         * cs-parser.jay (type_parameter_constraint): Added support for the
2665         `class' and `struct' constraints.
2666
2667 2004-04-07  Martin Baulig  <martin@ximian.com>
2668
2669         * support.cs (GenericConstraints): Replaced `Types' by
2670         `ClassConstraint' and `InterfaceConstraints'; added
2671         `HasClassConstraint'.   
2672
2673 2004-04-07  Martin Baulig  <martin@ximian.com>
2674
2675         * generic.cs
2676         (Constraints.InterfaceConstraints): New public property.
2677         (Constraints.Types): Make this property public
2678         (TypeParameter): Implement IMemberContainer.
2679         (TypeParameter.Define): Take a `GenericTypeParameterBuilder'
2680         instead of a TypeBuilder/MethodBuilder; pass the interface
2681         constraints to TypeManager.AddTypeParameter().
2682         (TypeParameter.DefineType): Just take an EmitContext and no
2683         TypeBuilder/MethodBuilder.  Use the new public API.
2684
2685         * typemanager.cs (TypeManager.AddTypeParameter): Added
2686         `TypeExpr[]' argument; add the interfaces to the
2687         `builder_to_ifaces' hash.
2688         (TypeManager.LookupMemberContainer): For
2689         GenericTypeParameterBuilders, get the TypeParameter from the
2690         `builder_to_type_param'.
2691         (TypeManager.FindMembers): For GenericTypeParameterBuilders, get
2692         the TypeParameter and call FindMembers on it.
2693
2694 2004-04-07  Martin Baulig  <martin@ximian.com>
2695
2696         * class.cs
2697         (MethodCore.GenericMethod): Moved this field here from Method.
2698         (MethodCore.IsDuplicateImplementation): Take the number of type
2699         parameters into account if we're a generic method.
2700
2701         * expression.cs (Invocation.InferTypeArguments): Don't return true
2702         if `arguments' is null; we still need to check whether we actually
2703         don't need to infer anything in this case.
2704         (MemberAccess): Merged the functionality from GenericMemberAccess
2705         into this class.
2706
2707         * generic.cs (GenericMemberAccess): Removed.
2708
2709 2004-04-05  Martin Baulig  <martin@ximian.com>
2710
2711         * decl.cs (MemberCore): For generic classes, interfaces and
2712         structs, `Name' now includes the number of type parameters
2713         ("Stack!1.Node!1").
2714         (DeclSpace.FindType): Removed the `num_type_args' argument; we now
2715         encode the number of type arguments in the type name.
2716
2717         * expression.cs (Expression.MemberLookup): Removed the
2718         `num_type_args' argument; we now encode the number of type
2719         arguments in the type name.
2720
2721         * ecore.cs (SimpleName): Encode the number of type arguments in
2722         the type name itself.
2723
2724         * generic.cs (ConstructedType): Likewise.
2725
2726         * tree.cs (Tree.RecordDecl): Take a `string' instead of a
2727         `MemberName'; we now include the number of type parameters in the
2728         type name.
2729
2730         * typemanager.cs (TypeManager.CheckGeneric): Removed.
2731         (TypeManager.MemberLookup): Removed the
2732         `num_type_args' argument; we now encode the number of type
2733         arguments in the type name.     
2734
2735 2004-04-03  Martin Baulig  <martin@ximian.com>
2736
2737         * decl.cs (MemberCore.ctor): Take a MemberName instead of a sting.
2738         (MemberCore.MemberName): Moved here from MemberBase.
2739         (DeclSpace.SetParameterInfo): Just take the constraints as an
2740         ArrayList; we already have the type parameters in our
2741         `MemberName'; also do the CS0080 reporting here.
2742
2743         * cs-parser.jay (struct_declaration): Use `member_name' instead of
2744         `IDENTIFIER opt_type_parameter_list'; when constructing our
2745         `MemberName', it'll already include our type parameters.
2746         (class_declaration, interface_declaration): Likewise.
2747         (delegate_declaration): Likewise.
2748         (MakeName): Take a MemberName and return a MemberName.
2749         The following two changes are required to avoid shift/reduce conflicts:
2750         (member_name): Don't include a TypeName anymore; ie. this is now
2751         just 'IDENTIFIER opt_type_parameter_list'.
2752         (property_declaration, event_declaration): Use a
2753         `namespace_or_type_name' instead of a `member_name'.            
2754
2755 2004-04-03  Martin Baulig  <martin@ximian.com>
2756
2757         * decl.cs (MemberName): Renamed to `TypeName' and created a new
2758         `MemberName' class.
2759         (TypeName): Formerly known as MemberName.
2760
2761         * namespace.cs (NamespaceEntry.UsingAlias): Take a `TypeName'
2762         instead of a `MemberName'.
2763
2764         * cs-parser.jay (namespace_or_type_name): Create a TypeName.
2765         (member_name): New rule; create a MemberName.
2766
2767 2004-04-02  Martin Baulig  <martin@ximian.com>
2768
2769         * namespace.cs (NamespaceEntry.VerifyUsing): Added error checking
2770         (CS0305 and CS0308).
2771
2772 2004-04-02  Martin Baulig  <martin@ximian.com>
2773
2774         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Added
2775         support for nested types.
2776
2777 2004-04-02  Martin Baulig  <martin@ximian.com>
2778
2779         * ecore.cs (IAlias): New public interface.
2780         (TypeExpr, TypeExpression): Implement IAlias.
2781         (TypeAliasExpression): New public class.
2782
2783         * namespace.cs (Namespace): Implement IAlias.
2784         (Namespace.Lookup): Return an IAlias instead on an object.
2785         (Namespace.DefineName): Take an IAlias instead of an object.
2786         (NamespaceEntry.AliasEntry.Resolve): Return an IAlias instead of
2787         an object.
2788         (NamespaceEntry.UsingAlias): Take a Membername instead of an
2789         Expression.
2790         (NamespaceEntry.LookupAlias): Return an IAlias instead on an
2791         object.
2792         (NamespaceEntry.Lookup): Likewise.
2793
2794         * rootcontext.cs (RootContext.LookupType): Return a TypeExpr
2795         instead of a Type.      
2796
2797         * decl.cs (DeclSpace): Implement IAlias.
2798         (DeclSpace.LookupAlias): Return an IAlias instead of a string.
2799
2800         * generic.cs (ConstructedType): Improved error checking.
2801
2802 2004-04-02  Martin Baulig  <martin@ximian.com>
2803
2804         * convert.cs: Added type parameter conversions.
2805
2806         * ecore.cs
2807         (UnboxCast.Emit): Emit an `unbox.any' for type params.
2808         (ClassCast.Emit): If the source type is a type parameter, box it.
2809         If the target type is a type parameter, emit an `unbox.any'
2810         instead of a `classcast'.1      
2811
2812 2004-04-01  Martin Baulig  <martin@ximian.com>
2813
2814         * cs-tokenizer.cs (parse_less_than): Allow Token.DOT.
2815
2816 2004-04-01  Martin Baulig  <martin@ximian.com>
2817
2818         * generic.cs (ConstructedType.CheckConstraints): Use
2819         Convert.ImplicitStandardConversionExists(); user-defined implicit
2820         conversions are not allowed according to the spec.
2821
2822 2004-03-30  Martin Baulig  <martin@ximian.com>
2823
2824         * expression.cs (New): Added support for type parameters.
2825
2826         * typemanager.cs
2827         (TypeManager.activator_type): New public static field.
2828         (TypeManager.activator_create_instance): Likewise.
2829
2830 2004-03-30  Martin Baulig  <martin@ximian.com>
2831
2832         * typemanager.cs (TypeManager.HasConstructorConstraint): New
2833         public method.
2834
2835 2004-03-30  Martin Baulig  <martin@ximian.com>
2836
2837         * generic.cs (ConstructedType.CheckConstraints): Actually follow
2838         the spec here: the argument type must be convertible to the
2839         constraints.
2840
2841 2004-03-30  Martin Baulig  <martin@ximian.com>
2842
2843         * generic.cs
2844         (TypeParameter.Define, TypeParameter.DefineMethod): Call
2845         TypeManager.AddTypeParameter().
2846         (ConstructedType.CheckConstraints): Re-enable this and actually
2847         check whether we have a constructor constraint.
2848
2849         * typemanager.cs
2850         (TypeManager.builder_to_type_param): New static field.
2851         (TypeManager.AddTypeParameter): New static method.
2852         (TypeManager.LookupTypeParameter): New public method.
2853
2854 2004-03-30  Martin Baulig  <martin@ximian.com>
2855
2856         * generic.cs (TypeParameter.DefineType): Return a boolean and use
2857         the new API to actually define the constructor constraint.
2858
2859         * typemanager.cs
2860         (TypeManager.new_constraint_attr_type): New static field.
2861         (TypeManager.InitCoreTypes): Initialize it.
2862
2863 2004-03-30  Martin Baulig  <martin@ximian.com>
2864
2865         * generic.cs (Constraints): Completed error checking, use correct
2866         error numbers.
2867
2868 2004-03-29  Martin Baulig  <martin@ximian.com>
2869
2870         * delegate.cs (Delegate.VerifyMethod): Infer type arguments.
2871
2872         * expression.cs (Invocation.InferTypeArguments): Added overloaded
2873         public version which takes a `ParameterData pd' instead of an
2874         `ArrayList args'.
2875
2876 2004-03-29  Martin Baulig  <martin@ximian.com>
2877
2878         * typemanager.cs (TypeManager.IsGenericMethod): Take a MethodBase,
2879         not a MethodInfo.       
2880
2881 2004-03-29  Martin Baulig  <martin@ximian.com>
2882
2883         * expression.cs (Argument.ResolveMethodGroup): If we're a
2884         ConstructedType, call GetMemberAccess() on it.  
2885
2886 2004-03-29  Martin Baulig  <martin@ximian.com>
2887
2888         * class.cs (MethodBase.CheckGenericOverride): New abstract method.
2889         (MethodCore.CheckGenericOverride): When overriding a generic
2890         method, check whether the constraints match.
2891
2892         * support.cs (GenericConstraints): New public interface.
2893         (ParameterData.GenericConstraints): New public method.
2894
2895         * parameter.cs (Parameter.Resolve): Check whether we're a generic
2896         method parameter and compute our constraints if appropriate.
2897         (Parameter.GenericConstraints): New public property.
2898
2899         * generic.cs (Constraints): Implement GenericConstraints.
2900
2901 2004-03-29  Martin Baulig  <martin@ximian.com>
2902
2903         * decl.cs (MemberCache.FindMemberToOverride): Use
2904         `paramTypes [j].Equals (cmpAttrs [j])' instead of `=='.
2905
2906 2004-03-29  Martin Baulig  <martin@ximian.com>
2907
2908         * generic.cs (GenericMethod.Define): Resolve our type parameters.
2909
2910 2004-03-29  Martin Baulig  <martin@ximian.com>
2911
2912         * cs-parser.jay: Report CS0080 instead of -200 ("Constraints are
2913         not allowed on non-generic declarations").
2914
2915 2004-03-29  Martin Baulig  <martin@ximian.com>
2916
2917         * expression.cs (Invocation.InferTypeArguments): Added overloaded
2918         public version of this method.
2919
2920         * class.cs (MethodCore.IsDuplicateImplementation): Use
2921         Invocation.InferTypeArguments() to check this.
2922
2923 2004-03-29  Martin Baulig  <martin@ximian.com>
2924
2925         * convert.cs: Use TypeManager.IsDelegateType() instead of
2926         comparing types correctly.
2927
2928 2004-03-29  Martin Baulig  <martin@ximian.com>
2929
2930         * convert.cs: Use TypeManager.IsSubclassOf() instead of comparing
2931         types directly to make it work for generic instances.
2932
2933         * typemanager.cs (TypeManager.IsSubclassOf): New static method.
2934
2935 2004-03-29  Martin Baulig  <martin@ximian.com>
2936
2937         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Added
2938         support for arrays.     
2939
2940 2004-03-24  Martin Baulig  <martin@ximian.com>
2941
2942         * decl.cs (DeclSpace.FindType): Also use
2943         TypeManager.CheckGeneric() for types from the using clauses.
2944
2945 2004-03-23  Martin Baulig  <martin@ximian.com>
2946
2947         * expression.cs (Invocation.OverloadResolve): Added `bool
2948         may_fail' argument and use it instead of the Location.IsNull() hack.
2949
2950 2004-03-23  Martin Baulig  <martin@ximian.com>
2951
2952         * expression.cs (Invocation.InferType): Use correct type inference
2953         rules here.     
2954
2955 2004-03-23  Martin Baulig  <martin@ximian.com>
2956
2957         * ecore.cs (MethodGroupExpr.Name): Use
2958         TypeManager.CSharpSignature() instead of just the name.
2959
2960         * expression.cs (Invocation.OverloadResolve): Provide better error
2961         reporting.
2962         (Invocation.DoResolve): OverloadResolve() never returns null
2963         without reporting an error, so removed the error -6 reporting here.
2964
2965 2004-03-23  Martin Baulig  <martin@ximian.com>
2966
2967         * typemanager.cs (TypeManager.GetMethodFlags): Fixed the FIXME for
2968         generic methods.
2969
2970         * cs-parser.jay (delegate_declaration): Support generic delegates.
2971
2972         * delegate.cs: Support generic delegates.
2973
2974 2004-03-22  Martin Baulig  <martin@ximian.com>
2975
2976         * expression.cs (Invocation.InferParamsTypeArguments): New static
2977         method; does type inference for params arguments.
2978
2979 2004-03-21  Martin Baulig  <martin@ximian.com>
2980
2981         * typemanager.cs (TypeManager.IsGenericMethod): New public static
2982         method; checks whether a method is a generic method.    
2983
2984         * expression.cs (Invocation.InferTypeArguments): New static method;
2985         infer type arguments for generic method invocation.
2986
2987         * ecore.cs (MethodGroupExpr.HasTypeArguments): New public
2988         property; we set this to true if we're resolving a generic method
2989         invocation and the user specified type arguments, ie. we're not
2990         doing type inference.
2991
2992 2004-03-20  Martin Baulig  <martin@ximian.com>
2993
2994         * class.cs (MethodData.DeclaringType): New public property.
2995         (MethodData.Define): Set DeclaringType here.
2996         (Operator.Define): Use OperatorMethod.MethodData.DeclaringType
2997         instead of OperatorMethodBuilder.DeclaringType.
2998
2999 2004-03-20  Martin Baulig  <martin@ximian.com>
3000
3001         * cs-tokenizer.cs (xtoken): Return a special
3002         Token.DEFAULT_OPEN_PARENS for "`default' followed by open parens".
3003
3004         * cs-parser.jay (default_value_expression): Switch to the new
3005         syntax (14.5.13).
3006
3007 2004-03-19  Martin Baulig  <martin@ximian.com>
3008
3009         * decl.cs (MemberName): New class.  We use this to "construct"
3010         namespace_or_type_name's.
3011
3012         * generics.cs (TypeArguments.GetDeclarations): New public method;
3013         returns the type arguments as a string[] and reports a CS0081 if
3014         one of them is not an identifier.
3015
3016         * class.cs (MemberBase): The .ctor now takes the name as a
3017         MemberName instead of a string.
3018         (MemberBase.ExplicitInterfaceName): Changed type from string to
3019         Expression.
3020         (MemberBase.DoDefine): If we're an explicit implementation, the
3021         InterfaceType may be a generic instance.
3022
3023         * cs-parser.jay (namespace_or_type_name): Return a MemberName.
3024         (namespace_name): Call MemberName.GetName () to transform the
3025         MemberName into a string and ensure we don't have any type
3026         arguments.
3027         (type_name): Call MemberName.GetTypeExpression() to transfrom the
3028         MemberName into an expression.
3029         (method_header): Use namespace_or_type_name instead of member_name.     
3030
3031 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
3032
3033         * rootcontext.cs: Add new types to the boot resolution.
3034
3035         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
3036         MulticastDelegate is not allowed.
3037
3038         * typemanager.cs: Add new types to lookup: System.TypedReference
3039         and ArgIterator.
3040
3041         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
3042         check for TypedReference or ArgIterator, they are not allowed. 
3043
3044         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
3045         makes us properly catch 1510 in some conditions (see bug 56016 for
3046         details). 
3047
3048 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
3049
3050         * CryptoConvert.cs: update from corlib version
3051         with endian fixes.
3052
3053 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
3054
3055         * class.cs (Indexer.Define): Check indexername declaration
3056
3057 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
3058
3059         * attribute.cs (IsClsCompliant): Fixed problem with handling
3060         all three states (compliant, not-compliant, undetected).
3061
3062 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
3063
3064         * attribute.cs (Attribute): Location is now public.
3065         (Resolve): Store resolved arguments (pos_values) in attribute class.
3066         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
3067         (GetClsCompliantAttributeValue): New method that gets
3068         CLSCompliantAttribute value.
3069         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
3070         if exists else null.
3071         (AttributeTester): New class for CLS-Compliant verification routines.
3072
3073         * class.cs (Emit): Add CLS-Compliant verification.
3074         (Method.GetSignatureForError): Implemented.
3075         (Constructor.GetSignatureForError): Implemented
3076         (Constructor.HasCompliantArgs): Returns if constructor has
3077         CLS-Compliant arguments.
3078         (Constructor.Emit): Override.
3079         (Construcor.IsIdentifierClsCompliant): New method; For constructors
3080         is needed to test only parameters.
3081         (FieldBase.GetSignatureForError): Implemented.
3082         (TypeContainer): New member for storing base interfaces.
3083         (TypeContainer.FindMembers): Search in base interfaces too.
3084
3085         * codegen.cs (GetClsComplianceAttribute): New method that gets
3086         assembly or module CLSCompliantAttribute value.
3087         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
3088         for assembly.
3089         (ModuleClass.Emit): Add error 3012 test.
3090
3091         * const.cs (Emit): Override and call base for CLS-Compliant tests.
3092
3093         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
3094         state for all decl types.
3095         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
3096         if CLS-Compliant tests are required.
3097         (IsClsCompliaceRequired): New method. Analyze whether code
3098         must be CLS-Compliant.
3099         (IsExposedFromAssembly): New method. Returns true when MemberCore
3100         is exposed from assembly.
3101         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
3102         value or gets cached value.
3103         (HasClsCompliantAttribute): New method. Returns true if MemberCore
3104         is explicitly marked with CLSCompliantAttribute.
3105         (IsIdentifierClsCompliant): New abstract method. This method is
3106         used to testing error 3005.
3107         (IsIdentifierAndParamClsCompliant): New method. Common helper method
3108         for identifier and parameters CLS-Compliant testing.
3109         (VerifyClsCompliance): New method. The main virtual method for
3110         CLS-Compliant verifications.
3111         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
3112         null. I don't know why is null (too many public members !).
3113         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
3114         and get value of first CLSCompliantAttribute that found.
3115
3116         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
3117         (VerifyClsCompliance): Override and add extra tests.
3118
3119         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
3120         clscheck- disable CLS-Compliant verification event if assembly is has
3121         CLSCompliantAttribute(true).
3122
3123         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
3124         ApllyAttribute is now called in emit section as in the other cases.
3125         Possible future Emit integration.
3126         (IsIdentifierClsCompliant): New override.
3127         (VerifyClsCompliance): New override.
3128         (GetEnumeratorName): Returns full enum name.
3129
3130         * parameter.cs (GetSignatureForError): Implemented.
3131
3132         * report.cs (WarningData): New struct for Warning message information.
3133         (LocationOfPreviousError): New method.
3134         (Warning): New method. Reports warning based on the warning table.
3135         (Error_T): New method. Reports error based on the error table.
3136
3137         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
3138         verifications are done here.
3139
3140         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
3141
3142         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
3143         CLSCompliantAttribute.
3144         (all_imported_types): New member holds all imported types from other
3145         assemblies.
3146         (LoadAllImportedTypes): New method fills static table with exported types
3147         from all referenced assemblies.
3148         (Modules): New property returns all assembly modules.
3149
3150 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
3151
3152         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
3153         throwing a parser error.
3154
3155         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
3156         which removes the hardcoded get_/set_ prefixes for properties, as
3157         IL allows for the properties to be named something else.  
3158
3159         Bug #56013
3160
3161         * expression.cs: Do not override operand before we know if it is
3162         non-null.  Fix 56207
3163
3164 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
3165
3166         * typemanager.cs: support for pinned variables.
3167
3168 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
3169
3170         * decl.cs, typemanager.cs: Avoid using an arraylist
3171         as a buffer if there is only one result set.
3172
3173 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
3174
3175         * expression.cs: Make sure you cant call a static method
3176         with an instance expression, bug #56174.
3177
3178 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
3179
3180         * class.cs (IsDuplicateImplementation): Improve error reporting to
3181         flag 663 (method only differs in parameter modifier).
3182
3183         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
3184         in preprocessor directives.
3185
3186         * location.cs (LookupFile): Allow for the empty path.
3187
3188         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
3189         better approach for some of that patch, but its failing with the
3190         CharSet enumeration.  For now try/catch will do.
3191
3192         * typemanager.cs: Do not crash if a struct does not have fields.
3193         Fixes 56150.
3194
3195 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
3196
3197         * expression.cs: cs0213, cant fix a fixed expression.
3198         fixes 50231.
3199
3200 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
3201
3202         * cs-parser.jay: detect invalid embeded statements gracefully.
3203         bug #51113.
3204
3205 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
3206
3207         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
3208         As a regex:
3209         s/
3210         the invocation type may not be a subclass of the tye of the item/
3211         The type of the item must be a subclass of the invocation item.
3212         /g
3213
3214         Fixes bug #50820.
3215
3216 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
3217
3218         * attribute.cs: Added methods to get a string and a bool from an
3219         attribute. Required to information from AssemblyKeyFileAttribute,
3220         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
3221         * codegen.cs: Modified AssemblyName creation to include support for
3222         strongnames. Catch additional exceptions to report them as CS1548.
3223         * compiler.csproj: Updated include CryptoConvert.cs.
3224         * compiler.csproj.user: Removed file - user specific configuration.
3225         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
3226         Mono.Security assembly. The original class is maintained and tested in
3227         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
3228         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
3229         like CSC 8.0 (C# v2) supports.
3230         * Makefile: Added CryptoConvert.cs to mcs sources.
3231         * rootcontext.cs: Added new options for strongnames.
3232
3233 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
3234
3235         * driver.cs: For --expect-error, report error code `2'
3236         if the program compiled with no errors, error code `1' if
3237         it compiled with an error other than the one expected.
3238
3239 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
3240
3241         * compiler.csproj: Updated for Visual Studio .NET 2003.
3242         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
3243         * compiler.sln: Updated for Visual Studio .NET 2003.
3244
3245 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
3246
3247         * expression.cs: Fix bug #47234. We basically need to apply the
3248         rule that we prefer the conversion of null to a reference type
3249         when faced with a conversion to 'object' (csc behaviour).
3250
3251 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
3252
3253         * statement.cs: Shorter form for foreach, eliminates
3254         a local variable. r=Martin.
3255
3256 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
3257
3258         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
3259         checks if we can use brtrue/brfalse to test for 0.
3260         * expression.cs: use the above in the test for using brtrue/brfalse.
3261         cleanup code a bit.
3262
3263 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
3264
3265         * expression.cs: Rewrite string concat stuff. Benefits:
3266
3267         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
3268         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
3269         rather than a concat chain.
3270
3271         * typemanager.cs: Add lookups for more concat overloads.
3272
3273 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
3274
3275         * expression.cs: Emit shorter il code for array init.
3276
3277         newarr
3278         dup
3279         // set 1
3280
3281         // set 2
3282
3283         newarr
3284         stloc.x
3285
3286         ldloc.x
3287         // set 1
3288
3289         ldloc.x
3290         // set 2
3291
3292 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
3293
3294         * statement.cs: Before, two switch blocks would be merged if the
3295         total size of the blocks (end_item - begin_item + 1) was less than
3296         two times the combined sizes of the blocks.
3297
3298         Now, it will only merge if after the merge at least half of the
3299         slots are filled.
3300
3301         fixes 55885.
3302
3303 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
3304
3305         * class.cs : csc build fix for GetMethods(). See bug #52503.
3306
3307 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
3308
3309         * expression.cs: Make sure fp comparisons work with NaN.
3310         This fixes bug #54303. Mig approved this patch a long
3311         time ago, but we were not able to test b/c the runtime
3312         had a related bug.
3313
3314 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
3315
3316         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
3317
3318 2004-03-19  Martin Baulig  <martin@ximian.com>
3319
3320         * class.cs (MemberCore.IsDuplicateImplementation): Check whether
3321         two overloads may unify for some type parameter substitutions and
3322         report a CS0408 if appropriate.
3323
3324 2004-03-19  Martin Baulig  <martin@ximian.com>
3325
3326         * class.cs (MemberCore.IsDuplicateImplementation): Report the
3327         error here and not in our caller.
3328
3329 2004-03-19  Martin Baulig  <martin@ximian.com>
3330
3331         * interface.cs: Completely killed this file.
3332         (Interface): We're now a TypeContainer and live in class.cs.
3333
3334         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
3335         argument; we're now also called for interfaces.
3336         (TypeContainer.DefineMembers): Allow this method being called
3337         multiple times.
3338         (TypeContainer.GetMethods): New public method; formerly known as
3339         Interface.GetMethod().  This is used by PendingImplementation.
3340         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
3341         it's now private and non-static.
3342         (Interface): Moved this here; it's now implemented similar to
3343         Class and Struct.
3344         (Method, Property, Event, Indexer): Added `bool is_interface'
3345         argument to their .ctor's.
3346         (MemberBase.IsInterface): New public field.
3347
3348         * cs-parser.jay: Create normal Method, Property, Event, Indexer
3349         instances instead of InterfaceMethod, InterfaceProperty, etc.
3350         (opt_interface_base): Removed; we now use `opt_class_base' instead.
3351         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
3352
3353 2004-03-19  Martin Baulig  <martin@ximian.com>
3354
3355         * class.cs (MethodCore.IsDuplicateImplementation): New private
3356         method which does the CS0111 checking.
3357         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
3358         Use IsDuplicateImplementation().
3359
3360 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
3361
3362         * decl.cs (FindMemberToOverride): New method to find the correct
3363         method or property to override in the base class.
3364         * class.cs
3365             - Make Method/Property use the above method to find the
3366               version in the base class.
3367             - Remove the InheritableMemberSignatureCompare as it is now
3368               dead code.
3369
3370         This patch makes large code bases much faster to compile, as it is
3371         O(n) rather than O(n^2) to do this validation.
3372
3373         Also, it fixes bug 52458 which is that nested classes are not
3374         taken into account when finding the base class member.
3375
3376         Reviewed/Approved by Martin.
3377
3378 2004-03-17  Martin Baulig  <martin@ximian.com>
3379
3380         * expression.cs (MemberAccess.DoResolve): Take the parent's number
3381         of type arguments into account; use the `real_num_type_args'
3382         approach like in DoResolveAsTypeStep().
3383
3384         * generic.cs (GenericMemberAccess.DoResolve): Make this work for
3385         nested types.
3386
3387 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
3388
3389         * interface.cs: In all interface classes removed redundant
3390         member initialization.
3391
3392 2004-03-16  Martin Baulig  <martin@ximian.com>
3393
3394         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
3395
3396 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
3397
3398         * decl.cs (DefineTypeAndParents): New helper method to define a
3399         type's containers before the type itself is defined;  This is a
3400         bug exposed by the recent changes to Windows.Forms when an
3401         implemented interface was defined inside a class that had not been
3402         built yet.   
3403
3404         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
3405
3406         (Check): Loop correctly to report errors modifiers
3407         (UNSAFE was not in the loop, since it was the same as TOP).
3408
3409         * interface.cs: Every interface member now takes a ModFlags,
3410         instead of a "is_new" bool, which we set on the base MemberCore. 
3411
3412         Every place where we called "UnsafeOk" in the interface, now we
3413         call the proper member (InterfaceMethod.UnsafeOK) instead to get
3414         the unsafe settings from the member declaration instead of the
3415         container interface. 
3416
3417         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
3418
3419         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
3420         `set_indexer_name' to the pending bits (one per type).
3421
3422         We fixed a bug today that was picking the wrong method to
3423         override, since for properties the existing InterfaceMethod code
3424         basically ignored the method name.  Now we make sure that the
3425         method name is one of the valid indexer names.
3426
3427 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
3428  
3429         * support.cs (SeekableStreamReader): Keep track of stream byte
3430         positions and don't mix them with character offsets to the buffer.
3431
3432         Patch from Gustavo Giráldez
3433
3434 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
3435
3436         * interface.cs (InterfaceSetGetBase): Removed double member
3437         initialization, base class does it as well.
3438
3439 2004-03-13  Martin Baulig  <martin@ximian.com>
3440
3441         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
3442         when compiling corlib.
3443
3444 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
3445
3446         * convert.cs (ExplicitConversion): We were reporting an error on
3447         certain conversions (object_type source to a value type, when the
3448         expression was `null') before we had a chance to pass it through
3449         the user defined conversions.
3450
3451         * driver.cs: Replace / and \ in resource specifications to dots.
3452         Fixes 50752
3453
3454         * class.cs: Add check for duplicate operators.  Fixes 52477
3455
3456 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
3457
3458         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
3459         that are in the middle of the statements, not only at the end.
3460         Fixes #54987
3461
3462         * class.cs (TypeContainer.AddField): No longer set the
3463         `HaveStaticConstructor' flag, now we call it
3464         `UserDefineStaticConstructor' to diferentiate the slightly
3465         semantic difference.
3466
3467         The situation is that we were not adding BeforeFieldInit (from
3468         Modifiers.TypeAttr) to classes that could have it.
3469         BeforeFieldInit should be set to classes that have no static
3470         constructor. 
3471
3472         See:
3473
3474         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
3475
3476         And most importantly Zoltan's comment:
3477
3478         http://bugzilla.ximian.com/show_bug.cgi?id=44229
3479
3480         "I think beforefieldinit means 'it's ok to initialize the type sometime 
3481          before its static fields are used', i.e. initialization does not need
3482          to be triggered by the first access to the type. Setting this flag
3483          helps the JIT to compile better code, since it can run the static
3484          constructor at JIT time, and does not need to generate code to call it
3485          (possibly lots of times) at runtime. Unfortunately, mcs does not set
3486          this flag for lots of classes like String. 
3487          
3488          csc sets this flag if the type does not have an explicit static 
3489          constructor. The reasoning seems to be that if there are only static
3490          initalizers for a type, and no static constructor, then the programmer
3491          does not care when this initialization happens, so beforefieldinit
3492          can be used.
3493          
3494          This bug prevents the AOT compiler from being usable, since it 
3495          generates so many calls to mono_runtime_class_init that the AOT code
3496          is much slower than the JITted code. The JITted code is faster, 
3497          because it does not generate these calls if the vtable is type is
3498          already initialized, which is true in the majority of cases. But the
3499          AOT compiler can't do this."
3500
3501 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
3502
3503         * class.cs (MethodData.Emit): Refactor the code so symbolic
3504         information is generated for destructors;  For some reasons we
3505         were taking a code path that did not generate symbolic information
3506         before. 
3507
3508 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
3509
3510         * class.cs: Create a Constructor.CheckBase method that
3511         takes care of all validation type code. The method
3512         contains some code that was moved from Define.
3513
3514         It also includes new code that checks for duplicate ctors.
3515         This fixes bug #55148.
3516
3517 2004-03-09  Joshua Tauberer <tauberer@for.net>
3518
3519         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
3520         a { ... }-style array creation invokes EmitStaticInitializers
3521         which is not good for reference-type arrays.  String, decimal
3522         and now null constants (NullCast) are not counted toward
3523         static initializers.
3524
3525 2004-03-05  Martin Baulig  <martin@ximian.com>
3526
3527         * location.cs (SourceFile.HasLineDirective): New public field;
3528         specifies whether the file contains or is referenced by a "#line"
3529         directive.
3530         (Location.DefineSymbolDocuments): Ignore source files which
3531         either contain or are referenced by a "#line" directive.        
3532
3533 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
3534
3535         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
3536         direct access to our parent, so check the method inline there.
3537
3538 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
3539
3540         * expression.cs (Invocation.EmitCall): Miguel's last commit
3541         caused a regression. If you had:
3542
3543             T t = null;
3544             t.Foo ();
3545
3546         In Foo the implict this would be null.
3547
3548 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
3549
3550         * expression.cs (Invocation.EmitCall): If the method is not
3551         virtual, do not emit a CallVirt to it, use Call.
3552
3553         * typemanager.cs (GetFullNameSignature): Improve the method to
3554         cope with ".ctor" and replace it with the type name.
3555
3556         * class.cs (ConstructorInitializer.Resolve): Now the method takes
3557         as an argument the ConstructorBuilder where it is being defined,
3558         to catch the recursive constructor invocations.
3559
3560 2004-03-16  Martin Baulig  <martin@ximian.com>
3561
3562         * expression.cs (MemberAccess.DoResolve): If `expr' resolved to a
3563         ConstructedType, call ResolveType() on it to get the type rather
3564         than just using `expr.Type'.
3565
3566 2004-03-16  Martin Baulig  <martin@ximian.com>
3567
3568         * generics.cs (ConstructedType.GetMemberAccess): Take the
3569         EmitContext instead on the TypeExpr and use
3570         ec.TypeContainer.CurrentType/ec.ContainerType.
3571
3572 2004-03-16  Martin Baulig  <martin@ximian.com>
3573
3574         * ecore.cs (SimpleName.DoResolveAsTypeStep): Lookup type
3575         parameters before aliases.
3576
3577 2004-03-16  Martin Baulig  <martin@ximian.com>
3578
3579         * typemanager.cs (TypeManager.MayBecomeEqualGenericInstances):
3580         New oublic function; checks whether two generic instances may become
3581         equal under some instantiations (26.3.1).
3582
3583         * class.cs (TypeContainer.Define): Call
3584         TypeManager.MayBecomeEqualGenericInstances() and report CS0695 on
3585         error.
3586
3587 2004-03-16  Martin Baulig  <martin@ximian.com>
3588
3589         * class.cs (TypeContainer.GetClassBases): Moved
3590         Error_TypeParameterAsBase() here and also check whether the base
3591         class is not an attribute.
3592
3593 2004-03-16  Martin Baulig  <martin@ximian.com>
3594
3595         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
3596
3597 2004-03-16  Martin Baulig  <martin@ximian.com>
3598
3599         * class.cs (Error_TypeParameterAsBase): Use correct error number
3600         here (CS0689).  
3601
3602 2004-03-16  Martin Baulig  <martin@ximian.com>
3603
3604         * decl.cs (DeclSpace.ResolveTypeExpr): Added more error checking
3605         for generics.
3606
3607         * generics.cs (ConstructedType.DoResolveAsTypeStep): Added better
3608         error reporting.
3609
3610 2004-03-15  Martin Baulig  <martin@ximian.com>
3611
3612         * typemanager.cs (TypeManager.GetFullName): New public method.
3613         (TypeManager.MemberLookup): Added `int_num_type_arguments'
3614         argument; only return members with the correct number of type
3615         arguments.
3616         (TypeManager.CheckGeneric): Allow -1 to bypass the check.
3617         (TypeManager.FilterWithClosure): Call CheckGeneric() to check
3618         whether the number of type arguments matches.
3619
3620         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Allow `expr'
3621         not being a ConstructedType; we can now do "typeof (Foo.Bar<U>)".
3622
3623         * expression.cs (MemberAccess): Added public `NumTypeArguments'
3624         field; it's set by the protected .ctor when we're actually a
3625         GenericMemberAccess.
3626         (MemberAccess.ResolveAsTypeStep): Compute the total number of type
3627         arguments and pass it to MemberLookupFinal ().
3628
3629         * ecore.cs (Expression.MemberLookup): Added `int
3630         num_type_arguments' argument; only return members with the correct
3631         number of type arguments.
3632         (Expression.MemberLookupFailed): Check whether the MemberLookup
3633         failed because we did not have the correct number of type
3634         arguments; report CS0305 in this case.
3635
3636         * decl.cs (DeclSpace.ResolveTypeExpr): Don't report an error if
3637         `e.ResolveAsTypeTerminal()' already did so.
3638
3639 2004-03-15  Martin Baulig  <martin@ximian.com>
3640
3641         * ecore.cs (Expression.ResolveLValue): Allow e.type being null if
3642         we're a ConstructedType; in this case, the caller must report an
3643         error (for instance CS0131).
3644
3645         * generic.cs (TypeArguments): Added Location argument to the .ctor.
3646         (TypeArguments.Resolve): Actually report errors here.
3647
3648 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
3649
3650         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
3651         `set_indexer_name' to the pending bits (one per type).
3652
3653         We fixed a bug today that was picking the wrong method to
3654         override, since for properties the existing InterfaceMethod code
3655         basically ignored the method name.  Now we make sure that the
3656         method name is one of the valid indexer names.
3657
3658 2004-03-15  Martin Baulig  <martin@ximian.com>
3659
3660         * typemanager.cs (TypeManager.IndexerPropertyName): Added support
3661         for generic instances.
3662
3663 2004-03-13  Martin Baulig  <martin@ximian.com>
3664
3665         * class.cs (TypeContainer.DefineType): Call
3666         TypeManager.AddUserType() immediately after creating the
3667         TypeBuilder; pass all type parameters when creating the
3668         CurrentType.
3669
3670         * decl.cs (DeclSpace.FindNestedType): New public method.
3671         (DeclSpace.FindType): Added `int num_type_args' argument; only
3672         return types with the correct number of type parameters.
3673         (DeclSpace.CountTypeParams): New public property.
3674
3675         * ecore.cs (SimpleName.ctor): Added overloaded version which takes
3676         the number of type parameters; defaults to zero.
3677
3678         * generic.cs (TypeArguments.Count): New public property.
3679         (ConstructedType.DoResolveAsTypeStep): First call
3680         ds.FindNestedType() to find out whether we're nested in the
3681         current generic type; in this case, we inherit all type parameters
3682         from the current class.
3683
3684         * rootcontext.cs (RootContext.NamespaceLookup): Added `int
3685         num_type_args' argument.
3686         (RootContext.LookupType): Added overloaded version which takes the
3687         number of type arguments; only return types with the correct
3688         number of type arguments.
3689
3690         * typemanager.cs (TypeManager.CheckGeneric): New public function;
3691         checks whether `Type t' has `int num_type_args'.
3692
3693 2004-03-13  Martin Baulig  <martin@ximian.com>
3694
3695         * generic.cs (GenericMethod.DefineType): New method; calls
3696         DefineType() on all the type parameters.
3697
3698         * class.cs (MethodData.ctor): Added `GenericMethod generic' argument.
3699         (MethodData.Define): If we're a generic method, call
3700         GenericMethod.DefineType() to define the type parameters.       
3701
3702 2004-03-10  Martin Baulig  <martin@ximian.com>
3703
3704         * pending.cs (Pending.InterfaceMethod): Use TypeManager.IsEqual()
3705         instead of IsAssignableFrom.    
3706
3707 2004-03-10  Martin Baulig  <martin@ximian.com>
3708
3709         * ecore.cs (FieldExpr.ctor): Use TypeManager.TypeToCoreType().
3710
3711         * support.cs (ParameterData.HasArrayParameter): New property.
3712         (ReflectionParameters.ctor): Take a MethodBase instead of a
3713         ParameterInfo[].  If we have any type parameters, get the generic
3714         method definition and ask it whether we have variable arguments.
3715
3716 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
3717
3718         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
3719         routines to check if a type is an enumerable/enumerator allow
3720         classes that implement the IEnumerable or IEnumerator interfaces.
3721
3722         * class.cs (Property, Operator): Implement IIteratorContainer, and
3723         implement SetYields.
3724
3725         (Property.Define): Do the block swapping for get_methods in the
3726         context of iterators.   We need to check if Properties also
3727         include indexers or not.
3728
3729         (Operator): Assign the Block before invoking the
3730         OperatorMethod.Define, so we can trigger the Iterator code
3731         replacement. 
3732
3733         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
3734         Property and Operator classes are not created when we parse the
3735         declarator but until we have the block completed, so we use a
3736         singleton SimpleIteratorContainer.Simple to flag whether the
3737         SetYields has been invoked.
3738
3739         We propagate this setting then to the Property or the Operator to
3740         allow the `yield' to function.
3741
3742 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
3743
3744         * codegen.cs: Implemented attribute support for modules.
3745         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
3746         Assembly/Module functionality.
3747
3748         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
3749         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
3750         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
3751
3752 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
3753
3754         * interface.cs (FindMembers): The operation is performed on all base
3755         interfaces and not only on the first. It is required for future CLS Compliance patch.
3756
3757 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
3758
3759         * statement.cs, codegen.cs:
3760         This patch deals with patterns such as:
3761
3762         public class List : IEnumerable {
3763
3764                 public MyEnumerator GetEnumerator () {
3765                         return new MyEnumerator(this);
3766                 }
3767
3768                 IEnumerator IEnumerable.GetEnumerator () {
3769                         ...
3770                 }
3771                 
3772                 public struct MyEnumerator : IEnumerator {
3773                         ...
3774                 }
3775         }
3776
3777         Before, there were a few things we did wrong:
3778         1) we would emit callvirt on a struct, which is illegal
3779         2) we emited ldarg when we needed to emit ldarga
3780         3) we would mistakenly call the interface methods on an enumerator
3781         type that derived from IEnumerator and was in another assembly. For example:
3782
3783         public class MyEnumerator : IEnumerator
3784
3785         Would have the interface methods called, even if there were public impls of the
3786         method. In a struct, this lead to invalid IL code.
3787
3788 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
3789
3790         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
3791           renamed to Emit.
3792
3793         * delegate.cs (Define): Fixed crash when delegate type is undefined.
3794
3795 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
3796
3797         * cs-parser.jay: Fix small regression: we were not testing V2
3798         compiler features correctly.
3799
3800         * interface.cs: If the emit context is null, then create one
3801
3802 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
3803
3804         * decl.cs (GetSignatureForError): New virtual method to get full name
3805           for error messages.
3806
3807         * attribute.cs (IAttributeSupport): New interface for attribute setting.
3808           Now it is possible to rewrite ApplyAttributes method to be less if/else.
3809
3810         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
3811           Duplicated members and code in these classes has been removed.
3812           Better encapsulation in these classes.
3813
3814 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
3815
3816         * assign.cs (Assign.DoResolve): When dealing with compound
3817         assignments, there is a new rule in ECMA C# 2.4 (might have been
3818         there before, but it is documented here) that states that in:
3819
3820         a op= b;
3821
3822         If b is of type int, and the `op' is a shift-operator, then the
3823         above is evaluated as:
3824
3825         a = (int) a op b 
3826
3827         * expression.cs (Binary.ResolveOperator): Instead of testing for
3828         int/uint/long/ulong, try to implicitly convert to any of those
3829         types and use that in pointer arithmetic.
3830
3831         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
3832         method to print information for from the type, not from the
3833         null-method we were given.
3834
3835 2004-02-01  Duncan Mak  <duncan@ximian.com>
3836
3837         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
3838         parsing for cmd, fixes bug #53694.
3839
3840 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
3841
3842         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
3843         in the member name duplication tests. Property and operator name duplication
3844         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
3845
3846 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
3847
3848         * interface.cs (PopulateMethod): Fixed crash when interface method
3849         returns not existing type (error test cs0246-3.cs).
3850
3851 2004-02-02  Ravi Pratap M <ravi@ximian.com>
3852
3853         * cs-parser.jay (interface_accessors): Re-write actions to also
3854         store attributes attached to get and set methods. Fix spelling
3855         while at it.
3856
3857         (inteface_property_declaration): Modify accordingly.
3858
3859         (InterfaceAccessorInfo): New helper class to store information to pass
3860         around between rules that use interface_accessors.
3861
3862         * interface.cs (Emit): Apply attributes on the get and set
3863         accessors of properties and indexers too.
3864
3865         * attribute.cs (ApplyAttributes): Modify accordingly to use the
3866         right MethodBuilder when applying attributes to the get and set accessors.
3867
3868 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
3869
3870         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
3871
3872 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
3873
3874         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
3875
3876 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
3877
3878         * cs-parser.jay: Remove YIELD token, instead use the new grammar
3879         changes that treat `yield' specially when present before `break'
3880         or `return' tokens.
3881
3882         * cs-tokenizer.cs: yield is no longer a keyword.
3883
3884 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
3885
3886         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
3887         setting for default constructors.
3888         For default constructors are almost every time set wrong Modifier. The
3889         generated IL code has been alright. But inside mcs this values was
3890         wrong and this was reason why several of my CLS Compliance tests
3891         failed.
3892
3893 2004-02-27  Martin Baulig  <martin@ximian.com>
3894
3895         * generics.cs (ConstructedType.ResolveType): Make the nested type
3896         stuff actually work.
3897
3898 2004-02-25  Martin Baulig  <martin@ximian.com>
3899
3900         * decl.cs (DeclSpace.CurrentTypeParameters): New protected
3901         property; returns the type parameters just from the current type,
3902         ie. with the ones from outer classes.
3903         (DeclSpace.LookupGeneric): First search in the current class, then
3904         in outer classes.
3905         (DeclSpace.initialize_type_params): When hiding a type parameter
3906         from an outer class, put it into the `type_param_list' anyways.
3907
3908         * expression.cs (MemberAccess.expr): Made this field protected.
3909
3910         * class.cs (TypeContainer.Define): The `CurrentType' just contains
3911         the type parameters from the current class.
3912
3913         * generic.cs (ConstructedType.ResolveType): Support nested generic
3914         types by taking the type parameters which we inherit from outer
3915         classes into account.
3916         (GenericMemberAccess.ResolveAsTypeStep): Override this and added
3917         support for nested generic types.
3918
3919 2004-02-23  Martin Baulig  <martin@ximian.com>
3920
3921         * decl.cs (DeclSpace.IsGeneric): Make this a property instead of a
3922         field and check whether we're nested inside a generic type.
3923         (DeclSpace.ResolveType): If we're resolving to a generic type
3924         definition, create a ConstructedType and return its resolved type.
3925         (DeclSpace.initialize_type_params): New private method;
3926         initializes the `type_param_list' field from the type parameters
3927         from this and all enclosing classes.
3928         (DeclSpace.TypeParameters): Call initialize_type_params() unless
3929         we're already initialized.
3930
3931 2004-02-23  Martin Baulig  <martin@ximian.com>
3932
3933         * class.cs (Method.Define): Create the generic method before
3934         calling DoDefine().
3935         (Memberbase.DoDefine): Added DeclSpace argument (in addition to
3936         the TypeContainer one); we use this for generic methods.
3937
3938         * decl.cs (CheckAccessLevel): If we're a GenericMethod, use our
3939         parent's TypeBuilder.
3940
3941 2004-02-18  Martin Baulig  <martin@ximian.com>
3942
3943         * ecore.cs (FieldExpr.DoResolveLValue): Use TypeManager.IsEqual()
3944         to check for equality.
3945
3946 2004-02-05  Martin Baulig  <martin@ximian.com>
3947
3948         * ecore.cs (FieldExpr.DoResolveLValue): If we have an
3949         `ec.TypeContainer.CurrentType', use it instead of
3950         `ec.ContainerType' to check whether we're in the type's ctor.
3951
3952 2004-01-29  Martin Baulig  <martin@ximian.com>
3953
3954         * expression.cs (Invocation.DoResolve): If we're a
3955         `ConstructedType', then we're actually a generic method, so
3956         rewrite the expr as a GenericMemberAccess.
3957
3958         * cs-parser.jay (member_name): Don't use `namespace_or_type_name'
3959         here; manually parse it into a string.
3960
3961 2004-01-28  Martin Baulig  <martin@ximian.com>
3962
3963         * typemanager.cs (TypeManager.IsEqual): New static method.
3964         (TypeManager.FilterWithClosure): Call TypeManager.IsEqual() to
3965         check for equality instead of using `=='.
3966
3967 2004-01-26  Martin Baulig  <martin@ximian.com>
3968
3969         * decl.cs (DeclSpace.CurrentType): New public field.
3970
3971         * expression.cs (This.ResolveBase): If we have an
3972         `ec.TypeContainer.CurrentType', use it instead of
3973         `ec.ContainerType'.
3974
3975         * class.cs (TypeContainer.DefineType): If we're a generic type,
3976         create the `CurrentType' (unresolved).
3977         (TypeContainer.GenericType): New private field.
3978         (TypeContainer.DefineMembers): If we have a `CurrentType', resolve
3979         it and store it in `GenericType' before creating the MemberCache.
3980         (TypeContainer.GetMembers): If we have a `GenericType', call
3981         TypeManager.FindMembers() on it.
3982
3983         * interface.cs (Interface.GenericType): New private field.
3984         (Interface.DefineType): If we're a generic type, create the
3985         `CurrentType' (unresolved).
3986         (Interface.DefineMembers): If we have a `CurrentType', resolve it
3987         and store it in `GenericType' before creating the MemberCache.
3988         (Interface.GetMembers): If we have a `GenericType', call
3989         TypeManager.FindMembers() on it.
3990
3991 2004-01-22  Martin Baulig  <martin@ximian.com>
3992
3993         * cs-parser.jay (namespace_or_type_name): Return an Expression,
3994         not a QualifiedIdentifier.  This is what `type_name_expression'
3995         was previously doing.
3996         (type_name_expression): Removed; the code is now in
3997         `namespace_or_type_name'.
3998         (qualified_identifier): Removed, use `namespace_or_type_name'
3999         instead.
4000         (QualifiedIdentifier): Removed this class.      
4001
4002 2004-01-22  Martin Baulig  <martin@ximian.com>
4003
4004         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
4005         not a string as alias name.
4006
4007 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
4008
4009         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
4010         #52730 bug, and instead compute correctly the need to use a
4011         temporary variable when requesting an address based on the
4012         static/instace modified of the field and the constructor.
4013  
4014 2004-01-21  Martin Baulig  <martin@ximian.com>
4015
4016         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
4017         class and namespace before looking up aliases.  Fixes #52517.
4018
4019 2004-01-21  Martin Baulig  <martin@ximian.com>
4020
4021         * flowanalysis.cs (UsageVector.Merge): Allow variables being
4022         assinged in a 'try'; fixes exception4.cs.
4023
4024 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
4025         * class.cs : Implemented parameter-less constructor for TypeContainer
4026
4027         * decl.cs: Attributes are now stored here. New property OptAttributes
4028
4029         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
4030
4031         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
4032
4033 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
4034
4035         * typemanager.cs (CSharpSignature): Now reports also inner class name.
4036           (CSharpSignature): New method for indexer and property signature.
4037
4038 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
4039
4040         * pending.cs (IsVirtualFilter): Faster implementation.
4041
4042 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
4043
4044         * typemanager.cs: Avoid inclusion of same assembly more than once.
4045
4046 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
4047
4048         * cs-parser.jay: Fixed problem where the last assembly attribute
4049           has been applied also to following declaration (class, struct, etc.)
4050           
4051 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
4052
4053         * class.cs: Added error CS0538, CS0539 reporting.
4054         Fixed crash on Microsoft runtime when field type is void.
4055
4056         * cs-parser.jay: Added error CS0537 reporting.
4057
4058         * pending.cs: Added error CS0535 reporting.
4059         Improved error report for errors CS0536, CS0534.
4060
4061 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
4062
4063         Merge a few bits from the Anonymous Method MCS tree.
4064
4065         * statement.cs (ToplevelBlock): New class for toplevel methods,
4066         will hold anonymous methods, lifted variables.
4067
4068         * cs-parser.jay: Create toplevel blocks for delegates and for
4069         regular blocks of code. 
4070
4071 2004-01-20  Martin Baulig  <martin@ximian.com>
4072
4073         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
4074         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
4075         and `NeedExplicitReturn'; added `IsLastStatement'.
4076         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
4077         have a `ReturnLabel' or we're not unreachable.
4078
4079         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
4080         child's reachability; don't just override ours with it.  Fixes
4081         #58058 (lluis's example).
4082         (FlowBranching): Added public InTryOrCatch(), InCatch(),
4083         InFinally(), InLoop(), InSwitch() and
4084         BreakCrossesTryCatchBoundary() methods.
4085
4086         * statement.cs (Return): Do all error checking in Resolve().
4087         Unless we are the last statement in a top-level block, always
4088         create a return label and jump to it.
4089         (Break, Continue): Do all error checking in Resolve(); also make
4090         sure we aren't leaving a `finally'.
4091         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
4092         statement in a top-level block.
4093         (Block.Flags): Added `IsDestructor'.
4094         (Block.IsDestructor): New public property.
4095
4096 2004-01-20  Martin Baulig  <martin@ximian.com>
4097
4098         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
4099
4100 2004-01-20  Martin Baulig  <martin@ximian.com>
4101
4102         * statement.cs (Statement.ResolveUnreachable): New public method.
4103         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
4104         (Block.Resolve): Resolve unreachable statements.
4105
4106 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
4107
4108         * expression.cs: We need to fix the case where we do
4109         not have a temp variable here.
4110
4111         * assign.cs: Only expression compound assignments need
4112         temporary variables.
4113
4114 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
4115
4116         * flowanalysis.cs: Reduce memory allocation in a few ways:
4117           - A block with no variables should not allocate a bit
4118             vector for itself.
4119           - A method with no out parameters does not need any tracking
4120             for assignment of the parameters, so we need not allocate
4121             any data for it.
4122           - The arrays:
4123                 public readonly Type[] VariableTypes;
4124                 public readonly string[] VariableNames;
4125             Are redundant. The data is already stored in the variable
4126             map, so we need not allocate another array for it.
4127           - We need to add alot of checks for if (params | locals) == null
4128             due to the first two changes.
4129
4130 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
4131
4132         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
4133         implement IMemoryLocation, we store a copy on a local variable and
4134         take the address of it.  Patch from Benjamin Jemlich
4135
4136         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
4137         to use a special "type_name_expression" rule which reduces the
4138         number of "QualifiedIdentifier" classes created, and instead
4139         directly creates MemberAccess expressions.
4140
4141 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
4142
4143         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
4144         that fixes #52853.  Null literal assignment to ValueType
4145
4146         * class.cs (MethodData.Emit): Instead of checking the name of the
4147         method to determine if its a destructor, create a new derived
4148         class from Method called Destructor, and test for that.  
4149
4150         * cs-parser.jay: Create a Destructor object instead of a Method.  
4151
4152         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
4153
4154         Fixes: 52933
4155
4156 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
4157
4158         * expression.cs (Binary.ResolveOperator): Perform an implicit
4159         conversion from MethodGroups to their delegate types on the
4160         Addition operation.
4161
4162         * delegate.cs: Introduce a new class DelegateCreation that is the
4163         base class for `NewDelegate' and `ImplicitDelegateCreation',
4164         factor some code in here.
4165
4166         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
4167         conversion from MethodGroups to compatible delegate types. 
4168
4169         * ecore.cs (Expression.Resolve): Do not flag error 654
4170         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
4171         we allow conversions from MethodGroups to delegate types now.
4172
4173         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
4174         assignments in v2 either.
4175
4176 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
4177
4178         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
4179         static read-only fields in ctors.
4180
4181         Applied patch from Benjamin Jemlich 
4182
4183         * expression.cs (UnaryMutator): Avoid leaking local variables. 
4184
4185 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
4186
4187         * cs-tokenizer.cs (IsCastToken): Allow the various native types
4188         here to return true, as they can be used like this:
4189
4190                 (XXX) int.MEMBER ()
4191
4192         Fixed 49836 and all the other dups
4193
4194 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
4195
4196         * driver.cs: Implement /win32res and /win32icon.
4197
4198 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
4199
4200         * cs-parser.jay: Add a rule to improve error handling for the
4201         common mistake of placing modifiers after the type.
4202
4203 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
4204
4205         * cs-parser.jay (interface_event_declaration): Catch
4206         initialization of events on interfaces, and report cs0068
4207
4208         * cs-parser.jay (interface_event_declaration): Catch
4209         initialization of events. 
4210
4211         * ecore.cs: Better report missing constructors.
4212
4213         * expression.cs (Binary.ResolveOperator): My previous bug fix had
4214         the error reporting done in the wrong place.  Fix.
4215
4216         * expression.cs (Binary.ResolveOperator): Catch the 
4217         operator + (E x, E y) error earlier, and later allow for implicit
4218         conversions in operator +/- (E e, U x) from U to the underlying
4219         type of E.
4220
4221         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
4222         52596, if the container class is abstract, the default constructor
4223         is protected otherwise its public (before, we were always public).
4224
4225         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
4226         fixed statement.
4227
4228         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
4229         Jemlich that fixes bug #52597, MCS was generating invalid code for
4230         idisposable structs.   Thanks to Ben for following up with this
4231         bug as well.
4232
4233 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
4234
4235         * driver.cs: Allow assemblies without code to be generated, fixes
4236         52230.
4237
4238 2004-01-07  Nick Drochak <ndrochak@gol.com>
4239
4240         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
4241
4242 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
4243
4244         * cs-parser.jay: Add rules to improve error reporting if fields or
4245         methods are declared at the namespace level (error 116)
4246
4247         * Add rules to catch event add/remove
4248
4249 2004-01-04  David Sheldon <dave-mono@earth.li>
4250
4251   * expression.cs: Added matching ")" to error message for 
4252   CS0077
4253
4254 2004-01-03 Todd Berman <tberman@gentoo.org>
4255
4256         * ecore.cs, attribute.cs:
4257         Applying fix from #52429.
4258
4259 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
4260
4261         * ecore.cs, expression.cs, statement.cs:
4262         Total rewrite of how we handle branching. We
4263         now handle complex boolean expressions with fewer
4264         jumps. As well if (x == 0) no longer emits a ceq.
4265
4266         if (x is Foo) is much faster now, because we generate
4267         better code.
4268
4269         Overall, we get a pretty big improvement on our benchmark
4270         tests. The code we generate is smaller and more readable.
4271
4272         I did a full two-stage bootstrap. The patch was reviewed
4273         by Martin and Miguel.
4274
4275 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
4276
4277         * cs-parser.jay: Make primary_expression not take a QI.
4278         we dont need this because the member_access rule covers
4279         us here. So we replace the rule with just IDENTIFIER.
4280
4281         This has two good effects. First, we remove a s/r conflict.
4282         Second, we allocate many fewer QualifiedIdentifier objects.
4283
4284 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
4285
4286         * attribute.cs: Handle MarshalAs attributes as pseudo, and
4287         set the correct information via SRE. This prevents
4288         hanging on the MS runtime. Fixes #29374.
4289
4290 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
4291
4292         * convert.cs: correctly handle conversions to value types
4293         from Enum and ValueType as unboxing conversions.
4294
4295         Fixes bug #52569. Patch by Benjamin Jemlich.
4296
4297 2004-01-02  Ravi Pratap  <ravi@ximian.com>
4298
4299         * expression.cs (BetterConversion): Prefer int -> uint
4300         over int -> ulong (csc's behaviour). This fixed bug #52046.
4301
4302 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
4303
4304         * decl.cs (MemberCache.FindMembers): now returns a
4305         MemberInfo [].
4306
4307         * typemanager.cs: In general, go with with ^^.
4308         (CopyNewMethods): take an IList.
4309         (RealMemberLookup): Only allocate an arraylist
4310         if we copy from two sets of methods.
4311
4312         This change basically does two things:
4313         1) Fewer array lists allocated due to CopyNewMethods.
4314         2) the explicit cast in MemberList costed ALOT.
4315
4316 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
4317
4318         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
4319         a hashtable to avoid needless string allocations when an identifier is
4320         used more than once (the common case).
4321
4322 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
4323
4324         * pending.cs: MS's TypeBuilder.GetInterfaces ()
4325         is broken, it will not return anything. So, we
4326         have to use the information we have in mcs to
4327         do the task.
4328
4329         * typemanager.cs: Add a cache for GetInterfaces,
4330         since this will now be used more often (due to ^^)
4331
4332         (GetExplicitInterfaces) New method that gets the
4333         declared, not effective, interfaces on a type
4334         builder (eg, if you have interface IFoo, interface
4335         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
4336         { IBar }.
4337
4338         This patch makes MCS able to bootstrap itself on
4339         Windows again.
4340
4341 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
4342
4343         * expression.cs: Remove the Nop's that Miguel put
4344         in by mistake.
4345
4346 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
4347
4348         * report.cs, codegen.cs: Give the real stack trace to
4349         the error when an exception is thrown.
4350
4351 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
4352
4353         * decl.cs: only allocate hashtables for ifaces if 
4354         it is an iface!
4355
4356 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
4357
4358         * expression.cs: fix the error from cs0121-2.cs
4359         (a parent interface has two child interfaces that
4360         have a function with the same name and 0 params
4361         and the function is called through the parent).
4362
4363 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
4364
4365         * class.cs, rootcontext.cs, typmanager.cs: do not
4366         leak pointers.
4367
4368 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
4369
4370         * codegen.cs: remove stack for the ec flow branching.
4371         It is already a linked list, so no need.
4372
4373 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
4374
4375         * Makefile: Allow custom profiler here.
4376
4377 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
4378
4379         * typemanager.cs (LookupType):
4380           - Use a static char [], because split takes
4381             a param array for args, so it was allocating
4382             every time.
4383           - Do not store true in a hashtable, it boxes.
4384
4385 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
4386
4387         * flowanalysis.cs: bytify common enums.
4388
4389 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
4390
4391         * modifiers.cs: Add a new set of flags for the
4392         flags allowed on explicit interface impls.
4393         * cs-parser.jay: catch the use of modifiers in
4394         interfaces correctly.
4395         * class.cs: catch private void IFoo.Blah ().
4396
4397         All related to bug #50572.
4398
4399 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
4400
4401         * decl.cs: Rewrite the consistant accessability checking.
4402         Accessability is not linear, it must be implemented in
4403         a tableish way. Fixes #49704.
4404
4405 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
4406
4407         * expression.cs: Handle negation in a checked context.
4408         We must use subtraction from zero. Fixes #38674.
4409
4410 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
4411
4412         * class.cs: Ignore static void main in DLLs.
4413         * rootcontext.cs: Handle the target type here,
4414         since we are have to access it from class.cs
4415         * driver.cs: account for the above.
4416
4417 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
4418
4419         * report.cs: Give line numbers and files if available.
4420
4421 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
4422
4423         * driver.cs: Implement /addmodule.
4424
4425         * typemanager.cs:  Change 'modules' field so it now contains Modules not
4426         ModuleBuilders.
4427
4428 2003-12-20  Martin Baulig  <martin@ximian.com>
4429
4430         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
4431         (FieldBase.IsAssigned): Removed this field.
4432         (FieldBase.SetAssigned): New public method.
4433         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
4434
4435 2003-12-20  Martin Baulig  <martin@ximian.com>
4436
4437         * expression.cs (LocalVariableReference.DoResolve): Don't set
4438         `vi.Used' if we're called from DoResolveLValue().
4439
4440         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
4441         returns the usage vector it just merged into the current one -
4442         pass this one to UsageWarning().
4443         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
4444         of the `EmitContext', don't call this recursively on our children.
4445
4446 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
4447
4448         * driver.cs: Implement /target:module.
4449
4450 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
4451
4452         * support.cs (CharArrayHashtable): New helper class.
4453
4454         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
4455         char arrays, not strings, so we can avoid creating a string in
4456         consume_identifier if the identifier is a keyword.
4457
4458 2003-12-16  Martin Baulig  <martin@ximian.com>
4459
4460         * statement.cs (LocalInfo.Assigned): Removed this property.
4461         (LocalInfo.Flags): Removed `Assigned'.
4462         (LocalInfo.IsAssigned): New public method; takes the EmitContext
4463         and uses flow analysis.
4464         (Block.UsageWarning): Made this method private.
4465         (Block.Resolve): Call UsageWarning() if appropriate.
4466
4467         * expression.cs (LocalVariableReference.DoResolve): Always set
4468         LocalInfo.Used here.
4469
4470 2003-12-13  Martin Baulig  <martin@ximian.com>
4471
4472         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
4473         any value here; we're now using flow analysis to figure out
4474         whether a statement/block returns a value.
4475
4476 2003-12-13  Martin Baulig  <martin@ximian.com>
4477
4478         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
4479         working again.
4480         (FlowBranching.MergeFinally): Don't call
4481         `branching.CheckOutParameters()' here, this is called in
4482         MergeTopBlock().
4483         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
4484         when adding the `finally' vector.       
4485
4486 2003-12-13  Martin Baulig  <martin@ximian.com>
4487
4488         * flowanalysis.cs
4489         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
4490         actually work and also fix #48962.
4491
4492 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
4493
4494         * decl.cs: Do not check System.Object for nested types,
4495         since we know it does not have any. Big bang for buck:
4496
4497         BEFORE:
4498            Run 1:   8.35 seconds
4499            Run 2:   8.32 seconds
4500            corlib:  17.99 seconds
4501         AFTER:
4502            Run 1:   8.17 seconds
4503            Run 2:   8.17 seconds
4504            corlib:  17.39 seconds
4505
4506 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
4507
4508         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
4509         time we are returning 0 members, so we save alot here.
4510
4511 2003-12-11  Martin Baulig  <martin@ximian.com>
4512
4513         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
4514         `MergeChild()', also just take the `FlowBranching' as argument;
4515         call Merge() on it and return the result.
4516         (FlowBranching.Merge): We don't need to do anything if we just
4517         have one sibling.
4518
4519 2003-12-11  Martin Baulig  <martin@ximian.com>
4520
4521         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
4522         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
4523         Maurer for this idea.
4524
4525 2003-12-11  Martin Baulig  <martin@ximian.com>
4526
4527         * flowanalysis.cs (MergeResult): This class is now gone; we now
4528         use the `UsageVector' for this.  The reason for this is that if a
4529         branching just has one sibling, we don't need to "merge" them at
4530         all - that's the next step to do.
4531         (FlowBranching.Merge): We now return a `UsageVector' instead of a
4532         `MergeResult'.
4533
4534 2003-12-11  Martin Baulig  <martin@ximian.com>
4535
4536         Reworked flow analyis and made it more precise and bug-free.  The
4537         most important change is that we're now using a special `Reachability'
4538         class instead of having "magic" meanings of `FlowReturns'.  I'll
4539         do some more cleanups and optimizations and also add some more
4540         documentation this week.
4541
4542         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
4543         largely reworked this class.
4544         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
4545         the new `Reachability' class instead of having "magic" values here.
4546         (FlowBranching): We're now using an instance of `Reachability'
4547         instead of having separate `Returns', `Breaks' etc. fields.
4548
4549         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
4550         based on flow analysis; ignore the return value of block.Emit ().
4551
4552 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
4553
4554         * driver.cs typemanager.cs: Find the mono extensions to corlib even
4555         if they are private.
4556
4557 2003-12-09  Martin Baulig  <martin@ximian.com>
4558
4559         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
4560         call them directly on the UsageVector.
4561
4562 2003-12-09  Martin Baulig  <martin@ximian.com>
4563
4564         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
4565         Changed return type from `FlowReturns' to `Reachability'.
4566
4567 2003-12-09  Martin Baulig  <martin@ximian.com>
4568
4569         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
4570         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
4571         `Reachable' fields with a single `Reachability' one.
4572
4573 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
4574
4575         * class.cs (FindMembers): Remove foreach's.
4576
4577         Bootstrap times:
4578
4579         BEFORE
4580                 Run 1:   8.74 seconds
4581                 Run 2:   8.71 seconds
4582
4583         AFTER
4584                 Run 1:   8.64 seconds
4585                 Run 2:   8.58 seconds
4586
4587
4588 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
4589
4590         * cs-parser.jay:
4591         * gen-treedump.cs:
4592         * statement.cs:
4593         This patch does a few things:
4594                 1. EmptyStatement is now a singleton, so it is never reallocated.
4595                 2. All blah is EmptyStatement constructs have been changed to
4596                    blah == EmptyStatement.Value, which is much faster and valid
4597                    now that EmptyStatement is a singleton.
4598                 3. When resolving a block, rather than allocating a new array for
4599                    the non-empty statements, empty statements are replaced with
4600                    EmptyStatement.Value
4601                 4. Some recursive functions have been made non-recursive.
4602         Mainly the performance impact is from (3), however (1) and (2) are needed for
4603         this to work. (4) does not make a big difference in normal situations, however
4604         it makes the profile look saner.
4605
4606         Bootstrap times:
4607
4608         BEFORE
4609         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
4610         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
4611         Total memory allocated: 56397 KB
4612
4613         AFTER
4614         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
4615         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
4616         Total memory allocated: 55666 KB
4617
4618 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
4619
4620         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
4621         than the hashtable in a hashtable version
4622
4623         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
4624         we always end up concating a string. This results in a huge perf
4625         loss, because many strings have to be tracked by the GC. In this
4626         patch, we first use a hashtable that works with two keys, so that
4627         the strings do not need to be concat'ed.
4628
4629         Bootstrap times:
4630         BEFORE
4631                 Run 1:   8.74 seconds
4632                 Run 2:   8.71 seconds
4633
4634         AFTER
4635                 Run 1:   8.65 seconds
4636                 Run 2:   8.56 seconds
4637
4638 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
4639
4640         * Makefile: Add a new target `do-time' that does a quick and simple
4641         profile, leaving easy to parse output.
4642
4643 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
4644
4645         * codegen.cs (Init): Create the dynamic assembly with 
4646         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
4647
4648 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
4649
4650         * support.cs: Make the PtrHashtable use only one
4651         instance of its comparer.
4652
4653 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
4654
4655         * typemanager.cs: Fix lookup of GetNamespaces.
4656
4657 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
4658
4659         * expression.cs: Removed redundant line.
4660
4661         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
4662         ArrayLists, use for loops with bounds.  
4663
4664         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
4665         arraylist.
4666
4667         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
4668         arraylists, use for loop with bounds.
4669
4670         The above three changes give us a 0.071 second performance
4671         improvement out of 3.294 seconds down to 3.223.  On my machine
4672         the above changes reduced the memory usage by 1,387 KB during
4673         compiler bootstrap.
4674
4675         * cs-parser.jay (QualifiedIdentifier): New class used to represent
4676         QualifiedIdentifiers.  Before we created a new string through
4677         concatenation, and mostly later on, the result would be
4678         manipulated by DecomposeQI through string manipulation.
4679
4680         This reduced the compiler memory usage for bootstrapping from
4681         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
4682         compile times in 0.05 seconds.
4683
4684 2003-11-28  Dick Porter  <dick@ximian.com>
4685
4686         * support.cs: Do string compares with the Invariant culture.
4687
4688         * rootcontext.cs: 
4689         * gen-treedump.cs: 
4690         * expression.cs: 
4691         * driver.cs: 
4692         * decl.cs: 
4693         * codegen.cs: 
4694         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
4695         the comparison is done with the Invariant culture.
4696
4697 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
4698
4699         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
4700         GetEnumerator method.
4701
4702         (ProbeCollectionType): Iterate starting at the most specific type
4703         upwards looking for a GetEnumerator
4704
4705         * expression.cs: Shift count can be up to 31 for int/uint and 63
4706         for long/ulong.
4707
4708 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
4709
4710         * statement.cs (Block.LookupLabel): Also look for the label on the
4711         children blocks.  Use a hash table to keep track of visited
4712         nodes. 
4713
4714         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
4715         we actually did transform the other operand, otherwise fall back
4716         to the common codepath that casts to long.
4717
4718         * cs-tokenizer.cs: Use the same code pattern as the int case.
4719         Maybe I should do the parsing myself, and avoid depending on the
4720         Parse routines to get this done.
4721
4722 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
4723
4724         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
4725         which fixes bug 51347.  This time test it.
4726
4727         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
4728         attributes for example can not tell the difference between these.
4729         The difference was only a syntax feature of the language. 
4730
4731         * attribute.cs: Apply attributes to delegates.
4732
4733         * delegate.cs: Call the apply attributes method.
4734
4735 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
4736
4737         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
4738         comparing 0 vs Byte.MinValue, not the value
4739
4740         (ImplicitConversionRequired): When reporting a conversion error,
4741         use error 31 to print out the constant error instead of the
4742         simpler 29.
4743
4744         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
4745         which fixes bug 51347.
4746
4747 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
4748
4749         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
4750         which fixes the -warnaserror command line option.
4751
4752 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
4753
4754         * cfold.cs (DoNumericPromotions): During constant folding of
4755         additions on UIntConstant, special case intconstants with
4756         IntConstants like we do on the expression binary operator. 
4757
4758 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
4759
4760         * convert.cs (ImplicitReferenceConversion): We were missing a case
4761         (System.Enum are not value types or class types, so we need to
4762         classify them separatedly).
4763
4764         * driver.cs: We do not support error 2007.
4765
4766 2003-11-12 Jackson Harper <jackson@ximian.com>
4767
4768         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
4769         system directory. Also use the full file name so users can
4770         libraries names mscorlib-o-tron.dll in a non system dir.
4771         
4772 2004-01-04  David Sheldon <dave-mono@earth.li>
4773
4774         * expression.cs: Added matching ")" to error message for CS0077.
4775
4776 2003-12-19  Martin Baulig  <martin@ximian.com>
4777
4778         * typemanager.cs (TypeManager.IsEqualGenericType): New public
4779         static method; see documentation in the method.
4780         (TypeManager.IsSubclassOrNestedChild): Allow IsEqualGenericType().
4781
4782         * convert.cs (Convert.ImplicitReferenceConversion,
4783         Convert.ImplicitReferenceConversionExists): Add support for
4784         generic type declarations; see gen-36.cs.
4785
4786 2003-12-19  Martin Baulig  <martin@ximian.com>
4787
4788         * pending.cs (Pending.InterfaceMethod): Use
4789         `Type.IsAssignableFrom()' instead of `=='.
4790
4791 2003-12-18  Martin Baulig  <martin@ximian.com>
4792
4793         * decl.cs (DeclSpace.AsAccessible): Check for array, pointer and
4794         byref types first.
4795
4796         * convert.cs (Convert.ImplicitStandardConversionExists): Use
4797         `expr_type.Equals (target_type)' instead of `=='.
4798
4799 2003-12-08  Martin Baulig  <martin@ximian.com>
4800
4801         * generics.cs (Constraints.Types): Removed.
4802         (Constraints.Resolve): Just resolve everything to TypeExpr's, not
4803         to Type's.
4804         (Constraints.ResolveTypes): New public method; resolves the
4805         TypeExpr's to Type's.
4806         (TypeParameter.Define): TypeBuilder.DefineGenericParameter() no
4807         longer takes the constraints.
4808         (TypeParameter.DefineMethod): Likewise.
4809         (TypeParameter.DefineType): New public method.  Calls
4810         `TypeBuilder/MethodBuilder.SetGenericParameterConstraints()' to set
4811         the constraints.
4812
4813 2003-12-08  Martin Baulig  <martin@ximian.com>
4814
4815         * convert.cs (Convert.ImplicitConversionStandard): Use
4816         `expr_type.Equals (target_type)' instead of `=='.
4817
4818 2003-12-08  Martin Baulig  <martin@ximian.com>
4819
4820         * typemanager.cs (TypeManager.GetReferenceType): Call
4821         `Type.MakeByRefType ()'.
4822
4823 2003-12-08  Martin Baulig  <martin@ximian.com>
4824
4825         * cs-parser.jay, cs-tokenizer.cs: `where' is not a keyword, it
4826         just has some special meaning in some situations.  For instance,
4827         it is allowed to use `where' as the name of a variable etc.
4828
4829 2003-12-04  Martin Baulig  <martin@ximian.com>
4830
4831         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
4832         `Type.MakeArrayType()' for array types.
4833
4834 2003-11-18  Miguel de Icaza  <miguel@ximian.com>
4835
4836         * expression.cs (Invocation.VerifyArgumentsCompat): Remove
4837         debugging message.
4838
4839         (SizeOf.DoResolve): assign the `type_queried' field.  This gets
4840         corlib to compile.
4841
4842 2003-11-16  Martin Baulig  <martin@ximian.com>
4843
4844         * codegen.cs (EmitContext.IsGeneric): Removed.
4845
4846         * ecore.cs (SimpleName.ResolveAsTypeStep): Always call
4847         ResolveGeneric() on the DeclSpace.
4848
4849 2003-11-16  Martin Baulig  <martin@ximian.com>
4850
4851         * generic.cs (TypeArguments.Resolve):
4852         `Expression.ResolveAsTypeTerminal()' returns a TypeExpr; call
4853         `ResolveType()' on it to get the Type.
4854
4855 2003-11-15  Martin Baulig  <martin@ximian.com>
4856
4857         * generic.cs (ConstructedType.GetInterfaces): Override this.
4858
4859 2003-11-14  Martin Baulig  <martin@ximian.com>
4860
4861         * interface.cs (Interface.DefineType): Define all type parameters
4862         before adding the interfaces we inherit.
4863
4864 2003-11-11  Martin Baulig  <martin@ximian.com>
4865
4866         * generic.cs (ConstructedType.ResolveType): Always call
4867         `gt.BindGenericParameters (atypes)'; also if `args.HasTypeArguments'.
4868
4869 2003-11-10  Martin Baulig  <martin@ximian.com>
4870
4871         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
4872         (TypeManager.InitCoreTypes): Initialize them here, but instead of
4873         calling `ResolveType()' on them, directly assign their `Type'.
4874
4875 2003-11-08  Martin Baulig  <martin@ximian.com>
4876
4877         * generic.cs (ConstructedType): Override `IsClass' etc.
4878
4879 2003-11-08  Martin Baulig  <martin@ximian.com>
4880
4881         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
4882         return value and the `out parent' parameter.
4883         (TypeContainer.DefineType): Moved the CS0644 check into
4884         GetClassBases().  Don't pass the interface types to the
4885         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
4886         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
4887
4888         * ecore.cs (TypeExpr.IsAttribute): New property.
4889         (TypeExpr.GetInterfaces): New method.
4890
4891         * interface.cs (Interface.GetInterfaceTypeByName): Return a
4892         TypeExpr instead of a Type.
4893         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
4894         (Interface.DefineType): Don't pass the interface types to the
4895         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
4896         them later and then call `TypeBulider.AddInterfaceImplementation()'.
4897
4898         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
4899         instead of a `Type[]'.
4900         (TypeManager.RegisterBuilder): Likewise.
4901         (TypeManager.AddUserInterface): Likewise.
4902         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
4903         `Type[]' and also return a `TypeExpr[]'.
4904         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
4905
4906 2003-11-08  Martin Baulig  <martin@ximian.com>
4907
4908         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
4909         Expression.     
4910
4911 2003-11-08  Martin Baulig  <martin@ximian.com>
4912
4913         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
4914         TypeManager.ResolveExpressionTypes().
4915
4916         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
4917         instead of an Expression.
4918         (TypeExpr): This is now an abstract base class for `TypeExpression'.
4919         (TypeExpression): New public class; formerly known as `TypeExpr'.
4920
4921         * expression.cs (ComposedCast): Derive from TypeExpr.
4922
4923         * typemanager.cs (TypeManager.system_*_expr): These are now
4924         TypExpr's instead of Expression's.
4925         (TypeManager.ResolveExpressionTypes): New public static function;
4926         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
4927         of them.        
4928
4929 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
4930
4931         * expression.cs (New.DoResolve): Do not dereference value that
4932         might be a null return.
4933
4934         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
4935         sure that the constant value has the right type.  Fixes an
4936         unreported bug, similar to 50425.
4937
4938         * const.cs (Const.LookupConstantValue): Call
4939         ImplicitStandardConversionExists before doing a conversion to
4940         avoid havng the TypeManager.ChangeType do conversions.
4941
4942         Reduced the number of casts used
4943
4944         (Const.ChangeType): New routine to enable reuse of the constant
4945         type changing code from statement.
4946
4947         * typemanager.cs (ChangeType): Move common initialization to
4948         static global variables.
4949
4950         Fixes #50425.
4951
4952         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
4953         every value type to go through, even if it was void.  Fix that. 
4954
4955         * cs-tokenizer.cs: Use is_identifier_start_character on the start
4956         character of the define, and the is_identifier_part_character for
4957         the rest of the string.
4958
4959 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
4960
4961         * expression.cs (UnaryMutator.EmitCode): When I updated
4962         LocalVariableReference.DoResolve, I overdid it, and dropped an
4963         optimization done on local variable references.
4964
4965 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
4966
4967         * ecore.cs: Convert the return from Ldlen into an int.
4968
4969 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
4970
4971         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
4972         the accessibility, this is a special case for toplevel non-public
4973         classes (internal for instance).
4974
4975 2003-10-20  Nick Drochak <ndrochak@gol.com>
4976
4977         * ecore.cs: Fix typo and build.  Needed another right paren.
4978
4979 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
4980
4981         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
4982         `internal' case regular and protected, but not allowing protected
4983         to be evaluated later.  Bug 49840
4984
4985 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
4986
4987         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
4988         to kb.Nlast, and not the kb.nFirst to isolate the switch
4989         statement.
4990
4991         Extract the underlying type, so enumerations of long/ulong are
4992         treated like long/ulong.
4993
4994 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
4995
4996         * expression.cs (New): Overload the meaning of RequestedType to
4997         track the possible creation of the NewDelegate type, since
4998         DoResolve is invoked more than once for new constructors on field
4999         initialization.
5000
5001         See bugs: #48800 and #37014
5002
5003         * cs-parser.jay (declare_local_constants): Take an arraylist
5004         instead of a single constant.
5005
5006         (local_constant_declaration): It should take a
5007         constant_declarators, not a constant_declarator.  Fixes 49487
5008
5009         * convert.cs: Fix error report.
5010
5011 2003-10-13 Jackson Harper <jackson@ximian.com>
5012
5013         * typemanager.cs (TypeToCoreType): Add float and double this fixes
5014         bug #49611
5015         
5016 2003-11-03  Martin Baulig  <martin@ximian.com>
5017
5018         * expression.cs (ArrayAccess.GetStoreOpcode): Added
5019         `out bool has_type_arg'; if set, we need to pass the type to
5020         ig.Emit().
5021         (ArrayAccess.GetStoreOpcode, ArrayAccess.EmitLoadOpcode): Use
5022         Stelem_Any/Ldelem_Any for generic parameters.   
5023
5024 2003-11-02  Martin Baulig  <martin@ximian.com>
5025
5026         * expression.cs (Invocation.EmitCall): Use
5027         `TypeManager.IsValueType()' to check whether it's a value type.
5028         Don't set `struct_call' when calling a method on a type parameter.
5029
5030 2003-11-02  Martin Baulig  <martin@ximian.com>
5031
5032         * generics.cs (ConstructedType.Resolve): Renamed to ResolveType()
5033         and removed the TypeBuilder argument.
5034
5035         * typemanager.cs (TypeManager.IsValueType): Return
5036         `t.IsGenericParameter || t.IsValueType'.
5037
5038 2003-10-25  Martin Baulig  <martin@ximian.com>
5039
5040         * decl.cs (DeclSpace.ResolveType): If we're a ConstructedType,
5041         call ConstructedType.Resolve() on it.
5042
5043         * generic.cs (ConstructedType.Resolve): Set `type' on success.
5044
5045 2003-10-25  Martin Baulig  <martin@ximian.com>
5046
5047         * class.cs (TypeContainer.GetClassBases): Changed
5048         `out Type parent' into `out TypeExpr parent'.  Moved CS0644 and
5049         CS8214 reporting here.
5050         (TypeContainer.DefineType): GetClassBases() gives us a `TypeExpr'
5051         instead of a `Type' for our parent.  In case of a recursive
5052         declaration (see tests/gen-23.cs for an example), our parent is a
5053         ConstructedType and it doesn't have its type set.  So, first
5054         create our own TypeBuilder, then call constructed.Resolve() to get
5055         the parent's type and finally TypeBuilder.SetParent() it.
5056
5057         * ecore.cs (TypeExpr.Name): New public virtual property.
5058
5059         * generic.cs
5060         (ConstructedType): We're now a TypeExpr and not just an Expression.
5061         (ConstructedType.ResolveAsTypeStep): Don't resolve our type
5062         arguments here; this is done later.
5063         (ConstructedType.Resolve): New public method to resolve the type
5064         arguments and bind them.
5065
5066 2003-10-21  Martin Baulig  <martin@ximian.com>
5067
5068         * convert.cs: Use `TypeManager.IsValueType' instead of
5069         'type.IsValueType' everywhere.
5070
5071         * typemanager.cs (TypeManager.IsValueType): Return true for type
5072         parameters.  The reason for this is that we need to box a type
5073         parameter when converting it to a reference type.
5074
5075         * cs-parser.jay: Added support for default value expressions.
5076
5077         * generics.cs (DefaultValueExpression): New public class.       
5078
5079 2003-10-17  Martin Baulig  <martin@ximian.com>
5080
5081         * generic.cs (Constraints.Resolve): Take a DecpSpace instead of a
5082         TypeContainer so we can also use this for Interfaces.
5083         (TypeParameter.Resolve): Likewise.
5084
5085         * interface.cs (Interface.DefineType): Added support for generic
5086         interfaces.
5087
5088         * cs-parser.jay: Added support for generic structs and interfaces.
5089
5090 2003-10-17  Martin Baulig  <martin@ximian.com>
5091
5092         * generic.cs (GenericMemberAccess.DoResolve): We can now actually
5093         call generic methods :-)
5094
5095 2003-10-16  Martin Baulig  <martin@ximian.com>
5096
5097         * cs-parser.jay (namespace_or_type_name): Only create a
5098         GenericMemberAccess if we actually have type arguments.
5099
5100 2003-10-13  Martin Baulig  <martin@ximian.com>
5101
5102         * class.cs (Method.Define): If we're a generic method, call
5103         TypeBuilder.DefineGenericMethod () before resolving
5104         the parameters.
5105         (MethodData): Added .ctor which takes an additional MethodBuilder
5106         argument; this is used for generic methods.
5107         (MethodData.Define): Call `builder.SetGenericMethodSignature()' if
5108         we already have a MethodBuilder.
5109
5110 2003-10-10  Martin Baulig  <martin@ximian.com>
5111
5112         * class.cs (Method): Added .ctor which takes a `GenericMethod'
5113         instead of a `DeclSpace'.  This is used for generic methods.
5114
5115         * cs-parser.jay (method_header): Added support for generic
5116         methods; create a `GenericMethod' instance and pass it to the
5117         `Method's .ctor; it'll be used as the `DeclSpace' to lookup
5118         parameters and locals.
5119
5120         * decl.cs (DeclSpace.SetParameterInfo): Removed Location argument
5121         since we already have the location.  Check whether we're a generic
5122         type declaration or a generic method and create the correct type
5123         parameter.
5124
5125         * generic.cs (TypeParameter.DefineMethod): New public method.
5126         (GenericMethod): New public class; derives from DeclSpace and is
5127         used for generic methods.       
5128
5129 2003-10-09  Martin Baulig  <martin@ximian.com>
5130
5131         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
5132         to the .ctor.
5133         (MethodCore.DoDefineParameters): Removed the TypeContainer
5134         argument; use the DeclSpace which was passed to the .ctor instead.
5135         (MethodCore.CheckParameter): Take a DeclSpace instead of a
5136         TypeContainer; we only need a DeclSpace here.
5137
5138 2003-10-09  Martin Baulig  <martin@ximian.com>
5139
5140         * class.cs (MethodData): Added additional `DeclSpace ds' argument
5141         to the .ctor.
5142         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
5143         EmitContext's .ctor.    
5144
5145 2003-10-09  Martin Baulig  <martin@ximian.com>
5146
5147         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
5148         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
5149         AsAccessible(), moved them as well.
5150
5151         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
5152
5153 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
5154
5155         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
5156         generation for >=, as spotted by Paolo, bug 48679.  
5157         Patch from David Waite.
5158
5159         * cs-tokenizer.cs: Add handling for #pragma.
5160
5161         * cs-parser.jay: Allow for both yield and yield return in the
5162         syntax.  The anti-cobolization of C# fight will go on!
5163
5164         * class.cs (TypeBuilder.DefineType): Catch error condition here
5165         (Parent.DefineType erroring out and returning null).
5166
5167         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
5168         coping with enumerations variables, we were mistakenly processing
5169         them as a regular value type instead of built-in types.  Fixes the
5170         bug #48063
5171
5172         * typemanager.cs (IsBuiltinOrEnum): New method.
5173
5174 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
5175
5176         * cs-parser.jay: Upgrade: yield now needs the return clause.
5177
5178 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
5179
5180         * cs-parser.jay : Renamed yyName to yyNames related to jay.
5181
5182 2003-09-29  Martin Baulig  <martin@ximian.com>
5183
5184         * typemanager.cs (TypeManager.GetMethodFlags): Added support for
5185         inflated generic methods.
5186
5187         * generics.cs (ConstructedType): Distinguish between open and
5188         closed constructed types; correctly resolve the arguments.
5189
5190 2003-09-22  Martin Baulig  <martin@ximian.com>
5191
5192         * generic.cs (ConstructedType.ResolveAsTypeCheck): Check whether
5193         all type arguments meet their constraints.
5194
5195 2003-09-19  Martin Baulig  <martin@ximian.com>
5196
5197         * decl.cs (MemberCache.SetupCacheForInterface): Take a
5198         `MemberCache parent' argument.  Normally, an interface doesn't
5199         have a parent type except System.Object, but we use this in gmcs
5200         for generic type parameters.
5201
5202 2003-09-18  Martin Baulig  <martin@ximian.com>
5203
5204         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
5205         on `type.IsInterface'; don't check whether the type has a parent
5206         to determine whether it's an interface.
5207
5208 2003-09-17  Martin Baulig  <martin@ximian.com>
5209
5210         * generic.cs (ConstructedType.ToString): Always use `name' as the
5211         type name.
5212
5213 2003-09-15  Martin Baulig  <martin@ximian.com>
5214
5215         * cs-parser.jay: Fix grammar wrt. type_parameter_constraints.
5216
5217         * generic.cs (Constraints.Resolve): New public method; this is
5218         called to resolve the constraint types and to check whether all
5219         the constraints are correct.
5220         (Constraints.Types): New public property.
5221         (TypeParameter.Resolve): New public method; resolves all the
5222         type's constraints.
5223
5224         * class.cs (TypeContainer.DefineType): Call
5225         TypeParameter.Resolve() before actually defining the type.
5226
5227 2003-09-15  Martin Baulig  <martin@ximian.com>
5228
5229         * class.cs (TypeContainer.DefineType): Added an error flag to
5230         avoid reporting duplicate CS0146's ("class definition is
5231         circular.").
5232
5233         * driver.cs (Driver.MainDriver): Abort if
5234         RootContext.ResolveTree() reported any errors.
5235
5236 2003-09-07  Martin Baulig  <martin@ximian.com>
5237
5238         * report.cs (Error, Warning): Added overloaded versions which take
5239         a `params object[] args' and call String.Format().
5240
5241 2003-09-07  Martin Baulig  <martin@ximian.com>
5242
5243         * decl.cs (DeclSpace..ctor): Don't call
5244         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
5245         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
5246         (DeclSpace.RecordDecl): New method.
5247
5248         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
5249
5250 2003-09-02  Ravi Pratap  <ravi@ximian.com>
5251
5252         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
5253         value attributes to be applied to ParameterBuilders.
5254
5255         * class.cs (MethodCore.LabelParameters): Make static and more
5256         generic so that it can be used from other places - like interface
5257         methods, for instance.
5258
5259         * interface.cs (Interface.Emit): Call LabelParameters before
5260         emitting attributes on the InterfaceMethod.
5261
5262 2003-09-07  Martin Baulig  <martin@ximian.com>
5263
5264         * generic.cs (ConstructedType.ResolveAsTypeStep): Report a CS8217
5265         if the number of type parameters doesn't match.
5266
5267 2003-09-04  Martin Baulig  <martin@ximian.com>
5268
5269         * expression.cs (ComposedCast.ResolveAsTypeStep): Added support
5270         for arrays of generic type params (ie. `!0[]').
5271
5272 2003-09-04  Martin Baulig  <martin@ximian.com>
5273
5274         * class.cs (TypeContainer.AsAccessible): Ignore generic parameters
5275         for the moment.
5276
5277 2003-09-04  Martin Baulig  <martin@ximian.com>
5278
5279         * decl.cs (DeclSpace.LookupGeneric): New method.
5280         (DeclSpace.CheckAccessLevel): Ignore generic parameters for the
5281         moment.
5282
5283         * generic.cs (TypeParameterExpr): Take a TypeParameter as
5284         argument, not just a string.
5285         (TypeParameter.Define): New public method; this is called to
5286         actually define the generic parameter; after this, you can use the
5287         new `Type' property to get the type.
5288
5289 2003-09-04  Martin Baulig  <martin@ximian.com>
5290
5291         * decl.cs (DeclSpace.SetParameterInfo): The `constraints' argument
5292         is now an ArrayList; initialize the result of the `TypeParameters'
5293         property here.
5294         (DeclSpace.GetGenericData): Removed.
5295         (DeclSpace.LookupGeneric): Temporarily removed; we need to
5296         implement this in a different way.
5297         (DeclSpace.GetTypeParameters): Removed; there's now a
5298         `TypeParameters' property.
5299         (DeclSpace.TypeParameters): New public property.
5300
5301         * generic.cs (Constraints): Make this class public.
5302         (TypeParameter): New public class.
5303
5304 2003-09-04  Martin Baulig  <martin@ximian.com>
5305
5306         * decl.cs (DeclSpace.GetTypeParameters): New method to return the
5307         generic parameters.
5308
5309         * class.cs (TypeContainer.DefineType): Call
5310         TypeBuilder.DefineGenericParameter () on all generic parameters if
5311         this is a generic type.
5312
5313 2003-08-28  Martin Baulig  <martin@ximian.com>
5314
5315         * sample-stack.il: Compile this with ilasm: "ilasm /dll
5316         sample-stack.il".
5317
5318         * sample-hello.cs: Compile this with gmcs: "gmcs
5319         /r:sample-stack.dll sample-hello.cs".
5320
5321 2003-08-28  Martin Baulig  <martin@ximian.com>
5322
5323         * generic.cs (ConstructedType.ResolveAsTypeStep): Actually bind
5324         the parameters to the generic type.
5325
5326 2003-08-28  Martin Baulig  <martin@ximian.com>
5327
5328         * cs-tokenizer.cs (parse_less_than): Also allow all builtin types.
5329
5330 2003-08-28  Martin Baulig  <martin@ximian.com>
5331
5332         * cs-parser.jay (opt_type_argument_list): Use
5333         `OP_GENERICS_LT type_arguments OP_GENERICS_GT'.
5334         (primary_expression): Replace `qualified_identifier' with `type_name'.
5335         (type_parameter_list): Use `OP_GENERICS_LT type_parameters OP_GENERICS_GT'.
5336
5337         * cs-tokenizer.cs (is_punct): When reading a `<', invoke a custom
5338         parser to check whether it is syntactically a type parameter list;
5339         return OP_GENERICS_LT/OP_GENERICS_GT instead of OP_LT/OP_GT in
5340         this case.
5341
5342 2003-08-26  Martin Baulig  <martin@ximian.com>
5343
5344         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
5345         resolving aliases; fixes #47927.
5346
5347 2003-08-26  Martin Baulig  <martin@ximian.com>
5348
5349         * statement.cs (Using.DoResolve): This is internally emitting a
5350         try/finally clause, so we need to set ec.NeedExplicitReturn if we
5351         do not always return.  Fixes #47681.
5352
5353 2003-08-26  Martin Baulig  <martin@ximian.com>
5354
5355         * decl.cs (MemberCore): Moved WarningNotHiding(),
5356         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
5357         into MemberBase.
5358         (AdditionResult): Make this nested in DeclSpace.
5359         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
5360         argument; call NamespaceEntry.Define() unless we're nested in a
5361         class or struct.
5362
5363         * namespace.cs (Namespace.DefineName): New public function.  This
5364         is called from DeclSpace's .ctor to add 
5365         (Namespace.Lookup): Include DeclSpaces in the lookup.
5366
5367         * class.cs (Operator): Derive from MemberBase, not MemberCore.
5368
5369         * const.cs (Const): Derive from MemberBase, not MemberCore.     
5370
5371 2003-08-25  Martin Baulig  <martin@ximian.com>
5372
5373         * convert.cs (Convert.ExplicitReferenceConversion): When
5374         converting from an interface type to a class, unbox if the target
5375         type is a struct type.  Fixes #47822.
5376
5377 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
5378
5379         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
5380         #47854.
5381
5382 2003-08-22  Martin Baulig  <martin@ximian.com>
5383
5384         * class.cs (TypeManager.DefineType): When defining a nested type,
5385         call DefineType() on our parent; fixes #47801.
5386
5387 2003-08-22  Martin Baulig  <martin@ximian.com>
5388
5389         * class.cs (MethodData.Define): While checking if a method is an
5390         interface implementation, improve the test a bit more to fix #47654.
5391
5392 2003-08-22  Martin Baulig  <martin@ximian.com>
5393
5394         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
5395         correctly; fixes #47722.
5396
5397 2003-08-22  Martin Baulig  <martin@ximian.com>
5398
5399         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
5400         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
5401
5402         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
5403
5404 2003-08-22  Martin Baulig  <martin@ximian.com>
5405
5406         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
5407         can only be assigned in static constructors.  Fixes #47161.
5408
5409 2003-08-22  Martin Baulig  <martin@ximian.com>
5410
5411         Rewrote and improved the flow analysis code.
5412
5413         * flowbranching.cs (FlowBranching): Make this class abstract.
5414         (FlowBranching.CreateBranching): New static function to create a
5415         new flow branching.
5416         (FlowBranchingBlock, FlowBranchingException): New classes.
5417         (FlowBranching.UsageVector.Type): New public readonly field.
5418         (FlowBranching.UsageVector.Breaks): Removed the setter.
5419         (FlowBranching.UsageVector.Returns): Removed the setter.
5420         (FlowBranching.UsageVector): Added Break(), Return(),
5421         NeverReachable() and Throw() methods to modify the reachability.
5422         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
5423         done by FlowBranching.Merge().
5424         (FlowBranching.UsageVector.MergeChild): New method; merges the
5425         merge result into the current vector.
5426         (FlowBranching.Merge): New abstract method to merge a branching.
5427
5428 2003-08-12  Martin Baulig  <martin@ximian.com>
5429
5430         * expression.cs (Indirection.CacheTemporaries): Create the
5431         LocalTemporary with the pointer type, not its element type.
5432
5433 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
5434
5435         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
5436         token was a keyword or not.
5437
5438         Add `error' options where an IDENTIFIER was expected;  Provide
5439         CheckToken and CheckIdentifierToken convenience error reporting
5440         functions. 
5441
5442         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
5443
5444         * decl.cs: Rename `NamespaceEntry Namespace' public field into
5445         NameSpaceEntry NameSpaceEntry.
5446
5447         (LookupInterfaceOrClass): Avoid creating a full qualified name
5448         from namespace and name: avoid doing lookups when we know the
5449         namespace is non-existant.   Use new Tree.LookupByNamespace which
5450         looks up DeclSpaces based on their namespace, name pair.
5451
5452         * driver.cs: Provide a new `parser verbose' to display the
5453         exception thrown during parsing.  This is turned off by default
5454         now, so the output of a failure from mcs is more graceful.
5455
5456         * namespace.cs: Track all the namespaces defined in a hashtable
5457         for quick lookup.
5458
5459         (IsNamespace): New method
5460
5461 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
5462
5463         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
5464         we know that we need to concatenate (full typename can never be
5465         null). 
5466
5467         * class.cs: ditto.
5468
5469         * statement.cs: Use a bitfield;  Do not initialize to null things
5470         which are done by the constructor by default.
5471
5472         * cs-parser.jay: bug fix, parameter was 4, not 3.
5473
5474         * expression.cs: Just use the property;
5475
5476         * statement.cs: No need for GetVariableInfo method.
5477
5478 2003-08-08  Martin Baulig  <martin@ximian.com>
5479
5480         * flowanalysis.cs (FlowReturns): This is now nested in the
5481         `FlowBranching' class.
5482         (MyBitVector): Moved this here from statement.cs.
5483         (FlowBranching.SiblingType): New enum type.
5484         (FlowBranching.CreateSibling): Added `SiblingType' argument.
5485
5486 2003-08-07  Martin Baulig  <martin@ximian.com>
5487
5488         * flowanalysis.cs (FlowBranchingType): This is now nested in the
5489         `FlowBranching' class and called `BranchingType'.
5490
5491 2003-08-07  Martin Baulig  <martin@ximian.com>
5492
5493         * flowanalysis.cs: Moved all the control flow analysis code into
5494         its own file.
5495
5496 2003-08-07  Martin Baulig  <martin@ximian.com>
5497
5498         * assign.cs (Assign.DoResolve): `target' must either be an
5499         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
5500         #37319.
5501
5502 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
5503
5504         * expression.cs (BinaryMethod): This kind of expression is created by the
5505         Binary class if it determines that the operator has to be handled
5506         by a method.
5507
5508         (BinaryDelegate): This kind of expression is created if we are
5509         dealing with a + or - operator on delegates.
5510
5511         (Binary): remove method, argumetns, and DelegateOperator: when
5512         dealing with methods, 
5513
5514         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
5515
5516         * statement.cs (Block): use bitfields for the three extra booleans
5517         we had in use.   Remove unused topblock parameter.
5518
5519         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
5520
5521         * assign.cs: Drop extra unneeded tests.
5522
5523 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
5524
5525         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
5526
5527         * statement.cs (Foreach): Use VariableStorage instead of
5528         LocalBuilders.   
5529
5530         * codegen.cs (VariableStorage): New class used by clients that
5531         require a variable stored: locals or fields for variables that
5532         need to live across yield.
5533
5534         Maybe provide a convenience api for EmitThis+EmitLoad?
5535
5536         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
5537         these bad boys.
5538
5539 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
5540
5541         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
5542         RemapParameterLValue): New methods that are used to turn a
5543         precomputed FieldInfo into an expression like this:
5544
5545                 instance.FieldInfo
5546
5547         The idea is to use this instead of making LocalVariableReference
5548         have more than one meaning.
5549
5550         * cs-parser.jay: Add error production to BASE.
5551
5552         * ecore.cs: Deal with TypeManager.GetField returning null, which
5553         is now a valid return value.
5554
5555         (FieldExprNoAddress): New expression for Fields whose address can
5556         not be taken.
5557
5558         * expression.cs (LocalVariableReference): During the resolve
5559         phases, create new expressions if we are in a remapping context.
5560         Remove code that dealt with remapping here.
5561
5562         (ParameterReference): same.
5563
5564         (ProxyInstance): New expression, like the `This' expression, but
5565         it is born fully resolved.  We know what we are doing, so remove
5566         the errors that are targeted to user-provided uses of `this'.
5567
5568         * statement.cs (Foreach): our variable is now stored as an
5569         Expression;  During resolution, follow the protocol, dont just
5570         assume it will return this.
5571
5572 2003-08-06  Martin Baulig  <martin@ximian.com>
5573
5574         * support.cs (SeekableStreamReader.cs): New public class.
5575
5576         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
5577         SeekableStreamReader instead of the normal StreamReader.
5578
5579 2003-08-04  Martin Baulig  <martin@ximian.com>
5580
5581         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
5582         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
5583         deambiguate casts and delegate invocations.
5584         (parenthesized_expression): Use the new tokens to ensure this is
5585         not a cast of method invocation.
5586
5587         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
5588         when reading a `)' and Deambiguate_CloseParens () was previously
5589         called.
5590
5591         * expression.cs (ParenthesizedExpression): New class.  This is
5592         just used for the CS0075 test.
5593         (Binary.DoResolve): Check for CS0075.   
5594
5595 2003-07-29  Ravi Pratap  <ravi@ximian.com>
5596
5597         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
5598         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
5599         reference comparison.
5600
5601         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
5602         examine the ReturnType for equality - this is necessary in the
5603         cases of implicit and explicit operators whose signature also
5604         includes the return type.
5605
5606 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
5607
5608         * namespace.cs: Cache the result of the namespace computation,
5609         instead of computing it every time.
5610
5611 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
5612
5613         * decl.cs: Use a global arraylist that we reuse over invocations
5614         to avoid excesive memory consumption.  Reduces memory usage on an
5615         mcs compile by one meg (45 average).
5616
5617         * typemanager.cs (LookupTypeReflection): In .NET pointers are
5618         private, work around that.
5619
5620 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
5621
5622         * literal.cs (IntLiteral): Define Zero and One static literals. 
5623
5624         * cs-parser.jay (integer_literal): use static literals to reduce
5625         memory usage for the most used literals (0, 1 and -1).  211kb
5626         reduced in memory usage.
5627
5628         Replace all calls to `new ArrayList' with `new
5629         ArrayList(4)' which is a good average number for most allocations,
5630         and also requires only 16 bytes of memory for its buffer by
5631         default. 
5632
5633         This reduced MCS memory usage in seven megabytes for the RSS after
5634         bootstrapping.
5635
5636 2003-07-28  Ravi Pratap  <ravi@ximian.com>
5637
5638         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
5639         handle params methods the correct way by forming only one
5640         applicable set with params and normal methods in them. Earlier we
5641         were looking at params methods only if we found no normal methods
5642         which was not the correct thing to do.
5643
5644         (Invocation.BetterFunction): Take separate arguments indicating
5645         when candidate and the best method are params methods in their
5646         expanded form.
5647
5648         This fixes bugs #43367 and #46199.
5649
5650         * attribute.cs: Documentation updates.
5651
5652         (CheckAttribute): Rename to CheckAttributeTarget.
5653         (GetValidPlaces): Rename to GetValidTargets.
5654
5655         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
5656         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
5657
5658         Fixes bug #44468.
5659
5660 2003-07-28  Miguel de Icaza  <miguel@ximian.com>
5661
5662         * codegen.cs: Compute IsGeneric correctly.
5663
5664         * cs-parser.jay: Introduce OP_GENERIC_LT for the grammar ambiguity
5665         resolution. 
5666
5667         Bring back (temporarily) OP_LEFT_SHIFT, OP_RIGHT_SHIFT,
5668         OP_SHIFT_RIGHT_ASSIGN, OP_SHIFT_LEFT_ASSIGN.  There were too many
5669         regressions, and I was chasing more bugs than I required.
5670
5671         * interface.cs: Use expressions for base type names (like classes
5672         and structs have been doing for a while now), and resolve that.
5673         This patch should probably go into head as well.
5674
5675         This makes it one less user of FindType.
5676
5677 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
5678
5679         This compiler can not self host currently.  Need to fix that.
5680         
5681         * Makefile: compile to `gmcs.exe'
5682
5683         * driver.cs: Turn on v2 by default on gmcs.
5684
5685         * generic.cs (ConstructedType): Does no longer take a container
5686         type argument;  That will be taken care of later.
5687
5688         (ConstructedType.DoResolve, ConstructedType.ResolveAsTypeStep):
5689         Use SimpleName to resolve for now, so we can continue the work on
5690         the parser, until we get Type.GetType that understands generics.
5691
5692         (ConstructedType.ToString): Implement
5693
5694         (TypeArguments.Resolve): Resolve the child expressions as types. 
5695         
5696         * cs-parser.jay: Rename interface_constraints to
5697         type_parameter_constraints
5698
5699         (namespace_or_type_name): Only use constructed types for the basic
5700         construction, we will deal with identifier<...> later.
5701
5702         (type/type_name): No longer call DecomposeQI, as
5703         namespace_or_type_name is always decoded now.
5704         
5705 2003-07-22  Ravi Pratap  <ravi@ximian.com>
5706
5707         * expression.cs (Invocation.OverloadResolve): Follow the spec more
5708         closely: we eliminate methods in base types when we have an
5709         applicable method in a top-level type.
5710
5711         Please see section 14.5.5.1 for an exact description of what goes
5712         on. 
5713
5714         This fixes bug #45127 and a host of other related to corlib compilation.
5715
5716         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
5717         array is the method corresponding to the top-level type (this is
5718         because of the changes made to icall.c) so we change this
5719         accordingly.
5720
5721         (MethodGroupExpr.Name): This too.
5722
5723         * typemanager.cs (GetElementType): New method which does the right
5724         thing when compiling corlib. 
5725
5726         * everywhere: Make use of the above in the relevant places.
5727
5728 2003-07-22  Martin Baulig  <martin@ximian.com>
5729
5730         * cs-parser.jay (invocation_expression): Moved
5731         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
5732         `cast_expression', but create a InvocationOrCast which later
5733         resolves to either an Invocation or a Cast.
5734
5735         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
5736         method; call this before EmitStatement() to make sure that this
5737         expression can be used as a statement.
5738
5739         * expression.cs (InvocationOrCast): New class; resolves to either
5740         an Invocation or a Cast.
5741
5742         * statement.cs (StatementExpression): Call ResolveStatement() on
5743         the ExpressionStatement before emitting it.
5744
5745 2003-07-21  Martin Baulig  <martin@ximian.com>
5746
5747         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
5748         `ref' and `out' attributes match; fixes #46220.
5749         (MemberAccess.ResolveMemberAccess): You can't reference a type
5750         through an expression; fixes #33180.
5751         (Indexers.GetIndexersForType): Don't return the indexers from
5752         interfaces the class implements; fixes #46502.
5753
5754 2003-07-21  Martin Baulig  <martin@ximian.com>
5755
5756         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
5757         CS0661 checks; fixes bug #30442.
5758
5759 2003-07-21  Martin Baulig  <martin@ximian.com>
5760
5761         * decl.cs (AdditionResult): Added `Error'.
5762
5763         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
5764
5765         * typemanager.cs (TypeManager.ChangeType): Catch exceptions; makes
5766         cs0031.cs actually work.
5767
5768  2003-07-20  Miguel de Icaza  <miguel@ximian.com>
5769  
5770         * cs-parser.jay (namespace_name): do not use
5771         namespace_or_type_name, use qualified_identifier, because
5772         namespace_or_type_name will soon return a composed expression
5773         instead of a string.
5774  
5775         (namespace_or_type_name): Instead of returning a string, now this
5776         production returns an expression.
5777  
5778         * codegen.cs (EmitContext): Setup IsGeneric property based on
5779         whether our DeclSpace is generic, our the method is generic.
5780  
5781         * modifier.cs (Modifiers.METHOD_GENERIC): New definition, use if
5782         the method is generic.
5783  
5784         * cs-parser.jay (type_arguments, opt_type_argument_list,
5785         type_parameters, type_parameter_list, opt_type_parameter_list,
5786         type_parameter,, opt_type_parameter_constraints_clauses,
5787         type_parameter_constraints_clauses,
5788         type_parameter_constraint_clause, type_parameter_constraint,
5789         interface_constraints): Add new production
5790  
5791         * decl.cs (DeclSpace): IsGeneric, flag to track whether this
5792         DeclSpace is generic or not.
5793  
5794         (DeclSpace.SetParameterInfo): New routine, used to set the
5795         parameter info for a type.
5796  
5797         (DeclSpace.LookupGeneric): Lookups a name, and if it is a generic,
5798         returns a GenericTypeExpr
5799  
5800         * ecore.cs (SimpleName.ResolveAsTypeStep): If our container is
5801         generic, lookup the generic argument.
5802  
5803         * attribute.cs: Do not allow TypeParameterExpressions in
5804         Attributes.
5805  
5806         * class.cs: Do not allow the Main method to be defined in a
5807         Generic container.
5808  
5809         * expression.cs (SizeOf): Do not allow generic types to be used as
5810         arguments to sizeof.
5811  
5812         * typemanager.cs (IsGeneric): Wrapper for Reflection when we have
5813         it: whether a type is generic or not.  Only works for types we are
5814         currently building for now.
5815         
5816 2003-07-20  Martin Baulig  <martin@ximian.com>
5817
5818         * namespace.cs: Fixed that bug which caused a crash when compiling
5819         the debugger's GUI.
5820
5821 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
5822
5823         * typemanager.cs (LookupTypeReflection): Never expose types which
5824         are NotPublic, NestedPrivate, NestedAssembly, or
5825         NestedFamANDAssem.  We used to return these, and later do a check
5826         that would report a meaningful error, but the problem is that we
5827         would not get the real match, if there was a name override.
5828
5829 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
5830
5831         * namespace.cs (Namespace, Name): Do not compute the namespace
5832         name dynamically, compute it in the constructor.  This reduced
5833         memory usage by 1697 KB.
5834
5835         * driver.cs: Use --pause to pause at the end.
5836
5837 2003-07-17  Peter Williams  <peter@newton.cx>
5838
5839         * Makefile: Change the name of the test target so that it doesn't
5840         conflict with the recursive test target.
5841
5842 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
5843
5844         * expression.cs (LocalVariableReference.Emit, EmitAssign,
5845         AddressOf): Do not use EmitThis, that was wrong, use the actual
5846         this pointer.
5847
5848 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
5849
5850         * class.cs (MethodData.Define): While checking if a method is an
5851         interface implementation, improve the test: If we are not public
5852         (use new test here: use the computed MethodAttributes directly,
5853         instead of the parsed modifier flags) check if the `implementing'
5854         method comes from an interface or not.
5855
5856         * pending.cs (VerifyPendingMethods): Slightly better error
5857         message.
5858
5859         * makefile: add test target that does the mcs bootstrap.
5860
5861 2003-07-16  Ravi Pratap  <ravi@ximian.com>
5862
5863         * interface.cs (Define): Do nothing here since there are no
5864         members to populate etc. Move the attribute emission out of here
5865         since this was just totally the wrong place to put it. Attribute
5866         application happens during the 'Emit' phase, not in the 'Define'
5867         phase.
5868
5869         (Emit): Add this method and move the attribute emission here
5870
5871         * rootcontext.cs (EmitCode): Call the Emit method on interface
5872         types too.
5873
5874 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
5875
5876         * expression.cs (OverloadResolve): Report error only if Location
5877         is not 'Null' which means that there was a probe going on.
5878
5879 2003-07-14  Martin Baulig  <martin@ximian.com>
5880
5881         * expression.cs (ConditionalLogicalOperator): New public class to
5882         implement user defined conditional logical operators.
5883         This is section 14.11.2 in the spec and bug #40505.
5884
5885 2003-07-14  Martin Baulig  <martin@ximian.com>
5886
5887         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
5888
5889 2003-07-14  Martin Baulig  <martin@ximian.com>
5890
5891         * codegen.cs (EmitContext.InFixedInitializer): New public field.
5892
5893         * ecore.cs (IVariable.VerifyFixed): New interface method.
5894
5895         * expression.cs (Unary.ResolveOperator): When resolving the `&'
5896         operator, check whether the variable is actually fixed.  Fixes bug
5897         #36055.  Set a variable definitely assigned when taking its
5898         address as required by the spec.
5899
5900         * statement.cs (LocalInfo.IsFixed): New field.
5901         (LocalInfo.MakePinned): Set `IsFixed' to true.
5902
5903 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
5904
5905         * attribute.cs (Attribute.Resolve): While doing a Member lookup
5906         for .ctors, ensure that we only ask for members declared in the
5907         attribute type (BindingFlags.DeclaredOnly).
5908
5909         Fixes bug #43632.
5910
5911         * expression.cs (Error_WrongNumArguments): Report error 1501
5912         correctly the way CSC does.
5913
5914 2003-07-13  Martin Baulig  <martin@ximian.com>
5915
5916         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
5917         lookup on the fully qualified name, to make things like "X.X" work
5918         where "X.X" is a fully qualified type name, but we also have a
5919         namespace "X" in the using list.  Fixes #41975.
5920
5921 2003-07-13  Martin Baulig  <martin@ximian.com>
5922
5923         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
5924         function. If we're a CompoundAssign, we need to create an embedded
5925         CompoundAssign, not an embedded Assign.
5926         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
5927         Fixes #45854.
5928
5929 2003-07-13  Martin Baulig  <martin@ximian.com>
5930
5931         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
5932         work to fix bug #46088.
5933
5934 2003-07-13  Ravi Pratap <ravi@ximian.com>
5935
5936         * class.cs (Operator.Emit): Do not emit attributes here - it is
5937         taken care of by the Method class that we delegate too. This takes
5938         care of bug #45876.
5939
5940 2003-07-10  Martin Baulig  <martin@ximian.com>
5941
5942         * expression.cs (TypeOfVoid): New class.
5943         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
5944
5945 2003-07-10  Martin Baulig  <martin@ximian.com>
5946
5947         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
5948         bug #35957.
5949
5950 2003-07-10  Martin Baulig  <martin@ximian.com>
5951
5952         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
5953         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
5954
5955         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
5956
5957         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
5958
5959 2003-07-10  Martin Baulig  <martin@ximian.com>
5960
5961         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
5962         of decimal.  Fixes #42850.
5963
5964         NOTE: I also fixed the created byte blob, but this doesn't work on
5965         the MS runtime and csc never produces any byte blobs for decimal
5966         arrays.
5967
5968 2003-07-10  Martin Baulig  <martin@ximian.com>
5969
5970         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
5971         structs; fixes #32068.
5972         (Block.AddChildVariableNames): Fixed #44302.
5973
5974 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
5975
5976         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
5977
5978 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
5979
5980         * attribute.cs: And this test is onger needed.
5981
5982 2003-07-08  Martin Baulig  <martin@ximian.com>
5983
5984         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
5985         inaccessible types.  Fixes #36313.
5986
5987         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
5988
5989         * namespace.cs (NamespaceEntry): Create implicit entries for all
5990         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
5991         implicit entries for N1.N2 and N1.
5992
5993 2003-07-08  Martin Baulig  <martin@ximian.com>
5994
5995         Rewrote the handling of namespaces to fix a lot of the issues
5996         wrt. `using' aliases etc.
5997
5998         * namespace.cs (Namespace): Splitted this class into a
5999         per-assembly `Namespace' and a per-file `NamespaceEntry'.
6000
6001         * typemanager.cs (TypeManager.IsNamespace): Removed.
6002         (TypeManager.ComputeNamespaces): Only compute namespaces from
6003         loaded assemblies here, not the namespaces from the assembly we're
6004         currently compiling.
6005
6006 2003-07-08  Martin Baulig  <martin@ximian.com>
6007
6008         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
6009
6010 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
6011
6012         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
6013         already fixed it.  
6014
6015         I thought about the memory savings here, but LookupTypeReflection
6016         is used under already very constrained scenarios.  Compiling
6017         corlib or mcs only exposes one hit, so it would not really reduce
6018         any memory consumption.
6019
6020 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
6021
6022         * typemanager.cs: fixes bug #45889 by only adding public types from
6023         other assemblies to the list of known types.
6024
6025 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
6026
6027         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
6028         on the type we resolved.
6029
6030 2003-07-05  Martin Baulig  <martin@ximian.com>
6031
6032         * pending.cs (PendingImplementation.ParentImplements): Don't
6033         create the proxy if the parent is abstract.
6034
6035         * class.cs (TypeContainer.DefineIndexers): Process explicit
6036         interface implementations first.  Fixes #37714.
6037
6038 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
6039
6040         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
6041         defined recursively;  but since we modify the input parameters
6042         (left is set to `this' temporarily), we reset this value if the
6043         left_is_explicit is false, which gives the original semantics to
6044         the code.  
6045
6046         * literal.cs (NullPointer): new class used to represent a null
6047         literal in a pointer context.
6048
6049         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
6050         type is a pointer, use a NullPointer object instead of a
6051         NullLiteral.   Closes 43687
6052
6053         (ExplicitConversion): Convert pointer values using
6054         the conv opcode to the proper type.
6055
6056         * ecore.cs (New): change ValueTypeVariable property into a method,
6057         that returns whether the valuetype is suitable for being used.
6058
6059         * expression.cs (Binary.DoNumericPromotions): Only return if we
6060         the int constant was a valid uint, and we can return both left and
6061         right as uints.  If not, we continue processing, to trigger the
6062         type conversion.  This fixes 39018.
6063
6064         * statement.cs (Block.EmitMeta): During constant resolution, set
6065         the CurrentBlock property on the emitcontext, so that we resolve
6066         constants propertly.
6067
6068 2003-07-02  Martin Baulig  <martin@ximian.com>
6069
6070         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
6071         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
6072
6073         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
6074         than emitting it here.
6075
6076         * statement.cs: Fixed some more flow analysis bugs.
6077
6078 2003-07-02  Martin Baulig  <martin@ximian.com>
6079
6080         * class.cs (MethodData.Define): When implementing interface
6081         methods, set Final unless we're Virtual.
6082
6083         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
6084         check work for interface methods.
6085
6086 2003-07-01  Martin Baulig  <martin@ximian.com>
6087
6088         * ecore.cs (EmitContext.This): Replaced this property with a
6089         GetThis() method which takes a Location argument.  This ensures
6090         that we get the correct error location for a CS0188.
6091
6092 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
6093
6094         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
6095         ImplicitStandardConversion.
6096
6097         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
6098
6099 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
6100
6101         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
6102         optimization.
6103
6104 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
6105
6106         * class.cs (Constructor.Define): Turn off initlocals for unsafe
6107         constructors.
6108
6109         (MethodData.Define): Turn off initlocals for unsafe methods.
6110
6111 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
6112
6113         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
6114         complete;  Fixes #37521.
6115
6116         * delegate.cs: Use Modifiers.TypeAttr to compute the
6117         TypeAttributes, instead of rolling our own.  This makes the flags
6118         correct for the delegates.
6119
6120 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
6121
6122         * class.cs (Constructor.Define): Set the private flag for static
6123         constructors as well.
6124
6125         * cs-parser.jay (statement_expression): Set the return value to
6126         null, to avoid a crash when we catch an error.
6127
6128 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
6129
6130         * cs-parser.jay: Applied patch from Jackson that adds support for
6131         extern and unsafe modifiers to destructor declarations.
6132
6133         * expression.cs: Report error 21 if the user is trying to index a
6134         System.Array.
6135
6136         * driver.cs: Add an error message, suggested by the bug report.
6137
6138         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
6139         if we do not have a ": this ()" constructor initializer.  Fixes 45149
6140
6141 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
6142
6143         * namespace.cs: Add some information to reduce FAQs.
6144
6145 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
6146
6147         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
6148         underlying enumeration types.  Fixes #43915.
6149
6150         * expression.cs: Treat ushort/short as legal values to be used in
6151         bitwise operations.
6152
6153 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
6154
6155         * delegate.cs: transfer custom attributes for paramenters from
6156         the delegate declaration to Invoke and BeginInvoke.
6157
6158 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
6159
6160         * attribute.cs: handle custom marshalers and emit marshal info
6161         for fields, too.
6162
6163 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
6164
6165         * makefile.gnu: Added anonymous.cs to the compiler sources.
6166
6167 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
6168
6169         * iterators.cs: Change the name of the proxy class to include two
6170         underscores.
6171
6172         * cs-parser.jay: Update grammar to include anonymous methods.
6173
6174         * anonymous.cs: new file.
6175
6176 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
6177
6178         * class.cs (Field.Define): Add missing test for pointers and
6179         safety. 
6180
6181 2003-05-27  Ravi Pratap  <ravi@ximian.com>
6182
6183         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
6184         we use the stobj opcode.
6185
6186         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
6187         since it wasn't the correct fix. 
6188
6189         It still is puzzling that we are required to use stobj for IntPtr
6190         which seems to be a ValueType.
6191
6192 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
6193
6194         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
6195         during regular simple name resolution.   Now, the trick is that
6196         instead of returning for processing the simplename, we do a
6197         TypeManager.LookupType (ie, a rooted lookup as opposed to a
6198         contextual lookup type).   If a match is found, return that, if
6199         not, return for further composition.
6200
6201         This fixes long-standing 30485.
6202
6203         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
6204         using the address to initialize an object, do an Stobj instead of
6205         using the regular Stelem.
6206
6207         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
6208         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
6209         Because if we are a BaseIndexerAccess that value will be true.
6210         Fixes 43643.
6211
6212         * statement.cs (GotoCase.Resolve): Return after reporting an
6213         error, do not attempt to continue. 
6214
6215         * expression.cs (PointerArithmetic.Emit): If our operand is a
6216         long, convert our constants to match the operand before
6217         multiplying.  Convert to I type before adding.   Fixes 43670.
6218
6219 2003-05-14  Ravi Pratap  <ravi@ximian.com>
6220
6221         * enum.cs (ImplicitConversionExists) : Rename to
6222         ImplicitEnumConversionExists to remove ambiguity. 
6223
6224         * ecore.cs (NullCast): New type of cast expression class which
6225         basically is very similar to EmptyCast with the difference being
6226         it still is a constant since it is used only to cast a null to
6227         something else
6228         (eg. (string) null)
6229
6230         * convert.cs (ImplicitReferenceConversion): When casting a null
6231         literal, we return a NullCast.
6232
6233         * literal.cs (NullLiteralTyped): Remove - I don't see why this
6234         should be around anymore.
6235
6236         The renaming (reported was slightly wrong). Corrections:
6237
6238         ConvertImplicitStandard -> ImplicitConversionStandard
6239         ConvertExplicitStandard -> ExplicitConversionStandard
6240
6241         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
6242         before passing them in !
6243
6244         * convert.cs (ImplicitConversionStandard): When comparing for
6245         equal expr and target types, ensure that expr is not a
6246         NullLiteral.
6247
6248         In general, we must not be checking (expr_type ==
6249         target_type) in the top level conversion methods
6250         (ImplicitConversion, ExplicitConversion etc). This checking is
6251         done in the methods that they delegate to.
6252
6253 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
6254
6255         * convert.cs: Move Error_CannotConvertType,
6256         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
6257         ImplicitNumericConversion, ImplicitConversionExists,
6258         ImplicitUserConversionExists, StandardConversionExists,
6259         FindMostEncompassedType, FindMostSpecificSource,
6260         FindMostSpecificTarget, ImplicitUserConversion,
6261         ExplicitUserConversion, GetConversionOperators,
6262         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
6263         TryImplicitIntConversion, Error_CannotConvertImplicit,
6264         ConvertImplicitRequired, ConvertNumericExplicit,
6265         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
6266         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
6267         its own file.
6268
6269         Perform the following renames:
6270
6271         StandardConversionExists -> ImplicitStandardConversionExists
6272         ConvertImplicit -> ImplicitConversion
6273         ConvertImplicitStandard -> ImplicitStandardConversion
6274         TryImplicitIntConversion -> ImplicitIntConversion
6275         ConvertImplicitRequired -> ImplicitConversionRequired
6276         ConvertNumericExplicit -> ExplicitNumericConversion
6277         ConvertReferenceExplicit -> ExplicitReferenceConversion
6278         ConvertExplicit -> ExplicitConversion
6279         ConvertExplicitStandard -> ExplicitStandardConversion
6280
6281 2003-05-19  Martin Baulig  <martin@ximian.com>
6282
6283         * statement.cs (TypeInfo.StructInfo): Made this type protected.
6284         (TypeInfo): Added support for structs having structs as fields.
6285
6286         * ecore.cs (FieldExpr): Implement IVariable.
6287         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
6288         VariableInfo for the field.
6289
6290 2003-05-18  Martin Baulig  <martin@ximian.com>
6291
6292         * expression.cs (This.DoResolve): Report a CS0027 if we're
6293         emitting a field initializer.
6294
6295 2003-05-18  Martin Baulig  <martin@ximian.com>
6296
6297         * expression.cs (This.ResolveBase): New public function.
6298         (This.DoResolve): Check for CS0188.
6299
6300         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
6301         This.Resolve().
6302
6303         * ecore.cs (MethodGroupExpr.DoResolve): Set the
6304         `instance_expression' to null if we don't have any non-static
6305         methods.
6306
6307 2003-05-18  Martin Baulig  <martin@ximian.com>
6308
6309         Reworked the way how local variables and parameters are handled by
6310         the flow analysis code.
6311
6312         * statement.cs (TypeInfo, VariableMap): New public classes.
6313         (VariableInfo): New public class.  This is now responsible for
6314         checking whether a variable has been assigned.  It is used for
6315         parameters and local variables.
6316         (Block.EmitMeta): Take the InternalParameters as argument; compute
6317         the layout of the flow vectors here.
6318         (Block.LocalMap, Block.ParameterMap): New public properties.
6319         (FlowBranching): The .ctor doesn't get the InternalParameters
6320         anymore since Block.EmitMeta() now computes the layout of the flow
6321         vector.
6322         (MyStructInfo): This class is now known as `StructInfo' and nested
6323         in `TypeInfo'; we don't access this directly anymore.
6324
6325         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
6326         property and removed IsAssigned(), IsFieldAssigned(),
6327         SetAssigned() and SetFieldAssigned(); we now call them on the
6328         VariableInfo so we don't need to duplicate this code everywhere.
6329
6330         * expression.cs (ParameterReference): Added `Block block' argument
6331         to the .ctor.
6332         (LocalVariableReference, ParameterReference, This): The new
6333         VariableInfo class is now responsible for all the definite
6334         assignment stuff.
6335
6336         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
6337         IsParameterAssigned, SetParameterAssigned): Removed.
6338
6339 2003-05-18  Martin Baulig  <martin@ximian.com>
6340
6341         * typemanager.cs (InitCoreTypes): Try calling
6342         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
6343         the 3-args-version.  Corlib now also needs our `void_type'.
6344         (GetMethod): Added overloaded version which takes an optional
6345         `bool report_errors' to allow lookups of optional methods.
6346
6347 2003-05-12  Martin Baulig  <martin@ximian.com>
6348
6349         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
6350         only used for locals and not for parameters.
6351
6352 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
6353
6354         * support.cs (InternalParameters.ParameterType): Return the
6355         ExternalType of the parameter.
6356
6357         * parameter.cs (Parameter.ExternalType): drop the two arguments,
6358         they were unused.
6359
6360 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
6361
6362         * class.cs (MethodData.Define): Do not set the `newslot' on
6363         interface members, if they are also flagged as "override".
6364
6365         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
6366         better code for ++i and i++.  This only works for static fields
6367         and local variables.
6368
6369         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
6370         want to pull the DeclSpace out of the builder_to_declspace instead
6371         of the TypeBuilder (like in TypeContainer.FindMembers).
6372
6373         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
6374         instead of LookupTypeContainer.  Fixes the crash on .NET for
6375         looking up interface members.
6376
6377         * const.cs: Create our own emit context during the Definition
6378         stage, so that constants are evaluated in the proper context, when
6379         a recursive definition happens.
6380
6381 2003-05-11  Martin Baulig  <martin@ximian.com>
6382
6383         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
6384         new block for a switch section.
6385         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
6386         the adding/lookup in the switch block.  Fixes #39828.
6387
6388 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
6389
6390         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
6391         functionality: I needed to convert the data after I had performed
6392         the add/sub operation into the operands type size.
6393
6394         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
6395         pass the type for the box operation, otherwise the resulting
6396         object would have been of type object.
6397
6398         (BoxedCast): Add constructor to specify the type to box as.
6399
6400 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
6401
6402         * iterators.cs: I was reusing the `count' variable inadvertently,
6403         take steps to not allow this to happen.
6404
6405 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
6406
6407         * attribute.cs (Attribute.Resolve): Params attributes are encoded
6408         by creating an array at the point where the params starts and
6409         putting all those arguments there, then adjusting the size of the
6410         array.
6411
6412 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
6413
6414         * expression.cs (New.AddressOf): Implement interface
6415         IMemoryLocation.  This is used when the `new' operator is used in
6416         the context of an invocation to a method on a value type.
6417
6418         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
6419         example. 
6420
6421         * namespace.cs: Also check the using aliases here.
6422
6423         * driver.cs: Move the test for using validity after the types have
6424         been entered, so we do a single pass that also includes the using
6425         aliases. 
6426
6427         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
6428         in the regular case.   CreateSiblingForFinally is doing extra
6429         error checking.
6430
6431         * attribute.cs (GetAttributeArgumentExpression): Store the result
6432         on an out value, and use the return value to indicate failure
6433         instead of using null (which is a valid return for Constant.GetValue).
6434
6435         * statement.cs: Perform the analysis flow for the increment
6436         portion after the statement, because this will be the real flow of
6437         execution.  Fixes #42385
6438
6439         * codegen.cs (EmitContext.EmitArgument,
6440         EmitContext.EmitStoreArgument): New helper functions when the
6441         RemapToProxy flag is set.
6442
6443         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
6444         function.
6445
6446         Add support for remapping parameters. 
6447
6448         * iterators.cs: Propagate parameter values;  Store parameter
6449         values in the proxy classes.
6450
6451 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
6452
6453         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
6454         need a proxy reference;  I do not know what I was thinking
6455
6456         * cs-parser.jay (constructor_initializer): catch another error,
6457         and display nice message.
6458
6459         (field_declaration): catch void field declaration
6460         to flag a better error. 
6461
6462         * class.cs (MemberBase.CheckBase): Report an error instead of a
6463         warning if a new protected member is declared in a struct. 
6464         (Field.Define): catch the error of readonly/volatile.
6465
6466         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
6467
6468         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
6469         volatile variable is taken
6470
6471 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
6472
6473         * statement.cs (Fixed.Resolve): Report an error if we are not in
6474         an unsafe context.
6475
6476 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
6477
6478         * typemanager.cs: reuse the code that handles type clashes for
6479         delegates and enumerations.
6480
6481         * class.cs (Report28): Always report.
6482
6483         * expression.cs (EncodeAsAttribute): Allow nulls here.
6484
6485 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
6486
6487         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
6488         the functionality for testing whether an expression is valid for
6489         an attribute here.  Also handle the case of arrays of elements
6490         being stored. 
6491
6492         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
6493         encoding a linear array into an array of objects that are suitable
6494         to be passed to an CustomAttributeBuilder.
6495
6496         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
6497
6498         * ecore.cs: (FieldExpr): Handle field remapping here.
6499
6500         * iteratators.cs: Pass the instance variable (if the method is an
6501         instance method) to the constructors, so we can access the field
6502         variables on the class.
6503
6504         TODO: Test this with structs.  I think the THIS variable on
6505         structs might have to be a pointer, and not a refenrece
6506
6507 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
6508
6509         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
6510         local variables to fields in a proxy class.
6511
6512         * iterators.cs (PopulateProxy): Rename our internal fields to
6513         <XXX>.  
6514         Create a <THIS> field if we are an instance method, so we can
6515         reference our parent container variables.
6516         (MapVariable): Called back from the EmitContext code to enter a
6517         new variable to field mapping into the proxy class (we just create
6518         a FieldBuilder).
6519
6520         * expression.cs
6521         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
6522         for using the remapped locals to fields.
6523
6524         I placed the code here, because that gives the same semantics to
6525         local variables, and only changes the Emit code.
6526
6527         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
6528         statements inside iterators.
6529         (VariableInfo): Add a FieldBuilder for the cases when we are
6530         remapping local variables to fields in a proxy class
6531
6532         * ecore.cs (SimpleNameResolve): Avoid testing two times for
6533         current_block != null.
6534
6535         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
6536         not cope with strings, as it has been moved to the
6537         TableSwitchEmit.  Fixed bug in switch generation.
6538
6539         * expression.cs (New.DoResolve): Provide more context for the user
6540         when reporting an error.
6541
6542         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
6543         pointers. 
6544
6545         * expression.cs (MemberAccess.DoResolve): When we get a type back,
6546         check the permissions for it.  Note than in a type-resolution
6547         context the check was already present in DeclSpace.ResolveType,
6548         but was missing from the MemberAccess.
6549
6550         (ArrayCreation.CheckIndices): warn if the user has
6551         more nested levels of expressions, but there are no more
6552         dimensions specified.  Avoids crash on bug 41906.
6553
6554 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
6555
6556         * statement.cs (Block): replace Implicit bool, for a generic
6557         flags.   
6558         New flag: `Unchecked'.  This is used during the EmitMeta phase
6559         (which is out-of-line with the regular Resolve/Emit process for a
6560         statement, as this is done ahead of time, but still gets a chance
6561         to call constant resolve).
6562
6563         (Block.Flags): new enum for adding a new flag.
6564
6565         (Block.EmitMeta): track the state of unchecked.
6566
6567         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
6568         to enable constant resolution to work there as well.
6569
6570 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
6571
6572         * typemanager.cs (ienumerable_type): Also look up
6573         System.Collections.IEnumerable. 
6574
6575 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
6576
6577         TODO: Test more than one conditional per method.
6578
6579         * class.cs (Indexer.Define): Report the location where the user is
6580         referencing the unsupported feature.
6581
6582         (MethodData): Overload the use of `conditionals' to
6583         minimize the creation of needless ArrayLists.   This saves roughly
6584         212kb on my machine.
6585
6586         (Method): Implement the new IIteratorContainer interface.
6587         (Method.SetYields): Implement the method by setting the ModFlags
6588         to contain METHOD_YIELDS.
6589
6590         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
6591         which just got set to null.
6592
6593         * iterators.cs: New file.
6594
6595         (Yield, YieldBreak): New statements.
6596
6597         * statement.cs (Return.Resolve): Flag an error if we are used in
6598         an iterator method.
6599
6600         * codegen.cs (InIterator): New flag set if the code is being
6601         compiled in an iterator method.
6602
6603         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
6604         internal modifier, and we just use it to avoid adding extra
6605         fields, as this is seldom used.  
6606
6607         * cs-parser.jay: Add yield_statement (yield and yield break).
6608
6609         * driver.cs: New flag -v2 to turn on version 2 features. 
6610
6611         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
6612         hashtable when v2 is enabled.
6613
6614 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
6615
6616         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
6617         there is already a namespace defined with this name.
6618
6619         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
6620         people upgraded their corlibs.
6621
6622         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
6623         always use fully qualified types, no need to use the compiler
6624         front end.
6625
6626         (TypeManager.IsNamespace): Use binarysearch.
6627
6628         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
6629         AddDelegate): I did not quite use the new IsValid API properly: I
6630         have to pass the short-name and the fullname.  I was passing only
6631         the basename instead of the fullname sometimes. 
6632
6633         (TypeContainer.DefineType): call NamespaceClash.
6634
6635         * interface.cs (Interface.DefineType): use NamespaceClash before
6636         defining the type.
6637
6638         * delegate.cs (Delegate.DefineType): use NamespaceClash before
6639         defining the type.
6640
6641         * enum.cs: (Enum.DefineType): use NamespaceClash before
6642         defining the type.
6643
6644         * typemanager.cs (: 3-line patch that gives us some tasty 11%
6645         speed increase.  First, use the negative_hits cache when we get a
6646         negative.  Second, add the type with its full original name
6647         instead of the new . and + encoded name (reflection uses + to
6648         separate type from a nested type).  Use LookupTypeReflection
6649         directly which bypasses the type->name hashtable (that we already
6650         know does not contain the type.
6651
6652         * decl.cs (DeclSpace.ResolveTypeExpr): track the
6653         location/container type. 
6654
6655         * driver.cs: When passing utf8, use directly the UTF8Encoding.
6656
6657 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
6658
6659         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
6660
6661         * delegate.cs (NewDelegate.Resolve): Test whether an instance
6662         method is being referenced in the method group from a static
6663         context, and report error 120 if so.
6664
6665         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
6666         Error118. 
6667
6668         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
6669         is created, we create the A namespace).
6670
6671         * cs-parser.jay: A namespace also introduces a DeclarationFound.
6672         Fixes #41591
6673
6674 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
6675
6676         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
6677         invocation to ModuleBuilder.GetType with the same values will
6678         return a new type instance, so we need to cache its return
6679         values. 
6680
6681         * expression.cs (Binary.ResolveOperator): Only allow the compare
6682         operators on enums if they are of the same type.
6683
6684         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
6685         types of ValueType on their own case.  Before we were giving them
6686         the same treatment as objects.
6687
6688         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
6689         fullname.  Short name is used to compare against container name.
6690         Fullname is used to check against defined namespace names.
6691
6692         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
6693         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
6694
6695         (Method.CheckBase): Call parent.
6696         (MemberBase.CheckBase): Check for protected members on sealed
6697         classes.
6698         (PropertyBase.CheckBase): Call parent.
6699         (Field.Define): Call parent.
6700
6701         * report.cs: Negative error codes are now mapped to 8000 - code,
6702         so that the display is render more nicely.
6703
6704         * typemanager.cs: Do not use try/catch, instead report a regular
6705         error. 
6706
6707         (GetPointerType, GetReferenceType): These methods provide
6708         mechanisms to obtain the T* and T& from a T.  We had the code
6709         previously scattered around the code base, and it also used
6710         TypeManager.LookupType that would go through plenty of caches.
6711         This one goes directly to the type source.
6712
6713         In some places we did the Type.GetType followed by
6714         ModuleBuilder.GetType, but not in others, so this unifies the
6715         processing as well.
6716
6717         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
6718         statements now that we have namespace information.
6719
6720         * typemanager.cs (IsNamespace): New method, returns whether the
6721         string presented is a namespace or not.
6722
6723         (ComputeNamespaces): New public entry point, computes the list of
6724         available namespaces, using the GetNamespaces API call in Mono, or
6725         the slower version in MS.NET.   
6726
6727         Now before we start the semantic analysis phase, we have a
6728         complete list of namespaces including everything that the user has
6729         provided.
6730
6731         Deleted old code to cache namespaces in .nsc files.
6732
6733 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
6734
6735         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
6736         class/struct location definition Location for the implicit
6737         constructor location.
6738
6739         (Operator.Define): Use the location of the operator for the
6740         implicit Method definition.
6741
6742         (Constructor.Emit): use the constructor location for the implicit
6743         base initializer constructor.
6744
6745         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
6746         and the Expression class now contains two new methods:
6747
6748         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
6749         isolate type lookup from the rest of the resolution process.
6750
6751         Since we use Expressions to hold type definitions due to the way
6752         we parse the input we have historically overloaded Resolve to
6753         perform the Type lookups if a special flag is passed.  Now this is
6754         eliminated and two methods take their place. 
6755
6756         The differences in the two methods between xStep and xTerminal is
6757         that xStep is involved in our current lookup system that uses
6758         SimpleNames to compose a name, while xTerminal is used just to
6759         catch the case where the simplename lookup failed.
6760
6761 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
6762
6763         * expression.cs (ResolveMemberAccess): Remove redundant code.
6764         TypeExpr expressions are always born fully resolved.
6765
6766         * interface.cs (PopulateMethod): Do not lookup the types twice.
6767         We were doing it once during SemanticAnalysis and once during
6768         PopulateMethod.
6769
6770         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
6771         in local variable type definitions, were being returned as a
6772         SimpleName (we decomposed everything into a string), that is
6773         because primary_expression was being used instead of a type in the
6774         grammar (reduce/reduce conflicts).
6775
6776         The part that was wrong is that we converted the expression into a
6777         string (an oversimplification in one hand, compounded with primary
6778         expressions doing string concatenation).
6779
6780         So things like:
6781
6782         A.B.C [] x;
6783
6784         Would return "A.B.C[]" as a SimpleName.  This stopped things like
6785         using clauses from working on this particular context.  And a type
6786         was being matched directly against "A.B.C[]".
6787
6788         We now use the correct approach, and allow for ComposedCast to be
6789         part of the unary expression.  So the "A.B.C []" become a composed
6790         cast of "A.B.C" (as a nested group of MemberAccess with a
6791         SimpleName at the end) plus the rank composition "[]". 
6792
6793         Also fixes 35567
6794
6795 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
6796
6797         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
6798         for the access level checking.
6799
6800         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
6801         `TypeContainer container', because I kept getting confused when I
6802         was debugging this code.
6803
6804         * expression.cs (Indexers): Instead of tracking getters/setters,
6805         we now track them in parallel.  We create one arraylist less, but
6806         most importantly it is possible now for the LValue code to find a
6807         matching get for a set.
6808
6809         (IndexerAccess.DoResolveLValue): Update the code.
6810         GetIndexersForType has been modified already to extract all the
6811         indexers from a type.  The code assumed it did not.
6812
6813         Also make the code set the correct return type for the indexer.
6814         This was fixed a long time ago for properties, but was missing for
6815         indexers.  It used to be void_type.
6816
6817         (Binary.Emit): Test first for doubles instead of
6818         floats, as they are more common.
6819
6820         (Binary.EmitBranchable): Use the .un version of the branch opcodes
6821         when dealing with floats and the <=, >= operators.  This fixes bug
6822         #39314 
6823
6824         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
6825         to load the array value by emitting a load on the foreach variable
6826         type.  This was incorrect.  
6827
6828         We now emit the code to load an element using the the array
6829         variable type, and then we emit the conversion operator.
6830
6831         Fixed #40176
6832
6833 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
6834
6835         * attribute.cs: Avoid allocation of ArrayLists in the common case.
6836
6837 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
6838
6839         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
6840         test for protection before we test for signatures. 
6841
6842         (MethodSignature.ToString): implement.
6843
6844         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
6845         to the case where we reduced into a LongConstant.
6846
6847         * decl.cs (CheckAccessLevel): If the type is an array, we can not
6848         depend on whether the information is acurrate, because the
6849         Microsoft runtime will always claim that the array type is public,
6850         regardless of the real state.
6851
6852         If the type is a pointer, another problem happens: the type is
6853         reported as non-public in Microsoft.  
6854
6855         In both cases we have to call CheckAccessLevel recursively with
6856         the underlying type as the argument to be tested.
6857
6858 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
6859
6860         * assign.cs (Assign.Emit): If we are dealing with a compound
6861         assignment expression, we should use the code path that stores the
6862         intermediate result in a temporary value.  This fixes #40903.
6863
6864         *expression.cs (Indirection.ToString): Provide ToString method for
6865         debugging. 
6866
6867 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
6868
6869         * class.cs: Null out fields holding references to Block objects so
6870         they can be garbage collected.
6871
6872         * expression.cs (OverloadResolve): Remove unused local.
6873
6874 2003-04-07  Martin Baulig  <martin@ximian.com>
6875
6876         * codegen.cs (EmitContext.CurrentFile): New public field.
6877         (EmitContext.Mark): Use the CurrentFile to check whether the
6878         location is in the correct file.
6879         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
6880
6881 2003-04-07  Martin Baulig  <martin@ximian.com>
6882
6883         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
6884
6885         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
6886         location.  [FIXME: The location argument which gets passed to this
6887         method is sometimes wrong!]
6888
6889 2003-04-07  Nick Drochak <ndrochak@gol.com>
6890
6891         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
6892
6893 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
6894
6895         * expression.cs (Indirection.EmitAssign): We were using the
6896         temporary, but returning immediately instead of continuing the
6897         EmitAssing flow.
6898
6899 2003-04-06  Martin Baulig  <martin@ximian.com>
6900
6901         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
6902         if it's a nested child, but also deriving from the outer class.
6903         See test 190.cs.
6904
6905         * typemanager.cs (IsNestedChildOf): Make this work if it's a
6906         nested child, but also deriving from the outer class.  See
6907         test-190.cs.
6908         (FilterWithClosure): We may access private members of the outer
6909         class if we're a nested child and deriving from the outer class.
6910         (RealMemberLookup): Only set `closure_private_ok' if the
6911         `original_bf' contained BindingFlags.NonPublic.
6912
6913 2003-04-05  Martin Baulig  <martin@ximian.com>
6914
6915         * expression.cs (SizeOf.DoResolve): Use ResolveTypeExpr, so we can
6916         probe if its a type parameter, and if so, flag an error.
6917
6918         * decl.cs: Move here the SetParameterInfo code from class.cs.
6919         Handle IsGeneric here.
6920
6921         Handle a variety of errors in the parameter info definition.
6922
6923         * ecore.cs (SimpleName.DoResolveType): Handle look ups for generic
6924         type parameters here.
6925
6926         * cs-parser.jay (class_declaration): report errors for parameters
6927         here as well.
6928
6929 2003-01-21  Miguel de Icaza  <miguel@ximian.com>
6930
6931         * generic.cs: New file, contains support code for generics.
6932
6933         * cs-parser.jay: Remove OP_SHIFT_LEFT, OP_SHIFT_RIGHT,
6934         OP_SHIFT_LEFT_ASSIGN, OP_SHIFT_RIGHT_ASSIGN.
6935
6936         Update parser for the above removals.
6937
6938         * cs-tokenizer.cs: Do not handle <<= or >>= specially.  This is
6939         now taken care of in the parser.
6940
6941 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
6942
6943         * class.cs (Event.Define): Do not allow abstract events to have
6944         initializers. 
6945
6946 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
6947
6948         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
6949         block in event declarations.
6950
6951         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
6952         value type, get its address.
6953
6954         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
6955         leaving a class on the stack instead of a boolean value (int
6956         0/1).  Change the code so we compare against null, and then the
6957         result against zero.
6958
6959         * class.cs (TypeContainer.GetClassBases): We were checking for the
6960         parent class being sealed too late.
6961
6962         * expression.cs (Binary.Emit): For <= and >= when dealing with
6963         floating point values, use cgt.un and clt.un instead of cgt and
6964         clt alone.
6965
6966 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
6967
6968         * statement.cs: Apply the same optimization as MS: skip the 
6969         GetEnumerator returning an IEnumerator, and use the one returning a 
6970         CharEnumerator instead. This allows us to avoid the try-finally block 
6971         and the boxing.
6972
6973 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
6974
6975         * cs-parser.jay: Attributes cannot be applied to
6976                          namespaces. Fixes #40473
6977
6978 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
6979
6980         * class.cs:
6981         (Add*): check if the name is valid using the full name for constants,
6982         fields, properties and events.
6983
6984 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
6985
6986         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
6987         char constants to be part of the enumeration.
6988
6989         * expression.cs (Conditional.DoResolve): Add support for operator
6990         true. Implements the missing functionality from 14.12
6991
6992         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
6993         operator true/false as required by the spec.
6994
6995         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
6996         implicit conversion to boolean.
6997
6998         * statement.cs (Statement.ResolveBoolean): A boolean expression is
6999         also one where the type implements `operator true'. 
7000
7001         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
7002         get an expression that will invoke operator true based on an
7003         expression.  
7004
7005         (GetConversionOperators): Removed the hack that called op_True
7006         here.  
7007
7008         (Expression.ResolveBoolean): Move this from Statement.
7009
7010 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
7011
7012         * ecore.cs (FieldExpr): do not allow initialization of initonly
7013         fields on derived classes
7014
7015 2003-03-13  Martin Baulig  <martin@ximian.com>
7016
7017         * statement.cs (Block.Emit): Call ig.BeginScope() and
7018         ig.EndScope() when compiling with debugging info; call
7019         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
7020
7021 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
7022
7023         * expression.cs (Indexers): Do not construct immediately, allow
7024         for new members to be appended as we go.  Fixes 38143
7025
7026 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7027
7028         * expression.cs: save/restore context when resolving an unchecked
7029         expression.
7030
7031 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
7032
7033         * cfold.cs: Catch division by zero in modulus operator during
7034         constant folding.
7035
7036 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
7037
7038         * interface.cs (Interface.DefineMembers): Avoid defining members
7039         twice. 
7040
7041 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
7042
7043         * driver.cs: handle the +/- options for -noconfig
7044
7045         * statement.cs (Unckeched.Resolve): Also track the state of
7046         unchecked in the Resolve phase.
7047
7048 2003-02-27  Martin Baulig  <martin@ximian.com>
7049
7050         * ecore.cs (Expression.MemberLookup): Don't create a
7051         MethodGroupExpr for something which is not a method.  Fixes #38291.
7052
7053 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
7054
7055         * class.cs (MemberBase.CheckParameters): Also check that the type
7056         is unmanaged if it is a pointer.
7057
7058         * expression.cs (SizeOf.Resolve): Add location information.
7059
7060         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
7061         a managed type is declared.
7062
7063         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
7064         parameter modifiers as well.  Fixes bug 38606
7065
7066         * class.cs: Very sad.  Am backing out the speed up changes
7067         introduced by the ArrayList -> Array in the TypeContainer, as they
7068         were not actually that much faster, and introduced a bug (no error
7069         reports on duplicated methods).
7070
7071         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
7072         source first, this will guarantee that we have a valid expression
7073         before calling in lower levels functions that will require a
7074         resolved object.  Then use this original_source in the
7075         target.ResolveLValue instead of the original source that was
7076         passed to us.
7077
7078         Another change.  Use target.Resolve instead of LValueResolve.
7079         Although we are resolving for LValues, we will let the Assign code
7080         take care of that (it will be called again from Resolve).  This
7081         basically allows code like this:
7082
7083         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
7084         class Y { void A (X x) { x [0] += o; }
7085
7086         The problem was that the indexer was trying to resolve for
7087         set_Item (idx, object o) and never finding one.  The real set_Item
7088         was set_Item (idx, X).  By delaying the process we get the right
7089         semantics. 
7090
7091         Fixes bug 36505
7092
7093 2003-02-23  Martin Baulig  <martin@ximian.com>
7094
7095         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
7096         while calling DoEmit ().
7097
7098         * codegen.cs (EmitContext.Mark): Don't mark locations in other
7099         source files; if you use the #line directive inside a method, the
7100         compiler stops emitting line numbers for the debugger until it
7101         reaches the end of the method or another #line directive which
7102         restores the original file.
7103
7104 2003-02-23  Martin Baulig  <martin@ximian.com>
7105
7106         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
7107
7108 2003-02-23  Martin Baulig  <martin@ximian.com>
7109
7110         * statement.cs (Block.AddChildVariableNames): We need to call this
7111         recursively, not just for our immediate children.
7112
7113 2003-02-23  Martin Baulig  <martin@ximian.com>
7114
7115         * class.cs (Event.Define): Always make the field private, like csc does.
7116
7117         * typemanager.cs (TypeManager.RealMemberLookup): Make events
7118         actually work, fixes bug #37521.
7119
7120 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
7121
7122         * delegate.cs: When creating the various temporary "Parameters"
7123         classes, make sure that we call the ComputeAndDefineParameterTypes
7124         on those new parameters (just like we do with the formal ones), to
7125         allow them to be resolved in the context of the DeclSpace.
7126
7127         This fixes the bug that Dick observed in Bugzilla #38530.
7128
7129 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
7130
7131         * expression.cs (ResolveMemberAccess): When resolving a constant,
7132         do not attempt to pull a constant if the value was not able to
7133         generate a valid constant.
7134
7135         * const.cs (LookupConstantValue): Do not report more errors than required.
7136
7137 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7138
7139         * expression.cs: fixes bug #38328.
7140
7141 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
7142
7143         * class.cs: Changed all the various members that can be part of a
7144         class from being an ArrayList to be an Array of the right type.
7145         During the DefineType type_list, interface_list, delegate_list and
7146         enum_list are turned into types, interfaces, delegates and enums
7147         arrays.  
7148
7149         And during the member population, indexer_list, event_list,
7150         constant_list, field_list, instance_constructor_list, method_list,
7151         operator_list and property_list are turned into their real arrays.
7152
7153         Although we could probably perform this operation earlier, for
7154         good error reporting we need to keep the lists and remove the
7155         lists for longer than required.
7156
7157         This optimization was triggered by Paolo profiling the compiler
7158         speed on the output of `gen-sample-program.pl' perl script. 
7159
7160         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
7161         not crash in methods like MemberLookupFailed that use this field.  
7162
7163         This problem arises when the compiler fails to resolve a type
7164         during interface type definition for example.
7165
7166 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
7167
7168         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
7169         inherit from System.Object, so we have to stop at null, not only
7170         when reaching System.Object.
7171
7172 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
7173
7174         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
7175         DeclaredOnly because the parent indexer might have had a different
7176         name, but did not loop until the top of the hierarchy was reached.
7177
7178         The problem this one fixes is 35492: when a class implemented an
7179         indexer from an interface, we were getting the interface method
7180         (which was abstract) and we were flagging an error (can not invoke
7181         abstract method).
7182
7183         This also keeps bug 33089 functioning, and test-148 functioning.
7184
7185         * typemanager.cs (IsSpecialMethod): The correct way of figuring
7186         out if a method is special is to see if it is declared in a
7187         property or event, or whether it is one of the predefined operator
7188         names.   This should fix correctly #36804.
7189
7190 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
7191
7192         The goal here is to remove the dependency on EmptyCast.Peel ().
7193         Killing it completely.
7194
7195         The problem is that currently in a number of places where
7196         constants are expected, we have to "probe" for an EmptyCast, and
7197         Peel, which is not the correct thing to do, as this will be
7198         repetitive and will likely lead to errors. 
7199
7200         The idea is to remove any EmptyCasts that are used in casts that
7201         can be reduced to constants, so we only have to cope with
7202         constants. 
7203
7204         This bug hunt was triggered by Bug 37363 and the desire to remove
7205         the duplicate pattern where we were "peeling" emptycasts to check
7206         whether they were constants.  Now constants will always be
7207         constants.
7208
7209         * ecore.cs: Use an enumconstant here instead of wrapping with
7210         EmptyCast.  
7211
7212         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
7213         throwing me off.  By handling this we can get rid of a few hacks.
7214
7215         * statement.cs (Switch): Removed Peel() code.
7216
7217 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
7218
7219         * class.cs: Location information for error 508
7220
7221         * expression.cs (New.DoResolve): Add a guard against double
7222         resolution of an expression.  
7223
7224         The New DoResolve might be called twice when initializing field
7225         expressions (see EmitFieldInitializers, the call to
7226         GetInitializerExpression will perform a resolve on the expression,
7227         and later the assign will trigger another resolution
7228
7229         This leads to bugs (#37014)
7230
7231         * delegate.cs: The signature for EndInvoke should contain any ref
7232         or out parameters as well.  We were not doing this in the past. 
7233
7234         * class.cs (Field.Define): Do not overwrite the type definition
7235         inside the `volatile' group.  Turns out that volatile enumerations
7236         were changing the type here to perform a validity test, which
7237         broke conversions. 
7238
7239 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
7240
7241         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
7242         and structs, we do not want to load the instance variable
7243
7244         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
7245         enum_type has to be handled like an object reference (implicit
7246         conversions exists from this to object), but the regular IsClass
7247         and IsValueType tests will never return true for this one.
7248
7249         Also we use TypeManager.IsValueType instead of type.IsValueType,
7250         just for consistency with the rest of the code (this is only
7251         needed if we ever use the construct exposed by test-180.cs inside
7252         corlib, which we dont today).
7253
7254 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
7255
7256         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
7257         just InternalCall.
7258
7259 2003-02-09  Martin Baulig  <martin@ximian.com>
7260
7261         * namespace.cs (Namespace..ctor): Added SourceFile argument.
7262         (Namespace.DefineNamespaces): New static public method; this is
7263         called when we're compiling with debugging to add all namespaces
7264         to the symbol file.
7265
7266         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
7267         pass it to the Namespace's .ctor.
7268
7269         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
7270         and MethodBase arguments; pass the namespace ID to the symwriter;
7271         pass the MethodBase instead of the token to the symwriter.
7272         (SymbolWriter.DefineNamespace): New method to add a namespace to
7273         the symbol file.
7274
7275 2003-02-09  Martin Baulig  <martin@ximian.com>
7276
7277         * symbolwriter.cs: New file.  This is a wrapper around
7278         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
7279         methods here in near future.
7280
7281 2003-02-09  Martin Baulig  <martin@ximian.com>
7282
7283         * codegen.cs (EmitContext.Mark): Just pass the arguments to
7284         ILGenerator.MarkSequencePoint() which are actually used by the
7285         symbol writer.
7286
7287 2003-02-09  Martin Baulig  <martin@ximian.com>
7288
7289         * location.cs (SourceFile): New public sealed class.  This
7290         contains the name and an index which is used in the location's token.
7291         (Location): Reserve an appropriate number of bits in the token for
7292         the source file instead of walking over that list, this gives us a
7293         really huge performance improvement when compiling with debugging.
7294
7295         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
7296         `SourceFile' argument instead of a string.
7297         (Driver.ProcessFile): Add all the files via Location.AddFile(),
7298         but don't parse/tokenize here, we need to generate the list of all
7299         source files before we do that.
7300         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
7301         the files.
7302
7303         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
7304         instead of a string.
7305
7306         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
7307         of a string.
7308
7309 2003-02-09  Martin Baulig  <martin@ximian.com>
7310
7311         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
7312         filename on `#line default'.
7313
7314 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
7315
7316         * statement.cs: don't clear the pinned var when the fixed statement
7317         returns from the method (fixes bug#37752).
7318
7319 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
7320
7321         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
7322         to IsValueType.
7323
7324 2003-02-07  Martin Baulig  <martin@ximian.com>
7325
7326         * driver.cs: Removed the `--debug-args' command line argument.
7327
7328         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
7329         automatically by the AsssemblyBuilder.
7330         (CodeGen.InitializeSymbolWriter): We don't need to call any
7331         initialization function on the symbol writer anymore.  This method
7332         doesn't take any arguments.
7333
7334 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
7335
7336         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
7337         from referenced assemblies as well.
7338
7339 2003-02-02  Martin Baulig  <martin@ximian.com>
7340
7341         * class.cs (MethodData.Emit): Generate debugging info for external methods.
7342
7343 2003-02-02  Martin Baulig  <martin@ximian.com>
7344
7345         * class.cs (Constructor.Emit): Open the symbol writer before
7346         emitting the constructor initializer.
7347         (ConstructorInitializer.Emit): Call ec.Mark() to allow
7348         single-stepping through constructor initializers.
7349
7350 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
7351
7352         * class.cs: Handle error 549: do not allow virtual methods in
7353         sealed classes. 
7354
7355 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
7356
7357         * decl.cs: Check access levels when resolving types
7358
7359 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
7360
7361         * statement.cs: Add parameters and locals set in catch blocks that might 
7362         return to set vector
7363
7364 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
7365
7366         * class.cs (Operator): Set the SpecialName flags for operators.
7367
7368         * expression.cs (Invocation.DoResolve): Only block calls to
7369         accessors and operators on SpecialName methods.
7370
7371         (Cast.TryReduce): Handle conversions from char constants.
7372
7373
7374 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
7375
7376         * statement.cs: small memory and time optimization in FlowBranching.
7377
7378 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
7379
7380         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
7381         problem that the last fix but in the other sid (Set).
7382
7383         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
7384         access when there is no indexer in the hierarchy.
7385
7386 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
7387
7388         * class.cs: Combine some if statements.
7389
7390 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7391
7392         * driver.cs: fixed bug #37187.
7393
7394 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
7395
7396         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
7397         any indexer, it's needed to build a list with all the indexers in the
7398         hierarchy (AllGetters), else we have problems. Fixes #35653.
7399
7400 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
7401
7402         * class.cs (MethodData.Define): It is wrong for an interface
7403         implementation to be static in both cases: explicit and implicit.
7404         We were only handling this in one case.
7405
7406         Improve the if situation there to not have negations.
7407
7408         * class.cs (Field.Define): Turns out that we do not need to check
7409         the unsafe bit on field definition, only on usage.  Remove the test.
7410
7411 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7412
7413         * driver.cs: use assembly.Location instead of Codebase (the latest
7414         patch made mcs fail when using MS assemblies).
7415
7416 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
7417
7418         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
7419         get the path to *corlib.dll.
7420
7421 2003-01-21  Nick Drochak <ndrochak@gol.com>
7422
7423         * cs-tokenizer.cs:
7424         * pending.cs:
7425         * typemanager.cs: Remove compiler warnings
7426
7427 2003-01-20  Duncan Mak  <duncan@ximian.com>
7428
7429         * AssemblyInfo.cs: Bump the version number to 0.19.
7430
7431 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7432
7433         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
7434
7435 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
7436
7437         * class.cs (Constructor::Emit): Emit debugging info for constructors.
7438
7439 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
7440
7441         * cs-parser.jay: Small fix: we were not comparing the constructor
7442         name correctly.   Thanks to Zoltan for the initial pointer.
7443
7444 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
7445
7446         * cs-tokenizer.cs: Set file name when specified with #line
7447
7448 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
7449
7450         * cs-parser.jay: Only perform the constructor checks here if we
7451         are named like the class;  This will help provider a better
7452         error.  The constructor path is taken when a type definition is
7453         not found, but most likely the user forgot to add the type, so
7454         report that rather than the constructor error.
7455
7456 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
7457
7458         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
7459         allocations.
7460
7461 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
7462
7463         * cs-parser.jay: Add cleanup call.
7464
7465 2003-01-13  Duncan Mak  <duncan@ximian.com>
7466
7467         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
7468         consistent with other methods.
7469
7470 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
7471
7472         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
7473
7474 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
7475
7476         * attribute.cs: only set GuidAttr to true when we have a
7477         GuidAttribute.
7478
7479 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7480
7481         * ecore.cs:
7482         * expression.cs:
7483         * typemanager.cs: fixes to allow mcs compile corlib with the new
7484         Type.IsSubclassOf fix.
7485
7486 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
7487
7488         * expression.cs (LocalVariableReference.DoResolve): Classify a
7489         constant as a value, not as a variable.   Also, set the type for
7490         the variable.
7491
7492         * cs-parser.jay (fixed_statement): take a type instead of a
7493         pointer_type, so we can produce a better error message later.
7494
7495         * statement.cs (Fixed.Resolve): Flag types that are not pointers
7496         as an error.  
7497
7498         (For.DoEmit): Make inifinite loops have a
7499         non-conditional branch back.
7500
7501         (Fixed.DoEmit): First populate the pinned variables, then emit the
7502         statement, then clear the variables.  Before I was emitting the
7503         code once for each fixed piece.
7504
7505
7506 2003-01-08  Martin Baulig  <martin@ximian.com>
7507
7508         * statement.cs (FlowBranching.MergeChild): A break in a
7509         SWITCH_SECTION does not leave a loop.  Fixes #36155.
7510
7511 2003-01-08  Martin Baulig  <martin@ximian.com>
7512
7513         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
7514         lives in the same number space than `param_map'.  Fixes #36154.
7515
7516 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
7517
7518         * cs-parser.jay (constructor_declaration): Set the
7519         Constructor.ModFlags before probing for it.  This makes the
7520         compiler report 514, 515 and 132 (the code was there, but got
7521         broken). 
7522
7523         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
7524         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
7525         (GotoCase.Resolve): Set `Returns' to ALWAYS.
7526
7527 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
7528
7529         * enum.cs: create the enum static fields using the enum type.
7530
7531 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
7532
7533         * class.cs: don't try to create the ParamBuilder for the return
7534         type if it's not needed (and handle it breaking for the ms runtime
7535         anyway).
7536
7537 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
7538
7539         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
7540
7541 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
7542
7543         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
7544         the command.   This showed up while compiling the JANET source
7545         code, which used \r as its only newline separator.
7546
7547 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
7548
7549         * class.cs (Method.Define): If we are an operator (because it
7550         reuses our code), then set the SpecialName and HideBySig.  #36128
7551
7552 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
7553
7554         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
7555         exception, report error 120 `object reference required'.
7556
7557         * driver.cs: Add --pause option, used during to measure the size
7558         of the process as it goes with --timestamp.
7559
7560         * expression.cs (Invocation.DoResolve): Do not allow methods with
7561         SpecialName to be invoked.
7562
7563 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
7564
7565         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
7566         number before adding it.
7567
7568 2002-12-21  Ravi Pratap  <ravi@ximian.com>
7569
7570         * ecore.cs (StandardImplicitConversion): When in an unsafe
7571         context, we allow conversion between void * to any other pointer
7572         type. This fixes bug #35973.
7573
7574 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
7575
7576         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
7577         is not thrown when extensionless outputs are used 
7578
7579 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7580
7581         * rootcontext.cs: fixed compilation of corlib.
7582
7583 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
7584
7585         * attribute.cs (Attributes.Contains): Add new method.
7586
7587         * class.cs (MethodCore.LabelParameters): if the parameter is an
7588         `out' parameter, check that no attribute `[In]' has been passed.
7589
7590         * enum.cs: Handle the `value__' name in an enumeration.
7591
7592 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
7593
7594         * decl.cs: Added special case to allow overrides on "protected
7595         internal" methods
7596
7597 2002-12-18  Ravi Pratap  <ravi@ximian.com>
7598
7599         * attribute.cs (Attributes.AddAttributeSection): Rename to this
7600         since it makes much more sense.
7601
7602         (Attributes.ctor): Don't require a Location parameter.
7603
7604         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
7605
7606         * attribute.cs (ApplyAttributes): Remove extra Location parameters
7607         since we already have that information per attribute.
7608
7609         * everywhere : make appropriate changes.
7610
7611         * class.cs (LabelParameters): Write the code which actually
7612         applies attributes to the return type. We can't do this on the MS
7613         .NET runtime so we flag a warning in the case an exception is
7614         thrown.
7615
7616 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
7617
7618         * const.cs: Handle implicit null conversions here too.
7619
7620 2002-12-17  Ravi Pratap  <ravi@ximian.com>
7621
7622         * class.cs (MethodCore.LabelParameters): Remove the extra
7623         Type [] parameter since it is completely unnecessary. Instead
7624         pass in the method's attributes so that we can extract
7625         the "return" attribute.
7626
7627 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
7628
7629         * cs-parser.jay (parse): Use Report.Error to flag errors instead
7630         of ignoring it and letting the compile continue.
7631
7632         * typemanager.cs (ChangeType): use an extra argument to return an
7633         error condition instead of throwing an exception.
7634
7635 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
7636
7637         * expression.cs (Unary.TryReduce): mimic the code for the regular
7638         code path.  Perform an implicit cast in the cases where we can
7639         implicitly convert to one of the integral types, and then reduce
7640         based on that constant.   This fixes bug #35483.
7641
7642 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7643
7644         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
7645
7646 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7647
7648         * namespace.cs: fixed bug #35489.
7649
7650 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
7651
7652         * class.cs: Remove some dead code.
7653
7654         * cs-parser.jay: Estimate the number of methods needed
7655         (RootContext.MethodCount);
7656
7657         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
7658         numbers instead of StringBuilders.
7659
7660         * support.cs (PtrHashtable): Add constructor with initial size;
7661         We can now reduce reallocations of the method table.
7662
7663 2002-12-10  Ravi Pratap  <ravi@ximian.com>
7664
7665         * attribute.cs (ApplyAttributes): Keep track of the emitted
7666         attributes on a per-target basis. This fixes bug #35413.
7667
7668 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
7669
7670         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
7671         default to the Windows 1252 encoding.
7672
7673         (UnixParseOption): Support version, thanks to Alp for the missing
7674         pointer. 
7675
7676         * AssemblyInfo.cs: Add nice assembly information.
7677
7678         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
7679         (bug 35169).
7680
7681         * cs-parser.jay: Allow a trailing comma before the close bracked
7682         in the attribute_section production.
7683
7684         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
7685         address of the instance was being taken, I will take this out,
7686         because we take the address of the object immediately here.
7687
7688 2002-12-09  Ravi Pratap  <ravi@ximian.com>
7689
7690         * typemanager.cs (AreMultipleAllowed): Take care of the most
7691         obvious case where attribute type is not in the current assembly -
7692         stupid me ;-)
7693
7694 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
7695
7696         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
7697         definitions, instead of doing that afterwards.  
7698
7699         Also we use a nice little hack, depending on the constructor, we
7700         know if we are a "composed" name or a simple name.  Hence, we
7701         avoid the IndexOf test, and we avoid 
7702
7703         * codegen.cs: Add code to assist in a bug reporter to track down
7704         the source of a compiler crash. 
7705
7706 2002-12-07  Ravi Pratap  <ravi@ximian.com>
7707
7708         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
7709         types have been emitted for a given element and flag an error
7710         if something which does not have AllowMultiple set is used more
7711         than once.
7712
7713         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
7714         attribute types and their corresponding AllowMultiple properties
7715
7716         (AreMultipleAllowed): Check the property for a given type.
7717
7718         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
7719         property in the case we have a TypeContainer.
7720
7721         (Attributes.AddAttribute): Detect duplicates and just skip on
7722         adding them. This trivial fix catches a pretty gross error in our
7723         attribute emission - global attributes were being emitted twice!
7724
7725         Bugzilla bug #33187 is now fixed.
7726
7727 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
7728
7729         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
7730         instead of pp_and).
7731
7732         * expression.cs (Binary.ResolveOperator): I can only use the
7733         Concat (string, string, string) and Concat (string, string,
7734         string, string) if the child is actually a concatenation of
7735         strings. 
7736
7737 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
7738
7739         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
7740         context where we need a 2-character lookahead.
7741
7742         * pending.cs (PendingImplementation): Rework so we can keep track
7743         of interface types all the time, and flag those which were
7744         implemented by parents as optional.
7745
7746 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
7747
7748         * expression.cs (Binary.ResolveOperator): Use
7749         String.Concat(string,string,string) or
7750         String.Concat(string,string,string,string) when possible. 
7751
7752         * typemanager: More helper methods.
7753
7754
7755 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
7756
7757         * pending.cs: remove the bogus return from GetMissingInterfaces()
7758         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
7759
7760 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7761
7762         * namespace.cs: avoid duplicated 'using xxx' being added to
7763         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
7764         when we get more than one 'using' statement for the same namespace.
7765         Report a CS0105 warning for it.
7766
7767 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
7768
7769         * cs-tokenizer.cs (consume_identifier): use read directly, instead
7770         of calling getChar/putback, uses internal knowledge of it.    
7771
7772         (xtoken): Reorder tokenizer so most common patterns are checked
7773         first.  This reduces the compilation time in another 5% (from 8.11s
7774         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
7775
7776         The parsing time is 22% of the compilation in mcs, and from that
7777         64% is spent on the tokenization process.  
7778
7779         I tried using a binary search for keywords, but this is slower
7780         than the hashtable.  Another option would be to do a couple of
7781         things:
7782
7783                 * Not use a StringBuilder, instead use an array of chars,
7784                   with a set value.  Notice that this way we could catch
7785                   the 645 error without having to do it *afterwards*.
7786
7787                 * We could write a hand-parser to avoid the hashtable
7788                   compares altogether.
7789
7790         The identifier consumption process takes 37% of the tokenization
7791         time.  Another 15% is spent on is_number.  56% of the time spent
7792         on is_number is spent on Int64.Parse:
7793
7794                 * We could probably choose based on the string length to
7795                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
7796                   computations. 
7797
7798         Another 3% is spend on wrapping `xtoken' in the `token' function.
7799
7800         Handle 0xa0 as whitespace (#34752)
7801
7802 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
7803
7804         * typemanager.cs (IsCLRType): New routine to tell whether a type
7805         is one of the builtin types.  
7806
7807         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
7808         typecode in more places instead of doing pointer comparissions.
7809         We could leverage some knowledge about the way the typecodes are
7810         laid out.
7811
7812         New code to cache namespaces in assemblies, it is currently not
7813         invoked, to be used soon.
7814
7815         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
7816
7817         * expression.cs (Binary.ResolveOperator): specially handle
7818         strings, and do not perform user-defined operator overloading for
7819         built-in types.
7820
7821 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
7822
7823         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
7824         internalcall as it is a pretty simple operation;  Avoid whenever
7825         possible to call Char.IsLetter.
7826
7827         (consume_identifier): Cut by half the number of
7828         hashtable calls by merging the is_keyword and GetKeyword behavior.
7829
7830         Do not short-circuit, because if we do, we
7831         report errors (ie, #if false && true would produce an invalid
7832         directive error);
7833
7834
7835 2002-11-24  Martin Baulig  <martin@ximian.com>
7836
7837         * expression.cs (Cast.TryReduce): If we're in checked syntax,
7838         check constant ranges and report a CS0221.  Fixes #33186.
7839
7840 2002-11-24  Martin Baulig  <martin@ximian.com>
7841
7842         * cs-parser.jay: Make this work for uninitialized variable
7843         declarations in the `for' initializer.  Fixes #32416.
7844
7845 2002-11-24  Martin Baulig  <martin@ximian.com>
7846
7847         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
7848         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
7849
7850 2002-11-24  Martin Baulig  <martin@ximian.com>
7851
7852         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
7853         argument; if true, we also check for user-defined conversions.
7854         This is only needed if both arguments are of a user-defined type.
7855         Fixes #30443, added test-175.cs.
7856         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
7857
7858         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
7859
7860 2002-11-24  Martin Baulig  <martin@ximian.com>
7861
7862         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
7863         function to get the store opcode.
7864         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
7865         only emit the Ldelema if the store opcode is Stobj.  You must run
7866         both test-34 and test-167 to test this.  Fixes #34529.
7867
7868 2002-11-23  Martin Baulig  <martin@ximian.com>
7869
7870         * ecore.cs (Expression.MemberLookup): Added additional
7871         `qualifier_type' argument which is used when we're being called
7872         from MemberAccess.DoResolve() and null if we're called from a
7873         SimpleName lookup.
7874         (Expression.MemberLookupFailed): New method to report errors; this
7875         does the CS1540 check and reports the correct error message.
7876
7877         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
7878         argument for the CS1540 check and redone the way how we're dealing
7879         with private members.  See the comment in the source code for details.
7880         (FilterWithClosure): Reverted this back to revision 1.197; renamed
7881         `closure_start_type' to `closure_qualifier_type' and check whether
7882         it's not null.  It was not this filter being broken, it was just
7883         being called with the wrong arguments.
7884
7885         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
7886         and pass it the correct `qualifier_type'; this also does the error
7887         handling for us.
7888
7889 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
7890
7891         * expression.cs (Invocation.EmitParams): If the we are dealing
7892         with a non-built-in value type, load its address as well.
7893
7894         (ArrayCreation): Use a a pretty constant instead
7895         of the hardcoded value 2.   Use 6 instead of 2 for the number of
7896         static initializers.  
7897
7898         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
7899         because they are not really value types, just glorified integers. 
7900
7901         * driver.cs: Do not append .exe, the CSC compiler does not do it.
7902
7903         * ecore.cs: Remove redundant code for enumerations, make them use
7904         the same code path as everything else, fixes the casting issue
7905         with enumerations in Windows.Forms.
7906
7907         * attribute.cs: Do only cast to string if it is a string, the
7908         validation happens later.
7909
7910         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
7911         people upgrade their corlibs.
7912
7913         * ecore.cs: Oops, enumerations were not following the entire code path
7914
7915 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
7916
7917         * typemanager.cs (FilterWithClosure): Commented out the test for
7918         1540 in typemanager.cs, as it has problems when accessing
7919         protected methods from a parent class (see test-174.cs). 
7920
7921         * attribute.cs (Attribute.ValidateGuid): new method.
7922         (Attribute.Resolve): Use above.
7923
7924 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
7925
7926         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
7927
7928         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
7929         handling for enumerations, as we only needed the TypeContainer
7930         functionality to begin with (this is required for the fix below to
7931         work for enums that reference constants in a container class for
7932         example). 
7933
7934         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
7935
7936         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
7937         a valid TypeBuilder to perform lookups on.o
7938
7939         * class.cs (InheritableMemberSignatureCompare): Use true in the
7940         call to GetGetMethod and GetSetMethod, because we are comparing
7941         the signature, and we need to get the methods *even* if they are
7942         private. 
7943
7944         (PropertyBase.CheckBase): ditto.
7945
7946         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
7947         GotoCase.Resolve): Use Peel on EmpytCasts.
7948
7949         * ecore.cs (EmptyCast): drop child, add Peel method.
7950
7951 2002-11-17  Martin Baulig  <martin@ximian.com>
7952
7953         * ecore.cs (EmptyCast.Child): New public property.
7954
7955         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
7956         label resolved to an EmptyCast.  Fixes #34162.
7957         (GotoCase.Resolve): Likewise.
7958         (Block.EmitMeta): Likewise.
7959
7960 2002-11-17  Martin Baulig  <martin@ximian.com>
7961
7962         * expression.cs (Invocation.BetterConversion): Prefer int over
7963         uint; short over ushort; long over ulong for integer literals.
7964         Use ImplicitConversionExists instead of StandardConversionExists
7965         since we also need to check for user-defined implicit conversions.
7966         Fixes #34165.  Added test-173.cs.
7967
7968 2002-11-16  Martin Baulig  <martin@ximian.com>
7969
7970         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
7971         with the `true' and `false' literals.  Fixes #33151.
7972
7973 2002-11-16  Martin Baulig  <martin@ximian.com>
7974
7975         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
7976         October 22nd; don't do the cs1540 check for static members.
7977
7978         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
7979         now using our own filter here and doing the cs1540 check again.
7980
7981 2002-11-16  Martin Baulig  <martin@ximian.com>
7982
7983         * support.cs (InternalParameters): Don't crash if we don't have
7984         any fixed parameters.  Fixes #33532.
7985
7986 2002-11-16  Martin Baulig  <martin@ximian.com>
7987
7988         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
7989         when looking up static methods to make this work on Windows.
7990         Fixes #33773.
7991
7992 2002-11-16  Martin Baulig  <martin@ximian.com>
7993
7994         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
7995         a setter rather than using PropertyInfo.CanWrite.
7996
7997 2002-11-15  Nick Drochak  <ndrochak@gol.com>
7998
7999         * class.cs: Allow acces to block member by subclasses. Fixes build
8000         breaker.
8001
8002 2002-11-14  Martin Baulig  <martin@ximian.com>
8003
8004         * class.cs (Constructor.Emit): Added the extern/block check.
8005         Fixes bug #33678.
8006
8007 2002-11-14  Martin Baulig  <martin@ximian.com>
8008
8009         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
8010         iteration while looking for indexers, this is needed because the
8011         indexer may have a different name in our base classes.  Fixed the
8012         error reporting (no indexers at all, not get accessor, no
8013         overloaded match).  Fixes bug #33089.
8014         (IndexerAccess.DoResolveLValue): Likewise.
8015
8016 2002-11-14  Martin Baulig  <martin@ximian.com>
8017
8018         * class.cs (PropertyBase.CheckBase): Make this work for multiple
8019         indexers.  Fixes the first part of bug #33089.
8020         (MethodSignature.InheritableMemberSignatureCompare): Added support
8021         for properties.
8022
8023 2002-11-13  Ravi Pratap  <ravi@ximian.com>
8024
8025         * attribute.cs (Attribute.Resolve): Catch the
8026         NullReferenceException and report it since it isn't supposed to
8027         happen. 
8028
8029 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
8030
8031         * expression.cs (Binary.EmitBranchable): Also handle the cases for
8032         LogicalOr and LogicalAnd that can benefit from recursively
8033         handling EmitBranchable.  The code now should be nice for Paolo.
8034
8035 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
8036
8037         * typemanager.cs (LookupType): Added a negative-hit hashtable for
8038         the Type lookups, as we perform quite a number of lookups on
8039         non-Types.  This can be removed once we can deterministically tell
8040         whether we have a type or a namespace in advance.
8041
8042         But this might require special hacks from our corlib.
8043
8044         * TODO: updated.
8045
8046         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
8047         and double which avoids a conversion from an integer to a double.
8048
8049         * expression.cs: tiny optimization, avoid calling IsConstant,
8050         because it effectively performs the lookup twice.
8051
8052 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
8053
8054         But a bogus return here to keep the semantics of the old code
8055         until the Mono runtime is fixed.
8056
8057         * pending.cs (GetMissingInterfaces): New method used to remove all
8058         the interfaces that are already implemented by our parent
8059         classes from the list of pending methods. 
8060
8061         * interface.cs: Add checks for calls after ResolveTypeExpr.
8062
8063 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
8064
8065         * class.cs (Class.Emit): Report warning 67: event not used if the
8066         warning level is beyond 3.
8067
8068         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
8069         being a NullLiteral.
8070
8071         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
8072         specifiers. 
8073
8074         * class.cs (TypeContainer.GetClassBases): Cover a missing code
8075         path that might fail if a type can not be resolved.
8076
8077         * expression.cs (Binary.Emit): Emit unsigned versions of the
8078         operators. 
8079
8080         * driver.cs: use error 5.
8081
8082 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
8083
8084         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
8085
8086 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
8087
8088         * cs-parser.jay (switch_section): A beautiful patch from Martin
8089         Baulig that fixed 33094.
8090
8091 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
8092
8093         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
8094         Check whether the base is abstract and report an error if so.
8095
8096         * expression.cs (IndexerAccess.DoResolveLValue,
8097         IndexerAccess.DoResolve): ditto. 
8098
8099         (Invocation.DoResolve): ditto.
8100
8101         (Invocation.FullMethodDesc): Improve the report string.
8102
8103         * statement.cs (Block): Eliminate IsVariableDefined as it is
8104         basically just a wrapper for GetVariableInfo.
8105
8106         * ecore.cs (SimpleName): Use new 
8107
8108         * support.cs (ReflectionParamter.ParameterType): We unwrap the
8109         type, as we return the actual parameter ref/unref state on a
8110         different call.
8111
8112 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
8113
8114         * support.cs: Return proper flags REF/OUT fixing the previous
8115         commit.  
8116
8117         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
8118         not used to mean `ref' but `ref or out' in ParameterReference
8119
8120         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
8121         full type signature instead of calling TypeManger.CSharpName
8122         ourselves. 
8123
8124         * support.cs (InternalParameters.ParameterDesc): Do not compare
8125         directly to the modflags, because REF/OUT will actually be bitsets
8126         if set. 
8127
8128         * delegate.cs (VerifyMethod): Check also the modifiers.
8129
8130         * cs-tokenizer.cs: Fix bug where floating point values with an
8131         exponent where a sign was missing was ignored.
8132
8133         * driver.cs: Allow multiple assemblies to be specified in a single
8134         /r: argument
8135
8136 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
8137
8138         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
8139         because identifiers after a parenthesis would end up in this kind
8140         of production, and we needed to desamiguate it for having casts
8141         like:
8142
8143                 (UserDefinedType *) xxx
8144
8145 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
8146
8147         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
8148         we should set on the Bindingflags.NonPublic, but not turn on
8149         private_ok.  private_ok controls whether a Private member is
8150         returned (this is chekced on the filter routine), while the
8151         BindingFlags.NonPublic just controls whether private/protected
8152         will be allowed.   This fixes the problem part of the problem of
8153         private properties being allowed to be used in derived classes.
8154
8155         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
8156         so we can call the children DoResolveLValue method (this will
8157         properly signal errors on lvalue assignments to base properties)
8158
8159         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
8160         getter are null, and we have a property info, we know that this
8161         happened because the lookup failed, so we report an error 122 for
8162         protection level violation.
8163
8164         We also silently return if setter and getter are null in the
8165         resolve functions, this condition only happens if we have flagged
8166         the error before.  This is the other half of the problem. 
8167
8168         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
8169         not have accessibility information, that is why we were returning
8170         true in the filter function in typemanager.cs.
8171
8172         To properly report 122 (property is inaccessible because of its
8173         protection level) correctly, we report this error in ResolveAccess
8174         by failing if both the setter and the getter are lacking (ie, the
8175         lookup failed). 
8176
8177         DoResolve and DoLResolve have been modified to check for both
8178         setter/getter being null and returning silently, the reason being
8179         that I did not want to put the knowledge about this error in upper
8180         layers, like:
8181
8182         int old = Report.Errors;
8183         x = new PropertyExpr (...);
8184         if (old != Report.Errors)
8185                 return null;
8186         else
8187                 return x;
8188
8189         So the property expr is returned, but it is invalid, so the error
8190         will be flagged during the resolve process. 
8191
8192         * class.cs: Remove InheritablePropertySignatureCompare from the
8193         class, as we no longer depend on the property signature to compute
8194         whether it is possible to implement a method or not.
8195
8196         The reason is that calling PropertyInfo.GetGetMethod will return
8197         null (in .NET, in Mono it works, and we should change this), in
8198         cases where the Get Method does not exist in that particular
8199         class.
8200
8201         So this code:
8202
8203         class X { public virtual int A { get { return 1; } } }
8204         class Y : X { }
8205         class Z : Y { public override int A { get { return 2; } } }
8206
8207         Would fail in Z because the parent (Y) would not have the property
8208         defined.  So we avoid this completely now (because the alternative
8209         fix was ugly and slow), and we now depend exclusively on the
8210         method names.
8211
8212         (PropertyBase.CheckBase): Use a method-base mechanism to find our
8213         reference method, instead of using the property.
8214
8215         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
8216         routines are gone now.
8217
8218         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
8219         names, they were incorrectly named.
8220
8221         * cs-tokenizer.cs: Return are more gentle token on failure. 
8222
8223         * pending.cs (PendingImplementation.InterfaceMethod): This routine
8224         had an out-of-sync index variable, which caused it to remove from
8225         the list of pending methods the wrong method sometimes.
8226
8227 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
8228
8229         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
8230         CanWrite, because those refer to this particular instance of the
8231         property, and do not take into account the fact that we can
8232         override single members of a property.
8233
8234         Constructor requires an EmitContext.  The resolution process does
8235         not happen here, but we need to compute the accessors before,
8236         because the resolution does not always happen for properties.
8237
8238         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
8239         subclass, before we did not update this flag, but we did update
8240         bindingflags. 
8241
8242         (GetAccessors): Drop this routine, as it did not work in the
8243         presence of partially overwritten set/get methods. 
8244
8245         Notice that this broke the cs1540 detection, but that will require
8246         more thinking. 
8247
8248 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8249
8250         * class.cs:
8251         * codegen.cs:
8252         * driver.cs: issue a warning instead of an error if we don't support
8253         debugging for the platform. Also ignore a couple of errors that may
8254         arise when trying to write the symbols. Undo my previous patch.
8255
8256 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8257
8258         * driver.cs: ignore /debug switch except for Unix platforms.
8259
8260 2002-10-23  Nick Drochak  <ndrochak@gol.com>
8261
8262         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
8263
8264 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
8265
8266         * driver.cs: Do not make mcs-debug conditional, so we do not break
8267         builds that use it.
8268
8269         * statement.cs (UsageVector.MergeChildren): I would like Martin to
8270         review this patch.  But basically after all the children variables
8271         have been merged, the value of "Breaks" was not being set to
8272         new_breaks for Switch blocks.  I think that it should be set after
8273         it has executed.  Currently I set this to the value of new_breaks,
8274         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
8275         conservative, but I do not understand this code very well.
8276
8277         I did not break anything in the build, so that is good ;-)
8278
8279         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
8280
8281 2002-10-20  Mark Crichton  <crichton@gimp.org>
8282
8283         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
8284
8285 2002-10-20  Nick Drochak  <ndrochak@gol.com>
8286
8287         * cfold.cs: Fixed compile blocker.
8288
8289 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
8290
8291         * driver.cs: I was chekcing the key, not the file.
8292
8293 2002-10-19  Ravi Pratap  <ravi@ximian.com>
8294
8295         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
8296         message that we were generating - we just need to silently return
8297         a null.
8298
8299 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
8300
8301         * class.cs (Event.Define): Change my previous commit, as this
8302         breaks the debugger.  This is a temporary hack, as it seems like
8303         the compiler is generating events incorrectly to begin with.
8304
8305         * expression.cs (Binary.ResolveOperator): Added support for 
8306         "U operator - (E x, E y)"
8307
8308         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
8309         y)".
8310
8311         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
8312         init-only variables, but this path did not take into account that
8313         there might be also instance readonly variables.  Correct this
8314         problem. 
8315
8316         This fixes bug 32253
8317
8318         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
8319         delegates as well.
8320
8321         * driver.cs: Change the extension for modules to `netmodule'
8322
8323         * cs-parser.jay: Improved slightly the location tracking for
8324         the debugger symbols.
8325
8326         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
8327         modifiers that were specified instead of the hardcoded value
8328         (FamAndAssem).  This was basically ignoring the static modifier,
8329         and others.  Fixes 32429.
8330
8331         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
8332         fixed a bug in the process (32476)
8333
8334         * expression.cs (ArrayAccess.EmitAssign): Patch from
8335         hwang_rob@yahoo.ca that fixes bug 31834.3
8336
8337 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
8338
8339         * driver.cs: Make the module extension .netmodule.
8340
8341 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
8342
8343         * driver.cs: Report an error if the resource file is not found
8344         instead of crashing.
8345
8346         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
8347         false, like Emit does.
8348
8349 2002-10-16  Nick Drochak  <ndrochak@gol.com>
8350
8351         * typemanager.cs: Remove unused private member.  Also reported mcs
8352         bug to report this as a warning like csc.
8353
8354 2002-10-15  Martin Baulig  <martin@gnome.org>
8355
8356         * statement.cs (Statement.Emit): Made this a virtual method; emits
8357         the line number info and calls DoEmit().
8358         (Statement.DoEmit): New protected abstract method, formerly knows
8359         as Statement.Emit().
8360
8361         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
8362
8363 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
8364
8365         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
8366         have fixed a remaining problem: not every AddXXXX was adding a
8367         fully qualified name.  
8368
8369         Now everyone registers a fully qualified name in the DeclSpace as
8370         being defined instead of the partial name.  
8371
8372         Downsides: we are slower than we need to be due to the excess
8373         copies and the names being registered this way.  
8374
8375         The reason for this is that we currently depend (on the corlib
8376         bootstrap for instance) that types are fully qualified, because
8377         we dump all the types in the namespace, and we should really have
8378         types inserted into the proper namespace, so we can only store the
8379         basenames in the defined_names array.
8380
8381 2002-10-10  Martin Baulig  <martin@gnome.org>
8382
8383         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
8384         from bug #31834, see the bug report for a testcase which is
8385         miscompiled.
8386
8387 2002-10-10  Martin Baulig  <martin@gnome.org>
8388
8389         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
8390         flow analysis code for this.
8391
8392         * statement.cs (Do, While, For): Tell the flow analysis code about
8393         infinite loops.
8394         (FlowBranching.UsageVector): Added support for infinite loops.
8395         (Block.Resolve): Moved the dead code elimination here and use flow
8396         analysis to do it.
8397
8398 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
8399
8400         * class.cs (Field.Define): Catch cycles on struct type
8401         definitions. 
8402
8403         * typemanager.cs (IsUnmanagedtype): Do not recursively check
8404         fields if the fields are static.  We only need to check instance
8405         fields. 
8406
8407         * expression.cs (As.DoResolve): Test for reference type.
8408
8409         * statement.cs (Using.ResolveExpression): Use
8410         ConvertImplicitRequired, not ConvertImplicit which reports an
8411         error on failture
8412         (Using.ResolveLocalVariableDecls): ditto.
8413
8414         * expression.cs (Binary.ResolveOperator): Report errors in a few
8415         places where we had to.
8416
8417         * typemanager.cs (IsUnmanagedtype): Finish implementation.
8418
8419 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
8420
8421         * expression.cs: Use StoreFromPtr instead of extracting the type
8422         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
8423
8424         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
8425         an enumeration value to a System.Enum, but System.Enum is not a
8426         value type, but an class type, so we need to box.
8427
8428         (Expression.ConvertExplicit): One codepath could return
8429         errors but not flag them.  Fix this.  Fixes #31853
8430
8431         * parameter.cs (Resolve): Do not allow void as a parameter type.
8432
8433 2002-10-06  Martin Baulig  <martin@gnome.org>
8434
8435         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
8436         if it's a class type and not a struct.  Fixes #31815.
8437
8438 2002-10-06  Martin Baulig  <martin@gnome.org>
8439
8440         * statement.cs: Reworked the flow analysis code a bit to make it
8441         usable for dead code elimination.
8442
8443 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8444
8445         * cs-parser.jay: allow empty source files. Fixes bug #31781.
8446
8447 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
8448
8449         * expression.cs (ComposedCast.DoResolveType): A quick workaround
8450         to fix the test 165, will investigate deeper.
8451
8452 2002-10-04  Martin Baulig  <martin@gnome.org>
8453
8454         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
8455         finally blocks actually work.
8456         (Try.Resolve): We don't need to create a sibling for `finally' if
8457         there is no finally block.
8458
8459 2002-10-04  Martin Baulig  <martin@gnome.org>
8460
8461         * class.cs (Constructor.Define): The default accessibility for a
8462         non-default constructor is private, not public.
8463
8464 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
8465
8466         * class.cs (Constructor): Make AllowedModifiers public, add
8467         EXTERN.
8468
8469         * cs-parser.jay: Perform the modifiers test here, as the
8470         constructor for the Constructor class usually receives a zero
8471         because of the way we create it (first we create, later we
8472         customize, and we were never checking the modifiers).
8473
8474         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
8475         is a version of LookupTypeReflection that includes the type-name
8476         cache.  This can be used as a fast path for functions that know
8477         the fully qualified name and are only calling into *.GetType() to
8478         obtain a composed type.
8479
8480         This is also used by TypeManager.LookupType during its type
8481         composition.
8482
8483         (LookupType): We now also track the real type name, as sometimes
8484         we can get a quey for the real type name from things like
8485         ComposedCast.  This fixes bug 31422.
8486
8487         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
8488         complete type fullname, it does not have to go through the type
8489         resolution system to obtain the composed version of the type (for
8490         obtaining arrays or pointers).
8491
8492         (Conditional.Emit): Use the EmitBoolExpression to
8493         generate nicer code, as requested by Paolo.
8494
8495         (ArrayCreation.CheckIndices): Use the patch from
8496         hwang_rob@yahoo.ca to validate the array initializers. 
8497
8498 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
8499
8500         * class.cs (ConstructorInitializer.Emit): simplify code by using
8501         Invocation.EmitCall, and at the same time, fix the bugs in calling
8502         parent constructors that took variable arguments. 
8503
8504         * ecore.cs (Expression.ConvertNumericExplicit,
8505         Expression.ImplicitNumericConversion): Remove the code that
8506         manually wrapped decimal (InternalTypeConstructor call is now gone
8507         as well).
8508
8509         * expression.cs (Cast.TryReduce): Also handle decimal types when
8510         trying to perform a constant fold on the type.
8511
8512         * typemanager.cs (IsUnmanagedtype): Partially implemented.
8513
8514         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
8515         that only turned off an error report, and did nothing else. 
8516
8517 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
8518
8519         * driver.cs: Handle and ignore /fullpaths
8520
8521 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
8522
8523         * expression.cs (Binary.ResolveOperator): Catch the case where
8524         DoNumericPromotions returns true, 
8525
8526         (Binary.DoNumericPromotions): Simplify the code, and the tests.
8527
8528 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
8529
8530         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
8531         report error 70.
8532
8533 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
8534
8535         * ecore.cs (ConvertNumericExplicit): It is not enough that the
8536         conversion exists, but it is also required that the conversion be
8537         performed.  This manifested in "(Type64Enum) 2".  
8538
8539         * class.cs (TypeManager.AddMethod): The fix is not to change
8540         AddEnum, because that one was using a fully qualified name (every
8541         DeclSpace derivative does), but to change the AddMethod routine
8542         that was using an un-namespaced name.  This now correctly reports
8543         the duplicated name.
8544
8545         Revert patch until I can properly fix it.  The issue
8546         is that we have a shared Type space across all namespaces
8547         currently, which is wrong.
8548
8549         Options include making the Namespace a DeclSpace, and merge
8550         current_namespace/current_container in the parser.
8551
8552 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
8553
8554         * cs-parser.jay: Improve error reporting when we get a different
8555         kind of expression in local_variable_type and
8556         local_variable_pointer_type. 
8557
8558         Propagate this to avoid missleading errors being reported.
8559
8560         * ecore.cs (ImplicitReferenceConversion): treat
8561         TypeManager.value_type as a target just like object_type.   As
8562         code like this:
8563
8564         ValueType v = 1;
8565
8566         Is valid, and needs to result in the int 1 being boxed before it
8567         is assigned to the value type v.
8568
8569         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
8570         to validate the enumeration name.
8571
8572         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
8573         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
8574         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
8575
8576         * ecore.cs (TryImplicitIntConversion): When doing an
8577         implicit-enumeration-conversion, check if the type is 64-bits and
8578         perform a conversion before passing to EnumConstant.
8579
8580 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
8581
8582         * decl.cs (Error_AmbiguousTypeReference); New routine used to
8583         report ambiguous type references.  Unlike the MS version, we
8584         report what the ambiguity is.   Innovation at work ;-)
8585
8586         (DeclSpace.FindType): Require a location argument to
8587         display when we display an ambiguous error.
8588
8589         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
8590
8591         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
8592
8593         * expression.cs (EmitDynamicInitializers): Apply patch from
8594         hwang_rob@yahoo.ca that fixes the order in which we emit our
8595         initializers. 
8596
8597 2002-09-21  Martin Baulig  <martin@gnome.org>
8598
8599         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
8600         delegate takes no arguments.
8601
8602 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
8603
8604         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
8605         from integers.
8606
8607         * expression.cs: Extract the underlying type.
8608
8609         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
8610
8611         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
8612
8613 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
8614
8615         * class.cs (TypeContainer.DefineType): We can not use the nice
8616         PackingSize with the size set to 1 DefineType method, because it
8617         will not allow us to define the interfaces that the struct
8618         implements.
8619
8620         This completes the fixing of bug 27287
8621
8622         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
8623         means also structs.  This fixes part of the problem. 
8624         (Expresion.ImplicitReferenceConversionExists): ditto.
8625
8626         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
8627         error if there were no errors reported during the type lookup
8628         process, to avoid duplicates or redundant errors.  Without this
8629         you would get an ambiguous errors plus a type not found.  We have
8630         beaten the user enough with the first error.  
8631
8632         (DeclSparce.FindType): Emit a warning if we have an ambiguous
8633         reference. 
8634
8635         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
8636         during the resolution process, stop the lookup, this avoids
8637         repeated error reports (same error twice).
8638
8639         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
8640
8641         * typemanager.cs (LookupType): Redo the type lookup code to match
8642         the needs of System.Reflection.  
8643
8644         The issue is that System.Reflection requires references to nested
8645         types to begin with a "+" sign instead of a dot.  So toplevel
8646         types look like: "NameSpace.TopLevelClass", and nested ones look
8647         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
8648         levels. 
8649
8650 2002-09-19  Martin Baulig  <martin@gnome.org>
8651
8652         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
8653         says that a method always returns or always throws an exception,
8654         don't report the CS0161.
8655
8656         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
8657         set `Returns = new_returns'.
8658
8659 2002-09-19  Martin Baulig  <martin@gnome.org>
8660
8661         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
8662         to an enum constant, check for a CS0176.
8663
8664 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
8665
8666         * class.cs (TypeContainer.CheckPairedOperators): Now we check
8667         for operators that must be in pairs and report errors.
8668
8669         * ecore.cs (SimpleName.DoResolveType): During the initial type
8670         resolution process, when we define types recursively, we must
8671         check first for types in our current scope before we perform
8672         lookups in the enclosing scopes.
8673
8674         * expression.cs (MakeByteBlob): Handle Decimal blobs.
8675
8676         (Invocation.VerifyArgumentsCompat): Call
8677         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
8678         I thought we were supposed to always call this, but there are a
8679         few places in the code where we dont do it.
8680
8681 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
8682
8683         * driver.cs: Add support in -linkres and -resource to specify the
8684         name of the identifier.
8685
8686 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
8687
8688         * ecore.cs (StandardConversionExists): Sync with the conversion
8689         code: allow anything-* to void* conversions.
8690
8691         (FindMostSpecificSource): Use an Expression argument
8692         instead of a Type, because we might be handed over a Literal which
8693         gets a few more implicit conversions that plain types do not.  So
8694         this information was being lost.
8695
8696         Also, we drop the temporary type-holder expression when not
8697         required.
8698
8699 2002-09-17  Martin Baulig  <martin@gnome.org>
8700
8701         * class.cs (PropertyBase.CheckBase): Don't check the base class if
8702         this is an explicit interface implementation.
8703
8704 2002-09-17  Martin Baulig  <martin@gnome.org>
8705
8706         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
8707         different `IndexerName' attributes.
8708
8709         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
8710         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
8711         virtual CommonResolve().
8712
8713 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
8714
8715         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
8716         and convert that to the UnderlyingType.
8717
8718         * statement.cs (Foreach.Resolve): Indexers are just like variables
8719         or PropertyAccesses.
8720
8721         * cs-tokenizer.cs (consume_string): Track line numbers and columns
8722         inside quoted strings, we were not doing this before.
8723
8724 2002-09-16  Martin Baulig  <martin@gnome.org>
8725
8726         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
8727         resolve it.  This is needed for the definite assignment check of the
8728         instance expression, fixes bug #29846.
8729         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
8730
8731 2002-09-16  Nick Drochak  <ndrochak@gol.com>
8732
8733         * parameter.cs: Fix compile error.  Cannot reference static member
8734         from an instance object.  Is this an mcs bug?
8735
8736 2002-09-14  Martin Baulig  <martin@gnome.org>
8737
8738         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
8739         multiple times.  Fixes bug #30295, added test-166.cs.
8740
8741 2002-09-14  Martin Baulig  <martin@gnome.org>
8742
8743         * statement.cs (Block.Emit): Don't emit unreachable code.
8744         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
8745         `break' statements.
8746         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
8747
8748 2002-09-14  Martin Baulig  <martin@gnome.org>
8749
8750         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
8751         is set.
8752
8753 2002-09-14  Martin Baulig  <martin@gnome.org>
8754
8755         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
8756         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
8757         be false on the ms runtime.
8758
8759 2002-09-13  Martin Baulig  <martin@gnome.org>
8760
8761         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
8762         the CS0038 error message.
8763
8764 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
8765
8766         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
8767         constant inside, return it.
8768
8769 2002-09-12  Martin Baulig  <martin@gnome.org>
8770
8771         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
8772         implicit conversion can be done between enum types.
8773
8774         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
8775         check whether an implicit conversion to the current enum's UnderlyingType
8776         exists and report an error if not.
8777
8778         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
8779         without debugging support.
8780
8781         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
8782         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
8783
8784 2002-09-12  Martin Baulig  <martin@gnome.org>
8785
8786         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
8787
8788         * ecore.cs (IMemberExpr.DeclaringType): New property.
8789         (SimpleName.SimpleNameResolve): Check whether we're accessing a
8790         nonstatic member of an outer type (CS0038).
8791
8792 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
8793
8794         * driver.cs: Activate the using-error detector at warning level
8795         4 (at least for MS-compatible APIs).
8796
8797         * namespace.cs (VerifyUsing): Small buglett fix.
8798
8799         * pending.cs (PendingImplementation): pass the container pointer. 
8800
8801         * interface.cs (GetMethods): Allow for recursive definition.  Long
8802         term, I would like to move every type to support recursive
8803         definitions, not the current ordering mechanism that we have right
8804         now.
8805
8806         The situation is this: Attributes are handled before interfaces,
8807         so we can apply attributes to interfaces.  But some attributes
8808         implement interfaces, we will now handle the simple cases
8809         (recursive definitions will just get an error).  
8810
8811         * parameter.cs: Only invalidate types at the end if we fail to
8812         lookup all types.  
8813
8814 2002-09-09  Martin Baulig  <martin@gnome.org>
8815
8816         * ecore.cs (PropertyExpr.Emit): Also check for
8817         TypeManager.system_int_array_get_length so this'll also work when
8818         compiling corlib.  Fixes #30003.
8819
8820 2002-09-09  Martin Baulig  <martin@gnome.org>
8821
8822         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
8823         and throw an exception if we can't get the type's size.  Fixed #30040,
8824         added test-165.cs.
8825
8826 2002-09-09  Martin Baulig  <martin@gnome.org>
8827
8828         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
8829
8830         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
8831         context.  Fixes bug #30027.
8832
8833         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
8834         virtual functions.  Fixes bug #30043, added test-164.cs.
8835
8836 2002-09-08  Ravi Pratap  <ravi@ximian.com>
8837
8838         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
8839
8840 2002-09-08  Nick Drochak  <ndrochak@gol.com>
8841
8842         * driver.cs: Use an object to get the windows codepage since it's not a
8843         static property.
8844
8845 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
8846
8847         * statement.cs (For.Emit): for infinite loops (test == null)
8848         return whether there is a break inside, not always "true".
8849
8850         * namespace.cs (UsingEntry): New struct to hold the name of the
8851         using definition, the location where it is defined, and whether it
8852         has been used in a successful type lookup.
8853
8854         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
8855         strings.
8856
8857         * decl.cs: ditto.
8858
8859 2002-09-06  Ravi Pratap  <ravi@ximian.com>
8860
8861         * attribute.cs : Fix incorrect code which relied on catching
8862         a NullReferenceException to detect a null being passed in
8863         where an object was expected.
8864
8865 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
8866
8867         * statement.cs (Try): flag the catch variable as assigned
8868
8869         * expression.cs (Cast): Simplified by using ResolveType instead of
8870         manually resolving.
8871
8872         * statement.cs (Catch): Fix bug by using ResolveType.
8873
8874 2002-09-06  Ravi Pratap  <ravi@ximian.com>
8875
8876         * expression.cs (BetterConversion): Special case for when we have
8877         a NullLiteral as the argument and we have to choose between string
8878         and object types - we choose string the way csc does.
8879
8880         * attribute.cs (Attribute.Resolve): Catch the
8881         NullReferenceException and report error #182 since the Mono
8882         runtime no more has the bug and having this exception raised means
8883         we tried to select a constructor which takes an object and is
8884         passed a null.
8885
8886 2002-09-05  Ravi Pratap  <ravi@ximian.com>
8887
8888         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
8889         message (1502, 1503) when we can't locate a method after overload
8890         resolution. This is much more informative and closes the bug
8891         Miguel reported.
8892
8893         * interface.cs (PopulateMethod): Return if there are no argument
8894         types. Fixes a NullReferenceException bug.
8895
8896         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
8897         expressions too. Previously we were checking only in one place for
8898         positional arguments leaving out named arguments.
8899
8900         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
8901         type to the enum type is not allowed. Remove code corresponding to
8902         that.
8903
8904         (ConvertNumericExplicit): Allow explicit conversions from
8905         the underlying type to enum type. This precisely follows the spec
8906         and closes a bug filed by Gonzalo.
8907
8908 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8909
8910         * compiler.csproj:
8911         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
8912
8913 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
8914
8915         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
8916         it was important that we stored the right value after the
8917         reduction in `converted'.
8918
8919 2002-09-04  Martin Baulig  <martin@gnome.org>
8920
8921         * location.cs (Location.SymbolDocument): Use full pathnames for the
8922         source files.
8923
8924 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
8925
8926         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
8927         of the expression resolve mechanism, because that will catch the
8928         SimpleName error failures.
8929
8930         (Conditional): If we can not resolve the
8931         expression, return, do not crash.
8932
8933 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8934
8935         * cs-tokenizer.cs:
8936         (location): display token name instead of its number.
8937
8938 2002-08-28  Martin Baulig  <martin@gnome.org>
8939
8940         * expression.cs (Binary.ResolveOperator): Don't silently return
8941         but return an error if an operator cannot be applied between two
8942         enum types.
8943
8944 2002-08-28  Martin Baulig  <martin@gnome.org>
8945
8946         * class.cs (Constructor.Define): Set the permission attributes
8947         correctly instead of making all constructors public.
8948
8949 2002-08-28  Martin Baulig  <martin@gnome.org>
8950
8951         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
8952         for private members before reporting a CS0103; if we find anything,
8953         it's a CS0122.
8954
8955 2002-08-28  Martin Baulig  <martin@gnome.org>
8956
8957         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
8958         to check whether `closure_start_type == closure_invocation_type',
8959         we also need to check whether `m.DeclaringType == closure_invocation_type'
8960         before bypassing the permission checks.  We might be accessing
8961         protected/private members from the base class.
8962         (TypeManager.RealMemberLookup): Only set private_ok if private
8963         members were requested via BindingFlags.NonPublic.
8964
8965         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
8966
8967         * expression.cs (MemberAccess.ResolveMemberAccess): Set
8968         MethodGroupExpr.IsExplicitImpl if appropriate.
8969         (Invocation.DoResolve): Don't report the CS0120 for explicit
8970         interface implementations.
8971
8972 2002-08-27  Martin Baulig  <martin@gnome.org>
8973
8974         * expression.cs (Invocation.DoResolve): If this is a static
8975         method and we don't have an InstanceExpression, we must report
8976         a CS0120.
8977
8978 2002-08-25  Martin Baulig  <martin@gnome.org>
8979
8980         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
8981         `==' between a valuetype and an object.
8982
8983 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
8984
8985         * ecore.cs (TypeExpr): Provide a ToString method.
8986
8987 2002-08-24  Martin Baulig  <martin@gnome.org>
8988
8989         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
8990         now called proggie.dbg and it's a binary file.
8991
8992 2002-08-23  Martin Baulig  <martin@gnome.org>
8993
8994         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
8995
8996 2002-08-23  Martin Baulig  <martin@gnome.org>
8997
8998         * struct.cs (MyStructInfo.ctor): Make this work with empty
8999         structs; it's not allowed to use foreach() on null.
9000
9001 2002-08-23  Martin Baulig  <martin@gnome.org>
9002
9003         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
9004         writer the full pathname of the generated assembly.
9005
9006 2002-08-23  Martin Baulig  <martin@gnome.org>
9007
9008         * statements.cs (FlowBranching.UsageVector.MergeChildren):
9009         A `finally' block never returns or breaks; improved handling of
9010         unreachable code.
9011
9012 2002-08-23  Martin Baulig  <martin@gnome.org>
9013
9014         * statement.cs (Throw.Resolve): Allow `throw null'.
9015
9016 2002-08-23  Martin Baulig  <martin@gnome.org>
9017
9018         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
9019         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
9020         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
9021         MemberLookup would return a wrong event if this is an explicit
9022         interface implementation and the class has an event with the same
9023         name.
9024
9025 2002-08-23  Martin Baulig  <martin@gnome.org>
9026
9027         * statement.cs (Block.AddChildVariableNames): New public method.
9028         (Block.AddChildVariableName): Likewise.
9029         (Block.IsVariableNameUsedInChildBlock): Likewise.
9030         (Block.AddVariable): Check whether a variable name has already
9031         been used in a child block.
9032
9033         * cs-parser.jay (declare_local_variables): Mark all variable names
9034         from the current block as being used in a child block in the
9035         implicit block.
9036
9037 2002-08-23  Martin Baulig  <martin@gnome.org>
9038
9039         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
9040         find the symbol writer.
9041
9042         * driver.cs: csc also allows the arguments to /define being
9043         separated by commas, not only by semicolons.
9044
9045 2002-08-23  Martin Baulig  <martin@gnome.org>
9046
9047         * interface.cs (Interface.GetMembers): Added static check for events.
9048
9049 2002-08-15  Martin Baulig  <martin@gnome.org>
9050
9051         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
9052         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
9053
9054         * ecore.cs (Expression.MemberLookup): Added documentation and explained
9055         why the MethodData.EmitDestructor() change was necessary.
9056
9057 2002-08-20  Martin Baulig  <martin@gnome.org>
9058
9059         * class.cs (TypeContainer.FindMembers): Added static check for events.
9060
9061         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
9062
9063         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
9064         use Type.GetEvents(), not Type.FindMembers().
9065
9066 2002-08-20  Martin Baulig  <martin@gnome.org>
9067
9068         * decl.cs (MemberCache): Added a special method cache which will
9069         be used for method-only searched.  This ensures that a method
9070         search will return a MethodInfo with the correct ReflectedType for
9071         inherited methods.      
9072
9073 2002-08-20  Martin Baulig  <martin@gnome.org>
9074
9075         * decl.cs (DeclSpace.FindMembers): Made this public.
9076
9077 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9078
9079         * delegate.cs: fixed build on windows.
9080         [FIXME:  Filed as bug #29150: MCS must report these errors.]
9081
9082 2002-08-19  Ravi Pratap  <ravi@ximian.com>
9083
9084         * ecore.cs (StandardConversionExists): Return a false
9085         if we are trying to convert the void type to anything else
9086         since that is not allowed.
9087
9088         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
9089         we flag error 70 in the event an event is trying to be accessed
9090         directly from outside the declaring type.
9091
9092 2002-08-20  Martin Baulig  <martin@gnome.org>
9093
9094         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
9095         MemberCache from typemanager.cs to decl.cs.
9096
9097 2002-08-19  Martin Baulig  <martin@gnome.org>
9098
9099         * class.cs (TypeContainer): Implement IMemberContainer.
9100         (TypeContainer.DefineMembers): Create the MemberCache.
9101         (TypeContainer.FindMembers): Do better BindingFlags checking; only
9102         return public members if BindingFlags.Public was given, check
9103         whether members are static.
9104
9105 2002-08-16  Martin Baulig  <martin@gnome.org>
9106
9107         * decl.cs (DeclSpace.Define): Splitted this in Define and
9108         DefineMembers.  DefineMembers is called first and initializes the
9109         MemberCache.
9110
9111         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
9112         DefineMembers() on all our DeclSpaces.
9113
9114         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
9115         but call DefineMembers() on all nested interfaces.  We call their
9116         Define() in our new Define() function.
9117
9118         * interface.cs (Interface): Implement IMemberContainer.
9119         (Interface.Define): Moved all code except the attribute stuf to
9120         DefineMembers().
9121         (Interface.DefineMembers): Initialize the member cache.
9122
9123         * typemanager.cs (IMemberFinder): Removed this interface, we don't
9124         need this anymore since we can use MemberCache.FindMembers directly.
9125
9126 2002-08-19  Martin Baulig  <martin@gnome.org>
9127
9128         * typemanager.cs (MemberCache): When creating the cache for an
9129         interface type, add all inherited members.
9130         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
9131         to `out bool used_cache' and documented it.
9132         (TypeManager.MemberLookup): If we already used the cache in the first
9133         iteration, we don't need to do the interfaces check.
9134
9135 2002-08-19  Martin Baulig  <martin@gnome.org>
9136
9137         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
9138         here from IMemberFinder and don't implement this interface anymore.
9139         (DeclSpace.MemberCache): Moved here from IMemberFinder.
9140
9141         * typemanager.cs (IMemberFinder): This interface is now only used by
9142         classes which actually support the member cache.
9143         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
9144         since we only put DeclSpaces into this Hashtable.
9145         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
9146         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
9147
9148 2002-08-16  Martin Baulig  <martin@gnome.org>
9149
9150         * typemanager.cs (ICachingMemberFinder): Removed.
9151         (IMemberFinder.MemberCache): New property.
9152         (TypeManager.FindMembers): Merged this with RealFindMembers().
9153         This function will never be called from TypeManager.MemberLookup()
9154         so we can't use the cache here, just the IMemberFinder.
9155         (TypeManager.MemberLookup_FindMembers): Check whether the
9156         IMemberFinder has a MemberCache and call the cache's FindMembers
9157         function.
9158         (MemberCache): Rewrote larger parts of this yet another time and
9159         cleaned it up a bit.
9160
9161 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
9162
9163         * driver.cs (LoadArgs): Support quoting.
9164
9165         (Usage): Show the CSC-like command line arguments.
9166
9167         Improved a few error messages.
9168
9169 2002-08-15  Martin Baulig  <martin@gnome.org>
9170
9171         * typemanager.cs (IMemberContainer.Type): New property.
9172         (IMemberContainer.IsInterface): New property.
9173
9174         The following changes are conditional to BROKEN_RUNTIME, which is
9175         defined at the top of the file.
9176
9177         * typemanager.cs (MemberCache.MemberCache): Don't add the base
9178         class'es members, but add all members from TypeHandle.ObjectType
9179         if we're an interface.
9180         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
9181         is the current type.
9182         (MemberCache.CacheEntry.Container): Removed this field.
9183         (TypeHandle.GetMembers): Include inherited members.
9184
9185 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9186
9187         * typemanager.cs: fixed compilation and added a comment on a field that
9188         is never used.
9189
9190 2002-08-15  Martin Baulig  <martin@gnome.org>
9191
9192         * class.cs (ConstructorInitializer.Resolve): In the
9193         Expression.MemberLookup call, use the queried_type as
9194         invocation_type.
9195
9196         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
9197         declared' attribute, it's always true.
9198         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
9199         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
9200         temporary wrapper for FindMembers which tells MemberLookup whether
9201         members from the base classes are included in the return value.
9202         This will go away soon.
9203         (TypeManager.MemberLookup): Use this temporary hack here; once the
9204         new MemberCache is completed, we don't need to do the DeclaredOnly
9205         looping here anymore since the MemberCache will take care of this.
9206         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
9207         (MemberCache): When creating the MemberCache for a class, get
9208         members from the current class and all its base classes.
9209         (MemberCache.CacheEntry.Container): New field.  This is a
9210         temporary hack until the Mono runtime is fixed to distinguish
9211         between ReflectedType and DeclaringType.  It allows us to use MCS
9212         with both the MS runtime and the unfixed Mono runtime without
9213         problems and without accecting performance.
9214         (MemberCache.SearchMembers): The DeclaredOnly looping from
9215         TypeManager.MemberLookup is now done here.      
9216
9217 2002-08-14  Martin Baulig  <martin@gnome.org>
9218
9219         * statement.cs (MyStructInfo.MyStructInfo): Don't call
9220         Type.GetFields on dynamic types but get the fields from the
9221         corresponding TypeContainer.
9222         (MyStructInfo.GetStructInfo): Added check for enum types.
9223
9224         * typemanager.cs (MemberList.IsSynchronized): Implemented.
9225         (MemberList.SyncRoot): Implemented.
9226         (TypeManager.FilterWithClosure): No need to check permissions if
9227         closure_start_type == closure_invocation_type, don't crash if
9228         closure_invocation_type is null.
9229
9230 2002-08-13  Martin Baulig  <martin@gnome.org>
9231
9232         Rewrote TypeContainer.FindMembers to use a member cache.  This
9233         gives us a speed increase of about 35% for the self-hosting MCS
9234         build and of about 15-20% for the class libs (both on GNU/Linux).
9235
9236         * report.cs (Timer): New class to get enhanced profiling.  This
9237         whole class is "TIMER" conditional since it remarkably slows down
9238         compilation speed.
9239
9240         * class.cs (MemberList): New class.  This is an IList wrapper
9241         which we're now using instead of passing MemberInfo[]'s around to
9242         avoid copying this array unnecessarily.
9243         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
9244         (ICachingMemberFinder, IMemberContainer): New interface.
9245         (TypeManager.FilterWithClosure): If `criteria' is null, the name
9246         has already been checked, otherwise use it for the name comparision.
9247         (TypeManager.FindMembers): Renamed to RealMemberFinder and
9248         provided wrapper which tries to use ICachingMemberFinder.FindMembers
9249         if possible.  Returns a MemberList, not a MemberInfo [].
9250         (TypeHandle): New class, implements IMemberContainer.  We create
9251         one instance of this class per type, it contains a MemberCache
9252         which is used to do the member lookups.
9253         (MemberCache): New class.  Each instance of this class contains
9254         all members of a type and a name-based hash table.
9255         (MemberCache.FindMembers): This is our new member lookup
9256         function.  First, it looks up all members of the requested name in
9257         the hash table.  Then, it walks this list and sorts out all
9258         applicable members and returns them.
9259
9260 2002-08-13  Martin Baulig  <martin@gnome.org>
9261
9262         In addition to a nice code cleanup, this gives us a performance
9263         increase of about 1.4% on GNU/Linux - not much, but it's already
9264         half a second for the self-hosting MCS compilation.
9265
9266         * typemanager.cs (IMemberFinder): New interface.  It is used by
9267         TypeManager.FindMembers to call FindMembers on a TypeContainer,
9268         Enum, Delegate or Interface.
9269         (TypeManager.finder_to_member_finder): New PtrHashtable.
9270         (TypeManager.finder_to_container): Removed.
9271         (TypeManager.finder_to_delegate): Removed.
9272         (TypeManager.finder_to_interface): Removed.
9273         (TypeManager.finder_to_enum): Removed.
9274
9275         * interface.cs (Interface): Implement IMemberFinder.
9276
9277         * delegate.cs (Delegate): Implement IMemberFinder.
9278
9279         * enum.cs (Enum): Implement IMemberFinder.
9280
9281         * class.cs (TypeContainer): Implement IMemberFinder.
9282
9283 2002-08-12  Martin Baulig  <martin@gnome.org>
9284
9285         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
9286
9287 2002-08-12  Martin Baulig  <martin@gnome.org>
9288
9289         * ecore.cs (ITypeExpression): New interface for expressions which
9290         resolve to a type.
9291         (TypeExpression): Renamed to TypeLookupExpression.
9292         (Expression.DoResolve): If we're doing a types-only lookup, the
9293         expression must implement the ITypeExpression interface and we
9294         call DoResolveType() on it.
9295         (SimpleName): Implement the new ITypeExpression interface.
9296         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
9297         hack, the situation that we're only looking up types can't happen
9298         anymore when this method is called.  Moved the type lookup code to
9299         DoResolveType() and call it.
9300         (SimpleName.DoResolveType): This ITypeExpression interface method
9301         is now doing the types-only lookup.
9302         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
9303         (ResolveFlags): Added MaskExprClass.
9304
9305         * expression.cs (MemberAccess): Implement the ITypeExpression
9306         interface.
9307         (MemberAccess.DoResolve): Added support for a types-only lookup
9308         when we're called via ITypeExpression.DoResolveType().
9309         (ComposedCast): Implement the ITypeExpression interface.
9310
9311         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
9312         Expression.Resolve() with ResolveFlags.Type instead.
9313
9314 2002-08-12  Martin Baulig  <martin@gnome.org>
9315
9316         * interface.cs (Interface.Define): Apply attributes.
9317
9318         * attribute.cs (Attribute.ApplyAttributes): Added support for
9319         interface attributes.
9320
9321 2002-08-11  Martin Baulig  <martin@gnome.org>
9322
9323         * statement.cs (Block.Emit): Only check the "this" variable if we
9324         do not always throw an exception.
9325
9326         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
9327         whether the property has a set accessor.
9328
9329 2002-08-11  Martin Baulig  <martin@gnome.org>
9330
9331         Added control flow analysis support for structs.
9332
9333         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
9334         with control flow analysis turned off.
9335         (IVariable): New interface.
9336         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
9337         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
9338         (FieldExpr.DoResolve): Resolve the instance expression with flow
9339         analysis turned off and do the definite assignment check after the
9340         resolving when we know what the expression will resolve to.
9341
9342         * expression.cs (LocalVariableReference, ParameterReference):
9343         Implement the new IVariable interface, only call the flow analysis
9344         code if ec.DoFlowAnalysis is true.
9345         (This): Added constructor which takes a Block argument.  Implement
9346         the new IVariable interface.
9347         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
9348         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
9349         This does the definite assignment checks for struct members.
9350
9351         * class.cs (Constructor.Emit): If this is a non-static `struct'
9352         constructor which doesn't have any initializer, call
9353         Block.AddThisVariable() to tell the flow analysis code that all
9354         struct elements must be initialized before control returns from
9355         the constructor.
9356
9357         * statement.cs (MyStructInfo): New public class.
9358         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
9359         argument to this indexer.  If non-zero, check an individual struct
9360         member, not the whole struct.
9361         (FlowBranching.CheckOutParameters): Check struct members.
9362         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
9363         overloaded versions of these methods which take an additional
9364         `int field_idx' argument to check struct members.
9365         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
9366         overloaded versions of these methods which take an additional
9367         `string field_name' argument to check struct member.s
9368         (VariableInfo): Implement the IVariable interface.
9369         (VariableInfo.StructInfo): New public property.  Returns the
9370         MyStructInfo instance of the variable if it's a struct or null.
9371         (Block.AddThisVariable): New public method.  This is called from
9372         Constructor.Emit() for non-static `struct' constructor which do
9373         not have any initializer.  It creates a special variable for the
9374         "this" instance variable which will be checked by the flow
9375         analysis code to ensure that all of the struct's fields are
9376         initialized before control returns from the constructor.
9377         (UsageVector): Added support for struct members.  If a
9378         variable/parameter is a struct with N members, we reserve a slot
9379         in the usage vector for each member.  A struct is considered fully
9380         initialized if either the struct itself (slot 0) or all its
9381         members are initialized.
9382
9383 2002-08-08  Martin Baulig  <martin@gnome.org>
9384
9385         * driver.cs (Driver.MainDriver): Only report an error CS5001
9386         if there were no compilation errors.
9387
9388         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
9389         `UnsafeContext' property to determine whether the parent is in
9390         unsafe context rather than checking the parent's ModFlags:
9391         classes nested in an unsafe class are unsafe as well.
9392
9393 2002-08-08  Martin Baulig  <martin@gnome.org>
9394
9395         * statement.cs (UsageVector.MergeChildren): Distinguish between
9396         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
9397         we return.  Added test17() and test18() to test-154.cs.
9398
9399 2002-08-08  Martin Baulig  <martin@gnome.org>
9400
9401         * typemanager.cs (TypeManager.FilterWithClosure): If we have
9402         Family access, make sure the invoking type isn't a subclass of the
9403         queried type (that'd be a CS1540).
9404
9405         * ecore.cs (Expression.MemberLookup): Added overloaded version of
9406         this method which takes an additional `Type invocation_type'.
9407
9408         * expression.cs (BaseAccess.DoResolve): Use the base type as
9409         invocation and query type.
9410         (MemberAccess.DoResolve): If the lookup failed and we're about to
9411         report a CS0122, try a lookup with the ec.ContainerType - if this
9412         succeeds, we must report a CS1540.
9413
9414 2002-08-08  Martin Baulig  <martin@gnome.org>
9415
9416         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
9417         (MethodGroupExpr): Implement the IMemberExpr interface.
9418
9419         * expression (MemberAccess.ResolveMemberAccess): No need to have
9420         any special code for MethodGroupExprs anymore, they're now
9421         IMemberExprs.   
9422
9423 2002-08-08  Martin Baulig  <martin@gnome.org>
9424
9425         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
9426         Family, FamANDAssem and FamORAssem permissions.
9427         (TypeManager.IsSubclassOrNestedChildOf): New public method.
9428
9429 2002-08-08  Martin Baulig  <martin@gnome.org>
9430
9431         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
9432         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
9433         or loop block.
9434
9435 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
9436
9437         * driver.cs: implemented /resource option to embed managed resources.
9438
9439 2002-08-07  Martin Baulig  <martin@gnome.org>
9440
9441         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
9442         (FieldBase.HasFieldInitializer): New public property.
9443         (FieldBase.GetInitializerExpression): New public method.  Resolves and
9444         returns the field initializer and makes sure it is only resolved once.
9445         (TypeContainer.EmitFieldInitializers): Call
9446         FieldBase.GetInitializerExpression to get the initializer, this ensures
9447         that it isn't resolved multiple times.
9448
9449         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
9450         the resolving process (SimpleName/MemberLookup) that we're currently
9451         emitting a field initializer (which must not access any instance members,
9452         this is an error CS0236).
9453
9454         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
9455         argument, if the `IsFieldInitializer' flag is set, we must report and
9456         error CS0236 and not an error CS0120.   
9457
9458 2002-08-07  Martin Baulig  <martin@gnome.org>
9459
9460         * ecore.cs (IMemberExpr): New public interface.
9461         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
9462         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
9463         if the expression is an IMemberExpr.
9464
9465         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
9466         to be null, implicitly default to `this' if we're non-static in
9467         this case.  Simplified the code a lot by using the new IMemberExpr
9468         interface.  Also fixed bug #28176 here.
9469
9470 2002-08-06  Martin Baulig  <martin@gnome.org>
9471
9472         * cs-parser.jay (SimpleLookup): Removed.  We need to create
9473         ParameterReferences during semantic analysis so that we can do a
9474         type-only search when resolving Cast, TypeOf and SizeOf.
9475         (block): Pass the `current_local_parameters' to the Block's
9476         constructor.
9477
9478         * class.cs (ConstructorInitializer): Added `Parameters parameters'
9479         argument to the constructor.
9480         (ConstructorInitializer.Resolve): Create a temporary implicit
9481         block with the parameters.
9482
9483         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
9484         references here if we aren't doing a type-only search.
9485
9486         * statement.cs (Block): Added constructor which takes a
9487         `Parameters parameters' argument.
9488         (Block.Parameters): New public property.
9489
9490         * support.cs (InternalParameters.Parameters): Renamed `parameters'
9491         to `Parameters' and made it public readonly.
9492
9493 2002-08-06  Martin Baulig  <martin@gnome.org>
9494
9495         * ecore.cs (Expression.Warning): Made this public as well.
9496
9497         * report.cs (Report.Debug): Print the contents of collections.
9498
9499 2002-08-06  Martin Baulig  <martin@gnome.org>
9500
9501         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
9502         used to tell Resolve() which kinds of expressions it may return.
9503         (Expression.Resolve): Added overloaded version of this method which
9504         takes a `ResolveFlags flags' argument.  This can be used to tell
9505         Resolve() which kinds of expressions it may return.  Reports a
9506         CS0118 on error.
9507         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
9508         ResolveFlags.SimpleName.
9509         (Expression.Error118): Added overloaded version of this method which
9510         takes a `ResolveFlags flags' argument.  It uses the flags to determine
9511         which kinds of expressions are allowed.
9512
9513         * expression.cs (Argument.ResolveMethodGroup): New public method.
9514         Resolves an argument, but allows a MethodGroup to be returned.
9515         This is used when invoking a delegate.
9516
9517         * TODO: Updated a bit.
9518
9519 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9520
9521         Fixed compilation with csc.
9522
9523         * ecore.cs: Expression.Error made public. Is this correct? Should
9524         Warning be made public too?
9525
9526         * expression.cs: use ea.Location instead of ea.loc.
9527         [FIXME:  Filed as bug #28607: MCS must report these errors.]
9528
9529 2002-08-06  Martin Baulig  <martin@gnome.org>
9530
9531         * ecore.cs (Expression.loc): Moved the location here instead of
9532         duplicating it in all derived classes.
9533         (Expression.Location): New public property.
9534         (Expression.Error, Expression.Warning): Made them non-static and
9535         removed the location argument.
9536         (Expression.Warning): Added overloaded version which takes an
9537         `int level' argument.
9538         (Expression.Error118): Make this non-static and removed the
9539         expression and location arguments.
9540         (TypeExpr): Added location argument to the constructor.
9541
9542         * expression.cs (StaticCallExpr): Added location argument to
9543         the constructor.
9544         (Indirection, PointerArithmetic): Likewise.
9545         (CheckedExpr, UnCheckedExpr): Likewise.
9546         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
9547         (StringPtr): Likewise.
9548
9549
9550 2002-08-05  Martin Baulig  <martin@gnome.org>
9551
9552         * expression.cs (BaseAccess.DoResolve): Actually report errors.
9553
9554         * assign.cs (Assign.DoResolve): Check whether the source
9555         expression is a value or variable.
9556
9557         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
9558         while resolving the corresponding blocks.
9559
9560         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
9561         an error, don't silently return null.
9562
9563         * statement.cs (Block.AddVariable): Do the error reporting here
9564         and distinguish between CS0128 and CS0136.
9565         (Block.DoResolve): Report all unused labels (warning CS0164).
9566         (LabeledStatement): Pass the location to the constructor.
9567         (LabeledStatement.HasBeenReferenced): New property.
9568         (LabeledStatement.Resolve): Set it to true here.
9569
9570         * statement.cs (Return.Emit): Return success even after reporting
9571         a type mismatch error (CS0126 or CS0127), this is what csc does and
9572         it avoids confusing the users with any consecutive errors.
9573
9574 2002-08-05  Martin Baulig  <martin@gnome.org>
9575
9576         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
9577
9578         * const.cs (Const.LookupConstantValue): Catch circular definitions.
9579
9580         * expression.cs (MemberAccess.DoResolve): Silently return if an
9581         error has already been reported.
9582
9583         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
9584         error has already been reported.
9585
9586 2002-08-05  Martin Baulig  <martin@gnome.org>
9587
9588         * statement.cs (UsageVector): Only initialize the `parameters'
9589         vector if we actually have any "out" parameters.
9590
9591 2002-08-05  Martin Baulig  <martin@gnome.org>
9592
9593         * expression.cs (Binary.ResolveOperator): When combining delegates,
9594         they must have the same type.
9595
9596 2002-08-05  Martin Baulig  <martin@gnome.org>
9597
9598         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
9599         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
9600         work with the ms runtime and we also don't need it: if we're a
9601         PropertyBuilder and not in the `indexer_arguments' hash, then we
9602         are a property and not an indexer.
9603
9604         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
9605         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
9606         since the latter one doesn't work with the ms runtime.
9607
9608 2002-08-03  Martin Baulig  <martin@gnome.org>
9609
9610         Fixed bugs #27998 and #22735.
9611
9612         * class.cs (Method.IsOperator): New public field.
9613         (Method.CheckBase): Report CS0111 if there's already a method
9614         with the same parameters in the current class.  Report CS0508 when
9615         attempting to change the return type of an inherited method.
9616         (MethodData.Emit): Report CS0179 if a method doesn't have a body
9617         and it's not marked abstract or extern.
9618         (PropertyBase): New abstract base class for Property and Indexer.
9619         (PropertyBase.CheckBase): Moved here from Property and made it work
9620         for indexers.
9621         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
9622         the same so we can reuse it there.
9623         (Property, Indexer): Derive from PropertyBase.
9624         (MethodSignature.inheritable_property_signature_filter): New delegate
9625         to find properties and indexers.
9626
9627         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
9628         argument and improved error reporting.
9629
9630         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
9631         EmptyReadOnlyParameters and made it a property.
9632
9633         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
9634         version of this method which takes a `PropertyInfo indexer'.
9635         (TypeManager.RegisterIndexer): New method.
9636
9637         * class.cs: Added myself as author of this file :-)
9638
9639 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9640
9641         * class.cs: fixed compilation on windoze.
9642
9643 2002-08-03  Martin Baulig  <martin@gnome.org>
9644
9645         * interface.cs (Interface.GetInterfaceBases): Check whether all
9646         base interfaces are at least as accessible than the current one.
9647
9648         * class.cs (TypeContainer.GetClassBases): Check whether base types
9649         are at least as accessible than the current type.
9650         (TypeContainer.AsAccessible): Implemented and made non-static.
9651         (MemberBase.CheckParameters): Report errors if the accessibility
9652         checks fail.
9653
9654         * delegate.cs (Delegate.Delegate): The default visibility is
9655         internal for top-level types and private for nested types.
9656         (Delegate.Define): Report errors if the accessibility checks fail.
9657
9658         * enum.cs (Enum.Enum): The default visibility is internal for
9659         top-level types and private for nested types.
9660         (Enum.DefineType): Compute the correct visibility.
9661
9662         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
9663         function which takes a `bool is_toplevel' instead of a TypeContainer.
9664
9665         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
9666         builtin type.
9667
9668 2002-08-02  Martin Baulig  <martin@gnome.org>
9669
9670         * expression.cs (LocalVariableReferenc): Added constructor which
9671         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
9672         (LocalVariableReference.IsReadOnly): New property.
9673         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
9674         variable is readonly, use our own readonly flag to do this; you can
9675         use the new constructor to get a writable reference to a read-only
9676         variable.
9677
9678         * cs-parser.jay (foreach_statement, using_statement): Get a writable
9679         reference to the local variable.
9680
9681 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
9682
9683         * rootcontext.cs (ResolveCore): Also include System.Exception
9684
9685         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
9686         we reach an EmptyStatement.
9687
9688         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
9689         is also fine.
9690
9691         * expression.cs (Binary.ResolveOperator): Check error result in
9692         two places.
9693
9694         use brtrue/brfalse directly and avoid compares to null.
9695
9696 2002-08-02  Martin Baulig  <martin@gnome.org>
9697
9698         * class.cs (TypeContainer.Define): Define all nested interfaces here.
9699         Fixes bug #28407, added test-155.cs.
9700
9701 2002-08-01  Martin Baulig  <martin@gnome.org>
9702
9703         * class.cs (Event.EmitDefaultMethod): Make this work with static
9704         events.  Fixes #28311, added verify-3.cs.
9705
9706 2002-08-01  Martin Baulig  <martin@gnome.org>
9707
9708         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
9709         `is_disposable' fields.
9710         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
9711         `hm.is_disposable' if we're using the collection pattern.
9712         (Foreach.EmitCollectionForeach): Use the correct type for the
9713         enumerator's local variable, only emit the try/finally block if
9714         necessary (fixes #27713).
9715
9716 2002-08-01  Martin Baulig  <martin@gnome.org>
9717
9718         * ecore.cs (Expression.report118): Renamed to Error118 and made
9719         it public static.
9720
9721         * statement.cs (Throw.Resolve): Check whether the expression is of
9722         the correct type (CS0118) and whether the type derives from
9723         System.Exception (CS0155).
9724         (Catch.Resolve): New method.  Do the type lookup here and check
9725         whether it derives from System.Exception (CS0155).
9726         (Catch.CatchType, Catch.IsGeneral): New public properties.
9727
9728         * typemanager.cs (TypeManager.exception_type): Added.
9729
9730 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
9731
9732         * driver.cs: Updated About function.
9733
9734 2002-07-31  Martin Baulig  <martin@gnome.org>
9735
9736         Implemented Control Flow Analysis.
9737
9738         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
9739         (EmitContext.CurrentBranching): Added.
9740         (EmitContext.StartFlowBranching): Added.
9741         (EmitContext.EndFlowBranching): Added.
9742         (EmitContext.KillFlowBranching): Added.
9743         (EmitContext.IsVariableAssigned): Added.
9744         (EmitContext.SetVariableAssigned): Added.
9745         (EmitContext.IsParameterAssigned): Added.
9746         (EmitContext.SetParameterAssigned): Added.
9747         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
9748         Added control flow analysis stuff here.
9749
9750         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
9751         resolve the expression as lvalue.
9752         (LocalVariableReference.DoResolve): Check whether the variable has
9753         already been assigned.
9754         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
9755         the parameter as assigned here.
9756         (ParameterReference.DoResolve): Check whether the parameter has already
9757         been assigned.
9758         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
9759         expression as lvalue.
9760
9761         * statement.cs (FlowBranching): New class for the flow analysis code.
9762         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
9763         (LabeledStatement.IsDefined): New public property.
9764         (LabeledStatement.AddUsageVector): New public method to tell flow
9765         analyis that the label may be reached via a forward jump.
9766         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
9767         flow analysis.
9768         (VariableInfo.Number): New public field.  This is used by flow analysis
9769         to number all locals of a block.
9770         (Block.CountVariables): New public property.  This is the number of
9771         local variables in this block (including the locals from all parent
9772         blocks).
9773         (Block.EmitMeta): Number all the variables.
9774
9775         * statement.cs: Added flow analysis support to all classes.
9776
9777 2002-07-31  Martin Baulig  <martin@gnome.org>
9778
9779         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
9780         To get debugging messages, compile mcs with /define:MCS_DEBUG and
9781         then use this argument.
9782
9783         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
9784
9785         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
9786         use this to specify /define options.
9787
9788 2002-07-29  Martin Baulig  <martin@gnome.org>
9789
9790         * statement.cs (Fixed): Moved all code that does variable lookups
9791         and resolvings from Emit to Resolve.
9792
9793         * statement.cs (For): Moved all code that does variable lookups
9794         and resolvings from Emit to Resolve.
9795
9796         * statement.cs (Using): Moved all code that does variable lookups
9797         and resolvings from Emit to Resolve.
9798
9799 2002-07-29  Martin Baulig  <martin@gnome.org>
9800
9801         * attribute.cs (Attribute.Resolve): Explicitly catch a
9802         System.NullReferenceException when creating the
9803         CustromAttributeBuilder and report a different warning message.
9804
9805 2002-07-29  Martin Baulig  <martin@gnome.org>
9806
9807         * support.cs (ParameterData.ParameterName): Added method to
9808         get the name of a parameter.
9809
9810         * typemanager.cs (TypeManager.IsValueType): New public method.
9811
9812 2002-07-29  Martin Baulig  <martin@gnome.org>
9813
9814         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
9815         is a flag which specifies that it's either ref or out.
9816         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
9817         the out parameter to `out Parameter.Modifier mod', also set the
9818         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
9819
9820         * support.cs (InternalParameters.ParameterModifier): Distinguish
9821         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
9822         Parameter.Modifier.ISBYREF flag if it's either ref or out.
9823
9824         * expression.cs (Argument.GetParameterModifier): Distinguish
9825         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
9826         Parameter.Modifier.ISBYREF flag if it's either ref or out.
9827
9828 2002-07-29  Martin Baulig  <martin@gnome.org>
9829
9830         * expression.cs (ParameterReference.ParameterReference): Added
9831         `Location loc' argument to the constructor.
9832
9833         * cs-parser.jay: Pass location to ParameterReference.
9834
9835 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
9836
9837         * statement.cs (Try): Initialize the location.
9838
9839         * cs-parser.jay: pass location to Try.
9840
9841         * expression.cs (Unary.Reduce): Change the prototype to return
9842         whether a constant fold could be performed or not.  The result is
9843         returned in an out parameters.  In the case of Indirection and
9844         AddressOf, we want to perform the full tests.
9845
9846 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
9847
9848         * statement.cs (Statement.Emit): Flag dead code.
9849
9850 2002-07-27  Andrew Birkett  <andy@nobugs.org>
9851
9852         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
9853
9854 2002-07-27  Martin Baulig  <martin@gnome.org>
9855
9856         * class.cs (MethodData.Define): Put back call to
9857         TypeManager.AddMethod(), accidentally commented this out.
9858
9859         * report.cs (Debug): New public method to print debugging information,
9860         this is `[Conditional ("DEBUG")]'.
9861
9862 2002-07-26  Martin Baulig  <martin@gnome.org>
9863
9864         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
9865         (switch_statement): Push the current_block to the switch_stack and
9866         pop it again when we're done with the switch.
9867         (switch_section): The new block is a child of the current_block.
9868         Fixes bug #24007, added test-152.cs.
9869
9870 2002-07-27  Martin Baulig  <martin@gnome.org>
9871
9872         * expression.cs (Invocation.EmitArguments): When calling a varargs
9873         function with only its fixed arguments, we need to pass an empty
9874         array.
9875
9876 2002-07-27  Martin Baulig  <martin@gnome.org>
9877
9878         Mono 0.13 has been released.
9879
9880 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
9881
9882         * driver.cs: Rename --resource to --linkres, because that is what
9883         we do currently, we dont support --resource yet.
9884
9885         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
9886
9887 2002-07-25  Martin Baulig  <martin@gnome.org>
9888
9889         * class.cs (MethodData): New public class.  This is a `method builder'
9890         class for a method or one accessor of a Property/Indexer/Event.
9891         (MethodData.GetMethodFlags): Moved here from MemberBase.
9892         (MethodData.ApplyAttributes): Likewise.
9893         (MethodData.ApplyObsoleteAttribute): Likewise.
9894         (MethodData.ApplyConditionalAttribute): Likewise.
9895         (MethodData.ApplyDllImportAttribute): Likewise.
9896         (MethodData.CheckAbstractAndExternal): Likewise.
9897         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
9898         (MethodData.Emit): Formerly known as Method.Emit().
9899         (MemberBase): Moved everything which was specific to a single
9900         accessor/method to MethodData.
9901         (Method): Create a new MethodData and call Define() and Emit() on it.
9902         (Property, Indexer, Event): Create a new MethodData objects for each
9903         accessor and call Define() and Emit() on them.
9904
9905 2002-07-25  Martin Baulig  <martin@gnome.org>
9906
9907         Made MethodCore derive from MemberBase to reuse the code from there.
9908         MemberBase now also checks for attributes.
9909
9910         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
9911         (MemberBase.GetMethodFlags): Moved here from class Method and marked
9912         as virtual.
9913         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
9914         `CallingConventions cc' and `Attributes opt_attrs' arguments.
9915         (MemberBase.ApplyAttributes): New virtual method; applies the
9916         attributes to a method or accessor.
9917         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
9918         (MemberBase.ApplyConditionalAttribute): Likewise.
9919         (MemberBase.ApplyDllImportAttribute): Likewise.
9920         (MemberBase.CheckAbstractAndExternal): Likewise.
9921         (MethodCore.ParameterTypes): This is now a property instead of a
9922         method, it's initialized from DoDefineParameters().
9923         (MethodCore.ParameterInfo): Removed the set accessor.
9924         (MethodCore.DoDefineParameters): New protected virtual method to
9925         initialize ParameterTypes and ParameterInfo.
9926         (Method.GetReturnType): We can now simply return the MemberType.
9927         (Method.GetMethodFlags): Override the MemberBase version and add
9928         the conditional flags.
9929         (Method.CheckBase): Moved some code from Define() here, call
9930         DoDefineParameters() here.
9931         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
9932         here to avoid some larger code duplication.
9933         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
9934         ensure that abstract and external accessors don't declare a body.
9935
9936         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
9937         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
9938         lookup in the attribute's parent classes, so we need to abort as soon
9939         as we found the first match.
9940         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
9941         the attribute has no arguments.
9942
9943         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
9944         of a Method.
9945
9946 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9947
9948         * cs-parser.jay: reverted previous patch.
9949
9950 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9951
9952         * cs-parser.jay: fixed bug #22119.
9953
9954 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9955
9956         * attribute.cs: fixed compilation. The error was:
9957         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
9958         be assigned to before control leaves the current method."
9959         [FIXME:  Filed as bug #28186: MCS must report this error.]
9960
9961 2002-07-25  Martin Baulig  <martin@gnome.org>
9962
9963         * attribute.cs (Attribute.Conditional_GetConditionName): New static
9964         method to pull the condition name ouf of a Conditional attribute.
9965         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
9966         the obsolete message and error flag out of an Obsolete attribute.
9967
9968         * class.cs (Method.GetMethodFlags): New public method to get the
9969         TypeManager.MethodFlags for this method.
9970         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
9971         private methods.
9972         (Method.Define): Get and apply the Obsolete and Conditional attributes;
9973         if we're overriding a virtual function, set the new private variable
9974         `parent_method'; call the new TypeManager.AddMethod().
9975
9976         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
9977         the MethodBuilder and the Method in a PtrHashtable.
9978         (TypeManager.builder_to_method): Added for this purpose.
9979         (TypeManager.MethodFlags): Added IsObsoleteError.
9980         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
9981         Obsolete and Conditional arguments in MethodBuilders.  If we discover
9982         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
9983         the message from the attribute.
9984
9985 2002-07-24  Martin Baulig  <martin@gnome.org>
9986
9987         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
9988         preprocessor directives, ensure that the argument to #define/#undef is
9989         exactly one identifier and that it's actually an identifier.
9990
9991         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
9992         did not work ....
9993
9994 2002-07-24  Martin Baulig  <martin@gnome.org>
9995
9996         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
9997         initialize it to TypeManager.object_type in the constructor.
9998         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
9999         of the `hm.get_current' method if we're using the collection pattern.
10000         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
10001         for the explicit conversion to make it work when we're using the collection
10002         pattern and the `Current' property has a different return type than `object'.
10003         Fixes #27713.
10004
10005 2002-07-24  Martin Baulig  <martin@gnome.org>
10006
10007         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
10008         does not match, but don't report any errors.  This method is called in
10009         order for all methods in a MethodGroupExpr until a matching method is
10010         found, so we don't want to bail out if the first method doesn't match.
10011         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
10012         matches, report the 123.  Fixes #28070.
10013
10014 2002-07-24  Martin Baulig  <martin@gnome.org>
10015
10016         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
10017         TypeManager.TypeToCoreType() to the top of the method so the
10018         following equality checks will work.  Fixes #28107.
10019
10020 2002-07-24  Martin Baulig  <martin@gnome.org>
10021
10022         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
10023         operand is of type uint, and the other operand is of type sbyte,
10024         short or int, the operands are converted to type long." -
10025         Actually do what this comment already told us.  Fixes bug #28106,
10026         added test-150.cs.
10027
10028 2002-07-24  Martin Baulig  <martin@gnome.org>
10029
10030         * class.cs (MethodBase): New abstract class.  This is now a base
10031         class for Property, Indexer and Event to avoid some code duplication
10032         in their Define() and DefineMethods() methods.
10033         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
10034         generic methods for Define() and DefineMethods().
10035         (FieldBase): Derive from MemberBase, not MemberCore.
10036         (Property): Derive from MemberBase, not MemberCore.
10037         (Property.DefineMethod): Moved all the code from this method to the
10038         new MethodBase.DefineAccessor(), just call it with appropriate
10039         argumetnts.
10040         (Property.Define): Call the new Property.DoDefine(), this does some
10041         sanity checks and we don't need to duplicate the code everywhere.
10042         (Event): Derive from MemberBase, not MemberCore.
10043         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
10044         accessors, this will also make them work with interface events.
10045         (Indexer): Derive from MemberBase, not MemberCore.
10046         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
10047         (Indexer.Define): Use the new MethodBase functions.
10048
10049         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
10050         argument to the constructor.
10051         (Interface.FindMembers): Added support for interface events.
10052         (Interface.PopluateEvent): Implemented.
10053
10054         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
10055
10056 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
10057
10058         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
10059         but this is required to check for a method name being the same as
10060         the containing class.  
10061
10062         Handle this now.
10063
10064 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10065
10066         * interface.cs: initialize variable.
10067
10068 2002-07-23  Martin Baulig  <martin@gnome.org>
10069
10070         Implemented the IndexerName attribute in interfaces.
10071
10072         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
10073         name if this is an explicit interface implementation.
10074         (Indexer.InterfaceIndexerName): New public variable.  If we're
10075         implementing an interface indexer, this is the IndexerName in that
10076         interface.  Otherwise, it's the IndexerName.
10077         (Indexer.DefineMethod): If we're implementing interface indexer,
10078         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
10079         and Pending.ImplementIndexer methods.
10080         (Indexer.Define): Also define the PropertyBuilder if we're
10081         implementing an interface indexer and this is neither an explicit
10082         interface implementation nor do the IndexerName match the one in
10083         the interface.
10084
10085         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
10086         If a method is defined here, then we always need to create a proxy
10087         for it.  This is used when implementing interface indexers.
10088         (Pending.IsInterfaceIndexer): New public method.
10089         (Pending.ImplementIndexer): New public method.
10090         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
10091         This is used when implementing interface indexers to define a proxy
10092         if necessary.
10093         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
10094         define a proxy if necessary.
10095
10096         * interface.cs (Interface.IndexerName): New public variable.
10097         (Interface.PopulateIndexer): Set the IndexerName.
10098         (Interface.DefineIndexers): New private method.  Populate all the
10099         indexers and make sure their IndexerNames match.
10100
10101         * typemanager.cs (IndexerPropertyName): Added support for interface
10102         indexers.
10103
10104 2002-07-22  Martin Baulig  <martin@gnome.org>
10105
10106         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
10107         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
10108         ret if HasReturnLabel.
10109         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
10110         variables.
10111
10112         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
10113         and set the ec.LoopBeginTryCatchLevel.
10114         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
10115         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
10116         the current ec.TryCatchLevel, the branch goes out of an exception
10117         block.  In this case, we need to use Leave and not Br.
10118
10119 2002-07-22  Martin Baulig  <martin@gnome.org>
10120
10121         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
10122         block unless the block does not always return or it is contained in
10123         another try { ... } catch { ... } block.  Fixes bug #26506.
10124         Added verify-1.cs to the test suite.
10125
10126 2002-07-22  Martin Baulig  <martin@gnome.org>
10127
10128         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
10129         then we do not always return.  Fixes bug #24985.
10130
10131 2002-07-22  Martin Baulig  <martin@gnome.org>
10132
10133         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
10134         lookup on a per-class level; ie. walk up the class hierarchy until we
10135         found at least one applicable method, then choose the best among them.
10136         Fixes bug #24463 and test-29.cs.
10137
10138 2002-07-22  Martin Baulig  <martin@gnome.org>
10139
10140         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
10141         return types of the methods.  The return type is not part of the
10142         signature and we must not check it to make the `new' modifier work.
10143         Fixes bug #27999, also added test-147.cs.
10144         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
10145
10146         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
10147         on the method's return type.
10148
10149 2002-07-21  Martin Baulig  <martin@gnome.org>
10150
10151         * assign.cs: Make this work if the rightmost source is a constant and
10152         we need to do an implicit type conversion.  Also adding a few more tests
10153         to test-38.cs which should have caught this.
10154
10155         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
10156         target in the makefile for this.  The makefile.gnu is primarily intended
10157         for end-users who don't want to debug the compiler.
10158
10159 2002-07-21  Martin Baulig  <martin@gnome.org>
10160
10161         * assign.cs: Improved the Assign class so it can now handle embedded
10162         assignments (X = Y = Z = something).  As a side-effect this'll now also
10163         consume less local variables.  test-38.cs now passes with MCS, added
10164         a few new test cases to that test.
10165
10166 2002-07-20  Martin Baulig  <martin@gnome.org>
10167
10168         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
10169         instructions.  Fixes bug #27977, also added test-146.cs.
10170
10171 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10172
10173         * cs-tokenizer.cs: fixed getHex ().
10174
10175 2002-07-19  Martin Baulig  <martin@gnome.org>
10176
10177         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
10178         not Type.GetType() to lookup the array type.  This is needed when
10179         we're constructing an array of a user-defined type.
10180         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
10181         single-dimensional arrays, but also for single-dimensial arrays of
10182         type decimal.
10183
10184 2002-07-19  Martin Baulig  <martin@gnome.org>
10185
10186         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
10187         this function is called, it's not allowed to share LocalBuilders
10188         among ILGenerators.
10189
10190 2002-07-19  Martin Baulig  <martin@gnome.org>
10191
10192         * expression.cs (Argument.Resolve): Report an error 118 when trying
10193         to pass a type as argument.
10194
10195 2002-07-18  Martin Baulig  <martin@gnome.org>
10196
10197         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
10198         Conv_R_Un for the signed `long' type.
10199
10200 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
10201
10202         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
10203         `expr' for the temporary result, as that will fail if we do
10204         multiple resolves on the same expression.
10205
10206 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
10207
10208         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
10209         ec.TypeContainer for looking up aliases. 
10210
10211         * class.cs (TypeContainer): Remove LookupAlias from here.
10212
10213         * decl.cs (DeclSpace); Move here.
10214
10215 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
10216
10217         * class.cs (FindMembers): Only call filter if the constructor
10218         bulider is not null.
10219
10220         Also handle delegates in `NestedTypes' now.  Now we will perform
10221         type lookups using the standard resolution process.  This also
10222         fixes a bug.
10223
10224         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
10225         This uses Expressions (the limited kind that can be parsed by the
10226         tree) instead of strings.
10227
10228         * expression.cs (ComposedCast.ToString): Implement, used to flag
10229         errors since now we have to render expressions.
10230
10231         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
10232         FormArrayType. 
10233
10234         * ecore.cs (SimpleName.ToString): ditto.
10235
10236         * cs-parser.jay: Instead of using strings to assemble types, use
10237         Expressions to assemble the type (using SimpleName, ComposedCast,
10238         MemberAccess).  This should fix the type lookups in declarations,
10239         because we were using a different code path for this.
10240
10241         * statement.cs (Block.Resolve): Continue processing statements
10242         even when there is an error.
10243
10244 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
10245
10246         * class.cs (Event.Define): Also remove the `remove' method from
10247         the list of pending items.
10248
10249         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
10250         generate more compact code. 
10251
10252 2002-07-17  Martin Baulig  <martin@gnome.org>
10253
10254         * const.cs (Const.LookupConstantValue): Add support for constant
10255         `unchecked' and `checked' expressions.
10256         Also adding test case test-140.cs for this.
10257
10258 2002-07-17  Martin Baulig  <martin@gnome.org>
10259
10260         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
10261         check whether mi.ReturnType implements the IEnumerator interface; the
10262         `==' and the IsAssignableFrom() will fail in this situation.
10263
10264 2002-07-16  Ravi Pratap  <ravi@ximian.com>
10265
10266         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
10267         here too.
10268
10269 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10270
10271         * expression.cs: fixed bug #27811.
10272
10273 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
10274
10275         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
10276         Molaro: when we are a ref, the value already contains a pointer
10277         value, do not take the address of it.
10278
10279 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
10280         * removed mb-parser.jay and mb-tokenizer.cs
10281
10282 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
10283
10284         * expression.cs: check against the building corlib void type.
10285
10286 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
10287
10288         * ecore.cs: fix for valuetype static readonly fields: when 
10289         initializing them, we need their address, not the address of a copy.
10290
10291 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
10292
10293         * typemanager.cs: register also enum_type in corlib.
10294
10295 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
10296
10297         * class.cs: allow calling this (but not base) initializers in structs.
10298
10299 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
10300
10301         * ecore.cs: make sure we compare against the building base types
10302         in GetTypeSize ().
10303
10304 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
10305
10306         * typemanager.cs: fix TypeToCoreType() to handle void and object
10307         (corlib gets no more typerefs after this change).
10308
10309 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
10310
10311         * expression.cs (ArrayCreation.EmitArrayArguments): use
10312         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
10313
10314         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
10315         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
10316         array indexes, the runtime actually forbids them.
10317
10318         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
10319         for array arguments here.
10320
10321         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
10322         instead of the default for ValueTypes.
10323
10324         (New.DoEmit): Use IsValueType instead of
10325         IsSubclassOf (value_type)
10326         (New.DoResolve): ditto.
10327         (Invocation.EmitCall): ditto.
10328
10329         * assign.cs (Assign): ditto.
10330
10331         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
10332         Statements *are* currently doing part of their resolution during
10333         Emit.  
10334
10335         Expressions do always resolve during resolve, but statements are
10336         only required to propagate resolution to their children.
10337
10338 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
10339
10340         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
10341
10342         (LoadAssembly): Do not add the dll if it is already specified
10343
10344         (MainDriver): Add the System directory to the link path at the end,
10345         after all the other -L arguments. 
10346
10347         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
10348         wrong opcode for loading bytes and bools (ldelem.i1 instead of
10349         ldelem.u1) and using the opposite for sbytes.
10350
10351         This fixes Digger, and we can finally run it.
10352
10353         * driver.cs (UnixParseOption): Move the option parsing here.  
10354         (CSCParseOption): Implement CSC-like parsing of options.
10355
10356         We now support both modes of operation, the old Unix way, and the
10357         new CSC-like way.  This should help those who wanted to make cross
10358         platform makefiles.
10359
10360         The only thing broken is that /r:, /reference: and /lib: are not
10361         implemented, because I want to make those have the same semantics
10362         as the CSC compiler has, and kill once and for all the confussion
10363         around this.   Will be doing this tomorrow.
10364
10365         * statement.cs (Unsafe.Resolve): The state is checked during
10366         resolve, not emit, so we have to set the flags for IsUnsfe here.
10367
10368 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
10369
10370         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
10371         not catch the Error_ObjectRefRequired in SimpleName (as it is
10372         possible to have a class/instance variable name that later gets
10373         deambiguated), we have to check this here.      
10374
10375 2002-07-10  Ravi Pratap  <ravi@ximian.com>
10376
10377         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
10378         make static and put into Expression.
10379
10380         (Event.Define): Register the private field of the event with the 
10381         TypeManager so that GetFieldFromEvent can get at it.
10382
10383         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
10384         keep track of the private field associated with an event which
10385         has no accessors.
10386
10387         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
10388         private field.
10389
10390         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
10391
10392 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
10393
10394         * expression.cs (Binary.EmitBranchable): this routine emits the
10395         Binary expression in a branchable context.  This basically means:
10396         we need to branch somewhere, not just get the value on the stack.
10397
10398         This works together with Statement.EmitBoolExpression.
10399
10400         * statement.cs (Statement.EmitBoolExpression): Use
10401         EmitBranchable. 
10402
10403 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
10404
10405         * statement.cs (For): Reduce the number of jumps in loops.
10406
10407         (For): Implement loop inversion for the For statement.
10408
10409         (Break): We can be breaking out of a Try/Catch controlled section
10410         (foreach might have an implicit try/catch clause), so we need to
10411         use Leave instead of Br.
10412
10413         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
10414         now).  If the instace expression supports IMemoryLocation, we use
10415         the AddressOf method from the IMemoryLocation to extract the
10416         address instead of emitting the instance.
10417
10418         This showed up with `This', as we were emitting the instance
10419         always (Emit) instead of the Address of This.  Particularly
10420         interesting when This is a value type, as we dont want the Emit
10421         effect (which was to load the object).
10422
10423 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
10424
10425         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
10426
10427         * statement.cs (Checked): Set the CheckedState during the resolve
10428         process too, as the ConvCast operations track the checked state on
10429         the resolve process, and not emit.
10430
10431         * cs-parser.jay (namespace_member_declaration): Flag that we have
10432         found a declaration when we do.  This is used to flag error 1529
10433
10434         * driver.cs: Report ok when we display the help only.
10435
10436 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
10437
10438         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
10439
10440 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
10441
10442         * cs-tokenizer.cs (define): We also have to track locally the
10443         defines.  AllDefines is just used for the Conditional Attribute,
10444         but we also need the local defines for the current source code. 
10445
10446 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
10447
10448         * statement.cs (While, For, Do): These loops can exit through a
10449         Break statement, use this information to tell whether the
10450         statement is the last piece of code.
10451
10452         (Break): Flag that we break.
10453
10454         * codegen.cs (EmitContexts): New `Breaks' state variable.
10455
10456 2002-07-03  Martin Baulig  <martin@gnome.org>
10457
10458         * class.cs (TypeContainer.MethodModifiersValid): Allow override
10459         modifiers in method declarations in structs.  Otherwise, you won't
10460         be able to override things like Object.Equals().
10461
10462 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
10463
10464         * class.cs (Method, Property, Indexer): Do not allow the public
10465         modifier to be used in explicit interface implementations.
10466
10467         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
10468         override modifiers in method declarations in structs
10469
10470 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
10471
10472         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
10473         integer or real overflow, report an error
10474
10475 2002-07-02  Martin Baulig  <martin@gnome.org>
10476
10477         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
10478         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
10479         to tell the runtime about our newly created System.Object and
10480         System.ValueType types.
10481
10482 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
10483
10484         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
10485         struct instead of Ldarg/Starg.
10486
10487 2002-07-02  Martin Baulig  <martin@gnome.org>
10488
10489         * expression.cs (Indirection.Indirection): Call
10490         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
10491
10492 2002-07-02  Martin Baulig  <martin@gnome.org>
10493
10494         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
10495         ValueType, call TypeManager.TypeToCoreType() on it.
10496         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
10497         the OpCodes.Newarr argument.
10498
10499 2002-07-02  Martin Baulig  <martin@gnome.org>
10500
10501         * expression.cs (Invocation.EmitCall): When compiling corlib,
10502         replace all calls to the system's System.Array type to calls to
10503         the newly created one.
10504
10505         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
10506         System.Array methods.
10507         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
10508         from the system's System.Array type which must be replaced.
10509
10510 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
10511
10512         * typemanager.cs: load unverifiable_code_ctor so we can build
10513         corlib using the correct type. Avoid using GetTypeCode() with
10514         TypeBuilders.
10515         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
10516         TypeManager.object_type to allow building corlib.
10517
10518 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
10519
10520         * ecore.cs: handle System.Enum separately in LoadFromPtr().
10521
10522 2002-07-01  Martin Baulig  <martin@gnome.org>
10523
10524         * class.cs: Make the last change actually work, we need to check
10525         whether `ifaces != null' to avoid a crash.
10526
10527 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
10528
10529         * class.cs: when we build structs without fields that implement
10530         interfaces, we need to add the interfaces separately, since there is
10531         no API to both set the size and add the interfaces at type creation
10532         time.
10533
10534 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
10535
10536         * expression.cs: the dimension arguments to the array constructors
10537         need to be converted if they are a long.
10538
10539 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
10540
10541         * class.cs: don't emit ldarg.0 if there is no parent constructor
10542         (fixes showstopper for corlib).
10543
10544 2002-06-29  Martin Baulig  <martin@gnome.org>
10545
10546         MCS now compiles corlib on GNU/Linux :-)
10547
10548         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
10549         ie. check for MethodImplOptions.InternalCall.
10550
10551         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
10552         and TypeManager.attribute_type are null, so we must explicitly check
10553         whether parent is not null to find out whether it's an attribute type.
10554         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
10555         and SetBuilder, not only if the property is neither abstract nor external.
10556         This is necessary to set the MethodImplOptions on the accessor methods.
10557         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
10558         SetBuilder, see Property.Emit().
10559
10560         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
10561         populate "System.Object", "System.ValueType" and "System.Attribute" since
10562         they've already been populated from BootCorlib_PopulateCoreTypes().
10563
10564 2002-06-29  Martin Baulig  <martin@gnome.org>
10565
10566         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
10567         is the NullLiteral, we also need to make sure that target_type is not
10568         an enum type.   
10569
10570 2002-06-29  Martin Baulig  <martin@gnome.org>
10571
10572         * rootcontext.cs (RootContext.ResolveCore): We must initialize
10573         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
10574         before calling BootstrapCorlib_ResolveDelegate ().
10575
10576 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10577
10578         * statement.cs: fixed build-breaker. All tests passed ok.
10579
10580 2002-06-27  Martin Baulig  <martin@gnome.org>
10581
10582         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
10583         for System.Decimal when compiling corlib.
10584
10585 2002-06-27  Martin Baulig  <martin@gnome.org>
10586
10587         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
10588         switch blocks which contain nothing but a default clause.
10589
10590 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
10591
10592        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
10593
10594 2002-06-27  Martin Baulig  <martin@gnome.org>
10595
10596         * ecore.cs (PropertyExpr.PropertyExpr): Call
10597         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
10598
10599         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
10600         is already a TypeBuilder.
10601
10602 2002-06-27  Martin Baulig  <martin@gnome.org>
10603
10604         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
10605         `target_type == TypeManager.array_type', not IsAssignableFrom() in
10606         the "from an array-type to System.Array" case.  This makes it work
10607         when compiling corlib.
10608
10609 2002-06-27  Martin Baulig  <martin@gnome.org>
10610
10611         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
10612         non-static PropertyExpr, set its InstanceExpression.  This makes
10613         the `ICollection.Count' property work in System/Array.cs.
10614
10615 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
10616
10617         * driver.cs: Made error handling more consistent.  Errors now
10618         tracked by Report class, so many methods which used to return int
10619         now return void.  Main() now prints success/failure and 
10620         errors/warnings message.
10621
10622         Renamed '--probe' compiler argument to '--expect-error'.  Removed
10623         the magic number return values (123 and 124).  Now, if the
10624         expected error occurs, the compiler exits with success (exit value
10625         0).  If the compilation completes without seeing that particular
10626         error, the compiler exits with failure (exit value 1).  The
10627         makefile in mcs/errors has been changed to handle the new behaviour.
10628
10629         * report.cs: Made 'expected error' number a property and renamed
10630         it from 'Probe' to 'ExpectedError'.
10631
10632         * genericparser.cs: Removed error handling support, since it is
10633         now all done by Report class.
10634
10635         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
10636         class, so parse() no longer returns an int.
10637
10638         * namespace.cs: Use Report.Error instead of GenericParser.error
10639
10640 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
10641
10642         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
10643         TypeContainer.AddOperator): At the front of the list put the
10644         explicit implementations, so they get resolved/defined first. 
10645
10646 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
10647
10648         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
10649         interface type is implemented by this TypeContainer.  Used during
10650         explicit interface implementation.
10651
10652         (Property.Define, Indexer.Define, Method.Define): Validate that
10653         the given interface in the explicit implementation is one of the
10654         base classes for the containing type.
10655
10656         Also if we are explicitly implementing an interface, but there is
10657         no match in the pending implementation table, report an error.
10658
10659         (Property.Define): Only define the property if we are
10660         not explicitly implementing a property from an interface.  Use the
10661         correct name also for those properties (the same CSC uses,
10662         although that is really not needed).
10663
10664         (Property.Emit): Do not emit attributes for explicitly implemented
10665         properties, as there is no TypeBuilder.
10666
10667         (Indexer.Emit): ditto.
10668
10669         Hiding then means that we do not really *implement* a pending
10670         implementation, which makes code fail.
10671
10672 2002-06-22  Martin Baulig  <martin@gnome.org>
10673
10674         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
10675         the return value of Object.GetType().  [FIXME: we need to do this whenever
10676         we get a type back from the reflection library].
10677
10678 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
10679
10680         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
10681
10682 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
10683
10684         * attribute.cs: Return null if we can not look up the type.
10685
10686         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
10687         the interface types found.
10688
10689         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
10690         interface types found.
10691
10692         * typemanager.cs (GetInterfaces): Make this routine returns alll
10693         the interfaces and work around the lame differences between
10694         System.Type and System.Reflection.Emit.TypeBuilder in the results
10695         result for GetInterfaces.
10696
10697         (ExpandInterfaces): Given an array of interface types, expand and
10698         eliminate repeated ocurrences of an interface.  This expands in
10699         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
10700         be IA, IB, IC.
10701
10702 2002-06-21  Martin Baulig  <martin@gnome.org>
10703
10704         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
10705         on System.Enum.
10706
10707 2002-06-21  Martin Baulig  <martin@gnome.org>
10708
10709         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
10710         and called with one of the core types, return the corresponding typebuilder for
10711         that type.
10712
10713         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
10714         element type.
10715
10716 2002-06-21  Martin Baulig  <martin@gnome.org>
10717
10718         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
10719         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
10720         (Expression.ConvertReferenceExplicit): Likewise.
10721
10722         * expression.cs (ElementAccess.DoResolve): Likewise.
10723         (ElementAccess.DoResolveLValue): Likewise.
10724
10725 2002-06-10  Martin Baulig  <martin@gnome.org>
10726
10727         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
10728         add the "value" parameter to the parameter list.
10729
10730         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
10731         to our caller.
10732
10733 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
10734
10735         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
10736         the argument to an int, uint, long or ulong, per the spec.  Also
10737         catch negative constants in array creation.
10738
10739 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
10740
10741         * class.cs: do not allow the same interface to appear twice in
10742         the definition list.
10743
10744 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
10745
10746         * ecore.cs: don't use ldlen with System.Array.
10747
10748 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
10749
10750         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
10751
10752 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
10753
10754         * modifiers.cs: produce correct field attributes for protected
10755         internal. Easy fix so miguel can work on ther harder stuff:-)
10756
10757 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
10758
10759         * pending.cs: New file.  Move the code from class.cs here.
10760         Support clearning the pending flag for all methods (when not doing
10761         explicit interface implementation).
10762
10763 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
10764
10765         * rootcontext.cs: added a couple more types needed to bootstrap.
10766
10767 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
10768
10769         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
10770         constructor in the type, instead of any constructor in the type
10771         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
10772         a bug in the Mono runtime when applying the params attribute). 
10773
10774 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
10775         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
10776
10777 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
10778
10779         * expression.cs (Unary.ResolveOperator): Use TypeManager
10780         to resolve the type.
10781
10782 2002-06-13  Ravi Pratap  <ravi@ximian.com>
10783
10784         * cs-parser.jay (enum_member_declaration): Pass in the attributes
10785         attached.
10786
10787         * enum.cs (AddEnumMember): Add support to store the attributes associated 
10788         with each member too.
10789
10790         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
10791         field builders too - this takes care of the enum member case.
10792
10793 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
10794
10795         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
10796         address-of operator on both value types and pointers.
10797
10798 2002-06-10  Martin Baulig  <martin@gnome.org>
10799
10800         * interface.cs (Interface.PopulateIndexer): Add the indexer's
10801         PropertyBuilder to the `property_builders' list.
10802
10803         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
10804         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
10805         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
10806         find any indexers which are inherited from an interface.
10807
10808 2002-06-09  Martin Baulig  <martin@gnome.org>
10809
10810         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
10811         the same type as the constant if necessary.  There's also a test-130.cs
10812         for this.
10813
10814         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
10815
10816         * typemanager.cs (TypeManager.ChangeType): Previously known as
10817         Enum.ChangeEnumType().
10818
10819 2002-06-09  Martin Baulig  <martin@gnome.org>
10820
10821         * expression.cs (Cast.TryReduce): Added support for consts.
10822
10823 2002-06-08  Ravi Pratap  <ravi@ximian.com>
10824
10825         * class.cs (Accessor): Hold attributes information so we can pass
10826         it along.
10827
10828         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
10829         Modify to pass in attributes attached to the methods.
10830
10831         (add_accessor_declaration, remove_accessor_declaration): Ditto.
10832
10833         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
10834         to handle the Accessor kind :-)
10835
10836         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
10837
10838 2002-06-08  Martin Baulig  <martin@gnome.org>
10839
10840         * expression.cs (Unary.TryReduceNegative): Added support for
10841         ULongConstants.
10842
10843 2002-06-08  Martin Baulig  <martin@gnome.org>
10844
10845         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
10846         name can't be found in the `defined_names' - the caller will do a
10847         MemberLookup in this case and thus find methods in System.Enum
10848         such as Enum.IsDefined().
10849
10850 2002-06-08  Martin Baulig  <martin@gnome.org>
10851
10852         * enum.cs (Enum.ChangeEnumType): This is a custom version of
10853         Convert.ChangeType() which works with TypeBuilder created types.
10854         (Enum.LookupEnumValue, Enum.Define): Use it here.
10855
10856         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
10857         `TypeBuilder.BaseType != null' check.
10858         (TypeContainer.FindMembers): Only lookup parent members if we
10859         actually have a parent.
10860         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
10861         (ConstructorInitializer.Resolve): Likewise.
10862
10863         * interface.cs (Interface.FindMembers): Added
10864         `TypeBuilder.BaseType != null' check.
10865
10866         * rootcontext.cs (RootContext.ResolveCore): Added
10867         "System.Runtime.CompilerServices.IndexerNameAttribute" to
10868         classes_second_stage.
10869
10870         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
10871         debug_type and trace_type when compiling with --nostdlib.       
10872
10873 2002-06-07  Martin Baulig  <martin@gnome.org>
10874
10875         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
10876         (AddField): Set it to true when adding a non-static field.
10877         (DefineType): Use `have_nonstatic_fields' to find out whether we
10878         have non-static fields, not `Fields != null'.
10879
10880 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
10881
10882         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
10883         dereferencing a null on the static-field code path)
10884
10885 2002-05-30  Martin Baulig  <martin@gnome.org>
10886
10887         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
10888         to take command line arguments.  Use reflection to call the new
10889         custom `Initialize' function on the symbol writer and pass it the
10890         command line arguments.
10891
10892         * driver.cs (--debug-args): New command line argument to pass command
10893         line arguments to the symbol writer.
10894
10895 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
10896
10897         * assign.cs (DoResolve): Forgot to do the implicit conversion to
10898         the target type for indexers and properties.  Thanks to Joe for
10899         catching this.
10900
10901 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
10902
10903         * typemanager.cs (MethodFlags): returns the method flags
10904         (Obsolete/ShouldIgnore) that control warning emission and whether
10905         the invocation should be made, or ignored. 
10906
10907         * expression.cs (Invocation.Emit): Remove previous hack, we should
10908         not do this on matching a base type, we should do this based on an attribute
10909
10910         Only emit calls to System.Diagnostics.Debug and
10911         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
10912         on the command line.
10913
10914         * rootcontext.cs: Global settings for tracing and debugging.
10915
10916         * cs-tokenizer.cs (define): New utility function to track
10917         defines.   Set the global settings for TRACE and DEBUG if found.
10918
10919 2002-05-25  Ravi Pratap  <ravi@ximian.com>
10920
10921         * interface.cs (Populate*): Pass in the TypeContainer as well as
10922         the DeclSpace as parameters so that we can create EmitContexts and
10923         then use that to apply attributes etc.
10924
10925         (PopulateMethod, PopulateEvent, PopulateProperty)
10926         (PopulateIndexer): Apply attributes everywhere.
10927
10928         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
10929         etc.
10930
10931         (ApplyAttributes): Update accordingly.
10932
10933         We now apply interface attributes for all members too.
10934
10935 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
10936
10937         * class.cs (Indexer.Define); Correctly check if we are explicit
10938         implementation (instead of checking the Name for a ".", we
10939         directly look up if the InterfaceType was specified).
10940
10941         Delay the creation of the PropertyBuilder.
10942
10943         Only create the PropertyBuilder if we are not an explicit
10944         interface implementation.   This means that explicit interface
10945         implementation members do not participate in regular function
10946         lookups, and hence fixes another major ambiguity problem in
10947         overload resolution (that was the visible effect).
10948
10949         (DefineMethod): Return whether we are doing an interface
10950         implementation. 
10951
10952         * typemanager.cs: Temporary hack until we get attributes in
10953         interfaces (Ravi is working on that) and we get IndexerName
10954         support in interfaces.
10955
10956         * interface.cs: Register the indexers as properties.
10957
10958         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
10959         warning, I have verified that this is a bug in the .NET runtime
10960         (JavaScript suffers of the same problem).
10961
10962         * typemanager.cs (MemberLookup): When looking up members for
10963         interfaces, the parent of an interface is the implicit
10964         System.Object (so we succeed in searches of Object methods in an
10965         interface method invocation.  Example:  IEnumerable x;  x.ToString
10966         ()) 
10967
10968 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
10969
10970         * class.cs (Event): Events should also register if they do
10971         implement the methods that an interface requires.
10972
10973         * typemanager.cs (MemberLookup); use the new GetInterfaces
10974         method. 
10975
10976         (GetInterfaces): The code used to lookup interfaces for a type is
10977         used in more than one place, factor it here. 
10978
10979         * driver.cs: Track the errors at the bottom of the file, we kept
10980         on going.
10981
10982         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
10983         instance if the method we are calling is static!
10984
10985 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
10986
10987         * attribute.cs (ApplyAttributes): Make this function filter out
10988         the IndexerName attribute (as that attribute in reality is never
10989         applied) and return the string constant for the IndexerName
10990         attribute. 
10991
10992         * class.cs (TypeContainer.Emit): Validate that all the indexers
10993         have the same IndexerName attribute, and if so, set the
10994         DefaultName attribute on the class. 
10995
10996         * typemanager.cs: The return value might contain other stuff (not
10997         only methods).  For instance, consider a method with an "Item"
10998         property and an Item method.
10999
11000         * class.cs: If there is a problem with the parameter types,
11001         return. 
11002
11003 2002-05-24  Ravi Pratap  <ravi@ximian.com>
11004
11005         * ecore.cs (ImplicitConversionExists): Wrapper function which also
11006         looks at user defined conversion after making a call to 
11007         StandardConversionExists - we need this for overload resolution.
11008
11009         * expression.cs : Update accordingly the various method calls.
11010
11011         This fixes 2 bugs filed against implicit user defined conversions 
11012
11013 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
11014
11015         * statement.cs: Track the result of the assignment.
11016
11017 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
11018
11019         * expression.cs (MemberAccess): Improved error reporting for
11020         inaccessible members.
11021
11022 2002-05-22  Martin Baulig  <martin@gnome.org>
11023
11024         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
11025         itself with debugging support.
11026
11027 2002-05-22  Martin Baulig  <martin@gnome.org>
11028
11029         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
11030         Removed, this isn't needed anymore.
11031
11032 2002-05-20  Martin Baulig  <martin@gnome.org>
11033
11034         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
11035         be underlying type for an enum.
11036
11037 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
11038
11039         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
11040         that splits out the loading of just the core types.
11041
11042         * rootcontext.cs (ResolveCore): Split the struct resolution in
11043         two, so we can load the enumeration underlying types before any
11044         enums are used.
11045
11046         * expression.cs (Is): Bandaid until we fix properly Switch (see
11047         bug #24985 for details).
11048
11049         * typemanager.cs (ImplementsInterface): The hashtable will contain
11050         a null if there are no interfaces implemented.
11051
11052 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
11053
11054         * cs-parser.jay (indexer_declarator): It is fine to have array
11055         parameters
11056
11057 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
11058
11059         * typemanager.cs: (RegisterBuilder): New function used to register
11060         TypeBuilders that implement interfaces.  Since
11061         TypeBuilder.GetInterfaces (as usual) does not work with lame
11062         Reflection.Emit. 
11063         (AddUserType): register interfaces.
11064
11065         (ImplementsInterface): Use the builder_to_ifaces hash if we are
11066         dealing with TypeBuilder.  Also, arrays are showing up as
11067         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
11068         methods can not be invoked on them!
11069
11070         * ecore.cs (ExplicitReferenceConversionExists): Made public.
11071         (ImplicitReferenceConversionExists): Split out from
11072         StandardConversionExists. 
11073
11074         * expression.cs (As): We were only implementing one of the three
11075         cases for the as operator.  We now implement them all.
11076         (Is): Implement the various other cases for Is as well.
11077
11078         * typemanager.cs (CACHE): New define used to control if we want or
11079         not the FindMembers cache.  Seems to have a negative impact on
11080         performance currently
11081
11082         (MemberLookup): Nested types have full acess to
11083         enclosing type members
11084
11085         Remove code that coped with instance/static returns for events, we
11086         now catch this in RealFindMembers.
11087
11088         (RealFindMembers): only perform static lookup if the instance
11089         lookup did not return a type or an event.  
11090
11091 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
11092
11093         * assign.cs (CompoundAssign): We pass more semantic information
11094         now to Compound Assignments than we did before: now we have all
11095         the information at hand, and now we resolve the target *before* we
11096         do the expression expansion, which allows the "CacheValue" method
11097         to have the effect we intended (before, a [x] += 1 would generate
11098         two differen ArrayAccess expressions from the ElementAccess,
11099         during the resolution process).
11100
11101         (CompoundAssign.DoResolve): Resolve target and original_source here.
11102
11103 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
11104
11105         * expression.cs (ArrayAccess): dropped debugging information. 
11106
11107         * typemanager.cs: Small bug fix: I was always returning i_members,
11108         instead of one of i_members or s_members (depending on which had
11109         the content).
11110
11111         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
11112         method is invoked before any code generation takes place, and it
11113         is a mechanism to inform that the expression will be invoked more
11114         than once, and that the method should use temporary values to
11115         avoid having side effects
11116
11117         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
11118
11119         * ecore.cs (Expression.CacheTemporaries): Provide empty default
11120         implementation.
11121
11122         * expression.cs (Indirection, ArrayAccess): Add support for
11123         CacheTemporaries in these two bad boys. 
11124
11125         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
11126         ldobj or ldind_ref.  
11127         (StoreFromPtr): Handle stobj as well.
11128
11129         * expression.cs (UnaryMutator): Share more code.
11130
11131         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
11132         down: I was not tracking the Filter function as well, which
11133         was affecting the results of the cache.
11134
11135 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
11136
11137         * attribute.cs: Remove the hack to handle the CharSet property on
11138         StructLayouts. 
11139
11140 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
11141
11142         * attribute.cs (DoResolve): More uglyness, we now only try to
11143         resolve the attribute partially, to extract the CharSet
11144         information (only if we are a StructLayout attribute).  Otherwise 
11145
11146         (GetExtraTypeInfo): Add some code to conditionally kill in the
11147         future this.   I am more and more convinced that the .NET
11148         framework has special code to handle the attribute setting on
11149         certain elements.
11150
11151         * expression.cs (IsParamsMethodApplicable): Revert my previous
11152         foreach change here, it was wrong.
11153
11154 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
11155
11156         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
11157         (pp_expr): do not abort on unknown input, just return.
11158         (eval): abort if there are pending chars.
11159
11160         * attribute.cs (Attribute.Resolve): Positional parameters are
11161         optional.  Deal with that case.
11162
11163         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
11164         the Ansi/Unicode/Auto information for the type.
11165
11166         (TypeContainer.DefineType): instantiate the EmitContext here, as
11167         we will be using it during the type definition (to resolve
11168         attributes) and during the emit phase.
11169
11170         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
11171         to pull type information out of the attributes
11172
11173         (Attribute.Resolve): track the constructor builder, and allow for
11174         multiple invocations (structs and classes will use this).
11175
11176         * ecore.cs (MemberLookupFinal): new version with all the
11177         parameters customizable.
11178
11179         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
11180         constructors.  Return if the result value is null (as the error
11181         would have been flagged already by MemberLookupFinal)
11182
11183         Do not allow instances of abstract classes or interfaces to be
11184         created.
11185
11186         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
11187         We have to compare the assembly property here when dealing with
11188         FamANDAssem and Assembly access modifiers, because we might be
11189         creating an assembly from *modules* (that means that we are not
11190         getting TypeBuilders for types defined in other modules that are
11191         part of this assembly).
11192
11193         (Method.Emit): If the method is marked abstract and has a body,
11194         emit an error. 
11195
11196         (TypeContainer.DefineMembers): If both the defined member and the
11197         parent name match are methods, then do not emit any warnings: let
11198         the Method.Define routine take care of flagging warnings.  But if
11199         there is a mismatch (method overrides something else, or method is
11200         overriwritten by something, then emit warning).
11201
11202         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
11203         set to null, this means `do not check for the return type on the
11204         signature'. 
11205
11206         (Method.Define): set the return type for the method signature to
11207         null, so that we get methods with the same name and parameters and
11208         different return types.  This is used to flag warning 114 (you are
11209         hiding a method, and you probably want to use the new/override
11210         keywords instead).
11211
11212         * typemanager.cs (MemberLookup): Implemented proper access
11213         control, closing a long standing set of bug reports.  The problem
11214         was that the Framework only has two bits: Public and NonPublic,
11215         and NonPublic includes private and protected methods, but we need
11216         to enforce the FamANDAssem, FamOrAssem and Family. 
11217
11218 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
11219
11220         * statement.cs (GotoCase): Return true: Ammounts to giving up
11221         knowledge on whether we return or not, and letting the other case
11222         be responsible for it.
11223
11224 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
11225
11226         * driver.cs: Do not load directories for each file processed, only
11227         do it if there is a pattern.
11228
11229         * ecore.cs: Report readonly assigns here as well, as we might have
11230         been resolved only by MemberAccess.
11231
11232         (SimpleName.SimpleNameResolve): Also be useful for LValue
11233         resolution.   We need this to propagate assign to local readonly variables
11234
11235         * typemanager.cs: Use a ptrhashtable for the criteria, because we
11236         do not want to reuse potential criteria memory.
11237
11238         * class.cs (MyEventBuilder): Set reflected_type;
11239
11240         * ecore.cs (Constantify): Added support for constifying bools.
11241
11242         (RootContext.LookupType): Added a cache for values looked up in
11243         the declaration space.
11244
11245         * typemanager.cs (FindMembers): Now is a front-end to
11246         RealFindMembers, and provides a two-level hashtable-based cache to
11247         the request.  
11248
11249         15% performance improvement: from 22.5 to 19.2 seconds.
11250
11251         * expression.cs (IsParamsMethodApplicable): use foreach.
11252         (Invocation.DoResolve): ditto.
11253         (New.DoResolve): ditto.
11254         (ArrayCreation.DoResolve): ditto.
11255
11256         * ecore.cs (FindMostEncompassingType): use foreach.
11257
11258         * delegate.cs (NewDelegate.DoResolve): Use foreach
11259
11260         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
11261         (RemoveMethods): use foreach.
11262
11263         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
11264         nested foreach statements instead of for, and also break out of
11265         the inner loop once a match is found.
11266
11267         (Invocation.OverloadResolve): Use foreach, simplify the code. 
11268
11269 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
11270
11271         * cfold.cs (BinaryFold): During an enumeration evaluation context,
11272         we actually unwrap the expression to allow for extra information
11273         to be extracted. 
11274
11275         * expression.cs: Use Shr_Un on unsigned operations. 
11276
11277 2002-05-08  Ravi Pratap  <ravi@ximian.com>
11278
11279         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
11280         applicable operators was not being considered correctly. This closes
11281         the bug Miguel reported.
11282
11283 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
11284
11285         * attribute.cs: check that the type derives from System.Attribute
11286         and report the correct error in that case (moved the duplicate code to
11287         its own method, too).
11288
11289 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
11290
11291         * attribute.cs: lookup attribute type name as the spec says: first the
11292         bare attribute name and then name + "Attribute" (nant compiles with
11293         mcs after this fix).
11294
11295 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
11296
11297         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
11298         Because of the way we parse things, we should try to see if a
11299         UIntConstant can fit in an integer.
11300
11301 2002-05-07  Ravi Pratap  <ravi@ximian.com>
11302
11303         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
11304         when we are in an explicit context.
11305
11306         (ConvertReferenceExplicit): When converting from Iface type S to Class
11307         T make sure the rules are implemented as an OR.
11308
11309         * parameter.cs (ParameterType): Make it a property for now although the
11310         purpose really isn't anything immediate.
11311
11312         * expression.cs (Is*Applicable): Do better checking on the parameter type
11313         of a ref/out parameter. The ones from the system assemblies are already 
11314         marked with the correct type so we don't need to do any correction.
11315
11316         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
11317         the object type is standard too so include that.
11318
11319 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
11320
11321         * ecore.cs (StandardConversionExists): Augment with missing code:
11322         deal with IntConstant, LongConstants and Enumerations.
11323
11324         * assign.cs: Report the error, instead of failing silently
11325
11326         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
11327         typecontainer that they are declared, because the
11328         typecontainer/namespace will have the list of using clauses that
11329         need to be applied.
11330
11331         Assembly Attributes were escaping the normal registration
11332         mechanism. 
11333
11334         (EmitCode): Apply attributes within an EmitContext that represents
11335         the container they were declared on.
11336
11337         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
11338
11339 2002-05-06  Ravi Pratap  <ravi@ximian.com>
11340
11341         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
11342         Revamp completely - make much cleaner as we now operate only
11343         on a set of Types.
11344
11345         (FindMostSpecificSource, FindMostSpecificTarget): New methods
11346         to implement the logic detailed in the spec more correctly.
11347
11348         (UserDefinedConversion): Update accordingly.
11349
11350 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
11351
11352         * statement.cs: Return flow analysis information up.
11353
11354         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
11355         and the default.
11356
11357         (token): Do not consume an extra character before calling
11358         decimal_digits.
11359
11360 2002-05-06  Piers Haken <piersh@friskit.com>
11361
11362         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
11363
11364 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
11365
11366         * class.cs (Constructor.Emit): Set the IsStatic flag in the
11367         EmitContext during the instance constructor initializer
11368         resolution, to stop access to instance variables.
11369
11370         This is mandated by the spec, last paragraph of the `constructor
11371         initializers' section. 
11372
11373 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
11374
11375         * cs-parser.jay, class.cs (Accessor): new class used to represent
11376         an accessor (get or set).  In the past we used `null' to represent
11377         a missing accessor.  But this is ambiguous because there was no
11378         way to tell in abstract indexers/properties if one of them was
11379         specified.
11380
11381         Now there is a way of addressing that.
11382
11383         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
11384         instead of FindMembers.
11385
11386         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
11387         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
11388
11389         * attribute.cs: Treat indexers and properties as the same in terms
11390         of applying attributes
11391
11392         * ecore.cs (FindMostEncompassedType): Use statically initialized
11393         EmptyExpressions()s like we do elsewhere to avoid creating useless
11394         objects (and we take this out of the tight loop).
11395
11396         (GetConversionOperators): Move the code to extract the actual
11397         operators to a separate routine to clean things up.
11398
11399 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
11400
11401         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
11402         events are always registered FieldBuilders.
11403
11404         * class.cs (FieldBase): New class shared by Fields 
11405
11406         * delegate.cs: If we are a toplevel delegate, use our full name.
11407         If we are a nested delegate, then only use our tail name.
11408
11409 2002-05-02  Ravi Pratap  <ravi@ximian.com>
11410
11411         * expression.cs (IsApplicable): Ensure that we add the "&" to
11412         ref/out types before comparing it with the type of the argument.
11413
11414         (IsParamsMethodApplicable): Ditto.
11415
11416         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
11417         silly me ;-)
11418
11419         * delegate.cs : Handle the case when we have more than one applicable
11420         method. Flag an error only when we finish checking all.
11421
11422 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
11423
11424         * expression.cs: Add support for boolean static initializers.
11425
11426 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
11427
11428         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
11429
11430         * parameter.cs (ComputeParameterTypes,
11431         ComputeAndDefineParameterTypes): Better error handling: now we
11432         clear the `types' cache if we fail during any of the type lookups.
11433         We also return the status code correctly to our caller
11434
11435         * delegate.cs: If we fail to define a delegate, abort the extra
11436         steps. 
11437
11438         * expression.cs (Binary.ResolveOperator): for
11439         operator==(object,object) and operator !=(object, object) we also
11440         have to verify that there is an implicit conversion from one to
11441         the other.
11442
11443         (ArrayAccess.DoResolve): Array Access can operate on
11444         non-variables. 
11445
11446 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
11447
11448         * assign.cs (CompoundAssign): A new class used as a "flag" that
11449         the assignment actually is happening as part of a compound
11450         assignment operator.
11451
11452         During compound assignment, a few new rules exist to enable things
11453         like:
11454
11455         byte b |= 1 + 2
11456
11457         From the spec:
11458
11459         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
11460         to the type of x) if y is implicitly convertible to the type of x,
11461         and the operator is a builtin operator and the return type of the
11462         operator is explicitly convertible to the type of x. 
11463
11464         * rootcontext.cs: Reset warning level to 2.  4 catches various
11465         "interesting" features in mcs, we must clean this up at some
11466         point, but currently am trying to kill other bugs ;-)
11467
11468         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
11469         in container classes as well.  
11470
11471         * expression.cs (Binary.ResolveOperator): Handle string case
11472         before anything else (as operator overloading does emit an error
11473         before doing anything else).
11474
11475         This code could go away when we move to a table driven model, but
11476         i could not come up with a good plan last night.
11477
11478 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
11479
11480         * typemanager.cs (CSharpName): reimplementation using regex.
11481         * class.cs: added null check for fields in Emit
11482         * rootcontext.cs: set warninglevel to 4
11483
11484 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
11485
11486         * typemanager.cs (CSharpName): reimplemented with Lupus
11487         suggestion.
11488
11489 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
11490
11491         * statement.cs (If): correclty implement Resolve, because we were
11492         not catching sem errors in there.  The same process is needed
11493         everywhere else. 
11494         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
11495
11496
11497         (Statement.Warning_DeadCodeFound): Factorize code.
11498         (While): Report dead code here too.
11499
11500         (Statement): Added Resolve virtual method to allow
11501         for resolution split from the emit code.
11502
11503 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
11504
11505         * statement.cs (EmitBoolExpression): No longer try to resolve the
11506         expression here.    
11507         (MakeBoolean): New utility function that resolve, implicitly
11508         converts to boolean and tags the expression. 
11509
11510
11511         (If, Do): Implement dead code elimination.
11512         (While): Implement loop inversion
11513
11514         (Do, While, For, If): Resolve the expression prior to calling our
11515         code generation.
11516
11517 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
11518
11519         * class.cs:
11520           - added method Report28 (warning: program has more than one entry point)
11521           - added method IsEntryPoint, implements paragraph 10.1 of the spec
11522           - modified method Method.Define, the part at the end of the method
11523
11524         * rootcontext.cs: added static public Location EntryPointLocation;
11525           
11526         * ../errors/cs0028.cs : Add test case for the above warning.              
11527
11528         * typemanager.cs:
11529           - modified method CSharpName to allow arrays of primitive type to
11530             be printed nicely (e.g. instead of System.Int32[][] it now prints
11531             int[][])
11532           - added method CSharpSignature: returns the signature of a method
11533             in string format to be used in reporting errors, warnings, etc.
11534
11535         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
11536         with String.Empty.
11537
11538 2002-04-26  Ravi Pratap  <ravi@ximian.com>
11539
11540         * delegate.cs (Define): Fix extremely silly bug where I was
11541         setting the type of the 'object' parameter of the BeginInvoke
11542         method to System.IAsyncResult instead of System.Object ;-)
11543
11544 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
11545
11546         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
11547         here. 
11548
11549         (Constructor.Emit): return if we fail to initialize the
11550         constructor.  Another door closed!  
11551
11552         * expression.cs (New.DoResolve): Improve error message (from -6 to
11553         1501).  Use DeclaredOnly lookup to find the exact constructor.
11554
11555         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
11556         loop.  This is useful.
11557
11558         * cs-parser.jay: Adjust the default parameters so that destructors
11559         have the proper signature.
11560
11561 2002-04-26  Martin Baulig  <martin@gnome.org>
11562
11563         * driver.cs (LoadAssembly): If `assembly' contains any characters
11564         which are only valid in path names and not in assembly names
11565         (currently slash, backslash and point), use Assembly.LoadFrom ()
11566         instead of Assembly.Load () on the `assembly' (before iteration
11567         over the link_paths).
11568
11569 2002-04-26  Martin Baulig  <martin@gnome.org>
11570
11571         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
11572
11573 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
11574
11575         * class.cs (Property): use the new typemanager.MemberLookup
11576
11577         (TypeContainer.MemberLookup): Implement using the
11578         TypeManager.MemberLookup now. 
11579
11580         * typemanager.cs: Make MemberLookup a function of the TypeManager,
11581         and return MemberInfos, so that these can be used without an
11582         EmitContext (what we had before).
11583
11584 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
11585
11586         * expression.cs: Fix the case where the argument to params if the
11587         type of the params.  I omitted handling this before.   Fixed
11588
11589 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
11590
11591         * driver.cs: Call BootCorlib_PopulateCoreType
11592
11593         * class.cs (Property.CheckBase): Check for properties only, not
11594         for all members. 
11595
11596         * interface.cs: Temporary hack: try/catch around the
11597         CustomAttributeBuilder, because I am getting an exception that I
11598         do not understand.
11599
11600         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
11601         types whose definitions are required to be there (attributes are
11602         defined before standard types).
11603
11604         Compute definitions as we boot the various types, as they are used
11605         immediately (value_type class will need object_type, but if we do
11606         not initialize object_type, we will pass a null, which will let
11607         the runtime pick the System.Object from the existing corlib, which
11608         is not what we want).
11609
11610 2002-04-22  Patrik Torstensson <totte@labs2.com>
11611
11612         * cs-tokenizer.cs: fixed a number of trim() issues.
11613
11614 2002-04-22  Ravi Pratap  <ravi@ximian.com>
11615
11616         * expression.cs (Argument.Type): Ensure that we return the correct
11617         type when we have out or ref parameters [in which case we 
11618         append a "&"].
11619
11620 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
11621
11622         * class.cs (Property, Indexer): Allow extern modifier in there. 
11623
11624         * typemanager.cs (InitBaseTypes): Initializes object_type and
11625         value_type, since those will be used early on during the bootstrap
11626         process to compile corlib.
11627
11628         (InitCoreTypes): Move code from here to InitBaseTypes.
11629
11630 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
11631
11632         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
11633         single-dimension arrays as using the ldlen opcode.  
11634
11635         Daniel Lewis discovered this optimization.  
11636
11637         * typemanager.cs: Add signature for System.Array::get_Length
11638
11639 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11640
11641         * statement.cs: report the error when the foreach does not apply to an
11642         array nor a collection.
11643
11644 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
11645
11646         * expression.cs: Add implicit conversions to the operator ~.
11647
11648         * constant.cs (DecimalConstant.Emit): Emit decimal value.
11649
11650         * typemanager.cs: Locate the decimal constructor.
11651
11652 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11653
11654         * attribute.cs: use the new property of TypeOf.
11655         * expression.cs: added 'get' property around typearg.
11656
11657         These changes fix a build breaker reported by NickD. Is this the
11658         correct way to fix?  If not, please, revert my changes and make it
11659         work :-).
11660
11661 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
11662
11663         * attribute.cs: Add support for typeof in attribute invocations.
11664         I am not sure that this is right though.
11665
11666 2002-04-14  Duncan Mak  <duncan@ximian.com>
11667
11668         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
11669         Binary.Operator.Division case.
11670
11671 2002-04-13  Ravi Pratap  <ravi@ximian.com>
11672
11673         * class.cs (DefineType): Ensure that we do a proper check on
11674         attribute types and also register it with the TypeManager.
11675
11676         (TypeContainer.Targets): The default for attribute types is
11677         AttributeTargets.All.
11678
11679         * attribute.cs (ApplyAttributes): Registering the attribute type
11680         is done elsewhere, not when we discover we have a Usage attribute.
11681
11682 2002-04-12  Ravi Pratap  <ravi@ximian.com>
11683
11684         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
11685         and get rid of is_delegate parameter.
11686
11687         * everywhere : update.
11688
11689 2002-04-12  Ravi Pratap  <ravi@ximian.com>
11690
11691         * cs-parser.jay (compilation_unit): Revamp completely to use
11692         some new ideas that I got from Rhys' grammar to solve the problems
11693         with assembly level attributes.
11694
11695         (outer_declaration): New grammar production.
11696
11697         (attribute_sections): Add.
11698
11699         (opt_attributes): Base on attribute_sections
11700
11701         (namespace_declaration): Allow opt_attributes to tackle the case
11702         when we have assembly level attributes - we are clever in this
11703         regard now ;-)
11704
11705         * attribute.cs (ApplyAttributes): Do not worry about assembly 
11706         attributes in the non-global context.
11707
11708         * rootcontext.cs (AddGlobalAttributes): Go back to using this
11709         instead of SetGlobalAttributes.
11710
11711         * class.cs, rootcontext.cs : Ensure we define and generate 
11712         attribute types before anything else.
11713
11714         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
11715         and flag the new error -20 for the case when the attribute type
11716         does not have valid targets specified. csc does not catch this.
11717
11718         * ../errors/errors.txt : update for error # -20
11719
11720 2002-04-11  Ravi Pratap  <ravi@ximian.com>
11721
11722         * support.cs (InternalParameters.ParameterModifier): Do some null
11723         checking and return sane values.
11724
11725         * class.cs (Method.Define): If we are a PInvoke method, ensure
11726         that we are static and extern. Report error # 601
11727
11728         * ../errors/cs0601.cs : Add test case for the above error.
11729
11730 2002-04-07  Ravi Pratap  <ravi@ximian.com>
11731
11732         * rootcontext.cs (attribute_types): We need to keep type of
11733         all attribute types separately and emit code for them first.
11734
11735         (RegisterAttribute) : Implement.
11736
11737         * class.cs (DefineType): Check if the current Type is a custom
11738         attribute type and register it accordingly.
11739
11740         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
11741         adding the first attribute twice and rename to
11742
11743         (SetGlobalAttributes): this.
11744
11745         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
11746         lookups.
11747
11748         * attribute.cs (ApplyAttributes): Take an additional argument telling us
11749         if we are processing global arguments. Hmm, I am unsure of this.
11750
11751 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11752
11753         * expression.cs: added static array of strings to avoid calling
11754         Enum.ToString () for Operator in Binary. Significant recover of
11755         performance.
11756
11757 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
11758
11759         * class.cs (FindMembers): Allow the Builders of the various
11760         members to be null.  If they are skip them.  This only happens
11761         during the PInvoke declaration.
11762
11763 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
11764
11765         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
11766         failure, so we do not keep going afterwards.
11767
11768         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
11769         wanted to pass `false' as the `is_delegate' argument.  If this is
11770         the case, why not use delegate_type == null to mean `is_delegate =
11771         false' and anything else as is_delegate = true.
11772
11773 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
11774
11775         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
11776         code for the section, not the beginning of the tests.
11777
11778 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
11779
11780         * cfold.cs: Handle operator + (Enum x, Underlying x) 
11781
11782         * expression.cs (Binary): same.  Warn about errors where we have
11783         Enum/Enum in operator + as well.
11784
11785 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
11786
11787         * statement.cs:
11788                 - added support for switch(bool)
11789                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
11790                 - add TableSwitchEmit() to handle table-based switch statements
11791
11792 2002-04-05  Ravi Pratap  <ravi@ximian.com>
11793
11794         * expression.cs (Invocation.OverloadResolve): Factor out code which
11795         does parameter compatibility checking with arguments so that we can 
11796         re-use the code even from Delegate.VerifyApplicability
11797
11798         (VerifyArgumentsCompat): Move above code here.
11799
11800         * delegate.cs (VerifyApplicability): Get rid of duplicate code
11801         and instead make a call to the above method.
11802
11803 2002-03-31  Ravi Pratap  <ravi@ximian.com>
11804
11805         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
11806         We use it to keep track of classes which are attribute types.
11807
11808 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
11809
11810         * delegate.cs (Delegate.Define): Correctly define the types in the
11811         presence of fixed and array parameters.
11812
11813         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
11814         doing FindMembers.
11815
11816         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
11817         include NonPublic after the first iteration.
11818
11819         * class.cs (Indexer.CheckBase): Only check if both parents are
11820         non-null. 
11821
11822         * cs-parser.jay (accessor_body): If empty, set to null.
11823
11824         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
11825         same code path here to resolve constants names that we did have in
11826         MemberAccess.DoResolve.  There is too much code duplicated here.
11827
11828 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
11829
11830         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
11831
11832         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
11833         to MakeUnionSet.
11834
11835         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
11836         tokens, numbers and strings.
11837
11838         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
11839         parenthesis.
11840
11841         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
11842         asyncronous parameters and the regular parameters.  
11843
11844         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
11845         specify the target directory.
11846
11847         * expression.cs: (This.DoResolve): Simplify
11848         (As.Emit): Optimize, do not generate IsInst if the expression is
11849         always of the given type.
11850
11851         (Is.DoResolve): Bug fix, we were reporting both always/never for
11852         the is expression.
11853
11854         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
11855         creating too many unnecessary arrays.
11856
11857 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
11858
11859         * class.cs (EmitFieldInitializer): Use Assign expression to assign
11860         fields instead of rolling our own initializer.   Takes care of all
11861         implicit conversions, and drops unnecessary static checks/argument.
11862
11863 2002-03-31  Dick Porter  <dick@ximian.com>
11864
11865         * driver.cs: use the GetDirectories() return values properly, and
11866         use "/" as path separator.
11867
11868 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
11869
11870         * expression.cs (Unary): Optimize - - expr into expr.
11871         (Binary): Optimize a + (-b) into a -b.
11872
11873         * codegen.cs (CodeGen): Made all methods static.
11874
11875 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
11876
11877         * rootcontext.cs: 
11878
11879         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
11880         TypeBuilder property.
11881
11882         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
11883         instead. 
11884
11885         * tree.cs: Removed the various RecordXXXX, and replaced with a
11886         single RecordDecl.  Removed all the accessor methods, and just
11887         left a single access point Type 
11888
11889         * enum.cs: Rename DefineEnum to DefineType.
11890
11891         * decl.cs: New abstract method `DefineType' used to unify the
11892         Defines for Enumerations, Interfaces, TypeContainers and
11893         Delegates.
11894
11895         (FindType): Moved LookupInterfaceOrClass here.  Moved the
11896         LookupBaseClasses method that used to live in class.cs and
11897         interface.cs here, and renamed to FindType.
11898
11899         * delegate.cs: Implement DefineType.  Take advantage of the
11900         refactored pattern for locating the parent builder without taking
11901         the parent_builder argument (which we know does not work if we are
11902         nested, and triggering a toplevel definition).
11903
11904 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
11905
11906         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
11907         accessibility of a member has changed during override and report
11908         an error if so.
11909
11910         * class.cs (Method.Define, Property.Define): Only complain on
11911         overrides if the method is private, any other accessibility is
11912         fine (and since we just checked the permission is the same, we are
11913         good to go).
11914
11915         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
11916         and elif are processed always.  The other pre-processing
11917         directives are only processed if we are "taking" the path
11918
11919 2002-03-29  Martin Baulig  <martin@gnome.org>
11920
11921         * class.cs (Method.Emit): Only emit symbolic debugging info if the
11922         current location is not Null.
11923
11924         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
11925         a separate method so we can profile it.
11926
11927         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
11928         `span.Seconds' are just seconds, but no minutes or hours.
11929         (MainDriver): Profile the CodeGen.SaveSymbols calls.
11930
11931 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
11932
11933         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
11934         Remove the gratuitous set of Final:
11935
11936                                 // If an interface implementation, then we can set Final.
11937                                 if (((flags & MethodAttributes.Abstract) == 0) &&
11938                                     implementing.DeclaringType.IsInterface)
11939                                         flags |= MethodAttributes.Final;
11940
11941         I do not know what I was smoking when I used that.
11942
11943
11944         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
11945         step into fixing the name resolution issues for delegates and
11946         unifying the toplevel name resolution.
11947
11948 2002-03-28  Martin Baulig  <martin@gnome.org>
11949
11950         * class.cs (Method.Emit): If we have a symbol writer, call its
11951         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
11952         tell it about the current method.
11953
11954         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
11955         writer that we're going to emit the first byte of IL code for a new
11956         statement (a new source line).
11957         (EmitContext.EmitTopBlock): If we have a symbol writer, call
11958         EmitContext.Mark() before emitting any code.
11959
11960         * location.cs (SymbolDocument): Return null when we're Null.
11961
11962         * statement.cs (Statement): Moved the `Location loc' variable here.
11963         (Statement.EmitBoolExpression): If we have a symbol writer, call
11964         ec.Mark() before emitting any code to tell it that we're at the
11965         beginning of a new statement.
11966         (StatementExpression): Added `Location' argument to the constructor.
11967         (Block): Added public readonly variable `StartLocation' and public
11968         variable `EndLocation'.  The latter is to be set using SetEndLocation().
11969         (Block): Added constructor which takes a start and end location.
11970         (Block.SetEndLocation): New method. This sets the end location.
11971         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
11972         local variables we create.
11973         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
11974         each statement and do also mark the begin and end of the block.
11975
11976         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
11977         tell it the current lexer.Location, use Location.Null for the end of the
11978         block.
11979         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
11980         current block, set its end location using SetEndLocation().
11981         (statement_expression): StatementExpression constructor now takes the
11982         lexer.Location as additional argument.
11983         (for_statement, declare_local_variables): Likewise.
11984         (declare_local_variables): When creating a new implicit block, use the
11985         new Block constructor and pass it the lexer.Location.
11986
11987 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
11988
11989         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
11990         members also on the parent interfaces recursively.
11991
11992 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
11993
11994         * report.cs: Use new formats, since Gonzalo finished the missing
11995         bits. 
11996
11997         * expression.cs (Binary.ResolveOperator): added missing operator|
11998         operator& and operator^ for bool/bool.
11999
12000         * cs-parser.jay: CheckDef now takes a Location argument that is
12001         used to report errors more precisly (instead of reporting the end
12002         of a definition, we try to track something which is a lot closer
12003         to the source of the problem).
12004
12005         * cs-tokenizer.cs: Track global token use, so we can properly flag
12006         the use of #define/#undef after the first token has been seen.
12007
12008         Also, rename the reportXXXX to Error_DescriptiveName
12009
12010         * decl.cs (DeclSpace.IsTopLevel): Move property here from
12011         TypeContainer, so that Enum and Interface can use this too.
12012
12013         * class.cs (TypeContainer.LookupInterfaceOrClass,
12014         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
12015         `builder' argument.  Typically this was used to pass the parent
12016         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
12017         the definition).  
12018
12019         The problem is that a nested class could trigger the definition of
12020         a toplevel class, and the builder would be obviously wrong in that
12021         case. 
12022
12023         So we drop this argument, and we compute dynamically the
12024         TypeBuilder/ModuleBuilder (the correct information was available
12025         to us anyways from DeclSpace.Parent)
12026
12027         * interface.cs (Interface.DefineInterface): Drop builder
12028         parameter cleanup like class.cs
12029
12030         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
12031         like class.cs
12032
12033         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
12034         values. 
12035
12036         (Try.Emit): Propagate the returns value from the statement.
12037
12038         (Return.Emit): Even if we are leavning 
12039
12040         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
12041
12042         * modifiers.cs: Fix the computation of MethodAttributes flags.
12043
12044 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
12045
12046         * driver.cs: allow compilation of files that start with '/'.
12047         Add a default case when checking the argument of --target.
12048
12049 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
12050
12051         * interface.cs: Implement the same search algorithm for types in
12052         the interface code.
12053
12054         * delegate.cs: Do not allow multiple definition.
12055
12056         * Recovered ChangeLog that got accidentally amputated
12057
12058         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
12059
12060         * rootcontext.cs: Load manually enum to allow core classes to
12061         contain enumerations.
12062
12063         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
12064         Update to new static methods in TypeManager.
12065
12066         * typemanager.cs (GetMethod, GetConstructor): Use our
12067         implementation of FindMembers to find the members, since during
12068         corlib compilation, the types are TypeBuilders and GetMethod and
12069         GetConstructor do not work.
12070
12071         Make all methods in TypeManager static.
12072
12073         (InitCodeHelpers): Split the functionality from
12074         the InitCodeTypes function.
12075
12076         * driver.cs: Call InitCodeHelpers after we have populated the
12077         types. 
12078
12079         * cs-parser.jay (delegate_declaration): we did not used to compute
12080         the delegate name correctly for void delegates.
12081
12082 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
12083
12084         * rootcontext.cs (RootContext): Init the interface_resolve_order
12085         and type_container_resolve_order always.
12086
12087         (ResolveCore, BootstrapCorlib_ResolveClass,
12088         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
12089         compiler when compiling with --nostdlib
12090
12091         * class.cs (TypeContainer.DefineType): Check that our parent is
12092         not null.  This test is most important when we are bootstraping
12093         the core types.
12094
12095         * codegen.cs: Split out the symbol writing code.
12096
12097 2002-03-25  Martin Baulig  <martin@gnome.org>
12098
12099         * driver.cs (-g): Made -g an alias for --debug.
12100
12101 2002-03-24  Martin Baulig  <martin@gnome.org>
12102
12103         * codegen.cs (SymbolWriter): New public variable. Returns the
12104         current symbol writer.
12105         (CodeGen): Added `bool want_debugging_support' argument to the
12106          constructor. If true, tell the ModuleBuild that we want debugging
12107         support and ask it for the ISymbolWriter.
12108         (Save): If we have a symbol writer, call it's Close() method after
12109         saving the assembly.
12110
12111         * driver.c (--debug): New command line argument to create a
12112         debugger information file.
12113
12114         * location.cs (SymbolDocument): New public property. Returns an
12115         ISymbolDocumentWriter object for the current source file or null
12116         if we don't have a symbol writer.
12117
12118 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
12119
12120         * driver.cs (LoadAssembly): Correctly return when all the paths
12121         have been tried and not before.
12122
12123         * statement.cs (Switch.Emit): return the actual coverage for this
12124         statement (returns/not-returns)
12125
12126         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
12127         switch of the statement if we are the last switch section.  That
12128         kills two problems: try/catch problems (we used to emit an empty
12129         nop at the end) and switch statements where all branches would
12130         return. 
12131
12132 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
12133
12134         * driver.cs: Add default assemblies (the equivalent to the
12135         Microsoft CSC.RSP file)
12136
12137         * cs-tokenizer.cs: When updating `cols and setting it to zero,
12138         also update tokens_seen and set it to false.
12139
12140         * driver.cs: Implement --recurse for Mike.
12141
12142         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
12143         correctly splitting out the paths.
12144
12145 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
12146
12147         * interface.cs (Interface.PopulateProperty): Instead of using
12148         `parent' as the declaration space for the set parameters, use
12149         `this' 
12150
12151         * support.cs (InternalParameters): InternalParameters constructor
12152         takes a DeclSpace instead of a TypeContainer.
12153
12154         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
12155         types are being initialized, load the address of it before calling
12156         the function.  
12157
12158         (New): Provide a mechanism to disable the generation of local
12159         value type temporaries when the caller will be providing us with
12160         an address to store it.
12161
12162         (ArrayCreation.EmitDynamicInitializers): Use it.
12163
12164 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
12165
12166         * expression.cs (Invocation.EmitArguments): Only probe for array
12167         property if there is more than one argument.  Sorry about that.
12168
12169         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
12170         empty param arrays.
12171
12172         * class.cs (Method.LabelParameters): Fix incorrect code path that
12173         prevented the `ParamArrayAttribute' from being applied to the
12174         params attribute.
12175
12176 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
12177
12178         * support.cs (ReflectionParameters): Correctly compute whether the
12179         last argument is a params array.  Fixes the problem with
12180         string.Split ('a')
12181
12182         * typemanager.cs: Make the assemblies array always be non-null
12183         (empty, but non-null)
12184
12185         * tree.cs (RecordDecl): New function that abstracts the recording
12186         of names.  This reports error 101, and provides a pointer to the
12187         previous declaration.  Fixes a crash in the compiler.
12188
12189         * cs-parser.jay (constructor_declaration): Update to new grammar,
12190         and provide a constructor_body that can be empty.
12191
12192 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
12193
12194         * driver.cs: Add support for --resources.
12195
12196         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
12197         Make all types for the various array helper methods be integer.
12198
12199         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
12200         CheckState to ConvCast.
12201
12202         (ConvCast): Now it takes a `checked' state argument, to avoid
12203         depending on the emit context for the conversion, and just using
12204         the resolve time setting.
12205
12206         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
12207         instead of Invocation.EmitArguments.  We do not emit the original
12208         arguments, instead we emit those which have been converted to
12209         unsigned int expressions.
12210
12211         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
12212
12213         * codegen.cs: ditto.
12214
12215         * expression.cs (LocalVariableReference): Drop the use of the
12216         Store function that depended on the variable index.
12217
12218         * statement.cs (VariableInfo): Drop the `Idx' property from this
12219         class, as this is not taking into account the indexes for
12220         temporaries tat we generate during the execution, getting the
12221         indexes wrong.
12222
12223         * class.cs: First emit class initializers, then call the parent
12224         constructor. 
12225
12226         * expression.cs (Binary): Fix opcode emision.
12227         (UnaryMutator.EmitCode): Support checked code generation
12228
12229         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
12230         matches for events for both the Static and Instance scans,
12231         pointing to the same element.   Fix that.
12232
12233 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
12234
12235         * rootcontext.cs (ResolveTree): Always set the
12236         interface_resolve_order, because nested interfaces will be calling
12237         into us.
12238
12239         * class.cs (GetInterfaceOrClass): Track the same resolution
12240         process used by TypeManager.LookupType.  This fixes the nested
12241         type lookups in class declarations (separate path from
12242         LookupType). 
12243
12244         (TypeContainer.DefineType): Also define nested interfaces.
12245         (TypeContainer.RegisterOrder): New public function used to
12246         register the order in which child interfaces need to be closed.
12247
12248         Nested interfaces need to be closed after their parents have been
12249         created. 
12250
12251         * interface.cs (InterfaceAttr): Put all the logic for computing
12252         the interface attribute here. 
12253
12254         (DefineInterface): Register our interface order with the
12255         RootContext or with the TypeContainer depending on the case.
12256
12257 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
12258
12259         * cs-parser.jay: rework foreach statement to work with the new
12260         changes to the policy on SimpleNames.
12261
12262         * report.cs: support Stacktrace on warnings as well.
12263
12264         * makefile: drop --unsafe and /unsafe from the compile.
12265
12266 2002-03-13  Ravi Pratap  <ravi@ximian.com>
12267
12268         * ecore.cs (StandardConversionExists): Modify to take an Expression
12269         as the first parameter. Ensure we do null -> reference type conversion
12270         checking.
12271
12272         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
12273         temporary Expression objects.
12274
12275 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
12276
12277         * interface.cs: workaround bug in method overloading resolution
12278         (there is already a bugzilla bug for it).
12279
12280 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
12281
12282         We could also solve this problem by having a separate path for
12283         performing type lookups, instead of DoResolve, we could have a
12284         ResolveType entry point, and only participating pieces of the
12285         production (simplename, deref, array) would implement this. 
12286
12287         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
12288         signal SimpleName to only resolve type names and not attempt to
12289         resolve anything else.
12290
12291         * expression.cs (Cast): Set the flag.
12292
12293         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
12294
12295         * class.cs: Only report 108 if there is no `new' modifier.
12296
12297         * cs-parser.jay: rework foreach statement to work with the new
12298         changes to the policy on SimpleNames.
12299         
12300         * report.cs: support Stacktrace on warnings as well.
12301
12302         * makefile: drop --unsafe and /unsafe from the compile.
12303
12304 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
12305
12306         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
12307         lookups here, instead of doing that at parse time.  This means
12308         that our grammar will not introduce `LocalVariableReferences' as
12309         expressions at this point.  That solves the problem of code like
12310         this:
12311
12312         class X {
12313            static void Main ()
12314            { int X = 1;
12315             { X x = null }}}
12316
12317         This is only half the fix.  The full fix requires parameters to
12318         also be handled in this way.
12319
12320         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
12321         makes the use more obvious of the DeclSpace.  The
12322         ec.TypeContainer.TypeBuilder is now only used to pull the
12323         TypeBuilder for it.
12324
12325         My theory is that I can get rid of the TypeBuilder completely from
12326         the EmitContext, and have typecasts where it is used (from
12327         DeclSpace to where it matters).  
12328
12329         The only pending problem is that the code that implements Aliases
12330         is on TypeContainer, and probably should go in DeclSpace.
12331
12332         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
12333         lookups here, instead of doing that at parse time.  This means
12334         that our grammar will not introduce `LocalVariableReferences' as
12335         expressions at this point.  That solves the problem of code like
12336         this:
12337
12338         class X {
12339            static void Main ()
12340            { int X = 1;
12341             { X x = null }}}
12342
12343         This is only half the fix.  The full fix requires parameters to
12344         also be handled in this way.
12345
12346         * class.cs (Property.DefineMethod): When implementing an interface
12347         method, set newslot, when implementing an abstract method, do not
12348         set the flag (before we tried never setting it, or always setting
12349         it, which is the difference).
12350         (Indexer.DefineMethod): same.
12351         (Method.DefineMethod): same.
12352
12353         * ecore.cs: Only set the status used flag if we get back a Field.
12354
12355         * attribute.cs: Temporary hack, so Paolo can keep working.
12356
12357 2002-03-08  Ravi Pratap  <ravi@ximian.com>
12358
12359         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
12360         the unmanaged type in the case we have a MarshalAs attribute.
12361
12362         (Resolve): Handle the case when we are parsing the special MarshalAs
12363         attribute [we need to store the unmanaged type to use later]
12364
12365         * typemanager.cs (marshal_as_attr_type): Built in type for the 
12366         MarshalAs Attribute.
12367
12368         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
12369         on parameters and accordingly set the marshalling info.
12370
12371 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
12372
12373         * class.cs: Optimizing slightly by removing redundant code after
12374         we switched to the `NoTypes' return value.
12375         (Property.DefineMethod): use NoTypes here too.
12376
12377         This fixes the bug I introduced in my last batch of changes.
12378
12379 2002-03-05  Ravi Pratap  <ravi@ximian.com>
12380
12381         * tree.cs (RecordEnum): Add. We now keep track of enums too.
12382
12383         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
12384         Enums since those are types too. 
12385
12386         * cs-parser.jay (enum_declaration): Record enums as we parse them.
12387
12388         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
12389         thanks to a call during the lookup process.
12390
12391 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
12392
12393         * statement.cs (Foreach): Lots of work to accomodate a particular
12394         kind of foreach statement that I had not kept in mind.  It is
12395         possible to have foreachs on classes that provide a GetEnumerator
12396         method that return objects that implement the "pattern" for using
12397         a foreach, there is no need to support GetEnumerator
12398         specifically. 
12399
12400         This is needed to compile nant.
12401
12402         * decl.cs: Only report 114 if the member is not `Finalize' and if
12403         the warning level is at least 2.
12404
12405         * class.cs: Moved the compare function from Method to
12406         MethodSignature. 
12407
12408         (MethodSignature.InheritableMemberSignatureCompare): Add new
12409         filter function that is used to extract inheritable methods from a
12410         class. 
12411
12412         (Method.Define): Use the new `inheritable_method_signature_filter'
12413         delegate
12414
12415         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
12416         command. 
12417
12418 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
12419
12420         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
12421
12422         * cs-parser.jay: Add opt_semicolon to the interface declaration.
12423
12424         * expression.cs: Pass location information to
12425         ConvertImplicitStandard. 
12426
12427         * class.cs: Added debugging code to track return values from
12428         interfaces. 
12429
12430 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
12431
12432         * expression.cs (Is.DoResolve): If either side of the `is' is an
12433         interface, do not flag the warning.
12434
12435         * ecore.cs (ImplicitReferenceConversion): We need a separate test
12436         for interfaces
12437
12438         * report.cs: Allow for --fatal to be used with --probe.
12439
12440         * typemanager.cs (NoTypes): Move the definition for the empty Type
12441         array here. 
12442
12443         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
12444         properties. 
12445         (TypeContainer.DefineProxy): New function used to proxy to parent
12446         implementations when implementing interfaces.
12447         (TypeContainer.ParentImplements): used to lookup if our parent
12448         implements a public function that is required by an interface.
12449         (TypeContainer.VerifyPendingMethods): Hook this up.
12450
12451         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
12452         `modules' and `assemblies' arraylists into arrays.  We only grow
12453         these are the very early start up of the program, so this improves
12454         the speedof LookupType (nicely measured).
12455
12456         * expression.cs (MakeByteBlob): Replaced unsafe code with
12457         BitConverter, as suggested by Paolo.
12458
12459         * cfold.cs (ConstantFold.Binary): Special case: perform constant
12460         folding of string concatenation, but if either side is a string,
12461         and the other is not, then return null, and let the runtime use
12462         the concatenation on the string plus the object (using
12463         `Object.ToString'). 
12464
12465 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
12466
12467         Constant Folding has been implemented now.
12468
12469         * expression.cs (Unary.Reduce): Do not throw an exception, catch
12470         the error instead on types that are not supported in one's
12471         complement. 
12472
12473         * constant.cs (Constant and all children): New set of functions to
12474         perform implict and explicit conversions.
12475
12476         * ecore.cs (EnumConstant): Implement the new functions to perform
12477         conversion by proxying to the child expression.
12478
12479         * codegen.cs: (ConstantCheckState): Constant evaluation has its
12480         own separate setting that can not be turned off from the command
12481         line using --unchecked or --checked and is only controlled using
12482         the checked/unchecked statements and expressions.  This setting is
12483         used by the constant folder to flag errors.
12484
12485         * expression.cs (CheckedExpr, UncheckedExpr): Set the
12486         ConstantCheckState as well.   
12487
12488         During Resolve, they also have to flag the state, because the
12489         constant folder runs completely in the Resolve phase.
12490
12491         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
12492         well.
12493
12494 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
12495
12496         * cfold.cs: New file, this file contains the constant folder.
12497
12498         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
12499         argument to track whether we are using the resulting address to
12500         load or store a value and provide better error messages. 
12501
12502         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
12503         new AddressOf arguments.
12504
12505         * statement.cs (Foreach.EmitCollectionForeach): Update
12506
12507         * expression.cs (Argument.Emit): Call AddressOf with proper
12508         arguments to track usage.
12509
12510         (New.DoEmit): Call AddressOf with new arguments.
12511
12512         (Unary.Emit): Adjust AddressOf call.
12513
12514 2002-03-01  Ravi Pratap  <ravi@ximian.com>
12515
12516         * cs-parser.jay (member_access): Change the case for pre-defined types
12517         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
12518         this suggestion.
12519
12520         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
12521         a method body.
12522
12523         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
12524         essentially like methods and apply attributes like MethodImplOptions to them too.
12525
12526         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
12527         not being null.
12528
12529         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
12530         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
12531         is the DeclSpace.
12532
12533         * Update code everywhere accordingly.
12534
12535         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
12536
12537         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
12538
12539 2002-02-28  Ravi Pratap  <ravi@ximian.com>
12540
12541         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
12542         try performing lookups against those instead of jumping straight into using
12543         the 'using' clauses.
12544
12545         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
12546
12547         (LookupType): Perform lookups in implicit parents too.
12548
12549         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
12550         sequence as RootContext.LookupType. 
12551
12552         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
12553         the various cases of namespace lookups into this method.
12554
12555 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
12556
12557         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
12558         in positional arguments)
12559
12560         * class.cs (Operator): Update the AllowedModifiers to contain
12561         extern. 
12562
12563         * cs-parser.jay: Update operator declaration to allow for the
12564         operator body to be empty.
12565
12566         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
12567         values. 
12568
12569 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
12570
12571         * class.cs (Method.Emit): Label parameters.
12572
12573         * driver.cs: Return 1 or 0 as the program exit code.
12574
12575 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
12576
12577         * expression.cs: Special case the `null' object when trying to
12578         auto-compute the type, as anything can be explicitly converted to
12579         that. 
12580
12581         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
12582         spotting this Paolo.
12583
12584         (Expression.ImplicitNumericConversion): Perform comparissions of
12585         the type using the underlying type in the case of an enumeration
12586         rather than using the enumeration type for the compare.
12587
12588         Cope with the underlying == type case, which is not possible to
12589         catch before. 
12590
12591         (Expression.ConvertNumericExplicit): Perform comparissions of
12592         the type using the underlying type in the case of an enumeration
12593         rather than using the enumeration type for the compare.
12594
12595         * driver.cs: If the user does not supply an extension, assume .exe
12596
12597         * cs-parser.jay (if_statement): Rewrote so that we can track the
12598         location for the if statement.
12599
12600         * expression.cs (Binary.ConstantFold): Only concat strings when
12601         the operation is "+", not everything ;-)
12602
12603         * statement.cs (Statement.EmitBoolExpression): Take a location
12604         argument. 
12605         (If, While, Do): Track location.
12606
12607         * expression.cs (Binary.ResolveOperator): In the object + string
12608         case, I was missing a call to ConvertImplicit
12609
12610 2002-02-25  Ravi Pratap  <ravi@ximian.com>
12611
12612         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
12613         Location arguments. Ensure we use RootContext.LookupType to do our work
12614         and not try to do a direct Type.GetType and ModuleBuilder.GetType
12615
12616         * interface.cs (PopulateMethod): Handle the type of the parameter being
12617         null gracefully.
12618
12619         * expression.cs (Invocation.BetterFunction): Handle the case when we 
12620         have a params method with no fixed arguments and a call is made with no
12621         arguments.
12622
12623 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
12624
12625         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
12626         the verbatim-string-literal
12627
12628         * support.cs (InternalParameters.ParameterModifier): handle null
12629         fixed parameters.
12630         (InternalParameters.ParameterType): ditto.
12631
12632         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
12633         duplicating the name of the variable parameter.
12634         (GetParameterByName): Fix bug where we were not looking up array
12635         paramters if they were the only present (thanks Paolo!).
12636         (GetParameterInfo): We only have an empty set of types if both
12637         fixed and array are set to null.
12638         (GetParameterInfo-idx): Handle FixedParameter == null
12639
12640         * cs-parser.jay: Handle the case where there is no catch
12641         statements (missing null test).
12642
12643 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
12644
12645         * driver.cs (MainDriver): Be conservative on our command line
12646         handling.
12647
12648         Catch DirectoryNotFoundException when calling GetFiles.
12649
12650         (SplitPathAndPattern): Used to split the input specification into
12651         a path and a pattern that we can feed to Directory.GetFiles.
12652
12653 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
12654
12655         * statement.cs (Fixed): Implement the last case of the Fixed
12656         statement (string handling).
12657
12658         * expression.cs (StringPtr): New class used to return a char * to
12659         a string;  Used by the Fixed statement.
12660
12661         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
12662
12663         * expression.cs (Binary.ResolveOperator): Remove redundant
12664         MemberLookup pn parent type.
12665         Optimize union call, we do not need a union if the types are the same.
12666         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
12667         type.
12668
12669         Specialize the use of MemberLookup everywhere, instead of using
12670         the default settings. 
12671
12672         (StackAlloc): Implement stackalloc keyword.
12673
12674         * cs-parser.jay: Add rule to parse stackalloc.
12675
12676         * driver.cs: Handle /h, /help, /?
12677
12678         * expression.cs (MakeByteBlob): Removed the hacks we had in place
12679         before we supported unsafe code.
12680
12681         * makefile: add --unsafe to the self compilation of mcs.
12682
12683 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
12684
12685         * expression.cs (PointerArithmetic): New class that is used to
12686         perform pointer arithmetic.
12687         (Binary.Resolve): Handle pointer arithmetic
12688         Handle pointer comparission.
12689         (ArrayPtr): Utility expression class that is used to take the
12690         address of an array.
12691
12692         (ElementAccess): Implement array access for pointers
12693
12694         * statement.cs (Fixed): Implement fixed statement for arrays, we
12695         are missing one more case before we are done.
12696
12697         * expression.cs (Indirection): Implement EmitAssign and set the
12698         ExprClass to Variable.  This allows pointer dereferences to be
12699         treated as variables, and to have values assigned to them.
12700
12701         * ecore.cs (Expression.StoreFromPtr): New utility function to
12702         store values dereferencing.
12703
12704 2002-02-20  Ravi Pratap  <ravi@ximian.com>
12705
12706         * expression.cs (Binary.ResolveOperator): Ensure that we are
12707         not trying to operate on a void type - this fixes the reported
12708         bug.
12709
12710         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
12711         the parent implementation is sealed.
12712
12713         * ../errors/cs0239.cs : Add.
12714
12715         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
12716
12717         * typemanager.cs (unverifiable_code_type): Corresponds to 
12718         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
12719         which have unsafe code in them.
12720
12721         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
12722         unsafe context.
12723
12724 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
12725
12726         * cs-tokenizer.cs: Add support for @"litreal strings"
12727
12728         Make tokenizer accept pre-processor directives
12729         on any column (remove the old C-like limitation). 
12730
12731         * rootcontext.cs (EmitCode): Emit any global attributes.
12732         (AddGlobalAttributes): Used to keep track of assembly attributes. 
12733
12734         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
12735
12736         * cs-parser.jay: Add support for global attributes.  
12737
12738 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
12739
12740         * expression.cs (Indirection): New helper class.  Unary will
12741         create Indirection classes to be able to implement the
12742         IMemoryLocation interface on it.
12743
12744 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
12745
12746         * cs-parser.jay (fixed_statement): reference the right statement.
12747
12748         * statement.cs (Fixed.Emit): Finish implementing the fixed
12749         statement for the &x case.
12750
12751 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
12752
12753         * class.cs (Property.Define, Method.Define): Remove newslot when
12754         `implementing'.  
12755
12756         * modifiers.cs: My use of NewSlot when `Abstract' was set was
12757         wrong.  NewSlot should only be used if the `new' keyword is present.
12758
12759         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
12760         locating our system dir.  Sorry about this.
12761
12762 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
12763
12764         * driver.cs (GetSystemDir): Compute correctly the location of our
12765         system assemblies.  I was using the compiler directory instead of
12766         the library directory.
12767
12768 2002-02-13  Ravi Pratap  <ravi@ximian.com>
12769
12770         * expression.cs (BetterFunction): Put back in what Miguel commented out
12771         since it is the correct fix. The problem is elsewhere ;-)
12772
12773         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
12774         parameters of the parms method are themselves compatible or not !
12775
12776         (StandardConversionExists): Fix very dangerous bug where we were forgetting
12777         to check that a class implements an interface before saying that an implicit
12778         conversion was allowed. Use ImplementsInterface to do the checking.
12779
12780 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
12781
12782         * class.cs (Method.Define): Track whether we are an explicit
12783         implementation or not.  And only call DefineMethodOverride if we
12784         are an explicit implementation.
12785
12786         (Property.DefineMethod): Ditto.
12787
12788 2002-02-11  Ravi Pratap  <ravi@ximian.com>
12789
12790         * expression.cs (BetterFunction): Catch hideous bug which was
12791          preventing us from detecting ambiguous calls due to implicit casts i.e
12792         cs0121.
12793
12794 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
12795
12796         * support.cs (Pair): Remove un-needed method.  I figured why I was
12797         getting the error in cs-parser.jay, the variable in a foreach loop
12798         is readonly, and the compiler does not really treat this as a variable.
12799
12800         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
12801         instead of EQUALS in grammar.  
12802
12803         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
12804
12805         * expression.cs (Unary.DoResolve): Check whether the argument is
12806         managed or not.
12807
12808 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
12809
12810         * support.cs: Api for Pair to set a value.  Despite the fact that
12811         the variables are public the MS C# compiler refuses to compile
12812         code that accesses the field if the variable is part of a foreach
12813         statement. 
12814
12815         * statement.cs (Fixed): Begin implementation of the fixed
12816         statement.
12817
12818         (Block.AddVariable): Return the VariableInfo on success and null
12819         on failure instead of true/false. 
12820
12821         * cs-parser.jay (foreach): Catch errors on variables already
12822         defined (we were ignoring this value before) and properly unwind
12823         the block hierarchy
12824
12825         (fixed_statement): grammar for the fixed statement.
12826
12827 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
12828
12829         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
12830         pointer types to be incretemented.
12831
12832         (SizeOf): Implement.
12833
12834         * cs-parser.jay (pointer_member_access): Implement
12835         expr->IDENTIFIER production.
12836
12837         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
12838         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
12839         on safe contexts.
12840
12841         (Unary): Implement indirection.
12842
12843         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
12844         use in non-unsafe context).
12845
12846         (SimpleName.DoResolve): Check for pointers in field access on safe
12847         contexts. 
12848
12849         (Expression.LoadFromPtr): Factor the load-indirect code in this
12850         function.  This was duplicated in UnboxCast and ParameterReference
12851
12852 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
12853
12854         * expression.cs (ComposedCast): report an error if a pointer cast
12855         is used in a safe region.
12856
12857         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
12858         pointer type casts in unsafe context.
12859
12860         * codegen.cs (EmitContext): Set up IsUnsafe.
12861
12862         * cs-parser.jay (non_expression_type): Add productions for pointer
12863         casts. 
12864
12865         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
12866         code.  We should not use force into static mode if the method is
12867         not virtual.  Fixes bug in MIS
12868
12869         * statement.cs (Do.Emit, While.Emit, For.Emit,
12870         Statement.EmitBoolExpression): Add support to Do and While to
12871         propagate infinite loop as `I do return' semantics.
12872
12873         Improve the For case to also test for boolean constants.
12874
12875         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
12876         to the list of attributes we can add.
12877
12878         Remove `EmitContext' argument.
12879
12880         * class.cs (Method.Define): Apply parameter attributes.
12881         (Constructor.Define): Apply parameter attributes.
12882         (MethodCore.LabelParameters): Move here the core of labeling
12883         parameters. 
12884
12885         * support.cs (ReflectionParameters.ParameterModifier,
12886         InternalParameters.ParameterModifier): Use IsByRef on the type and
12887         only return the OUT bit for these parameters instead of in/out/ref
12888         flags.
12889
12890         This is because I miss-understood things.  The ParameterInfo.IsIn
12891         and IsOut represent whether the parameter has the [In] and [Out]
12892         attributes set.  
12893
12894 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
12895
12896         * ecore.cs (FieldExpr.Emit): Release temporaries.
12897
12898         * assign.cs (LocalTemporary.Release): new function.
12899
12900         * codegen.cs (EmitContext.GetTemporaryStorage,
12901         EmitContext.FreeTemporaryStorage): Rework the way we deal with
12902         temporary storage.  Now we can "put back" localbuilders when we
12903         are done with them
12904
12905 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
12906
12907         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
12908         need to make a copy of the variable to generate verifiable code.
12909
12910 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
12911
12912         * driver.cs: Compute dynamically the system directory.
12913
12914         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
12915         Slower, but more generally useful.  Used by the abstract
12916         registering implementation. 
12917
12918         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
12919         the rules for the special rule on Type/instances.  First check if
12920         we have the same name, and if so, try that special static path
12921         rather than the instance path.
12922
12923 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
12924
12925         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
12926         for, while and if.
12927
12928         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
12929         Enum, ValueType, Delegate or Array for non-corlib compiles.
12930
12931         * cs-tokenizer.cs: Catch long identifiers (645)
12932
12933         * typemanager.cs (IndexerPropetyName): Ravi never tested this
12934         piece of code.
12935
12936         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
12937         fix, we were returning too early, so we were not registering
12938         pending methods from abstract classes.
12939
12940         Do not register pending methods if the class is abstract.
12941
12942         * expression.cs (Conditional.DoResolve): Report circular implicit
12943         conversions when we neecd to compute it for conditional
12944         expressions. 
12945
12946         (Is.DoResolve): If the expression is always of the provided type,
12947         flag warning 183.  If the expression can not ever be of the
12948         provided type flag warning 184.
12949
12950         * class.cs: Catch 169 as well.
12951
12952         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
12953         read. 
12954
12955 2002-01-18  Nick Drochak  <ndrochak@gol.com>
12956
12957         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
12958
12959 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
12960
12961         * interface.cs: (PopulateMethod): Check for pointers being defined
12962         only if the unsafe context is active.
12963         (PopulateProperty): ditto.
12964         (PopulateIndexer): ditto.
12965
12966         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
12967         specified.  If pointers are present, make sure that they are
12968         present in an unsafe context.
12969         (Constructor, Constructor.Define): ditto.
12970         (Field, Field.Define): ditto.
12971         (Property, Property.Define): ditto.
12972         (Event, Event.Define): ditto.
12973
12974         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
12975         hashtable if there are classes or structs defined.
12976
12977         * expression.cs (LocalVariableReference.DoResolve): Simplify this
12978         code, as the constant resolution moved.
12979
12980         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
12981         the metadata, so we can flag error 133. 
12982
12983         * decl.cs (MemberCore.UnsafeOK): New function to test that a
12984         pointer is being declared in an unsafe context.
12985
12986 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
12987
12988         * modifiers.cs (Modifiers.Check): Require a Location argument.
12989         Report error 227 for Unsafe use.
12990
12991         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
12992
12993         * statement.cs (For.Emit): If the test is null, then report that
12994         we do `return', as we wont reach anything afterwards.
12995
12996         (Switch.SwitchGoverningType): Track the expression that matched
12997         the conversion.
12998
12999         * driver.cs: Allow negative numbers as an error code to flag.
13000
13001         * cs-parser.jay: Handle 1551.
13002
13003         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
13004
13005 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
13006
13007         * cs-parser.jay: Report 1518 (type declaration can only contain
13008         class, struct, interface, enum or delegate)
13009
13010         (switch_label): Report 1523 (keywords `case' or `default' must
13011         preced code)
13012
13013         (opt_switch_sections): Report 1522 (empty switch)
13014
13015         * driver.cs: Report 1515 (response file specified multiple times)
13016         Report 1516 (Source file specified multiple times).
13017
13018         * expression.cs (Argument.Resolve): Signal 1510
13019
13020         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
13021         access not allowed in static code)
13022
13023 2002-01-11  Ravi Pratap  <ravi@ximian.com>
13024
13025         * typemanager.cs (IsPointerType): Utility method which we are going
13026         to need a lot.
13027
13028         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
13029         the object type, so we take care of that.
13030
13031         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
13032
13033         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
13034         added to non-params parameters :-)
13035
13036         * typemanager.cs (CSharpName): Include 'void' type too. 
13037
13038         (void_ptr_type): Include in the set of core types.
13039
13040         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
13041         duplicating code.
13042
13043         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
13044         an unsafe context.
13045
13046         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
13047         completely forgotten about it.
13048
13049 2002-01-10  Ravi Pratap  <ravi@ximian.com>
13050
13051         * cs-parser.jay (pointer_type): Add. This begins our implementation
13052         of parsing rules for unsafe code.
13053
13054         (unsafe_statement): Implement.
13055
13056         (embedded_statement): Modify to include the above.
13057
13058         * statement.cs (Unsafe): Implement new class for unsafe blocks.
13059
13060         * codegen.cs (EmitContext.InUnsafe): Add. This determines
13061         if the current context is an unsafe one.
13062
13063         * cs-parser.jay (local_variable_pointer_type): Since local variable types
13064         are handled differently, we need separate rules for them.
13065
13066         (local_variable_declaration): Update to use local_variable_pointer_type
13067         to allow variable declarations of unmanaged pointer types.
13068
13069         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
13070         in unsafe contexts.
13071
13072         * ../errors/cs0214.cs : Add.
13073
13074 2002-01-16  Nick Drochak  <ndrochak@gol.com>
13075
13076         * makefile: remove 'response' file when cleaning.
13077
13078 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
13079
13080         * cs-parser.jay: Report 1524.
13081
13082 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
13083
13084         * typemanager.cs (RegisterMethod): drop checking if we have
13085         registered this from here
13086
13087 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
13088
13089         * class.cs (Method.EmitDestructor): Implement calling our base
13090         destructor. 
13091
13092         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
13093         value of InFinally.
13094
13095         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
13096         this routine and will wrap the call in a try/catch block.  Deal
13097         with the case.
13098
13099 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
13100
13101         * ecore.cs (Expression.MemberLookup): instead of taking a
13102         parameter `same_type' that was used to tell whether we could
13103         access private members we compute our containing type from the
13104         EmitContext.
13105
13106         (FieldExpr): Added partial support for volatile fields.  This does
13107         not work for volatile fields exposed from assemblies, as I can not
13108         figure out how to extract the modreq from it.
13109
13110         Updated all the source files to use this.
13111
13112         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
13113         because it is referenced by MemberLookup very often. 
13114
13115 2002-01-09  Ravi Pratap  <ravi@ximian.com>
13116
13117         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
13118         TypeBuilder.GetCustomAttributes to retrieve what we need.
13119
13120         Get rid of redundant default_member_attr_type as this is the same as
13121         default_member_type which already exists.
13122
13123         * interface.cs, attribute.cs : Update accordingly.
13124
13125 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
13126
13127         * typemanager.cs: Enable IndexerPropertyName again.  It does not
13128         work for TYpeBuilders though.  Ravi, can you please fix this?
13129
13130         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
13131
13132         * expression.cs (Argument.Emit): Handle the case of ref objects
13133         being passed to ref functions;  
13134
13135         (ParameterReference.EmitLoad): Loads the content of the pointer
13136         without dereferencing.
13137
13138 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
13139
13140         * cs-tokenizer.cs: Implemented the pre-processing expressions.
13141
13142 2002-01-08  Ravi Pratap  <ravi@ximian.com>
13143
13144         * class.cs (Indexer.DefineMethod): Incorporate the interface
13145         type in the name of the method if we are doing explicit interface
13146         implementation.
13147
13148         * expression.cs (ConversionExists): Remove as it is completely obsolete.
13149
13150         (BetterConversion): Fix extremely trivial bug where we were referring to
13151         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
13152         again !
13153
13154         * ../errors/bug16.cs : Add although we have fixed it.
13155
13156 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
13157
13158         * expression.cs (BaseIndexer): Begin implementation.
13159
13160         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
13161
13162         * cs-parser.jay (indexer_declarator): Use qualified_identifier
13163         production directly to remove a shift/reduce, and implement
13164         explicit interface implementation.
13165
13166         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
13167         after a floating point suffix.
13168
13169         * expression.cs (DoNumericPromotions): Improved the conversion for
13170         uint/uint.  If we have a constant, we avoid doing a typecast to a
13171         larger type.
13172
13173         * class.cs (Indexer): Implement explicit interface implementation
13174         for indexers.
13175
13176 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
13177
13178         * class.cs: make the default instance constructor public and hidebysig.
13179
13180 2001-01-03  Ravi Pratap  <ravi@ximian.com>
13181
13182         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
13183         so we can call it from elsewhere.
13184
13185         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
13186         we emit it internally if the class has a defined indexer; otherwise the user
13187         emits it by decorating the class definition with the DefaultMemberAttribute.
13188
13189         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
13190         attribute is not used on a type which defines an indexer.
13191
13192         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
13193         character when we skip whitespace.
13194
13195         * ../errors/cs0646.cs : Add.
13196
13197 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
13198
13199         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
13200         again. 
13201
13202         * makefile: Add practical target `mcs3.exe' which builds the third
13203         generation compiler. 
13204
13205         * expression.cs (New): Fix structures constructor calling.
13206
13207         * class.cs (Property, Method, Indexer): Emit Final flag on the
13208         method if we are an interface implementation and we are not
13209         abstract. 
13210
13211         * ecore.cs (PropertyExpr): New public field `IsBase', tells
13212         whether this property is referencing a `base' method.
13213
13214         * expression.cs (Invocation.EmitCall): take an extra argument:
13215         is_base, this is used to determine whether the `call' or
13216         `callvirt' opcode should be used.
13217
13218
13219         * delegate.cs: update EmitCall.
13220
13221         * class.cs (Method.Define): Set NewSlot for the cases where we are
13222         not implementing an interface method.
13223
13224         (Property.Define): ditto.
13225
13226 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
13227
13228         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
13229         'r'.  Allows mcs to parse itself fully.
13230
13231 2002-01-02  Ravi Pratap  <ravi@ximian.com>
13232
13233         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
13234         of the number of initializers that require the InitializeArray method.
13235
13236         (CheckIndices): Store the Expression in all cases - not the plain value. Also
13237         update the above field where necessary.
13238
13239         (MakeByteBlob): Update accordingly.
13240
13241         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
13242         greater than 2.
13243
13244         (EmitDynamicInitializers): Update in accordance with the new optimization.
13245
13246         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
13247         same OpCode applies.
13248
13249         * cs-parser.jay : Fix some glaring errors I introduced.
13250
13251 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
13252
13253         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
13254         so that we can check for name clashes there too.
13255
13256         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
13257         for interface indexers.
13258
13259         * interfaces.cs (Define): Emit the default member attribute.
13260
13261         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
13262         variable was being referred to while setting the value ;-)
13263
13264 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
13265
13266         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
13267         byte-by-byte information when we know the data is zero.
13268
13269         Make the block always a multiple of 4, because
13270         DefineInitializedData has a bug.
13271
13272         * assign.cs: Fix, we should assign from the temporary, not from
13273         the source. 
13274
13275         * expression.cs (MakeByteBlob): Fix my incorrect code.
13276
13277 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
13278
13279         * typemanager.cs (EnumToUnderlying): This function is used to get
13280         the underlying type from an enumeration, because it does not
13281         always work. 
13282
13283         * constant.cs: Use the I4_S form for values between -128 and 127.
13284
13285         * statement.cs (Block.LookupLabel): Looks up a label.
13286         (Block): Drop support for labeled blocks.
13287
13288         (LabeledStatement): New kind of statement that represents a label
13289         only.
13290
13291         (Goto): Finally implement this bad boy.
13292
13293         * cs-parser.jay: Update to reflect new mechanism to implement
13294         labels.
13295
13296 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
13297
13298         * codegen.cs (EmitContext.This): a codegen property that keeps the
13299         a single instance of this instead of creating many different this
13300         instances. 
13301
13302         * delegate.cs (Delegate.DoResolve): Update to use the property;
13303
13304         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
13305
13306         * expression.cs (BaseAccess.DoResolve): Ditto.
13307
13308 2001-12-29  Ravi Pratap  <ravi@ximian.com>
13309
13310         * typemanager.cs (methodimpl_attr_type): Add to hold the type
13311         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
13312
13313         (InitCoreTypes): Update accordingly.
13314
13315         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
13316         so we can quickly store the state.
13317
13318         (ApplyAttributes): Set the correct implementation flags
13319         for InternalCall methods.
13320
13321 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
13322
13323         * expression.cs (EmitCall): if a method is not virtual, then do
13324         not use callvirt on it.
13325
13326         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
13327         user defined stuff) requires the use of stobj, which takes an
13328         address on the stack instead of an array and an index.  So emit
13329         the Ldelema operation for it.
13330
13331         (EmitStoreOpcode): Use stobj for valuetypes.
13332
13333         (UnaryMutator.EmitCode): Use the right 1 value depending on
13334         whether we are dealing with int64/uint64, float or doubles.
13335
13336         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
13337         constructors that I implemented last night.
13338
13339         (Constructor.IsDefault): Fix to work properly for static
13340         constructors.
13341
13342         * cs-parser.jay (CheckDef): report method signature errors.
13343         Update error number 103 to be 132.
13344
13345         * decl.cs: New AdditionResult enumeration value: MethodExists.
13346         Although we do this check for methods later on in the semantic
13347         analysis, catching repeated default constructors is so easy that
13348         we catch these here. 
13349
13350         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
13351         promotions code.
13352
13353         (ParameterReference.EmitAssign, Emit): handle
13354         bools as bytes.
13355
13356         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
13357         (ArrayAccess.EmitStoreOpcode): ditto.
13358
13359         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
13360
13361         * expression.cs (MakeByteBlob): Complete all the missing types
13362         (uint, short, ushort, byte, sbyte)
13363
13364         * class.cs: Only init instance field initializers on instance
13365         constructors. 
13366
13367         Rename `constructors' to instance_constructors. 
13368
13369         (TypeContainer.AddConstructor): Only add constructors to the list
13370         if it is not static.
13371
13372         Make sure that we handle default_static_constructor independently
13373         everywhere where we handle instance_constructors
13374
13375 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
13376
13377         * class.cs: Do not lookup or create a base initializer for a
13378         static constructor.
13379
13380         (ConstructorInitializer.Resolve): use the proper type to lookup
13381         for constructors.
13382
13383         * cs-parser.jay: Report error 1585 (modifiers between type and name).
13384
13385         * enum.cs, interface.cs: Remove CloseType, this is taken care by
13386         in DeclSpace. 
13387
13388         * decl.cs: CloseType is now an virtual method, the default
13389         implementation just closes this type.
13390
13391 2001-12-28  Ravi Pratap  <ravi@ximian.com>
13392
13393         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
13394         to PreserveSig by default. Also emit HideBySig on such methods.
13395
13396         Basically, set the defaults to standard values.
13397
13398         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
13399         argument, if candidate is better, it can't be worse than the best !
13400
13401         (Invocation): Re-write bits to differentiate between methods being
13402         applicable in their expanded form and their normal form - for params
13403         methods of course.
13404
13405         Get rid of use_standard everywhere as only standard conversions are allowed
13406         in overload resolution. 
13407
13408         More spec conformance.
13409
13410 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
13411
13412         * driver.cs: Add --timestamp, to see where the compiler spends
13413         most of its time.
13414
13415         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
13416         `this' in static code.
13417
13418         (SimpleName.DoResolve): Implement in terms of a helper function
13419         that allows static-references to be passed upstream to
13420         MemberAccess.
13421
13422         (Expression.ResolveWithSimpleName): Resolve specially simple
13423         names when called by MemberAccess to implement the special
13424         semantics. 
13425
13426         (Expression.ImplicitReferenceConversion): Handle conversions from
13427         Null to reference types before others, as Null's type is
13428         System.Object. 
13429
13430         * expression.cs (Invocation.EmitCall): Handle the special case of
13431         calling methods declared on a reference type from a ValueType
13432         (Base classes System.Object and System.Enum)
13433
13434         (MemberAccess.Resolve): Only perform lookups on Enumerations if
13435         the left hand side is a TypeExpr, not on every enumeration. 
13436
13437         (Binary.Resolve): If types are reference types, then do a cast to
13438         object on operators != and == of both arguments.
13439
13440         * typemanager.cs (FindMembers): Extract instance and static
13441         members if requested.
13442
13443         * interface.cs (PopulateProperty): Use void_type instead of null
13444         as the return type for the setter method.
13445
13446         (PopulateIndexer): ditto.
13447
13448 2001-12-27  Ravi Pratap  <ravi@ximian.com>
13449
13450         * support.cs (ReflectionParameters): Fix minor bug where we
13451         were examining the wrong parameter for the ParamArray attribute.
13452
13453         Cope with requests for the type of the parameter at position
13454         greater than the params parameter's. We now return the element
13455         type of the params array as that makes more sense.
13456
13457         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
13458         accordingly as we no longer have to extract the element type
13459         ourselves.
13460
13461         (Invocation.OverloadResolve): Update.
13462
13463 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
13464
13465         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
13466         against IEnumerator, test whether the return value is a descendant
13467         of the IEnumerator interface.
13468
13469         * class.cs (Indexer.Define): Use an auxiliary method to implement
13470         the other bits of the method definition.  Begin support for
13471         explicit interface implementation.
13472
13473         (Property.DefineMethod): Use TypeManager.void_type instead of null
13474         for an empty return value.
13475
13476 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
13477
13478         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
13479         dealing with a FieldExpr which is composed of a FieldBuilder, in
13480         the code path we did extract the constant, but we should have
13481         obtained the underlying value to be able to cast it (otherwise we
13482         end up in an infinite loop, this is what Ravi was running into).
13483
13484         (ArrayCreation.UpdateIndices): Arrays might be empty.
13485
13486         (MemberAccess.ResolveMemberAccess): Add support for section
13487         14.5.4.1 that deals with the special case of E.I when E is a type
13488         and something else, that I can be a reference to a static member.
13489
13490         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
13491         handle a particular array type to create byte blobs, it is just
13492         something we dont generate byteblobs for.
13493
13494         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
13495         arguments. 
13496
13497         * location.cs (Push): remove the key from the hashtable that we
13498         are about to add.   This happens for empty files.
13499
13500         * driver.cs: Dispose files after we have parsed them.
13501
13502         (tokenize): new function that only runs the tokenizer on its
13503         input, for speed testing.
13504
13505 2001-12-26  Ravi Pratap  <ravi@ximian.com>
13506
13507         * class.cs (Event.Define): Define the private field only if there
13508         are no accessors defined.
13509
13510         * expression.cs (ResolveMemberAccess): If there is no associated
13511         field with the event, that means we have an event defined with its
13512         own accessors and we should flag error cs0070 since transforming
13513         ourselves into a field is not valid in that case.
13514
13515         * ecore.cs (SimpleName.DoResolve): Same as above.
13516
13517         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
13518         and charset to sane values.
13519
13520 2001-12-25  Ravi Pratap  <ravi@ximian.com>
13521
13522         * assign.cs (DoResolve): Perform check on events only if they 
13523         are being accessed outside the declaring type.
13524
13525         * cs-parser.jay (event_declarations): Update rules to correctly
13526         set the type of the implicit parameter etc.
13527
13528         (add_accessor, remove_accessor): Set current local parameters.
13529
13530         * expression.cs (Binary): For delegate addition and subtraction,
13531         cast the return value from the method into the appropriate delegate
13532         type.
13533
13534 2001-12-24  Ravi Pratap  <ravi@ximian.com>
13535
13536         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
13537         of these as the workaround is unnecessary.
13538
13539         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
13540         delegate data - none of that is needed at all.
13541
13542         Re-write bits to extract the instance expression and the delegate method
13543         correctly.
13544
13545         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
13546         on delegates too.
13547
13548         * attribute.cs (ApplyAttributes): New method to take care of common tasks
13549         of attaching attributes instead of duplicating code everywhere.
13550
13551         * everywhere : Update code to do attribute emission using the above method.
13552
13553 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
13554
13555         * expression.cs (IsParamsMethodApplicable): if there are not
13556         parameters, return immediately.
13557
13558         * ecore.cs: The 0 literal can be implicity converted to an enum
13559         type. 
13560
13561         (SimpleName.DoResolve): First lookup the type, then lookup the
13562         members. 
13563
13564         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
13565         want to get its address.  If the InstanceExpression is not
13566         addressable, store the result in a temporary variable, then get
13567         the address of it.
13568
13569         * codegen.cs: Only display 219 errors on warning level or above. 
13570
13571         * expression.cs (ArrayAccess): Make it implement the
13572         IMemoryLocation interface.
13573
13574         (Binary.DoResolve): handle the operator == (object a, object b)
13575         and operator != (object a, object b) without incurring into a
13576         BoxedCast (because 5 != o should never be performed).
13577
13578         Handle binary enumerator operators.
13579
13580         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
13581         value type, otherwise use Ldelem_ref.
13582
13583         Use precomputed names;
13584
13585         (AddressOf): Implement address of
13586
13587         * cs-parser.jay (labeled_statement): Fix recursive block
13588         addition by reworking the production.
13589
13590         * expression.cs (New.DoEmit): New has a special case:
13591                 
13592                  If we are dealing with a ValueType, we have a few
13593                  situations to deal with:
13594                 
13595                     * The target of New is a ValueType variable, that is
13596                       easy, we just pass this as the variable reference
13597                 
13598                     * The target of New is being passed as an argument,
13599                       to a boxing operation or a function that takes a
13600                       ValueType.
13601                 
13602                       In this case, we need to create a temporary variable
13603                       that is the argument of New.
13604
13605
13606 2001-12-23  Ravi Pratap  <ravi@ximian.com>
13607
13608         * rootcontext.cs (LookupType): Check that current_type is not null before
13609         going about looking at nested types.
13610
13611         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
13612         not implement the IAssignMethod interface any more.
13613
13614         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
13615         where we tranform them into FieldExprs if they are being resolved from within
13616         the declaring type.
13617
13618         * ecore.cs (SimpleName.DoResolve): Do the same here.
13619
13620         * assign.cs (DoResolve, Emit): Clean up code considerably. 
13621
13622         * ../errors/bug10.cs : Add.
13623
13624         * ../errors/cs0070.cs : Add.
13625
13626         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
13627
13628         * assign.cs : Get rid of EventIsLocal everywhere.
13629
13630 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
13631
13632         * ecore.cs (ConvertIntLiteral): finished the implementation.
13633
13634         * statement.cs (SwitchLabel): Convert the value we are using as a
13635         key before looking up the table.
13636
13637 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
13638
13639         * codegen.cs (EmitTopBlock): Require a Location argument now.
13640
13641         * cs-parser.jay (constructor_declarator): We need to setup
13642         current_local_parameters before we parse the
13643         opt_constructor_initializer, to allow the variables to be bound
13644         to the constructor arguments.
13645
13646         * rootcontext.cs (LookupType): First lookup nested classes in our
13647         class and our parents before we go looking outside our class.
13648
13649         * expression.cs (ConstantFold): Extract/debox the values at the
13650         beginnning. 
13651
13652         * rootcontext.cs (EmitCode): Resolve the constants first before we
13653         resolve the types.  This is not really needed, but it helps debugging.
13654
13655         * statement.cs: report location.
13656
13657         * cs-parser.jay: pass location to throw statement.
13658
13659         * driver.cs: Small bug fix.
13660
13661         * report.cs: Updated format to be 4-zero filled digits.
13662
13663 2001-12-22  Ravi Pratap  <ravi@ximian.com>
13664
13665         * expression.cs (CheckIndices): Fix minor bug where the wrong
13666         variable was being referred to ;-)
13667
13668         (DoEmit): Do not call EmitStaticInitializers when the 
13669         underlying type is System.Object.
13670
13671 2001-12-21  Ravi Pratap  <ravi@ximian.com>
13672
13673         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
13674         and do the usual workaround for SRE.
13675
13676         * class.cs (MyEventBuilder.EventType): New member to get at the type
13677         of the event, quickly.
13678
13679         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
13680
13681         * assign.cs (Assign.DoResolve): Handle the case when the target
13682         is an EventExpr and perform the necessary checks.
13683
13684         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
13685         interface.
13686
13687         (SimpleName.MemberStaticCheck): Include check for EventExpr.
13688
13689         (EventExpr): Set the type in the constructor itself since we 
13690         are meant to be born fully resolved.
13691
13692         (EventExpr.Define): Revert code I wrote earlier.
13693                 
13694         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
13695         instance expression is null. The instance expression is a This in that case
13696         or a null, depending on whether it is a static method or not.
13697
13698         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
13699         refers to more than one method.
13700
13701         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
13702         and accordingly flag errors.
13703
13704 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
13705
13706         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
13707
13708 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
13709
13710         * location.cs (ToString): Provide useful rutine.
13711
13712 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
13713
13714         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
13715         objects, return the actual integral boxed.
13716
13717         * statement.cs (SwitchLabel): define an ILLabel for each
13718         SwitchLabel. 
13719
13720         (Switch.CheckSwitch): If the value is a Literal, extract
13721         the underlying literal.
13722
13723         Also in the unused hashtable we had, add the SwitchLabel so we can
13724         quickly look this value up.
13725
13726         * constant.cs: Implement a bunch of new constants.  Rewrite
13727         Literal based on this.  Made changes everywhere to adapt to this.
13728
13729         * expression.cs (Expression.MakeByteBlob): Optimize routine by
13730         dereferencing array only once, and also copes with enumrations.
13731
13732         bytes are two bytes wide, not one.
13733
13734         (Cast): Perform constant conversions.
13735
13736         * ecore.cs (TryImplicitIntConversion): Return literals instead of
13737         wrappers to the literals here.
13738
13739         * expression.cs (DoNumericPromotions): long literals can converted
13740         to ulong implicity (this is taken care of elsewhere, but I was
13741         missing this spot).
13742
13743         * ecore.cs (Expression.Literalize): Make the return type Literal,
13744         to improve type checking.
13745
13746         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
13747
13748 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
13749
13750         * literal.cs: Revert code from ravi that checked the bounds.  The
13751         bounds are sane by the definition of the type itself. 
13752
13753         * typemanager.cs: Fix implementation of ImplementsInterface.  We
13754         need to actually look up in our parent hierarchy for interfaces
13755         implemented. 
13756
13757         * const.cs: Use the underlying type for enumerations
13758
13759         * delegate.cs: Compute the basename for the delegate creation,
13760         that should fix the delegate test case, and restore the correct
13761         Type Lookup semantics in rootcontext
13762
13763         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
13764         referencing a nested type with the Reflection API is using the "+"
13765         sign. 
13766
13767         * cs-parser.jay: Do not require EOF token at the end.
13768
13769 2001-12-20  Ravi Pratap  <ravi@ximian.com>
13770
13771         * rootcontext.cs (LookupType): Concatenate type names with
13772         a '.' instead of a '+' The test suite passes again.
13773
13774         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
13775         field of the enumeration.
13776
13777         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
13778         the case when the member is an EventExpr.
13779
13780         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
13781         static has an associated instance expression.
13782
13783         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
13784
13785         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
13786
13787         * class.cs (Event.Define): Register event and perform appropriate checks
13788         for error #111.
13789
13790         We define the Add and Remove methods even if the use provides none because
13791         in that case, we provide default implementations ourselves.
13792
13793         Define a private field of the type of the event. This is done by the CSC compiler
13794         and we should be doing it too ;-)
13795
13796         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
13797         More methods we use in code we generate.
13798
13799         (multicast_delegate_type, delegate_type): Two separate types since the distinction
13800         is important.
13801
13802         (InitCoreTypes): Update accordingly for the above.
13803
13804         * class.cs (Event.Emit): Generate code for default accessors that we provide
13805
13806         (EmitDefaultMethod): Do the job in the above.
13807
13808         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
13809         appropriate place.
13810
13811 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
13812
13813         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
13814         builders even if we were missing one.
13815
13816         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
13817         pass the Basename as our class name instead of the Name.  The
13818         basename will be correctly composed for us.
13819
13820         * parameter.cs (Paramters): Now takes a Location argument.
13821
13822         * decl.cs (DeclSpace.LookupType): Removed convenience function and
13823         make all the code call directly LookupType in RootContext and take
13824         this chance to pass the Location information everywhere.
13825
13826         * Everywhere: pass Location information.
13827
13828 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
13829
13830         * class.cs (Constructor.Define): Updated way of detecting the
13831         length of the parameters.
13832
13833         (TypeContainer.DefineType): Use basename as the type name for
13834         nested types.
13835
13836         (TypeContainer.Define): Do not recursively define types here, as
13837         definition is taken care in order by the RootContext.
13838
13839         * tree.cs: Keep track of namespaces in a per-file basis.
13840
13841         * parameter.cs (Parameter.ComputeSignature): Update to use
13842         DeclSpace. 
13843
13844         (Parameters.GetSignature): ditto.
13845
13846         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
13847         instead of a TypeContainer.
13848
13849         (Interface.SemanticAnalysis): Use `this' instead of our parent to
13850         resolve names.  Because we need to be resolve in our context, not
13851         our parents.
13852
13853         * driver.cs: Implement response files.
13854
13855         * class.cs (TypeContainer.DefineType): If we are defined, do not
13856         redefine ourselves.
13857
13858         (Event.Emit): Emit the code for add/remove handlers.
13859         (Event.Define): Save the MethodBuilders for add/remove.
13860
13861         * typemanager.cs: Use pair here too.
13862
13863         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
13864         DictionaryEntry requires the first argument to be non-null.  
13865
13866         (enum_declaration): Compute full name for registering the
13867         enumeration.
13868
13869         (delegate_declaration): Instead of using
13870         formal_parameter_list, use opt_formal_parameter_list as the list
13871         can be empty.
13872
13873         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
13874         (EventParsing): New property that controls whether `add' and
13875         `remove' are returned as tokens or identifiers (for events);
13876
13877 2001-12-19  Ravi Pratap  <ravi@ximian.com>
13878
13879         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
13880         use MyEventBuilder only and let it wrap the real builder for us.
13881
13882         (MyEventBuilder): Revamp constructor etc.
13883
13884         Implement all operations that we perform on EventBuilder in precisely the same
13885         way here too.
13886
13887         (FindMembers): Update to use the EventBuilder member.
13888
13889         (Event.Emit): Update accordingly.
13890
13891 2001-12-18  Ravi Pratap  <ravi@ximian.com>
13892
13893         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
13894         by calling the appropriate methods.
13895
13896         (GetCustomAttributes): Make stubs as they cannot possibly do anything
13897         useful.
13898
13899         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
13900
13901 2001-12-17  Ravi Pratap  <ravi@ximian.com>
13902
13903         * delegate.cs (Delegate.Populate): Check that the return type
13904         and various parameters types are indeed accessible.
13905
13906         * class.cs (Constructor.Define): Same here.
13907
13908         (Field.Define): Ditto.
13909
13910         (Event.Define): Ditto.
13911
13912         (Operator.Define): Check that the underlying Method defined itself
13913         correctly - so it's MethodBuilder should not be null.
13914
13915         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
13916         expression happens to be null.
13917
13918         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
13919         members but as of now we don't seem to be able to do anything really useful with it.
13920
13921         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
13922         not the EventBuilder.
13923
13924 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
13925
13926         * cs-tokenizer.cs: Add support for defines.
13927         Add support for #if, #elif, #else, #endif
13928
13929         (eval_var): evaluates a variable.
13930         (eval): stubbed for evaluating functions.
13931
13932         * cs-parser.jay: Pass the defines information
13933
13934         * driver.cs: Add --define command line option.
13935
13936         * decl.cs: Move MemberCore here.
13937
13938         Make it the base class for DeclSpace.  This allows us to catch and
13939         report 108 and 109 for everything now.
13940
13941         * class.cs (TypeContainer.Define): Extract all the members
13942         before populating and emit the warning 108 (new keyword required
13943         to override) instead of having each member implement this.
13944
13945         (MemberCore.Define): New abstract method, we will be using this in
13946         the warning reporting engine in Populate.
13947
13948         (Operator.Define): Adjust to new MemberCore protocol. 
13949
13950         * const.cs (Const): This does not derive from Expression, it is a
13951         temporary object we use to create fields, it is a MemberCore. 
13952
13953         * class.cs (Method.Define): Allow the entry point to be in a
13954         specific class.
13955
13956         * driver.cs: Rewrite the argument handler to clean it up a bit.
13957
13958         * rootcontext.cs: Made it just an auxiliary namespace feature by
13959         making everything static.
13960
13961         * driver.cs: Adapt code to use RootContext type name instead of
13962         instance variable.
13963
13964         * delegate.cs: Remove RootContext argument.
13965
13966         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
13967         argument. 
13968
13969         * class.cs (Event.Define): The lookup can fail.
13970
13971         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
13972
13973         * expression.cs: Resolve the this instance before invoking the code.
13974
13975 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
13976
13977         * cs-parser.jay: Add a production in element_access that allows
13978         the thing to become a "type" reference.  This way we can parse
13979         things like "(string [])" as a type.
13980
13981         Note that this still does not handle the more complex rules of
13982         casts. 
13983
13984
13985         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
13986
13987         * ecore.cs: (CopyNewMethods): new utility function used to
13988         assemble the list of methods from running FindMembers.
13989
13990         (MemberLookup): Rework FindMembers so that 
13991
13992 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
13993
13994         * class.cs (TypeContainer): Remove Delegates who fail to be
13995         defined.
13996
13997         * delegate.cs (Populate): Verify that we dont get null return
13998         values.   TODO: Check for AsAccessible.
13999
14000         * cs-parser.jay: Use basename to emit error 574 (destructor should
14001         have the same name as container class), not the full name.
14002
14003         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
14004         possible representation.  
14005
14006         Also implements integer type suffixes U and L.
14007
14008 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
14009
14010         * expression.cs (ArrayCreation.DoResolve): We need to do the
14011         argument resolution *always*.
14012
14013         * decl.cs: Make this hold the namespace.  Hold the root context as
14014         well.
14015         (LookupType): Move here.
14016
14017         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
14018
14019         * location.cs (Row, Name): Fixed the code, it was always returning
14020         references to the first file.
14021
14022         * interface.cs: Register properties defined through interfaces.
14023
14024         * driver.cs: Add support for globbing on the command line
14025
14026         * class.cs (Field): Make it derive from MemberCore as well.
14027         (Event): ditto.
14028
14029 2001-12-15  Ravi Pratap  <ravi@ximian.com>
14030
14031         * class.cs (Event::Define): Check that the type of the event is a delegate
14032         type else flag error #66.
14033
14034         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
14035         same.
14036
14037         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
14038         values of EntryPoint, CharSet etc etc.
14039
14040         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
14041
14042         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
14043         be null and we should ignore this. I am not sure if this is really clean. Apparently,
14044         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
14045         which needs this to do its work.
14046
14047         * ../errors/cs0066.cs : Add.
14048
14049 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
14050
14051         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
14052         helper functions.
14053
14054         * class.cs: (MethodSignature.MethodSignature): Removed hack that
14055         clears out the parameters field.
14056         (MemberSignatureCompare): Cleanup
14057
14058         (MemberCore): New base class used to share code between MethodCore
14059         and Property.
14060
14061         (RegisterRequiredImplementations) BindingFlags.Public requires
14062         either BindingFlags.Instace or Static.  Use instance here.
14063
14064         (Property): Refactored code to cope better with the full spec.
14065
14066         * parameter.cs (GetParameterInfo): Return an empty array instead
14067         of null on error.
14068
14069         * class.cs (Property): Abstract or extern properties have no bodies.
14070
14071         * parameter.cs (GetParameterInfo): return a zero-sized array.
14072
14073         * class.cs (TypeContainer.MethodModifiersValid): Move all the
14074         method modifier validation to the typecontainer so we can reuse
14075         this on properties.
14076
14077         (MethodCore.ParameterTypes): return an empty sized array of types.
14078
14079         (Property.Define): Test property modifier validity.
14080
14081         Add tests for sealed/override too.
14082
14083         (Method.Emit): abstract or extern methods have no bodies.
14084
14085 2001-12-14  Ravi Pratap  <ravi@ximian.com>
14086
14087         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
14088         thing.
14089
14090         (Method::Define, ::Emit): Modify accordingly.
14091
14092         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
14093
14094         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
14095
14096         * makefile: Pass in /unsafe.
14097
14098 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
14099
14100         * class.cs (MakeKey): Kill routine.
14101
14102         * class.cs (TypeContainer.Define): Correctly define explicit
14103         method implementations (they require the full interface name plus
14104         the method name).
14105
14106         * typemanager.cs: Deply the PtrHashtable here and stop using the
14107         lame keys.  Things work so much better.
14108
14109         This of course broke everyone who depended on `RegisterMethod' to
14110         do the `test for existance' test.  This has to be done elsewhere.
14111
14112         * support.cs (PtrHashtable): A hashtable that avoid comparing with
14113         the object stupid Equals method (because, that like fails all over
14114         the place).  We still do not use it.
14115
14116         * class.cs (TypeContainer.SetRequiredInterface,
14117         TypeContainer.RequireMethods): Killed these two routines and moved
14118         all the functionality to RegisterRequiredImplementations.
14119
14120         (TypeContainer.RegisterRequiredImplementations): This routine now
14121         registers all the implementations required in an array for the
14122         interfaces and abstract methods.  We use an array of structures
14123         which can be computed ahead of time to reduce memory usage and we
14124         also assume that lookups are cheap as most classes will not
14125         implement too many interfaces.
14126
14127         We also avoid creating too many MethodSignatures.
14128
14129         (TypeContainer.IsInterfaceMethod): Update and optionally does not
14130         clear the "pending" bit if we find that there are problems with
14131         the declaration.
14132
14133         (TypeContainer.VerifyPendingMethods): Update to report errors of
14134         methods that look like implementations but are not.
14135
14136         (TypeContainer.Define): Add support for explicit interface method
14137         implementation. 
14138
14139 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
14140
14141         * typemanager.cs: Keep track of the parameters here instead of
14142         being a feature of the TypeContainer.
14143
14144         * class.cs: Drop the registration of parameters here, as
14145         InterfaceMethods are also interface declarations.
14146
14147         * delegate.cs: Register methods with the TypeManager not only with
14148         the TypeContainer.  This code was buggy.
14149
14150         * interface.cs: Full registation here.
14151
14152 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
14153
14154         * expression.cs: Remove reducer for binary expressions, it can not
14155         be done this way.
14156
14157         * const.cs: Put here the code that used to go into constant.cs
14158
14159         * constant.cs: Put here the code for constants, this is a new base
14160         class for Literals.
14161
14162         * literal.cs: Make Literal derive from Constant.
14163
14164 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
14165
14166         * statement.cs (Return.Emit): Report error 157 if the user
14167         attempts to return from a finally block.
14168
14169         (Return.Emit): Instead of emitting a return, jump to the end of
14170         the function.
14171
14172         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
14173         LocalBuilder to store the result of the function.  ReturnLabel is
14174         the target where we jump.
14175
14176
14177 2001-12-09  Radek Doulik  <rodo@ximian.com>
14178
14179         * cs-parser.jay: remember alias in current namespace
14180
14181         * ecore.cs (SimpleName::DoResolve): use aliases for types or
14182         namespaces
14183
14184         * class.cs (LookupAlias): lookup alias in my_namespace
14185
14186         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
14187         aliases hashtable
14188         (LookupAlias): lookup alias in this and if needed in parent
14189         namespaces
14190
14191 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
14192
14193         * support.cs: 
14194
14195         * rootcontext.cs: (ModuleBuilder) Made static, first step into
14196         making things static.  I need this to avoid passing the
14197         TypeContainer when calling ParameterType.
14198
14199         * support.cs (InternalParameters.ParameterType): Remove ugly hack
14200         that did string manipulation to compute the type and then call
14201         GetType.  Use Parameter.ParameterType instead.
14202
14203         * cs-tokenizer.cs: Consume the suffix for floating values.
14204
14205         * expression.cs (ParameterReference): figure out whether this is a
14206         reference parameter or not.  Kill an extra variable by computing
14207         the arg_idx during emission.
14208
14209         * parameter.cs (Parameters.GetParameterInfo): New overloaded
14210         function that returns whether a parameter is an out/ref value or not.
14211
14212         (Parameter.ParameterType): The type of the parameter (base,
14213         without ref/out applied).
14214
14215         (Parameter.Resolve): Perform resolution here.
14216         (Parameter.ExternalType): The full type (with ref/out applied).
14217
14218         * statement.cs (Using.Emit, Using.EmitExpression): Implement
14219         support for expressions on the using statement.
14220
14221 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
14222
14223         * statement.cs (Using.EmitLocalVariableDecls): Split the
14224         localvariable handling of the using statement.
14225
14226         (Block.EmitMeta): Keep track of variable count across blocks.  We
14227         were reusing slots on separate branches of blocks.
14228
14229         (Try.Emit): Emit the general code block, we were not emitting it. 
14230
14231         Check the type of the declaration to be an IDisposable or
14232         something that can be implicity converted to it. 
14233
14234         Emit conversions if required.
14235
14236         * ecore.cs (EmptyExpression): New utility class.
14237         (Expression.ImplicitConversionExists): New utility function.
14238
14239 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
14240
14241         * statement.cs (Using): Implement.
14242
14243         * expression.cs (LocalVariableReference): Support read only variables.
14244
14245         * statement.cs: Remove the explicit emit for the Leave opcode.
14246         (VariableInfo): Add a readonly field.
14247
14248 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
14249
14250         * ecore.cs (ConvCast): new class used to encapsulate the various
14251         explicit integer conversions that works in both checked and
14252         unchecked contexts.
14253
14254         (Expression.ConvertNumericExplicit): Use new ConvCast class to
14255         properly generate the overflow opcodes.
14256
14257 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
14258
14259         * statement.cs: The correct type for the EmptyExpression is the
14260         element_type, not the variable type.  Ravi pointed this out.
14261
14262 2001-12-04  Ravi Pratap  <ravi@ximian.com>
14263
14264         * class.cs (Method::Define): Handle PInvoke methods specially
14265         by using DefinePInvokeMethod instead of the usual one.
14266
14267         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
14268         above to do the task of extracting information and defining the method.
14269
14270 2001-12-04  Ravi Pratap  <ravi@ximian.com>
14271
14272         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
14273         of the condition for string type.
14274
14275         (Emit): Move that here. 
14276
14277         (ArrayCreation::CheckIndices): Keep string literals in their expression
14278         form.
14279
14280         (EmitDynamicInitializers): Handle strings appropriately.
14281
14282 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
14283
14284         * codegen.cs (EmitContext): Replace multiple variables with a
14285         single pointer to the current Switch statement.
14286
14287         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
14288         EmitContext.
14289
14290 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
14291
14292         * statement.cs 
14293
14294         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
14295         default'.
14296
14297         (Foreach.Emit): Foreach on arrays was not setting
14298         up the loop variables (for break/continue).
14299
14300         (GotoCase): Semi-implented.
14301
14302 2001-12-03  Ravi Pratap  <ravi@ximian.com>
14303
14304         * attribute.cs (CheckAttribute): Handle system attributes by using
14305         Attribute.GetAttributes to examine information we need.
14306
14307         (GetValidPlaces): Same here.
14308
14309         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
14310
14311         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
14312
14313         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
14314
14315         (Method::Define): Set appropriate flags if we have a DllImport attribute.
14316
14317         (Method::Emit): Handle the case when we are a PInvoke method.
14318
14319 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
14320
14321         * expression.cs: Use ResolveWithSimpleName on compound names.
14322
14323 2001-12-02  Ravi Pratap  <ravi@ximian.com>
14324
14325         * constant.cs (EmitConstant): Make sure we resolve the associated expression
14326         before trying to reduce it.
14327
14328         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
14329
14330         * constant.cs (LookupConstantValue): Implement.
14331
14332         (EmitConstant): Use the above in emitting the constant.
14333
14334         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
14335         that are user-defined by doing a LookupConstantValue on them.
14336
14337         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
14338         too, like above.
14339
14340 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
14341
14342         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
14343
14344         (BaseAccess.DoResolve): Implement.
14345
14346         (MemberAccess.DoResolve): Split this routine into a
14347         ResolveMemberAccess routine that can be used independently
14348
14349 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
14350
14351         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
14352         As that share bits of the implementation.  Is returns a boolean,
14353         while As returns the Type that is being probed.
14354
14355 2001-12-01  Ravi Pratap  <ravi@ximian.com>
14356
14357         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
14358         instead of a Literal - much easier.
14359
14360         (EnumInTransit): Remove - utterly useless :-)
14361
14362         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
14363
14364         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
14365
14366         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
14367         chain when we have no associated expression.
14368
14369 2001-11-30  Ravi Pratap  <ravi@ximian.com>
14370
14371         * constant.cs (Define): Use Location while reporting the errror.
14372
14373         Also emit a warning when 'new' is used and there is no inherited
14374         member to hide.
14375
14376         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
14377         populated.
14378
14379         (LookupEnumValue): Implement to lookup an enum member's value and define it
14380         if necessary.
14381
14382         (Populate): Re-write accordingly to use the above routine.
14383
14384 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
14385
14386         * expression.cs (This): Fix prototype for DoResolveLValue to
14387         override the base class DoResolveLValue.
14388
14389         * cs-parser.cs: Report errors cs574 and cs575 (destructor
14390         declarations) 
14391
14392         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
14393         (we need to load the address of the field here).  This fixes
14394         test-22. 
14395
14396         (FieldExpr.DoResolveLValue): Call the DoResolve
14397         function to initialize the Instance expression.
14398
14399         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
14400         correctly the GetEnumerator operation on a value type.
14401
14402         * cs-parser.jay: Add more simple parsing error catches.
14403
14404         * statement.cs (Switch): Add support for string switches.
14405         Handle null specially.
14406
14407         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
14408
14409 2001-11-28  Ravi Pratap  <ravi@ximian.com>
14410
14411         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
14412
14413         (declare_local_constant): New helper function.
14414
14415         * statement.cs (AddConstant): Keep a separate record of constants
14416
14417         (IsConstant): Implement to determine if a variable is a constant.
14418
14419         (GetConstantExpression): Implement.
14420
14421         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
14422
14423         * statement.cs (IsVariableDefined): Re-write.
14424
14425 2001-11-27  Ravi Pratap  <ravi@ximian.com>
14426
14427         * class.cs (TypeContainer::FindMembers): Look for constants
14428         in the case when we are looking for MemberTypes.Field
14429
14430         * expression.cs (MemberAccess::DoResolve): Check that in the
14431         case we are a FieldExpr and a Literal, we are not being accessed
14432         by an instance reference.
14433
14434         * cs-parser.jay (local_constant_declaration): Implement.
14435
14436         (declaration_statement): Implement for constant declarations.
14437
14438 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
14439
14440         * statement.cs (Switch): Catch double defaults.
14441
14442         (Switch): More work on the switch() statement
14443         implementation.  It works for integral values now, need to finish
14444         string support.
14445
14446
14447 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
14448
14449         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
14450         integer literals into other integer literals.  To be used by
14451         switch. 
14452
14453 2001-11-24  Ravi Pratap  <ravi@ximian.com>
14454
14455         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
14456         some memory.
14457
14458         (EmitDynamicInitializers): Cope with the above since we extract data
14459         directly from ArrayData now.
14460
14461         (ExpectInitializers): Keep track of whether initializers are mandatory
14462         or not.
14463
14464         (Bounds): Make it a hashtable to prevent the same dimension being 
14465         recorded for every element in that dimension.
14466
14467         (EmitDynamicInitializers): Fix bug which prevented the Set array method
14468         from being found.
14469
14470         Also fix bug which was causing the indices to be emitted in the reverse
14471         order.
14472
14473 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
14474
14475         * expression.cs (ArrayCreation): Implement the bits that Ravi left
14476         unfinished.  They do not work, because the underlying code is
14477         sloppy.
14478
14479 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
14480
14481         * cs-parser.jay: Remove bogus fixme.
14482
14483         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
14484         on Switch statement.
14485
14486 2001-11-23  Ravi Pratap  <ravi@ximian.com>
14487
14488         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
14489         the same. 
14490
14491         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
14492         parameter. Apparently, any expression is allowed. 
14493
14494         (ValidateInitializers): Update accordingly.
14495
14496         (CheckIndices): Fix some tricky bugs thanks to recursion.
14497
14498         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
14499         I was being completely brain-dead.
14500
14501         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
14502         and re-write acordingly.
14503
14504         (DelegateInvocation): Re-write accordingly.
14505
14506         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
14507
14508         (MakeByteBlob): Handle types more correctly.
14509
14510         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
14511         initialization from expressions but it is incomplete because I am a complete
14512         Dodo :-|
14513
14514 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
14515
14516         * statement.cs (If.Emit): Fix a bug that generated incorrect code
14517         on If.  Basically, we have to return `true' (ie, we do return to
14518         our caller) only if both branches of the if return.
14519
14520         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
14521         short-circuit operators, handle them as short circuit operators. 
14522
14523         (Cast.DoResolve): Resolve type.
14524         (Cast.Cast): Take an expression as the target type.
14525
14526         * cs-parser.jay (cast_expression): Remove old hack that only
14527         allowed a limited set of types to be handled.  Now we take a
14528         unary_expression and we resolve to a type during semantic
14529         analysis.
14530
14531         Use the grammar productions from Rhys to handle casts (this is
14532         not complete like Rhys syntax yet, we fail to handle that corner
14533         case that C# has regarding (-x), but we will get there.
14534
14535 2001-11-22  Ravi Pratap  <ravi@ximian.com>
14536
14537         * class.cs (EmitFieldInitializer): Take care of the case when we have a
14538         field which is an array type.
14539
14540         * cs-parser.jay (declare_local_variables): Support array initialization too.
14541
14542         * typemanager.cs (MakeKey): Implement.
14543
14544         (everywhere): Use the above appropriately.
14545
14546         * cs-parser.jay (for_statement): Update for array initialization while
14547         declaring variables.
14548
14549         * ecore.cs : The error message was correct, it's the variable's names that
14550         were misleading ;-) Make the code more readable.
14551
14552         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
14553         the correct type etc.
14554
14555         (ConvertExplicit): Handle Enum types by examining the underlying type.
14556
14557 2001-11-21  Ravi Pratap  <ravi@ximian.com>
14558
14559         * parameter.cs (GetCallingConvention): Always return
14560         CallingConventions.Standard for now.
14561
14562 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
14563
14564         * expression.cs (Binary.ResolveOperator): Update the values of `l'
14565         and `r' after calling DoNumericPromotions.
14566
14567         * ecore.cs: Fix error message (the types were in the wrong order).
14568
14569         * statement.cs (Foreach.ProbeCollectionType): Need to pass
14570         BindingFlags.Instance as well 
14571
14572         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
14573         implicit int literal conversion in an empty cast so that we
14574         propagate the right type upstream.
14575
14576         (UnboxCast): new class used to unbox value types.
14577         (Expression.ConvertExplicit): Add explicit type conversions done
14578         by unboxing.
14579
14580         (Expression.ImplicitNumericConversion): Oops, forgot to test for
14581         the target type before applying the implicit LongLiterals to ULong
14582         literal cast.
14583
14584 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
14585
14586         * cs-parser.jay (for_statement): Reworked the way For works: now
14587         we declare manually any variables that are introduced in
14588         for_initializer to solve the problem of having out-of-band code
14589         emition (that is what got for broken).
14590
14591         (declaration_statement): Perform the actual variable declaration
14592         that used to be done in local_variable_declaration here.
14593
14594         (local_variable_declaration): Do not declare anything, just pass
14595         the information on a DictionaryEntry
14596
14597 2001-11-20  Ravi Pratap  <ravi@ximian.com>
14598
14599         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
14600         re-write of the logic to now make it recursive.
14601
14602         (UpdateIndices): Re-write accordingly.
14603
14604         Store element data in a separate ArrayData list in the above methods.
14605
14606         (MakeByteBlob): Implement to dump the array data into a byte array.
14607
14608 2001-11-19  Ravi Pratap  <ravi@ximian.com>
14609
14610         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
14611         into CheckIndices.
14612
14613         * constant.cs (Define): Implement.
14614
14615         (EmitConstant): Re-write fully.
14616
14617         Pass in location info.
14618
14619         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
14620         respectively.
14621
14622         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
14623         DictionaryEntry since we need location info too.
14624
14625         (constant_declaration): Update accordingly.
14626
14627         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
14628         code into another method : UpdateIndices.
14629
14630 2001-11-18  Ravi Pratap  <ravi@ximian.com>
14631
14632         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
14633         some type checking etc.
14634
14635 2001-11-17  Ravi Pratap  <ravi@ximian.com>
14636
14637         * expression.cs (ArrayCreation::ValidateInitializers): Implement
14638         bits to provide dimension info if the user skips doing that.
14639
14640         Update second constructor to store the rank correctly.
14641
14642 2001-11-16  Ravi Pratap  <ravi@ximian.com>
14643
14644         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
14645         and try to implement.
14646
14647         * ../errors/cs0150.cs : Add.
14648
14649         * ../errors/cs0178.cs : Add.
14650
14651 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
14652
14653         * statement.cs: Implement foreach on multi-dimensional arrays. 
14654
14655         * parameter.cs (Parameters.GetParameterByName): Also lookup the
14656         name of the params argument.
14657
14658         * expression.cs: Use EmitStoreOpcode to get the right opcode while
14659         initializing the array.
14660
14661         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
14662         we can use this elsewhere.
14663
14664         * statement.cs: Finish implementation of foreach for single
14665         dimension arrays.
14666
14667         * cs-parser.jay: Use an out-of-band stack to pass information
14668         around, I wonder why I need this.
14669
14670         foreach_block: Make the new foreach_block the current_block.
14671
14672         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
14673         function used to return a static Parameters structure.  Used for
14674         empty parameters, as those are created very frequently.
14675
14676         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
14677
14678 2001-11-15  Ravi Pratap  <ravi@ximian.com>
14679
14680         * interface.cs : Default modifier is private, not public. The
14681         make verify test passes again.
14682
14683 2001-11-15  Ravi Pratap  <ravi@ximian.com>
14684
14685         * support.cs (ReflectionParameters): Fix logic to determine
14686         whether the last parameter is a params one. Test 9 passes again.
14687
14688         * delegate.cs (Populate): Register the builders we define with
14689         RegisterParameterForBuilder. Test 19 passes again.
14690
14691         * cs-parser.jay (property_declaration): Reference $6 instead
14692         of $$ to get at the location.
14693
14694         (indexer_declaration): Similar stuff.
14695
14696         (attribute): Ditto.
14697
14698         * class.cs (Property): Register parameters for the Get and Set methods
14699         if they exist. Test 23 passes again.
14700
14701         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
14702         call to EmitArguments as we are sure there aren't any params arguments. 
14703         Test 32 passes again.
14704
14705         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
14706         IndexOutOfRangeException. 
14707
14708         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
14709         Test 33 now passes again.
14710
14711 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
14712
14713         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
14714         broke a bunch of things.  Will have to come up with a better way
14715         of tracking locations.
14716
14717         * statement.cs: Implemented foreach for single dimension arrays.
14718
14719 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
14720
14721         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
14722         an error.  This removes the lookup from the critical path.
14723
14724         * cs-parser.jay: Removed use of temporary_loc, which is completely
14725         broken. 
14726
14727 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
14728
14729         * support.cs (ReflectionParameters.ParameterModifier): Report
14730         whether the argument is a PARAMS argument or not.
14731
14732         * class.cs: Set the attribute `ParamArrayAttribute' on the
14733         parameter argument.
14734
14735         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
14736         and cons_param_array_attribute (ConstructorInfo for
14737         ParamArrayAttribute)., 
14738
14739         * codegen.cs: Emit the return using the `Return' statement, that
14740         way we can report the error correctly for missing return values. 
14741
14742         * class.cs (Method.Emit): Clean up.
14743
14744         * expression.cs (Argument.Resolve): Take another argument: the
14745         location where this argument is used.  Notice that this is not
14746         part of the "Argument" class as to reduce the size of the
14747         structure (we know the approximate location anyways).
14748
14749         Test if the argument is a variable-reference, if not, then
14750         complain with a 206.
14751
14752         (Argument.Emit): Emit addresses of variables.
14753
14754         (Argument.FullDesc): Simplify.
14755
14756         (Invocation.DoResolve): Update for Argument.Resolve.
14757
14758         (ElementAccess.DoResolve): ditto.
14759
14760         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
14761         method should be virtual, as this method is always virtual.
14762
14763         (NewDelegate.DoResolve): Update for Argument.Resolve.
14764
14765         * class.cs (ConstructorInitializer.DoResolve): ditto.
14766
14767         * attribute.cs (Attribute.Resolve): ditto.
14768
14769 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
14770
14771         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
14772
14773         * expression.cs (ParameterReference): Drop IStackStorage and implement
14774         IAssignMethod instead. 
14775
14776         (LocalVariableReference): ditto.
14777
14778         * ecore.cs (FieldExpr): Drop IStackStorage and implement
14779         IAssignMethod instead. 
14780
14781 2001-11-13  Miguel de Icaza <miguel@ximian.com>
14782
14783         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
14784         enumerations that are used in heavily used structures derive from
14785         byte in a laughable and pathetic attempt to reduce memory usage.
14786         This is the kind of pre-optimzations that you should not do at
14787         home without adult supervision.
14788
14789         * expression.cs (UnaryMutator): New class, used to handle ++ and
14790         -- separatedly from the other unary operators.  Cleans up the
14791         code, and kills the ExpressionStatement dependency in Unary.
14792
14793         (Unary): Removed `method' and `Arguments' from this class, making
14794         it smaller, and moving it all to SimpleCall, so I can reuse this
14795         code in other locations and avoid creating a lot of transient data
14796         strucutres when not required.
14797
14798         * cs-parser.jay: Adjust for new changes.
14799
14800 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
14801
14802         * enum.cs (Enum.Populate): If there is a failure during
14803         definition, return
14804
14805         * cs-parser.jay (opt_enum_base): we used to catch type errors
14806         here, but this is really incorrect.  The type error should be
14807         catched during semantic analysis.
14808
14809 2001-12-11  Ravi Pratap  <ravi@ximian.com>
14810
14811         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
14812         current_local_parameters as expected since I, in my stupidity, had forgotten
14813         to do this :-)
14814
14815         * attribute.cs (GetValidPlaces): Fix stupid bug.
14816
14817         * class.cs (Method::Emit): Perform check on applicability of attributes.
14818
14819         (Constructor::Emit): Ditto.
14820
14821         (Field::Emit): Ditto.
14822
14823         (Field.Location): Store location information.
14824
14825         (Property, Event, Indexer, Operator): Ditto.
14826
14827         * cs-parser.jay (field_declaration): Pass in location for each field.
14828
14829         * ../errors/cs0592.cs : Add.
14830
14831 2001-11-12  Ravi Pratap  <ravi@ximian.com>
14832
14833         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
14834
14835         (InitCoreTypes): Update accordingly.
14836
14837         (RegisterAttrType, LookupAttr): Implement.
14838
14839         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
14840         info about the same.
14841
14842         (Resolve): Update to populate the above as necessary.
14843
14844         (Error592): Helper.
14845
14846         (GetValidPlaces): Helper to the above.
14847
14848         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
14849
14850         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
14851
14852 2001-11-12  Ravi Pratap  <ravi@ximian.com>
14853
14854         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
14855
14856         * ../errors/cs0617.cs : Add.
14857
14858 2001-11-11  Ravi Pratap  <ravi@ximian.com>
14859
14860         * enum.cs (Emit): Rename to Populate to be more consistent with what
14861         we expect it to do and when exactly it is called.
14862
14863         * class.cs, rootcontext.cs : Update accordingly.
14864
14865         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
14866         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
14867
14868         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
14869
14870         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
14871         of a fieldinfo using the above, when dealing with a FieldBuilder.
14872
14873 2001-11-10  Ravi Pratap  <ravi@ximian.com>
14874
14875         * ../errors/cs0031.cs : Add.
14876
14877         * ../errors/cs1008.cs : Add.
14878
14879         * ../errrors/cs0543.cs : Add.
14880
14881         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
14882         enum type.
14883
14884         (FindMembers): Implement.
14885
14886         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
14887         enums and delegates too.
14888
14889         (enum_types): Rename to builder_to_enum.
14890
14891         (delegate_types): Rename to builder_to_delegate.
14892
14893         * delegate.cs (FindMembers): Implement.
14894
14895 2001-11-09  Ravi Pratap  <ravi@ximian.com>
14896
14897         * typemanager.cs (IsEnumType): Implement.
14898
14899         * enum.cs (Emit): Re-write parts to account for the underlying type
14900         better and perform checking etc.
14901
14902         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
14903         of the underlying type.
14904
14905         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
14906         value
14907
14908         * enum.cs (error31): Helper to report error #31.
14909
14910         * cs-parser.jay (enum_declaration): Store location of each member too.
14911
14912         * enum.cs (member_to_location): New hashtable. 
14913
14914         (AddEnumMember): Update location hashtable.
14915
14916         (Emit): Use the location of each member while reporting errors.
14917
14918 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
14919
14920         * cs-parser.jay: A for_initializer if is a
14921         local_variable_declaration really ammount to have an implicit
14922         block with the variable declaration and no initializer for for.
14923
14924         * statement.cs (For.Emit): Cope with null initializers.
14925
14926         This fixes the infinite loop on for initializers.
14927
14928 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
14929
14930         * enum.cs: More cleanup.
14931
14932         * ecore.cs: Remove dead code.
14933
14934         * class.cs (Property.Emit): More simplification.
14935         (Event.Emit): ditto.
14936
14937         Reworked to have less levels of indentation.
14938
14939 2001-11-08  Ravi Pratap  <ravi@ximian.com>
14940
14941         * class.cs (Property): Emit attributes.
14942
14943         (Field): Ditto.
14944
14945         (Event): Ditto.
14946
14947         (Indexer): Ditto.
14948
14949         (Operator): Ditto.
14950
14951         * enum.cs (Emit): Ditto.
14952
14953         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
14954         Enums too.
14955
14956         * class.cs (Field, Event, etc.): Move attribute generation into the
14957         Emit method everywhere.
14958
14959         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
14960         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
14961         as we had no way of defining nested enums !
14962
14963         * rootcontext.cs : Adjust code accordingly.
14964
14965         * typemanager.cs (AddEnumType): To keep track of enum types separately.
14966
14967 2001-11-07  Ravi Pratap  <ravi@ximian.com>
14968
14969         * expression.cs (EvalConstantExpression): Move into ecore.cs
14970
14971         * enum.cs (Enum): Rename some members and make them public and readonly
14972         according to our convention.
14973
14974         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
14975         nothing else.
14976
14977         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
14978
14979         (Enum::Emit): Write a simple version for now which doesn't try to compute
14980         expressions. I shall modify this to be more robust in just a while.
14981
14982         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
14983
14984         (TypeContainer::CloseType): Create the Enum types too.
14985
14986         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
14987
14988         * expression.cs (EvalConstantExpression): Get rid of completely.
14989
14990         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
14991         user-defined values and other cases.
14992
14993         (IsValidEnumLiteral): Helper function.
14994
14995         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
14996         out there in the case we had a literal FieldExpr.
14997
14998         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
14999
15000         (Literalize): Revamp a bit to take two arguments.
15001
15002         (EnumLiteral): New class which derives from Literal to wrap enum literals.
15003
15004 2001-11-06  Ravi Pratap  <ravi@ximian.com>
15005
15006         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
15007
15008         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
15009
15010         (Resolve): Use the above to ensure we have proper initializers.
15011
15012 2001-11-05  Ravi Pratap  <ravi@ximian.com>
15013
15014         * expression.cs (Expression::EvalConstantExpression): New method to 
15015         evaluate constant expressions.
15016
15017         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
15018
15019 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
15020
15021         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
15022         in an array.
15023
15024         (Binary.ResolveOperator): Handle operator != (object a, object b)
15025         and operator == (object a, object b);
15026
15027         (Binary.DoNumericPromotions): Indicate whether the numeric
15028         promotion was possible.
15029
15030         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
15031         Implement.  
15032
15033         Made the ArrayAccess implement interface IAssignMethod instead of
15034         IStackStore as the order in which arguments are passed reflects
15035         this.
15036
15037         * assign.cs: Instead of using expr.ExprClass to select the way of
15038         assinging, probe for the IStackStore/IAssignMethod interfaces.
15039
15040         * typemanager.cs: Load InitializeArray definition.
15041
15042         * rootcontext.cs (RootContext.MakeStaticData): Used to define
15043         static data that can be used to initialize arrays. 
15044
15045 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
15046
15047         * expression.cs: Handle operator== and operator!= for booleans.
15048
15049         (Conditioal.Reduce): Implement reducer for the ?: operator.
15050
15051         (Conditional.Resolve): Implement dead code elimination.
15052
15053         (Binary.Resolve): Catch string literals and return a new
15054         concatenated string.
15055
15056         (Unary.Reduce): Implement reduction of unary expressions.
15057
15058         * ecore.cs: Split out the expression core handling here.
15059
15060         (Expression.Reduce): New method used to perform constant folding
15061         and CSE.  This is needed to support constant-expressions. 
15062
15063         * statement.cs (Statement.EmitBoolExpression): Pass true and false
15064         targets, and optimize for !x.
15065
15066 2001-11-04  Ravi Pratap  <ravi@ximian.com>
15067
15068         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
15069         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
15070         set custom atttributes.
15071
15072         * literal.cs (Literal::GetValue): New abstract method to return the actual
15073         value of the literal, cast as an object.
15074
15075         (*Literal): Implement GetValue method.
15076
15077         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
15078         expressions to the arraylist but objects of type Argument.
15079
15080         * class.cs (TypeContainer::Emit): Emit our attributes too.
15081
15082         (Method::Emit, Constructor::Emit): Ditto.
15083
15084         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
15085         to be ignoring earlier.
15086
15087 2001-11-03  Ravi Pratap  <ravi@ximian.com>
15088
15089         * attribute.cs (AttributeSection::Define): Implement to do the business
15090         of constructing a CustomAttributeBuilder.
15091
15092         (Attribute): New trivial class. Increases readability of code.  
15093
15094         * cs-parser.jay : Update accordingly.
15095
15096         (positional_argument_list, named_argument_list, named_argument): New rules
15097
15098         (attribute_arguments): Use the above so that we are more correct.
15099
15100 2001-11-02  Ravi Pratap  <ravi@ximian.com>
15101
15102         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
15103         to perform all checks for a method with a params parameter.
15104
15105         (Invocation::OverloadResolve): Update to use the above method and therefore
15106         cope correctly with params method invocations.
15107
15108         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
15109         params too.
15110
15111         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
15112         constructors in our parent too because we can't afford to miss out on 
15113         protected ones ;-)
15114
15115         * attribute.cs (AttributeSection): New name for the class Attribute
15116
15117         Other trivial changes to improve readability.
15118
15119         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
15120         use the new class names.
15121
15122 2001-11-01  Ravi Pratap  <ravi@ximian.com>
15123
15124         * class.cs (Method::Define): Complete definition for params types too
15125
15126         (Indexer::Define): Ditto.
15127
15128         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
15129         Cope everywhere with a request for info about the array parameter.
15130
15131 2001-11-01  Ravi Pratap  <ravi@ximian.com>
15132
15133         * tree.cs (RecordNamespace): Fix up to check for the correct key.
15134
15135         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
15136         local_variable_type to extract the string corresponding to the type.
15137
15138         (local_variable_type): Fixup the action to use the new helper method.
15139
15140         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
15141         go.
15142
15143         * expression.cs : Clean out code which uses the above.
15144
15145 2001-10-31  Ravi Pratap  <ravi@ximian.com>
15146
15147         * typemanager.cs (RegisterMethod): Check if we already have an existing key
15148         and bale out if necessary by returning a false.
15149
15150         (RegisterProperty): Ditto.
15151
15152         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
15153         and print out appropriate error messages.
15154
15155         * interface.cs (everywhere): Ditto.
15156
15157         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
15158         location to constructor.
15159
15160         * class.cs (Property, Event, Indexer): Update accordingly.
15161
15162         * ../errors/cs111.cs : Added.
15163
15164         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
15165         of a method, as laid down by the spec.
15166
15167         (Invocation::OverloadResolve): Use the above method.
15168
15169 2001-10-31  Ravi Pratap  <ravi@ximian.com>
15170
15171         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
15172         now take a TypeContainer and a Parameters object.
15173
15174         (ParameterData): Modify return type of ParameterModifier method to be 
15175         Parameter.Modifier and not a string.
15176
15177         (ReflectionParameters, InternalParameters): Update accordingly.
15178
15179         * expression.cs (Argument::GetParameterModifier): Same here.
15180
15181         * support.cs (InternalParameters::ParameterType): Find a better way of determining
15182         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
15183         symbol in it at all so maybe this is only for now.
15184
15185 2001-10-30  Ravi Pratap  <ravi@ximian.com>
15186
15187         * support.cs (InternalParameters): Constructor now takes an extra argument 
15188         which is the actual Parameters class.
15189
15190         (ParameterDesc): Update to provide info on ref/out modifiers.
15191
15192         * class.cs (everywhere): Update call to InternalParameters to pass in
15193         the second argument too.
15194
15195         * support.cs (ParameterData): Add ParameterModifier, which is a method 
15196         to return the modifier info [ref/out etc]
15197
15198         (InternalParameters, ReflectionParameters): Implement the above.
15199
15200         * expression.cs (Argument::ParameterModifier): Similar function to return
15201         info about the argument's modifiers.
15202
15203         (Invocation::OverloadResolve): Update to take into account matching modifiers 
15204         too.
15205
15206         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
15207         a new SetFormalParameters object which we pass to InternalParameters.
15208
15209 2001-10-30  Ravi Pratap  <ravi@ximian.com>
15210
15211         * expression.cs (NewArray): Merge into the ArrayCreation class.
15212
15213 2001-10-29  Ravi Pratap  <ravi@ximian.com>
15214
15215         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
15216         NewUserdefinedArray into one as there wasn't much of a use in having
15217         two separate ones.
15218
15219         * expression.cs (Argument): Change field's name to ArgType from Type.
15220
15221         (Type): New readonly property which returns the proper type, taking into 
15222         account ref/out modifiers.
15223
15224         (everywhere): Adjust code accordingly for the above.
15225
15226         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
15227         whether we are emitting for a ref or out parameter.
15228
15229         * expression.cs (Argument::Emit): Use the above field to set the state.
15230
15231         (LocalVariableReference::Emit): Update to honour the flag and emit the
15232         right stuff.
15233
15234         * parameter.cs (Attributes): Set the correct flags for ref parameters.
15235
15236         * expression.cs (Argument::FullDesc): New function to provide a full desc.
15237
15238         * support.cs (ParameterData): Add method ParameterDesc to the interface.
15239
15240         (ReflectionParameters, InternalParameters): Implement the above method.
15241
15242         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
15243         reporting errors.
15244
15245         (Invocation::FullMethodDesc): Ditto. 
15246
15247 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
15248
15249         * cs-parser.jay: Add extra production for the second form of array
15250         creation. 
15251
15252         * expression.cs (ArrayCreation): Update to reflect the above
15253         change. 
15254
15255         * Small changes to prepare for Array initialization.
15256
15257 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
15258
15259         * typemanager.cs (ImplementsInterface): interface might be null;
15260         Deal with this problem;
15261
15262         Also, we do store negative hits on the cache (null values), so use
15263         this instead of calling t.GetInterfaces on the type everytime.
15264
15265 2001-10-28  Ravi Pratap  <ravi@ximian.com>
15266
15267         * typemanager.cs (IsBuiltinType): New method to help determine the same.
15268
15269         * expression.cs (New::DoResolve): Get rid of array creation code and instead
15270         split functionality out into different classes.
15271
15272         (New::FormArrayType): Move into NewBuiltinArray.
15273
15274         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
15275         quite useless.
15276
15277         (NewBuiltinArray): New class to handle creation of built-in arrays.
15278
15279         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
15280         account creation of one-dimensional arrays.
15281
15282         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
15283
15284         (NewUserdefinedArray::DoResolve): Implement.
15285
15286         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
15287
15288         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
15289         we maintain inside the TypeManager. This is necessary to perform lookups on the
15290         module builder.
15291
15292         (LookupType): Update to perform GetType on the module builders too.     
15293
15294         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
15295
15296         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
15297
15298 2001-10-23  Ravi Pratap  <ravi@ximian.com>
15299
15300         * expression.cs (New::DoResolve): Implement guts of array creation.
15301
15302         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
15303
15304 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
15305
15306         * expression.cs: Fix bug I introduced lsat night that broke
15307         Delegates. 
15308
15309         (Expression.Resolve): Report a 246 error (can not resolve name)
15310         if we find a SimpleName in the stream.
15311
15312         (Expression.ResolveLValue): Ditto.
15313
15314         (Expression.ResolveWithSimpleName): This function is a variant of
15315         ResolveName, this one allows SimpleNames to be returned without a
15316         warning.  The only consumer of SimpleNames is MemberAccess
15317
15318 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
15319
15320         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
15321         might arrive here.  I have my doubts that this is correct.
15322
15323         * statement.cs (Lock): Implement lock statement.
15324
15325         * cs-parser.jay: Small fixes to support `lock' and `using'
15326
15327         * cs-tokenizer.cs: Remove extra space
15328
15329         * driver.cs: New flag --checked, allows to turn on integer math
15330         checking. 
15331
15332         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
15333         Threading.Monitor.Exit 
15334
15335 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
15336
15337         * expression.cs (IndexerAccess::DoResolveLValue): Set the
15338         Expression Class to be IndexerAccess.
15339
15340         Notice that Indexer::DoResolve sets the eclass to Value.
15341
15342 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
15343
15344         * class.cs (TypeContainer::Emit): Emit code for indexers.
15345
15346         * assign.cs (IAssignMethod): New interface implemented by Indexers
15347         and Properties for handling assignment.
15348
15349         (Assign::Emit): Simplify and reuse code. 
15350
15351         * expression.cs (IndexerAccess, PropertyExpr): Implement
15352         IAssignMethod, clean up old code. 
15353
15354 2001-10-22  Ravi Pratap  <ravi@ximian.com>
15355
15356         * typemanager.cs (ImplementsInterface): New method to determine if a type
15357         implements a given interface. Provides a nice cache too.
15358
15359         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
15360         method.
15361
15362         (ConvertReferenceExplicit): Ditto.
15363
15364         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
15365         various methods, with correct names etc.
15366
15367         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
15368         Operator.UnaryNegation.
15369
15370         * cs-parser.jay (operator_declarator): Be a little clever in the case where
15371         we have a unary plus or minus operator.
15372
15373         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
15374         UnaryMinus.
15375
15376         * everywhere : update accordingly.
15377
15378         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
15379         respectively.
15380
15381         * class.cs (Method::Define): For the case where we are implementing a method
15382         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
15383         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
15384
15385 2001-10-21  Ravi Pratap  <ravi@ximian.com>
15386
15387         * interface.cs (FindMembers): Implement to work around S.R.E
15388         lameness.
15389
15390         * typemanager.cs (IsInterfaceType): Implement.
15391
15392         (FindMembers): Update to handle interface types too.
15393
15394         * expression.cs (ImplicitReferenceConversion): Re-write bits which
15395         use IsAssignableFrom as that is not correct - it doesn't work.
15396
15397         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
15398         and accordingly override EmitStatement.
15399
15400         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
15401         using the correct logic :-)
15402
15403 2001-10-19  Ravi Pratap  <ravi@ximian.com>
15404
15405         * ../errors/cs-11.cs : Add to demonstrate error -11 
15406
15407 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
15408
15409         * assign.cs (Assign::Resolve): Resolve right hand side first, and
15410         then pass this as a hint to ResolveLValue.
15411
15412         * expression.cs (FieldExpr): Add Location information
15413
15414         (FieldExpr::LValueResolve): Report assignment to readonly
15415         variable. 
15416
15417         (Expression::ExprClassFromMemberInfo): Pass location information.
15418
15419         (Expression::ResolveLValue): Add new method that resolves an
15420         LValue. 
15421
15422         (Expression::DoResolveLValue): Default invocation calls
15423         DoResolve. 
15424
15425         (Indexers): New class used to keep track of indexers in a given
15426         Type. 
15427
15428         (IStackStore): Renamed from LValue, as it did not really describe
15429         what this did.  Also ResolveLValue is gone from this interface and
15430         now is part of Expression.
15431
15432         (ElementAccess): Depending on the element access type
15433
15434         * typemanager.cs: Add `indexer_name_type' as a Core type
15435         (System.Runtime.CompilerServices.IndexerNameAttribute)
15436
15437         * statement.cs (Goto): Take a location.
15438
15439 2001-10-18  Ravi Pratap  <ravi@ximian.com>
15440
15441         * delegate.cs (Delegate::VerifyDelegate): New method to verify
15442         if two delegates are compatible.
15443
15444         (NewDelegate::DoResolve): Update to take care of the case when
15445         we instantiate a delegate from another delegate.
15446
15447         * typemanager.cs (FindMembers): Don't even try to look up members
15448         of Delegate types for now.
15449
15450 2001-10-18  Ravi Pratap  <ravi@ximian.com>
15451
15452         * delegate.cs (NewDelegate): New class to take care of delegate
15453         instantiation.
15454
15455         * expression.cs (New): Split the delegate related code out into 
15456         the NewDelegate class.
15457
15458         * delegate.cs (DelegateInvocation): New class to handle delegate 
15459         invocation.
15460
15461         * expression.cs (Invocation): Split out delegate related code into
15462         the DelegateInvocation class.
15463
15464 2001-10-17  Ravi Pratap  <ravi@ximian.com>
15465
15466         * expression.cs (New::DoResolve): Implement delegate creation fully
15467         and according to the spec.
15468
15469         (New::DoEmit): Update to handle delegates differently.
15470
15471         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
15472         because of which we were printing out arguments in reverse order !
15473
15474         * delegate.cs (VerifyMethod): Implement to check if the given method
15475         matches the delegate.
15476
15477         (FullDelegateDesc): Implement.
15478
15479         (VerifyApplicability): Implement.
15480
15481         * expression.cs (Invocation::DoResolve): Update to accordingly handle
15482         delegate invocations too.
15483
15484         (Invocation::Emit): Ditto.
15485
15486         * ../errors/cs1593.cs : Added.
15487
15488         * ../errors/cs1594.cs : Added.
15489
15490         * delegate.cs (InstanceExpression, TargetMethod): New properties.
15491
15492 2001-10-16  Ravi Pratap  <ravi@ximian.com>
15493
15494         * typemanager.cs (intptr_type): Core type for System.IntPtr
15495
15496         (InitCoreTypes): Update for the same.
15497
15498         (iasyncresult_type, asynccallback_type): Ditto.
15499
15500         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
15501         correct.
15502
15503         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
15504         too.
15505
15506         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
15507         the builders for the 4 members of a delegate type :-)
15508
15509         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
15510         type.
15511
15512         * expression.cs (New::DoResolve): Implement guts for delegate creation.
15513
15514         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
15515
15516 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
15517
15518         * statement.cs (Break::Emit): Implement.   
15519         (Continue::Emit): Implement.
15520
15521         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
15522         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
15523         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
15524         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
15525         end loop
15526
15527         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
15528         properties that track the label for the current loop (begin of the
15529         loop and end of the loop).
15530
15531 2001-10-15  Ravi Pratap  <ravi@ximian.com>
15532
15533         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
15534         use of emitting anything at all.
15535
15536         * class.cs, rootcontext.cs : Get rid of calls to the same.
15537
15538         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
15539
15540         (Populate): Define the constructor correctly and set the implementation
15541         attributes.
15542
15543         * typemanager.cs (delegate_types): New hashtable to hold delegates that
15544         have been defined.
15545
15546         (AddDelegateType): Implement.
15547
15548         (IsDelegateType): Implement helper method.
15549
15550         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
15551
15552         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
15553         and accordingly handle it.
15554
15555         * delegate.cs (Populate): Take TypeContainer argument.
15556         Implement bits to define the Invoke method. However, I still haven't figured out
15557         how to take care of the native int bit :-(
15558
15559         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
15560         Qualify the name of the delegate, not its return type !
15561
15562         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
15563         conversion.
15564
15565         (StandardConversionExists): Checking for array types turns out to be recursive.
15566
15567         (ConvertReferenceExplicit): Implement array conversion.
15568
15569         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
15570
15571 2001-10-12  Ravi Pratap  <ravi@ximian.com>
15572
15573         * cs-parser.jay (delegate_declaration): Store the fully qualified
15574         name as it is a type declaration.
15575
15576         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
15577         readonly.
15578
15579         (DefineDelegate): Renamed from Define. Does the same thing essentially,
15580         as TypeContainer::DefineType.
15581
15582         (Populate): Method in which all the definition of the various methods (Invoke)
15583         etc is done.
15584
15585         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
15586         see.
15587
15588         (CloseDelegate): Finally creates the delegate.
15589
15590         * class.cs (TypeContainer::DefineType): Update to define delegates.
15591         (Populate, Emit and CloseType): Do the same thing here too.
15592
15593         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
15594         delegates in all these operations.
15595
15596 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
15597
15598         * expression.cs: LocalTemporary: a new expression used to
15599         reference a temporary that has been created.
15600
15601         * assign.cs: Handle PropertyAccess back here, so that we can
15602         provide the proper semantic access to properties.
15603
15604         * expression.cs (Expression::ConvertReferenceExplicit): Implement
15605         a few more explicit conversions. 
15606
15607         * modifiers.cs: `NEW' modifier maps to HideBySig.
15608
15609         * expression.cs (PropertyExpr): Make this into an
15610         ExpressionStatement, and support the EmitStatement code path. 
15611
15612         Perform get/set error checking, clean up the interface.
15613
15614         * assign.cs: recognize PropertyExprs as targets, and if so, turn
15615         them into toplevel access objects.
15616
15617 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
15618
15619         * expression.cs: PropertyExpr::PropertyExpr: use work around the
15620         SRE.
15621
15622         * typemanager.cs: Keep track here of our PropertyBuilders again to
15623         work around lameness in SRE.
15624
15625 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
15626
15627         * expression.cs (LValue::LValueResolve): New method in the
15628         interface, used to perform a second resolution pass for LValues. 
15629
15630         (This::DoResolve): Catch the use of this in static methods.
15631
15632         (This::LValueResolve): Implement.
15633
15634         (This::Store): Remove warning, assigning to `this' in structures
15635         is 
15636
15637         (Invocation::Emit): Deal with invocation of
15638         methods on value types.  We need to pass the address to structure
15639         methods rather than the object itself.  (The equivalent code to
15640         emit "this" for structures leaves the entire structure on the
15641         stack instead of a pointer to it). 
15642
15643         (ParameterReference::DoResolve): Compute the real index for the
15644         argument based on whether the method takes or not a `this' pointer
15645         (ie, the method is static).
15646
15647         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
15648         value types returned from functions when we need to invoke a
15649         method on the sturcture.
15650
15651
15652 2001-10-11  Ravi Pratap  <ravi@ximian.com>
15653
15654         * class.cs (TypeContainer::DefineType): Method to actually do the business of
15655         defining the type in the Modulebuilder or Typebuilder. This is to take
15656         care of nested types which need to be defined on the TypeBuilder using
15657         DefineNestedMethod.
15658
15659         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
15660         methods in RootContext, only ported to be part of TypeContainer.
15661
15662         (TypeContainer::GetInterfaceOrClass): Ditto.
15663
15664         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
15665
15666         * interface.cs (Interface::DefineInterface): New method. Does exactly
15667         what RootContext.CreateInterface did earlier, only it takes care of nested types 
15668         too.
15669
15670         (Interface::GetInterfaces): Move from RootContext here and port.
15671
15672         (Interface::GetInterfaceByName): Same here.
15673
15674         * rootcontext.cs (ResolveTree): Re-write.
15675
15676         (PopulateTypes): Re-write.
15677
15678         * class.cs (TypeContainer::Populate): Populate nested types too.
15679         (TypeContainer::Emit): Emit nested members too.
15680
15681         * typemanager.cs (AddUserType): Do not make use of the FullName property,
15682         instead just use the name argument passed in as it is already fully
15683         qualified.
15684
15685         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
15686         to TypeContainer mapping to see if a type is user-defined.
15687
15688         * class.cs (TypeContainer::CloseType): Implement. 
15689
15690         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
15691         the default constructor.
15692
15693         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
15694         twice.
15695
15696         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
15697
15698         * interface.cs (CloseType): Create the type here.
15699
15700         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
15701         the hierarchy.
15702
15703         Remove all the methods which are now in TypeContainer.
15704
15705 2001-10-10  Ravi Pratap  <ravi@ximian.com>
15706
15707         * delegate.cs (Define): Re-write bits to define the delegate
15708         correctly.
15709
15710 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
15711
15712         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
15713
15714         * expression.cs (ImplicitReferenceConversion): handle null as well
15715         as a source to convert to any reference type.
15716
15717         * statement.cs (Return): Perform any implicit conversions to
15718         expected return type.  
15719
15720         Validate use of return statement.  
15721
15722         * codegen.cs (EmitContext): Pass the expected return type here.
15723
15724         * class.cs (Method, Constructor, Property): Pass expected return
15725         type to EmitContext.
15726
15727 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
15728
15729         * expression.cs: Make DoResolve take an EmitContext instead of a
15730         TypeContainer.
15731
15732         Replaced `l' and `location' for `loc', for consistency.
15733
15734         (Error, Warning): Remove unneeded Tc argument.
15735
15736         * assign.cs, literal.cs, constant.cs: Update to new calling
15737         convention. 
15738
15739         * codegen.cs: EmitContext now contains a flag indicating whether
15740         code is being generated in a static method or not.
15741
15742         * cs-parser.jay: DecomposeQI, new function that replaces the old
15743         QualifiedIdentifier.  Now we always decompose the assembled
15744         strings from qualified_identifier productions into a group of
15745         memberaccesses.
15746
15747 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
15748
15749         * rootcontext.cs: Deal with field-less struct types correctly now
15750         by passing the size option to Define Type.
15751
15752         * class.cs: Removed hack that created one static field. 
15753
15754 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
15755
15756         * statement.cs: Moved most of the code generation here. 
15757
15758 2001-10-09  Ravi Pratap  <ravi@ximian.com>
15759
15760         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
15761         seem very right.
15762
15763         (ElementAccess): Remove useless bits for now - keep checks as the spec
15764         says.
15765
15766 2001-10-08  Ravi Pratap  <ravi@ximian.com>
15767
15768         * expression.cs (ElementAccess::DoResolve): Remove my crap code
15769         and start performing checks according to the spec.
15770
15771 2001-10-07  Ravi Pratap  <ravi@ximian.com>
15772
15773         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
15774         rank_specifiers instead.
15775
15776         (rank_specifiers): Change the order in which the rank specifiers are stored
15777
15778         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
15779
15780         * expression.cs (ElementAccess): Implement the LValue interface too.
15781
15782 2001-10-06  Ravi Pratap  <ravi@ximian.com>
15783
15784         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
15785         except that user defined conversions are not included.
15786
15787         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
15788         perform the conversion of the return type, if necessary.
15789
15790         (New::DoResolve): Check whether we are creating an array or an object
15791         and accordingly do the needful.
15792
15793         (New::Emit): Same here.
15794
15795         (New::DoResolve): Implement guts of array creation.
15796
15797         (New::FormLookupType): Helper function.
15798
15799 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
15800
15801         * codegen.cs: Removed most of the code generation here, and move the
15802         corresponding code generation bits to the statement classes. 
15803
15804         Added support for try/catch/finalize and throw.
15805
15806         * cs-parser.jay: Added support for try/catch/finalize.
15807
15808         * class.cs: Catch static methods having the flags override,
15809         virtual or abstract.
15810
15811         * expression.cs (UserCast): This user cast was not really doing
15812         what it was supposed to do.  Which is to be born in fully resolved
15813         state.  Parts of the resolution were being performed at Emit time! 
15814
15815         Fixed this code.
15816
15817 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
15818
15819         * expression.cs: Implicity convert the result from UserCast.
15820
15821 2001-10-05  Ravi Pratap  <ravi@ximian.com>
15822
15823         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
15824         prevented it from working correctly. 
15825
15826         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
15827         merely ConvertImplicit.
15828
15829 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
15830
15831         * typemanager.cs: Make the LookupTypeContainer function static,
15832         and not per-instance.  
15833
15834         * class.cs: Make static FindMembers (the one that takes a Type
15835         argument). 
15836
15837         * codegen.cs: Add EmitForeach here.
15838
15839         * cs-parser.jay: Make foreach a toplevel object instead of the
15840         inline expansion, as we need to perform semantic analysis on it. 
15841
15842 2001-10-05  Ravi Pratap  <ravi@ximian.com>
15843
15844         * expression.cs (Expression::ImplicitUserConversion): Rename to
15845         UserDefinedConversion.
15846
15847         (Expression::UserDefinedConversion): Take an extra argument specifying 
15848         whether we look for explicit user conversions too.
15849
15850         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
15851
15852         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
15853
15854         (ExplicitUserConversion): Make it a call to UserDefinedConversion
15855         with the appropriate arguments.
15856
15857         * cs-parser.jay (cast_expression): Record location too.
15858
15859         * expression.cs (Cast): Record location info.
15860
15861         (Expression::ConvertExplicit): Take location argument.
15862
15863         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
15864         to determine if we are doing explicit conversions.
15865
15866         (UserCast::Emit): Update accordingly.
15867
15868         (Expression::ConvertExplicit): Report an error if everything fails.
15869
15870         * ../errors/cs0030.cs : Add.
15871
15872 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
15873
15874         * modifiers.cs: If the ABSTRACT keyword is present, also set the
15875         virtual and newslot bits. 
15876
15877         * class.cs (TypeContainer::RegisterRequiredImplementations):
15878         Record methods we need.
15879
15880         (TypeContainer::MakeKey): Helper function to make keys for
15881         MethodBases, since the Methodbase key is useless.
15882
15883         (TypeContainer::Populate): Call RegisterRequiredImplementations
15884         before defining the methods.   
15885
15886         Create a mapping for method_builders_to_methods ahead of time
15887         instead of inside a tight loop.
15888
15889         (::RequireMethods):  Accept an object as the data to set into the
15890         hashtable so we can report interface vs abstract method mismatch.
15891
15892 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
15893
15894         * report.cs: Make all of it static.
15895
15896         * rootcontext.cs: Drop object_type and value_type computations, as
15897         we have those in the TypeManager anyways.
15898
15899         Drop report instance variable too, now it is a global.
15900
15901         * driver.cs: Use try/catch on command line handling.
15902
15903         Add --probe option to debug the error reporting system with a test
15904         suite. 
15905
15906         * report.cs: Add support for exiting program when a probe
15907         condition is reached.
15908
15909 2001-10-03  Ravi Pratap  <ravi@ximian.com>
15910
15911         * expression.cs (Binary::DoNumericPromotions): Fix the case when
15912         we do a forcible conversion regardless of type, to check if 
15913         ForceConversion returns a null.
15914
15915         (Binary::error19): Use location to report error.
15916
15917         (Unary::error23): Use location here too.
15918
15919         * ../errors/cs0019.cs : Check in.
15920
15921         * ../errors/cs0023.cs : Check in.
15922
15923         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
15924         case of a non-null MethodInfo object with a length of 0 !
15925
15926         (Binary::ResolveOperator): Flag error if overload resolution fails to find
15927         an applicable member - according to the spec :-)
15928         Also fix logic to find members in base types.
15929
15930         (Unary::ResolveOperator): Same here.
15931
15932         (Unary::report23): Change name to error23 and make first argument a TypeContainer
15933         as I was getting thoroughly confused between this and error19 :-)
15934
15935         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
15936         (::FindMostEncompassedType): Implement.
15937         (::FindMostEncompassingType): Implement.
15938         (::StandardConversionExists): Implement.
15939
15940         (UserImplicitCast): Re-vamp. We now need info about most specific
15941         source and target types so that we can do the necessary conversions.
15942
15943         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
15944         mathematical union with no duplicates.
15945
15946 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
15947
15948         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
15949         in order from base classes to child classes, so that we can in
15950         child classes look up in our parent for method names and
15951         attributes (required for handling abstract, virtual, new, override
15952         constructs: we need to instrospect our base class, and if we dont
15953         populate the classes in order, the introspection might be
15954         incorrect.  For example, a method could query its parent before
15955         the parent has any methods and would determine that the parent has
15956         no abstract methods (while it could have had them)).
15957
15958         (RootContext::CreateType): Record the order in which we define the
15959         classes.
15960
15961 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
15962
15963         * class.cs (TypeContainer::Populate): Also method definitions can
15964         fail now, keep track of this.
15965
15966         (TypeContainer::FindMembers): Implement support for
15967         DeclaredOnly/noDeclaredOnly flag.
15968
15969         (Constructor::Emit) Return the ConstructorBuilder.
15970
15971         (Method::Emit) Return the MethodBuilder. 
15972         Check for abstract or virtual methods to be public.
15973
15974         * rootcontext.cs (RootContext::CreateType): Register all the
15975         abstract methods required for the class to be complete and the
15976         interface methods that must be implemented. 
15977
15978         * cs-parser.jay: Report error 501 (method requires body if it is
15979         not marked abstract or extern).
15980
15981         * expression.cs (TypeOf::Emit): Implement.
15982
15983         * typemanager.cs: runtime_handle_type, new global type.
15984
15985         * class.cs (Property::Emit): Generate code for properties.
15986
15987 2001-10-02  Ravi Pratap  <ravi@ximian.com>
15988
15989         * expression.cs (Unary::ResolveOperator): Find operators on base type
15990         too - we now conform exactly to the spec.
15991
15992         (Binary::ResolveOperator): Same here.
15993
15994         * class.cs (Operator::Define): Fix minor quirk in the tests.
15995
15996         * ../errors/cs0215.cs : Added.
15997
15998         * ../errors/cs0556.cs : Added.
15999
16000         * ../errors/cs0555.cs : Added.
16001
16002 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
16003
16004         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
16005         single integer which is really efficient
16006
16007 2001-10-01  Ravi Pratap  <ravi@ximian.com>
16008
16009         *  expression.cs (Expression::ImplicitUserConversion): Use location
16010         even in the case when we are examining True operators.
16011  
16012         * class.cs (Operator::Define): Perform extensive checks to conform
16013         with the rules for operator overloading in the spec.
16014
16015         * expression.cs (Expression::ImplicitReferenceConversion): Implement
16016         some of the other conversions mentioned in the spec.
16017
16018         * typemanager.cs (array_type): New static member for the System.Array built-in
16019         type.
16020
16021         (cloneable_interface): For System.ICloneable interface.
16022
16023         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
16024         we start resolving the tree and populating types.
16025
16026         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
16027  
16028 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
16029
16030         * expression.cs (Expression::ExprClassFromMemberInfo,
16031         Expression::Literalize): Create literal expressions from
16032         FieldInfos which are literals.
16033
16034         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
16035         type casts, because they were wrong.  The test suite in tests
16036         caught these ones.
16037
16038         (ImplicitNumericConversion): ushort to ulong requires a widening
16039         cast. 
16040
16041         Int32 constant to long requires widening cast as well.
16042
16043         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
16044         for integers because the type on the stack is not i4.
16045
16046 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
16047
16048         * expression.cs (report118): require location argument. 
16049
16050         * parameter.cs: Do not dereference potential null value.
16051
16052         * class.cs: Catch methods that lack the `new' keyword when
16053         overriding a name.  Report warnings when `new' is used without
16054         anything being there to override.
16055
16056         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
16057
16058         * class.cs: Only add constructor to hashtable if it is non-null
16059         (as now constructors can fail on define).
16060
16061         (TypeManager, Class, Struct): Take location arguments.
16062
16063         Catch field instance initialization in structs as errors.
16064
16065         accepting_filter: a new filter for FindMembers that is static so
16066         that we dont create an instance per invocation.
16067
16068         (Constructor::Define): Catch errors where a struct constructor is
16069         parameterless 
16070
16071         * cs-parser.jay: Pass location information for various new
16072         constructs. 
16073
16074         * delegate.cs (Delegate): take a location argument.
16075
16076         * driver.cs: Do not call EmitCode if there were problesm in the
16077         Definition of the types, as many Builders wont be there. 
16078
16079         * decl.cs (Decl::Decl): Require a location argument.
16080
16081         * cs-tokenizer.cs: Handle properly hex constants that can not fit
16082         into integers, and find the most appropiate integer for it.
16083
16084         * literal.cs: Implement ULongLiteral.
16085
16086         * rootcontext.cs: Provide better information about the location of
16087         failure when CreateType fails.
16088
16089 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
16090
16091         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
16092         as well.
16093
16094         * expression.cs (Binary::CheckShiftArguments): Add missing type
16095         computation.
16096         (Binary::ResolveOperator): Add type to the logical and and logical
16097         or, Bitwise And/Or and Exclusive Or code paths, it was missing
16098         before.
16099
16100         (Binary::DoNumericPromotions): In the case where either argument
16101         is ulong (and most signed types combined with ulong cause an
16102         error) perform implicit integer constant conversions as well.
16103
16104 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
16105
16106         * expression.cs (UserImplicitCast): Method should always be
16107         non-null. 
16108         (Invocation::BetterConversion): Simplified test for IntLiteral.
16109
16110         (Expression::ImplicitNumericConversion): Split this routine out.
16111         Put the code that performs implicit constant integer conversions
16112         here. 
16113
16114         (Expression::Resolve): Become a wrapper around DoResolve so we can
16115         check eclass and type being set after resolve.
16116
16117         (Invocation::Badness): Remove this dead function
16118
16119         (Binary::ResolveOperator): Do not compute the expensive argumnets
16120         unless we have a union for it.
16121
16122         (Probe::Emit): Is needs to do an isinst and then
16123         compare against null.
16124
16125         (::CanConvert): Added Location argument.  If the Location argument
16126         is null (Location.Null), then we do not report errors.  This is
16127         used by the `probe' mechanism of the Explicit conversion.  We do
16128         not want to generate an error for something that the user
16129         explicitly requested to be casted.  But the pipeline for an
16130         explicit cast first tests for potential implicit casts.
16131
16132         So for now, if the Location is null, it means `Probe only' to
16133         avoid adding another argument.   Might have to revise this
16134         strategy later.
16135
16136         (ClassCast): New class used to type cast objects into arbitrary
16137         classes (used in Explicit Reference Conversions).
16138
16139         Implement `as' as well.
16140
16141         Reverted all the patches from Ravi below: they were broken:
16142
16143                 * The use of `level' as a mechanism to stop recursive
16144                   invocations is wrong.  That was there just to catch the
16145                   bug with a strack trace but not as a way of addressing
16146                   the problem.
16147
16148                   To fix the problem we have to *understand* what is going
16149                   on and the interactions and come up with a plan, not
16150                   just get things going.
16151
16152                 * The use of the type conversion cache that I proposed
16153                   last night had an open topic: How does this work across
16154                   protection domains.  A user defined conversion might not
16155                   be public in the location where we are applying the
16156                   conversion, a different conversion might be selected
16157                   (ie, private A->B (better) but public B->A (worse),
16158                   inside A, A->B applies, but outside it, B->A will
16159                   apply).
16160
16161                 * On top of that (ie, even if the above is solved),
16162                   conversions in a cache need to be abstract.  Ie, `To
16163                   convert from an Int to a Short use an OpcodeCast', not
16164                   `To convert from an Int to a Short use the OpcodeCast on
16165                   the variable 5' (which is what this patch was doing).
16166
16167 2001-09-28  Ravi Pratap  <ravi@ximian.com>
16168
16169         * expression.cs (Invocation::ConversionExists): Re-write to use
16170         the conversion cache
16171
16172         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
16173         cache all conversions done, not just user-defined ones.
16174
16175         (Invocation::BetterConversion): The real culprit. Use ConversionExists
16176         to determine if a conversion exists instead of acutually trying to 
16177         perform the conversion. It's faster too.
16178
16179         (Expression::ConvertExplicit): Modify to use ConversionExists to check
16180         and only then attempt the implicit conversion.
16181
16182 2001-09-28  Ravi Pratap  <ravi@ximian.com>
16183
16184         * expression.cs (ConvertImplicit): Use a cache for conversions
16185         already found. Check level of recursion and bail out if necessary.
16186
16187 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
16188
16189         * typemanager.cs (string_concat_string_string, string_concat_object_object):
16190         Export standard methods that we expect for string operations.
16191
16192         * statement.cs (Block::UsageWarning): Track usage of variables and
16193         report the errors for not used variables.
16194
16195         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
16196         operator. 
16197
16198 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
16199
16200         * codegen.cs: remove unnneded code 
16201
16202         * expression.cs: Removed BuiltinTypeAccess class
16203
16204         Fix the order in which implicit conversions are
16205         done.  
16206
16207         The previous fixed dropped support for boxed conversions (adding a
16208         test to the test suite now)
16209
16210         (UserImplicitCast::CanConvert): Remove test for source being null,
16211         that code is broken.  We should not feed a null to begin with, if
16212         we do, then we should track the bug where the problem originates
16213         and not try to cover it up here.
16214
16215         Return a resolved expression of type UserImplicitCast on success
16216         rather than true/false.  Ravi: this is what I was talking about,
16217         the pattern is to use a static method as a "constructor" for
16218         objects. 
16219
16220         Also, do not create arguments until the very last minute,
16221         otherwise we always create the arguments even for lookups that
16222         will never be performed. 
16223
16224         (UserImplicitCast::Resolve): Eliminate, objects of type
16225         UserImplicitCast are born in a fully resolved state. 
16226
16227         * typemanager.cs (InitCoreTypes): Init also value_type
16228         (System.ValueType). 
16229
16230         * expression.cs (Cast::Resolve): First resolve the child expression.
16231
16232         (LValue): Add new method AddressOf to be used by
16233         the `&' operator.  
16234
16235         Change the argument of Store to take an EmitContext instead of an
16236         ILGenerator, because things like FieldExpr need to be able to call
16237         their children expression to generate the instance code. 
16238
16239         (Expression::Error, Expression::Warning): Sugar functions for
16240         reporting errors.
16241
16242         (Expression::MemberLookup): Accept a TypeContainer instead of a
16243         Report as the first argument.
16244
16245         (Expression::ResolvePrimary): Killed.  I still want to improve
16246         this as currently the code is just not right.
16247
16248         (Expression::ResolveMemberAccess): Simplify, but it is still
16249         wrong. 
16250
16251         (Unary::Resolve): Catch errors in AddressOf operators.
16252
16253         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
16254         index to a byte for the short-version, or the compiler will choose
16255         the wrong Emit call, which generates the wrong data.
16256
16257         (ParameterReference::Emit, ::Store): same.
16258
16259         (FieldExpr::AddressOf): Implement.
16260
16261         * typemanager.cs: TypeManager: made public variable instead of
16262         property.
16263
16264         * driver.cs: document --fatal.
16265
16266         * report.cs (ErrorMessage, WarningMessage): new names for the old
16267         Error and Warning classes.
16268
16269         * cs-parser.jay (member_access): Turn built-in access to types
16270         into a normal simplename
16271
16272 2001-09-27  Ravi Pratap  <ravi@ximian.com>
16273
16274         * expression.cs (Invocation::BetterConversion): Fix to cope
16275         with q being null, since this was introducing a bug.
16276
16277         * expression.cs (ConvertImplicit): Do built-in conversions first.
16278
16279 2001-09-27  Ravi Pratap  <ravi@ximian.com>
16280
16281         * expression.cs (UserImplicitCast::Resolve): Fix bug.
16282
16283 2001-09-27  Ravi Pratap  <ravi@ximian.com>
16284
16285         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
16286         I had introduced long ago (what's new ?).
16287
16288         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
16289         the work of all the checking. 
16290         (ConvertImplicit): Call CanConvert and only then create object if necessary.
16291         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
16292
16293         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
16294         that is the right way. 
16295
16296         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
16297         overloading resolution. Use everywhere instead of cutting and pasting code.
16298
16299         (Binary::ResolveOperator): Use MakeUnionSet.
16300
16301         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
16302         we have to convert to bool types. Not complete yet.
16303
16304 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
16305
16306         * typemanager.cs (TypeManager::CSharpName): support ushort.
16307
16308         * expression.cs (Expression::TryImplicitIntConversion): Attempts
16309         to provide an expression that performsn an implicit constant int
16310         conversion (section 6.1.6).
16311         (Expression::ConvertImplicitRequired): Reworked to include
16312         implicit constant expression conversions.
16313
16314         (Expression::ConvertNumericExplicit): Finished.
16315
16316         (Invocation::Emit): If InstanceExpression is null, then it means
16317         that we perform a call on this.
16318
16319 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
16320
16321         * expression.cs (Unary::Emit): Remove some dead code.
16322         (Probe): Implement Resolve and Emit for `is'.
16323         (Expression::ConvertImplicitRequired): Attempt to do constant
16324         expression conversions here.  Maybe should be moved to
16325         ConvertImplicit, but I am not sure.
16326         (Expression::ImplicitLongConstantConversionPossible,
16327         Expression::ImplicitIntConstantConversionPossible): New functions
16328         that tell whether is it possible to apply an implicit constant
16329         expression conversion.
16330
16331         (ConvertNumericExplicit): Started work on explicit numeric
16332         conversions.
16333
16334         * cs-parser.jay: Update operator constants.
16335
16336         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
16337         (Parameters::GetSignature): Hook up VerifyArgs here.
16338         (Parameters::VerifyArgs): Verifies that no two arguments have the
16339         same name. 
16340
16341         * class.cs (Operator): Update the operator names to reflect the
16342         ones that the spec expects (as we are just stringizing the
16343         operator names).
16344
16345         * expression.cs (Unary::ResolveOperator): Fix bug: Use
16346         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
16347         previous usage did only work for our methods.
16348         (Expression::ConvertImplicit): Handle decimal implicit numeric
16349         conversions as well.
16350         (Expression::InternalTypeConstructor): Used to invoke constructors
16351         on internal types for default promotions.
16352
16353         (Unary::Emit): Implement special handling for the pre/post
16354         increment/decrement for overloaded operators, as they need to have
16355         the same semantics as the other operators.
16356
16357         (Binary::ResolveOperator): ditto.
16358         (Invocation::ConversionExists): ditto.
16359         (UserImplicitCast::Resolve): ditto.
16360
16361 2001-09-26  Ravi Pratap  <ravi@ximian.com>
16362
16363         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
16364         operator, return after emitting body. Regression tests pass again !
16365
16366         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
16367         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
16368         (Invocation::OverloadResolve): Ditto.
16369         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
16370
16371         * everywhere : update calls to the above methods accordingly.
16372
16373 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
16374
16375         * assign.cs (Assign): Make it inherit from ExpressionStatement.
16376
16377         * expression.cs (ExpressionStatement): New base class used for
16378         expressions that can appear in statements, so that we can provide
16379         an alternate path to generate expression that do not leave a value
16380         on the stack.
16381
16382         (Expression::Emit, and all the derivatives): We no longer return
16383         whether a value is left on the stack or not.  Every expression
16384         after being emitted leaves a single value on the stack.
16385
16386         * codegen.cs (EmitContext::EmitStatementExpression): Use the
16387         facilties of ExpressionStatement if possible.
16388
16389         * cs-parser.jay: Update statement_expression.
16390
16391 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
16392
16393         * driver.cs: Change the wording of message
16394
16395 2001-09-25  Ravi Pratap  <ravi@ximian.com>
16396
16397         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
16398         the type of the expression to the return type of the method if
16399         we have an overloaded operator match ! The regression tests pass again !
16400         (Unary::ResolveOperator): Ditto.
16401
16402         * expression.cs (Invocation::ConversionExists): Correct the member lookup
16403         to find "op_Implicit", not "implicit" ;-)
16404         (UserImplicitCast): New class to take care of user-defined implicit conversions.
16405         (ConvertImplicit, ForceConversion): Take TypeContainer argument
16406
16407         * everywhere : Correct calls to the above accordingly.
16408
16409         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
16410         (ConvertImplicit): Do user-defined conversion if it exists.
16411
16412 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
16413
16414         * assign.cs: track location.
16415         (Resolve): Use implicit conversions on assignment.
16416
16417         * literal.cs: Oops.  Not good, Emit of short access values should
16418         pass (Bytes) or the wrong argument will be selected.
16419
16420         * expression.cs (Unary::Emit): Emit code for -expr.
16421
16422         (Unary::ResolveOperator): Handle `Substract' for non-constants
16423         (substract from zero from the non-constants).
16424         Deal with Doubles as well. 
16425
16426         (Expression::ConvertImplicitRequired): New routine that reports an
16427         error if no implicit conversion exists. 
16428
16429         (Invocation::OverloadResolve): Store the converted implicit
16430         expressions if we make them
16431
16432 2001-09-24  Ravi Pratap  <ravi@ximian.com>
16433
16434         * class.cs (ConstructorInitializer): Take a Location argument.
16435         (ConstructorBaseInitializer): Same here.
16436         (ConstructorThisInitializer): Same here.
16437
16438         * cs-parser.jay : Update all calls accordingly.
16439
16440         * expression.cs (Unary, Binary, New): Take location argument.
16441         Update accordingly everywhere.
16442
16443         * cs-parser.jay : Update all calls to the above to take a location
16444         argument.
16445
16446         * class.cs : Ditto.
16447
16448 2001-09-24  Ravi Pratap  <ravi@ximian.com>
16449
16450         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
16451         (Invocation::BetterConversion): Same here
16452         (Invocation::ConversionExists): Ditto.
16453
16454         (Invocation::ConversionExists): Implement.
16455
16456 2001-09-22  Ravi Pratap  <ravi@ximian.com>
16457
16458         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
16459         Also take an additional TypeContainer argument.
16460
16461         * All over : Pass in TypeContainer as argument to OverloadResolve.
16462
16463         * typemanager.cs (CSharpName): Update to check for the string type and return
16464         that too.
16465
16466         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
16467         a given method.
16468
16469 2001-09-21  Ravi Pratap  <ravi@ximian.com>
16470
16471         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
16472         (Invocation::BetterFunction): Implement.
16473         (Invocation::BetterConversion): Implement.
16474         (Invocation::ConversionExists): Skeleton, no implementation yet.
16475
16476         Okay, things work fine !
16477
16478 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
16479
16480         * typemanager.cs: declare and load enum_type, delegate_type and
16481         void_type. 
16482
16483         * expression.cs (Expression::Emit): Now emit returns a value that
16484         tells whether a value is left on the stack or not.  This strategy
16485         might be reveted tomorrow with a mechanism that would address
16486         multiple assignments.
16487         (Expression::report118): Utility routine to report mismatches on
16488         the ExprClass.
16489
16490         (Unary::Report23): Report impossible type/operator combination
16491         utility function.
16492
16493         (Unary::IsIncrementableNumber): Whether the type can be
16494         incremented or decremented with add.
16495         (Unary::ResolveOperator): Also allow enumerations to be bitwise
16496         complemented. 
16497         (Unary::ResolveOperator): Implement ++, !, ~,
16498
16499         (Invocation::Emit): Deal with new Emit convetion.
16500
16501         * All Expression derivatives: Updated their Emit method to return
16502         whether they leave values on the stack or not.
16503
16504         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
16505         stack for expressions that are statements. 
16506
16507 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
16508
16509         * expression.cs (LValue): New interface.  Must be implemented by
16510         LValue objects.
16511         (LocalVariableReference, ParameterReference, FieldExpr): Implement
16512         LValue interface.
16513
16514         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
16515         interface for generating code, simplifies the code.
16516
16517 2001-09-20  Ravi Pratap  <ravi@ximian.com>
16518
16519         * expression.cs (everywhere): Comment out return statements in ::Resolve
16520         methods to avoid the warnings.
16521
16522 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
16523
16524         * driver.cs (parse): Report error 2001 if we can not open the
16525         source file.
16526
16527         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
16528         not resolve it.
16529
16530         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
16531         object. 
16532
16533         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
16534         otherwise nested blocks end up with the same index.
16535
16536         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
16537
16538         * expression.cs:  Instead of having FIXMEs in the Resolve
16539         functions, throw exceptions so it is obvious that we are facing a
16540         bug. 
16541
16542         * cs-parser.jay (invocation_expression): Pass Location information.
16543
16544         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
16545         Use a basename for those routines because .NET does not like paths
16546         on them. 
16547
16548         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
16549         already defined.
16550
16551 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
16552
16553         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
16554         are loading the correct data types (throws an exception if not).
16555         (TypeManager::InitCoreTypes): Use CoreLookupType
16556
16557         * expression.cs (Unary::ResolveOperator): return the child
16558         expression for expressions which are just +expr.
16559         (Unary::ResolveOperator): Return negative literals for -LITERAL
16560         expressions (otherwise they are Unary {Literal}).
16561         (Invocation::Badness): Take into account `Implicit constant
16562         expression conversions'.
16563
16564         * literal.cs (LongLiteral): Implement long literal class.
16565         (IntLiteral): export the `Value' of the intliteral. 
16566
16567 2001-09-19  Ravi Pratap  <ravi@ximian.com>
16568
16569         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
16570
16571         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
16572         instead of 'Operator'
16573
16574         * expression.cs (Binary::ResolveOperator): Update accordingly.
16575         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
16576         and 'Minus'
16577
16578         * cs-parser.jay (unary_expression): Update to use the new names.
16579
16580         * gen-treedump.cs (GetUnary): Same here.
16581
16582         * expression.cs (Unary::Resolve): Implement.
16583         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
16584         operators are found instead of making noise ;-)
16585         (Unary::ResolveOperator): New method to do precisely the same thing which
16586         Binary::ResolveOperator does for Binary expressions.
16587         (Unary.method, .Arguments): Add.
16588         (Unary::OperName): Implement.   
16589         (Unary::ForceConversion): Copy and Paste !
16590
16591         * class.cs (Operator::Define): Fix a small bug for the case when we have 
16592         a unary operator.
16593
16594         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
16595         for the inbuilt operators. Only overloading works for now ;-)
16596
16597 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
16598
16599         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
16600         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
16601
16602         * expression.cs (This::Emit): Implement. 
16603         (This::Resolve): Implement.
16604         (TypeOf:Resolve): Implement.
16605         (Expression::ResolveSimpleName): Add an implicit this to instance
16606         field references. 
16607         (MemberAccess::Resolve): Deal with Parameters and Fields. 
16608         Bind instance variable to Field expressions.
16609         (FieldExpr::Instance): New field used to track the expression that
16610         represents the object instance.
16611         (FieldExpr::Resolve): Track potential errors from MemberLookup not
16612         binding 
16613         (FieldExpr::Emit): Implement.
16614
16615         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
16616         the last instruction contains a return opcode to avoid generating
16617         the last `ret' instruction (this generates correct code, and it is
16618         nice to pass the peverify output).
16619
16620         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
16621         initializer for static and instance variables.
16622         (Constructor::Emit): Allow initializer to be null in the case of
16623         static constructors.  Only emit initializer for instance
16624         constructors. 
16625
16626         (TypeContainer::FindMembers): Return a null array if there are no
16627         matches.
16628
16629         Also fix the code for the MemberTypes.Method branch, as it was not
16630         scanning that for operators (or tried to access null variables before).
16631
16632         * assign.cs (Assign::Emit): Handle instance and static fields. 
16633
16634         * TODO: Updated.
16635
16636         * driver.cs: Stop compilation if there are parse errors.
16637
16638         * cs-parser.jay (constructor_declaration): Provide default base
16639         initializer for non-static constructors.
16640         (constructor_declarator): Do not provide a default base
16641         initializers if none was specified.
16642         Catch the fact that constructors should not have parameters.
16643
16644         * class.cs: Do not emit parent class initializers for static
16645         constructors, that should be flagged as an error.
16646
16647 2001-09-18  Ravi Pratap  <ravi@ximian.com>
16648
16649         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
16650         Move back code into TypeContainer::Populate.
16651
16652 2001-09-18  Ravi Pratap  <ravi@ximian.com>
16653
16654         * class.cs (TypeContainer::AddConstructor): Fix the check to
16655         compare against Name, not Basename. 
16656         (Operator::OpType): Change Plus and Minus to Add and Subtract.
16657
16658         * cs-parser.jay : Update accordingly.
16659
16660         * class.cs (TypeContainer::FindMembers): For the case where we are searching
16661         for methods, don't forget to look into the operators too.
16662         (RegisterMethodBuilder): Helper method to take care of this for
16663         methods, constructors and operators.
16664         (Operator::Define): Completely revamp.
16665         (Operator.OperatorMethod, MethodName): New fields.
16666         (TypeContainer::Populate): Move the registering of builders into
16667         RegisterMethodBuilder.
16668         (Operator::Emit): Re-write.
16669
16670         * expression.cs (Binary::Emit): Comment out code path to emit method
16671         invocation stuff for the case when we have a user defined operator. I am
16672         just not able to get it right !
16673
16674 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
16675
16676         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
16677         argument. 
16678
16679         (Expression::MemberLookup): Provide a version that allows to
16680         specify the MemberTypes and BindingFlags. 
16681
16682         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
16683         so it was not fetching variable information from outer blocks.
16684
16685         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
16686         Beforefieldinit as it was buggy.
16687
16688         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
16689         that Ravi put here.  
16690
16691         * class.cs (Constructor::Emit): Only emit if block is not null.
16692         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
16693         deal with this by semantically definining it as if the user had
16694         done it.
16695
16696         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
16697         constructors as we now "emit" them at a higher level.
16698
16699         (TypeContainer::DefineDefaultConstructor): Used to define the
16700         default constructors if none was provided.
16701
16702         (ConstructorInitializer): Add methods Resolve and Emit. 
16703
16704         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
16705
16706 2001-09-17  Ravi Pratap  <ravi@ximian.com>
16707
16708         * class.cs (TypeContainer::EmitDefaultConstructor): Register
16709         the default constructor builder with our hashtable for methodbuilders
16710         to methodcores.
16711
16712         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
16713         and argument_count is 0 in which case we have a match.
16714         (Binary::ResolveOperator): More null checking and miscellaneous coding
16715         style cleanup.
16716
16717 2001-09-17  Ravi Pratap  <ravi@ximian.com>
16718
16719         * rootcontext.cs (IsNameSpace): Compare against null.
16720
16721         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
16722
16723         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
16724         and Unary::Operator.
16725
16726         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
16727         accordingly.
16728
16729         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
16730         we have overloaded operators.
16731         (Binary::ResolveOperator): Implement the part which does the operator overload
16732         resolution.
16733
16734         * class.cs (Operator::Emit): Implement.
16735         (TypeContainer::Emit): Emit the operators we have too.
16736
16737         * expression.cs (Binary::Emit): Update to emit the appropriate code for
16738         the case when we have a user-defined operator.
16739
16740 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
16741
16742         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
16743
16744 2001-09-16  Ravi Pratap  <ravi@ximian.com>
16745
16746         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
16747         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
16748         (Constructor::Emit): Implement.
16749         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
16750         if we have no work to do. 
16751         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
16752         Emit method.
16753
16754         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
16755         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
16756
16757         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
16758         of parent.parent.
16759
16760 2001-09-15  Ravi Pratap  <ravi@ximian.com>
16761
16762         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
16763         in the source.
16764         (Tree::RecordNamespace): Method to do what the name says ;-)
16765         (Tree::Namespaces): Property to get at the namespaces hashtable.
16766
16767         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
16768         keep track.
16769
16770         * rootcontext.cs (IsNamespace): Fixed it :-)
16771
16772 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
16773
16774         * class.cs (TypeContainer::FindMembers): Add support for
16775         constructors. 
16776         (MethodCore): New class that encapsulates both the shared aspects
16777         of a Constructor and a Method.  
16778         (Method, Constructor): Factored pieces into MethodCore.
16779
16780         * driver.cs: Added --fatal which makes errors throw exceptions.
16781         Load System assembly as well as part of the standard library.
16782
16783         * report.cs: Allow throwing exceptions on errors for debugging.
16784
16785         * modifiers.cs: Do not use `parent', instead use the real type
16786         container to evaluate permission settings.
16787
16788         * class.cs: Put Ravi's patch back in.  He is right, and we will
16789         have to cope with the
16790
16791 2001-09-14  Ravi Pratap  <ravi@ximian.com>
16792
16793         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
16794         FamORAssem, not FamANDAssem.
16795
16796 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
16797
16798         * driver.cs: Added --parse option that only parses its input files
16799         and terminates.
16800
16801         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
16802         incorrect.  IsTopLevel is not used to tell whether an object is
16803         root_types or not (that can be achieved by testing this ==
16804         root_types).  But to see if this is a top-level *class* (not
16805         necessarly our "toplevel" container). 
16806
16807 2001-09-14  Ravi Pratap  <ravi@ximian.com>
16808
16809         * enum.cs (Enum::Define): Modify to call the Lookup method on the
16810         parent instead of a direct call to GetType.
16811
16812 2001-09-14  Ravi Pratap  <ravi@ximian.com>
16813
16814         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
16815         Modifiers.TypeAttr. This should just be a call to that method.
16816
16817         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
16818         object so that we can determine if we are top-level or not.
16819
16820         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
16821         TypeContainer too.
16822
16823         * enum.cs (Enum::Define): Ditto.
16824
16825         * modifiers.cs (FieldAttr): Re-write.
16826
16827         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
16828         (TypeContainer::HaveStaticConstructor): New property to provide access
16829         to precisely that info.
16830
16831         * modifiers.cs (MethodAttr): Re-write.
16832         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
16833
16834         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
16835         of top-level types as claimed.
16836
16837 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
16838
16839         * expression.cs (MemberLookup): Fruitless attempt to lookup
16840         constructors.  Maybe I need to emit default constructors?  That
16841         might be it (currently .NET emits this for me automatically).
16842         (Invocation::OverloadResolve): Cope with Arguments == null.
16843         (Invocation::EmitArguments): new function, shared by the new
16844         constructor and us.
16845         (Invocation::Emit): Handle static and instance methods.  Emit
16846         proper call instruction for virtual or non-virtual invocations.
16847         (New::Emit): Implement.
16848         (New::Resolve): Implement.
16849         (MemberAccess:Resolve): Implement.
16850         (MethodGroupExpr::InstanceExpression): used conforming to the spec
16851         to track instances.
16852         (FieldExpr::Resolve): Set type.
16853
16854         * support.cs: Handle empty arguments.
16855                 
16856         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
16857         SimpleLookup): Auxiliary routines to help parse a qualifier
16858         identifier.  
16859
16860         Update qualifier_identifier rule.
16861
16862         * codegen.cs: Removed debugging messages.
16863
16864         * class.cs: Make this a global thing, this acts just as a "key" to
16865         objects that we might have around.
16866
16867         (Populate): Only initialize method_builders_to_methods once.
16868
16869         * expression.cs (PropertyExpr): Initialize type from the
16870         PropertyType. 
16871
16872         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
16873         Resolve pattern.  Attempt to implicitly convert value to boolean.
16874         Emit code.
16875
16876         * expression.cs: Set the type for the int32/int32 argument case.
16877         (Binary::ResolveOperator): Set the return type to boolean for
16878         comparission operators
16879
16880         * typemanager.cs: Remove debugging print code.
16881
16882         (Invocation::Resolve): resolve type.
16883
16884         * class.cs: Allocate a MemberInfo of the correct size, as the code
16885         elsewhere depends on the test to reflect the correct contents.
16886
16887         (Method::) Keep track of parameters, due to System.Reflection holes
16888
16889         (TypeContainer::Populate): Keep track of MethodBuilders to Method
16890         mapping here.
16891
16892         (TypeContainer::FindMembers): Use ArrayList and then copy an array
16893         of the exact size and return that.
16894
16895         (Class::LookupMethodByBuilder): New function that maps
16896         MethodBuilders to its methods.  Required to locate the information
16897         on methods because System.Reflection bit us again.
16898
16899         * support.cs: New file, contains an interface ParameterData and
16900         two implementations: ReflectionParameters and InternalParameters
16901         used to access Parameter information.  We will need to grow this
16902         as required.
16903
16904         * expression.cs (Invocation::GetParameterData): implement a cache
16905         and a wrapper around the ParameterData creation for methods. 
16906         (Invocation::OverloadResolve): Use new code.
16907
16908 2001-09-13  Ravi Pratap  <ravi@ximian.com>
16909
16910         * class.cs (TypeContainer::EmitField): Remove and move into 
16911         (Field::Define): here and modify accordingly.
16912         (Field.FieldBuilder): New member.
16913         (TypeContainer::Populate): Update accordingly.
16914         (TypeContainer::FindMembers): Implement.
16915
16916 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
16917
16918         * statement.cs: (VariableInfo::VariableType): New field to be
16919         initialized with the full type once it is resolved. 
16920
16921 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
16922
16923         * parameter.cs (GetParameterInfo): Use a type cache to compute
16924         things only once, and to reuse this information
16925
16926         * expression.cs (LocalVariableReference::Emit): Implement.
16927         (OpcodeCast::Emit): fix.
16928
16929         (ParameterReference::Resolve): Implement.
16930         (ParameterReference::Emit): Implement.
16931
16932         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
16933         that are expressions need to stay as Expressions.
16934
16935         * typemanager.cs (CSharpName): Returns the C# name of a type if
16936         possible. 
16937
16938         * expression.cs (Expression::ConvertImplicit): New function that
16939         implements implicit type conversions.
16940
16941         (Expression::ImplicitReferenceConversion): Implements implicit
16942         reference conversions.
16943
16944         (EmptyCast): New type for transparent casts.
16945
16946         (OpcodeCast): New type for casts of types that are performed with
16947         a sequence of bytecodes.
16948
16949         (BoxedCast): New type used for casting value types into reference
16950         types.  Emits a box opcode.
16951
16952         (Binary::DoNumericPromotions): Implements numeric promotions of
16953         and computation of the Binary::Type.
16954
16955         (Binary::EmitBranchable): Optimization.
16956
16957         (Binary::Emit): Implement code emission for expressions.
16958
16959         * typemanager.cs (TypeManager): Added two new core types: sbyte
16960         and byte.
16961
16962 2001-09-12  Ravi Pratap  <ravi@ximian.com>
16963
16964         * class.cs (TypeContainer::FindMembers): Method which does exactly
16965         what Type.FindMembers does, only we don't have to use reflection. No
16966         implementation yet.
16967
16968         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
16969         typecontainer objects as we need to get at them.
16970         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
16971
16972         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
16973         typecontainer object.
16974
16975         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
16976         of just a Report object.
16977
16978 2001-09-11  Ravi Pratap  <ravi@ximian.com>
16979
16980         * class.cs (Event::Define): Go back to using the prefixes "add_" and
16981         "remove_"
16982         (TypeContainer::Populate): Now define the delegates of the type too.
16983         (TypeContainer.Delegates): Property to access the list of delegates defined
16984         in the type.
16985
16986         * delegates.cs (Delegate::Define): Implement partially.
16987
16988         * modifiers.cs (TypeAttr): Handle more flags.
16989
16990 2001-09-11  Ravi Pratap  <ravi@ximian.com>
16991
16992         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
16993         and not <=
16994         (Operator::Define): Re-write logic to get types by using the LookupType method
16995         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
16996         (Indexer::Define): Ditto.
16997         (Event::Define): Ditto.
16998         (Property::Define): Ditto.
16999
17000 2001-09-10  Ravi Pratap  <ravi@ximian.com>
17001
17002         * class.cs (TypeContainer::Populate): Now define operators too. 
17003         (TypeContainer.Operators): New property to access the list of operators
17004         in a type.
17005         (Operator.OperatorMethodBuilder): New member to hold the method builder
17006         for the operator we are defining.
17007         (Operator::Define): Implement.
17008
17009 2001-09-10  Ravi Pratap  <ravi@ximian.com>
17010
17011         * class.cs (Event::Define): Make the prefixes of the accessor methods
17012         addOn_ and removeOn_ 
17013
17014         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
17015         of the location being passed in too. Ideally, this should go later since all
17016         error reporting should be done through the Report object.
17017
17018         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
17019         (Populate): Iterate thru the indexers we have and define them too.
17020         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
17021         for the get and set accessors.
17022         (Indexer::Define): Implement.
17023
17024 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
17025
17026         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
17027         my previous implementation, did not work.
17028
17029         * typemanager.cs: Add a couple of missing types (the longs).
17030
17031         * literal.cs: Use TypeManager.bool_type instead of getting it.
17032
17033         * expression.cs (EventExpr): New kind of expressions.
17034         (Expressio::ExprClassFromMemberInfo): finish
17035
17036 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
17037
17038         * assign.cs: Emit stores to static fields differently.
17039
17040 2001-09-08  Ravi Pratap  <ravi@ximian.com>
17041
17042         * Merge in changes and adjust code to tackle conflicts. Backed out my
17043         code in Assign::Resolve ;-) 
17044
17045 2001-09-08  Ravi Pratap  <ravi@ximian.com>
17046
17047         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
17048         instead Report.Error and also pass in the location.
17049         (CSharpParser::Lexer): New readonly property to return the reference
17050         to the Tokenizer object.
17051         (declare_local_variables): Use Report.Error with location instead of plain 
17052         old error.
17053         (CheckDef): Ditto.
17054
17055         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
17056         (Operator.CheckBinaryOperator): Ditto.
17057
17058         * cs-parser.jay (operator_declarator): Update accordingly.
17059
17060         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
17061         (CheckBinaryOperator): Same here.
17062
17063         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
17064         on the name without any prefixes of namespace names etc. This is because we
17065         already might have something already fully qualified like 
17066         'System.Console.WriteLine'
17067
17068         * assign.cs (Resolve): Begin implementation. Stuck ;-)
17069
17070 2001-09-07  Ravi Pratap  <ravi@ximian.com>
17071
17072         * cs-tokenizer.cs (location): Return a string which also contains
17073         the file name.
17074
17075         * expression.cs (ElementAccess): New class for expressions of the
17076         type 'element access.'
17077         (BaseAccess): New class for expressions of the type 'base access.'
17078         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
17079         respectively.
17080
17081         * cs-parser.jay (element_access): Implement action.
17082         (base_access): Implement actions.
17083         (checked_expression, unchecked_expression): Implement.
17084
17085         * cs-parser.jay (local_variable_type): Correct and implement.
17086         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
17087
17088         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
17089
17090         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
17091         name and the specifiers.
17092
17093         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
17094
17095         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
17096         making them all public ;-)
17097
17098         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
17099         class anyways.
17100
17101 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
17102
17103         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
17104         PropertyExprs.
17105         (FieldExpr, PropertyExprs): New resolved expressions.
17106         (SimpleName::MemberStaticCheck): Perform static checks for access
17107         to non-static fields on static methods. Maybe this should be
17108         generalized for MemberAccesses. 
17109         (SimpleName::ResolveSimpleName): More work on simple name
17110         resolution. 
17111
17112         * cs-parser.jay (primary_expression/qualified_identifier): track
17113         the parameter index.
17114
17115         * codegen.cs (CodeGen::Save): Catch save exception, report error.
17116         (EmitContext::EmitBoolExpression): Chain to expression generation
17117         instead of temporary hack.
17118         (::EmitStatementExpression): Put generic expression code generation.
17119
17120         * assign.cs (Assign::Emit): Implement variable assignments to
17121         local variables, parameters and fields.
17122
17123 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
17124
17125         * statement.cs (Block::GetVariableInfo): New method, returns the
17126         VariableInfo for a variable name in a block.
17127         (Block::GetVariableType): Implement in terms of GetVariableInfo
17128
17129         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
17130         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
17131
17132 2001-09-06  Ravi Pratap  <ravi@ximian.com>
17133
17134         * cs-parser.jay (operator_declaration): Continue on my quest : update
17135         to take attributes argument.
17136         (event_declaration): Ditto.
17137         (enum_declaration): Ditto.
17138         (indexer_declaration): Ditto.
17139
17140         * class.cs (Operator::Operator): Update constructor accordingly.
17141         (Event::Event): Ditto.
17142
17143         * delegate.cs (Delegate::Delegate): Same here.
17144
17145         * enum.cs (Enum::Enum): Same here.
17146
17147 2001-09-05  Ravi Pratap  <ravi@ximian.com>
17148
17149         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
17150
17151         * ../tests/cs0658.cs : New file to demonstrate error 0658.
17152
17153         * attribute.cs (Attributes): New class to encapsulate all attributes which were
17154         being passed around as an arraylist.
17155         (Attributes::AddAttribute): Method to add attribute sections.
17156
17157         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
17158         (struct_declaration): Update accordingly.
17159         (constant_declaration): Update.
17160         (field_declaration): Update.
17161         (method_header): Update.
17162         (fixed_parameter): Update.
17163         (parameter_array): Ditto.
17164         (property_declaration): Ditto.
17165         (destructor_declaration): Ditto.
17166
17167         * class.cs (Struct::Struct): Update constructors accordingly.
17168         (Class::Class): Ditto.
17169         (Field::Field): Ditto.
17170         (Method::Method): Ditto.
17171         (Property::Property): Ditto.
17172         (TypeContainer::OptAttribute): update property's return type.
17173
17174         * interface.cs (Interface.opt_attributes): New member.
17175         (Interface::Interface): Update to take the extra Attributes argument.
17176
17177         * parameter.cs (Parameter::Parameter): Ditto.
17178
17179         * constant.cs (Constant::Constant): Ditto.
17180
17181         * interface.cs (InterfaceMemberBase): New OptAttributes field.
17182         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
17183         the attributes as a parameter.
17184         (InterfaceProperty): Update constructor call.
17185         (InterfaceEvent): Ditto.
17186         (InterfaceMethod): Ditto.
17187         (InterfaceIndexer): Ditto.
17188
17189         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
17190         pass the attributes too.
17191         (interface_event_declaration): Ditto.
17192         (interface_property_declaration): Ditto.
17193         (interface_method_declaration): Ditto.
17194         (interface_declaration): Ditto.
17195
17196 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
17197
17198         * class.cs (Method::Define): Track the "static Main" definition to
17199         create an entry point. 
17200
17201         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
17202         EntryPoint if we find it. 
17203
17204         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
17205         (EmitContext::ig): Make this variable public.
17206
17207         * driver.cs: Make the default output file be the first file name
17208         with the .exe extension.  
17209
17210         Detect empty compilations
17211
17212         Handle various kinds of output targets.  Handle --target and
17213         rename -t to --dumper.
17214
17215         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
17216         methods inherited from Expression return now an Expression.  This
17217         will is used during the tree rewriting as we resolve them during
17218         semantic analysis.
17219
17220         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
17221         the spec.  Missing entirely is the information about
17222         accessability of elements of it.
17223
17224         (Expression::ExprClassFromMemberInfo): New constructor for
17225         Expressions that creates a fully initialized Expression based on
17226         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
17227         a Type.
17228
17229         (Invocation::Resolve): Begin implementing resolution of invocations.
17230
17231         * literal.cs (StringLiteral):  Implement Emit.
17232
17233 2001-09-05  Ravi Pratap  <ravi@ximian.com>
17234
17235         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
17236         member.
17237
17238 2001-09-04  Ravi Pratap  <ravi@ximian.com>
17239
17240         * cs-parser.jay (attribute_arguments): Implement actions.
17241         (attribute): Fix bug in production. Implement action.
17242         (attribute_list): Implement.
17243         (attribute_target): Implement.
17244         (attribute_target_specifier, opt_target_specifier): Implement
17245         (CheckAttributeTarget): New method to check if the attribute target
17246         is valid.
17247         (attribute_section): Implement.
17248         (opt_attributes): Implement.
17249
17250         * attribute.cs : New file to handle attributes.
17251         (Attribute): Class to hold attribute info.
17252
17253         * cs-parser.jay (opt_attribute_target_specifier): Remove production
17254         (attribute_section): Modify production to use 2 different rules to 
17255         achieve the same thing. 1 s/r conflict down !
17256         Clean out commented, useless, non-reducing dimension_separator rules.
17257
17258         * class.cs (TypeContainer.attributes): New member to hold list
17259         of attributes for a type.
17260         (Struct::Struct): Modify to take one more argument, the attribute list.
17261         (Class::Class): Ditto.
17262         (Field::Field): Ditto.
17263         (Method::Method): Ditto.
17264         (Property::Property): Ditto.
17265
17266         * cs-parser.jay (struct_declaration): Update constructor call to
17267         pass in the attributes too.
17268         (class_declaration): Ditto.
17269         (constant_declaration): Ditto.
17270         (field_declaration): Ditto.
17271         (method_header): Ditto.
17272         (fixed_parameter): Ditto.
17273         (parameter_array): Ditto.
17274         (property_declaration): Ditto.
17275
17276         * constant.cs (Constant::Constant): Update constructor similarly.
17277         Use System.Collections.
17278
17279         * parameter.cs (Parameter::Parameter): Update as above.
17280
17281 2001-09-02  Ravi Pratap  <ravi@ximian.com>
17282
17283         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
17284         (TypeContainer.delegates): New member to hold list of delegates.
17285
17286         * cs-parser.jay (delegate_declaration): Implement the action correctly 
17287         this time as I seem to be on crack ;-)
17288
17289 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
17290
17291         * rootcontext.cs (RootContext::IsNamespace): new function, used to
17292         tell whether an identifier represents a namespace.
17293
17294         * expression.cs (NamespaceExpr): A namespace expression, used only
17295         temporarly during expression resolution.
17296         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
17297         utility functions to resolve names on expressions.
17298
17299 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
17300
17301         * codegen.cs: Add hook for StatementExpressions. 
17302
17303         * class.cs: Fix inverted test for static flag in methods.
17304
17305 2001-09-02  Ravi Pratap  <ravi@ximian.com>
17306
17307         * class.cs (Operator::CheckUnaryOperator): Correct error number used
17308         to make it coincide with MS' number.
17309         (Operator::CheckBinaryOperator): Ditto.
17310
17311         * ../errors/errors.txt : Remove error numbers added earlier.
17312
17313         * ../errors/cs1019.cs : Test case for error # 1019
17314
17315         * ../errros/cs1020.cs : Test case for error # 1020
17316
17317         * cs-parser.jay : Clean out commented cruft.
17318         (dimension_separators, dimension_separator): Comment out. Ostensibly not
17319         used anywhere - non-reducing rule.
17320         (namespace_declarations): Non-reducing rule - comment out.
17321
17322         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
17323         with TypeContainer::AddEnum.
17324
17325         * delegate.cs : New file for delegate handling classes.
17326         (Delegate): Class for declaring delegates.
17327
17328         * makefile : Update.
17329
17330         * cs-parser.jay (delegate_declaration): Implement.
17331
17332 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
17333
17334         * class.cs (Event::Define): Implement.
17335         (Event.EventBuilder): New member.
17336
17337         * class.cs (TypeContainer::Populate): Update to define all enums and events
17338         we have.
17339         (Events): New property for the events arraylist we hold. Shouldn't we move to using
17340         readonly fields for all these cases ?
17341
17342 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
17343
17344         * class.cs (Property): Revamp to use the convention of making fields readonly.
17345         Accordingly modify code elsewhere.
17346
17347         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
17348         the Define method of the Property class.
17349
17350         * class.cs : Clean up applied patch and update references to variables etc. Fix 
17351         trivial bug.
17352         (TypeContainer::Populate): Update to define all the properties we have. Also
17353         define all enumerations.
17354
17355         * enum.cs (Define): Implement.
17356
17357 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
17358
17359         * cs-parser.jay (overloadable_operator): The semantic value is an
17360         enum of the Operator class.
17361         (operator_declarator): Implement actions.
17362         (operator_declaration): Implement.
17363
17364         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
17365         validity of definitions.
17366         (Operator::CheckBinaryOperator): Static method to check for binary operators
17367         (TypeContainer::AddOperator): New method to add an operator to a type.
17368
17369         * cs-parser.jay (indexer_declaration): Added line to actually call the
17370         AddIndexer method so it gets added ;-)
17371
17372         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
17373         already taken care of by the MS compiler ?  
17374
17375 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
17376
17377         * class.cs (Operator): New class for operator declarations.
17378         (Operator::OpType): Enum for the various operators.
17379
17380 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
17381
17382         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
17383         ostensibly handle this in semantic analysis.
17384
17385         * cs-parser.jay (general_catch_clause): Comment out
17386         (specific_catch_clauses, specific_catch_clause): Ditto.
17387         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
17388         (catch_args, opt_catch_args): New productions.
17389         (catch_clause): Rewrite to use the new productions above
17390         (catch_clauses): Modify accordingly.
17391         (opt_catch_clauses): New production to use in try_statement
17392         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
17393         and re-write the code in the actions to extract the specific and
17394         general catch clauses by being a little smart ;-)
17395
17396         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
17397         Hooray, try and catch statements parse fine !
17398
17399 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
17400
17401         * statement.cs (Block::GetVariableType): Fix logic to extract the type
17402         string from the hashtable of variables.
17403
17404         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
17405         I end up making that mistake ;-)
17406         (catch_clauses): Fixed gross error which made Key and Value of the 
17407         DictionaryEntry the same : $1 !!
17408
17409 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
17410
17411         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
17412
17413         * cs-parser.jay (event_declaration): Correct to remove the semicolon
17414         when the add and remove accessors are specified. 
17415
17416 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
17417
17418         * cs-parser.jay (IndexerDeclaration): New helper class to hold
17419         information about indexer_declarator.
17420         (indexer_declarator): Implement actions.
17421         (parsing_indexer): New local boolean used to keep track of whether
17422         we are parsing indexers or properties. This is necessary because 
17423         implicit_parameters come into picture even for the get accessor in the 
17424         case of an indexer.
17425         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
17426
17427         * class.cs (Indexer): New class for indexer declarations.
17428         (TypeContainer::AddIndexer): New method to add an indexer to a type.
17429         (TypeContainer::indexers): New member to hold list of indexers for the
17430         type.
17431
17432 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
17433
17434         * cs-parser.jay (add_accessor_declaration): Implement action.
17435         (remove_accessor_declaration): Implement action.
17436         (event_accessors_declaration): Implement
17437         (variable_declarators): swap statements for first rule - trivial.
17438
17439         * class.cs (Event): New class to hold information about event
17440         declarations.
17441         (TypeContainer::AddEvent): New method to add an event to a type
17442         (TypeContainer::events): New member to hold list of events.
17443
17444         * cs-parser.jay (event_declaration): Implement actions.
17445
17446 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
17447
17448         * cs-parser.jay (dim_separators): Implement. Make it a string
17449         concatenating all the commas together, just as they appear.
17450         (opt_dim_separators): Modify accordingly
17451         (rank_specifiers): Update accordingly. Basically do the same
17452         thing - instead, collect the brackets here.
17453         (opt_rank_sepcifiers): Modify accordingly.
17454         (array_type): Modify to actually return the complete type string
17455         instead of ignoring the rank_specifiers.
17456         (expression_list): Implement to collect the expressions
17457         (variable_initializer): Implement. We make it a list of expressions
17458         essentially so that we can handle the array_initializer case neatly too.
17459         (variable_initializer_list): Implement.
17460         (array_initializer): Make it a list of variable_initializers
17461         (opt_array_initializer): Modify accordingly.
17462
17463         * expression.cs (New::NType): Add enumeration to help us
17464         keep track of whether we have an object/delegate creation
17465         or an array creation.
17466         (New:NewType, New::Rank, New::Indices, New::Initializers): New
17467         members to hold data about array creation.
17468         (New:New): Modify to update NewType
17469         (New:New): New Overloaded contructor for the array creation
17470         case.
17471
17472         * cs-parser.jay (array_creation_expression): Implement to call
17473         the overloaded New constructor.
17474
17475 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
17476
17477         * class.cs (TypeContainer::Constructors): Return member
17478         constructors instead of returning null.
17479
17480 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
17481
17482         * typemanager.cs (InitCoreTypes): Initialize the various core
17483         types after we have populated the type manager with the user
17484         defined types (this distinction will be important later while
17485         compiling corlib.dll)
17486
17487         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
17488         on Expression Classification.  Now all expressions have a method
17489         `Resolve' and a method `Emit'.
17490
17491         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
17492         generation from working.     Also add some temporary debugging
17493         code. 
17494
17495 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
17496
17497         * codegen.cs: Lots of code generation pieces.  This is only the
17498         beginning, will continue tomorrow with more touches of polish.  We
17499         handle the fundamentals of if, while, do, for, return.  Others are
17500         trickier and I need to start working on invocations soon.
17501
17502         * gen-treedump.cs: Bug fix, use s.Increment here instead of
17503         s.InitStatement. 
17504
17505         * codegen.cs (EmitContext): New struct, used during code
17506         emission to keep a context.   Most of the code generation will be
17507         here. 
17508
17509         * cs-parser.jay: Add embedded blocks to the list of statements of
17510         this block.  So code generation proceeds in a top down fashion.
17511
17512 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
17513
17514         * statement.cs: Add support for multiple child blocks.
17515
17516 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
17517
17518         * codegen.cs (EmitCode): New function, will emit the code for a
17519         Block of code given a TypeContainer and its ILGenerator. 
17520
17521         * statement.cs (Block): Standard public readonly optimization.
17522         (Block::Block constructors): Link children. 
17523         (Block::Child): Child Linker.
17524         (Block::EmitVariables): Emits IL variable declarations.
17525
17526         * class.cs: Drop support for MethodGroups here, delay until
17527         Semantic Analysis.
17528         (Method::): Applied the same simplification that I did before, and
17529         move from Properties to public readonly fields.
17530         (Method::ParameterTypes): Returns the parameter types for the
17531         function, and implements a cache that will be useful later when I
17532         do error checking and the semantic analysis on the methods is
17533         performed.
17534         (Constructor::GetCallingConvention): Renamed from CallingConvetion
17535         and made a method, optional argument tells whether this is a class
17536         or a structure to apply the `has-this' bit.
17537         (Method::GetCallingConvention): Implement, returns the calling
17538         convention. 
17539         (Method::Define): Defines the type, a second pass is performed
17540         later to populate the methods.
17541
17542         (Constructor::ParameterTypes): implement a cache similar to the
17543         one on Method::ParameterTypes, useful later when we do semantic
17544         analysis. 
17545
17546         (TypeContainer::EmitMethod):  New method.  Emits methods.
17547
17548         * expression.cs: Removed MethodGroup class from here.
17549
17550         * parameter.cs (Parameters::GetCallingConvention): new method.
17551
17552 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
17553
17554         * class.cs (TypeContainer::Populate): Drop RootContext from the
17555         argument. 
17556
17557         (Constructor::CallingConvention): Returns the calling convention.
17558         (Constructor::ParameterTypes): Returns the constructor parameter
17559         types. 
17560
17561         (TypeContainer::AddConstructor): Keep track of default constructor
17562         and the default static constructor.
17563
17564         (Constructor::) Another class that starts using `public readonly'
17565         instead of properties. 
17566
17567         (Constructor::IsDefault): Whether this is a default constructor. 
17568
17569         (Field::) use readonly public fields instead of properties also.
17570
17571         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
17572         track of static constructors;  If none is used, turn on
17573         BeforeFieldInit in the TypeAttributes. 
17574
17575         * cs-parser.jay (opt_argument_list): now the return can be null
17576         for the cases where there are no arguments. 
17577
17578         (constructor_declarator): If there is no implicit `base' or
17579         `this', then invoke the default parent constructor. 
17580
17581         * modifiers.cs (MethodAttr): New static function maps a set of
17582         modifiers flags into a MethodAttributes enum
17583         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
17584         MethodAttr, TypeAttr to represent the various mappings where the
17585         modifiers are used.
17586         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
17587
17588 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
17589
17590         * parameter.cs (GetParameterInfo): Fix bug where there would be no
17591         method arguments.
17592
17593         * interface.cs (PopulateIndexer): Implemented the code generator
17594         for interface indexers.
17595
17596 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
17597
17598         * interface.cs (InterfaceMemberBase): Now we track the new status
17599         here.  
17600
17601         (PopulateProperty): Implement property population.  Woohoo!  Got
17602         Methods and Properties going today. 
17603
17604         Removed all the properties for interfaces, and replaced them with
17605         `public readonly' fields. 
17606
17607 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
17608
17609         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
17610         initialize their hashtables/arraylists only when they are needed
17611         instead of doing this always.
17612
17613         * parameter.cs: Handle refs and out parameters.
17614
17615         * cs-parser.jay: Use an ArrayList to construct the arguments
17616         instead of the ParameterCollection, and then cast that to a
17617         Parameter[] array.
17618
17619         * parameter.cs: Drop the use of ParameterCollection and use
17620         instead arrays of Parameters.
17621
17622         (GetParameterInfo): Use the Type, not the Name when resolving
17623         types. 
17624
17625 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
17626
17627         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
17628         and instead use public readonly fields.
17629
17630         * class.cs: Put back walking code for type containers.
17631
17632 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
17633
17634         * class.cs (MakeConstant): Code to define constants.
17635
17636         * rootcontext.cs (LookupType): New function.  Used to locate types 
17637
17638
17639 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
17640
17641         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
17642         this System.Reflection code is.  Kudos to Microsoft
17643
17644         * typemanager.cs: Implement a type cache and avoid loading all
17645         types at boot time.  Wrap in LookupType the internals.  This made
17646         the compiler so much faster.  Wow.  I rule!
17647
17648         * driver.cs: Make sure we always load mscorlib first (for
17649         debugging purposes, nothing really important).
17650
17651         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
17652         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
17653
17654         * rootcontext.cs: Lookup types on their namespace;  Lookup types
17655         on namespaces that have been imported using the `using' keyword.
17656
17657         * class.cs (TypeContainer::TypeAttr): Virtualize.
17658         (Class::TypeAttr): Return attributes suitable for this bad boy.
17659         (Struct::TypeAttr): ditto.
17660         Handle nested classes.
17661         (TypeContainer::) Remove all the type visiting code, it is now
17662         replaced with the rootcontext.cs code
17663
17664         * rootcontext.cs (GetClassBases): Added support for structs. 
17665
17666 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
17667
17668         * interface.cs, statement.cs, class.cs, parameter.cs,
17669         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
17670         Drop use of TypeRefs, and use strings instead.
17671
17672 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
17673
17674         * rootcontext.cs: 
17675
17676         * class.cs (Struct::Struct): set the SEALED flags after
17677         checking the modifiers.
17678         (TypeContainer::TypeAttr): new property, returns the
17679         TypeAttributes for a class.  
17680
17681         * cs-parser.jay (type_list): Oops, list production was creating a
17682         new list of base types.
17683
17684         * rootcontext.cs (StdLib): New property.
17685         (GetInterfaceTypeByName): returns an interface by type name, and
17686         encapsulates error handling here.
17687         (GetInterfaces): simplified.
17688         (ResolveTree): Encapsulated all the tree resolution here.
17689         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
17690         types. 
17691
17692         * driver.cs: Add support for --nostdlib, to avoid loading the
17693         default assemblies.
17694         (Main): Do not put tree resolution here. 
17695
17696         * rootcontext.cs: Beginning of the class resolution.
17697
17698 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
17699
17700         * rootcontext.cs: Provide better error reporting. 
17701
17702         * cs-parser.jay (interface_base): set our $$ to be interfaces.
17703
17704         * rootcontext.cs (CreateInterface): Handle the case where there
17705         are no parent interfaces.
17706
17707         (CloseTypes): Routine to flush types at the end.
17708         (CreateInterface): Track types.
17709         (GetInterfaces): Returns an array of Types from the list of
17710         defined interfaces.
17711
17712         * typemanager.c (AddUserType): Mechanism to track user types (puts
17713         the type on the global type hash, and allows us to close it at the
17714         end). 
17715
17716 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
17717
17718         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
17719         RecordInterface instead.
17720
17721         * cs-parser.jay: Updated to reflect changes above.
17722
17723         * decl.cs (Definition): Keep track of the TypeBuilder type that
17724         represents this type here.  Not sure we will use it in the long
17725         run, but wont hurt for now.
17726
17727         * driver.cs: Smaller changes to accomodate the new code.
17728
17729         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
17730         when done. 
17731
17732         * rootcontext.cs (CreateInterface):  New method, used to create
17733         the System.TypeBuilder type for interfaces.
17734         (ResolveInterfaces): new entry point to resolve the interface
17735         hierarchy. 
17736         (CodeGen): Property, used to keep track of the code generator.
17737
17738 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
17739
17740         * cs-parser.jay: Add a second production for delegate_declaration
17741         with `VOID'.
17742
17743         (enum_body): Put an opt_comma here instead of putting it on
17744         enum_body or enum_member_declarations so we can handle trailing
17745         commas on enumeration members.  Gets rid of a shift/reduce.
17746
17747         (type_list): Need a COMMA in the middle.
17748
17749         (indexer_declaration): Tell tokenizer to recognize get/set
17750
17751         * Remove old targets.
17752
17753         * Re-add the parser target.
17754
17755 2001-07-13  Simon Cozens <simon@simon-cozens.org>
17756
17757         * cs-parser.jay: Add precendence rules for a number of operators
17758         ot reduce the number of shift/reduce conflicts in the grammar.
17759
17760 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
17761
17762         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
17763         and put it here.
17764
17765         Get rid of old crufty code.
17766
17767         * rootcontext.cs: Use this to keep track of the parsed
17768         representation and the defined types available to the program. 
17769
17770         * gen-treedump.cs: adjust for new convention.
17771
17772         * type.cs: Split out the type manager, and the assembly builder
17773         from here. 
17774
17775         * typemanager.cs: the type manager will live here now.
17776
17777         * cil-codegen.cs: And the code generator here. 
17778
17779 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
17780
17781         * makefile: Fixed up for easy making.
17782
17783 2001-07-13  Simon Cozens <simon@simon-cozens.org>
17784
17785         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
17786         the 
17787
17788         (unary_expression): Expand pre_increment_expression and
17789         post_decrement_expression to reduce a shift/reduce.
17790
17791 2001-07-11  Simon Cozens
17792
17793         * cs-tokenizer.cs: Hex numbers should begin with a 0.
17794
17795         Improve allow_keyword_as_indent name.
17796
17797 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
17798
17799         * Adjustments for Beta2. 
17800
17801 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
17802
17803         * decl.cs: Added `Define' abstract method.
17804         (InTransit): new property, used to catch recursive definitions. 
17805
17806         * interface.cs: Implement `Define'. 
17807
17808         * modifiers.cs: Map Modifiers.constants to
17809         System.Reflection.TypeAttribute flags.
17810
17811         * class.cs: Keep track of types and user-defined types.
17812         (BuilderInit): New method for creating an assembly
17813         (ResolveType): New function to launch the resolution process, only
17814         used by interfaces for now.
17815
17816         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
17817         that are inserted into the name space. 
17818
17819 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
17820
17821         * ARGH.  I have screwed up my tree so many times due to the use of
17822         rsync rather than using CVS.  Going to fix this at once. 
17823
17824         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
17825         load types.
17826
17827 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
17828
17829         * Experiment successful: Use System.Type rather that our own
17830         version of Type.  
17831
17832 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
17833
17834         * cs-parser.jay: Removed nsAliases from here.
17835
17836         Use new namespaces, handle `using XXX;' 
17837
17838         * namespace.cs: Reimplemented namespace handling, use a recursive
17839         definition of the class.  Now we can keep track of using clauses
17840         and catch invalid using clauses.
17841
17842 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
17843
17844         * gen-treedump.cs: Adapted for all the renaming.
17845
17846         * expression.cs (Expression): this class now has a Type property
17847         which returns an expression Type.
17848
17849         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
17850         `Type', as this has a different meaning now in the base
17851
17852 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
17853
17854         * interface.cs, class.cs: Removed from all the sources the
17855         references to signature computation, as we can not do method
17856         signature computation during the parsing time, as we are not
17857         trying to solve at that point distinguishing:
17858
17859         class X {
17860                 void a (Blah x) {}
17861                 void a (NS.Blah x) {}
17862         }
17863
17864         Which depending on the context might be valid or not, as we do not
17865         know if Blah is the same thing as NS.Blah at that point.
17866
17867         * Redid everything so the code uses TypeRefs now instead of
17868         Types.  TypeRefs are just temporary type placeholders, that need
17869         to be resolved.  They initially have a pointer to a string and the
17870         current scope in which they are used.  This is used later by the
17871         compiler to resolve the reference to an actual Type. 
17872
17873         * DeclSpace is no longer a CIR.Type, and neither are
17874         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
17875         are all DeclSpaces, but no Types. 
17876
17877         * type.cs (TypeRefManager): This implements the TypeRef manager,
17878         which keeps track of all the types that need to be resolved after
17879         the parsing has finished. 
17880
17881 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
17882
17883         * ARGH.  We are going to have to store `foreach' as a class rather
17884         than resolving it, as we need to verify error 1579 after name
17885         resolution.   *OR* we could keep a flag that says `This request to
17886         IEnumerator comes from a foreach statement' which we can then use
17887         to generate the error.
17888
17889 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
17890
17891         * class.cs (TypeContainer.AddMethod): we now add methods to the
17892         MethodGroup instead of the method hashtable.  
17893
17894         * expression.cs: Add MethodGroup abstraction, which gets us one
17895         step closer to the specification in the way we handle method
17896         declarations.  
17897
17898         * cs-parser.jay (primary_expression): qualified_identifier now
17899         tried to match up an identifier to a local variable reference or
17900         to a parameter reference.
17901
17902         current_local_parameters is now a parser global variable that
17903         points to the current parameters for the block, used during name
17904         lookup.
17905
17906         (property_declaration): Now creates an implicit `value' argument to
17907         the set accessor.
17908
17909 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
17910
17911         * parameter.cs: Do not use `param' arguments as part of the
17912         signature, per the spec.
17913
17914 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
17915
17916         * decl.cs: Base class for classes, structs and interfaces.  This
17917         is the "Declaration Space" 
17918
17919         * cs-parser.jay: Use CheckDef for checking declaration errors
17920         instead of having one on each function.
17921
17922         * class.cs: Factor out some code for handling error handling in
17923         accordance to the "Declarations" section in the "Basic Concepts"
17924         chapter in the ECMA C# spec.
17925
17926         * interface.cs: Make all interface member classes derive from
17927         InterfaceMemberBase.
17928
17929 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
17930
17931         * Many things: all interfaces are parsed and generated in
17932         gen-treedump.  Support for member variables, constructors,
17933         destructors, properties, constants is there.
17934
17935         Beginning of the IL backend, but very little done, just there for
17936         testing purposes. 
17937
17938 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
17939
17940         * cs-parser.jay: Fix labeled statement.
17941
17942         * cs-tokenizer.cs (escape): Escape " and ' always.
17943         ref_line, ref_name: keep track of the line/filename as instructed
17944         by #line by the compiler.
17945         Parse #line.
17946
17947 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
17948
17949         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
17950         to match the values in System.CodeDOM.
17951
17952         Divid renamed to Divide.
17953
17954         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
17955         statements. 
17956         (Statements.set): remove.
17957
17958         * System.CodeDOM/CodeCatchClause.cs: always have a valid
17959         statements. 
17960
17961         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
17962         falseStatements always have valid values. 
17963
17964         * cs-parser.jay: Use System.CodeDOM now.
17965