2008-02-05 Marek Safar <marek.safar@gmail.com>
[mono.git] / mcs / mcs / ChangeLog
1 2008-02-05  Marek Safar  <marek.safar@gmail.com>
2
3         A fix for bug #357047
4         * ecore.cs: Applied C# 3.0 changes to better conversion.
5
6 2008-02-05  Marek Safar  <marek.safar@gmail.com>
7
8         A fix for bug #358374
9         * cs-parser.jay: Correctly set modifiers for all constructor types.
10
11 2008-02-04  Marek Safar  <marek.safar@gmail.com>
12
13         A fix for bug #355251
14         * generic.cs: Added base class constraint based type inference.
15
16 2008-02-01  Marek Safar  <marek.safar@gmail.com>
17
18         A fix for bug #357255
19         * decl.cs: One more missing visibility check.
20
21 2008-02-01  Marek Safar  <marek.safar@gmail.com>
22
23         * support.cs: Fixed broken return.
24
25 2008-01-25  Marek Safar  <marek.safar@gmail.com>
26
27         * report.cs: Correctly reset warnings count after probing.
28         
29 2008-01-25  Martin Baulig  <martin@ximian.com>
30
31         * namespace.cs
32         (NamespaceEntry.SymbolFileID): Make this work again after
33         MemberName.ToString() is gone.
34
35 2008-01-25  Marek Safar  <marek.safar@gmail.com>
36
37         * expression.cs: Implemented Divide, Equal, ExclusiveOr, GreaterThanOrEqual
38         expressions.
39         
40 2008-01-25  Marek Safar  <marek.safar@gmail.com>
41
42         * generic.cs: Use full implicit conversion for type inference fixing.
43         
44 2008-01-24  Marek Safar  <marek.safar@gmail.com>
45
46         * ecore.cs, expression.cs, generic.cs: Implemented Convert, ConvertChecked.
47         Fixed user operator conversions.
48         
49 2008-01-24  Marek Safar  <marek.safar@gmail.com>
50
51         * generic.cs: Do nullable type to null comparison optimization during
52         resolve phase.
53         
54 2008-01-24  Marek Safar  <marek.safar@gmail.com>
55
56         A fix for bug #355163
57         * generic.cs: Enabled l-value resolve on nullable expressions.
58         
59 2008-01-24  Marek Safar  <marek.safar@gmail.com>
60
61         A fix for bug #353986
62         * class.cs: Ingore static ctors with parameters for any further checks.
63         
64 2008-01-24  Marek Safar  <marek.safar@gmail.com>
65
66         A fix for bug #354310
67         * namespace.cs: Removed redundant check.
68
69 2008-01-24  Marek Safar  <marek.safar@gmail.com>
70
71         A fix for bug #354928
72         * expression.cs: ElementInitializers can be resolved only once.
73         
74 2008-01-24  Marek Safar  <marek.safar@gmail.com>
75
76         * convert.cs, ecore.cs, expression.cs, generic.cs: Implemented Coalesce and
77         Condition expressions.
78         
79 2008-01-23  Marek Safar  <marek.safar@gmail.com>
80
81         * codegen.cs: Fixed AssemblyBuilder initialization on other platforms.
82
83 2008-01-22  Marek Safar  <marek.safar@gmail.com>
84
85         * ecore.cs, expression.cs, generic.cs: Implicit bool? to bool conversion is
86         not allowed.
87         
88         * generic.cs: Implemented coalesce expression.
89
90 2008-01-22  Marek Safar  <marek.safar@gmail.com>
91
92         A fix for bug #355145
93         * anonymous.cs, convert.cs, ecore.cs, generic.cs, lambda.cs: Implemented
94         expression tree type inference.
95
96 2008-01-22  Raja R Harinath  <harinath@hurrynot.org>
97
98         Fix #354663
99         * expression.cs (Binary.IsUnsignedType): Fix typo.
100         
101 2008-01-22  Marek Safar  <marek.safar@gmail.com>
102
103         * ecore.cs, expression.cs, generic.cs: Implemented NewArrayInit expression.
104         
105 2008-01-22  Marek Safar  <marek.safar@gmail.com>
106
107         A fix for bug #355161
108         * ecore.cs, expression.cs: Wider range of extension method supported
109         expressions.
110  
111 2008-01-22  Gert Driesen  <drieseng@users.sourceforge.net>
112
113         * codegen.cs: Use magic value for AssemblyBuilderAccess to instruct
114         AssemblyBuilder to operate in compiler context. Fixes mcs part of
115         bug #354970.
116
117 2008-01-22  Marek Safar  <marek.safar@gmail.com>
118
119         A fix for bug #355148
120         * ecore.cs, expression.cs: Correctly report misused ref and out modifiers.
121         
122 2008-01-22  Miguel de Icaza  <miguel@novell.com>
123
124         * expression.cs (CreateExpressionTree): Add support for or and
125         logical or, and indent following the coding conventions.
126
127         * typemanager.cs (LinqExpression): renamed from
128         ExpressionTreeManager, for a shorter name.
129
130         Use TypeManager.CoreLookupType to lookup types from our core
131         assemblies and turn those into "Type" variables.
132
133         Consumers that previously used "Namespace" and "Type" from this
134         class should instead use the TypeExpression which is a type that
135         is fully resolved (without involving the regular C# resolution
136         rules). 
137
138         This typically looks like this:
139
140         TypeExpression texpr = new TypeExpression (LinqExpression.expression_type, loc);
141         new MemberAccess (texpr, name, type_arguments, loc)
142
143         This avoids the problem in: #355178
144
145 2008-01-21  Marek Safar  <marek.safar@gmail.com>
146
147         * cs-parser.jay, expression.cs: Check `namespace alias qualifier' language
148         feature in parser only as we do in other cases.
149         
150 2008-01-21  Marek Safar  <marek.safar@gmail.com>
151
152         * attribute.cs, ecore.cs, class.cs, delegate.cs, expression.cs, linq.cs,
153         typemanager.cs: A refactoring of params arguments to reuse existing
154         expressions (params -> array initializer) to emit params argument instead
155         of specialized handling.
156         It was required by expression tree implementation and it has other benefits
157         as well, we now apply same optimization for params arguments as we do for
158         array initializers.
159         
160 2008-01-18  Marek Safar  <marek.safar@gmail.com>
161
162         A fix for bug #353526
163         * generic.cs: A type inference of params arguments may not required any
164         temporary array creation.
165         
166 2008-01-18  Marek Safar  <marek.safar@gmail.com>
167
168         A fix for bug #353534
169         * generic.cs, ecore.cs, expression.cs: A method group type inference is
170         supported for delegates only.
171         
172 2008-01-18  Marek Safar  <marek.safar@gmail.com>
173
174         * generic.cs: Fixed 3.0 type inference fixing phase to determine a unique
175         type for more than 1 candidates.
176         
177 2008-01-18  Marek Safar  <marek.safar@gmail.com>
178
179         * typemanager.cs, ecore.cs, expression.cs: Implemented ArrayLength and Call
180         expressions.
181         
182 2008-01-16  Marek Safar  <marek.safar@gmail.com>
183
184         * generic.cs, typemanager.cs, lambda.cs, parameter.cs, ecore.cs, constant.cs,
185         expression.cs: Implemented Add, And, AndAlso, and ArrayIndex (without unary
186         operator) expressions. 
187                 
188 2008-01-16  Zoltan Varga  <vargaz@gmail.com>
189
190         * statement.cs: Avoid declaring an IL variable for this_variable since it is
191         not accessed from the generated IL.
192
193 2008-01-14  Marek Safar  <marek.safar@gmail.com>
194
195         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, class.cs, delegate.cs,
196         iterators.cs, convert.cs, assign.cs, anonymous.cs, expression.cs,
197         statement.cs: The first expression tree implementation drop, mostly
198         infrastructure work.
199
200 2008-01-14  Marek Safar  <marek.safar@gmail.com>
201
202         * ecore.cs (IsNestedChild): Refactored.
203
204 2008-01-11  Marek Safar  <marek.safar@gmail.com>
205
206         * lambda.cs: Don't use a cast on unknown expression statement.
207
208 2008-01-10  Geoff Norton  <gnorton@novell.com>
209
210         * cs-tokenizer.cs: One more token to distinguish between method and lambda
211         arguments
212
213 2008-01-09  Marek Safar  <marek.safar@gmail.com>
214
215         * doc.cs: Report better /doc crash details.
216         
217 2008-01-09  Marek Safar  <marek.safar@gmail.com>
218
219         A fix for bug #352536
220         * ecore.cs, assign.cs, codegen.cs: Check event assignments.
221
222 2008-01-08  Marek Safar  <marek.safar@gmail.com>
223
224         A fix for bug #352287
225         * ecore.cs, expression.cs: Do `this' access checking in all member access
226         expressions.
227         
228 2008-01-08  Marek Safar  <marek.safar@gmail.com>
229
230         * rootcontext.cs, driver.cs: Switch to linq mode by default.
231         
232         * report.cs: Reset message stacks.
233         
234 2008-01-08  Marek Safar  <marek.safar@gmail.com>
235
236         * generic.cs (InferInPhases): Correctly calculate params position.
237         
238 2008-01-08  Marek Safar  <marek.safar@gmail.com>
239
240         * cs-tokenizer.cs: No need to parse full string when parsing lambda
241         arguments.
242
243 2008-01-07  Marek Safar  <marek.safar@gmail.com>
244
245         * cs-tokenizer.cs: Enabled lambda arguments micro-parser for all profiles.
246         
247         * decl.cs (LookupNamespaceOrType): Don't cache names which caused an error.
248         
249         * driver.cs: Updated --help option.
250         
251 2008-01-07  Marek Safar  <marek.safar@gmail.com>
252
253         * generic.cs (InferParamsTypeArguments): Removed.
254         (InferInPhases): Add params type inference.
255         (LowerBoundInference): Fixed scoring mechanism.
256         
257         * cs-tokenizer.cs (PreProcessPragma): Use Location instead of line.
258         
259 2008-01-06  Gert Driesen  <drieseng@users.sourceforge.net>
260
261         * typemanager.cs: On 2.0 profile, GetPublicKeyToken returns an empty
262         byte array for unsigned "baked" assemblies.
263
264 2008-01-05  Gert Driesen  <drieseng@users.sourceforge.net>
265
266         * codegen.cs: AssemblyName.GetPublicKey returns a zero-length byte
267         array for assemblies that are not strongnamed.
268
269 2008-01-04  Marek Safar  <marek.safar@gmail.com>
270
271         A fix for bug #351481
272         * expression.cs (MemberAccess.ResolveNamespaceOrType): Use correct
273         declaring type for nested generic types.
274         
275 2008-01-04  Marek Safar  <marek.safar@gmail.com>
276
277         * namespace.cs, class.cs, decl.cs, cs-parser.jay: Use GetSignatureForError
278         instead of ToString.
279         
280 2008-01-03  Marek Safar  <marek.safar@gmail.com>
281
282         A fix for bug #351047
283         * expression.cs (Binary.ResolveOperator): Allow equality operators between
284         null and structs only when equality and inequality operators are defined
285         either as an user-operators or predefined operators.
286         
287 2008-01-03  Marek Safar  <marek.safar@gmail.com>
288
289         A fix for bug #351047
290         * generic.cs, typemanager.cs, class.cs: New IsReferenceType helper method.
291         
292 2008-01-03  Marek Safar  <marek.safar@gmail.com>
293
294         A fix for bug #351257
295         * cs-tokenizer.cs: Advance line number for '\r' correctly.
296         
297 2008-01-03  Marek Safar  <marek.safar@gmail.com>
298
299         A fix for bug #351157
300         * class.cs (Using): Fixed yet another broken cloning.
301         
302         (Block): Put back more sensible default value for statements.
303         
304 2008-01-01  Gert Driesen  <drieseng@users.sourceforge.net>
305
306         * codegen.cs: Allow AssemblyVersion with only major version component.
307         Fixes bug #351055.
308
309 2007-12-29  Marek Safar  <marek.safar@gmail.com>
310
311         A fix for bug #324654
312         * class.cs: Use FullName property as member name.
313
314 2007-12-28  Marek Safar  <marek.safar@gmail.com>
315
316         A fix for bug #342117
317         * generic.cs (ConstraintChecker): Struct constraint also satisfies default
318         constructor constraint.
319
320 2007-12-28  Marek Safar  <marek.safar@gmail.com>
321
322         A fix for bug #338273
323         * class.cs (ProbertyBase): Access modifier checks are required for overrides
324         only.
325
326 2007-12-28  Marek Safar  <marek.safar@gmail.com>
327
328         A fix for bug #350839
329         * ecore.cs (MethodroupExpr): Probing hacks are no longer required.
330
331 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
332
333         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
334         GHOP:
335         
336         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
337
338         * statement.cs: Changed some Hashtables to use HybridDictionaries
339         instead. It was observed that some HashTables only contained a few
340         items in the vast majority of cases. Since HybridDictionary is
341         more efficient on small sets (<10 elements), "known_variables"
342         from class ExplicitBlock as well as "labels" and "constants " from
343         class Block were changed to HybridDictionaries. 
344
345         Atsai results: (56216kb->54987kb)
346
347         Miguel results (bootstrap of mcs): 59819kb -> 59290kb
348
349
350 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
351
352         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
353         GHOP:
354         
355         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
356         
357         * expression.cs: foreach loop to for loop, saved on allocation of
358         enumerator (59333kb->59141kb)
359
360         * statement.cs. Changed foreach loops to for loops, saved on
361         allocation of enumerator (59141kb->59006kb)
362
363         * decl.cs: ArrayLists in .NET 1.1 allocate 16 elements by default
364         when constructed with no specified capacity. This was causing a
365         few ArrayLists to allocate more memory than they would potentially
366         need in the Block class and MemberCache class. Setting the
367         ArrayLists to construct with a capacity of 1 saves some
368         memory. (56216kb->55585kb)
369
370 2007-12-27  Marek Safar  <marek.safar@gmail.com>
371
372         A fix for bug #347189 (2nd issue)
373         * expression.cs (MemberAccess): Nested type can be found in base non-generic
374         type.
375
376 2007-12-27  Miguel de Icaza  <miguel@novell.com>
377         
378         * report.cs: Do not use colors if stdout and stderr are not a
379         terminal.
380
381 2007-12-27  Marek Safar  <marek.safar@gmail.com>
382
383         A fix for bug #346998
384         * ecore.cs (MethodGroupExpr): Implemented override filter for generic
385         overloads.
386
387 2007-12-27  Marek Safar  <marek.safar@gmail.com>
388
389         A fix for bug #343465
390         * class.cs: Explicit method name for nested types uses dots only.
391
392 2007-12-27  Marek Safar  <marek.safar@gmail.com>
393
394         A fix for bug #343707
395         * cs-tokenizer.cs: Advance line number for mixed CR/LF files correctly.
396
397 2007-12-27  Marek Safar  <marek.safar@gmail.com>
398
399         * ecore.cs: Report type inference errors only when arguments count matches
400         parameter count.
401         
402         * generic.cs (NullCoalescingOperator): Cannot be applied to null.
403         
404         * expression.cs, report.cs: New warning.
405         
406         * typemanager.cs: Catch anonymous method type too.
407
408 2007-12-23  Marek Safar  <marek.safar@gmail.com>
409
410         A fix for bug #346379
411         * expression.cs (UnaryMutator): Emit size of type for pointer mutator.
412
413 2007-12-23  Marek Safar  <marek.safar@gmail.com>
414
415         A fix for bug #347359
416         * expression.cs (Invocation): Don't resolve already resolved expression.
417
418 2007-12-23  Marek Safar  <marek.safar@gmail.com>
419
420         A fix for bug #347189
421         * class.cs (FixedField): Use non-dependent code only in the define phase.
422
423 2007-12-23  Marek Safar  <marek.safar@gmail.com>
424
425         A fix for bug #348076
426         * ecore.cs (FieldExpr.DoResolve): Allow any variable based expression.
427
428 2007-12-22  Marek Safar  <marek.safar@gmail.com>
429
430         * ecore.cs (MethodGroupExpr.OverloadResolve): Set type arguments for
431         discovered extension methods.
432
433 2007-12-22  Marek Safar  <marek.safar@gmail.com>
434
435         * ecore.cs, namespace.cs, expression.cs: Removed broken ResolveGeneric
436         method.
437
438 2007-12-21  Miguel de Icaza  <miguel@novell.com>
439
440         * report.cs (ErrorMessage): Add support for using colors on
441         terminals that support it. 
442
443 2007-12-21  Marek Safar  <marek.safar@gmail.com>
444
445         * ecore.cs: Use information about expanded params for error reporting.
446
447 2007-12-21  Marek Safar  <marek.safar@gmail.com>
448
449         * ecore.cs, generic.cs, delegate.cs: Refactoring of method overloading code
450         and logic for params overloads.
451         
452 2007-12-15  Miguel de Icaza  <miguel@novell.com>
453
454         * generic.cs (NullCoalescingOperator.CloneTo): implement this one,
455         as this is also created from the parser.  Fixes #349034
456
457 2007-12-12  Miguel de Icaza  <miguel@novell.com>
458
459         * statement.cs (Throw.CloneTo): it is valid to have empty
460         expressions for throw. 
461
462 2007-12-03  Marek Safar  <marek.safar@gmail.com>
463
464         * cs-parser.jay: Set delegate constraint parsing region correctly.
465
466 2007-12-03  Marek Safar  <marek.safar@gmail.com>
467
468         A fix for bug #345467
469         * typemanager.cs (IsEqual): Compare generic parameters position only.
470         
471 2007-11-28  Marek Safar  <marek.safar@gmail.com>
472
473         * expression.cs (BaseAccess): Type arguments can be null.
474
475 2007-11-27  Raja R Harinath  <harinath@gmail.com>
476
477         * statement.cs (Block.Resolve): Ensure flow-branching tree is
478         consistent even when an error has occured.
479         (Switch.Resolve): Likewise.
480
481 2007-11-22  Marek Safar  <marek.safar@gmail.com>
482
483         A fix for bug #334505
484         * class.cs: Don't ignore InternalsVisibleTo attribute for internal
485         overrides.
486         
487 2007-11-22  Marek Safar  <marek.safar@gmail.com>
488
489         * ecore.cs, typemanager.cs, delegate.cs, expression.cs: The first of 
490         refactorings required to resolve extension methods correctly when mixing
491         generics and non-generics members.
492         
493 2007-11-20  Marek Safar  <marek.safar@gmail.com>
494
495         A fix for bug #342584
496         * convert.cs: Added not documented explicit IntPtr/UIntPtr to enum
497         conversion.
498         
499 2007-11-19  Marek Safar  <marek.safar@gmail.com>
500
501         A fix for bug #342512
502         * delegate.cs: Use delegate argument expression when is available. Don't
503         emit virtual call when class is sealed.
504         
505 2007-11-16  Marek Safar  <marek.safar@gmail.com>
506
507         A fix for bug #325423
508         * assign.cs (FieldInitializer): Use resolved expression for emit.
509         
510         * class.cs: Print less confusing error message.
511         
512 2007-11-16  Marek Safar  <marek.safar@gmail.com>
513
514         * cs-tokenizer.cs: Removed GMCS ifdefs.
515         
516         * rootcontext.cs, report.cs: Report unavailable gmcs features used by
517         mcs.
518         
519         * cs-parser.jay: Disabled nullable check.
520         
521         * generic-mcs: Copied more generic stuff.
522                 
523 2007-11-16  Marek Safar  <marek.safar@gmail.com>
524
525         * gcs-parser.jay: Merged to cs-parser.jay.
526         
527         * generic.cs, typemanager.cs, cs-tokenizer.cs, linq.cs, Makefile
528         * *.csproj, *.sources: Updated to use only jay parser file.
529
530 2007-11-16  Marek Safar  <marek.safar@gmail.com>
531
532         * gcs-parser.jay: Added nullable and default expression feature checks.
533         
534 2007-11-16  Marek Safar  <marek.safar@gmail.com>
535
536         * gcs-parser.jay, cs-parser.jay, class.cs: Unified parameters parsing, 
537         it fixes many TODOs and hidden bugs.
538         
539         * expression: Removed duplicate error check.
540
541 2007-11-15  Marek Safar  <marek.safar@gmail.com>
542
543         * gcs-parser.jay, statement.cs, decl.cs, ecore.cs: Try to resolve an
544         implicitly type local variable only when it is used in a declaration.
545
546 2007-11-15  Marek Safar  <marek.safar@gmail.com>
547
548         * attribute.cs: Use CS0612 for empty strings.
549
550 2007-11-14  Marek Safar  <marek.safar@gmail.com>
551
552         * lambda.cs, statement.cs: Contextual return may act as a statement.
553
554 2007-11-14  Marek Safar  <marek.safar@gmail.com>
555
556         A fix for a regression cause by #324222
557         * class.cs: Don't report unused even when it implements an interface.
558         
559 2007-11-13  Marek Safar  <marek.safar@gmail.com>
560
561         A fix for bug #341205
562         * ecore.cs, expression.cs: Method group expression cannot do static
563         method access with an instance reference check before overloading takes
564         a place.
565         
566 2007-11-13  Marek Safar  <marek.safar@gmail.com>
567
568         A fix for bug #325359
569         * class.cs: Use predictable name for automatically generated property.
570         
571 2007-11-12  Marek Safar  <marek.safar@gmail.com>
572
573         A fix for bug #324996
574         * expression.cs (Is): Handle case where D is nullable and T is not
575         correctly.
576         
577         * generics.cs (Nullable.HasValue): Nullable HasValue expression.
578         
579 2007-11-12  Marek Safar  <marek.safar@gmail.com>
580
581         * generic.cs, literal.cs, ecore.cs, class.cs, delegate.cs, const.cs,
582         anonymous.cs, expression.cs, attribute.cs, codegen.cs, statement.cs:
583         Flush small error reporting changes.
584         
585 2007-11-09  Marek Safar  <marek.safar@gmail.com>
586
587         A fix for bug #324996
588         * expression.cs: Rewrote Is expression implementation to work with
589         generics, nullable types, anonymous method. A const result expression 
590         uses existing infrastructure instead of custom not fully-featured one.
591         
592 2007-11-08  Marek Safar  <marek.safar@gmail.com>
593
594         A fix for bug #340202
595         * class.cs: Consider generics for volatile field.
596
597 2007-11-08  Marek Safar  <marek.safar@gmail.com>
598
599         A fix for bug #335594
600         * expression.cs: Use conversion rules when handling string addition.
601         
602 2007-11-07  Marek Safar  <marek.safar@gmail.com>
603
604         A fix for bug #336651
605         * expression.cs: Fixed a crash when probing is on.
606         
607 2007-11-07  Marek Safar  <marek.safar@gmail.com>
608
609         A fix for bug #324242
610         * covert.cs: Added a conversion from any nullable-type with an 
611         underlying enum-type to the type System.Enum.
612         
613 2007-11-07  Marek Safar  <marek.safar@gmail.com>
614
615         A fix for bug #324222
616         * class.cs: Report all non-used event fields.
617         
618 2007-11-07  Marek Safar  <marek.safar@gmail.com>
619
620         A fix for bug #325161
621         * cs-parser.jay, gcs-parser.jay, decl.cs: Implemented namespace alias
622         qualifier for generic types.
623         
624 2007-11-07  Marek Safar  <marek.safar@gmail.com>
625
626         A fix for bug #322971
627         * expression.cs, ecore.cs: Added intermediate result value check for
628         indexers. 
629         
630 2007-11-07  Marek Safar  <marek.safar@gmail.com>
631
632         A fix for bug #324754
633         * cs-parser.jay, gcs-parser.jay, class.cs: Try to create an interator
634         when it was requested.
635
636 2007-11-07  Marek Safar  <marek.safar@gmail.com>
637
638         A fix for bug #325101
639         * expression.cs: Do type not value comparison for `is' expression.
640
641 2007-11-07  Marek Safar  <marek.safar@gmail.com>
642
643         A fix for bug #320236
644         * convert.cs: Don't apply user conversion on underlying target type.
645
646 2007-11-06  Marek Safar  <marek.safar@gmail.com>
647
648         * expression.cs: Don't use unresolved expression for error reporting.
649  
650 2007-11-06  Marek Safar  <marek.safar@gmail.com>
651
652         A fix for bugs #337712, #324490
653         * ecore.cs (MethodGroupExpr): Refactored to handle delegate method
654         overloading resolution too.
655         
656         * delegate.cs: Uses MethodGroupExpr for overloading resolution. It makes
657         the process consistent and more robust.
658         
659         * expression.cs, linq.cs, report.cs: Update.
660
661 2007-11-02  Marek Safar  <marek.safar@gmail.com>
662
663         A fix for bug #332909
664         * attribute.cs: Resolve attributes in correct context using error
665         handling procedure.
666         
667         * rootcontext.cs: Define Obsolete attribute members as core members.
668         
669 2007-11-02  Marek Safar  <marek.safar@gmail.com>
670
671         * statement.cs: Removed unused methods.
672         
673 2007-10-31  Wade Berrier  <wberrier@novell.com>
674
675         * Makefile:  reenable copy of gmcs.exe.config, but include it in EXTRA
676         DIST (it doesn't get included because PROGRAM isn't defined to be gmcs
677         during 'make dist')
678
679 2007-10-31  Marek Safar  <marek.safar@gmail.com>
680
681         A fix for bug #338102
682         * decl.cs (CheckExistingMembersOverloads): Workaround issue with generic
683         methods registered as non-generics.
684         
685 2007-10-31  Marek Safar  <marek.safar@gmail.com>
686
687         A fix for bugs #337712, #324490
688         * delegate.cs: Delegate covariance and contravariance is not allowed for
689         value types.
690         
691 2007-10-31  Marek Safar  <marek.safar@gmail.com>
692
693         A fix for bug #337719 
694         * cs-tokenizer.cs: Restore identifier buffer when parsing contextual
695         `from' keyword.
696         
697 2007-10-30  Marek Safar  <marek.safar@gmail.com>
698  
699         * Makefile (net_2_0_bootstrap/mcs.exe.config): Reverted copy gmcs.exe.config.
700
701 2007-10-29  Marek Safar  <marek.safar@gmail.com>
702  
703         * cs-tokenizer.cs, gcs-parser.jay, driver.cs: Fixed parsing of nested
704         query expressions.
705
706 2007-10-29  Raja R Harinath  <rharinath@novell.com>
707
708         * Makefile (net_2_0_bootstrap/mcs.exe.config): Copy gmcs.exe.config.
709
710 2007-10-29  Marek Safar  <marek.safar@gmail.com>
711  
712         A fix for bug #334652
713         * ecore.cs (MethodGroupExpr.OverloadResolve): Do also lookup for
714         extension methods when we have not found the best candidate in normal
715         container.
716
717 2007-10-27  Marek Safar  <marek.safar@gmail.com>
718
719         * AssemblyInfo.cs: Keep up-to-date.
720
721 2007-10-27  Marek Safar  <marek.safar@gmail.com>
722
723         * Makefile: Fixed generics compiler name.
724         
725 2007-10-27  Marek Safar  <marek.safar@gmail.com>
726
727         * lambda.test: removed, lambda parsing is done differently.
728         
729         * gen-il.cs, gen-treedump.cs, old-code.cs : Obsolete.
730
731 2007-10-27  Gert Driesen  <drieseng@users.sourceforge.net>
732
733         * Makefile: Removed dependency on gmcs.exe.config. Fixes build.
734
735 2007-10-27  Marek Safar  <marek.safar@gmail.com>
736
737         * Makefile, *.sources : All C# compilers are in mcs folder.
738         
739         * *.cs: Use existing 2_1 define for smcs.
740
741 2007-10-26  Marek Safar  <marek.safar@gmail.com>
742
743         A fix for bug #335847
744         * assign.cs, expression.cs: Couple of changes to avoid creating a
745         temporary variable for each object initializer assignment statement. It
746         simplifies struct initialization too, otherwise two temporary variables
747         would be required.
748         Implemented optimization of redundant default element initializers.
749         
750 2007-10-25  Marek Safar  <marek.safar@gmail.com>
751
752         A fix for bug #336766
753         * expression.cs (Class.CheckBase): Use generic name when method is
754         generic.
755         
756 2007-10-25  Marek Safar  <marek.safar@gmail.com>
757
758         A fix for bug #334737
759         * expression.cs (IndexerAccess.EmitAssign): Emit local temporary
760         variable and not variable argument for prepared copies.
761
762 2007-10-24  Marek Safar  <marek.safar@gmail.com>
763
764         A fix for bug #325110
765         * class.cs, expression.cs, attribute.cs: Use open generic method when
766         checking conditional attribute.
767         
768 2007-10-24  Marek Safar  <marek.safar@gmail.com>
769
770         * report.cs, cs-tokenizer.cs, class.cs, cs-parser.jay, anonymous.cs, 
771         expression.cs, statement.cs: Renamed method FeatureIsNotISO to
772         FeatureIsNotAvailable.
773
774 2007-10-24  Marek Safar  <marek.safar@gmail.com>
775
776         ** C# 3.0 Partial methods
777         
778         * cs-tokenizer.cs, support.cs, class.cs, decl.cs: Implemented partial
779         methods support. Because of member cache issue with generics only
780         non-generics partial methods are fully supported.
781         
782 2007-10-23  Marek Safar  <marek.safar@gmail.com>
783         
784         * class.cs, decl.cs: Rewrote member overloads check to cope with 
785         generics and to use member cache for member checking. It also improves
786         performance and fixes remaining overloads issues.
787         
788 2007-10-20  Marek Safar  <marek.safar@gmail.com>
789         
790         * class.cs, const.cs, decl.cs, delegate.cs, enum.cs, generic.cs,
791         roottypes.cs, typemanager.cs:
792                 
793         A member cache creation logic changed to add members immediately and
794         not rely on fallback. The member cache is now only prefered way
795         how to access and find type declaration members. It saves 5 MB of memory
796         during MWF compilation and makes code ready for more optimizations and
797         clean-ups, it's also a pre-requirement for partial methods.
798         
799 2007-10-18  Raja R Harinath  <harinath@gmail.com>
800
801         * ecore.cs (Expression.Error_ValueCannotBeConverted): Add special
802         handling for generic parameters.
803
804 2007-10-15  Marek Safar  <marek.safar@gmail.com>
805         
806         * class.cs (FixedField): Removed redundant volatile check.
807         
808 2007-10-15  Marek Safar  <marek.safar@gmail.com>
809         
810         * class.cs, decl.cs: Fixed overload members verification to do only one
811         check per possible collision.
812         
813 2007-10-13  Marek Safar  <marek.safar@gmail.com>
814         
815         A fix for bug #325478
816         * anonymous.cs (AnonymousContainer.Compatible): Merge are flags together
817         and create only one disposable flags container.
818         
819 2007-10-12  Marek Safar  <marek.safar@gmail.com>
820         
821         A fix for bug #332442 by Alexandre Gomes <alexmipego@gmail.com>
822         * statement.cs (Fixed): Fixed variables cloning.
823         
824 2007-10-12  Marek Safar  <marek.safar@gmail.com>
825         
826         A fix for bug #333342
827         * class.cs (EventField): Don't mark value type event as synchronized. 
828         
829 2007-10-12  Marek Safar  <marek.safar@gmail.com>
830         
831         * ecore.cs, anonymous.cs (MethodGroupExpr): Use score from type
832         inference to identify best candidate method correctly.
833         (ProperyExpr): A range variable is read only and cannot be modified.
834         
835 2007-10-11  Marek Safar  <marek.safar@gmail.com>
836         
837         * ecore.cs, delegate.cs (MethodGroupExpr): Refactored best candidate
838         logic to identify best candidate method correctly.
839         
840 2007-10-11  Marek Safar  <marek.safar@gmail.com>
841         
842         * location.cs (Equals, GetHashCode): Removed.
843         
844 2007-10-11  Marek Safar  <marek.safar@gmail.com>
845         
846         * report.cs: Implemented message recorder. It is used mainly for lambda
847         expressions to capture otherwise swallowed error messages.
848         
849         * anonymous.cs, lambda.cs.cs: Do full parameters check.
850
851         * ecore.cs (ExtensionMethodGroup): Report binding failure at the botton
852         and not at the top.
853         (MethodGroupExpr.DoResolve): Use message recorder for error handling.
854                 
855         * expression.cs (MemberAccess): Always report lookup failure.
856         
857         * location.cs: Implemented Equals, GetHashCode.
858         
859         * statement.cs (Return.DoResolve): Fixed hardcoded error argument.
860         
861 2007-10-10  Jb Evain  <jbevain@novell.com>
862
863         * codegen.cs: re-enable assembly version check.
864
865 2007-10-09  Marek Safar  <marek.safar@gmail.com>
866         
867         * report.cs, anonymous.cs, driver.cs, expression.cs: Added few ISO-2
868         checks.
869         
870         * namespace.cs (UsingAlias): Do correct version check.
871         
872 2007-10-08  Marek Safar  <marek.safar@gmail.com>
873         
874         * expresison.cs, ecore.cs: Issue extension method error message when
875         appropriate.
876         
877         * rootcontext.cs: Added ISO_2 compiler mode option.
878
879 2007-10-08  Marek Safar  <marek.safar@gmail.com>
880         
881         * expresison.cs (UnaryMutator.ResolveOperator): Print more useful error
882          message.
883         
884 2007-10-08  Marek Safar  <marek.safar@gmail.com>
885         
886         * attribute.cs (GetString, GetBoolean): Work with both literal and
887         constant.
888         
889         * ecore.cs, expresison.cs, delegate.cs (Invocation, MethodGroupExpr):
890         Moved method overload specific methods to MethodGroupExpr.
891         
892         (IndexerAccess): Re-wrote resolving mechanism, fixed many issues and
893         it should be less memory consuming.
894         
895 Mon Oct 8 09:29:15 CEST 2007 Paolo Molaro <lupus@ximian.com>
896
897         * codegen.cs: remove the assembly version check until the buildbot is
898         fixed.
899
900 2007-10-07  Jb Evain  <jbevain@novell.com>
901
902         * attribute.cs (Attribute.GetString): if the value
903         expression is a StringConstant, return its string value.
904
905 2007-10-07  Jb Evain  <jbevain@novell.com>
906
907         * typemanager.cs: add `assembly_version_attribute_type`.
908         * codegen.cs: on attribute emission, check that the
909         AssemblyVersionAttribute doesn't overflow.
910
911 2007-10-05  Marek Safar  <marek.safar@gmail.com>
912         
913         A fix for bug #324677
914         * anonymous.cs, decl.cs: Yes another anonymous container hack. Overwrite
915         parent container of a scope container with currently resolved one. 
916         
917 2007-10-05  Marek Safar  <marek.safar@gmail.com>
918         
919         A fix for bug #325534
920         * class.cs (Invocation.DoResolve): Check invocation of object finalizer
921         only.
922         
923 2007-10-05  Marek Safar  <marek.safar@gmail.com>
924         
925         A fix for bug #327504
926         * class.cs (Operator.Define): Refactored implicit and explicit user
927         operator conversion rules.
928         
929 2007-10-05  Marek Safar  <marek.safar@gmail.com>
930         
931         A fix for bug #327520
932         * ecore.cs (ExtensionMethodGroupExpr): Emit resolved extension argument.
933         
934 2007-10-04  Marek Safar  <marek.safar@gmail.com>
935         
936         A fix for bug #328022
937         * class.cs (MethodData.Define): Use correct method to check whether
938         a method implementents an accessor.
939         
940 2007-10-04  Marek Safar  <marek.safar@gmail.com>
941         
942         A fix for bug #330069
943         * statement.cs (Fixed.Resolve): Read the first array element only when
944         an array is instantiated. 
945         
946 2007-10-04  Marek Safar  <marek.safar@gmail.com>
947         
948         * expression.cs, assign.cs, generics.cs: Print correct operator when
949         compound assignment is used.
950         
951 2007-10-04  Marek Safar  <marek.safar@gmail.com>
952         
953         A fix for bug #325841
954         * expression.cs (ArrayAccess): Use full argument cloning only for
955         string compound concatenation.
956         
957 2007-10-03  Marek Safar  <marek.safar@gmail.com>
958         
959         A fix for bug #328774
960         * ecore.cs (FieldExpr.EmitAssign): Fixed string concatenation compound
961         assignment.
962         (PropertyExpr.EmitAssign): Fixed string concatenation compound
963         assignment.
964
965 2007-10-03  Raja R Harinath  <rharinath@novell.com>
966
967         Fix #328490
968         * ecore.cs (SimpleName.DoSimpleNameResolve): Handle Property and
969         Event accessibility checks here.  Remove some bogus code that
970         accidently made GenericMethods work.
971         (PropertyExpr.IsAccessibleFrom, EventExpr.IsAccessibleFrom): New.
972
973 2007-09-25  Marek Safar  <marek.safar@gmail.com>
974         
975         * expression.cs (ArrayCreation): Fixed cloning of an implicit types.
976         
977         * statement.cs (Block): Refactored AddVariable to allow error handling
978         customization.
979         
980         * generic.cs: New stub.
981         
982 2007-09-23  Marek Safar  <marek.safar@gmail.com>
983         
984         * anonymous.cs, codegen.cs: Changed InferReturnType to be EmitContext
985         flag.
986         
987 2007-09-17  Marek Safar  <marek.safar@gmail.com>
988
989         * class.cs: Use partial container to record whether any partial part
990         contains static field initializer and therefore default contructor has
991         to be defined.
992         
993 2007-09-14  Marek Safar  <marek.safar@gmail.com>
994
995         * class.cs (TypeContainer.AddPartial): Fixed an issue reported on
996         mono-list when only one of two partial parts has defined accessibility
997         modifier.
998         
999 2007-09-14  Marek Safar  <marek.safar@gmail.com>
1000
1001         A fix for bug #82845
1002         
1003         * class.cs (TypeContainer): Set correct resolve context for all field
1004         initializers.
1005         
1006 2007-09-13  Marek Safar  <marek.safar@gmail.com>
1007
1008         * assign.cs: Fixed a crash when field is resolved twice with an error.
1009         
1010         * codegen.cs: Changed InFieldInitializer to be flag.
1011         
1012         * anonymous.cs, ecore.cs, expression.cs: Update after
1013         IsInFieldInitializer rename.
1014         
1015         * const.cs: Removed unused parameter.
1016         
1017         * class.cs: Changed the way how we resolve and emit field initializers.
1018         The field initilizers have to have access to contructor block to emit
1019         compiler generated code.
1020
1021 2007-09-13  Marek Safar  <marek.safar@gmail.com>
1022
1023         * expression.cs (MemberAccess.DoResolve): DeclSpace is broken by
1024         generics use TypeContainer instead.
1025         
1026 2007-09-12  Marek Safar  <marek.safar@gmail.com>
1027         
1028         * generic.cs (TypeInferenceContext.InflateGenericArgument): Stub.
1029
1030         * lambda.cs (ResolveParameters): Use more powerful
1031         InflateGenericArgument.
1032         
1033         * parameters.cs: Better exception message.
1034                 
1035 2007-09-10  Marek Safar  <marek.safar@gmail.com>
1036
1037         * anonymous.cs (AnonymousMethodExpression.CompatibleChecks): Report
1038         correct expression block type. 
1039         
1040         * ecore.cs (Expression.Error_MemberLookupFailed): Made virtual.
1041         
1042         * expression.cs (Invocation): Extracted method group resolve to
1043         DoResolveOverload.
1044         
1045 2007-09-07  Marek Safar  <marek.safar@gmail.com>
1046
1047         * ecore.cs (Expression.MemberLookupFinal): Removed unused loc parameter.
1048         (MethodGroupExpr.ResolveGeneric): Use existing method group instance.
1049         
1050         * expression.cs (MemberAccess.DoResolve): Uses generic resolver for
1051         generic extension methods.
1052
1053 2007-09-06  Marek Safar  <marek.safar@gmail.com>
1054
1055         A fix for bug #82676 (Do I get it right now?)
1056         * convert.cs (Binary.ResolveOperator): An interface is converted to the
1057         object before a standard conversion is applied.
1058         
1059 2007-09-06  Marek Safar  <marek.safar@gmail.com>
1060
1061         * convert.cs (ImplicitReferenceConversionCore): Reverted wrong fix of
1062         #82676.
1063         
1064 2007-09-05  Marek Safar  <marek.safar@gmail.com>
1065
1066         A fix for bug #82676
1067         * convert.cs (ImplicitReferenceConversionCore): Check both sides for
1068         non-generic interface types.
1069         
1070 2007-09-05  Marek Safar  <marek.safar@gmail.com>
1071
1072         A fix for bug #82690
1073         * ecore.cs (PropertyExpr.EmitAssign): Leave a copy does just that.
1074         
1075 2007-09-05  Marek Safar  <marek.safar@gmail.com>
1076
1077         A fix for bug #82571
1078         * anonymous.cs (AnonymousMethod.DoCreateMethodHost): Use internal 
1079         modifier for container based methods.
1080         
1081 2007-09-05  Marek Safar  <marek.safar@gmail.com>
1082
1083         A fix for bug #82676
1084         * convert.cs (ImplicitReferenceConversionCore): From any class-type S to
1085         any interface-type T means to any of interface type T.
1086
1087 2007-09-04  Marek Safar  <marek.safar@gmail.com>
1088
1089         * namespace.cs: We have 2 versions of System.Core assembly.
1090
1091 2007-09-04  Marek Safar  <marek.safar@gmail.com>
1092
1093         A fix for bug #82652
1094         * class.cs (Class.GetClassBases): Compare types and not expressions.
1095
1096 2007-09-04  Marek Safar  <marek.safar@gmail.com>
1097
1098         A fix for bug #82620
1099         * expression.cs (Invocation.EmitArguments): Duplicate params arguments
1100         actually never worked before.
1101         (IndexerAccess): Emit prepared arguments before they are modified.
1102         
1103 2007-09-04  Marek Safar  <marek.safar@gmail.com>
1104
1105         A fix for bug #82563
1106         * assign.cs: Revert wrong fix.
1107         
1108         * expression.cs (VariableReference.EmitAssign): Handle ref reference
1109         correctly.
1110         (ArrayAccess): Changed the way we emit compound (prepared) assignments.
1111         Instead of ldelema/stdind we have to use temporary variables to handle
1112         cases like String.Concat (params string[]).
1113         
1114 2007-08-31  Marek Safar  <marek.safar@gmail.com>
1115
1116         * class.cs: EmitAttributes to Emit rename.
1117         
1118         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Parent can be
1119         null.
1120         (MemberCore.HasClsCompliantAttribute): Don't depend on 
1121         GetClsCompliantAttributeValue execution.
1122         
1123 2007-08-31  Marek Safar  <marek.safar@gmail.com>
1124
1125         * anonymous.cs: Use shorter type prefix.
1126         
1127         * ecore.cs (SimpleName.DoSimpleNameResolve): Use transparent identifiers
1128         when exist.
1129         
1130         * expression.cs (LocalVariableReference.DoResolveBase): Don't capture
1131         variables when probing is on.
1132         
1133         * statement.cs (LocaLInfo.Clone): Clone correctly resolved and 
1134         unresolved variables.
1135         (TopLevelBlock.GetTransparentIdentifier): Default implementation doesn't
1136         handle transparent identifiers.
1137         
1138 2007-08-26  Marek Safar  <marek.safar@gmail.com>
1139
1140         * attribute.cs (IsClsCompliant): Add nullable types test.
1141         
1142 2007-08-24  Atsushi Enomoto  <atsushi@ximian.com>
1143
1144         * doc.cs : catch other types of exception than XmlException to
1145           report CS1570. Fixed bug #82565.
1146
1147 2007-08-23  Marek Safar  <marek.safar@gmail.com>
1148
1149         * anonymous.cs (AnonymousMethodExpressin.ExplicitTypeInference): 
1150         The number of delegate parameters has to match.
1151         (AnonymousMethodExpressin.VerifyParameterCompatibility): Handles generic
1152         arrays.
1153
1154 2007-08-21  Marek Safar  <marek.safar@gmail.com>
1155
1156         * anonymous.cs (AnonymousMethod): Generate private anonymous method
1157         to fix problem with private arguments.
1158
1159 2007-08-20  Marek Safar  <marek.safar@gmail.com>
1160
1161         * anonymous.cs (AnonymousTypeClass): An anonymous type can be empty.
1162         
1163         * decl.cs (MemberName): Ignore generic type with no generic arguments. 
1164         
1165         * expression.cs (AnonymousTypeDeclaration): An anonymous type can be
1166         empty. Add cloning suport.
1167         
1168         * roottypes.cs (GetAnonymousType): Fixed argument comparison logic.
1169
1170 2007-08-20  Marek Safar  <marek.safar@gmail.com>
1171
1172         * convert.cs, ecore.cs, expression.cs, literal.cs: Use factory method 
1173         to create EmptyCast. It handles EmptyConstantCast specialization for
1174         constants.
1175         
1176 2007-08-18  Marek Safar  <marek.safar@gmail.com>
1177
1178         * expression.cs (Binary.is_unsigned): Handle unsafe types too.
1179         (EmitArrayArgument): One routine for array arguments.
1180         (ArrayCreation.MakeByteBlob): Fixed an array alignment. 
1181         
1182 2007-08-17  Marek Safar  <marek.safar@gmail.com>
1183
1184         * cs-tokenizer.cs (GetKeyword): Handle from keyword in a different way.
1185
1186 2007-08-17  Marek Safar  <marek.safar@gmail.com>
1187
1188         * anonymous.cs: MemberLookupFinal update.
1189
1190         * class.cs (ConstructorInitializer): Is expression based.
1191         
1192         * delegate.cs: MethodGroupExpr update.
1193         
1194         * ecore.cs  (Error_MemberLookupFailed): Improved to report better error
1195         messages.
1196         (Error_MemberLookupFailed): Customizable error override.
1197         (MethodGroupExpr): Keep queried type for later usage.
1198         (MethodGroupExpr.OverloadResolve): Catch errors related to overload
1199         resolve.
1200         
1201         * expression.cs: Error_MemberLookupFailed refactoring.
1202         (New.DoResolve): Resolve as much as possible.
1203         (ElementInitializer.Error_MemberLookupFailed): Object initializer
1204         customization for invalid member types.
1205
1206         * statement.cs: MethodGroupExpr update.
1207         
1208 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1209
1210         * modifier.cs (Check): Check all modifiers and not only accessibility
1211         ones.
1212
1213 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1214
1215         * ecore.cs (Expression.Error_ValueCannotBeConverted): Report always a
1216         type and not an expression.
1217
1218 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1219
1220         * statement.cs (Catch.Clone): Type and variable can be null.
1221
1222 2007-08-16  Marek Safar  <marek.safar@gmail.com>
1223
1224         A fix for bug #81979
1225         * assign.cs (Assign.Emit): Prepare arguments for string concatenation.
1226         I am really not sure whether this is the best fix.
1227         
1228         * expression.cs (VariableReference.EmitAssign): Do prepare_load test
1229         only once.
1230         
1231 2007-08-14  Marek Safar  <marek.safar@gmail.com>
1232
1233         ** C# 3.0 Object and collection initializers (major re-write)
1234         
1235         * assign.cs (DoResolve): Initializers are not assign related.
1236         
1237         * codegen.cs (EmitContext.CurrentInitializerVariable): Holds a varible
1238         used during collection or object initialization.
1239         
1240         * expression.cs (Error_InvalidArguments): Add initializers specific
1241         messages. More will come later because it requires some general
1242         refactoring.
1243         (New.DoResolve): Better error handling for unsafe types.
1244         (EmptyExpressionStatement): New class.
1245         (ElementInitializer): An object initializer expression.
1246         (CollectionElementInitializer): A collection initializer expression.
1247         (CollectionOrObjectInitializers): A block of object or collection
1248         initializers.
1249         (NewInitialize): New expression with element/object initializers.
1250         
1251         * statement.cs: Reverted object/collection initializer hacks.
1252         
1253         * typemanager.cs (CSharpName): Filter __arglist type.
1254         
1255 2007-08-09  Marek Safar  <marek.safar@gmail.com>
1256
1257         ** C# 3.0 Anonymous Types (update to the latest standard)
1258         
1259         * expression.cs (Binary.ResolveOperator): Threat all null based types
1260         same.
1261         (AnonymousTypeDeclaration): Renamed from AnonymousType and simplified.
1262         (AnonymousTypeParameter): Updated.
1263         
1264         * anonymous.cs (CompilerGeneratedClass): Add custom name overload.
1265         (AnonymousTypeClass): New anonymous type container.
1266         
1267         * class.cs (AddField): Return operation result.
1268         
1269         * generic.cs: Another empty TypeArguments overload.
1270         
1271         * roottypes.cs (AddAnonymousType, GetAnonymousType): Anonymous types
1272         are stored at top of normal hierarchy.
1273         
1274         * typemanager.cs (CSharpName): Filter anonymous types.
1275         
1276 2007-08-09  Marek Safar  <marek.safar@gmail.com>
1277
1278         * expression.cs (StringConcat.Append): Handle 3 and more concatenation
1279         as single Concat call. How could we miss that :-(
1280         
1281 2007-08-08  Marek Safar  <marek.safar@gmail.com>
1282
1283         * expression.cs (ArrayCreation.CloneTo): Allocate exact size.
1284         
1285 2007-08-07  Miguel de Icaza  <miguel@novell.com>
1286
1287         * expression.cs: Fix the previous commit, the creation of the
1288         arguments array list needs also to be conditional on the arguments
1289         not being null.
1290
1291         * class.cs: Add a little bit of help to help narrow down problems.
1292
1293         * expression.cs (ArrayCreation.CloneTo): Argument can be null, do
1294         not try to copy in that case. 
1295
1296         * driver.cs: When building SMCS, include a new different set of
1297         default assemblies here.   Do this here so we can control whether
1298         to include the default assemblies with /noconfig.
1299
1300 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1301
1302         A fix for bug #81979
1303         * expression.cs (TypeOf.GetAttributableValue): Check for type arguments
1304         only.
1305
1306 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1307
1308         A fix for bug #82300
1309
1310         * anonymous.cs (AnonymousContainer.Define): Don't define anything when
1311         we are in probing scope.
1312
1313 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1314
1315         A fix for bug #82301
1316
1317         * statement.cs (Catch.CloneTo): Clone blocks in the right order.
1318         (Statement.CloneTo): Clone and not map children blocks.
1319
1320 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1321
1322         A fix for bug #82299
1323
1324         * expression.cs (LocalVariableReference.CloneTo): Remap local info
1325         variable too.
1326         
1327         * statement.cs (Statement.CloneTo): Clone variables before statements
1328         to allow remaping of local variables.
1329
1330 2007-08-03  Marek Safar  <marek.safar@gmail.com>
1331
1332         A fix for bug #82296
1333
1334         * anonymous.cs,
1335         * report.cs: Log crash details for future clone problems.
1336         
1337         * statement.cs (Return.Clone): Don't clone non-existent expression.
1338
1339 2007-08-03  Raja R Harinath  <harinath@gmail.com>
1340
1341         * class.cs (TypeContainer.AddBasesForPart): Make virtual.
1342         (Class.AddBasesForPart): Move CS0537 check here from ...
1343         * cs-parser.jay (class_declaration): ... here.  Move calling of
1344         'AddBasesForPart' to ...
1345         (class_bases): ... here.
1346         (struct_declaration, interface_declaration): Update to changes.
1347
1348 2007-08-02  Marek Safar  <marek.safar@gmail.com>
1349
1350         A fix for bug #81923
1351
1352         * statement.cs (Using.ResolveLocalVariableDecls): Only non-user implicit
1353         conversion is allowed.
1354
1355 2007-08-02  Marek Safar  <marek.safar@gmail.com>
1356
1357         A fix for bug #81564
1358
1359         * ecore.cs (EventExpr): Add IsBase handling.
1360
1361         * expression.cs (BaseAccess.CommonResolve): Events can use base accessor
1362         too.    
1363         
1364 2007-08-02  Raja R Harinath  <harinath@gmail.com>
1365
1366         Reduce some differences between cs-parser.jay in mcs/ and gmcs/.
1367         * cs-parser.jay: Some whitespace cleanups.
1368         (current_delegate): New.
1369         (type_name): New.
1370         (struct_declaration): Make similar to gmcs/cs-parser.jay -- add
1371         a dummy code block, and use 'type_name' instead of 'member_name'.
1372         (interface_declaration, class_declaration): Likewise.
1373         (delegate_declaration): Likewise.  Rearrange slightly and use
1374         'current_delegate'.
1375         * cs-tokenizer.cs (handle_where): Rename from handle_constraints.
1376         (GetKeyword): Update to change.  Use '!foo' instead of 'foo == false'.
1377
1378 2007-08-02  Marek Safar  <marek.safar@gmail.com>
1379
1380         A fix for bug #82039
1381
1382         * ecore.cs (TypeLookup.GetSignatureForError): Use name when type is not
1383         available.
1384
1385         * typemanager.cs (CSharpName): Split to string overload.
1386
1387 2007-08-02  Marek Safar  <marek.safar@gmail.com>
1388
1389         * expression.cs,
1390         * report.cs: Updated warning CS0472.
1391
1392 2007-08-01  Marek Safar  <marek.safar@gmail.com>
1393
1394         A fix for bug #82181
1395         * cs-parser.jay,
1396         * cs-tokenizer.cs: Ignore partial keyword inside block expression.
1397
1398 2007-08-01  Marek Safar  <marek.safar@gmail.com>
1399
1400         A fix for bug #82277
1401         * statememnt.cs (Block.Clone): Don't clone explicit blocks twice.
1402
1403 2007-08-01  Marek Safar  <marek.safar@gmail.com>
1404
1405         ** C# 3.0 Type Inference (major bits are working)
1406         
1407         * anonymous.cs (AnonymousMethodExpression): Removed refactored fields.
1408         (.ImplicitStandardConversionExists): Uses compatible.
1409         (.ExplicitTypeInference): Infers type arguments based on explicit arguments
1410         (.InferReturnType): New method.
1411         (.Compatible): Refactored.
1412         (.ResolveParameters): Uses factory to create resolved parameters.
1413         (.CompatibleMethod): Add probing mode support.
1414         (AnonymousContainer): Removed unused fields. Split Define and Resolve to
1415         clearly distinguish between 2 different operations.
1416         (LambdaMethod): Moved to lambda.cs.
1417         (AnonymousMethod): Removed unused fields and methods.
1418         (AnonymousDelegate): Simplified.
1419         
1420         * codegen.cs (ResolveTopBlock): Updated renamed Resolve to Define.
1421         
1422         * convert. cs (ImplicitConversionStandard): Compatible works differently.
1423         
1424         * delegate.cs (Delegate): New mehods to reduce code duplication.
1425         (.GetConstructor): New method.
1426         (.GetInvokeMethod): New method.
1427         (DelegateCreation): Updated.
1428         
1429         * ecore.cs (ResolveOverloadExtensions): Don't crash when extension method
1430         does not exist.
1431         (OverloadResolve): Made probing little bit faster.
1432         
1433         * expression.cs (ParameterReference.DoResolveLValue): Reference can be null
1434         when probing is on.
1435         
1436         * generic.cs (TypeInferenceContext): Dummy implementation.
1437         
1438         * iterators.cs: Updated after Resolve/Define rename.
1439         
1440         * lambda.cs (LambdaExpression)
1441         (.ResolveParameters): Handles both type of arguments and type inference too.
1442         
1443         * parameter.cs (ImplicitLambdaParameter.Resolve): Sanity check.
1444         (InflateTypes): Updated.
1445         
1446         * support.cs (InflateTypes): Changed signature and updated.
1447         
1448         * typemanager.cs (LookupMemberCache): Better dynamic type check.
1449         (MemberLookup_FindMembers): More MS tricks.
1450         (GetParameterData): Ditto.
1451         (GetDelegateParameters): Uses quick path for dynamic types.
1452         
1453 2007-08-01  Marek Safar  <marek.safar@gmail.com>
1454
1455         * class.cs (MethodData.Define): EmitContext is required for generic stuff
1456         only.
1457
1458 2007-07-31  Marek Safar  <marek.safar@gmail.com>
1459
1460         * statement.cs (ProcessParameters): Don't crash when parameters have wrong
1461         syntax.
1462         
1463 2007-07-26  Jb Evain  <jbevain@novell.com>
1464
1465         * typemanager.cs (TypeManager.GetConstructor): Add a method overload
1466         which takes a boolean 'report_errors', similar to the GetMethod.
1467         (InitCodeHelpers): StructLayoutAttribute.ctor(int16) is not visible
1468         in .net 2.1, do not report errors here.
1469
1470         * typemanager.cs (TypeManager.InitCoreTypes): System.ArgIterator,
1471         System.Runtime.CompilerServices.RequiredAttributeAttribute and
1472         System.Runtime.CompilerServices.TypeForwardedToAttribute are internal
1473         in .net 2.1.
1474
1475         * typemanager.cs (TypeManager.InitCoreTypes): Move the resolution
1476         of the type InternalsVisibleToAttribute before the first call
1477         to CoreLookupType which is allowed to fail (third boolean parameter
1478         to true). Because, during the resolution for a type that is not
1479         immediately found, we try to check if the type is not defined in
1480         a friend assembly, and to do so, we need the
1481         InternalVisibleToAttribute.
1482
1483 2007-07-23  Miguel de Icaza  <miguel@novell.com>
1484
1485         * expression.cs (Binary): Add support for the brain-dead CSC 2.x
1486         feature that allows structs to be compared against null and inline
1487         the result as true or false.
1488
1489         Notice that the same code is not permitted inside a generic block
1490         of code that would do:
1491
1492         class Foo<T> where T : struct {
1493             bool Eval (T x)
1494             {
1495                  return x == null;
1496             }
1497         }
1498
1499         It is only allowed if the type of T is not bound (no where
1500         clause).   In my opinion, this CSC 2 behavior is broken but people
1501         seem to be using it (IronRuby does, a few bug reports on bugzilla
1502         have it and some people have complained about it).
1503
1504         All of the users that depend on this behavior have code that is
1505         very likely broken. 
1506         
1507         * report.cs (Warning, Error): make these take object arguments,
1508         not strings, as that allows us to take advantage of Format.
1509
1510 2007-07-20  William Holmes  <billholmes54@gmail.com>
1511
1512         * decl.cs: Changed MemberName.CountTypeArguments to also check the 
1513           Left member variable for the Count.
1514         * doc.cs: Changed DocUtil.GetMethodDocCommentName to call 
1515           MemberName.CountTypeArguments to avoid a NRE. 
1516
1517         This code is contributed under the MIT X11 license
1518
1519 2007-07-18  Marek Safar  <marek.safar@gmail.com>
1520
1521         * cs-tokenizer.cs: Improved lambda parsing and removed old code.
1522
1523 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
1524
1525         * doc.cs : generic method arguments are written as ``x while generic
1526           type arguments are `x. Combined with the previous change, fixed bug
1527           #79706.
1528
1529 2007-07-18  Raja R Harinath  <rharinath@novell.com>
1530
1531         Fix #82120
1532         * expression.cs (Binary.ResolveOperator): When converting
1533         'a + (- b)' to 'a - b', ensure that the unary '-' is discarded.
1534
1535 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
1536
1537         * doc.cs : when T: or whatever x: is specified, it does not really
1538           check the doc comment's syntax correctness. Fixed bug #82006.
1539
1540 2007-07-18  Marek Safar  <marek.safar@gmail.com>
1541
1542         * anonymous.cs (AnonymouseMethodExpression): Refactored to work with
1543         LambdaExpression better.
1544         
1545         * cs-tokenizer.cs: Changed a way how we detect lambda parameters.
1546         
1547         * driver.cs (LambdaTypeParseTest): Removed, tested method is gone.
1548         
1549         * ecore.cs (Expression.MemberLookupFailed): Don't show currect context
1550         as it can be generated.
1551         
1552         * expression.cs (Invocation.Error_InvalidArguments): Show correct
1553         modifiers.
1554         
1555         * lambda.cs (LambdaExpression): Refactored to share same code with
1556         AnonymousMethodExpression.
1557         
1558 2007-07-17  Marek Safar  <marek.safar@gmail.com>
1559
1560         * anonymous.cs (MakeName): Include host name for easier debugging.
1561         (LambdaMethod): New class for lambda spcecific stuff.
1562         
1563         * attribute.cs: Set EmitContext return type.
1564
1565         * class.cs: Set EmitContext return type.
1566         
1567         * codegen.cs (EmitContext): Return type cannot be null to stop messing
1568         with null/void meaning.
1569         
1570         * iterators.cs (ContainerType): Implemented.
1571         
1572         * rootcontext.cs: Set value of TypeManager.bool_type at early stage.
1573         
1574         * statement.cs (Return): Updated to lambda expressions.
1575         (Block.CloneTo): Parent can be null.
1576                 
1577 2007-07-13  Marek Safar  <marek.safar@gmail.com>
1578
1579         A fix for bug #81917
1580         * attribute.cs (AttributeTester.GetFixedBuffer): More robust testing.
1581         
1582         * class.cs (FixedField): Check whether field is in unsafe scope.
1583
1584         * ecore.cs (FieldExpr.DoResolve): Create fixed buffer expression here.
1585         (FieldExpr.Emit): Fixed buffers cannot be volatile.
1586
1587         * expression.cs (ElementAccess.Resolve): Move fixed buffers resolve to
1588         FieldExpr.
1589         
1590         * statement.cs (Fixed.Resolve): Simplified fixed buffers.
1591                 
1592 2007-07-13  Marek Safar  <marek.safar@gmail.com>
1593
1594         * cs-tokenizer.cs, class.cs, decl.cs, driver.cs, namespace.cs,
1595         rootcontext.cs, expression.cs, statement.cs: Updated to use WarningLevel
1596         from Report class.
1597
1598 2007-07-13  Marek Safar  <marek.safar@gmail.com>
1599
1600         * ecore.cs (FieldExpr.AddressOf): Less confusing warning message.
1601         
1602 2007-07-13  Marek Safar  <marek.safar@gmail.com>
1603
1604         * anonymous.cs (AnonymousMethodExpression): Parameters are r/o.
1605         (AnonymousContainer.ResolveNoDefine): Another ec to aec flag conversion.
1606         
1607         * codegen.cs(EmitContext): Add ProbingMode flag.
1608         
1609         * delegate.cs (DelegateInvocation): Set few instance variables as r/o.
1610         
1611         * driver.cs: For now set both warning values.
1612         
1613         * ecore.cs (SimpleName): Name is readonly.
1614         (MethodGroup.OverloadResolve): One quick path for probing.
1615         
1616         * expression.cs (Unary): Set Oper r/o.
1617         (Binary): Set Oper r/o.
1618         (ParameterReference): Set few instance variables as r/o.
1619         (ParameterReference.DoResolveBase): Don't capture aruments when 
1620         the probing is on.
1621         (Invocation.CloneTo): Fixed typo, looks easy, yeah.
1622         (Arglist): arguments are private.
1623         (SizeOf): type is private and r/o.
1624         (MemberAccess): arguments are private.
1625
1626         * report.cs: Enhanced reporting on/off capabilities.
1627         
1628         * lambda.cs: Uses ec.IsInProbingMode.
1629         (ContextualReturn): Derives from return.
1630         
1631         * rootcontext.cs: For now set both warning values.
1632         
1633         * statement.cs (CloneContext.RemapBlockCopy): Remaps block to cloned
1634         copy if one exists.
1635         (Return.Resolve): Don't die immediately.
1636         (Block.Resolve): Speed-up probing.
1637         (Block.CloneTo): Clone only child blocks.
1638
1639 Fri Jul 13 11:19:28 CEST 2007 Paolo Molaro <lupus@ximian.com>
1640
1641         * iterators.cs: reverted Miguel's latest change (r81925) as it
1642         breaks the build in System.
1643
1644 2007-07-13  Miguel de Icaza  <miguel@novell.com>
1645
1646         * iterators.cs (Yield.CheckContext): Check for the iterator type
1647         also here as we can call into Yield even in codepaths that are not
1648         directly checked by
1649         (MethodOrOperator is the only path that was checked).
1650
1651         In addition to the standard check, use a more specific check for
1652         constructors to report a more verbose error. 
1653
1654 2007-07-12  Miguel de Icaza  <miguel@novell.com>
1655
1656         * ecore.cs (FieldExpr.AddressOf): Do not stop processing here,
1657         report the warning and continue 
1658
1659         * statement.cs (Using.EmitLocalVariableDecls): We were leaving
1660         values on the stack on the call to Emit.   Use EmitStatement if
1661         possible, or using Emit + Pop if not possible.   Fixes #82064
1662
1663 2007-07-12  Raja R Harinath  <rharinath@novell.com>
1664
1665         * expression.cs (Invocation.IsApplicable): Reorganize slightly to
1666         avoid try...finally in some cases.
1667
1668 2007-07-10  Marek Safar  <marek.safar@gmail.com>
1669
1670         * attribute.cs (Attribute.ResolveConstructor): Uses method group.
1671         
1672         * class.cs (ConstructorInitializer.Resolve): Use and keep method group
1673         instead of method. Re-use standard error handling.
1674         (ConstructorInitializer.Emit): Simplified.
1675         
1676         * delegate.cs: Updated after Invocation.EmitCall change.
1677         
1678         * ecore.cs (GetOperatorTrueOrFalse): Uses MethodGroupExpr only.
1679         (SimpleName.SimpleNameResolve): Set and reset in_transit flag correctly.
1680         (ExtensionMethodGroupExpr): Refactored to use same OverloadResolve
1681         method and don't permanently changing input arguments.
1682         (MethodGroupExpr): Introduced resolved best_candidate, when method group
1683         is resolved it has one of the candidates is the best one which is later
1684         used to emit. Removed a few unused method.
1685         (MethodGroupExpr.MakeUnionSet): Moved from Invocation, it belongs here.
1686
1687         * expression.cs (StaticCallExpr.MakeSimpleCall): Uses method group.
1688         (Binary.ResolveOperator): Ditto.
1689         (ConditionalLogicalOperator.DoResolve): Ditto.
1690         (Invocation): Uses method group.
1691         (Invocation.DoResolve): Simplified.
1692         (Invocation.EmitCall): Removed useless is_static.
1693         (Invocation.Emit): Delegate to method group.
1694         (Invocation.EmitStatement): Simplified.
1695         (New): Uses method group.
1696         (MemberAccess.DoResolve): Don't destroy original expression.
1697         
1698         * statement.cs (ForEach.Resolve): Use null for no method arguments.
1699         
1700 2007-07-04  Marek Safar  <marek.safar@gmail.com>
1701
1702         * ecore.cs (VarExpr.DoResolveLValue): More restriction checks.
1703         
1704         * anonymous.cs,
1705         * lambda.cs: Add custom error message type.
1706
1707 2007-07-03  Marek Safar  <marek.safar@gmail.com>
1708
1709         * lambda.cs: Simplified little bit.
1710         
1711         * parameter.cs: Introduced ImplicitLambdaParameter.
1712         (Parameters.CreateFullyResolved): New factory instead of ctor.
1713         
1714         * anonymous.cs,
1715         * class.cs,
1716         * delegate.cs: Updated parameter creation.
1717         
1718 2007-07-03  Marek Safar  <marek.safar@gmail.com>
1719
1720         *  ecore.cs (SimpleName.GetSignatureForError): Display correctly generic
1721         arguments.
1722         
1723         * generic.cs: Synchronized with gmcs.
1724         
1725 2007-07-03  Marek Safar  <marek.safar@gmail.com>
1726
1727         * class.cs (Indexer): Check return type as soon as possible.
1728         
1729         * cs-parser.jay: Initialize implicit_value_parameter_type for interface
1730         members too.
1731         
1732         * ecore.cs (VarExpr.DoResolveLValue): Set eclass value.
1733         
1734         * expression.cs (Invocation.Error_InvalidArguments): Show type only.
1735         
1736         * parameter.cs (Parameter): Use expression type when it is available.
1737         
1738         * support.cs (ReflectionParameters.ParameterDesc): Show an extension
1739         method modifier for the first parameter only.
1740
1741 2007-06-24  Marek Safar  <marek.safar@gmail.com>
1742
1743         A fix for bug #81938
1744         * typemanager.cs (ChangeType): Fixed couple of char conversions.
1745         
1746         * constant.cs: Tide up an exception message.
1747
1748 2007-06-22  Marek Safar  <marek.safar@gmail.com>
1749
1750         * ecore.cs (SimpleName.DoSimpleNameResolve): Better error reporting when
1751         an uninitialized variable is used.
1752         
1753         * expression.cs (LocalVariableReference.DoResolve): Ditto.
1754
1755 2007-06-22  Marek Safar  <marek.safar@gmail.com>
1756
1757         * ecore.cs (SimpleName.TypeOrNamespaceNotFound): Allow to override type
1758         not found error handling.
1759
1760         * expression.cs (ArrayCreation): Removed redundant fields and little bit
1761         simplified.
1762         (ArrayCreation.ResolveArrayElement): To be ready to customization.
1763         (ArrayCreation.DoResolve): Simplified.
1764         (ImplicitlyTypedArrayCreation.DoResolve): Implicitly typed arrays have
1765         its own resolve process.
1766         (ImplicitlyTypedArrayCreation.ResolveArrayElement): Conversion magic.
1767
1768 2007-06-20  Marek Safar  <marek.safar@gmail.com>
1769
1770         * namespace.cs (NamespaceEntry.Error_AmbiguousTypeReference): Print
1771         more error details.
1772         
1773 2007-06-20  Marek Safar  <marek.safar@gmail.com>
1774
1775         * cs-tokenizer.cs: Removed var related stuff.
1776         
1777         * ecore.cs (Expression.ResolveAsContextualType): Introduced new method.
1778         (VarExpr): Changed to derive from SimpleName. VarExpr now behaves as
1779         a type and a keyword at same time.
1780         
1781         * decl.cs (MembeName.GetTypeExpression): Create VarExpr when type name
1782         matches to "var".
1783         
1784         * expression.cs (ImplicitlyTypedArrayCreation): New empty class for
1785         implicitly typed arrays, more changes will follow.
1786         
1787         * statement.cs (LocalInfo.Resolve): Resolve type as contextual type.
1788         
1789 2007-06-19  Marek Safar  <marek.safar@gmail.com>
1790
1791         * ecore.cs (VarExpr): Removed Handled field.
1792         
1793         * statement.cs (Using.ResolveLocalVariableDecls): Refactored to use
1794         build-in assign functionality.
1795         (ForEach.Resolve): Removed all implicitly typed local variable code and
1796         simplified.
1797         (ArrayForeach.Resolve): Infer implicitly typed local variable here.
1798         (CollectionForeach.Resolve): Infer implicitly typed local variable here.
1799
1800 2007-06-18  Marek Safar  <marek.safar@gmail.com>
1801
1802         * assign.cs: Removed implicitly typed local variable check.
1803         
1804         * expression.cs (LocalVariableReference.DoResolve): Add check for self
1805         referencing implicitly typed local variable.
1806         (LocalVariableReference.DoResolveLValue): Infer implicitly typed local
1807         variable here.
1808         
1809         * statement.cs (Fixed): Removed unsupported implicitly typed local
1810         variable code.
1811
1812 2007-06-15  Marek Safar  <marek.safar@gmail.com>
1813
1814         * decl.cs (MemberName): Moved all Unbound stuff to parser.
1815
1816 2007-06-14  Marek Safar  <marek.safar@gmail.com>
1817
1818         A fix for bugs #81855 and #76274
1819         * attribute.cs (AttachTo): Always set owner for global attributes to
1820         prefined owner.
1821         
1822         * ecore.cs (Error_TypeDoesNotContainDefinition): A type location can be
1823         usefull too.
1824         
1825         * cs-parser.jay: Assembly and module attributes must precede all other
1826         elements except using clauses and extern alias declarations.
1827
1828 2007-06-13  Marek Safar  <marek.safar@gmail.com>
1829
1830         A fix for bug #81748
1831         * cs-tokenizer.cs,
1832         * expression.cs: More checks for non ISO-1 features.
1833
1834 2007-06-12  Marek Safar  <marek.safar@gmail.com>
1835
1836         A fix for bug #81807
1837         * statement.cs(Switch.TableSwitchEmit): Define null label when it's not
1838         present inside switch statement and it is required by nullable check.
1839
1840 2007-06-12  Marek Safar  <marek.safar@gmail.com>
1841
1842         A fix for bug #81840
1843         * ecore.cs (SimpleName.ResolveAsTypeStep): Look for non-generic type
1844         when type matching fails.
1845         
1846         * namespace.cs: Tiny error message change.
1847
1848 2007-06-12  Marek Safar  <marek.safar@gmail.com>
1849
1850         * decl.cs (CheckAbstractAndExtern): Moved to MemberCore for easier error
1851         reporting. Added automatic property check.
1852         
1853         * class.cs: Updated after CheckAbstractAndExtern relocation.
1854         (AEventPropertyAccessor.GetSignatureForError): Customized.
1855         
1856 2007-06-11  Marek Safar  <marek.safar@gmail.com>
1857
1858         * class.cs (DefineBaseTypes): Base type can be undefined.
1859         
1860         * ecore.cs (TypeLookup): Minor refactoring.
1861         (DoResolveAsTypeStep): Removed redundant check.
1862
1863         * namespace.cs (Lookup): Removed redundant check.
1864                 
1865         * rootcontext.cs (BootstrapCorlib_ResolveType): Uses normal 
1866         ResolveAsTypeTerminal step.
1867         (BootstrapCorlib_*): Simplified.
1868         (PopulateCoreType): Core types can be now external.
1869
1870 2007-06-07  Marek Safar  <marek.safar@gmail.com>
1871
1872         * anonymous.cs (VerifyExplicitParameterCompatibility): Add flag to do
1873          verification only.
1874          (InferTypeArguments): Infers anonymous expression type arguments.
1875          (Compatible): Split to Compatible and InferTypeArguments. 
1876         
1877         * lambda.cs: Updated.
1878
1879 2007-06-08  Marek Safar  <marek.safar@gmail.com>
1880
1881         * anonymous.cs (AnonymousContainer): Marked as compiler generated.
1882
1883 2007-06-07  Raja R Harinath  <harinath@gmail.com>
1884
1885         Fix #80477, cs0135-2.cs, cs0135-3.cs
1886         * statement.cs (ToplevelBlock.ProcessParameters): Add parameter
1887         names to the "known" variables list.
1888         (Block.CheckInvariantMeaningInBlock): Handle the fact the
1889         parameter names are also "known".
1890         (Block.CheckError136): Remove.
1891         (ExplicitBlock.CloneTo): New.  Set 'known_variables' in target to
1892         null.
1893
1894 2007-06-07  Marek Safar  <marek.safar@gmail.com>
1895
1896         * ecore.cs (MethodGroupExpr.OverloadResolve): Print full method definition.
1897
1898 2007-06-06  Marek Safar  <marek.safar@gmail.com>
1899
1900         * ecore.cs (SimpleName.Emit): Emitting unresolved simple name is
1901         internal error not an user error.
1902          
1903         * expression.cs (IsApplicable): Refactored to make debugging easier.
1904
1905         * support.cs: More tricks for non-mono runtimes.
1906         
1907         * typemanager.cs (CoreLookupType): Made public.
1908         (InitSystemCore): All linq specific stuff moved to linq.cs
1909
1910 2007-06-05  Marek Safar  <marek.safar@gmail.com>
1911
1912         * typemanager.cs (CSharpSignature): One more missing build-in types
1913         replacement.
1914         More tricks for non-mono runtime.
1915
1916 2007-06-05  Raja R Harinath  <harinath@gmail.com>
1917
1918         * statement.cs (Block.CheckError136_InParents): Remove.
1919         (Block.AddVariable): Use GetParameterInfo instead.
1920         (ToplevelBlock.ProcessArguments): Likewise.
1921
1922 2007-06-04  Raja R Harinath  <rharinath@novell.com>
1923
1924         * statement.cs (ToplevelBlock.CloneTo): New.  Copy over parameter
1925         information too.
1926         (ToplevelBlock.GetParameterInfo): Split out of ...
1927         (ToplevelBlock.GetParameterRefernce): ... this.
1928         (ToplevelBlock.ParameterMap): Remove.
1929         * expression.cs (ParameterReference): Update to use
1930         ToplevelParameterInfo.
1931
1932         * statement.cs (ToplevelBlock.ProcessParameters): Workaround some
1933         regression.
1934
1935         * flowanalysis.cs (FlowBranching.CheckOutParameters): Move ...
1936         * statement.cs (ToplevelBlock.CheckOutParameters): ... here.
1937
1938         * statement.cs (ToplevelBlock.ResolveMeta): Move CS0136 checks ...
1939         (ToplevelBlock.ProcessParameters) ... here.
1940         (ToplevelBlock..ctor): Invoke it.
1941
1942         * statement.cs (ToplevelBlock.ResolveMeta): Add sanity checks for
1943         new parameters.
1944
1945         * statement.cs (IKnownVariable): New interface.
1946         (LocalInfo): Implement it.
1947         (ToplevelParameterInfo): New class.
1948         (ExplicitBlock.AddKnownVariable): Use IKnownVariable.
1949         (ExplicitBlock.GetKnownVariable): Likewise.  Rename from
1950         GetKnownVariableInfo.
1951
1952 2007-06-03  Raja R Harinath  <harinath@gmail.com>
1953
1954         Partly speed up CS0136 error checks.
1955         * statement.cs (ExplicitBlock.GetKnownVariableInfo): Remove
1956         'recurse' parameter.
1957         (Block.DoCheckError136): Only check errors in parameters.  Move
1958         local variable checks ...
1959         (Block.AddVariable): ... here, and ...
1960         (ToplevelBlock.ResolveMeta): ... here.
1961
1962 2007-06-02  Raja R Harinath  <harinath@gmail.com>
1963
1964         * statement.cs (Block.IsChildOf): Remove.
1965
1966         * statement.cs (Statement.Clone): Move special case code ...
1967         (Block.CloneTo): ... here.
1968
1969 2007-05-29  Raja R Harinath  <rharinath@novell.com>
1970
1971         * statement.cs (ToplevelBlock.container): Remove field.  It's
1972         redundant with 'Parent'.
1973         (ToplevelBlock.ContainerBlock): Remove accessor.
1974         (ToplevelBlock..ctor): Update to changes.  Register anonymous
1975         child with parent here, ...
1976         * cs-parser.jay (end_anonymous): ... not here.  Don't modify
1977         current_block.
1978         (start_anonymous): Don't save current_block.
1979         (top_current_block): Remove.
1980
1981         * statement.cs (Block.Flags): Remove IsExplicit and IsToplevel flags.
1982         (Block.Resolve): Update to changes.
1983         (Block..ctor): Move setting of "correct" 'Toplevel'
1984         and 'Explicit' fields to ...
1985         (ExplicitBlock..ctor, ToplevelBlock..ctor): ... here.
1986
1987 2007-05-27  Raja R Harinath  <harinath@gmail.com>
1988
1989         Kill Block.Implicit
1990         * statement.cs (Block.Implicit): Remove.
1991         (Block): Update to changes.
1992         * flowanalysis.cs: Likewise.
1993
1994         Mildly speed up CheckInvariantMeaningInBlock
1995         * statement.cs (ExplicitBlock.AddKnownVariable): Move here from Block.
1996         Recursively call AddKnownVariable to all enclosing blocks.
1997         (ExplicitBlock.GetKnownVariableInfo): Move here from Block.
1998         Remove recursive calls.
1999         (Block): Update to changes.
2000
2001         New ExplicitBlock invariants
2002         * statement.cs (Block.Explicit): New field.  It points to the
2003         immediately enclosing non-implicit block.
2004         (Block..ctor): Maintain the invariant.
2005         * cs-parser.jay: Take advantage of invariant.
2006
2007         Introduce ExplicitBlock
2008         * statement.cs (ExplicitBlock): New.
2009         (ToplevelBlock): Derive from it.
2010         (Block.Flags.IsExplicit): Rename from '...Implicit' and invert
2011         sense of flag.
2012         (Block.Implicit): Update to changes.
2013         * cs-parser.jay: Update to changes.
2014
2015         Remove unused field
2016         * codegen.cs (EmitContext.IsLastStatement): Remove.
2017         * statement.cs (Block.DoEmit): Update to changes.
2018
2019 2007-05-25  Raja R Harinath  <rharinath@novell.com>
2020
2021         * cs-parser.jay: Use 'start_block' and 'end_block' rather than
2022         modifying current_block directly.
2023
2024 2007-05-23  Scott Peterson  <lunchtimemama@gmail.com>
2025         
2026         * class.cs: Implemented automatic properties (C# 3.0)
2027           Thanks to Marek for the help.
2028
2029 2007-05-23  Raja R Harinath  <rharinath@novell.com>
2030
2031         * flowanalysis.cs (VariableInfo.SetAssigned): When noting a
2032         variable as assigned, note also that all its components are
2033         assigned too.
2034         (MyBitVector.SetRange): New.  Function to set multiple bits to true.
2035
2036 2007-05-19  Marek Safar  <marek.safar@gmail.com>
2037
2038         * anonymous.cs, class.cs: Emit Compiler generated attribute when
2039         member is marked as compiler generated.
2040         
2041         * decl.cs (MemberCore): Refactored ModFlags into property.
2042
2043         * modifiers.cs: Add new modifier (COMPILER_GENERATED).
2044         (Check): Check only accessibility modifiers.
2045
2046 2007-05-18  Raja R Harinath  <rharinath@novell.com>
2047
2048         Track all assignable slots in one bit array
2049         * statement.cs (ToplevelBlock.ParameterMap): Convert into array.
2050         (ToplevelBlock.ResolveMeta): Don't create a VariableMap.  Move
2051         logic from VariableMap constructor here.  Use the same 'offset'
2052         variable that's later used for computing offsets of local
2053         variables.
2054         * flowanalysis.cs (UsageVector.parameters): Remove.
2055         (UsageVector): Update to changes.
2056         (VariableMap): Remove.
2057
2058         Avoid creating ParameterMap in every block
2059         * statement.cs (Block.ParameterMap): Move ...
2060         (ToplevelBlock.ParameterMap): ... here.
2061         (ToplevelBlock.ResolveMeta): Create VariableMap for parameters
2062         only once.
2063         * flowanalysis.cs (FlowBranching.param_map): Remove.
2064         (FlowBranching.UsageVector): Update to changes.
2065         (FlowBranchingToplevel.CheckOutParameters): Likewise.
2066
2067         * statement.cs (Block.CloneTo): Clone Toplevel field too.
2068
2069         * expression.cs (ParameterReference): Distinguish between block
2070         where parameter was referenced and declared.
2071
2072 2007-05-18  Marek Safar  <marek.safar@gmail.com>
2073
2074         * flowanalysis.cs, statement.cs: Put back improved error handling.
2075
2076 2007-05-15  Scott Peterson  <lunchtimemama@gmail.com>
2077         
2078         * assign.cs:
2079         * expression.cs:
2080           Imporved object and collection initialization (C# 3.0).
2081
2082 2007-05-15  Marek Safar  <marek.safar@gmail.com>
2083
2084         A fix for bug #81380
2085         * expression.cs (Is.DoResolve): Only value types have constant `is'
2086         behaviour.
2087
2088 2007-05-15  Raja R Harinath  <rharinath@novell.com>
2089
2090         * statement.cs (ToplevelBlock.child): Remove.
2091
2092 2007-05-15  Raja R Harinath  <harinath@gmail.com>
2093
2094         Rationalize ResolveMeta: refactoring
2095         (Block.ResolveMeta): Remove wrong or superfluous comments.  Carve
2096         out constant handling code into ...
2097         (Block.DoResolveConstants): ... this.
2098
2099         Rationalize ResolveMeta: kill local_map
2100         * statement.cs (Block.local_map, Block.LocalMap): Remove.
2101         (Block.AssignableSlots): New.
2102         (Block.ResolveMeta): Make protected.  Don't create a VariableMap
2103         for locals -- move code from VariableMap here.  Avoid unnecessary
2104         allocations.
2105         * flowanalysis.cs (FlowBranching.local_map): Remove.
2106         (FlowBranching..ctor): Use Block.AssignableSlots.
2107         (VariableMap): Remove unused constructors.
2108
2109 2007-05-11  Raja R Harinath  <rharinath@novell.com>
2110
2111         * Makefile [PROFILE=net_2_0_bootstrap]: Add special-case rules.
2112
2113 2007-05-11  Marek Safar  <marek.safar@gmail.com>
2114
2115         * typemanager.cs (IsFriendAssembly): Should not be called for building
2116         assembly.
2117
2118 2007-05-09  Marek Safar  <marek.safar@gmail.com>
2119
2120         * literal.cs (NullConstant): Print null in all cases.
2121         
2122         * expression.cs (Binary.ResolveOperator): Implemented delegate
2123          comparison based on C# 2.0 changes.
2124
2125 2007-04-28  Scott Peterson  <lunchtimemama@gmail.com>
2126
2127         This code is contributed under the MIT X11 license
2128         
2129         The following enables support for several C# 3.0 language features:
2130         
2131         * cs-tokenizer.cs: Added support for the "var" keyword.
2132         
2133         * ecore.cs: Refactored TypeLookupExpression.DoResolveAsTypeStep().
2134           Added VarExpr class to facilitate type inferencing.
2135         
2136         * class.cs: Added IDictionary field AnonymousTypes to TypeContainer
2137           to support anonymous types.
2138         
2139         * assign.cs: Added support for type inferencing and initialization.
2140         
2141         * anonymous.cs: Added AnonymousClass class to enable anonymous types.
2142         
2143         * expression.cs: Added implicit array support to ArrayCreation.
2144           Added 5 types and 1 interface:
2145           
2146           IInitializable                Implementing classes can inject initializing
2147                                         statements after object instantiation.
2148           
2149           Initializer                   Stores data for object initialization.
2150           
2151           AnonymousType                 An expression for anonymous types.
2152           
2153           AnonymousTypeParameter        Stores data about an anonymous type's field.
2154           
2155           NewInitialize                 An expression for object initialization.
2156           
2157           CollectionInitialize          An expression for collection initialization.
2158         
2159         * statement.cs: Added "var" keyword support to the foreach, using, and fixed
2160           statements.
2161
2162 2007-05-06  Marek Safar  <marek.safar@gmail.com>
2163
2164         A fix for bug #81500
2165         * cs-tokenizer.cs: Add special handling for coalescing operator.
2166
2167 2007-05-06  Marek Safar  <marek.safar@gmail.com>
2168
2169         A fix for bug #81529
2170         * attribute.cs (GetAttributeUsage): AttributeUsage attribute inherits
2171         its value from base class until it is redefined.
2172
2173 2007-05-02  Raja R Harinath  <rharinath@novell.com>
2174
2175         Fix regression in cs0631-3.cs
2176         * cs-parser.jay (operator_declarator): Add opt_attributes to error
2177         fallback.  Make error fallback catch more cases.
2178
2179 2007-05-01  Miguel de Icaza  <miguel@novell.com>
2180
2181         * cs-parser.jay: Allow parameters in operator declarations to have
2182         attributes. 
2183
2184 2007-04-27  Miguel de Icaza  <miguel@novell.com>
2185
2186         * statement.cs (If.CloneTo): Only clone the FalseStatement if it
2187         exists. 
2188
2189         * lambda.cs (ContextualReturn.Resolve): An expression is valid
2190         inside the ContextualReturn, it does not have to be an
2191         ExpressionStatement. 
2192
2193 2007-04-24  Miguel de Icaza  <miguel@novell.com>
2194
2195         * lambda.cs (ContextualReturn.Resolve): if the return type is not
2196         set, set it.
2197
2198 2007-04-23  Miguel de Icaza  <miguel@novell.com>
2199
2200         * anonymous.cs (AnonymousContainer): split the virtual Resolve
2201         method in two methods: ResolveNoDefine and Resolve.
2202
2203         ResolveNoDefine will stop just after ResolveTopBlock has been
2204         called.   
2205
2206         Resolve will then continue by creating a method and issuing the
2207         call to method.Define ().
2208
2209         (AnonymousMethod): Split and implement the new Resolve and
2210         ResolveNoDefine as well.
2211
2212         * lambda.cs (LambdaExpression): Split the anonymous method
2213         resolution code into a separate routine (CoreCompatibilityTest)
2214         from DoCompatibleTest.
2215
2216         (LambdaExpression.TryBuild): New method, this method tries to
2217         build the LambdaExpression with the given set of types to be used
2218         as the types for the various parameters of the lambda expression. 
2219
2220         If the compilation succeed with the given types, the infered type
2221         of the Anonymous method is returned, otherwise null is returned.
2222
2223 2007-04-23  Marek Safar  <marek.safar@gmail.com>
2224
2225         A fix for bug #81414
2226         * delegate.cs: Better fix, moved ApplyAttributes from Define to Emit.
2227
2228 2007-04-22  Miguel de Icaza  <miguel@novell.com>
2229
2230         * cs-tokenizer.cs: Change various identifiers here from the
2231         camelCasing to the recommended Linux-like style for instance
2232         variables from the Coding Guidelines. 
2233
2234 2007-04-19  Martin Baulig  <martin@ximian.com>
2235
2236         * convert.cs
2237         (Convert.ImplicitReferenceConversionCore): Allow conversions from
2238         System.Enum to System.ValueType.
2239
2240 2007-04-13  Martin Baulig  <martin@ximian.com>
2241
2242         Rewrote implicit reference conversions.  We need to distinguish
2243         between implicit reference conversions (13.1.4) and implicit
2244         boxing conversions (13.1.5).
2245
2246         According to the spec, there's an an implicit conversion
2247         "From a one-dimensional array-type S[] to IList<T> and base
2248         interfaces of this interface, provided there is an implicit
2249         reference conversion from S to T."  Note that this does not
2250         include boxing conversions.
2251
2252         * convert.cs
2253         (Convert.ImplicitTypeParameterBoxingConversion): New method.
2254         (Convert.ImplicitReferenceConversion): Split into
2255         ImplicitReferenceConversionCore() and
2256         ImplicitBoxingConversionExist().
2257         (Convert.ImplicitReferenceConversionExists): Use the new
2258         ImplicitReferenceConversionCore() and ImplicitBoxingConversionExists().
2259
2260 2007-04-12  Martin Baulig  <martin@ximian.com>
2261
2262         * convert.cs (Convert.ImplicitReferenceConversion): Move the
2263         `TypeManager.null_type' checks up to the top of the method.
2264
2265 2007-04-11  Marek Safar  <marek.safar@gmail.com>
2266
2267         A fix for bug #81350
2268         * class.cs, decl.cs, ecore.cs, namespace.cs: The optimization for private
2269         extension methods.
2270
2271 2007-04-11  Martin Baulig  <martin@ximian.com>
2272
2273         * statement.cs (Foreach.CollectionForeach.ProbeCollectionType):
2274         Use `TypeManager.GetInterfaces(t)' rather than `t.GetInterfaces()'
2275         to make this work for generic classes; fixes #79561.
2276
2277 2007-04-11  Martin Baulig  <martin@ximian.com>
2278
2279         * expression.cs (As): Add support for nullable types; fixes #79371.
2280
2281 2007-04-11  Martin Baulig  <martin@ximian.com>
2282
2283         * doc.cs (DocUtil.GetSignatureForDoc): Don't crash if
2284         `type.FullName' is null; fixes #80243.
2285
2286 2007-04-11  Martin Baulig  <martin@ximian.com>
2287
2288         * expression.cs (Invocation.IsApplicable): Don't modify the method
2289         if type inference succeeded, but the method was not applicable.
2290         Fixes #81250.
2291
2292 2007-04-10  Marek Safar  <marek.safar@gmail.com>
2293
2294         A fix for bug #81324
2295         * namespace.cs (Namespace.LookupExtensionMethod): Always inspect both
2296         internal and external namespaces containers.
2297
2298 2007-04-10  Martin Baulig  <martin@ximian.com>
2299
2300         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Use
2301         TypeManager.DropGenericMethodArguments() so we also call
2302         IMethodData.SetMemberIsUsed() for generic methods.  Fixes #80357.
2303
2304 2007-04-10  Martin Baulig  <martin@ximian.com>
2305
2306         * iterators.cs (Iterator.CreateIterator): Don't crash if
2307         `method.ReturnType' is null.  This happens if something went wrong
2308         while resolving that typ (we already reported an error in this case).
2309
2310 2007-04-10  Martin Baulig  <martin@ximian.com>
2311
2312         * expression.cs (New.DoResolve): Don't call CheckComImport() on
2313         generic interfaces; report the CS0144 directly.
2314
2315 2007-04-10  Martin Baulig  <martin@ximian.com>
2316
2317         * ecore.cs (MemberExpr.ResolveMemberExpr): If `left' is a
2318         `TypeExpr', call ResolveAsTypeTerminal() on it; fixes #81180.
2319
2320 2007-04-10  Martin Baulig  <martin@ximian.com>
2321
2322         * expression.cs (New.DoEmitTypeParameter): Fix #81109.
2323
2324 2007-04-09  Raja R Harinath  <rharinath@novell.com>
2325
2326         A better fix
2327         * flowanalysis.cs (UsageVector.MergeChild): Handle child.Block == null.
2328         * statement.cs: Use KillFlowBranching only in ResolveUnreachable.
2329
2330         Fix #81338
2331         * statement.cs (For.Resolve): If resolution fails, use
2332         KillFlowBranching.
2333
2334 2007-04-08  Marek Safar  <marek.safar@gmail.com>
2335
2336         * anonymous.cs (MakeName): Make faster and zero-based.
2337         (VerifyExplicitParameterCompatibility): Back to mode where generic
2338         parameter is ignored.
2339         (AnonymousMethodMethod.Emit): Decorate method as compiler generated.
2340
2341         * class.cs (EmitType): Method can emit another new method.
2342
2343         * cs-tokenizer.cs (IsLinqEnabled): Fixes static cctor race.
2344
2345         * driver.cs: Updated.
2346
2347         * lambda.cs: Reuse predefined empty parameters.
2348
2349         * parameter.cs: Updated
2350
2351         * support.cs: Implemented InflateTypes.
2352
2353         * typemanager.cs (GetFullName): Don't use FullName as it can be null.
2354         (InitSystemCore): Introduced to isolate 3.0 dependencies.
2355
2356 2007-04-03  Martin Baulig  <martin@ximian.com>
2357
2358         Fix #80632.
2359
2360         * statement.cs (Foreach.CollectionForeach.TryType): Use a custom
2361         version of TypeManager.IsOverride() which also works with generic
2362         types.  
2363
2364 2007-04-03  Martin Baulig  <martin@ximian.com>
2365
2366         Fix #81044.
2367
2368         * convert.cs
2369         (Convert.ExplicitReferenceConversion): We need to cast when
2370         converting from IList<T> to S[].
2371
2372 2007-04-01  Marek Safar  <marek.safar@gmail.com>
2373
2374         * decl.cs (FindExtensionMethods): Consider all candidates with same name
2375         at this level.
2376         
2377         * expression.cs (MemberAccess.DoResolve): Cache resolved expression.
2378
2379 2007-03-31  Marek Safar  <marek.safar@gmail.com>
2380
2381         * anonymous.cs (AnonymousMethodExpression.Compatible): Handles both
2382         argument and return type inferring.
2383
2384         * codegen.cs (InferReturnType): Flag whether return can be inferred.
2385         (ReturnType): Turned to property.
2386
2387         * statement.cs (Return): Implemented return type inferring.
2388
2389         * support.cs (ReflectionParameters): Use local types if possible.
2390
2391 2007-03-30  Raja R Harinath  <rharinath@novell.com>
2392
2393         * flowanalysis.cs (FlowBranching.Reachability): Remove.
2394         (FlowBranching.UsageVector): Update to changes.
2395
2396         Prepare to kill 'Reachability'
2397         * flowanalysis.cs (UsageVector): Remove 'Reachability' from
2398         argument of constructor.
2399
2400 2007-03-29  Raja R Harinath  <rharinath@novell.com>
2401
2402         Prepare to kill 'Reachability'
2403         * flowanalysis.cs (UsageVector.is_unreachable): New.
2404         (UsageVector): Update to maintain 'is_unreachable' in parallel to
2405         'reachability', and verify they're consistent.
2406
2407         Fix #81121
2408         * expression.cs (New.EmitStatement): Handle type parameters here too.
2409
2410 2007-03-29  Martin Baulig  <martin@ximian.com>
2411
2412         Fix #79148.
2413
2414         * anonymous.cs
2415         (ScopeInfo.ctor): Use `Modifiers.PUBLIC' if we're a nested
2416         CompilerGeneratedClass.
2417         (ScopeInfo.EmitScopeInstance): Make this protected.
2418         (CapturedVariable.EmitInstance): Use `Ldarg_0' if
2419         `ec.CurrentAnonymousMethod.Scope == Scope'.
2420
2421         * statement.cs (Block.ScopeInfo): Make this a property.
2422
2423 2007-03-27  Raja R Harinath  <harinath@gmail.com>
2424
2425         Prepare to kill 'Reachability'
2426         * flowanalysis.cs (FlowBranching.Reachability): Make class private.
2427         (FlowBranching.UsageVector.Reachability): Remove property.
2428         (FlowBranching.UsageVector.IsUnreachable): New property.
2429         (FlowBranching.UsageVector.ResetBarrier): New.
2430         (FlowBranching.UsageVector, FlowBranchingLabeled): Update to changes.
2431         * codegen.cs, statement.cs: Update to changes.
2432
2433 2007-03-27  Martin Baulig  <martin@ximian.com>
2434
2435         Fix #81209.
2436
2437         * decl.cs
2438         (DeclSpace.LookupNestedTypeInHierarchy): Correctly handle nested
2439         generic types.
2440
2441 2007-03-26  Raja R Harinath  <rharinath@novell.com>
2442
2443         * flowanalysis.cs (FlowBranching.Reachability): Use a boolean
2444         instead of TriState.  Remove all mention of TriState.
2445
2446         * flowanalysis.cs (FlowBranching.Reachability): Prepare to be
2447         replaced by a boolean.  Add boolean 'is_unreachable' field, check
2448         and maintain invariants.
2449
2450 2007-03-25  Marek Safar  <marek.safar@gmail.com>
2451
2452         * anonymous.cs: Restored checks disabled for uninflated anonymous methods.
2453
2454 2007-03-25  Marek Safar  <marek.safar@gmail.com>
2455
2456         * expression.cs: Stop using obsolete 2.0 opcodes.
2457
2458 2007-03-25  Marek Safar  <marek.safar@gmail.com>
2459
2460         * enum.cs (EnumMember.Define): Fixed regression and slowdown caused by
2461         one of the latests Martin's fixes.
2462
2463 2007-03-23  Miguel de Icaza  <miguel@novell.com>
2464
2465         * expression.cs: On BigEndian systems, swap the bytes, temporary
2466         solution until we get a new bitconverter class.
2467
2468 2007-03-23  Martin Baulig  <martin@ximian.com>
2469
2470         Fix #81158.
2471
2472         * decl.cs (MemberCache.AddMembers): Add generic methods both as
2473         "Method" and "Method`1".  Normally, a cache lookup is done on the
2474         "Method" form (ie. without the generic arity), but this one makes
2475         lookups on the full form work as well.
2476
2477 2007-03-22  Raja R Harinath  <rharinath@novell.com>
2478
2479         * flowanalysis.cs (Reachability): Reorganize slightly, and remove
2480         unused properties.
2481
2482 2007-03-20  Bill Holmes  <billholmes54@gmail.com>
2483         * class.cs: 
2484         Added 2 MemberCoreArrayList objects, ordered_explicit_member_list and
2485         ordered_member_list, to TypeBuilder to store members to be defined
2486         in the order they were parsed in.
2487         - ordered_explicit_member_list contains all properties indexers
2488           and methods that are defined as explicit implementation of an
2489           interface or base class.
2490         - ordered_member_list contains all properties indexers and methods
2491           that are not defined as explicit implementation of an interface
2492           or base class.
2493
2494         Removed MethodArrayList and IndexerArrayList from TypeBuilder.  The 
2495         functionality in these removed classes has been replaced with 
2496         ComputeIndexerName, EmitIndexerName, HasEqualss, HasGetHashCode, and 
2497         CheckEqualsAndGetHashCode members defined and called in the TypeBuilderClass.
2498
2499         Adding CheckForDuplications to PropertyBase.PropertyMethod and calls
2500         to CheckForDuplications inside GetMethod and SetMethod Define Method
2501         to handle method property and indexer name conflicts.
2502
2503         Fixes #79434
2504
2505         All code is contributed under the MIT/X11 license.
2506
2507 2007-03-20  Martin Baulig  <martin@ximian.com>
2508
2509         * class.cs (TypeContainer.Interfaces): Removed; they're now
2510         included in `TypeContainer.Types'.
2511
2512 2007-03-20  Martin Baulig  <martin@ximian.com>
2513
2514         Fix #77963, #80314 and #81019.  Added gtest-317, ..., gtest-320.
2515
2516         * class.cs (TypeContainer.CreateType): New public method.  This is
2517         now called before DefineType() to create the TypeBuilders.
2518         (TypeContainer.DefineType): Don't create the TypeBuilder here; it
2519         has already been created by CreateType().
2520         (TypeContainer.DefineTypeBuilder): Renamed into CreateTypeBuilder();
2521         don't resolve our base classes here; this has been moved into
2522         DefineBaseTypes().  We're now called from CreateType().
2523         (TypeContainer.DefineBaseTypes): New private method; resolve our
2524         base classes here.  We're now called from DefineType().
2525
2526         * rootcontext.cs
2527         (RootContext.ResolveTree): Call TypeContainer.CreateType() on all
2528         our types first to create all the TypeBuilders.  After that, call
2529         TypeContainer.DefineType() on all the types which'll resolve their
2530         base classes and setup the resolve order.
2531
2532 2007-03-20  Martin Baulig  <martin@ximian.com>
2533
2534         * class.cs (TypeContainer.Enums): Removed; they're now included in
2535         `TypeContainer.Types'.  
2536
2537 2007-03-20  Martin Baulig  <martin@ximian.com>
2538
2539         * class.cs
2540         (TypeContainer.DefineType): Don't call ResolveMembers() here.
2541         (TypeContainer.DoResolveMembers): Call DefineType() on our
2542         `compiler_generated' classes; moved here from DefineNestedTypes().
2543
2544         * rootcontext.cs
2545         (RootContext.ResolveTree): Call ResolveMembers() on all
2546         TypeContainer's in the `type_container_resolve_order'.
2547
2548 2007-03-19  Marek Safar  <marek.safar@gmail.com>
2549
2550         * class.cs: Use corlib to handle InternalMethodImplAttribute.
2551
2552 2007-03-17  Marek Safar  <marek.safar@gmail.com>
2553
2554         * class.cs (EventFieldAccessor.EmitMethod): Don't override existing
2555         implementation flags.
2556
2557 2007-03-17  Marek Safar  <marek.safar@gmail.com>
2558
2559         * class.cs: More optimizations for type parameters.
2560
2561 2007-03-15  Marek Safar  <marek.safar@gmail.com>
2562
2563         * anonymous.cs (AnomymousMethod): Can be now hosted in generic container.
2564
2565         * ecore.cs, parameter.cs: More common code for both corlibs.
2566
2567         * typemanager.cs (IsGenericMethod): Simplified.
2568
2569 2007-03-15  Raja R Harinath  <rharinath@novell.com>
2570
2571         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
2572         'returns'.
2573         * statement.cs, iterators.cs, lambda.cs: Update to changes.
2574
2575         * statement.cs (Lock.Resolve): Invoke 'ec.NeedReturnLabel'
2576         unconditionally.  Simplify explanation.
2577         (Try.Resolve, Using.Resolve): Likewise.
2578
2579 2007-03-15  Martin Baulig  <martin@ximian.com>
2580
2581         Fix #80731.
2582
2583         * decl.cs (DeclSpace): If we're a partial class, use our
2584         `PartialContainer's `TypeParameters' and `CurrentTypeParameters'.
2585
2586 2007-03-15  Raja R Harinath  <rharinath@novell.com>
2587
2588         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
2589         'throws'.
2590         (FlowBranching.UsageVector): Update to changes.
2591         (FlowBranching.MergeSiblings): Likewise.
2592         * statement.cs: Likewise.
2593
2594 2007-03-15  Martin Baulig  <martin@ximian.com>
2595
2596         Fix #79302.
2597
2598         * decl.cs
2599         (MemberCache): Added a special .ctor for type parameters.
2600
2601         * typemanager.cs
2602         (TypeManager.MemberLookup_FindMembers): `TypeParameter' now has a
2603         `MemberCache'.  
2604
2605 2007-03-09  Martin Baulig  <martin@ximian.com>
2606
2607         * enum.cs (Enum): Make this a TypeContainer.
2608         (EnumMember): Derive from `Const'.
2609
2610         * const.cs
2611         (Const.DoResolveValue): New protected virtual method; move most of
2612         the functionality of ResolveValue() here so we can override it in
2613         `EnumMember'.
2614         (Const.CreateConstantReference): Make this virtual.
2615
2616         * class.cs (Kind): Add `Kind.Enum'.
2617         (TypeContainer.Emit): Don't emit the enums here; they're already
2618         in the `RootContext.typecontainer_resolve_order'.
2619
2620         * rootcontext.cs (RootContext.EmitCode): Don't emit the enums
2621         here; they're already in the `typecontainer_resolve_order'.
2622
2623         * ecore.cs (EnumConstant.ConvertImplicitly): Add
2624         TypeManager.DropGenericTypeArguments().
2625
2626         * typemanager.cs
2627         (TypeManager.CSharpEnumValue): Add DropGenericTypeArguments().
2628         (TypeManager.IsEnumType): Likewise.
2629         (TypeManager.EnumToUnderlying): Likewise.
2630         (TypeManager.IsEqual): Add support for enums.
2631
2632 2007-03-12  Raja R Harinath  <rharinath@novell.com>
2633
2634         * typemanager.cs (InitCoreTypes) [NET_2_0]: Allow
2635         DefaultParameterValueAttribute to be undefined, say if System.dll
2636         is not referenced.
2637
2638 2007-03-11  Marek Safar  <marek.safar@gmail.com>
2639
2640         * ecore.cs, parameter.cs, typemanager.cs: Another gmcs fix to work with
2641         any mscorlib.
2642
2643 2007-03-10  Marek Safar  <marek.safar@gmail.com>
2644
2645         * class.cs, parameter.cs: Unified parameters verification.
2646
2647 2007-03-08  Martin Baulig  <martin@ximian.com>
2648
2649         * cs-parser.jay (constructor_header): Pass the location to the
2650         newly created TopLevelBlock.
2651
2652 2007-03-07  Martin Baulig  <martin@ximian.com>
2653
2654         * statement.cs (Block.Resolve): Don't crash on error; bug #80715.
2655
2656 2007-03-06  Miguel de Icaza  <miguel@novell.com>
2657
2658         * convert.cs (ExplicitReferenceConversionExists): Sync this method
2659         with the changes from David, fixes the build.
2660
2661 2007-03-05  David Mitchell  <dmitchell@logos.com>
2662
2663         * convert.cs: Implement From System.Collecitons.Generic.IList<T>
2664         and its base interfaces to a one-dimensional array type S[],
2665         provided there is an implicit or explicit reference conversion
2666         from S to T.
2667
2668 2007-03-03  Marek Safar  <marek.safar@gmail.com>
2669
2670         * cs-tokenizer.cs: Implemented basic linq grammar.
2671
2672         * driver.cs: Set linq lang version on demand.
2673
2674 2007-02-26  Marek Safar  <marek.safar@gmail.com>
2675
2676         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
2677
2678 2007-02-25  Marek Safar  <marek.safar@gmail.com>
2679
2680         * attribute.cs: Replaced DefinePInvoke in favor of S.R.E implementation
2681         (Fixes #80455)
2682
2683         * class.cs (InterfaceMemberBase): Share common `extern' modifier checks
2684         here.
2685         Check property and event extern attributes.
2686
2687         * codegen.cs (ModuleClass): HasDefaultCharSet when module defined global
2688         charset.
2689
2690 2007-02-24  Marek Safar  <marek.safar@gmail.com>
2691
2692         A fix for bug #80407
2693         * ecore.cs: Don't report ambiguity error when methods have same parent.
2694
2695 2007-02-23  Marek Safar  <marek.safar@gmail.com>
2696
2697         A fix for bug #80878
2698         * class.cs, cs-parser.jay: Event property can host anonymous methods.
2699
2700 2007-02-22  Marek Safar  <marek.safar@gmail.com>
2701
2702         * attribute.cs: Enable ExtensionAttribute presence test.
2703
2704 2007-02-22  Marek Safar  <marek.safar@gmail.com>
2705
2706         * class.cs: Warn about missing GetHashCode only when Equals is override.
2707
2708         * decl.cs: Check accessibility of type arguments.
2709
2710         * typemanager.cs: Correctly report nullable array.
2711
2712 2007-02-20  Marek Safar  <marek.safar@gmail.com>
2713
2714         * class.cs, report.cs: Capture more details when things go wrong.
2715
2716 2007-02-20  Marek Safar  <marek.safar@gmail.com>
2717
2718         A fix for bug #80650
2719         * cs-parser.jay: Anonymous container starts at constructor declaration
2720         and not at block beginning because it has to be usable in constructor
2721         initializer.
2722
2723         * statement.cs: Use context location and not block one for error reporting.
2724
2725 2007-02-18  Marek Safar  <marek.safar@gmail.com>
2726
2727         A fix for bug #78712
2728         * class.cs.cs, decl.cs, ecore.cs: LookupAnyGeneric inspects nested types
2729         too.
2730
2731 2007-02-18  Marek Safar  <marek.safar@gmail.com>
2732
2733         A fix for bug #80493 by Atsushi Enomoto
2734         * cs-parser.jay: Ignore invalid attribute target.
2735
2736 2007-02-18  Marek Safar  <marek.safar@gmail.com>
2737  
2738         * cs-tokenizer.cs: Ignore '\0' as white space character.
2739
2740 2007-02-17  Miguel de Icaza  <miguel@novell.com>
2741
2742         * cs-parser.jay: Add support for lambda expressions to the mcs
2743         compiler as well.
2744
2745         * lambda.cs: Only clone when we are probing, not on the final call
2746         (Compatible is the final call). 
2747
2748         * statement.cs (CloneContext): Introduce class to provide block
2749         remapping during clone.
2750
2751         All statements Clone themselves now.
2752
2753         (Clone): special handling for blocks, when we clone a block, we
2754         register the block inside this routine, as children of the block
2755         might trigger a lookup. 
2756         
2757         * expression.cs: Add support for CloneContext in all expressions. 
2758         
2759 2007-02-17  Marek Safar  <marek.safar@gmail.com>
2760  
2761         A fix for bug #80493
2762         * statement.cs: Report ambiguous warning when interfaces are not related.
2763
2764 2007-02-15  Marek Safar  <marek.safar@gmail.com>
2765
2766         C# 3.0 extension methods.
2767
2768         * attribute.cs (Error_MisusedExtensionAttribute): Extension attribute
2769         cannot be used directly.
2770
2771         * class.cs (Class.Emit): Emit extension attribute if any class method
2772         is extension method.
2773         (Method.Define): Add basic extension method validation conditions.
2774         (Method.Emit): Emit extension attribute for method.
2775
2776         * codegen.cs (AssemblyClass): Emit extension attribute if at least one
2777         extension method exists. Currently we follow same approach as Microsoft
2778         does, emit even if a method or a class are private but this can change
2779         later.
2780
2781         * cs-parser.jay: Add handling of `this' keyword in method parameters
2782         context.
2783
2784         * decl.cs (DeclSpace.IsStaticClass): New property.
2785         (MemberCache.FindExtensionMethods): Looks for extension methods with
2786         defined name and extension type.
2787
2788         * doc.cs: Updated after OverloadResolve changes.
2789
2790         * driver.cs: Add new soft reference to System.Core.dll.
2791
2792         * ecore.cs (MethodLookup): Can return only MethodGroupExpr.
2793         (ExtensionMethodGroupExpr): Represents group of extension methods.
2794
2795         * expression.cs (Invocation): Moved methods BetterConversion, MoreSpecific,
2796         BetterFunction, IsOverride, IsAncestralType, OverloadResolve
2797         to MethodGroupExpr and made non-static for easier customization.
2798         (Invocation.DoResolve): Add extension method lookup when no standard
2799         method was found.
2800         (MemberAccess.DoResolve): Try extension methods if no member exists.
2801
2802         * modifiers.cs: Add METHOD_EXTENSION modifier.
2803
2804         * namespace.cs (RegisterExtensionMethodClass): Register class namespace
2805         as well as candidate extension type.
2806         (ComputeNamespaces): When assembly constains extension methods registers
2807         them.
2808         (Namespace.RegisterExternalExtensionMethodClass): Register type for later
2809         extension method lookup.
2810         (Namespace.LookupExtensionMethod): Looks for extension method in this
2811         namespace.
2812         (NamespaceEntry.LookupExtensionMethod): Does extension methods lookup to
2813         find a method which matches name and extensionType.
2814
2815         * parameter.cs (Parameter): Add This modifer.
2816         (HasExtensionMethodModifier): New property.
2817         (Resolve): Add extension parameter check.
2818         (ModFlags): turned to property to exclude this modifier as it is not real
2819         parameter modifier.
2820         (Parameters): Implemented ExtensionMethodType and HasExtensionMethodType.
2821
2822         * support.cs (ParameterData): Add ExtensionMethodType.
2823         (ReflectionParameters): Implemented ExtensionMethodType interface property.
2824
2825         * typemanager.cs: Add type and ctor extension attribute type.
2826
2827 2007-02-15  Miguel de Icaza  <miguel@novell.com>
2828
2829         * report.cs (DisableErrors, EnableErrors): used to prevent error
2830         output when we are "trying" to compile various methods with
2831         different types. 
2832
2833         * ecore.cs (Expression): Add Clone method that calls the virtual
2834         CloneTo method.  The current CloneTo method in Expression throws
2835         an exception so we can track down all the places where this must
2836         be implemented (not using abstract, because that would be a lot of
2837         up-front-work before we can start testing the implementation
2838         idea). 
2839
2840         Important: we only need Clone capabilities for expressions created
2841         by the parser, as the expressions we will be cloning are
2842         expressions in the pre-resolved state.   This vastly simplifies
2843         the work required. 
2844         
2845         (SimpleName): Add CloneTo that does nothing.
2846         (EmptyCast): Add CloneTo.
2847         
2848         * expression.cs (Binary): Implement CloneTo.
2849         (Invocation.IsApplicable): Store the current ec in
2850         EmitContext.TempEc and restore it on return.  This is used so we
2851         do not have to sprinkle hundres of methods with an extra
2852         EmitContext, we know that the only user is the lambda expression
2853         ImplicitConversionExists code. 
2854         
2855         (Argument): Add Cloning capabilities.
2856         (LocalVariableReference, ParenthesizedExpression, Unary, Probe,
2857         Cast, Conditional, ArrayCreation, InvocationOrCast, Invocation,
2858         ArglistAccess, ArgList, TypeOf, SizeOf, CheckedExpr,
2859         UnCheckedExpr, ElementAccess, BaseAccess, BaseIndexerAccess,
2860         IndexerAccess): Add Clone capability.
2861
2862         (LocalVariableReference, This): TODO: needs cloned Block mapping.
2863
2864         (Argument): Add cloning capability.
2865
2866         * assign.cs (Assign): Implement CloneTo.
2867
2868         * anonymous.cs (ImplicitStandardConversionExists): Make virtual.
2869         
2870         * lambda.cs (ImplicitStandardConversionExists): Implement lambda
2871         version by calling Convert with the EmitContext (that we are
2872         currently storing in ec, this is not great, but will do for now,
2873         to avoid passing EmitContext parameters to hundreds of functions
2874         that do not need them now).
2875
2876         (SetExpression): Remove, it is not needed.
2877         
2878         (ContextualReturn): Implement CloneTo.
2879
2880         * statement.cs (Statement): Implement cloning infrastructure,
2881         similar to expressions.
2882
2883         (Block): Partial implementation of Clone for statements.
2884
2885         (Return): Implement clone.
2886         
2887         * constant.cs (Constant.CloneTo): New method, does nothing.
2888
2889         * codegen.cs (TempEc): Add a static EmitContext as a temporary
2890         solution, until we decide how to exactly do this.  
2891         
2892 2007-02-14  Marek Safar  <marek.safar@gmail.com>
2893  
2894         A fix for bug #80493
2895         * class.cs (FindOutBaseMethod): When the base accessor does not exist and
2896         a property is override we need to use second accessor.
2897
2898 2007-02-13  Marek Safar  <marek.safar@gmail.com>
2899  
2900         A fix for bug #80418
2901         * attribute.cs, class.cs: Use correct calling conventions for pinvoke
2902         methods.
2903
2904 2007-02-13  Marek Safar  <marek.safar@gmail.com>
2905
2906         Another fix for bug #80749
2907         * pending.cs: Abstract class has priority over interfaces.
2908
2909 2007-02-13  Marek Safar  <marek.safar@gmail.com>
2910
2911         Another fix for bug #80749
2912         * pending.cs: Abstract class has priority over interfaces.
2913
2914 2007-02-13  Marek Safar  <marek.safar@gmail.com>
2915
2916         Another fix for bug #80749
2917         * pending.cs: Abstract class has priority over interfaces.
2918
2919 2007-02-13  Marek Safar  <marek.safar@gmail.com>
2920
2921         Another fix for bug #80749
2922         * pending.cs: Abstract class has priority over interfaces.
2923
2924 2007-02-13  Marek Safar  <marek.safar@gmail.com>
2925
2926         * class.cs Better error message.
2927
2928         * driver.cs: Add shorter versions of -optimize option.
2929
2930 2007-02-13  Martin Baulig  <martin@ximian.com>
2931
2932         * class.cs (Constructor.Emit): Check the return value of
2933         ec.ResolveTopBlock() and return on error.
2934
2935 2007-02-13  Raja R Harinath  <rharinath@novell.com>
2936
2937         * ecore.cs (Error_InvalidExpressionStatement): Add a comma to error
2938         message to fix error message regression.
2939
2940 2007-02-12  Marek Safar  <marek.safar@gmail.com>
2941
2942         * delegate.cs: Delegate creation expression cannot be of Nullable type.
2943
2944 2007-02-12  Marek Safar  <marek.safar@gmail.com>
2945
2946         A fix for bug #80749
2947         * assign.cs (FieldInitializer): FieldInitializer has to keep track of
2948         its parent container.
2949
2950         * class.cs (DefineFieldInitializers): Each initializer can has different
2951         resolve context.
2952
2953         * const.cs: Updated.
2954
2955 2007-02-11  Miguel de Icaza  <miguel@novell.com>
2956
2957         * lambda.cs (LambdaExpression.Compatible): Remove some early code,
2958         now all the heavy lifting to check that embedded statements or
2959         expressions have the right form is done in the ContextualReturn.
2960
2961         (ContextualReturn): New class.  
2962
2963         * ecore.cs (Error_InvalidExpressionStatement): Make a helper
2964         method that can be invoked to report 201, so we do not replicate
2965         this everywhere.
2966
2967         * cs-parser.jay: Reuse Error_InvalidExpressionStatement.
2968         
2969         * cs-tokenizer.cs (xtoken): Correctly compute the column, it was
2970         treating tabs as spaces. 
2971
2972 2007-02-09  Marek Safar  <marek.safar@gmail.com>
2973
2974         A fix for bug #80315 by martin.voelkle@gmail.com (Martin Voelkle)
2975         * assign.cs: Use full implicit conversion for right side check.
2976
2977 2007-02-09  Marek Safar  <marek.safar@gmail.com>
2978
2979         * statement.cs (Switch): Switch over boolean type is not standardized.
2980
2981 2007-02-08  Marek Safar  <marek.safar@gmail.com>
2982
2983         A fix for bug #80755
2984         * decl.cs (FindBaseEvent): Don't use method cache for events.
2985
2986 2007-02-07  Marek Safar  <marek.safar@gmail.com>
2987
2988         * cs-parser.jay: Better syntax error handling.
2989
2990         * ecore.cs, enum.cs, statement.cs, typemanager.cs: Print enum member name
2991         instead of underlying type value.
2992
2993 2007-02-06  Marek Safar  <marek.safar@gmail.com>
2994
2995         * driver.cs: Check define identifier before is registered.
2996
2997         * namespace.cs: Use existing error message.
2998
2999         * report.cs: New warning.
3000
3001 2007-02-06  Marek Safar  <marek.safar@gmail.com>
3002
3003         A fix for bug #80742
3004         * expression.cs: Delegate Invoke method can be called directly.
3005
3006 2007-02-06  Marek Safar  <marek.safar@gmail.com>
3007
3008         A fix for bug #80676
3009         * class.cs (IsEntryPoint): The Main method can have params modifier.
3010
3011 2007-02-04  Miguel de Icaza  <miguel@novell.com>
3012
3013         * parameter.cs (Parameter, Parameters): Add Clone method.
3014
3015         * anonymous.cs (Compatible): Turn method into virtual method, so
3016         LambdaExpression can implement a different behavior.
3017
3018         (CompatibleChecks, VerifyExplicitParameterCompatibility): Factor
3019         out the basic checking here, so it can be used by
3020         LambdaExpressions.
3021         
3022         * lambda.cs: Introduce "Compatible" function that will do the
3023         heavy lifting.
3024
3025 2007-02-02  Marek Safar  <marek.safar@gmail.com>
3026
3027         * attribute.cs: Unified one error message.
3028
3029         * class.cs (Class): Use type attributes and not properties to test static
3030         class.
3031         (IsEntryPoint): Don's pass local variable.
3032
3033         * convert.cs: Removed duplicate check.
3034
3035         * decl.cs, doc.cs, ecore.cs (LookupType): Renamed to LookupNamespaceOrType.
3036
3037         * driver.cs: Don't crash when soft reference does not exist.
3038
3039         * namespace.cs (EnsureNamespace): Renamed to RegisterNamespace.
3040         (UsingEntry): Removed redundant allocation.
3041
3042         * parameter.cs: Add fast path for type parameters.
3043
3044         * support.cs: Don't allocate attribute when it's not used.
3045
3046 2007-01-30  Miguel de Icaza  <miguel@novell.com>
3047
3048         * anonymous.cs
3049         (AnonymousMethodExpression.ImplicitStandardConversionExists): turn
3050         this into a virtual method, so we can override it in LambdaExpression.
3051
3052         * driver.cs: Improve diagnostics in case of failure. 
3053
3054         * cs-tokenizer.cs: Instead of trying to parse a type and a name,
3055         write a function that is slightly more complex and that parses:
3056
3057         type identifier [, type identifier]* )
3058
3059         The old function would return incorrectly a OPEN_PARENS_LAMBDA for
3060         this expression:
3061
3062                 (canEmpty ? i >= 0 : i > 0)
3063
3064 2007-01-30  Raja R Harinath  <rharinath@novell.com>
3065
3066         * cs-tokenizer.cs (parse_namespace_or_typename): Don't throw an
3067         exception on possibly valid code.
3068
3069 2007-01-29  Raja R Harinath  <rharinath@novell.com>
3070
3071         * cs-tokenizer.cs (is_punct) ['<']: Update to changes in
3072         Push/PopPosition.
3073         (parse_opt_type_arguments): Remove.  It's almost the same as
3074         parse_less_than.
3075         (parse_namespace_or_typename): Use parse_less_than.
3076
3077 2007-01-28  Miguel de Icaza  <miguel@novell.com>
3078
3079         * cs-tokenizer.cs: Typo fix, its not GMCS_SOURCES but GMCS_SOURCE,
3080         this bug took a few hours to find, because the state saved and
3081         restored by PushPosition and PopPosition was ignoring the state of
3082         parse_generic_less_than.
3083
3084         I can also now remove the handling of OP_LT and OP_GT, this solves
3085         the big mistery.
3086         
3087         * cs-tokenizer.cs: store the location for the ARROW token, we use
3088         that in the parser.
3089
3090         (PushPosition, PopPosition): save/restore also `current_token',
3091         restore `parse_generic_less_than' (was missing).
3092
3093         (parse_opt_type_arguments): use parse_type, not
3094         parse_namespace_or_typename to parse types.
3095
3096         * lambda.cs: Empty new file, will eventually have the lambda
3097         expression implementation.
3098
3099         * lambda.test: used to test the internal tokenizer. 
3100
3101         * report.cs (FeatureIsNotISO1): Rename from
3102         FeatureIsNotStandardized, because it was about the language level
3103         (1 vs 2) it was not about standarization.
3104
3105         (FeatureRequiresLINQ): New.
3106
3107         * support.cs (SeekableStreamReader): Only require that the reader
3108         is a TextReader, not a StreamReader, so we can plug StringReader. 
3109
3110         * cs-tokenizer.cs (parse_type_and_parameter): Returns true if at a
3111         given position in the input stream the following tokens can be
3112         parsed as a type followed by an identifier.
3113
3114         (is_punct): after a '(' if parse_type_and_parameter returns true,
3115         then return a special token OPEN_PARENS_LAMBDA which is used to
3116         avoid reduce/reduce errors in the grammar for the
3117         lambda_expression rules.
3118
3119         (parse_type): implement a type parser inside the
3120         tokenizer, the parser only returns true or false depending on
3121         whether the input at a given position can be parsed as a type.
3122
3123         (peek_token): new method used during type parsing.
3124
3125 2007-01-28  Raja R Harinath  <rharinath@novell.com>
3126
3127         Fix #80531
3128         * anonymous.cs (ScopeInfo.InflateParameters): New.
3129         (AnonymousContainer.Resolve): Use it to redirect types of
3130         delegate parameters.
3131
3132 2007-01-27  Raja R Harinath  <rharinath@novell.com>
3133
3134         Fix #80530
3135         * expression.cs (Error_InvalidArguments): Don't use two different
3136         messages for CS1503.  Use ExtraInformation and
3137         SymbolRelatedToPreviousError instead.
3138
3139         Fix #80358
3140         * decl.cs (DeclSpace.initialize_type_params): Don't access
3141         'type_params' of a partial class directly.
3142
3143 2007-01-26  Miguel de Icaza  <miguel@novell.com>
3144
3145         * constant.cs: Removed a handful of out-of-range checks that were
3146         not necessary. 
3147
3148 2007-01-25  Marek Safar  <marek.safar@gmail.com>
3149
3150         * expression.cs (CheckUselessComparison): Add additional check for char
3151         constants.
3152
3153         * namespace.cs: Fixed typo.
3154
3155 2007-01-23  Miguel de Icaza  <miguel@novell.com>
3156
3157         * constant.cs: Bloat removal, CheckRange and CheckUnsigned are
3158         gone, instead we inline the test, preventing the needless casts to
3159         longs, ulongs and doubles for the parameters, avoiding calls to
3160         methods that overchecked stuff, and instead inlined things
3161         nicely. 
3162
3163 2007-01-20  Marek Safar  <marek.safar@gmail.com>
3164
3165         * cs-parser.jay: Better parameter error handling.
3166
3167 2007-01-17  Marek Safar  <marek.safar@gmail.com>
3168
3169         A fix for bug #80368, #80522
3170         * expression.cs (ArrayCreation.only_constant_initializers): Indicates
3171         whether array initializer contains constants only.
3172         (ArrayCreation.Emit): Use better formula to decide when
3173         are array initializers for static initialization.
3174         (ArrayCreation.EmitDynamicInitializers): When the array is small enough we
3175         have to emit even constants otherwise they are pre-initialized.
3176
3177 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
3178             Raja R Harinath  <rharinath@novell.com>
3179
3180         Fix emit order of 'get' vs. 'set'.
3181         * support.cs (Accessors): New.
3182         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
3183         Note the order in which accessors are declared in the source.
3184         * class.cs (PropertyBase.DefineGet, PropertyBase.DefineSet): New.
3185         Refactored from Property.Define and Indexer.Define.
3186         (PropertyBase.DefineAccessors): New helper that calls the above in
3187         appropriate order as noted by the parser.
3188         (Property.Define, Indexer.Define): Update to changes.
3189         (PropertyBase.SetMethod.PropertyInfo): Don't return a null.
3190
3191 2007-01-17  Raja R Harinath  <rharinath@novell.com>
3192
3193         Fix cs0029-6.cs and gcs0029-2.cs (regression)
3194         * ecore.cs (EmptyConstantCast.ConvertImplicitly): Check that
3195         there's an implicit conversion from the current type to the target
3196         type before converting the underlying constant.
3197
3198 2007-01-16  Marek Safar  <marek.safar@gmail.com>
3199
3200         * const.cs (ResolveValue): Updated after constant conversion was made more
3201         generic.
3202
3203         * constant.cs (GetAttributableValue): constant to object conversion is
3204         used for attributes only.
3205         (IntConstant.ConvertImplicitly): Moved from convert to be used in all
3206         constant conversions.
3207         (LongConstant.ConvertImplicitly): Ditto.
3208
3209         * convert.cs (ImplicitNumericConversion): Extracted constant bussiness.
3210         (ImplicitConversionStandard): Handle constant conversion as extra step.
3211         It solves the issue when constant conversion was called indirectly like
3212         inside array initializer and constant folding was skipped.
3213
3214         * literal.cs (NullLiteral.ConvertImplicitly): Fixed an issue exposed by
3215         this change.
3216
3217         * statement.cs(ImplicitConversionStandard): Updated after constant
3218         conversion was made more generic.
3219
3220 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
3221
3222         * expression.cs (As.DoResolve): Use GenericConstraints instead of
3223         Constraints, solves the problem where the compiler incorrectly
3224         reported that a type parameter was not constrained to a class (Bug
3225         80518)
3226
3227 2007-01-14  Marek Habersack  <grendello@gmail.com>
3228
3229         * doc-bootstrap.cs: Fix a compilation problem in the bootstrap phase.
3230
3231 2007-01-14  Marek Safar  <marek.safar@gmail.com>
3232
3233         A fix for bug #80368
3234         * assign.cs (FieldInitializer): New class implements field
3235         initializer statement.
3236
3237         * attribute.cs: Update after FieldMember rename.
3238
3239         * class.cs (PropertyBasedMember): New common class for property based
3240         types.
3241         (InterfaceMemberBase): New base class for all members which can be used as
3242         an interface members.
3243         (MethodCore): Moved really common code to InterfaceMemberBase.
3244         (Method.Define): Equal and GetHasCode detection is relevant for methods
3245         only.
3246         (MethodData.Define): Don't assume that public event implements an
3247         interface automatically.
3248         (MethodData.DefineMethodBuilder): Issue an error even if only extern
3249         modifier is used.
3250         (MemberBase): Moved all interface speficic code to InterfaceMemberBase.
3251         (FieldMember): Merged with FieldBase.
3252         (EventProperty.AEventPropertyAccessor): New specialization to check whether
3253         event extern modifier can be used.
3254         (EventField.EventFieldAccessor): Moved event field specific code here.
3255         (Event.AllowedModifiers): Even event can be extern.
3256         (Event.FindOutBaseMethod): New override specific to events.
3257         (Indexer.parameters): Reintroduce parameters because base class holds
3258         only properties common data.
3259         (Indexer.CheckForDuplications): Indexers are threated as methods so we
3260         need do extra parameters check.
3261
3262         * const.cs: Update after FieldMember rename.
3263
3264         * decl.cs (MemberCache.FindBaseEvent): New method.
3265
3266         * doc.cs (GetMethodDocCommentName): Accept parameters as extra argument
3267         to reflect that indexer is now derived from PropertyBased.
3268
3269         * ecore.cs (GetMemberType): Made public.
3270         (EventExpr.ResolveMemberAccess): Use right event cache and checks for
3271         obsolete event.
3272
3273         * flowanalysis.cs, statement.cs: Update after FieldMember rename.
3274         
3275         * typemanager.cs (CSharpSignature): Correctly print event accessors.
3276         (RegisterEvent): Removed.
3277         (RegisterPrivateFieldOfEvent): Renamed to RegisterEventField.
3278         (GetPrivateFieldOfEvent): Renamed to GetEventField.
3279
3280 2007-01-11  Raja R Harinath  <rharinath@novell.com>
3281
3282         Fix #80249
3283         * statement.cs (CollectionForeach.TryType): Prefer generic
3284         GetEnumerator over non-generic variant.  Fix code to follow comments.
3285
3286 2007-01-09  Raja R Harinath  <rharinath@novell.com>
3287
3288         Fix #80446
3289         * support.cs (ReflectionParameter): Don't use an invalid index on
3290         the generic parameter data.
3291
3292 2007-01-08  Miguel de Icaza  <miguel@novell.com>
3293
3294         * driver.cs: Just add a tiny bit of infrastructure.
3295
3296 2007-01-02  Marek Safar  <marek.safar@gmail.com>
3297
3298         * class.cs (VerifyMembers): Fixed an crash reported on mono mailing list
3299         where field type is struct from current assembly.
3300         
3301         * ecore.cs (EnumConstant.AsString): Report an enum member name whenever
3302         it is possible.
3303
3304 2007-01-02  Marek Safar  <marek.safar@gmail.com>
3305
3306         A fix for bug #80381
3307         * attribute.cs (AttributeTester.RegisterNonObsoleteType): Registers
3308         the core types.
3309
3310         * namespace.cs (GlobalRootNamespace.LookupTypeReflection): Better error
3311         messages.
3312         (Namespace.LookupType): Always use core types from corlib when speficied.
3313
3314         * report.cs: A new warning.
3315
3316         * rootcontext.cs (BootstrapCorlib_ResolveInterface,
3317         BootstrapCorlib_ResolveClass): Register type as non-obsolete type.
3318         (ResolveCore): Add missing System.Runtime.InteropServices._Attribute.
3319
3320         * typemanager.cs (CoreLookupType): Register type as non-obsolete type.
3321         (InitCoreTypes): Set expression type of object_type and value_type
3322         immediately after lookup.
3323
3324 2007-01-01  Miguel de Icaza  <miguel@novell.com>
3325
3326         * cs-tokenizer.cs: Accept Pc class characters (Connector
3327         Punctuation) as valid identifiers.  Fixes #78259
3328
3329         * expression.cs (Invocation.DoResolve): Moved the check for the
3330         use of `this' for doing method calls to the Invocation resolution
3331         step, after overload resolution has taken place instead of doing
3332         the check at the low-level `This.DoResolve' level.
3333
3334         The `This.DoResolve'(appens before overload resolution, so it has
3335         no way of knowing if the method that will be called will be
3336         instace or static, triggering an erroneous report for cs0188 (Bug
3337         78113).
3338
3339         We now do the check for instance method invocations after we know
3340         what method will be called.
3341
3342         (This.CheckThisUsage): Move the actual use of this structure
3343         checking into its own method and expose it. 
3344
3345         * Everywhere that called Error_ValueCannotBeConverted: pass a new
3346         EmitContext.
3347
3348         Exceptions: Null.ConvertImplicitly,
3349         Constant.ImplicitConversionRequired as there are too many call
3350         sites for passing the ec. 
3351
3352         * ecore.cs (Expression.Error_ValueCannotBeConverted): Take an
3353         EmitContext, if the value is null, then we do not try to provide
3354         the extra information from the error (If a userdefined conversion
3355         exists, as UserDefinedConversion requires a non null-EmitContext).
3356
3357         Fixes: #80347
3358
3359 2006-12-30  Raja R Harinath  <rharinath@novell.com>
3360
3361         * flowanalysis.cs (MyBitVector): Document some invariants.
3362         (MyBitVector.Or, MyBitVector.And): Reimplement the optimizations
3363         introduced below, and add a couple of others, 
3364
3365 2006-12-30  Marek Safar  <marek.safar@gmail.com>
3366
3367         * attribute.cs (GetMethodObsoleteAttribute): Uses new
3368         GetPropertyFromAccessor and GetEventFromAccessor.
3369         
3370         * class.cs (MethodCore.CheckBase): A new warning when obsolete member
3371         overrides non-obsolete one.
3372         (Indexer.Define): Error message has been moved to the parser.
3373
3374         * cs-parser.jay: Better syntax errors handling.
3375
3376         * delegate.cs (NewDelegate.DoResolve): Issue less confusing error message
3377         when an invocation has no arguments.
3378
3379         * ecore.cs: Removed not used caching.
3380
3381         * expression.cs (IsSpecialMethodInvocation): Reuses TypeManager
3382         implementation.
3383
3384         * report.cs: Add a new warning.
3385
3386         * support.cs (ReflectionParameters): Implements Equals, GetHashCode.
3387
3388         * typemanager.cs (enumeration_type): Removed.
3389         (CSharpSignature): Reuses IsSpecialMethod.
3390         (IsEqual): Hack for MS BCL.
3391         (GetPropertyFromAccessor): New method.
3392         (GetEventFromAccessor): New method.
3393         (IsSpecialMethod): Fixed to handle more cases.
3394
3395 2006-12-30  Marek Safar  <marek.safar@gmail.com>
3396
3397         * cs-tokenizer.cs (PreProcessDefinition, handle_preprocessing_directive):
3398         Made white spaces array static.
3399
3400         * ecore.cs (RemoveGenericArity): Optimized.
3401
3402         * flowanalysis.cs (MyBitVector.Or, MyBitVector.And): Optimized (up to
3403         10 times faster).
3404         (MyBitVector.initialize_vector): Simplified.
3405
3406 2006-12-22  Miguel de Icaza  <miguel@novell.com>
3407
3408         * ecore.cs: Am not entirely happy with this hack, but it seems to
3409         address the issue in 80257 (a small test case for
3410         CreativeDocs.NET). 
3411
3412         I set the MethodGroupExpr.Type to an internal compiler type
3413         (itself in this case) to force the resolution to take place.   Why
3414         it does not take place with a null is beyond me.
3415
3416 2006-12-20  Marek Safar  <marek.safar@gmail.com>
3417
3418         A fix for bug #80288
3419         * expression.cs (ResolveOperator): Consider user defined conversion for
3420         logical and operator too.
3421         (EmitBranchable): Optimization for logical and when full constant folding
3422         could not be applied but one operand is constant.
3423
3424 2006-12-19  Marek Safar  <marek.safar@gmail.com>
3425
3426         * class.cs (GetClassBases): Write 5 times every day, will never use
3427         FullName for error reporting.
3428
3429         * decl.cs (AsAccessible, CheckAccessLevel): Always unpack arrays first.
3430
3431 2006-12-19  Martin Baulig  <martin@ximian.com>
3432
3433         * statement.cs (LocalInfo.EmitSymbolInfo): New public method; emit
3434         the symbol file info here.
3435
3436 2006-12-18  Marek Safar  <marek.safar@gmail.com>
3437
3438         * cs-tokenizer.cs (handle_preprocessing_directive): When previous section
3439         of `elseif' is taking then following sections are not taking.
3440         Fixes an issue reported on mono mailing list.
3441
3442 2006-12-18  Marek Safar  <marek.safar@gmail.com>
3443
3444         A fix for bug #80300
3445         * cs-tokenizer.cs (PreProcessDefinition): Do no define/undefine when
3446         a caller is not taking.
3447
3448 2006-12-18  Raja R Harinath  <rharinath@novell.com>
3449
3450         * anonymous.cs: Change several TypeContainer declarations to DeclSpace.
3451         (CompilerGeneratedClass): Use parent.PartialContainer unconditionally.
3452         (RootScopeInfo, AnonymousMethodMethod): Update to changes.
3453         * iterator.cs: Change several TypeContainer declarations to DeclSpace.
3454         * class.cs: Update to changes.
3455
3456 2006-12-17  Marek Safar  <marek.safar@gmail.com>
3457
3458         A fix for bug #79934
3459         * anonymous.cs (CompilerGeneratedClass): Register class in a shared
3460         partial container.
3461
3462         * class.cs (ResolveMembers): Register an iterator in current container and
3463         not in shared one.
3464
3465 2006-12-16  Raja R Harinath  <rharinath@novell.com>
3466
3467         Fix test-543.cs
3468         * expression.cs (VerifyArgumentsCompat): Allow zero arguments to
3469         satisfy a params annotated parameter.
3470
3471 2006-12-16  Marek Safar  <marek.safar@gmail.com>
3472
3473         A fix for bug #77014
3474         * expression.cs (Invocation.BetterFunction): Fixed to cope with dynamic
3475         paramters correctly and not rely on hacks in Parameters class.
3476         (Invocation.IsParamsMethodApplicable): Changed to accept params parameter
3477         at any possition.
3478         (Invocation.VerifyArgumentsCompat): Ditto.
3479         (Invocation.EmitArguments): Changed to correctly emit params arguments at
3480         any possition.
3481
3482         * parameter.cs (HasParams): Don't assume that params is the last one.
3483
3484         * support.cs (ReflectionParameters.ctor): Look for params attribute
3485         correctly.
3486         (ReflectionParameters.ParameterType): Removed hack when we returned last
3487         parameter for out of range parameters.
3488         (ParameterName, ParameterModifier): Ditto.
3489
3490 2006-12-14  Marek Safar  <marek.safar@gmail.com>
3491
3492         A fix for bug #79987
3493         * decl.cs (DeclSpace.VerifyClsCompliance): External names cache is null
3494         when assembly is not CLS compliant but type is. I have no idea why is this
3495         allowed.
3496
3497         * typemanager.cs (Reset): Invalidate AllClsTopLevelTypes cache.
3498
3499 2006-12-13  Miguel de Icaza  <miguel@novell.com>
3500
3501         * class.cs (ConstructorInitializer.Resolve): Allow for ":this()"
3502         in struct constructors, they are basically no-ops.
3503
3504 2006-12-12  Marek Safar  <marek.safar@gmail.com>
3505
3506         * cs-tokenizer.cs (Position): Save preprocessor status too.
3507
3508 2006-12-12  Marek Safar  <marek.safar@gmail.com>
3509
3510         A fix for bug #77794
3511         * cs-tokenizer.cs (consume_identifier): Check for correct partial context.
3512
3513 2006-12-12  Marek Safar  <marek.safar@gmail.com>
3514
3515         * cs-tokenizer.cs (get_cmd_arg): Support CR as the line terminator.
3516         Fixes #69299.
3517         (pp_expr): Report error for an invalid expression.
3518         (handle_preprocessing_directive): Simplified; add more error checking.
3519
3520 2006-12-11  Marek Safar  <marek.safar@gmail.com>
3521
3522         A fix for bug #74939
3523         * cs-tokenizer.cs (is_punct): We cannot simply disable preprocessor
3524         directives handling.
3525
3526 2006-12-10  Marek Safar  <marek.safar@gmail.com>
3527
3528         A fix for bugs #80093, and #75984
3529         * cs-tokenizer.cs (handle_preprocessing_directive): Fixed #if/#else/#endif
3530         logic, it seems to me as it worked before "by coincidence".
3531         (xtoken): Simplified to use reworked handle_preprocessing_directive.
3532         (cleanup): Enabled endif check.
3533
3534 2006-12-09  Marek Safar  <marek.safar@gmail.com>
3535
3536         A fix for bug #80162
3537         * statement.cs (CollectionForeach.TryType): Generics and non-generics
3538         enumerators are never ambiguous.
3539
3540 2006-12-08  Raja R Harinath  <rharinath@novell.com>
3541
3542         Fix #80060
3543         * cs-tokenizer.cs (parse_less_than): Recognize double-colons too.
3544
3545 2006-12-06  Marek Safar  <marek.safar@gmail.com>
3546
3547         A fix for bug #80144
3548         * class.cs (EventProperty.Define): Explicit implementation means
3549         that an even is used.
3550
3551 2006-12-06  Marek Safar  <marek.safar@gmail.com>
3552
3553         Fixes the operators implementation (part II)
3554
3555         * cfold.cs (DoConstantNumericPromotions): Renamed to
3556         DoBinaryNumericPromotions and simplified.
3557         (BinaryFold): Couple of conversion fixes; simplified.
3558
3559         * constant.cs, ecore.cs, literal.cs
3560         (ToType): Renamed to ConvertImplicitly.
3561         (Reduce): Renamed to ConvertExplicitly.
3562
3563         * class.cs, convert.cs: Updated.
3564
3565         * expression.cs: TryReduce doesn't throw an exception.
3566
3567 2006-12-01  Marek Safar  <marek.safar@gmail.com>
3568
3569         A fix for bug #80108
3570         * ecore.cs (EventExpr.EmitAddOrRemove): Don't crash when right side is not
3571         compatible.
3572
3573 2006-11-30  Marek Safar  <marek.safar@gmail.com>
3574
3575         Fixes unary operators implementation (part I)
3576         Also fixes #80026
3577
3578         * cfold.cs (Error_CompileTimeOverflow): Made internal
3579
3580         * const.cs (IConstant): Changed to use reference to constant and
3581         not constant itself.
3582         Updated IConstant implementations.
3583
3584         * constant.cs (CreateConstant): New factory method.
3585         Updated IConstant implementation.
3586
3587         * convert.cs (ImplicitStandardConversionExists): Uses compiler Equals.
3588
3589         * ecore.cs: Updated to use CreateConstantReference.
3590
3591         * enum.cs: Reflects IConstant changes.
3592
3593         * expression.cs (Unary): Reimplemented +,-,~ to conform C# standard.
3594
3595         * literal.cs (NullConstant): Change to be independently usable.
3596
3597 2006-11-29  Martin Baulig  <martin@ximian.com>
3598
3599         * class.cs (Constructor.Emit): Correctly handle anonymous methods;
3600         we need to emit the scope initializer before calling the base .ctor.
3601
3602         * anonymous.cs: Merged back from the new anonymous methods branch.
3603         (AnonymousMethodHost): Renamed to `RootScopeInfo'.
3604
3605         * expression.cs (ParameterReference.DoResolveBase): Create a
3606         "normal" ScopeInfo when capturing parameters rather than using the
3607         root scope; this makes things work with anonymous methods having
3608         parameters.
3609
3610         * statement.cs
3611         (ToplevelBlock.AnonymousMethodHost): Renamed into `RootScope'.
3612
3613 2006-11-22  Marek Safar  <marek.safar@gmail.com>
3614
3615         A fix for bug #79987
3616         * class.cs (VerifyClsCompliance): Move redundant CLS compliance attribute
3617         check to a base class.
3618         * decl.cs (VerifyClsCompliance): Warn that CLS compliance cannot be tested
3619         only when assembly has missing attribute.
3620         * report.cs: Update.
3621
3622 2006-11-21  Marek Safar  <marek.safar@gmail.com>
3623
3624         * cs-tokenizer.cs: Merged with gmcs version.
3625
3626 2006-11-20  Marek Safar  <marek.safar@gmail.com>
3627
3628         * cs-tokenizer.cs,
3629         * cs-parser.jay: Better error message when partial keyword is misplaced.
3630
3631 2006-11-19  Gert Driesen  <drieseng@users.sourceforge.net>
3632
3633         A fix for bug #79810
3634         report.cs: CS1058 only applies to 2.0 profile (gmcs).
3635         codegen.cs: on 2.0 profile, non-exception throwables are wrapped in
3636         a RuntimeWrappedException by default.
3637
3638 2006-11-18  Marek Safar  <marek.safar@gmail.com>
3639
3640         A fix for bug #79843
3641         * delegate.cs (Delegate.VerifyMethod): Fixed covariance and contravariance
3642         implementation.
3643         (DelegateCreation.Error_NoMatchingMethodForDelegate): Ditto.
3644
3645 2006-11-18  Marek Safar  <marek.safar@gmail.com>
3646
3647         * driver.cs, namespace.cs: Uses faster IndexOf version.
3648
3649 2006-11-17  Marek Safar  <marek.safar@gmail.com>
3650
3651         A fix for bug #79941
3652         * class.cs (MemberCore.IsDuplicateImplementation): Add more tricks for
3653         operators.
3654         (Operator.Define): Implicit/Explicit operator of same type is duplicate
3655         even if internal name is different.
3656         * convert.cs (GetConversionOperator): Replaced EmitContext with parentType.
3657         (UserDefinedConversion): Simplified as the operators cannot be internal.
3658         * ecore.cs (Error_ValueCannotBeConverted): Take account of user
3659         conversions.
3660         (MethodLookup): Replaced EmitContext with parentType.
3661         * expression.cs: Updated.
3662
3663 2006-11-09  Raja R Harinath  <rharinath@novell.com>
3664
3665         * driver.cs (BadAssembly): Handle all the ugliness of
3666         DefineDynamicAssembly.
3667
3668 2006-11-08  Raja R Harinath  <rharinath@novell.com>
3669
3670         Address parts of #58244 -- most of what's left is in the runtime
3671         * driver.cs (LoadAssembly): Simplify slightly.  Add CS0009 and
3672         CS1509 error checks, and handle them for all assembly loads, not
3673         just the first invocation.
3674         (LoadModule): Likewise.  Move handling of 'adder_method' ...
3675         * codegen.cs (AssemblyClass.AddModule): ... here.
3676
3677 2006-11-02  Marek Safar  <marek.safar@gmail.com>
3678
3679         * statement.cs.cs (CollectionForeach.TryType): Issue a error when
3680         IEnumerable<T> is ambiguous.
3681
3682 2006-10-31  Marek Safar  <marek.safar@gmail.com>
3683
3684         A fix for bug #67689
3685         * statement.cs.cs (CollectionForeach.TryType): Issue a warning when
3686         GetEnumerator is ambiguous.
3687
3688         * report.cs: Add new warning.
3689
3690 2006-10-29  Marek Safar  <marek.safar@gmail.com>
3691
3692         A fix for bug #78602
3693         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
3694         to protected member can be nested type.
3695
3696 2006-10-28  Marek Safar  <marek.safar@gmail.com>
3697
3698         A fix for bug #78965
3699         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
3700         to protected member must derive from current type.
3701
3702 2006-10-27  Marek Safar  <marek.safar@gmail.com>
3703
3704         assign.cs: Reuses error method.
3705
3706         ecore.cs (Expression.Error_ValueCannotBeConverted): Report a value
3707         instead of type for constants.
3708         (Expression.Error_ValueAssignment): Common error method.
3709
3710         * expression.cs (UnaryMutator.ResolveOperator): Value cannot be used
3711         for any assignment.
3712
3713 2006-10-27  Marek Safar  <marek.safar@gmail.com>
3714
3715         A fix for bug #79081
3716         * expression.cs (MemberAccess.DoResolve): Check nested type
3717         accessibility.
3718
3719 2006-10-27  Atsushi Enomoto  <atsushi@ximian.com>
3720
3721         * doc.cs : nested delegates were not handled. Fixed bug #79754.
3722
3723 2006-10-26  Marek Safar  <marek.safar@gmail.com>
3724
3725         A fix for bug #76591
3726         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous method.
3727
3728 2006-10-26  Marek Safar  <marek.safar@gmail.com>
3729
3730         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Don't allow to have
3731         type forwarder of the same type multiple times.
3732
3733 2006-10-26  Raja R Harinath  <rharinath@novell.com>
3734
3735         Fix #78820
3736         * ecore.cs (PropertyExpr.InstanceResolve): Always resolve the
3737         instance as an rvalue, even when we later resolve as an lvalue.
3738
3739 2006-10-25  Martin Baulig  <martin@ximian.com>
3740
3741         * anonymous.cs: Fix #79673.
3742
3743 2006-10-24  Marek Safar  <marek.safar@seznam.cz>
3744
3745         A fix for bug #79666
3746         expression.cs (ArrayCreation.GetAttributableValue): An initializer can be
3747         ignored when is optimized (= default value) as its value is already set.
3748
3749 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
3750
3751         A fix for bug #79724
3752         * report.cs (SymbolRelatedToPreviousError): Uses DeclSpace instead of
3753         TypeContainer for type lookup.
3754
3755 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
3756
3757         A fix for bug #79231
3758         * ecore.cs (ResolveAsBaseTerminal): Removed redundant error test.
3759         * expression.cs (OverloadResolve): Always convert type name for
3760         an error message.
3761         (ResolveNamespaceOrType): Don't confuse a nested type with any 
3762         other member.
3763
3764 2006-10-18  Martin Baulig <martin@ximian.com>
3765
3766         * anonymous.cs: Propagate the IsStatic state, fixes the crasher in banshee.
3767
3768 2006-10-17  Miguel de Icaza  <miguel@novell.com>
3769
3770         * convert.cs: Fix typo, fixes the test-535.cs, we were casting to
3771         an int32, but requesting an int64 from the conversion
3772
3773 2006-10-12  Martin Baulig  <martin@ximian.com>
3774
3775         * anonymous.cs
3776         (AnonymousContainer.Resolve): Inflate the `ReturnType'.  Fixes #79592.
3777         
3778 2006-10-12  Martin Baulig  <martin@ximian.com>
3779
3780         * statement.cs
3781         (Using.EmitLocalVariableDeclFinally): Small fix for iterators.
3782
3783 2006-10-11  Miguel de Icaza  <miguel@novell.com>
3784
3785         * convert.cs: Remove broken code: I was doing the "Existance"
3786         tests for Implicit conversions.
3787
3788 2006-10-10  Miguel de Icaza  <miguel@novell.com>
3789
3790         * convert.cs: Added one missing case in
3791         ImplicitStandardConversionExists uint64 to intptr.
3792
3793         Fixes #59800
3794         
3795         * typemanager.cs (uintptr_type): another core known type.   
3796
3797         * ecore.cs (OperatorCast): routine used to do cast operations that
3798         depend on op_Explicit.  We could change some of the Decimal
3799         conversions to use this.
3800
3801         This one has a probe mechanism that checks both types for an op_
3802         which it coudl be used to eliminate two classes: CastToDecimal
3803         and CastFromDecimal.
3804
3805         * convert.cs: Implement the conversions documented in #59800
3806         
3807 2006-10-10  Martin Baulig  <martin@ximian.com>
3808
3809         * iterators.cs (Iterator.Resolve): Call RootScope.ResolveType()
3810         before RootScope.ResolveMembers().
3811
3812         * anonymous.cs (ScopeInfo.CapturedScope.ctor): Use the child's
3813         `CurrentType' if appropriate.
3814
3815 2006-10-09  Marek Safar  <marek.safar@seznam.cz>
3816
3817         A fix for bug #78568
3818         * cs-tokenizer.cs (Deambiguate_CloseParens): Expression cannot be cast
3819         when contains binary operators.
3820         * cs-parser.jay: Updated.
3821
3822 2006-10-09  Martin Baulig  <martin@ximian.com>
3823
3824         * delegate.cs
3825         (Delegate.DefineType): Don't call TypeParameter.Resolve() here;
3826         moved that into Define() and also do the other type parameter
3827         checks there.  Fixes #79094.  Added gtest-292.cs.
3828
3829         * expression.cs
3830         (ArrayCreation.EmitDynamicInitializers): Use `etype.IsValueType'
3831         since that doesn't include type parameters; don't use `Ldelema'
3832         for type parameters.  Fixes #78980.  Added gtest-293.cs.
3833
3834 2006-10-08  Marek Safar  <marek.safar@seznam.cz>
3835
3836         A fix for #77796
3837         * convert.cs (ExplicitReferenceConversion): Only enum to enum value
3838         conversion is allowed.
3839
3840 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
3841
3842         * ecore.cs (Expression.MemberLookup): Don't register any symbol for
3843         error reporting when no error occurs.
3844
3845 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
3846
3847         * cfold.cs (ConstantFold.BinaryFold): Report an error when the conversion
3848         does not exist.
3849
3850 2006-10-06  Raja R Harinath  <rharinath@novell.com>
3851
3852         Fix #79584
3853         * class.cs (DefineTypeBuilder): Check circular dependencies before
3854         setting the parent of the TypeBuilder.
3855         (CheckRecursiveDefinition): Don't use 'BaseType', since
3856         it may not be valid until after DefineTypeBuilder.  Use
3857         'base_type' instead.
3858
3859 2006-10-04  Martin Baulig  <martin@ximian.com>
3860
3861         Merged the Anonymous Methods patch.
3862
3863         * anonymous.cs, iterators.cs: The new anonymous methods code.
3864
3865         * statement.cs (Variable): New public abstract class.
3866         (LocalInfo.Variable): New public property.
3867         (LocalInfo.ResolveVariable): New public method.
3868         (Block.Flags): Add `IsIterator'.
3869         (Block.AddVariable): Improved the CS0136 check.
3870         (Block.AnonymousChildren): New public property.
3871         (Block.AddAnonymousChild): New public method.
3872         (ToplevelBlock): Update to use the new anonymous method framework.
3873         (ToplevelBlock.ctor): `container' is now a `Block' and not a
3874         `ToplevelBlock'; this is required to correctly implement the
3875         CS0136 check.
3876         (Fixed, Using): Use `TemporaryVariable' instead of directly
3877         creating the `LocalBuilder'.
3878
3879         * parameter.cs (Parameter.ResolveVariable): New public method.
3880         (Parameters.ResolveVariable): Likewise.
3881
3882         * ecore.cs (TemporaryVariable): Use the new `Variable' framework.
3883
3884         * class.cs (TypeContainer): Replaced the `iterators' list and
3885         corresponding methods with a list of `CompilerGeneratedClass'es.
3886         (TypeContainer.ResolveMembers): New public method.
3887         (Method): `IIteratorContainer' has been replaced by
3888         `IAnonymousHost'.
3889
3890         * expression.cs (VariableReference): New public abstract base
3891         class for `LocalVariableReference', `ParameterReference' and
3892         `This'.
3893
3894         * codegen.cs (EmitContext): Removed `capture_context',
3895         `HaveCaptureInfo', `EmitScopeInitFromBlock()' and `Capture*()'.
3896         (EmitContext.EmitThis): Removed.
3897
3898         * cs-parser.jay: Replace `iterator_container' with
3899         `anonymous_host'.       
3900
3901 2006-10-04  Martin Baulig  <martin@ximian.com>
3902
3903         * generic.cs (GenericMethod): Don't make this abstract.
3904         (Constraints.Clone): Added dummy implementation.
3905
3906 2006-10-04  Raja R Harinath  <harinath@gmail.com>
3907
3908         Fix #79577
3909         * namespace.cs (LookForAnyGenericType): Avoid nullref on
3910         'declspaces'.  Avoid allocating arrays willy-nilly.
3911
3912         Fix #79553
3913         * cfold.cs (BinaryFold): Move boolean Equality and Inequality
3914         cases out of the switch.
3915
3916 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
3917
3918         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Better error
3919         message when non-generic type is used with the type arguments.
3920         * expression.cs: Updated.
3921
3922 2006-09-28  Raja R Harinath  <rharinath@novell.com>
3923
3924         Fix #79013
3925         * convert.cs (Convert.ImplicitStandardConversionExists): Avoid infloop.
3926         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
3927         Change semantics slightly.  Don't insist on having only one
3928         temporary EmptyExpression -- just throttle the creation of new ones.
3929
3930         Fix #79451
3931         * ecore.cs (Expression.MemberLookup): Enable CS0229 errors for
3932         non-interfaces too.  If no methods are found, don't try to create
3933         a MethodGroupExpr.
3934
3935 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
3936
3937         * ecore.cs (ResolveAsTypeStep): Print better error when type can be
3938         generic type.
3939
3940         * namespace.cs (Namespace.LookForAnyGenericType): New method to help
3941         us produce better error message.
3942
3943 2006-09-27  Marek Safar  <marek.safar@seznam.cz>
3944
3945         * expression.cs (Binary.ResolveOperator): Warn about a side effect
3946         of the `|' operator.
3947
3948         * report.cs: A new warning added.
3949
3950 2006-09-27  Martin Baulig  <martin@ximian.com>
3951
3952         * generic.cs (GenericMethod): Don't make this abstract.
3953
3954 2006-09-27  Martin Baulig  <martin@ximian.com>
3955
3956         * report.cs
3957         (InternalErrorException): Added overloaded ctor taking a params array.
3958
3959 2006-09-26  Marek Safar  <marek.safar@seznam.cz>
3960
3961         * class.cs, codegen.cs, const.cs, cs-tokenizer.cs, driver.cs, ecore.cs:
3962         Fixed the cases when same error was reported twice.
3963
3964         * report.cs (SymbolRelatedToPreviousError): Simplified as all our messages
3965         now report symbol information.
3966
3967 2006-09-25  Martin Baulig  <martin@ximian.com>
3968
3969         * class.cs: Completely unified with the gmcs version.
3970
3971 2006-09-25  Martin Baulig  <martin@ximian.com>
3972
3973         * typemanager.cs (TypeManager.IsNullableType): New public function.
3974         (TypeManager.IsNullableTypeOf): Likewise.
3975         (TypeManager.IsNullableValueType): Likewise.
3976
3977         * class.cs (MethodCore): Added the `GenericMethod' argument from
3978         gmcs and also unified all classes derived from `MethodCore' with gmcs.
3979
3980 2006-09-24  Raja R Harinath  <harinath@gmail.com>
3981
3982         * convert.cs: Unify with gmcs version.
3983
3984 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
3985
3986         * decl.cs (DeclSpace.VerifyClsCompliance): When type has type parameters
3987         verify them as well.
3988
3989         * report.cs: New warning.
3990
3991 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
3992
3993         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
3994         for anonymous block with out argument.
3995
3996 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
3997
3998         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
3999         not used private events only.
4000
4001 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
4002
4003         * cfold.cs (BinaryFold): On the guest to unify empty constant cast.
4004
4005         * const.cs (Const.Define): Check for constant type.
4006         (Const.IsConstantTypeValid): Looks for valid constant types.
4007
4008         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
4009
4010         * ecore.cs (EmptyConstantCast): New common class for all constant based
4011         EmptyCast(s).
4012
4013         * expression.cs (Is.DoResolve): Handle null constant especially.
4014         (New.DoResolve): Check for new void().
4015         (MemberAccess.DoResolve): Cope with all kind of nulls.
4016
4017         * literal.cs (NullConstant): Uses EmptyConstantCast.
4018         (NullDefault): Based on EmptyConstantCast.
4019         (NullLiteral): Uses EmptyConstantCast.
4020
4021         * statement.cs (Block.ResolveMeta): Check for constant type.
4022
4023 2006-09-22  Martin Baulig  <martin@ximian.com>
4024
4025         * delegate.cs, attribute.cs: Merged with the gmcs versions.
4026
4027 2006-09-22  Raja R Harinath  <rharinath@novell.com>
4028
4029         * literal.cs (NullDefault): The type of default(IFoo) is 'IFoo',
4030         not the null type.
4031
4032         Fix part of #79451
4033         * typemanager.cs (Closure.Filter): Consider PrivateScope attributes.
4034         * decl.cs (DeclSpace.FindMemberToOverride): Likewise.  Reorganize
4035         code slightly.
4036
4037 2006-09-22  Martin Baulig  <martin@ximian.com>
4038
4039         * ecore.cs: Merged with the gmcs version.
4040
4041         * generic.cs (ConstructedType): New dummy class.
4042         (TypeArguments): Don't make this abstract.
4043
4044         * typemanager.cs
4045         (TypeManager.IsGenericTypeDefinition): New method.
4046         (TypeManager.GetGenericFieldDefinition): Moved here from gmcs.
4047
4048 2006-09-22  Raja R Harinath  <rharinath@novell.com>
4049
4050         * expression.cs (ComposedCast): Check for arrays of TypedReference
4051         before creating the type, not after.
4052
4053 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
4054
4055         * cfold.cs, const.cs, enum.cs, statement.cs: Updated
4056         after ToType change.
4057
4058         * constant.cs (Constant.ImplicitConversionRequired): Designed to used
4059         when constant must be implicitly convertible.
4060
4061         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
4062
4063         * ecore.cs (NullCast): Derives from NullConstant.
4064
4065         * expression.cs (Is.DoResolve): Removed useless variables.
4066         (Conditional.DoResolve): Quick hack for `Foo () ? null : null'.
4067         (New.Constantify): Add enum support.
4068         (MemberAccess.DoResolve): Add warning when accessing null constant or
4069         variable.
4070
4071         * generic.cs (GenericConstraints.IsReferenceType): Another dummy
4072         property.
4073
4074         * literal.cs (NullConstant): New abstract class with common
4075         functionality for all null specializations.
4076         (NullDefault): Represents default(X) when result can be
4077         reduced to null.
4078         (NullLiteral): Updated.
4079
4080         * report.cs: Add new warning.
4081
4082 2006-09-21  Martin Baulig  <martin@ximian.com>
4083
4084         * generic.cs (GenericTypeParameterBuilder): Removed this ugly hack.
4085
4086 2006-09-21  Martin Baulig  <martin@ximian.com>
4087
4088         * generic.cs (GenericConstraints): New dummy class.
4089         (Constraints): Likewise.
4090         (TypeParameter): Likewise.
4091         (TypeParameterName): Likewise.
4092         (GenericMethod): Likewise.
4093
4094         * typemanager.cs (TypeManager.GetGenericArguments): New method.
4095
4096         * decl.cs: Merged with the gmcs version.
4097
4098 2006-09-21  Raja R Harinath  <rharinath@novell.com>
4099
4100         * generic.cs (TypeParameter): Implement IMemberContainer.
4101         (GenericTypeParameterBuilder): New.  An abominable repugnant hack.
4102
4103         * rootcontext.cs: Unify with gmcs version.
4104
4105         * report.cs: Unify with gmcs version.
4106         * typemanager.cs (AddTypeParameter, LookupTypeParameter): Move
4107         from gmcs/generics.cs.
4108         * generics.cs (TypeParameter): New dummy class.
4109
4110         * support.cs: Unify with gmcs version.
4111
4112 2006-09-20  Raja R Harinath  <rharinath@novell.com>
4113
4114         * ecore.cs (MethodGroupExpr.ResolveGeneric): New dummy method.
4115         * expression.cs (MemberAccess, BaseAccess): Remove GMCS_SOURCE #ifdef.
4116
4117         * decl.cs (MemberName): Unify with gmcs, except for GetTypeExpression.
4118         * generic.cs (TypeArguments): New dummy class to help avoid #ifdefs.
4119         * mcs.exe.sources: Add generic.cs.
4120
4121         * codegen.cs: Unify with gmcs version.
4122
4123         * codegen.cs (IResolveContent.GenericDeclContainer): Copy from gmcs.
4124         (EmitContext): Add GenericDeclContainer implementation.
4125         * decl.cs (MemberCore, DeclSpace): Likewise.
4126         * namespace.cs: Remove #ifdef GMCS_SOURCE.
4127
4128         * namespace.cs (GetTypeInAssembly): Remove #ifdef GMCS_SOURCE.
4129         MCS TypeManager has a corresponding dummy method.
4130
4131 2006-09-19  Martin Baulig  <martin@ximian.com>
4132
4133         * expression.cs: Completely merged with the gmcs version.
4134
4135 2006-09-19  Martin Baulig  <martin@ximian.com>
4136
4137         * expression.cs (Invocation): Merged with the gmcs version.
4138         (ArrayAccess.GetStoreOpcode): Likewise.
4139
4140 2006-09-19  Martin Baulig  <martin@ximian.com>
4141
4142         * typemanager.cs
4143         (TypeManager.IsGenericMethod): Moved here from ../gmcs/generic.cs.
4144         (TypeManager.IsGenericMethodDefinition): Likewise.
4145
4146 2006-09-19  Martin Baulig  <martin@ximian.com>
4147
4148         * typemanager.cs
4149         (TypeManager.IsEqual): Moved the gmcs implementation here.
4150         (TypeManager.DropGenericTypeArguments): Likewise.
4151         (TypeManager.DropGenericMethodArguments): Likewise.
4152         (TypeManager.GetTypeArguments): Moved here from gmcs.
4153         (TypeManager.HasGenericArguments): Likewise.
4154
4155 2006-09-19  Martin Baulig  <martin@ximian.com>
4156
4157         * expression.cs (Binary): Merged with the gmcs version.
4158
4159 2006-09-19  Martin Baulig  <martin@ximian.com>
4160
4161         * expression.cs (Probe, As, Is): Merged with the gmcs version.
4162
4163 2006-09-19  Martin Baulig  <martin@ximian.com>
4164
4165         * typemanager.cs: Merged with the gmcs version.
4166
4167 2006-09-16  Raja R Harinath  <rharinath@novell.com>
4168
4169         * AssemblyInfo.cs [GMCS_SOURCE]: Unify with gmcs source.
4170         * driver.cs: Likewise.
4171
4172 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
4173
4174         A fix for #79401
4175         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
4176         only if parent type is class.
4177         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
4178         update.
4179
4180 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
4181
4182         * cs-parser.jay,
4183         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
4184         keywords are used.
4185         * typemanager.cs(CSharpName): Converts NullType to null.
4186
4187 2006-09-15  Martin Baulig  <martin@ximian.com>
4188
4189         * typemanager.cs
4190         (TypeManager.GetMethodName): Added mcs implementation.
4191         (TypeManager.IsEqual): Likewise.
4192
4193         * ecore.cs
4194         (SimpleName.RemoveGenericArity): Added dummy implementation.
4195
4196         * pending.cs: Merged with the gmcs version.     
4197
4198 2006-09-15  Martin Baulig  <martin@ximian.com>
4199
4200         * statement.cs: Merge with the gmcs version.
4201
4202 2006-09-15  Martin Baulig  <martin@ximian.com>
4203
4204         * statement.cs (Switch): Merge with the gmcs implementation
4205         (without nullables), which is newer.
4206
4207 2006-09-15  Martin Baulig  <martin@ximian.com>
4208
4209         * statement.cs (Block.Variables): Make this public.
4210         (ToplevelBlock.Parameters): Make this a property.
4211         (Throw.Resolve): Use `TypeManager.IsSubclassOf ()'.
4212
4213 2006-09-15  Martin Baulig  <martin@ximian.com>
4214
4215         * namespace.cs: Merge with the gmcs version.
4216
4217 2006-09-15  Martin Baulig  <martin@ximian.com>
4218
4219         * decl.cs (MemberName): Minor code cleanups.
4220
4221 2006-09-15  Martin Baulig  <martin@ximian.com>
4222
4223         * parameter.cs: Merge with the gmcs version.
4224
4225 2006-09-15  Martin Baulig  <martin@ximian.com>
4226
4227         * enum.cs: Merge with the gmcs version: 3005 is a warning in gmcs
4228         and an error in mcs.
4229
4230 2006-09-15  Martin Baulig  <martin@ximian.com>
4231
4232         * flowanalysis.cs: Merged from GMCS; added the generics code into
4233         a `GMCS_SOURCE' conditional so we can share this file.
4234
4235 2006-09-08  Martin Baulig  <martin@ximian.com>
4236
4237         * typemanager.cs (TypeManager.interlocked_type): New public field.
4238         (TypeManager.int_interlocked_compare-exchange): New public field.
4239         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
4240         enumerator types here and call InitGenericCoreTypes().
4241         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
4242         after calling InitEnumUnderlyingTypes().
4243
4244         * rootcontext.cs
4245         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
4246         `classes_second_stage'. 
4247
4248 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
4249
4250         * assign.cs, ecore.cs, expression.cs: Share error message text.
4251         * class.cs (FieldMember.Define): Check for varible of static type.
4252         * driver.cs (LoadAssembly): Uses error output for errors.
4253         * statement.cs: Updated.
4254
4255 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
4256
4257         * expression.cs (Error_OperatorCannotBeApplied): Report type instead of
4258         type instance.
4259
4260 2006-09-07  Martin Baulig  <martin@ximian.com>
4261
4262         * driver.cs
4263         (MainDriver): Revert r62663 from Marek; see #70506 for details.
4264
4265 2006-08-29  Miguel de Icaza  <miguel@novell.com>
4266
4267         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
4268         
4269 2006-08-17  Miguel de Icaza  <miguel@novell.com>
4270
4271         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
4272         #52019 and #79064, the use of the \uXXXX sequence in source code
4273         to represent unicode characters.
4274
4275 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
4276
4277         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
4278         support.
4279         * class.cs, ecore.cs, statement.cs: Merged to one error message.
4280
4281 2006-08-13  Miguel de Icaza  <miguel@novell.com>
4282
4283         * assign.cs: Catch attempts to assign to a method groups in += and
4284         report as 1656
4285
4286 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
4287
4288         A fix for #79056
4289         * cs-parser.jay: Don't destroy current array type by typeof of array's.
4290
4291 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
4292
4293         * class.cs (Method.Define): Issue a warning when generic method looks like
4294         an entry point.
4295         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
4296         as well.
4297
4298 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
4299  
4300         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
4301         looking for ctor.
4302         * decl.cs (MemberCache.FindMembers): When container is interface we need to
4303         search all base interfaces as a member can be ambiguous.
4304         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
4305         Constructor member type filter. 
4306         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
4307         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
4308         reporting for returned memberinfos.
4309         * report.cs: Updated.
4310         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
4311         version to work on all runtimes.
4312         (TypeManager.RealMemberLookup): Removed members filtering.
4313
4314 2006-08-08  Raja R Harinath  <rharinath@novell.com>
4315
4316         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
4317         (PropertyExpr.EmitAssign): Likewise.
4318         * expression.cs (Indirection.EmitAssign): Likewise.
4319         (LocalVariableReference.EmitAssign): Likewise.
4320         (ParameterReference.EmitAssign): Likewise.
4321         (Invocation.EmitArguments): Likewise.
4322         (ArrayAccess.EmitAssign): Likewise.
4323         (IndexerAccess.EmitAssign): Likewise.
4324         (This.EmitAssign): Likewise.
4325         (ConditionalLogicalOperator.Emit): Likewise.
4326
4327         Fix #79026
4328         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
4329         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
4330         leave it in after returning it.
4331         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
4332
4333 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
4334
4335         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
4336         message.
4337
4338 2006-08-03  Raja R Harinath  <rharinath@novell.com>
4339
4340         Fix cs0146-3.cs and cs0146-4.cs.
4341         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
4342         enclosing types don't depend on the current type.
4343
4344 2006-08-02  Raja R Harinath  <rharinath@novell.com>
4345
4346         Fix #77963
4347         * class.cs (TypeContainer.DoDefineMembers): Use
4348         FindBaseMemberWithSameName on Parent, since we're interested in
4349         whether we hide inherited members or not.
4350         (FindBaseMemberWithSameName): Make slightly more robust.
4351
4352         Fix the non-generic testcase from #77396
4353         * decl.cs (DeclSpace.DeclContainer): Remove override.
4354
4355         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
4356         declspaces for doppelgangers too.
4357         (UsingEntry): Implement IResolveContext.
4358         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
4359         'this' as the resolve context.
4360         (LocalAliasEntry): Likewise.
4361
4362         Implement parts of #77403
4363         * roottypes.cs (RootDeclSpace): New.  Used to represent the
4364         toplevel declaration space.  Each namespace declaration introduces
4365         a "partial" root declaretion space.
4366         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
4367         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
4368         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
4369         from 'current_namespace.SlaveDeclSpace'.
4370         (namespace_declaration): Likewise.
4371         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
4372         check.  It can't happen now.
4373         * decl.cs (DeclSpace.LookupType): Likewise.
4374         * driver.cs (MainDriver): Sanity check.
4375
4376 2006-08-01  Raja R Harinath  <rharinath@novell.com>
4377
4378         * decl.cs (DeclSpace.FindNestedType): Remove.
4379         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
4380         LookupTypeContainer to get the container of the nested type.
4381         * class.cs (TypeContainer.FindNestedType): Make non-override.
4382
4383 2006-07-31  Raja R Harinath  <rharinath@novell.com>
4384
4385         * decl.cs (DeclSpace.PartialContainer): Move field from ...
4386         * class.cs (TypeContainer.PartialContainer): ... here.
4387         (TypeContainer.AddBasesForPart): New helper.
4388         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
4389         instead.
4390         * cs-parser.jay (current_class): Convert to DeclSpace.
4391         (struct_declaration, interface_declaration, class_declaration):
4392         Use AddBasesForPart instead of .Bases directly.
4393         * const.cs, iterators.cs: Update to changes.
4394
4395 2006-07-28  Raja R Harinath  <rharinath@novell.com>
4396
4397         * class.cs (TypeContainer.AddMemberType): Rename from
4398         AddToTypeContainer.
4399         (TypeContainer.AddMember): Rename from AddToMemberContainer.
4400         (AddTypeContainer): New.  Combine AddClassOrStruct and
4401         AddInterface.
4402         (AddPartial): Update.  Add 'is_partial' argument.
4403         * roottypes.cs: Update to changes.
4404         * cs-parser.jay (push_current_class): New helper for handling
4405         current_container and current_class.
4406         (struct_declaration, interface_declaration, class_declaration):
4407         Use it.
4408
4409 2006-07-26  Raja R Harinath  <rharinath@novell.com>
4410
4411         * roottypes.cs: Rename from tree.cs.
4412
4413         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
4414         * tree.cs (Tree, ITreeDump): Remove types.
4415         * rootcontext.cs (tree, Tree): Remove fields.
4416         (root, ToplevelTypes): New.
4417         * *.cs: Update to rename.
4418
4419         * tree.cs (Tree.RecordDecl): Remove.
4420         (RootTypes.AddToTypeContainer): Record the toplevel type in its
4421         namespace here.
4422         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
4423
4424 2006-07-23  Raja R Harinath  <harinath@gmail.com>
4425
4426         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
4427         DoFlowAnalysis and OmitStructFlowAnalysis here.
4428         (ec.With): Rename from WithUnsafe and generalize.
4429         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
4430         (ec.WithFlowAnalyis): New.
4431         * ecore.cs, expression.cs, statement.cs: Update.
4432
4433 2006-07-22  Raja R Harinath  <harinath@gmail.com>
4434
4435         * statement.cs (Block.ResolveMeta): Simplify slightly.
4436
4437         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
4438         multiple boolean fields.  Convert InUnsafe, constant_check_state,
4439         check_state to flags.
4440         (CheckState, ConstantCheckState): Update.
4441         (InUnsafe): New read-only property.
4442         (FlagsHandle): Rename from CheckStateHandle and convert to handle
4443         arbitrary flags.
4444         (WithUnsafe): New helper similar to WithCheckState.
4445         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
4446         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
4447
4448 2006-07-21  Raja R Harinath  <rharinath@novell.com>
4449
4450         Make comparisons use the same IL irrespective of whether they're
4451         in a 'checked' or 'unchecked' context: one of the issues in #78899
4452         * codegen.cs (EmitContext.CheckState): Make read-only property.
4453         (EmitContext.ConstantCheckState): Likewise.
4454         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
4455         helper that implement a save/restore stack for CheckState
4456         values.  This is the only way to change check-state.
4457         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
4458         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
4459         (CheckedExpr.EmitBranchable): New forwarding method.
4460         (UnCheckedExpr): Likewise.
4461         * statement.cs (Block.ResolveMeta): Use WithCheckState.
4462         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
4463         (Checked.Resolve, checked.DoEmit): Likewise.
4464
4465 2006-07-20  Miguel de Icaza  <miguel@novell.com>
4466
4467         * anonymous.cs: Cache the resolved anonymous delegate, and return
4468         this so that the ResolveTopBlock is only triggered once, not
4469         twice.
4470
4471         Currently we trigger ResolvetopBlock twice due to a first pass of
4472         argument check compatibility, and a second pass that does the
4473         actual resolution.   
4474         
4475 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
4476
4477         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
4478         modifiers.
4479         * rootcontext.cs (Reset): Add helper_classes.
4480
4481 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
4482
4483         A fix for #78860
4484         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
4485         correctly.
4486
4487 2006-07-13  Miguel de Icaza  <miguel@novell.com>
4488
4489         * statement.cs (Lock): Handle expressions of type
4490         TypeManager.null_type specially.  Fixes #78770
4491
4492 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
4493
4494         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
4495         to an event.
4496
4497 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
4498
4499         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
4500         for accessors as well.
4501         * ecore.cs (EventExpr): Add AccessorTable.
4502
4503 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
4504
4505         A fix for #78738
4506         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
4507         for CS0122 where appropriate.
4508         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
4509         level attributes.
4510         (Filter): Assembly can be null in the case of top level attributes.
4511
4512 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
4513
4514         A fix for #78690
4515
4516         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
4517         is done at global level.
4518
4519 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
4520
4521         A fix for #77002, Implemented TypeForwarder support.
4522
4523         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
4524         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
4525         * typemanager.cs (): Add type_forwarder_attr_type.
4526
4527 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
4528
4529         * report.cs: Add CS0469 warning.
4530
4531 2006-06-21  Martin Baulig  <martin@ximian.com>
4532
4533         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
4534         the `try'-block, so we also report CS0016 etc. there.
4535
4536 2006-06-21  Martin Baulig  <martin@ximian.com>
4537
4538         * delegate.cs
4539         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
4540
4541 2006-06-21  Martin Baulig  <martin@ximian.com>
4542
4543         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
4544         also report CS1686 for parameters.
4545
4546 2006-06-21  Martin Baulig  <martin@ximian.com>
4547
4548         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
4549         instead of an error if the value is not implicitly convertible to
4550         the switch types; fixes #77964.
4551
4552 2006-06-21  Raja R Harinath  <rharinath@novell.com>
4553
4554         Fix #78673
4555         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
4556         FieldBuilder is null.
4557
4558         Fix #78662
4559         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
4560         'left' and 'right' before error-checking.
4561
4562 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
4563
4564         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
4565         Fixed bug #78601.
4566         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
4567         (FieldExpr.DoResolve): likewise.
4568         (PropertyExpr.InstanceResolve): likewise.
4569         (EventExpr.InstanceResolve): likewise. 
4570
4571 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
4572
4573         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
4574         attribute applicable tests for attribute argument.
4575
4576 2006-06-02  Raja R Harinath  <rharinath@novell.com>
4577
4578         Fix #78079
4579         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
4580         (Binary.OverloadResolve_PredefinedIntegral): New.
4581         (Binary.OverloadResolve_PredefinedFloating): New.
4582         (Binary.OverloadResolve_PredefinedString): New.
4583         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
4584         Follow the standard more closely, and treat numeric promotions in
4585         terms of overload resolution.
4586         (Binary.CheckShiftArguments): Simplify.
4587
4588 2006-06-01  Raja R Harinath  <rharinath@novell.com>
4589
4590         * flowanalysis.cs (MyBitVector): Simplify representation.
4591         (MyBitVector.Clone): Avoid allocating BitArray.
4592         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
4593         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
4594         (*): Update.  Change all references to MyBitVector.And and
4595         MyBitVector.Or to &= and |=.
4596
4597 2006-05-29  Raja R Harinath  <rharinath@novell.com>
4598
4599         Fix cs0231-[34].cs.
4600         * cs-parser.jay (formal_parameter_list): Extend the pattern below
4601         to param arguments too.
4602
4603 2006-05-26  Miguel de Icaza  <miguel@novell.com>
4604
4605         * cs-parser.jay: Catch another parsing form for arglist being
4606         followed by other arguments.  Fixes #78313.
4607
4608 2006-05-24  Raja R Harinath  <rharinath@novell.com>
4609
4610         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
4611         checking of out parameters to ...
4612         (FlowBranchingToplevel.Merge): ... here.
4613         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
4614         set, propagate the origin upward, and only complain if there was
4615         no other error.
4616         (FlowBranchingException.AddContinueOrigin): Likewise.
4617         (FlowBranchingException.AddReturnOrigin): Likewise.
4618         (FlowBranchingException.AddGotoOrigin): Likewise.       
4619
4620 2006-05-23  Raja R Harinath  <rharinath@novell.com>
4621
4622         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
4623         unreachable, skip it.
4624         (FlowBranchingException.Merge): Always propagate jumps, even if
4625         the finally block renders subsequent code unreachable.
4626
4627 2006-05-18  Raja R Harinath  <rharinath@novell.com>
4628
4629         Fix #77601
4630         * statement.cs (Goto.Resolve): Move responsibility for resolving
4631         'goto' to FlowBranching.AddGotoOrigin.
4632         (Goto.SetResolvedTarget): New.  Callback to set the
4633         LabeledStatement that's the target of the goto.
4634         (Goto.DoEmit): Use Leave instead of Br when crossing an
4635         unwind-protect boundary.
4636         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
4637         LookupLabel and adjust to new semantics.
4638         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
4639         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
4640         Goto.SetResolvedTarget to update target.
4641         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
4642         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
4643         AddBreakOrigin & co.  Delay propagation until ...
4644         (FlowBranchingException.Merge): ... this.
4645
4646         * statement.cs (Block.Resolve): Always depend on flow-branching to
4647         determine unreachability.  Kill workaround that originally emitted
4648         only one statement after an "unreachable" label (see infloop in
4649         test-515.cs).
4650
4651         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
4652         This is still "wrong", but anything better would probably need a
4653         multi-pass algorithm.
4654         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
4655         usage vector.  Force current usage vector to be reachable, to
4656         optimistically signify backward jumps.
4657         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
4658         detected.
4659         (FlowBranchingLabeled.Merge): New.  If no backward jump was
4660         detected, return the original salted-away usage vector instead,
4661         updated with appropriate changes.  Print unreachable warning if
4662         necessary.
4663         * statement.cs (Block.Resolve): Don't print unreachable warning on
4664         a labeled statement.
4665
4666 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
4667
4668         * driver.cs: Pass filename without path to AssemblyBuilder's 
4669         AddResourceFile. Fixes bug #78407.
4670
4671 2006-05-17  Raja R Harinath  <rharinath@novell.com>
4672
4673         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
4674         * flowanalysis.cs (FlowBranchingLabeled): ... here.
4675         (FlowBranching.MergeChild): Overwrite
4676         reachability information from Labeled branchings too.
4677
4678 2006-05-16  Raja R Harinath  <rharinath@novell.com>
4679
4680         * statement.cs (Goto.Resolve): Merge jump origins here ...
4681         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
4682
4683         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
4684         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
4685         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
4686         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
4687         here, ...
4688         * statement.cs (Goto.Resolve): ... not here.
4689         (Goto.Emit): Remove CS1632 check.
4690
4691 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
4692
4693         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
4694         error message.
4695
4696 2006-05-11  Raja R Harinath  <rharinath@novell.com>
4697
4698         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
4699         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
4700         (FlowBranchingException.Label): Likewise.
4701
4702         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
4703         given value.
4704         (MyBitVector.Or): Use it to avoid losing information (Count).
4705         (FlowBranching.MergeOrigins): Likewise.
4706
4707         * flowanalysis.cs (UsageVector.IsDirty): Remove.
4708         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
4709         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
4710         (UsageVector.ToString): Simplify.
4711         (UsageVector.MergeSiblings): Move here from ...
4712         (FlowBranching.Merge): ... here.
4713         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
4714         not a MyBitVector.
4715
4716 2006-05-10  Raja R Harinath  <rharinath@novell.com>
4717
4718         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
4719         null bitvector is treated as all-true.
4720
4721         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
4722         (MyBitVector): Rationalize invariants.  'vector != null' implies
4723         that we have our own copy of the bitvector.  Otherwise,
4724         'InheritsFrom == null' implies all inherited bits are true.
4725
4726 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
4727
4728         * statement.cs (LocalInfo): Add IsConstant.
4729         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
4730         local variable for constants.
4731
4732 2006-05-09  Raja R Harinath  <rharinath@novell.com>
4733
4734         * flowanalysis.cs (MyBitVector.Empty): New.
4735         (MyBitVector): Don't allow InheritedFrom to be null.
4736         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
4737         (UsageVector, FlowBranching): Update to changes.
4738
4739         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
4740         recursion.  The 'Parent == null' condition isn't sufficient for
4741         anonymous methods.
4742         (FlowBranching.AddBreakOrigin): Likewise.
4743         (FlowBranching.AddContinueOrigin): Likewise.
4744         (FlowBranching.AddReturnOrigin): Likewise.
4745         (FlowBranching.StealFinallyClauses): Likewise.
4746         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
4747         (FlowBranching.CheckOutParameters): Likewise.
4748         (FlowBranchingToplevel): Terminate all the above recursions here.
4749         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
4750         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
4751
4752         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
4753         toplevel block.
4754         (FlowBranchingToplevel): New.  Empty for now.
4755         (FlowBranching.MergeTopBlock): Update.
4756         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
4757         branching for the anonymous delegate.
4758         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
4759
4760         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
4761         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
4762         information at the start of the merge.  Reorganize.
4763
4764 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
4765
4766         * class.cs (MethodData.Define): Method cannot implement interface accessor.
4767
4768 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
4769
4770         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
4771         to newly introduced ctor.
4772
4773         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
4774         message to one place.
4775         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
4776         global namespace.
4777
4778 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
4779
4780         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
4781
4782         * ecore.cs (Expression.ResolveAsConstant): Updated.
4783
4784         * statement.cs (ResolveMeta): Updated.
4785
4786 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
4787
4788         * cs-parser.jay: __arglist cannot be used in initializer.
4789
4790 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
4791
4792         A fix for #77879
4793         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
4794         private types.
4795
4796 2006-05-05  Raja R Harinath  <rharinath@novell.com>
4797
4798         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
4799         (LabeledStatement): Add 'name' parameter.
4800         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
4801         (Block.AddLabel): Update to changes.
4802         * cs-parser.jay (labeled_statement): Likewise.
4803
4804         * flowanalysis.cs (BranchingType.Labeled): New.
4805         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
4806         (FlowBranchingLabeled): New.  Does nothing for now, but will
4807         eventually handle 'goto' flows.
4808         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
4809         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
4810         that's terminated ...
4811         (Block.Resolve): ... here.
4812
4813         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
4814         (UsageVector.MergeFinallyOrigins): Likewise.
4815         (FlowBranching.InTryOrCatch): Likewise.
4816         (FlowBranching.AddFinallyVector): Likewise.
4817         (FlowBranchingException): Update to changes.
4818
4819         Fix #78290
4820         * statement.cs (Return.Resolve): Move error checking to ...
4821         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
4822         (FlowBranchingException): Handle return origins like break and
4823         continue origins.
4824         (FlowBranching.UsageVector.CheckOutParameters): Remove.
4825
4826 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
4827
4828         A fix for #76122
4829         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
4830         filter.
4831
4832 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
4833
4834         A fix for #77543
4835         * class.cs (MethodData.Define): Do public accessor check only when method
4836         implements an interface.
4837
4838 2006-05-04  Raja R Harinath  <rharinath@novell.com>
4839
4840         Remove special handling of 'break'
4841         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
4842         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
4843         (UsageVector.Break): Remove.
4844         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
4845         reachability.
4846         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
4847
4848         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
4849         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
4850
4851 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
4852
4853         A fix for #75726
4854         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
4855         be the interface member.
4856
4857 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
4858
4859         A fix for #60069
4860         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
4861         for emitting small (int) values.
4862
4863 2006-05-03  Raja R Harinath  <rharinath@novell.com>
4864
4865         Fix #59427
4866         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
4867         control-flow passes through the 'finally' after merging-in all the
4868         control-flows from 'try' and the 'catch' clauses.
4869
4870         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
4871         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
4872         always true at the only non-recursive entry point.
4873         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
4874         FlowBranchingBreakable.
4875         (FlowBranchingLoop): Remove.
4876         * statement.cs (Return.DoResolve): Update to changes.
4877
4878         Fix #76471, #76665
4879         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
4880         (FlowBranching.CreateBranching): Handle it: create a
4881         FlowBranchingContinuable.
4882         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
4883         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
4884         except that it handles the 'continue' command.
4885         (FlowBranching.UsageVector.MergeOrigins): Rename from
4886         MergeBreakOrigins.
4887         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
4888         except that it overrides AddContinueOrigin.
4889         (FlowBranchingException): Override AddContinueOrigin, similar to
4890         AddBreakOrigin.
4891         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
4892         Create a new branching around the embedded statement.
4893         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
4894         control flow after the embedded statement.
4895         (Continue.Resolve): Move all error checking to AddContinueOrigin.
4896
4897         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
4898         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
4899         FlowBranchingBreakable.
4900         (FlowBranchingSwitch): Remove.
4901
4902         Fix test-503.cs
4903         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
4904         error reporting to ...
4905         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
4906         Rename from 'AddBreakVector'.  Add new location argument.  Return
4907         a bool indicating whether the 'break' crosses an unwind-protect.
4908         (FlowBranchingException.AddBreakOrigin): Add.
4909         (FlowBranchingException.Merge): Propagate 'break's to surrounding
4910         flowbranching after updating with the effects of the 'finally'
4911         clause.
4912         (FlowBranchingBreakable): New common base class for
4913         FlowBranchingLoop and FlowBranchingSwitch.
4914
4915         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
4916         embedded statement.
4917         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
4918
4919 2006-05-02  Raja R Harinath  <rharinath@novell.com>
4920
4921         * statement.cs (Do.Resolve): If the loop is infinite, set the
4922         barrier.
4923         (While.Resolve, For.Resolve): Set a barrier after the embedded
4924         statement.  There's no direct control flow that goes from the end
4925         of the embedded statement to the end of the loop.
4926         * flowanalysis.cs (FlowBranching.Infinite): Remove.
4927         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
4928         above ensure that the reachability is correctly computed.
4929
4930         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
4931         (UsageVector.MergeBreakOrigins): If the current path is
4932         unreachable, treat it as if all parameters/locals are initialized.
4933         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
4934         infinite loops before merging-in break origins.
4935
4936         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
4937         (Reachability.Reachable): Split part into ...
4938         (Reachability.Unreachable): ... this.  Simplify.
4939         (Reachability.IsUnreachable): Use 'Unreachable' instead.
4940
4941         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
4942         (Reachability.SetThrowsSometimes): Likewise.
4943         (FlowBranchingBlock.MergeTopBlock): Don't compare against
4944         TriState.Always, use corresponding property.
4945         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
4946         (Block.Resolve): Likewise.  Remove some redundant checks.
4947
4948 2006-05-02  Raja R Harinath  <harinath@gmail.com>
4949
4950         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
4951         (Reachability.Meet): Don't bother checking AlwaysThrows --
4952         barrier is always set.
4953         (FlowBranchingBlock.Merge): Likewise.
4954
4955 2006-05-01  Raja R Harinath  <harinath@gmail.com>
4956
4957         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
4958         checks for unreachable.
4959
4960 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
4961
4962         A fix for #77980
4963         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
4964
4965         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
4966         whether field is really assigned.
4967
4968 2006-04-30  Raja R Harinath  <harinath@gmail.com>
4969
4970         * flowanalysis.cs (Reachability): Make 4-argument constructor
4971         private.
4972         (Reachability.Meet): Rename from 'And'.  Remove static variant.
4973         (Reachability.Always): Rename from the highly misleading
4974         'Reachability.Never'.
4975         (FlowBranching.Merge): Update to changes.  Mark an impossible
4976         situation with a 'throw'.
4977         (*): Update to changes.
4978
4979 2006-04-29  Raja R Harinath  <harinath@gmail.com>
4980
4981         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
4982         Remove 'Undefined'.
4983         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
4984         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
4985         (*): Update to changes.
4986         * statement.cs: Update to changes.
4987
4988 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
4989
4990         A fix for #78049
4991         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
4992
4993 2006-04-28  Raja R Harinath  <harinath@gmail.com>
4994
4995         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
4996         dummy UsageVector.
4997
4998         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
4999         argument to two arguments: an usage-vector and a bool.  Move call
5000         to FlowBranching.Merge () ...
5001         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
5002
5003         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
5004         handling of loop and switch reachability to ...
5005         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
5006
5007 2006-04-27  Raja R Harinath  <harinath@gmail.com>
5008
5009         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
5010         handling to FlowBranchingLoop.InLoop.
5011         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
5012
5013 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
5014
5015         A fix for #78115
5016         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
5017         anonymous method is allowed from AnonymousContainer here.
5018
5019         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
5020
5021 2006-04-24  Raja R Harinath  <rharinath@novell.com>
5022
5023         Fix #78156
5024         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
5025
5026 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
5027
5028         A fix for #49011.
5029         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
5030         (DoubleConstant.Reduce): Ditto.
5031
5032 2006-04-23  Raja R Harinath  <rharinath@novell.com>
5033
5034         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
5035         Remove 'lvalue_right_side' argument.  Move parts to ...
5036         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
5037         (LocalVariable.DoResolveLValue): ... these.
5038
5039 2006-04-21  Raja R Harinath  <rharinath@novell.com>
5040
5041         Fix cs1655.cs
5042         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
5043         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
5044         (LocalVariableReference.DoResolveBase): Use it to implement new
5045         CS1655 check.
5046         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
5047         (Argument.Resolve): Simplify.  Move CS1510 check ...
5048         * ecore.cs (Expression.ResolveLValue): ... here.
5049         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
5050         (PropertyExpr.DoResolveLValue): Likewise.
5051         (FieldExpr.Report_AssignToReadonly): Likewise.
5052         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
5053         LValueMemberAccess or LValueMemberOutAccess on instance depending
5054         on it.
5055         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
5056         DoResolve as appropriate.
5057
5058 2006-04-20  Raja R Harinath  <rharinath@novell.com>
5059
5060         Fix #75800
5061         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
5062         implicit conversions on 'out' and 'ref' arguments.
5063
5064         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
5065         improve clarity.  Remove dead code.
5066
5067         Fix #66031
5068         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
5069         (Catch.Resolve): Resolve VarBlock if it exists.
5070
5071 2006-04-19  Miguel de Icaza  <miguel@novell.com>
5072
5073         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
5074         twice, this was some residual code, the enumerator was emitted
5075         properly in the two branche of if later.
5076
5077 2006-04-19  Raja R Harinath  <rharinath@novell.com>
5078
5079         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
5080         cast is never an lvalue.
5081         (Cast.DoResolve, Cast.ResolveRest): Combine.
5082         (Argument.Emit): Simplify slightly.  Move 'Expr is
5083         IMemoryLocation' check ...
5084         (Argument.Resolve): ... here.
5085         (Argument.Error_LValueRequired): Remove.  Inline into only user.
5086
5087         Simplifications.  Fix cs0191-2.cs
5088         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
5089         CS1649 and CS1651 to ...
5090         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
5091         the actual selection of the error code and message to a lookup
5092         table.  Add a dummy return value to simplify callsites.
5093         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
5094         readonly fields of other instances of the same type.  Move CS0197
5095         warning from ...
5096         * expression.cs (Argument.Resolve): ... here.  Simplify code.
5097         Ensure that ec.InRefOutArgumentResolving is only set during LValue
5098         resolution of an out or ref argument.  The code simplification
5099         above uses this invariant.
5100
5101 2006-04-18  Raja R Harinath  <rharinath@novell.com>
5102
5103         Possibly fix #77752.  Fix cs1690-[4-7].cs.
5104         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
5105         CheckMarshallByRefAccess.  Drop parameter.
5106         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
5107         warning.
5108         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
5109         InstanceExpression.
5110         * report.cs (AllWarnings): Add CS1690.
5111         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
5112         for ref access too.
5113         (LocalVariableReference.DoResolveBase): Update.
5114
5115 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5116
5117         * class.cs (MethodOrOperator): Moved common parts from method class.
5118         detect obsolete attributes.
5119         (Method.Define): Simplified as it reuses code from base.
5120         (Constructor.ValidAttributeTargets): Fixed issue found during
5121         refactoring.
5122         (Destructor.ValidAttributeTargets): Fixed issue found during
5123         refactoring.
5124         (Operator): Finished refactoring set off by #78020. Operator class is now
5125         ordinary method class.
5126
5127         * anonymous.cs: Updated.
5128
5129         * decl.cs (DeclSpace): Add IsGeneric
5130
5131 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5132
5133         * class.cs (Constructor.Emit): Don't emit the attributes twice.
5134
5135 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5136
5137         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
5138         detect obsolete attributes.
5139         (Method.CreateEmitContext): Moved to MethodOrOperator.
5140
5141 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
5142
5143         A fix for #78048.
5144         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
5145         customized exception to make crash detection easier.
5146         (MethodOrOperator): Started to work on new base class for methods and
5147         operators.
5148         (Method): Derives from MethodOrOperator.
5149         (Constructor.Emit): Emits its own attributes.
5150         (AbstractPropertyEventMethod.Emit): Ditto.
5151         (Operator): Derives from MethodOrOperator, will refactor fully in extra
5152         patch.
5153         (Operator.Emit): It's temporary more tricky than should be.
5154         
5155         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
5156
5157         * report.cs (InternalErrorException): Add ctor with inner exception.
5158
5159 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
5160
5161         A fix for #76744.
5162         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
5163         only not visible.
5164
5165 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
5166
5167         A fix for #77916.
5168         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
5169         array.
5170
5171 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
5172
5173         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
5174         attribute is present and Guid not.
5175         (Interface.ApplyAttributeBuilder): Ditto.
5176
5177         * attribute.cs: Add error message.
5178
5179 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
5180
5181         A fix for #78020.
5182
5183         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
5184         sources (it's composite) so hold them in extra array as they are used in
5185         Emit phase only. It worked in the previous versions by mistake.
5186         (Attribute.Emit): Emit attribute for more owners when exist.
5187
5188         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
5189         it has now different behaviour.
5190
5191 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
5192
5193         * constant.cs (Constant.IsDefaultInitializer): New method.
5194
5195         * class.cs: Updated.
5196
5197         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
5198         re-initialize default values. It saves KBs almost for every assembly.
5199         Thanks Zoltan for the idea.
5200         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
5201         (ArrayCreation.DoResolve): Resolve only once.
5202         (ArrayCreation.Emit): Emit static initializer only when it is faster.
5203         (ArrayCreation.GetAttributableValue): Cope with optimized values.
5204
5205 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
5206
5207         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
5208         From #77961.
5209
5210 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
5211
5212         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
5213         in an embedded statement too.
5214
5215 2006-04-01  Raja R Harinath  <rharinath@novell.com>
5216
5217         Fix #77958
5218         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
5219
5220 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
5221
5222         A fix for #77966.
5223
5224         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
5225         was not specified.
5226
5227         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
5228
5229 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
5230
5231         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
5232         phase.
5233
5234         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
5235         LocalTemporary change.
5236
5237         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
5238         TypeContainer.
5239         (ClassOrStruct.DefineFieldInitializers): Implemented static field
5240         initializers optimization.
5241         (ClassOrStruct.TypeAttr): Moved from modifiers.
5242         (Constructor.CheckBase): Don't crash when static ctor has parameters.
5243         (FieldBase.ResolveInitializer): Resolves initializer.
5244         (FieldBase.HasDefaultInitializer): New property.
5245
5246         * cs-parser.jay: Removed message.
5247
5248         * expression.cs (CompilerGeneratedThis): New specialization.
5249
5250         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
5251
5252 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
5253
5254         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
5255
5256 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
5257
5258         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
5259         be now EnumConstants only.
5260
5261 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
5262
5263         * attribute.cs, driver.cs: Reset more caches.
5264
5265 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5266
5267         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
5268
5269 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5270
5271         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
5272         for easier reuse. Updated all overrides.
5273         (IntegralConstant): New base class for all integral constants.
5274         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
5275         of the constant range, report custom error.
5276         (UIntConstant.Reduce): Fixed uint conversion.
5277
5278         * ecore.cs, literal.cs: Reduce updates.
5279
5280 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5281
5282         A fix for #75813.
5283
5284         * class.cs (Constructor.Define): Removed extra if for default ctors.
5285         A patch from Atsushi Enomoto.
5286
5287 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
5288
5289         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
5290         GetAttributableValue.
5291
5292         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
5293         when required.
5294
5295         * convert.cs (ImplicitConversionRequired): Error message moved to
5296         DoubleLiteral.
5297
5298         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
5299         automatic implicit conversion of an output value.
5300         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
5301
5302         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
5303         conversion.
5304         (TypeOf.GetAttributableValue): Add extra handling for object type.
5305
5306         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
5307         special error message.
5308
5309 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
5310
5311         * class.cs (Constructor.Emit): Don't crash when struct ctor is
5312         InternalCall.
5313         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
5314         compatible with MS runtime.
5315
5316 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
5317
5318         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
5319         attribute arguments here.
5320
5321         * class.cs (Indexer.Define): The check was moved to attribute class.
5322
5323 2006-03-22  Marek Safar  <marek.safar@seznam.cz>
5324
5325         * assign.cs, class.cs, codegen.cs, convert.cs, decl.cs, ecore.cs,
5326         expression.cs, typemanager.cs: Minor changes from gmcs to make merging
5327         easier.
5328
5329 2006-03-22  Raja R Harinath  <rharinath@novell.com>
5330
5331         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
5332         mcs to keep code differences small.
5333         * attribute.cs (Attribute.GetParameterDefaultValue): New.
5334         * typemanager.cs (parameter_default_value_attribute_type): New.
5335         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
5336         CS1908 check.
5337
5338 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
5339
5340         * expression.cs (StringConcat.Append): Reverted back to no warning state.
5341
5342 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
5343
5344         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
5345
5346         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
5347         the blocks too.
5348
5349 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
5350
5351         * doc-bootstrap.cs : fix build.
5352
5353 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
5354
5355         * expression.cs (StringConcat.Append): Issue a warning when empty string
5356         is going to append.
5357
5358 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
5359
5360         * assign.cs (CompoundAssign.ResolveSource): Removed.
5361
5362         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
5363         clean up.
5364
5365         * class.cs (TypeContainer.FindMethods): Removed.
5366         (TypeContainer.CheckMemberUsage): Made static.
5367
5368         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
5369
5370         * constant.cs (CheckRange): Removed unused type argument.
5371         (CheckUnsigned): Removed unused type argument.
5372
5373         * cs-parser.jay: Updated after MemberAccess clean up.
5374         Uses Length for empty string test.
5375
5376         * cs-tokenizer.cs: Uses Length for empty string test.
5377         (IsCastToken): Made static.
5378         (is_hex): Made static.
5379         (real_type_suffix): Made static.
5380
5381         * decl.cs (SetupCache): Made static.
5382         (OnGenerateDocComment): Removed unused ds argument.
5383
5384         * delegate.cs (VerifyDelegate): Removed unused argument.
5385
5386         * doc.cs: Uses Length for empty string test.
5387
5388         * driver.cs: Uses Length for empty string test.
5389
5390         * enum.cs (IsValidEnumType): Made static
5391
5392         * expression.cs (EnumLiftUp): Removed unused argument.
5393         (ResolveMethodGroup): Ditto.
5394         (BetterConversion): Ditto.
5395         (GetVarargsTypes): Ditto.
5396         (UpdateIndices): Ditto.
5397         (ValidateInitializers): Ditto.
5398         (MemberAccess.ctor): Ditto.
5399         (GetIndexersForType): Ditto.
5400
5401         * flowanalysis.cs: (MergeFinally): Removed unused argument.
5402
5403         * iterators.cs: Updated after MemberAccess clean up.
5404
5405         * location.cs: Uses Length for empty string test.
5406
5407         * namespace.cs: Uses Length for empty string test.
5408
5409          * report.cs (CheckWarningCode): Made static.
5410
5411         * statement.cs (LabeledStatement): Removed unused argument.
5412
5413         * typemanager.cs (FilterNone): Removed.
5414
5415 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
5416
5417         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
5418         obsolete.
5419
5420         * class.cs: Updated.
5421
5422 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
5423
5424         * cs-parser.jay.cs: __arglist is not allowed for delegates.
5425
5426 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
5427
5428         A fix for #77822.
5429
5430         * expression.cs (VerifyArgumentsCompat): Reverted to double error
5431         reporting, it's more tricky than I thought.
5432
5433 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
5434
5435         A fix for #77816.
5436
5437         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
5438         host container.
5439         (AnonymousMethod.ImplicitStandardConversionExists): New method.
5440         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
5441         Add more error reporting; Fixed issue with params.
5442
5443         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
5444
5445         * cs-parser.jay: AnonymousMethod requires host container.
5446
5447         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
5448
5449 2006-03-18  Raja R Harinath  <harinath@gmail.com>
5450
5451         * class.cs: Change 'TypeContainer ds' constructor argument to
5452         'DeclSpace parent'.  Some classes were missed below due to
5453         different naming convention.
5454
5455         * class.cs (MemberCore.Parent): Delete.  This makes the
5456         ParentContainer changes below enforceable by the compiler.
5457
5458         Treat pointers to enclosing declaration space as 'DeclSpace', not
5459         'TypeContainer'.
5460         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
5461         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
5462
5463         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
5464         of TypeContainer.
5465         (Block.AddThisVariable): Likewise.
5466         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
5467         (AbstractPropertyEventMethod.Emit): Likewise.
5468         (AbstractPropertyEventMethod.EmitMethod): Likewise.
5469         (GetMethod.Define, SetMethod.Define): Likewise.
5470         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
5471         (DelegateMethod.EmitMethod): Likewise.
5472
5473         Fix regression test-partial-13.cs.
5474         Rationalize use of PartialContainer.  Ensure that the partial
5475         class semantics can be tied to type-correctness, i.e., any
5476         violation will cause a compile error.
5477         * class.cs, const.cs: Access all fields that belong to class
5478         TypeContainer via ParentContainer.  Arguments of EmitContexts and
5479         Resolve()-like functions still use 'Parent'.
5480
5481         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
5482         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
5483         (PropertyMethod.CheckModifiers): Remove unused argument.
5484         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
5485         DeclSpace.
5486
5487 2006-03-17  Raja R Harinath  <harinath@gmail.com>
5488
5489         Make semantics of PartialContainer simpler.
5490         * decl.cs (DeclSpace.IsPartial): Remove.
5491         * class.cs (TypeContainer.IsPartial): Likewise.
5492         (TypeContainer..ctor): Set PartialContainer to point to self.
5493         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
5494         (TypeContainer.FindNestedType): Likewise.
5495         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
5496
5497 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
5498
5499         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
5500
5501 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
5502
5503         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
5504         classes.
5505
5506 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
5507
5508         * class.cs (Operator.Define): An error for base conversion was not
5509         reported correctly.
5510
5511 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
5512
5513         * iterator.cs : yield break is allowed in try statement which has
5514           catch clauses. Fixed bug #77767.
5515
5516 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
5517
5518         A fix for #77593, #77574.
5519
5520         * class.cs (MethodCore.CheckBase): Another if for operator.
5521
5522 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
5523
5524         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
5525         were not resolved
5526
5527         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
5528         (DelegateCreation.ImplicitStandardConversionExists): New method for just
5529         conversion test.
5530         
5531         *ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
5532         not needed.
5533
5534         * assign.cs, constant.cs, convert.cs, delegate.cs, expression.cs:
5535         Updated after another emitcontext usage was clean up. It should help us to
5536         synchronize with gmcs easier.
5537
5538 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
5539
5540         A fix for #77353.
5541
5542         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
5543         (Event.Define): ditto
5544         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
5545
5546         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
5547         Removed redundant code and set NewSlot for Invoke method too.
5548
5549         * parameter.cs (Parameters.ctor): Add custom, type ctor.
5550         (Parameters.MergeGenerated): New method. Use this method when you merge
5551         compiler generated argument with user arguments.
5552
5553 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
5554
5555         * attribute.cs (ResolveAsTypeTerminal): Removed.
5556
5557         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
5558         specialization for predefined types; 30% speed up.
5559         Finally placed obsolete check to right place.
5560         (Expression.ResolveType): Removed.
5561
5562         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
5563         Updated after ResolveType was removed.
5564
5565         * expression.cs (Cast.ctor): Check void cast.
5566         (Binary.ResolveAsTypeTerminal): Is never type.
5567         (Conditional.ResolveAsTypeTerminal): Is never type.
5568
5569         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
5570
5571 2006-03-01  Raja R Harinath  <rharinath@novell.com>
5572
5573         Fix #77679.
5574         * expression.cs (ParameterReference.DoResolveBase): Change return
5575         type to bool.
5576         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
5577         Update.
5578
5579         Fix #77628.
5580         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
5581
5582         Fix #77642.
5583         * typemanager.cs (GetFullNameSignature): Don't nullref on
5584         protected accessors.
5585
5586 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
5587
5588         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
5589         these two separated members to simplify the code.
5590         (Attribute.Resolve): Refactored to use new fields and methods.
5591         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
5592         implemented obsolete attribute checking.
5593         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
5594         implemented obsolete checking again. It look line never ending quest ;-)
5595         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
5596
5597         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
5598
5599         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
5600
5601         *class.cs (Property.Define): Add RegisterProperty call.
5602
5603         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
5604         argument groups (only 2).
5605
5606         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
5607         encoding expression to arguments.
5608         (Expression.ExprClassToResolveFlags): Just turned to property.
5609
5610         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
5611         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
5612         optimized as well as implemented support for zero-length attributes.
5613
5614         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
5615         Add caching of PropertyInfo's.
5616
5617 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
5618
5619         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
5620         error multiple times.
5621
5622 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
5623
5624         New partial class implementation.
5625         A fix for #77027, #77029, #77403
5626
5627         * attribute.cs (Attributable): Made attributes protected.
5628
5629         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
5630         the replacements of ClassPart and PartialContainer.
5631         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
5632         (TypeContainer.AddInterface): Ditto.
5633         (TypeContainer.AddPartial): The main method for partial classes. It checks
5634         for errors and merges ModFlags and attributes. At the end class is added to
5635         partial_parts list.
5636         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
5637         required here.
5638         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
5639         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
5640         from the rest of partial classes.
5641         (TypeContainer.GetClassBases): Simplified.
5642         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
5643         DefineType.
5644         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
5645         (TypeContainer.HasExplicitLayout): Uses Flags now.
5646         (PartialContainer): Removed.
5647         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
5648         (StaticClass): Was merged with Class.
5649         (Class.GetClassBases): class and static class bases are verified here.
5650         (Class.TypeAttr): Added static attributes when class is static.
5651         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
5652         (MemberBase): In some cases we need to call parent container for partial
5653         class. It should be eliminated but it's not easy now.
5654
5655         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
5656
5657         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
5658         partial classed to accumulate class comments.
5659         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
5660
5661         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
5662
5663         * driver.cs (MainDriver): Tree.GetDecl was removed.
5664
5665         * modifiers.cs (Modifiers): Add partial modifier.
5666
5667         * tree.cs (Tree.decl): Removed.
5668         (RootTypes): Started to use this class more often for root types
5669         specializations.
5670
5671 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
5672
5673         A fix for #77615
5674
5675         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
5676         external interface does not have an attribute.
5677
5678 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
5679
5680         Another prerequisites for new partial classs implementation.
5681         
5682         * attribute.cs (Attribute.Equal): Implemented.
5683         (Attribute.Emit): Changed as attributes can be applied more than twice.
5684         (Attributes.Emit): Check for duplicate attributes here.
5685
5686         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
5687         as a parameter, clean-up.
5688
5689 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
5690
5691         A fix for #77485
5692
5693         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
5694         contains obsolete attribute check which can in some cases look for base
5695         type of current class which is not initialized yet.
5696         (TypeContainer.BaseType): Replacement of ptype.
5697
5698         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
5699
5700 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
5701
5702         First of prerequisites for new partial classs implemention.
5703         
5704         * attribute.cs (Attributable): Extended by ResolveContext;
5705         Attributes finally have correct context for resolving in all cases.
5706         (AttachTo): Attribute owner is assigned here.
5707
5708         * codegen.cs (IResolveContext): Introduce new interface to hold
5709         all information needed in resolving phase.
5710         (EmitContext): Implements IResolveContext; more clean-up needed here.
5711         
5712         * decl.cs (MemberCore): Implemented IResolveContext.
5713
5714         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
5715         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
5716         parameter.cs, statement.cs, tree.cs, typemanager.cs:
5717         Refactored to use new IResolveContext instead of EmitContext; cleanup
5718
5719 2006-02-06  Miguel de Icaza  <miguel@novell.com>
5720
5721         * codegen.cs (EmitScopeInitFromBlock): check here the
5722         capture_context, there is no need to make two calls to the
5723         EmitContext. 
5724
5725         * anonymous.cs: Add some debugging messages that might help me
5726         track other instances of this problem in the future (the
5727         regression of test 467).
5728
5729         * cs-parser.jay: track the variable block, as we need to initalize
5730         any captured variables declared in this block for the "catch"
5731         portion of the "Try" statement.
5732
5733         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
5734         scope initialization for captured variables. 
5735
5736         Also, move the emit for the variables after the block location has
5737         been marked.
5738
5739 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
5740
5741         * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
5742
5743 2006-02-02  Miguel de Icaza  <miguel@novell.com>
5744
5745         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
5746         commit yesterday, the initialization for the roots is necessary.
5747         What is not necessary is the scope activation.
5748
5749 2006-02-02  Raja R Harinath  <rharinath@novell.com>
5750
5751         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
5752         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
5753         CS0206 checks.
5754         (Argument.Resolve): Remove CS0206 checks.
5755
5756 2006-02-01  Miguel de Icaza  <miguel@novell.com>
5757
5758         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
5759         scopes for all the roots, the scopes will now be emitted when the
5760         Blocks are entered.   [This change was wrong, fixed on 2006-02-02]
5761
5762         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
5763         code.  This reduces a lot of existing cruft.
5764         
5765         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
5766         that the ScopeInfo is generated as we enter the scope, not at the
5767         time of use, which is what we used to do before.
5768
5769         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
5770         every time a Block is about to be emitted if we have a
5771         CaptureContext. 
5772
5773 2006-02-01  Raja R Harinath  <rharinath@novell.com>
5774
5775         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
5776         (Reset): Update.
5777         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
5778
5779         * typemanager.cs (cons_param_array_attribute): Make private.
5780         (Reset): Set it to null.
5781         (InitCoreHelpers): Don't initialize it.
5782         (ConsParamArrayAttribute): New.  Initialize it as needed.
5783         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
5784
5785 2006-01-31  Miguel de Icaza  <miguel@novell.com>
5786
5787         * expression.cs: There might be errors reported during the
5788         selection of applicable methods.  If there are errors, do not
5789         continue execution as it will lead the compiler to crash.
5790
5791 2006-01-30  Miguel de Icaza  <miguel@novell.com>
5792
5793         * expression.cs: Member access is not allowed on anonymous
5794         methods.  Fixes #77402.
5795
5796 2006-01-30  Raja R Harinath  <rharinath@novell.com>
5797
5798         Fix #77401
5799         * cs-parser.jay (VariableDeclaration): Don't set
5800         current_array_type to null.
5801         (field_declaration, event_declaration, declaration_statement):
5802         Set it to null here.
5803
5804 2006-01-28  Raja R Harinath  <harinath@gmail.com>
5805
5806         * typemanager.cs (GenericParameterPosition): New.
5807         * doc.cs: Use it.
5808
5809 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
5810
5811         * doc.cs : To process "include" elements, first we should create
5812           another list than XmlNodeList, because it could result in node
5813           removal, which could result in that the XmlNodeList gives up
5814           yielding next node.
5815
5816           (Also made code identical to gmcs again.)
5817
5818 2006-01-25  Miguel de Icaza  <miguel@novell.com>
5819
5820         * ecore.cs: Introduce an error report that we were not catching
5821         before, if not silent, we must report the error.  Gonzalo ran into
5822         it.
5823
5824 2006-01-23  Miguel de Icaza  <miguel@novell.com>
5825
5826         A fix for bug: #76957
5827         
5828         * iterators.cs (MoveNextMethod.CreateMethodHost): call
5829         ComputeMethodHost before creating the method, this is a new
5830         requirement. 
5831
5832         * anonymous.cs (AnonymousContainer): Now we track all the scopes
5833         that this method references (RegisterScope).  The actual scope
5834         where the method is hosted is computed with the ComputeMethodHost
5835         before we create the method.
5836
5837         Moved the Deepest routine here.
5838
5839         (AnonymousContainer.ComputeMethodHost): New routine used to
5840         compute the proper ScopeInfo that will host the anonymous method.
5841
5842         (ScopeInfo): Deal with multiple roots.  The problem was that we
5843         did not have a unique root where all ScopeInfos could be hanged
5844         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
5845         of roots.  
5846
5847         Remove AdjustMethodScope which is now computed at the end.  Remove
5848         LinkScope which did a partial link, instead link all ScopeInfos
5849         before code generation from the new "LinkScopes" routine. 
5850
5851         Simplify all the Add* routines as they no longer need to maintain
5852         the tree, they just need to record that they are using variables
5853         from a ScopeInfo.
5854
5855         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
5856         routines to produce the forest of ScopeInfo trees.
5857
5858         * class.cs (TypeContainer.AppendMethod): This is just like
5859         AddMethod, but ensures that an interface implementation method
5860         (IEnumerable.XXX) is not inserted at the beginning of the queue of
5861         methods, but at the end.
5862
5863         We use this functionality to ensure that the generated MoveNext
5864         method in the iterator class is resolved/emitted before the
5865         enumerator methods created.   
5866
5867         This is required because the MoveNext method computes the right
5868         ScopeInfo for the method.  And the other methods will eventually
5869         need to resolve and fetch information computed from the anonymous
5870         method. 
5871
5872 2006-01-21  Raja R Harinath  <harinath@gmail.com>
5873             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
5874
5875         Fix rest of #76995.
5876         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
5877         the 'aliases' hash.
5878         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
5879         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
5880
5881 2006-01-18  Raja R Harinath  <rharinath@novell.com>
5882
5883         Fix #76656, cs0231-2.cs.
5884         * cs-parser.jay (formal_parameter_list): Make error case catch
5885         more issues.
5886         (parenthesized_expression_0): Add CS1026 check.
5887         (invocation_expression): Remove unused { $$ = lexer.Location }.
5888
5889 2006-01-17  Raja R Harinath  <rharinath@novell.com>
5890
5891         Fix #76824.
5892         * cs-parser.jay (statement_expression): Don't list out the
5893         individual statement-expressions.  Convert syntax error into
5894         CS0201 check.
5895
5896 2006-01-16  Raja R Harinath  <rharinath@novell.com>
5897
5898         Fix #76874.
5899         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
5900         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
5901         CheckIntermediateModification.
5902         (FieldExpr.DoResolve): Add new two-argument version that
5903         allows us to resolve the InstanceExpression as an lvalue.
5904         The one-argument variant is now just a wrapper.
5905         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
5906         Resolve the lhs as an lvalue if the it has a value type.
5907         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
5908         from Assign.DoResolve.
5909         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
5910         resolved as an lvalue.
5911         (PropertyExpr.DoResolve): Update.
5912         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
5913         has a value type.  Move CS1612 check here from
5914         CheckIntermediateModification.
5915         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
5916         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
5917         'right_side' of a ResolveLValue on an 'out' argument.
5918         (EmptyExpression.LValueMemberAccess): New.  Used as the
5919         'right_side' of a propagated ResolveLValue on a value type.
5920         (LocalVariableReference.DoResolveBase): Recognize
5921         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
5922         Add CS1654 check.
5923         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
5924         EmptyExpression.Null.
5925
5926 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
5927
5928         * typemanager.cs : added IsGenericParameter(). In mcs it always
5929           return false.
5930         * doc.cs : for generic parameters, use GenericParameterPosition,
5931           not FullName.
5932
5933 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
5934
5935         * expression.cs: Fix Console.WriteLine ((this = x).foo);
5936
5937 2006-01-12  Miguel de Icaza  <miguel@novell.com>
5938
5939         This fixes the problem where we used ldfld instead of ldflda to
5940         load the "THIS" pointer on captured parameters, when THIS is a
5941         value type.  See bug #77205.
5942         
5943         * iterators.cs (CapturedThisReference.Emit): Pass false to
5944         EmitThis (we do not need the address).
5945
5946         * codegen.cs (EmitThis): it needs to know whether we need the
5947         address of `this' or not.  This is used by value types.  
5948
5949         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
5950         every other call passes false.
5951
5952 2006-01-12  Raja R Harinath  <rharinath@novell.com>
5953
5954         Fix #77221.
5955         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
5956         GetOverride.
5957         * expression.cs (Invocation.OverloadResolve): Update.
5958         (Invocation.DoResolve): Avoid double resolution of invocation.
5959
5960 2006-01-11  Raja R Harinath  <rharinath@novell.com>
5961
5962         Fix #77180.
5963         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
5964         unary negation of floating point types as 0-expr; negation cannot
5965         overflow in floating point types.
5966
5967         Fix #77204.
5968         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
5969         on operands of 'void' type.
5970
5971         Fix #77200.
5972         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
5973         and ExclusiveOr for boolean constants too.
5974
5975 2006-01-09  Raja R Harinath  <rharinath@novell.com>
5976
5977         Fix #75636.
5978         * expression.cs (Invocation.OverloadResolve): Replace reflected
5979         override methods with their base virtual methods, rather than
5980         skipping over them.
5981         * typemanager.cs (TypeManager.GetOverride): New.
5982
5983 2006-01-05  Jb Evain  <jbevain@gmail.com>
5984
5985         * class.cs (Property.Define, Indexer.Define): do not tag the
5986         properties as SpecialName | RTSpecialName.
5987
5988 2006-01-04  Miguel de Icaza  <miguel@novell.com>
5989
5990         * class.cs (MethodCore.IsDuplicateImplementation): This method was
5991         doing a low-level comparission of parameter types.  It was lacking
5992         a check for __argslist. 
5993
5994 2005-12-30  Miguel de Icaza  <miguel@novell.com>
5995
5996         * expression.cs (ParameterReference.DoResolveBase): Allow
5997         reference parameters if they are local to this block. 
5998
5999         This allows the ref and out parameters of a delegate to be used in
6000         an anonymous method, for example:
6001
6002         delegate void set (out int x);
6003
6004         set s = delegate (out int x){
6005                 x = 0;
6006         };
6007
6008         This is used by functionality introduced late in the C# language.
6009         
6010         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
6011         method that take ref and out parameters. 
6012
6013         Fixes #77119 which was a late change in the spec.
6014
6015 2005-12-23  Miguel de Icaza  <miguel@novell.com>
6016
6017         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
6018         parent if its the same scope.  Fixes #77060.
6019
6020 2005-12-21  Miguel de Icaza  <miguel@novell.com>
6021
6022         * driver.cs: Report the case of no source files and no -out:
6023         argument provided.
6024
6025 2005-12-20  Raja R Harinath  <rharinath@novell.com>
6026
6027         Fix #77035.
6028         * expression.cs (ComposedCast.GetSignatureForError): Define.
6029
6030 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
6031
6032         Fix #76995
6033
6034         * namespace.cs (NamespaceEntry): Add extern_aliases as a
6035         ListDictionary, to contain the ExternAliasEntry entries (in
6036         addition to the NamespaceEntry.aliases hashtable). This field is
6037         shared between the original entry and its doppelganger (bodyless 
6038         copy of it).
6039         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
6040         extern_aliases field.
6041         (NamespaceEntry.Lookup): Move the IsImplicit check after the
6042         lookup in extern_aliases.
6043
6044 2005-12-16  Raja R Harinath  <rharinath@novell.com>
6045
6046         Fix #77006.
6047         * class.cs (TypeContainer.Mark_HasEquals): New.
6048         (TypeContainer.Mark_HasGetHashCode): New.
6049         (ClassPart): Override them.
6050         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
6051
6052         Fix #77008.
6053         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
6054         'parent' argument to the base constructor.
6055
6056         Remove all mention of TypeContainer from decl.cs.
6057         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
6058         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
6059         (DeclSpace.DeclSpace): Likewise.
6060         (DeclSpace.DefineMembers): Remove unused argument.
6061         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
6062         debugging check -- we don't care if the debug code throws an
6063         InvalidCastException instead of an InternalErrorException.
6064         * class.cs (TypeContainer.DefineMembers): Update to changes.
6065         (TypeContainer.DoDefineMembers): Likewise.
6066         (TypeContainer.GetMethods): Likewise.
6067         (PropertyMember.Define): Likewise.
6068         (MemberBase.Parent): New property that forwards to
6069         MemberCore.Parent, but ensures that we get a TypeContainer.
6070         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
6071         (RootContext.PopulateTypes): Likewise.  Remove special case code
6072         for !RootContext.StdLib: DefineMembers is idempotent.
6073
6074 2005-12-14  Miguel de Icaza  <miguel@novell.com>
6075
6076         * convert.cs (ExplicitConversionCore): Check the return value from
6077         ExplicitConversionCore which can return null on failure.  Fixes #76914
6078
6079 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
6080
6081         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
6082
6083 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
6084
6085         * doc.cs : The search for referenced namespace was insufficient to
6086           get global one as it used to do. Fixed bug #76965.
6087
6088 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
6089
6090         * doc.cs : check name in cref in the last phase that whether it is
6091           namespace or not.
6092
6093 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
6094
6095         * cs-tokenizer.cs : reverted the latest change: it somehow broke
6096           Mono.C5.
6097
6098 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
6099
6100         * doc.cs : so it turned out that we cannot skip override check for 
6101           interface members. Fixed bug #76954.
6102
6103 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
6104
6105         * cs-tokenizer.cs : fixed bug #75984:
6106           - #warning and #error should not be handled when the source line
6107             is disabled.
6108           - #line is not checked strictly when the source line is disabled.
6109           - #define and #undef is on the other hand checked strictly at any
6110             state.
6111
6112 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
6113
6114         * cs-tokenizer.cs : missing Location (actually, filename) in one of
6115           CS1027 report.
6116
6117 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
6118
6119         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
6120
6121         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
6122         event initializers.
6123         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
6124         (FieldBase.Initializer): Initializer is now optional.
6125         (EventField.Define): Only event field can have initializer.
6126
6127         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
6128
6129         * const.cs (Const): Reuse initializer.
6130
6131         * cs-parser.jay: Updated after FieldBase changes.
6132         Added current_array_type to simplify array initializers.
6133
6134         * ecore.cs (NullCast.IsDefaultValue): Implemented.
6135
6136         * expression.cs, iterators.cs: Updated.
6137
6138         * namespace.cs (NamespaceEntry): Made UsingFound private.
6139
6140 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
6141
6142         * parameterCollection.cs: Obsolete, removed.
6143         * parser.cs: Obsolete, removed.
6144
6145 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
6146
6147         Fix #76849.
6148         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
6149
6150         * enum.cs (Enum.Define): Set obsolete context here.
6151
6152 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
6153
6154         * doc.cs :
6155           - FindDocumentedMember() now expects 1) paramList as null
6156             when "we don't have to check the number of parameters" and
6157             2) Type.EmptyTypes when "there is no arguments".
6158           - Introduced FoundMember struct to hold the exact type which was
6159             used to find the documented member (the above change broke
6160             test-xml-044; it might be better just to use DeclaringType than
6161             what MS does, like this change does, but it depends on usage.)
6162
6163 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
6164
6165         * doc.cs : documented member might be from DeclaringType for nested
6166           types. Fixed bug #76782.
6167
6168 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
6169
6170         * anonymous.cs: Have the param code handle leaving copies on the
6171         stack etc. Allows anonymous params to take part in the assignment
6172         code (++, +=, etc). Fixes bug #76550
6173
6174         * expression.cs: Handle the prepare_for_load/leave_copy by passing
6175         it down to the anon code.
6176
6177         * iterators.cs: Use dummy var here
6178
6179         * codegen.cs: Handle new vars
6180
6181 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
6182
6183         Fix #76849.
6184         * class.cs (MethodData.Define): Set proper Obsolete context.
6185
6186         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
6187         obsolete context.
6188         (FieldExpr.DoResolve): Ditto.
6189
6190 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
6191
6192         Fix #76849.
6193         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
6194         parent is not obsolete.
6195
6196 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
6197
6198         * doc.cs : (FindDocumentedMember) find parameterless members first
6199           and get CS0419 in the early stage. Fixed first case of bug #76727.
6200
6201 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
6202
6203         Fix #76859.
6204         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
6205         no error was reported.
6206
6207         *expression.cs (Binary.DoResolve): left can be null.
6208
6209 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
6210
6211         Fix #76783.
6212         * class.cs (MethodData.Emit): Parameters should be labeled first.
6213
6214 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
6215
6216         Fix #76761.
6217         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
6218
6219 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
6220
6221         * attribute.cs (AreParametersCompliant): Moved to Parameter.
6222
6223         * class.cs (MethodCore): Parameter clean up.
6224         (IMethodData): Added ParameterInfo.
6225         (MethodData): Parameter clean up.
6226         (Indexer.Define): Parameter clean up.
6227
6228         * anonymous.cs,
6229         * codegen.cs,
6230         * cs-parser.jay,
6231         * decl.cs,
6232         * doc.cs,
6233         * ecore.cs,
6234         * flowanalysis.cs,
6235         * iterators.cs,
6236         * pending.cs,
6237         * statement.cs,
6238         * typemanager.cs: Parameter clean up.
6239
6240         * delegate.cs (Define): Get rid of duplicated code.
6241
6242         * expression.cs (ParameterReference): Removed useless parameters
6243         and simplified.
6244         (Invocation): Ditto.
6245
6246         * parameter.cs (ParamsParameter): New class, params specialization.
6247         (ArglistParameter): Attemp to separate arglist.
6248         (Parameter): Refactored to be reusable and faster.
6249         (Parameter.Modifier): Made understandable.
6250         (Parameters): Changed to be used as a class for `this' assembly
6251         parameters. Refactored to use new specialized classes.
6252
6253         * support.cs (ParameterData): Added Types property.
6254         (InternalParameters): Deleted.
6255
6256 2005-08-20  Martin Baulig  <martin@ximian.com>
6257
6258         Merging this patch from GMCS to fix #75867.
6259
6260         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
6261         scope if we don't already have it.
6262
6263 2005-11-17  Martin Baulig  <martin@ximian.com>
6264
6265         * anonymous.cs
6266         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
6267         inherit the scope from our parent.  Fixes #76653.
6268
6269 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
6270
6271         * doc.cs : the previous patch does not actually fix the bug.
6272           PropertyInfo override check is now implemented and really fixed it.
6273         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
6274
6275 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
6276
6277         * doc.cs : apply "override filter" also to properties.
6278           Fixed bug #76730.
6279
6280 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
6281
6282         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
6283           no need to check overrides. For classes, omit those results from 
6284           interfaces since they must exist in the class. Fixed bug #76726.
6285
6286 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
6287
6288         * typemanager.cs : (GetFullNameSignature) differentiate indexers
6289           with different parameters. Fixed the second problem in #76685.
6290
6291 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
6292
6293         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
6294           get expected 'protected' access in CheckValidFamilyAccess()).
6295           Fixed bug #76692.
6296
6297 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
6298
6299         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
6300           Fixed bug #76705.  CS1569 was incorrectly commented out.
6301
6302 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
6303
6304         * doc.cs : use Invocation.IsOverride() to do real override check.
6305         * expression.cs : made Invocation.IsOverride() internal.
6306
6307 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
6308
6309         * doc.cs : use TypeManager.FindMembers() instead of (possible)
6310           TypeBuilder.FindMembers() and filter overriden base members out.
6311           Fixed bug #76990.
6312
6313 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6314
6315         * doc.cs : ref/out parameters are represented as '@' (instead of
6316           '&' in type FullName). Fixed bug #76630 (additionally crefs).
6317
6318 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6319
6320         * doc.cs : when there was no '.' in cref to methods in doc comment,
6321           then parameters were missing in the output. Fixed bug #76691.
6322
6323 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6324
6325         * driver.cs : don't output docs when there is an error.
6326           Fixed bug #76693.
6327
6328 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6329
6330         * doc.cs :
6331           Now it should detect indexers. Fixed primary concern in bug #76685.
6332           Fixed CS0419 message to not show the identical member signature in
6333           the message.
6334
6335 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
6336
6337         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
6338           instead of Type.FindMembers() since it does not handle events.
6339           Fixed bug #71604.
6340
6341 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
6342
6343         * codegen.cs: Fixed typo (speficied -> specified).
6344
6345 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
6346
6347         Fix #76369.
6348         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
6349
6350 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
6351
6352         * attribute.cs: Changed error message.
6353
6354         * cs-tokenizer.cs: One more check.
6355
6356 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
6357
6358         * statement.cs (Block.Resolve): Ignore empty statement.
6359
6360 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
6361
6362         * report.cs: Made error/warning methods more strict to avoid
6363         their misuse.
6364
6365         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
6366         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
6367         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
6368         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
6369
6370 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
6371
6372         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
6373         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
6374
6375         * class.cs (TypeContainer.IsComImport): New property.
6376         (Constructor.Define): Create proper ctor for ComImport types.
6377
6378         * expression.cs (New.CheckComImport): Fixed.
6379
6380 2005-11-07  Miguel de Icaza  <miguel@novell.com>
6381
6382         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
6383         that a parameter has been captured does not mean that we do not
6384         have to do the rest of the processing.  This fixes the second part
6385         of #76592.  If there was another anonymous method capturing
6386         values in the past, the Scope would never be set for the second
6387         method that captured the same parameter.
6388
6389         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
6390         properly manipulate the stack.   Second part of fix for #76592.
6391
6392         * expression.cs (New): Add support for invoking "new" on
6393         interfaces that have been flagged with the ComImport attribute and
6394         the CoClass.  Fixes #76637 
6395
6396         * statement.cs (Try.DoEmit): When a variable is captured, do not
6397         try to emit the vi.LocalBuilder variable as it has been captured.
6398         Create a temporary variable and store the results on the
6399         FieldBuilder.  Fixes #76642
6400
6401 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
6402
6403         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
6404
6405         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
6406
6407         * expression.cs (Binary.DoResolve): Added && optimalization.
6408     
6409         * typemanager.cs (AddUserType): Removed useless argument.
6410
6411 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
6412
6413         * statement.cs (Block.variables): Uses ListDictionary.
6414
6415 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
6416
6417         Fix #75969.
6418         * class.cs (PartialContainer.EmitType): Customized to emit
6419         security attributes.
6420         (ClassPart.ApplyAttributeBuilder): Transform security attribute
6421         for partial classes.
6422
6423 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
6424
6425         Fix #76599.
6426         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
6427         access has to be fixed.
6428         
6429         * typemanager.cs (IsUnmanagedType): Wrong common field type.
6430
6431 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
6432
6433         Fix #76590.
6434         * ecore.cs (NullCast.Reduce): Implemented.
6435
6436         * expression.cs (ArrayCreation.CheckIndices): Correcly check
6437         constant type.
6438         
6439         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
6440         properly.
6441         (Foreach.Resolve): Catch null properly.
6442
6443 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
6444  
6445         * cs-tokenizer.cs: Warning text fix.
6446
6447         * driver.cs: AllWarningNumbers exposed on public interface.
6448
6449         * report.cs (): Reviewed warning numbers.
6450         (IsValidWarning): Use binary search.
6451
6452 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
6453  
6454         * driver.cs: Implemeted resource visibility.
6455         (Resources): New class for code sharing between /res: and
6456         /linkres:
6457  
6458 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
6459
6460         Fix #76568.
6461         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
6462         folding.
6463         
6464         * convert (Convert.ImplicitReferenceConversion): NullCast holds
6465         contants only.
6466         
6467         * ecore.cs (NullCast): Child is contant only.
6468         
6469         * literal.cs (NullLiteral.Reduce): null can be converted to any
6470         reference type.
6471
6472 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
6473
6474         * driver.cs: Use Encoding.Default as default code page instead
6475           of ISO-28591.
6476
6477 2005-10-27  Raja R Harinath  <rharinath@novell.com>
6478
6479         Fix #76085.
6480         * expression.cs (Invocation.Error_InvalidArguments): Handle
6481         __arglist parameters.
6482         (Invocation.VerifyArgumentsCompat): Likewise.
6483         * support.cs (ReflectionParameters.GetSignatureForError): Print
6484         __arglist parameters.
6485         (InternalParamters.GetSignatureForError): Likewise.
6486         * parameter.cs (Parameters.GetSignatureForError): Likewise.
6487
6488 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
6489
6490         * attribute.cs (GetPropertyValue): Made public.
6491
6492         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
6493         Resolve.
6494         Add new property WrapNonExceptionThrows to handle 2.0 assembly
6495         attribute.
6496         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
6497         is not defined.
6498         
6499         * driver.cs: Reflect method name change.
6500         
6501         * statement.cs (Try.Resolve): Warn when try has both general
6502         exception handlers.
6503         
6504         * typemanager.cs: runtime_compatibility_attr_type new predefined
6505         type.
6506
6507 2005-10-26  Raja R Harinath  <harinath@gmail.com>
6508
6509         Fix #76419.
6510         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
6511         treat it as an empty parameter list.
6512
6513 2005-10-26  Raja R Harinath  <rharinath@novell.com>
6514
6515         Fix #76271.     
6516         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
6517         ResolveAsTypeStep silent.
6518         * statement.cs (Block.AddConstant): Mark block as used.
6519         (Block.ResolveMeta): Avoid piling on error messages
6520         if a constant initializer resolution fails.
6521
6522 2005-10-25  Raja R Harinath  <rharinath@novell.com>
6523
6524         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
6525         Remove.
6526         (NamespaceEntry.VerifyAllUsing): New.
6527         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
6528         behaviour.  Delegates actual resolution of alias to ...
6529         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
6530         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
6531         Update.
6532         * driver.cs (Driver.MainDriver): Update.
6533         
6534         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
6535         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
6536         property.
6537         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
6538         Remove.
6539         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
6540         RootNamespace.DefineNamespacesForAll.
6541
6542 2005-10-24  Raja R Harinath  <harinath@gmail.com>
6543
6544         * typemanager.cs (assemblies, external_aliases, modules)
6545         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
6546         (ComputeNamespaces, GetRootNamespace): Remove extra staging
6547         overhead.  Move resposibility ...
6548         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
6549         * driver.cs, attribute.cs, codegen.cs: Update to changes.
6550
6551 2005-10-23  Raja R Harinath  <harinath@gmail.com>
6552
6553         * namespace.cs (RootNamespace.all_namespaces): Renamed from
6554         cached_namespaces.  Improve usage.
6555         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
6556         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
6557         Move from GlobalRootNamespace and simplify.
6558         (RootNamespace.Global): Make instance variable.
6559         (RootNamespace.RootNamespace): Add "alias name" parameter.
6560         (GlobalRootNamespace): Simplify drastically.
6561         (Namespace.Lookup): Don't use GetNamespace.
6562         * typemanager.cs (GetRootNamespace): Rename from
6563         ComputeNamespaceForAlias.
6564         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
6565
6566 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
6567
6568         * anonymous.cs (AnonymousContainer): Don't crash when container
6569         doesn't exist.
6570
6571 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
6572
6573         * expression.cs (Binary.DoResolve): Warn when comparing same
6574         values.
6575
6576 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
6577
6578         Fix #76486.
6579         * expression.cs (Binary.DoResolve): It looks like there are no
6580         convetsion rules in enum context.
6581
6582 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
6583
6584         Add support for extern alias qualifiers.
6585         * typemanager.cs: Move some LookupTypeReflection code
6586         to namespace.cs, to have cleaner code. Added some methods
6587         to help us keep track of the extern aliased references.
6588         * driver.cs: Add suport for extern alias assemblies on command
6589         line and check for their warnings/errors. Also keep track of the
6590         extern aliased assemblies.
6591         * namespace.cs: Move the global functionality of Namespace
6592         to GlobalRootNamespace/RootNamespace. Now the global namespace
6593         is GlobalRootNamespace.Globa. Also the code moved from 
6594         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
6595         Finally added LocalAliasEntry (AliasEntry before) and
6596         ExternAliasEntry, to handle alias statements.
6597         * cs-parser.jay: Add support in the grammar for extern alias
6598         statement.
6599         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
6600         Update callings to Namespace (now in GlobalRootNamespace).
6601
6602 2005-10-18  Raja R Harinath  <rharinath@novell.com>
6603
6604         Fix #76371.
6605         * class.cs (TypeContainer.DefineType): Move updating of
6606         topological sort earlier in the code.
6607         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
6608
6609 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
6610
6611         Fix #76273.
6612         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
6613         
6614         * constant.cs (Constant.TryReduce): Moved from Cast class.
6615         (Reduce): Made little bit more OO and fixed missing conversions.
6616         
6617         * ecore.cs (Reduce): Implemented.
6618         (Binary.EnumLiftUp): New method to upgrade values to enum values.
6619         
6620         * literal.cs (Reduce): Implemented.
6621         
6622         * class.cs: Reverted Miguel's wrong commit.
6623
6624 2005-10-14  Miguel de Icaza  <miguel@novell.com>
6625
6626         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
6627
6628 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
6629
6630         * cs-parser.jay, expression.cs : CS0214 was missing error location
6631           for constants. Fixed bug #76404.
6632
6633 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
6634
6635         Fix #76370.
6636         * convert.cs (ExplicitConversionCore): Fixed object->enum
6637         conversion.
6638
6639 2005-10-10  Raja R Harinath  <rharinath@novell.com>
6640
6641         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
6642         InstanceExpression.
6643         (PropertyExpr.EmitCall): Likewise.
6644         * expression.cs (Invocation.EmitArguments): Handle case where
6645         arguments == null.
6646         (Invocation.EmitCall): Avoid allocating temporary variable if
6647         there are no arguments.
6648
6649 2005-10-07  Raja R Harinath  <rharinath@novell.com>
6650
6651         Fix #76323.
6652         * convert.cs (ImplicitConversionStandard): Move conversion of
6653         void* to arbitrary pointer types ...
6654         (ExplicitConversionStandard): .. here.
6655         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
6656         error to always print typenames.
6657
6658 2005-10-07  Raja R Harinath  <rharinath@novell.com>
6659
6660         * convert.cs (GetConversionOperator): Rename from
6661         GetConversionOperators.  Move operator selection code from ...
6662         (UserDefinedConversion): ... here.
6663
6664 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
6665
6666         * convert.cs (ExplicitConversionCore): Removed duplicate enum
6667         conversion.
6668
6669 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
6670
6671         * assign.cs (Assign.DoResolve): Error method changed.
6672
6673         * cfold.cs (DoConstantNumericPromotions): Error method changed.
6674         
6675         * const.cs (ResolveValue): Reset in_transit immediately.
6676         
6677         * constant.cs: Error method changed.
6678         
6679         * convert.cs: Removed useless location parameter.
6680         (ExplicitNumericConversion): Don't do double enum check.
6681         (ExplicitConversionCore): Renamed from ExplicitConversion.
6682         (ExplicitUnsafe): Extracted from ExplicitConversion.
6683         (ExplicitConversion): Uses for error reporting.
6684         
6685         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
6686         error messages.
6687         (ResolveBoolean): Uses common error method.
6688         (CastToDecimal): Get rid of ec.
6689         (CastFromDecimal): Optimized.
6690         (ConvCast): Get rid of ec.
6691         
6692         * enum.cs (ResolveValue): Reset in_transit immediately.
6693         (Emit): Return after first error.
6694         
6695         * expression.cs: Convert changes.
6696         
6697         * literal.cs: Error method changed.
6698         
6699         * statement.cs: Error method changed.
6700
6701 2005-10-03  Raja R Harinath  <rharinath@novell.com>
6702
6703         * support.cs (SeekableStreamReader.Position): Don't error out when
6704         the requested position is just beyond the end of the current
6705         buffered data.
6706
6707 2005-09-28  Raja R Harinath  <rharinath@novell.com>
6708
6709         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
6710         try to keep in sync with the byte count of the underlying Stream.
6711         However, this limits us to a window size of 2048 characters: i.e.,
6712         the maximum lookahead of our lexer/parser can be 2048 characters.
6713
6714 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
6715
6716         Fix #76255.
6717         * driver.cs: Fix compilation files with full root path.
6718
6719 2005-09-25  Miguel de Icaza  <miguel@novell.com>
6720
6721         * report.cs (SymbolRelatedToPreviousError): Format the output so
6722         it does not use an open parenthesis that is never closed. 
6723
6724         * driver.cs: Follow coding guidelines
6725
6726 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
6727
6728         Fix #72930.
6729         * const.cs (Const.ResolveValue): Check for assigning non-null
6730         value to reference type.
6731
6732 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
6733
6734         * anonymous.cs: Implemented ExprClassName.
6735         
6736         * assign.cs (Assign.DoResolve): Don't chrash when type is not
6737         delegate.
6738         
6739         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
6740         check.
6741         
6742         * class.cs (StaticClass.DefineContainerMembers): Report protected
6743         members as error.
6744         
6745         * codegen.cs: if(ed) PRODUCTION.
6746         
6747         * convert.cs (Error_CannotImplicitConversion): Better error
6748         distinction.
6749         
6750         * cs-parser.jay: More error checks.
6751         
6752         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
6753         
6754         * driver.cs (CSCParseOption): Enabled wrong option check.
6755         
6756         * ecore.cs (Expression.ExprClassName): Turned to property.
6757         (MemberExpr.CheckIntermediateModification): For checking boxed
6758         value types     modification.
6759         
6760         * statement.cs (Fixed.Resolve): Expression type must be
6761         convertible to fixed type.
6762         (CollectionForeach.GetEnumeratorFilter,TryType):
6763         Small refactoring for easier error checking.
6764
6765 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
6766
6767         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
6768         attributes.
6769         
6770         * class.cs (GeneratedBaseInitializer): New class for customization
6771         compiler generated initializers.
6772         (MemberBase.DoDefine): Check Obsolete attribute here.
6773         (FieldMember.DoDefine): Ditto.
6774         
6775         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
6776         constants.
6777         
6778         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
6779         (MemberCore.GetObsoleteAttribute): Removed argument.
6780         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
6781         (MemberCore.CheckObsoleteType): New helper.
6782         
6783         * delegate.cs,
6784         * enum.cs,
6785         * statement.cs: Updates after MemberCore changes.
6786         
6787         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
6788         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
6789         
6790         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
6791         obsolete attribute for compiler construct.
6792         (As.DoResolve): Cache result.
6793         
6794         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
6795
6796 2005-09-26  Raja R Harinath  <rharinath@novell.com>
6797
6798         Fix #76133.
6799         * expression.cs (This.VerifyFixed): In a value type T, the type of
6800         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
6801         value type R, 'this' is treated as a value parameter.
6802
6803 2005-09-22  Miguel de Icaza  <miguel@novell.com>
6804
6805         * statement.cs (Lock): Use the TemporaryVariable class instead of
6806         manually using local variables as those do not work when variables
6807         are captured.
6808
6809         * ecore.cs: Moved the TemporaryVariable class from being a nested
6810         class inside Foreach to be a public class that can be employed in
6811         other places. 
6812
6813 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
6814
6815         * cs-parser.jay: interface_accessors replaced by
6816         accessor_declarations.
6817
6818         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
6819         location.
6820         
6821         * statement.cs (GotoCase.Resolve): Convert null constant to
6822         null case.
6823         (SwitchLabel.ResolveAndReduce): Ditto.
6824         (SwitchLabel.NullStringCase): Custom null stamp.
6825         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
6826         
6827         typemanager.cs (CSharpSignature): Don't skip first argument
6828         for full names.
6829
6830 2005-09-18  Miguel de Icaza  <miguel@novell.com>
6831
6832         * driver.cs: Set InEmacs based on the environment variable EMACS. 
6833
6834         * location.cs (InEmacs): in this mode, do not report column
6835         location as it confuses Emacs.
6836
6837 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
6838
6839         * cfold.cs, constant.cs, convert.cs, ecore.cs,
6840         expression.cs, iterators.cs, literal.cs: Store constants and
6841         literals location.
6842         
6843         * class.cs (MemberBase.ShortName): Pass location.
6844         
6845         * cs-parser.jay: Some location fixes.
6846         
6847         * ecore.cs (Expression.Location): Made virtual.
6848
6849 2005-09-05  Miguel de Icaza  <miguel@novell.com>
6850
6851         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
6852         if the underlying types are the same, otherwise we need to produce
6853         code that will do the proper cast.
6854
6855         This was exposed by Marek's constant rewrite which produced
6856         invalid code for the call site:
6857
6858         enum X : long { a }
6859         void Method (X v) {}
6860
6861         Method ((X) 5)
6862
6863         This fixes test-49.cs
6864
6865 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
6866
6867         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
6868           Type/Object should be allowed as well. Fixed bug #75968.
6869
6870 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
6871
6872         * expression.cs : (Binary.DoResolve): when one is enum constant and
6873           another is constant 0, then return enum one *as enum type*.
6874           Fixed bug 74846.
6875
6876 2005-09-02  Raja R Harinath  <rharinath@novell.com>
6877
6878         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
6879         internal.
6880
6881         Fix #75941.
6882         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
6883         flow-branching for LocalVariableReferences in case we were invoked
6884         from a MemberAccess.
6885         * expression.cs (LocalVariableReference.VerifyAssigned): New.
6886         Carved out of ...
6887         (LocalVariableReference.DoResolveBase): ... this.
6888         (MemberAccess.Resolve): Do the check that was disabled during
6889         SimpleNameResolve.
6890
6891 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
6892
6893         * class.cs :
6894           (PartialContainer.Create): check abstract/sealed/static strictly
6895           but abstract/sealed can exist only at one side. Fixed bug #75883.
6896
6897 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
6898
6899         Fix #75945.
6900         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
6901         specified, don't default to UnmanagedType.I4.
6902
6903 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
6904
6905         * expression.cs : conditional operator should check possibly
6906           incorrect assign expression. Fixed bug #75946.
6907
6908 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
6909
6910         * cs-tokenizer.cs, cs-parser.jay, driver.cs, support.cs :
6911           Reverting the change. gmcs is much complex than mcs on this matter.
6912
6913 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
6914
6915         * cs-tokenizer.cs : To read another token ahead of the actual 
6916           consumption, use new SavedToken and cache token instead of moving
6917           back the stream with SeekableStreamReader (it seemed problematic).
6918         * cs-parser.jay,
6919           driver.cs : Thus use StreamReader directly.
6920         * support.cs : Thus removed SeekableStreamReader.
6921
6922 2005-08-30  Raja R Harinath  <rharinath@novell.com>
6923
6924         Fix #75934.
6925         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
6926         (ScopeInfo.EmitScopeType): Use it to construct field names from
6927         names of captured locals.
6928
6929         Fix #75929.
6930         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
6931         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
6932         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
6933         (ExplicitConversion): Remove enum cases already handled by
6934         implicit conversion.  Move implicit conversion check to the beginning.
6935         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
6936         * expression.cs (ArrayCreation.EmitDynamicInitializers):
6937         Don't treat System.Enum as a struct.
6938
6939 2005-08-30  Jb Evain  <jbevain@gmail.com>
6940
6941         * attribute.cs: handles as expression in parameters.
6942
6943 2005-08-30  Raja R Harinath  <rharinath@novell.com>
6944
6945         Fix #75802.
6946         * class.cs (TypeContainer.VerifyClsName): Don't use a
6947         PartialContainer when verifying CLS compliance.
6948         (AbstractPropertyEventMethod): Set Parent here, ...
6949         (PropertyMethod): ... not here.
6950
6951 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
6952
6953         * attribute.cs : escaped attribute name should not be allowed to be
6954           resolved (e.g. @class as classAttribute). Fixed bug #75930.
6955
6956 2005-08-29  Raja R Harinath  <rharinath@novell.com>
6957
6958         Fix #75927.
6959         * convert.cs (ImplicitStandardConversionExists): Allow zero also
6960         when converting a long constant to unsigned long.
6961         * expression.cs (Invocation.OverloadResolve): Add sanity check to
6962         detect where IsApplicable and VerifyArgumentsCompat disagree.
6963
6964 2005-08-29  Raja R Harinath  <rharinath@novell.com>
6965         and Carlos Alberto Cortez  <carlos@unixmexico.org>
6966
6967         Fix #75848.
6968         * class.cs (TypeContainer.CanElideInitializer): New helper.
6969         (TypeContainer.EmitFieldInitializers): Use it to determine if we
6970         can safely emitting the initializer of a field.
6971
6972 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
6973
6974         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
6975           allowed inside a switch (without loop). Fixed bug #75433.
6976
6977 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
6978
6979         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
6980         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
6981
6982 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
6983
6984         * driver.cs : kinda reverting the default encoding changes (not exact 
6985           revert since I noticed that "codepage:reset" might not work fine).
6986
6987 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
6988
6989         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
6990           Location. Now getter and setter store location correctly.
6991           (errors/cs0111-12.cs now reports the expected location.)
6992
6993 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
6994
6995         * driver.cs : Use default encoding on the environment.
6996           Removed (now that) extra parameter for SeekableStreamReader.
6997         * support.cs : (SeekableStreamReader) third .ctor() argument for
6998           StreamReader is not required (always true). preamble size could
6999           be acquired in simpler and safe way.
7000
7001 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
7002
7003         * cs-parser.jay: report CS0642 at warning level 3
7004           and report CS0642 for an if else statement also
7005           fixes bug #74745. Patch by John Luke (and a bit
7006           modified by me).
7007           Removed extra CS0642 warning check for "while",
7008           "for" and "fixed".
7009         * statement.cs: In Block.Resolve(), CS0642 check
7010           is reimplemented to check a sequence of an empty
7011           statement and a block.
7012
7013           Both fix bug #66777.
7014
7015 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
7016
7017         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
7018         detection until I fix it.
7019         
7020         * cs-tokenizer.cs: Changed error message.
7021         
7022         * cs-parser.jay: Fixed 2 error locations.
7023         
7024         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
7025         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
7026         properties.
7027         
7028         * enum.cs (GetSignatureForError): Fixed.
7029         
7030         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
7031         method detection.
7032         
7033         * class.cs,
7034         * typemanager.cs (RegisterProperty): Removed.
7035         
7036         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
7037
7038 2005-08-24  Raja R Harinath  <rharinath@novell.com>
7039
7040         Fix #75874.
7041         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
7042         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
7043
7044 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7045
7046         * expression.cs : tiny fix is required for not warning positive ulong.
7047           See test-441.cs.
7048
7049 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7050
7051         * expression.cs : add CS0652 check for constant and integral
7052           expression. Fixed bug #53974.
7053
7054 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7055
7056         * expression.cs : in DoNumericPromotions(), check if there is implicit
7057           conversion overload for string (to check CS0034). Fixed bug #52492.
7058
7059 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7060
7061         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
7062
7063 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7064
7065         * ecore.cs : report location when it is *not* Null.
7066
7067 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
7068
7069         * codegen.cs,
7070           ecore.cs,
7071           flowanalysis.cs,
7072           expression.cs:
7073           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
7074           correctly. Fixed bug #75721.
7075
7076 2005-08-23  Raja R Harinath  <rharinath@novell.com>
7077
7078         * support.cs (SeekableStreamReader.Position): Avoid an expensive
7079         loop that performs 'min (pos, char_count)'.
7080
7081         Fix #75862.
7082         * expression.cs (Unary.ResolveOperator): Don't discard implicit
7083         converted value in Operator.OnesComplement.
7084
7085 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
7086
7087         * anonymous.cs: If the anon method is pulled into a helper class,
7088         it needs to be `internal' not `private'. Fixes runtime behavior on
7089         msft. bug #75704
7090
7091 2005-08-20  Martin Baulig  <martin@ximian.com>
7092
7093         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
7094         scope if we don't already have it.
7095
7096         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
7097         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
7098         fixes #75867.
7099
7100 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
7101
7102         Fix #75803
7103         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
7104         is a partial class.
7105
7106 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
7107
7108         The big constants rewrite
7109         Fix #75746, #75685 and more
7110         As a side effect saved 1MB for MWF ;-)
7111         
7112         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
7113         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
7114         enum based for corlib compilation.
7115         
7116         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
7117         subtractions.
7118         
7119         * class.cs (FixedField.Define): Use ResolveAsConstant.
7120         
7121         * const.cs (IConstant): Interface constants and enums.
7122         (Const.ResolveValue): New method for constant resolvning.
7123         (ExternalConstant): Constants from imported assemblies.
7124         
7125         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
7126         conversion; like enums.
7127         (Constant.ToType): Converts this constant to different type.
7128         (Constant.Increment): Adds 1.
7129         
7130         * convert.cs (ImplicitConversionRequired): Simplified.
7131         
7132         * cs-parser.jay: Create EnumMember directly.
7133         
7134         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
7135         
7136         * doc.cs (GenerateEnumDocComment): Removed.
7137         
7138         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
7139         (ConvertIntLiteral): Removed.
7140         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
7141         
7142         * enum.cs (EnumMember): Implement IConstant.
7143         (Enum.IsValidEnumConstant): Removed.
7144         (Enum.GetNextDefaultValue): Removed.
7145         (Enum.FindMembers): Updated.
7146         (Enum.GenerateDocComment): Iterate enum members.
7147         
7148         * expression.cs (Cast.TryReduce): Handle enums correctly.
7149         (New.Constantify): Made public.
7150         (MemberAccess.DoResolve): Removed contant specific if(s).
7151         
7152         * literal.cs (NullLiteral): Implement new abstract methods.
7153         
7154         * statement.cs (GotoCase.Resolve): Use new constant methods.
7155         (SwitchLabel.ResolveAndReduce): Use new constant methods.
7156         
7157         * typemanager.cs (LookupEnum): Removed.
7158         (IsEnumType): Fixed to work with corlib.
7159         (RegisterConstant): Removed.
7160         (LookupConstant): Removed.
7161         (GetConstant): Changed to work with IConstant.
7162
7163 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
7164
7165         * location.cs : Fixed overflown (>255) column number.
7166
7167 2005-08-03  Raja R Harinath  <rharinath@novell.com>
7168
7169         First cut of the qualified-alias-member feature.
7170         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
7171         token.
7172         * cs-parser.jay (DOUBLE_COLON): New token.
7173         (namespace_or_type_name): Add rule for recognizing
7174         qualified-alias-members.
7175         (primary_expression): Likewise.
7176         (element_access): Allow QualifiedAliasMember as a possible
7177         type-bearing expression.
7178         (local_variable_type, local_variable_pointer_type): Likewise.
7179         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
7180         aliases in the current and enclosing namespace declarations.
7181         (NamespaceEntry.UsingAlias): Add CS0440 warning.
7182         * decl.cs (MemberName.is_double_colon): New.
7183         (MemberName.MemberName): Add new constructor for alias-member.
7184         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
7185         * expression.cs (QualifiedAliasMember): New expression type.
7186
7187 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7188
7189         * location.cs : it borked when no argument was specified.
7190
7191 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7192
7193         * location.cs : tiny ToString() format fix.
7194
7195 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7196
7197         * statement.cs : oops, it was missing.
7198
7199 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
7200
7201         A set of fixes for precise line/column location.
7202
7203         * location.cs :
7204           "token" field now holds a file/line "delta", a line number offset 
7205           from the segment, and a column number. See also:
7206           http://lists.ximian.com/pipermail/mono-devel-list/2004-
7207           December/009508.html
7208           Removed static IsNull. Use instance IsNull property instead.
7209         * cs-tokenizer.cs :
7210           For some tokens it stores Location. For Identifier it stores
7211           LocatedToken which is a pair of string name and location.
7212           Column numbers are adjusted only at getChar().
7213         * report.cs :
7214           Use Location.ToString() for reporting (it now contains column).
7215         * cs-parser.jay :
7216           Largely modified to use LocatedToken instead of
7217           string (IDENTIFIER), and to acquire Location from some tokens.
7218         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
7219           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
7220           codegen.cs :
7221           Now MemberName holds Location. DeclSpace.ctor() receives Location
7222           as a parameter. Removed extra parameters to all derived classes.
7223           Replaced Location.IsNull() with instance property.
7224         * assign.cs, expression.cs :
7225           Added .ctor() overload that omits Location.
7226         * attribute.cs :
7227           Added "nameEscaped" flag that indicates the identifier was escaped
7228           in the source file. This fixes bug #57047.
7229
7230 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
7231
7232         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
7233         New method, looking for lo-case imported cls type.
7234
7235         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
7236         here.
7237
7238         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
7239
7240         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
7241
7242         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
7243         all_imported_types.
7244         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
7245
7246         Optimized to save 3.5 MB for SWF compilation.
7247
7248 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
7249
7250         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
7251         (PartialContainer.Create): Moved logic AddToContainer.
7252         (PartialContainer.MarkForDuplicationCheck): Shares name.
7253         
7254         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
7255         place.
7256         
7257         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
7258         initialization.
7259         (Namespace.GetSignatureForError): New method.
7260         
7261         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
7262         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
7263
7264 2005-08-01  Raja R Harinath  <rharinath@novell.com>
7265
7266         Fix #75669.
7267         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
7268         member lookup rather than qualifier_type, since qualifier_type can
7269         be null.
7270
7271 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
7272
7273         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
7274         enum member.
7275
7276 2005-07-31  Miguel de Icaza  <miguel@novell.com>
7277
7278         * statement.cs: Copy the local exception into the exception
7279         captured local.  Fixes 75674
7280
7281 2005-07-31  Raja R Harinath  <harinath@gmail.com>
7282
7283         Fix #75658.
7284         * expression.cs (Invocation.OverloadResolve): Don't report error
7285         CS1501 if error CS1502 has been reported.
7286         (New.DoResolve): Delegate CS1501 reporting to
7287         Invocation.OverloadResolve.
7288
7289         Fix #75656.
7290         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
7291         invariant-meaning-in-block property in an enclosing block if
7292         necessary.
7293
7294 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
7295
7296         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
7297         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
7298         (Switch.CheckSwitch): Just save 50kb for SWF.
7299
7300 2005-07-27  Martin Baulig  <martin@ximian.com>
7301
7302         * anonymous.cs (CaptureContext.AddField): Added
7303         `AnonymousContainer am' argument; compute its toplevel scope if
7304         it's not already computed.  Fixes #75649.
7305
7306 2005-07-26  Raja R Harinath  <rharinath@novell.com>
7307
7308         Fix #75628.
7309         * class.cs (Constructor.Emit): Reset block to null if the block
7310         resolve fails.
7311
7312 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
7313
7314         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
7315
7316 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
7317
7318         * class.cs (MethodData.Define): Check whether accessor implementing
7319         interface is public.
7320
7321         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
7322
7323 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
7324
7325         Fix #57245
7326         * namespace.cs (LookupType): Moved same type check to...
7327         
7328         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
7329         with the same name.
7330
7331 2005-07-21  Raja R Harinath  <rharinath@novell.com>
7332
7333         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
7334         already found a typebuilder.
7335         * class.cs (MethodCore.IsDuplicateImplementation): Compare
7336         MemberNames, not strings.
7337
7338         * const.cs (Error_ExpressionMustBeConst): 
7339         Rename from Error_EpressionMustBeConst.
7340         * const.cs, class.cs, statement.cd: Update.
7341
7342 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
7343
7344         Fix #65573
7345
7346         * const.cs (Const.LookupConstantValue): Report missing contant expression
7347         everytime.
7348         (Error_EpressionMustBeConstant): Only one error method.
7349
7350         * class.cs, statement.c: Updated.
7351
7352 2005-07-20  Raja R Harinath  <rharinath@novell.com>
7353
7354         * statement.cs (Block.Flags): Add back HasVarargs.
7355         (Block.flags): Make protected.
7356         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
7357
7358         * typemanager.cs (types, typecontainers, user_types): Remove.
7359         (UserTypes, TypeContainers): Likewise.
7360         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
7361         (CleanUp, Reset): Update.
7362         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
7363         (GetNestedType): Use Type.GetNestedType.
7364         (CoreLookupType): Take two arguments, the namespace and the
7365         basename of the type.  Update to use the Namespace.Lookup
7366         mechanism.
7367         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
7368         (RealMemberLookup): Use IsNestedChildOf instead of playing with
7369         string concatenation and substring matches.
7370         * class.cs, enum.cs, delegate.cs: Update to changes.
7371
7372 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
7373
7374         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
7375         Expression and made virtual.
7376
7377         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
7378         (ImplicitStandardConversionExists): Fixed `byte' typo ?
7379
7380         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
7381
7382         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
7383         error message.
7384
7385         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
7386         change.
7387
7388 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
7389
7390         Fix #57707
7391         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
7392         AssemblyCultureAttribute is not used on executable.
7393
7394         * rootcontext.cs,
7395         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
7396
7397 2005-07-16  Raja R Harinath  <rharinath@novell.com>
7398
7399         Fix #60638.
7400         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
7401         New.  Reports CS0252/CS0253.
7402         Mostly taken from preliminary patch by Duncak Mak.
7403         (Binary.DoResolveOperator): Store results of operator lookup.
7404         Use them to detect if we need to warn about unintended reference
7405         comparisons.
7406
7407 2005-07-15  Raja R Harinath  <rharinath@novell.com>
7408
7409         Fix #72969.
7410         * namespace.cs (Namespace.Lookup): Add back location parameter.
7411         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
7412         * delegate.cs, ecore.cs, expression.cs: Update to changes.
7413
7414         * codegen.cs (EmitContext.DeclSpace): Make readonly.
7415         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
7416         (Namespace.LookupType): ... this.
7417         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
7418         of namespaces.
7419         * typemanager.cs (LookupTypeReflection): Remove buggy code that
7420         purported to handle pointers.
7421         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
7422         CoreLookupType.
7423
7424 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
7425
7426         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
7427         type as namespace.
7428
7429 2005-07-15  Raja R Harinath  <rharinath@novell.com>
7430
7431         * namespace.cs (Namespace.Lookup): Drop location parameter.
7432         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
7433         (NamespaceEntry.Lookup): ... this.
7434         (NamespaceEntry.Error_AmbiguousTypeReference):
7435         Move here from DeclSpace.
7436         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
7437         names ...
7438         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
7439         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
7440         Move to NamespaceEntry.
7441         * delegate.cs, expression.cs: Update to changes.
7442
7443 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
7444
7445         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
7446         CheckAttributeType and refactored.
7447         (Attribute.ResolvePossibleAttributeType): Changed to reuse
7448         ResolveAsTypeTerminal error handling.
7449         (ResolveAsTypeTerminal): Introduced because of global attributes extra
7450         handling.
7451         (GetSignatureForError): Print errors in same way.
7452
7453         * class.cs,
7454         * codegen.cs: Reflect attribute GetSignatureForError change.
7455
7456         * ecore.cs,
7457         * expression.cs: Add silent parameter to ResolveAsTypeStep.
7458
7459         * namespace.cs (UsingEntry): Refactored to make fields private.
7460
7461         * assign.cs,
7462         statement.cs: Error_UnexpectedKind has extra parameter.
7463
7464 2005-07-14  Raja R Harinath  <rharinath@novell.com>
7465
7466         * ecore.cs (IAlias): Remove.
7467         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
7468         that implement the interface.
7469         * namespace.cs (Namespace): Likewise.
7470         (Namespace.declspaces): Renamed from 'defined_names'.
7471         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
7472         DeclSpace instead of an IAlias.
7473         * tree.cs (Tree.AddDecl): Update.
7474
7475 2005-07-12  Raja R Harinath  <rharinath@novell.com>
7476
7477         * statement.cs (Block.Flags); Remove HasVarargs.
7478         (Block.HasVarargs): Move to ToplevelBlock.
7479         (Block.ThisVariable, Block.AddThisVariable): Likewise.
7480         (Block.Variables): Make protected.  Initialize variable hashtable
7481         if necessary.
7482         (Block.AddVariable): Update.
7483         (Block.Resolve): Update to changes.
7484         (ToplevelBlock.HasVarargs): New boolean.
7485         (ToplevelBlock.ThisVariable): Move here from Block.
7486         (ToplevelBlock.AddThisVariable): Likewise.
7487         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
7488         * expression.cs (This.ResolveBase): Update to changes.
7489         (ArglistAccess.DoResolve): Likewise.
7490
7491 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
7492
7493         Fix #75321
7494         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
7495
7496         * class.cs (TypeContainer.VerifyMembers): Distinguish between
7497         not used and not used & assigned.
7498         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
7499
7500 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
7501
7502         Fix #75053
7503         * expression.cs (Is.DoResolve): null is never provided type.
7504
7505 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
7506
7507         Fix #52496
7508         * cs-parser.jay: Less strict event error rule to catch more errors.
7509
7510 2005-07-08  Martin Baulig  <martin@ximian.com>
7511
7512         Fix test-iter-10.cs - distinguish whether we `yield' in a property
7513         gettter (allowed) or setter (not allowed).
7514
7515         * class.cs (Accessor): Implement IIteratorContainer.
7516         (Accessor.Yields): New public field.
7517         (PropertyBase.PropertyMethod.Define): Handle iterators on a
7518         per-accessor basis.
7519
7520         * cs-parser.jay
7521         (get_accessor_declaration, set_accessor_declaration): Set the
7522         `yields' flag on the accessor, not the property.
7523         (property_declaration): Do the iterators check on a per-accessor
7524         basis and not for the whole property.
7525
7526 2005-07-08  Martin Baulig  <martin@ximian.com>
7527
7528         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
7529         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
7530
7531 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
7532
7533         Fix #74975
7534         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
7535         (ExtractSecurityPermissionSet): Cope with self referencing security
7536         attributes properly.
7537
7538         * driver.cs (SetOutputFile): Made public property OutputFile.
7539
7540 2005-07-07  Raja R Harinath  <rharinath@novell.com>
7541
7542         Fix #75486.
7543         * class.cs (TypeContainer.first_nonstatic_field): Rename from
7544         has_nonstatic_fields.  Make into a FieldBase pointer.
7545         (TypeContainer.AddField): Add CS0282 check.
7546         (TypeContainer.EmitType): Update.
7547
7548 2005-07-06  Miguel de Icaza  <miguel@novell.com>
7549
7550         * cs-tokenizer.cs (consume_identifier): Do not create strings to
7551         compare if they start with __.
7552
7553 2005-07-06  Raja R Harinath  <rharinath@novell.com>
7554
7555         * statement.cs (Switch.SwitchGoverningType): Only look at
7556         UserCasts that don't need implicit standard conversions to one of
7557         the allowed switch types (Fixes test-322.cs).
7558         (LocalInfo.Resolve): Re-enable sanity-test.
7559
7560 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
7561
7562         * cs-tokenizer.cs (consume_identifier): Detect double undescores
7563         
7564         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
7565         
7566         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
7567
7568 2005-07-06  Raja R Harinath  <rharinath@novell.com>
7569
7570         Fix #75472.
7571         * ecore.cs (SimpleName.GetSignatureForError): Add.
7572         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
7573         (MemberAccess.GetSignatureForError): Add.
7574
7575 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
7576  
7577         The big error and warning messages review.
7578         
7579         * anonymous.cs,
7580         * assign.cs,
7581         * attribute.cs,
7582         * class.cs,
7583         * codegen.cs,
7584         * convert.cs,
7585         * cs-parser.jay,
7586         * cs-tokenizer.cs,
7587         * decl.cs,
7588         * delegate.cs,
7589         * doc.cs,
7590         * driver.cs,
7591         * ecore.cs,
7592         * enum.cs,
7593         * expression.cs,
7594         * flowanalysis.cs,
7595         * iterators.cs,
7596         * literal.cs,
7597         * location.cs,
7598         * modifiers.cs,
7599         * namespace.cs,
7600         * parameter.cs,
7601         * pending.cs,
7602         * report.cs,
7603         * rootcontext.cs,
7604         * statement.cs,
7605         * support.cs,
7606         * tree.cs,
7607         * typemanager.cs: Updated.
7608         
7609         * class.cs: (MethodCore.SetYields): Moved here to share.
7610         (PropertyMethod.Define): Moved iterator setup here.
7611         
7612         * iterators.cs: Add orig_method to have full access to parent
7613         container.
7614
7615 2005-07-05  Raja R Harinath  <rharinath@novell.com>
7616
7617         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
7618         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
7619         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
7620         variable of struct type.
7621         * expression.cs (Unary.ResolveOperator): Update to change.
7622         (Indirection.VerifyFixed): Likewise.
7623         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
7624         (ParameterReference.VerifyFixed): Value parameters are fixed.
7625         (This.VerifyFixed): Treat 'this' as a value parameter.
7626         * statement.cs (LocalInfo.IsFixed): Remove.
7627
7628 2005-07-01  Martin Baulig  <martin@ximian.com>
7629
7630         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
7631         `ec.EmitThis ()' to get the correct scope.
7632
7633 2005-07-01  Martin Baulig  <martin@ximian.com>
7634
7635         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
7636         instance is a ParameterReference; fixes #75299.
7637
7638 2005-07-01  Martin Baulig  <martin@ximian.com>
7639
7640         Reverted Marek's latest patch (r46725):
7641         - it contains structural changes which are neither mentioned in
7642           the ChangeLog nor explained anywhere; for example the additional
7643           argument of EmitContext's and Iterator's .ctor's and the
7644           TypeContainer.DefineMembers() change.
7645         - structural changes like this should go in in seperate patches
7646           and not be hidden in a huge patch which just seems to affect
7647           warnings and errors.
7648           a big and hard to understand patch.
7649         - it breaks iterators and causes regressions, for instance in
7650           test-iter-03.cs.      
7651
7652 2005-06-30  Raja R Harinath  <rharinath@novell.com>
7653
7654         Fix #75412.
7655         * expression.cs (Indexers.map): Remove.
7656         (Indexers.Append): Filter out inaccessible setters and getters.
7657         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
7658
7659         Fix #75283.
7660         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
7661         Refactored from ...
7662         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
7663         (FieldExpr.Emit, PropertyExpr.Emit): Update.
7664         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
7665         * expression.cs (Invocation.EmitCall): Add CS0120 check.
7666
7667 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
7668
7669         Fix #75322
7670         * class.cs (FieldBase.GetInitializerExpression): One more field
7671         for backup.
7672
7673 2005-06-28  Miguel de Icaza  <miguel@novell.com>
7674
7675         * pending.cs: Do not define a proxy if the base method is virtual,
7676         it will be picked up by the runtime (bug 75270).
7677
7678 2005-06-08  Martin Baulig  <martin@ximian.com>
7679
7680         The big Iterators rewrite :-)
7681
7682         * iterators.cs: Rewrite this to use the anonymous methods framework.
7683
7684         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
7685         before the TypeContainers; see 2test-21.cs.
7686
7687         * class.cs
7688         (TypeContainer.DefineType): Don't create a new EmitContext if we
7689         already have one (this only happens if we're an Iterator).
7690         (TypeContainer.Define): Also call Define() on all our iterators.
7691         (Method.CreateEmitContext): Added support for iterators.
7692
7693         * anonymous.cs
7694         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
7695         (AnonymousContainer.CreateMethodHost): Moved here from
7696         AnonymousMethod and made abstract.
7697         (AnonymousContainer.CreateScopeType): New abstract method.
7698         (AnonymousContainer.IsIterator): New public property.
7699         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
7700         get the ScopeTypeBuilder rather than manually defining it here. 
7701         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
7702         iterators here.
7703
7704         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
7705         before RootContext.DefineTypes().
7706
7707         * codegen.cs (EmitContext.RemapToProxy): Removed.
7708         (EmitContext.CurrentAnonymousMethod): Changed type from
7709         AnonymousMethod -> AnonymousContainer.
7710         (EmitContext.ResolveTopBlock): Protect from being called twice.
7711         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
7712         (EmitContext.EmitThis): Removed the iterators hacks; use the
7713         anonymous methods framework for that.
7714
7715         * statement.cs
7716         (ToplevelBlock.Container): Make this a property, not a field.
7717         (ToplevelBlock.ReParent): New public method; move the
7718         ToplevelBlock into a new container.
7719         (Foreach.TemporaryVariable): Simplify.
7720
7721 2005-06-05  Martin Baulig  <martin@ximian.com>
7722
7723         * statement.cs (LocalInfo.CompilerGenerated): New flag.
7724         (Block.AddTemporaryVariable): New public method; creates a new
7725         `LocalInfo' for a temporary variable.
7726         (Block.EmitMeta): Create the LocalBuilders for all the temporary
7727         variables here.
7728         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
7729         non-iterator variables.
7730
7731 2005-06-05  Martin Baulig  <martin@ximian.com>
7732
7733         * statement.cs (Foreach.TemporaryVariable): Create the
7734         LocalBuilder in the Emit phase and not in Resolve since in some
7735         situations, we don't have an ILGenerator during Resolve; see
7736         2test-19.cs for an example.
7737
7738 2005-06-04  Martin Baulig  <martin@ximian.com>
7739
7740         **** Merged r45395 from GCS ****
7741
7742         The big Foreach rewrite - Part II.
7743
7744         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
7745         with `PropertyInfo ienumerator_getcurrent'.
7746
7747         * codegen.cs (VariableStorage): Removed.
7748
7749         * statement.cs
7750         (Foreach): Derive from Statement, not ExceptionStatement.
7751         (Foreach.CollectionForeach): New nested class.  Moved all the code
7752         dealing with collection foreach here.
7753         (Foreach.ForeachHelperMethods): Removed.
7754         (Foreach.TemporaryVariable): Implement IMemoryLocation.
7755
7756 2005-05-23  Martin Baulig  <martin@ximian.com>
7757
7758         * statement.cs (Try.DoResolve): Don't create a `finally' if we
7759         don't need to.  Fix #75014.
7760
7761 2005-05-20  Martin Baulig  <martin@ximian.com>
7762
7763         Merged r44808 from GMCS.
7764
7765         * class.cs (TypeContainer.CircularDepException): Removed.
7766         (TypeContainer.DefineType): Removed the `InTransit' stuff.
7767         (TypeContainer.CheckRecursiveDefinition): Check for circular class
7768         (CS0146) and interface (CS0529) dependencies here.
7769
7770 2005-06-21  Raja R Harinath  <rharinath@novell.com>
7771
7772         * expression.cs (Invocation.EmitCall): Fix initialization
7773         'this_call' to reflect current behaviour.  Fix indentation.
7774
7775         * convert.cs (FindMostEncompassedType): Add two trivial special
7776         cases (number_of_types == 0 || number_of_types == 1).
7777         (FindMostEncompasingType): Likewise.
7778
7779 2005-06-17  Raja R Harinath  <rharinath@novell.com>
7780
7781         Some cleanups preparing for the fix of #75283.
7782         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
7783         error testing.
7784         (EventExpr.InstanceResolve): Likewise.
7785         (EventExpr.DoResolve): Remove redundant checks.
7786
7787 2005-06-10  Duncan Mak  <duncan@novell.com>
7788
7789         * cs-tokenizer.cs (process_directives): New flag for controlling
7790         the processing of preprocessor directives.
7791         (x_token): After seeing a '#', return Token.NONE instead of going
7792         to handle_preprocessing_directive() when not processing
7793         directives. This avoids unnecessary processing during the token peek in
7794         is_punct().
7795
7796         This fixes #74939.
7797
7798         * cs-tokenizer.cs (handle_preprocessing_directive, xtoken): Use
7799         the existing error reporting methods instead of Report.Error.
7800
7801         * convert.cs (priv_fmt_expr): Remove. It's not needed anymore
7802         after Raja's rewrite.
7803
7804 2005-06-08  Miguel de Icaza  <miguel@novell.com>
7805
7806         * class.cs: Small fix.
7807
7808 2005-06-08  Raja R Harinath  <rharinath@novell.com>
7809
7810         Fix #75160.
7811         * class.cs (GetPartialBases): Fix return value check of
7812         part.GetClassBases.
7813
7814 2005-06-07  Raja R Harinath  <rharinath@novell.com>
7815
7816         Ensure that partial classes are registered in their enclosing
7817         namespace.  Initial part of fix of #75160.
7818         * tree.cs (Tree.RecordDecl): Add new namespace argument.
7819         Register declspace with namespace here, not in
7820         DeclSpace.RecordDecl.
7821         * cs-parser.jay: Pass namespace to RecordDecl.
7822         * class.cs (PartialContainer.Create): Likewise.
7823         (ClassPart.DefineType): New sanity-check.  Throws an exception if
7824         called.
7825         * decl.cs (Declspace.RecordDecl): Remove.
7826         * namespace.cs (NamespaceEntry.DefineName): Remove.
7827
7828 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
7829
7830         * rootcontext.cs: Reset TargetExt as well.
7831
7832 2005-06-03  Raja R Harinath  <rharinath@novell.com>
7833
7834         * ecore.cs (Expression.Resolve): Emit CS0654 error when
7835         -langversion:ISO-1.
7836
7837 2005-06-02  Raja R Harinath  <rharinath@novell.com>
7838
7839         Fix #75080, cs0119.cs.
7840         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
7841         of ...
7842         (Expression.Resolve): ... this.  Use it.  Remove bogus code
7843         allowing ExprClass.Type and ExprClass.Namespace for
7844         ResolveFlags.VariableOrValue.
7845         (Expression.Resolve) [1-argument variant]: Change default resolve
7846         flags based on language version.
7847         (Expression.Error_UnexpectedKind): Use a simple string array
7848         rather than an ArrayList.
7849         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
7850         not ExprClass.Type.
7851         (TypeOfVoid.DoResolve): Likewise.
7852         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
7853         flags argument -- it always has the same value.
7854
7855 2005-05-31  Raja R Harinath  <rharinath@novell.com>
7856
7857         Fix #75081.
7858         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
7859         Use it in the error message.
7860         * assign.cs, expression.cs, statement.cs: Update.
7861
7862 2005-05-30  Raja R Harinath  <rharinath@novell.com>
7863
7864         Fix #75088.
7865         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
7866         the "almostMatchedMember" case too.
7867         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
7868         that failed the accessibility checks to 'almost_match'.
7869
7870 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
7871
7872         * attribute.cs: Use internal MethodBuilder methods to set
7873         ExactSpelling and SetLastError on PInvoke methods, instead
7874         of passing them via charset.  Fixes #75060.
7875
7876 2005-05-27  Raja R Harinath  <rharinath@novell.com>
7877
7878         * parameter.cs (Parameter): Remove TODO comment.
7879         (Parameter.DefineParameter): Remove Location parameter.
7880         (Parameters.LabelParameters): Likewise.
7881         * class.cs (Constructor.Emit): Update to change.
7882         (MethodData.Emit): Likewise.
7883         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
7884         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
7885
7886 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
7887
7888         * parameter.cs,
7889           Removed Parameters.Location and added Parameter.Location instead.
7890           Removed Location parameter from Emit() and GetSignature().
7891         * anonymous.cs,
7892           class.cs,
7893           cs-parser.jay,
7894           delegate.cs,
7895           iterators.cs,
7896           statement.cs :
7897           Modified all related calls.
7898
7899 2005-05-26  Raja R Harinath  <rharinath@novell.com>
7900
7901         Improve user-defined conversion handling.
7902         * convert.cs (GetConversionOperators): Rewrite.  Return only the
7903         applicable operators.
7904         (AddConversionOperators): New.  Helper for GetConversionOperators.
7905         (FindMostEncompassedType, FindMostEncompassingType): Verify that
7906         there is only one most encompassed/encompassing type.
7907         (FindMostSpecificSource, FindMostSpecificTarget): Remove
7908         "applicable operator" handling.
7909         (UserConversion): Move cache here from GetConversionOperators.
7910         Directly cache the chosen operator, rather than the whole
7911         MethodGroup.
7912         (ExplicitNumericConversion): Fix buggy implementation of Decimal
7913         case.  Allow conversion of decimal to sbyte and byte too.
7914         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
7915         New static methods.  Used to avoid allocating EmptyExpressions in
7916         convert.cs.
7917
7918 2005-05-24  Duncan Mak  <duncan@novell.com>
7919
7920         * ecore.cs (CastFromDecimal): New class for casting a decimal to
7921         another class, used in Convert.ExplicitNumericConversion.
7922         (CastToDecimal): New class, similar to above, but casts to
7923         System.Decimal, used in Convert.ImplicitNumericConversion and also
7924         in explicit convesion from double/float to decimal.
7925
7926         * convert.cs (ImplicitNumericConversion): Handle implicit
7927         conversions to System.Decimal.
7928         (ExplicitNumericConversion): handle explicit conversions to
7929         System.Decimal.
7930
7931         This fixes #68711.
7932         
7933 2005-05-20  Miguel de Icaza  <miguel@novell.com>
7934
7935         * typemanager.cs (EnumToUnderlying): Do not throw if we do not
7936         know the type at this stage, just break through.   Fixes #75008 
7937
7938 2005-05-19  Martin Baulig  <martin@ximian.com>
7939
7940         * delegate.cs
7941         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
7942         to disable error reporting.
7943
7944         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
7945         here since we don't want to report an error; see the new test-336.cs.
7946
7947 2005-05-19  Raja R Harinath  <rharinath@novell.com>
7948
7949         * statement.cs (ToplevelBlock.GetParameterReference)
7950         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
7951         Move here from class Block.
7952         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
7953         * expression.cs (ParameterReference.DoResolveBase): Likewise.
7954
7955 2005-05-18  Martin Baulig  <martin@ximian.com>
7956
7957         Fix #74978.
7958
7959         * flowanalysis.cs
7960         (FlowBranching.Reachability): Add non-static public And() and Or()
7961         methods.
7962         (FlowBranchingSwitch): New class; do the `break_origins' thing
7963         like in FlowBranchingLoop.
7964         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
7965         reachability, not just locals and parameters.
7966         (FlowBranching.MergeChild): Remove some of the hacks for loop and
7967         switch; MergeBreakOrigins() now takes care of that.
7968
7969 2005-05-18  Martin Baulig  <martin@ximian.com>
7970
7971         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
7972         a loop and may leave it, reset the barrier; fixes #74974.
7973
7974 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
7975         
7976         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
7977         is back.
7978         
7979         * cs-parser.jay: Catch more lexical errors.
7980         
7981         * report.cs: Add one more Error method.
7982         
7983         * rootcontext.cs,
7984         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
7985
7986 2005-05-17  Martin Baulig  <martin@ximian.com>
7987
7988         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
7989         #70970. 
7990
7991 2005-05-16  Raja R Harinath  <rharinath@novell.com>
7992
7993         Fix test-382.cs.  Emit values of decimal constants.
7994         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
7995         Carved out of ...
7996         (TypeContainer.AddField): ... this.
7997         (TypeContainer.EmitFieldInitializers): Allow the list of fields
7998         with initializers to include 'Const's.
7999         (ClassPart.RegisterFieldForInitialization): Forward to
8000         PartialContainer.
8001         * const.cs (Const.Const): Pass initializer to base class.
8002         (Const.Define): In case of decimal constants, register them for
8003         initialization in a static constructor.
8004
8005 2005-05-14  Martin Baulig  <martin@ximian.com>
8006
8007         * statement.cs (Block.Resolve): Correctly handle unreachable code;
8008         do not call ResolveUnreachable() on unreachable statements in
8009         here, see the comment in the source code.
8010
8011 2005-05-13  Raja R Harinath  <rharinath@novell.com>
8012
8013         Fix #74934.
8014         * expression.cs (BinaryResolveOperator): If one of the operands of
8015         an equality comparison is 'null' and the other is a pointer type,
8016         convert the null to a NullPointer.
8017         * convert.cs (ImplicitReferenceConversion): If the expression is a
8018         NullLiteral and the target type is a pointer type, return a
8019         NullPointer instead.
8020         (ImplicitConversionStandard): Likewise.
8021
8022 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
8023         
8024         * cs-parser.jay: Set readonly context based on special constructs.
8025         
8026         * expression.cs (LocalVariableReference.DoResolveBase): Improved
8027         readonly variable error handling.
8028         
8029         * rootcontext.cs (EmitCode): Don't verify members when error
8030         occurred.
8031         
8032         * statement.cs (LocalInfo): Add reaodnly context information.
8033         (SetReadOnlyContext, GetReadOnlyContext): New methods.
8034
8035 2005-05-13  Raja R Harinath  <rharinath@novell.com>
8036
8037         * statement.cs (Block.Resolve): Revert change below.  Modify fix
8038         for #74041 to initialize 'resolved' to false only for explicit
8039         blocks.  Fixes #74873.
8040
8041 2005-05-12  Raja R Harinath  <harinath@gmail.com>
8042
8043         Fix #74920.
8044         * typemanager.cs (unmanaged_enclosing_types): New.
8045         (IsUnmanagedType): Avoid infloops by using
8046         'unmanaged_enclosing_types' to talk with recursive invocations.
8047
8048 2005-05-13  Martin Baulig  <martin@ximian.com>
8049
8050         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
8051         instance variable, not a local.  Fix #74873.
8052         (Block.ResolveUnreachable): Set it to true here.
8053
8054 2005-05-11  Duncan Mak  <duncan@novell.com>
8055
8056         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
8057         continuing to process for 'arg'.
8058         (handle_preprocessing_directive): Check the argument of the #endif
8059         directive and report error CS1025 if there are any trailing
8060         characters.
8061
8062         According to the C# spec, having even whitespace after the #endif
8063         directive is illegal; however, because we call arg.TrimEnd ()
8064         beforehand, we have the same behavior as csc, allowing whitespace
8065         after the directive.
8066
8067         Fixes #74892.
8068
8069 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
8070
8071         Fix #74863.
8072         
8073         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
8074         (Constructor.GetObsoleteAttribute): Implemented correctly.
8075
8076 2005-05-10  Martin Baulig  <martin@ximian.com>
8077
8078         * support.cs (ReflectionParameters.ParameterModifier): Use
8079         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
8080         and `ParameterAttributes.In'.  Fixes #74884.
8081
8082 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
8083
8084         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
8085         
8086         * expression.cs (Argument.GetParameterModifier): Turned to property.
8087         (Invocation.Error_InvalidArguments): Add more descriptive errors.
8088         
8089         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
8090         its C# equivalent.
8091         
8092 2005-05-09  Raja R Harinath  <rharinath@novell.com>
8093
8094         Fix #74852.
8095         * decl.cs (MemberCache.AddMethods): Register override methods,
8096         rather than non-override methods.
8097         * typemanager.cs (RegisterOverride): New.
8098         (IsOverride): Update.
8099
8100 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
8101
8102         Fix #73105.
8103         
8104         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
8105         recursive declaration.
8106         
8107         * statement.cs (Block.ResolveMeta): Report any error in resolving.
8108         
8109 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
8110
8111         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
8112         
8113         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
8114
8115 2005-05-05  Raja R Harinath  <rharinath@novell.com>
8116
8117         Fix #74797.
8118         * decl.cs (DeclSpace.FamilyAccessible): 
8119         Use TypeManager.IsNestedFamilyAccessible.
8120
8121         Fix reopened #64812.
8122         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
8123         internal'.
8124
8125 2005-05-04  Raja R Harinath  <rharinath@novell.com>
8126             Abin Thomas  <projectmonokochi@rediffmail.com>
8127             Anoob V E  <projectmonokochi@rediffmail.com>
8128             Harilal P R  <projectmonokochi@rediffmail.com>
8129
8130         Fix #64812.
8131         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
8132         allow access to all static members.
8133
8134 2005-05-04  Martin Baulig  <martin@ximian.com>
8135
8136         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
8137
8138 2005-05-04  Martin Baulig  <martin@ximian.com>
8139
8140         Fix #74655.
8141
8142         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
8143         section at the end; make things work if `default' is not the last
8144         section.        
8145
8146 2005-05-04  Martin Baulig  <martin@ximian.com>
8147
8148         Fix #70400.
8149
8150         * statement.cs (Switch): Replaced the `got_default' field with a
8151         `default_section' one.
8152         (Switch.CheckSwitch): Set `default_section' here.
8153         (Switch.Resolve): If we're a constant switch and the constant is
8154         not found, use the default section.
8155
8156 2005-05-03  Martin Baulig  <martin@ximian.com>
8157
8158         * expression.cs (ArrayAccess.EmitGetLength): New public method.
8159
8160         * statement.cs (Foreach.ArrayForeach): New nested class.
8161         (Foreach.TemporaryVariable): New nested class.
8162         (Foreach.EmitArrayForeach): Removed; this is now in the new
8163         ArrayForeach class.
8164
8165 2005-05-03  Raja R Harinath  <rharinath@novell.com>
8166
8167         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
8168         more conservative.
8169         (VerifyPendingMethods): Revert change below.
8170
8171         * typemanager.cs (IsOverride, RegisterNonOverride): New.
8172         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
8173         that used to trigger warning -28.  Remove warning -28.
8174         * expression.cs (Invocation.OverloadResolve): Use
8175         TypeManager.IsOverride to distinguish override methods.
8176
8177         Fix #74773.
8178         * pending.cs (VerifyPendingMethods): If a base type implements the
8179         requested interface, don't bother checking individual methods of
8180         the base type.  As a side-effect, this prevents the creation of
8181         unnecessary proxies.
8182
8183 2005-05-02  Martin Baulig  <martin@ximian.com>
8184
8185         Fix #70182.
8186
8187         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
8188         Also `And' the locals if the old vector is null.
8189         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
8190         null; in this case we basically reset all the variables.        
8191
8192 2005-05-02  Martin Baulig  <martin@ximian.com>
8193
8194         Fix #74529.
8195
8196         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
8197         Added `FlowBranching branching' argument; always `and' the
8198         variables instead of `or'ing them unless we're an infinite loop.
8199
8200         * statement.cs (While.Resolve): Create a new sibling unless we're
8201         infinite.       
8202
8203 2005-05-02  Martin Baulig  <martin@ximian.com>
8204
8205         Fix #70140.
8206
8207         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
8208         arguments; use it instead of creating a new TopLevelBlock.
8209         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
8210         our ConstructorInitializer.
8211
8212         * statement.cs
8213         (TopLevelBlock.TopLevelBranching): New public property.
8214         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
8215         and create our `TopLevelBranching'.
8216
8217         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
8218         anonymous method host, use `block.TopLevelBranching' rather than
8219         creating a new branching.
8220
8221 2005-04-20  Miguel de Icaza  <miguel@novell.com>
8222
8223         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
8224         a ScopeInfo, if any of the current children is a child of the new
8225         entry, move those children there.
8226
8227 2005-04-30  Martin Baulig  <martin@ximian.com>
8228
8229         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
8230         at the beginning of a SwitchSection.  Fix #73335.
8231
8232 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
8233
8234         Fix #74378
8235         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
8236         
8237         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
8238         (FieldExpr.DoResolve): Obsolete members are ignored for field
8239         initializers.
8240         
8241 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
8242
8243         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
8244         of arrays detection.
8245
8246         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
8247         verification.
8248         (Field.VerifyClsCompliance): Volatile fields are not compliant.
8249
8250         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
8251         arrays report.
8252
8253 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
8254
8255         * cs-parser.jay: Use the prefered version of -unsafe in error
8256         message.
8257
8258 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
8259
8260         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
8261         circumstances.
8262
8263 2005-04-20  John Luke  <john.luke@gmail.com>
8264
8265         * driver.cs: fix typo in error message, --outout to --output
8266
8267 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
8268
8269         * codegen.cs (InRefOutArgumentResolving): New field.
8270         
8271         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
8272         fields outside contructor.
8273         
8274         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
8275         
8276 2005-04-19  Miguel de Icaza  <miguel@novell.com>
8277
8278         * anonymous.cs (CaptureContext.EmitParameterInstance): The
8279         parameter code was not completed ever, so it was not as up-to-date
8280         as local variables.  Must finish it.
8281
8282         The bug fix was to compare the Toplevel of the block, not the
8283         current block.  Thanks for Ben for pointing this out. 
8284
8285 2005-04-19  Raja R Harinath  <rharinath@novell.com>
8286
8287         * decl.cs (AddMethods): Use the declaring type of the problem
8288         method to determine if we want to squash a warning.
8289
8290 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
8291
8292         * attribute.cs: Removed debug output.
8293
8294         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
8295         
8296         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
8297         Report.Stderr.
8298         
8299 2005-04-18  Raja R Harinath  <rharinath@novell.com>
8300
8301         Fix #74481.
8302         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
8303         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
8304         all null comparisons against reference types.
8305
8306 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
8307
8308         Fix# 74565
8309         * class.cs (TypeContainer.CircularDepException) New nested
8310         exception class.
8311         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
8312         (TypeContainer.DefineType): Removed error, reset InTransit before
8313         exit.
8314         (Class.DefineType): Throw exception when is in Transit.
8315         Catch exception and report error.
8316         (Struct.DefineType): Throw exception when is in Transit.
8317         Catch exception and report error.
8318         (Interface.DefineType): Throw exception when is in Transit.
8319         Catch exception and report error.
8320
8321         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
8322         handle nested exception handlers.
8323
8324         * flowanalysis.cs (InTryWithCatch): New method, search for try with
8325         a catch.
8326
8327         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
8328         InFinally and InCatch storage.
8329
8330         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
8331         (Catch.Resolve): Set and Restore ec.InCatch.
8332         (Try.Resolve): Set and Restore ec.InFinally.
8333         (Try.HasCatch): True when try has catch.
8334
8335 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
8336
8337         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
8338           for the same event member, so exclude such cases from warning 419.
8339           Fixed bug #74633.
8340
8341 2005-04-16  Miguel de Icaza  <miguel@novell.com>
8342
8343         * expression.cs (Binary.ResolveOperator): Apply patch from John
8344         Luke to fix bug 59864: operators &, | and ^ on enumerations
8345         require that the same enum type on both sides.
8346
8347         * driver.cs: Add warnings to old flag usage, this is to assist
8348         people who produce Makefiles and hope that the Makefiles will be
8349         used on Windows.
8350
8351         * class.cs (TypeContainer.EmitType): Moved the definition of the
8352         special $PRIVATE$ field from the resolve phase to the Emit phase.
8353         During resolve we do not know if we are a struct with
8354         HasExplicitLayout, we know this only after the attributes for the
8355         type are emitted.
8356
8357         Set the FieldOffset to zero on the dummy field that we create for
8358         the class.   Fixes 74590.
8359
8360 2005-04-16  Raja R Harinath  <rharinath@novell.com>
8361
8362         Fix #73834.
8363         * ecore.cs (PropertyExpr.resolved): New.
8364         (DoResolve): Use it to handle a case of double resolution here.
8365         Handle a case of identical-name-and-type-name.
8366         * expression.cs (ArrayCreation.CheckIndices): Avoid double
8367         resolution by storing the results of expression resolution back
8368         into the "probes" array.
8369
8370 2005-04-15  Raja R Harinath  <rharinath@novell.com>
8371
8372         Fix cs0208-7.cs and cs0208-8.cs.
8373         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
8374         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
8375         error reporting to point out the reason a struct is not unmanaged.
8376
8377 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
8378
8379         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
8380           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
8381
8382 2005-04-13  Raja R Harinath  <rharinath@novell.com>
8383
8384         Fix #74528.
8385         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
8386         IdenticalNameAndTypeName here.
8387         (EventExpr.InstanceResolve): Likewise.
8388
8389 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
8390
8391         C# 2.0 DefaultCharSetAttribute implementation
8392         
8393         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
8394         which allows us to set GlobalNamespace for every resolve.
8395         (Attribute.ResolveArguments): Cut from Resolve.
8396         (Attribute.GetCharSetValue): Returns CharSet named argument.
8397         (Attribute.DefinePInvokeMethod): Gets default charset from
8398         module settings.
8399         (GlobalAttribute.ResolveAsTypeStep): Override.
8400         (GlobalAttribute.ResolveArguments): Override.
8401         
8402         * class.cs (TypeAttr): Is protected.
8403         
8404         * codegen.cs (ModuleClass.DefaultCharSet): New member.
8405         (ModuleClass.DefaultCharSetType): New memeber.
8406         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
8407         
8408         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
8409         charset from module.
8410         
8411         * delegate.cs (TypeAttr): Override.
8412         (Delegate.DefineType): Use this TypeAttr.
8413         
8414         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
8415         at very early stage (before types are defined) to resolve model
8416         module attributes. It will probably not work with corlib but it
8417         should be ok.
8418         
8419         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
8420         charset from module.
8421         
8422         * typemanager.cs (default_charset_type): New type.
8423
8424 2005-04-13  Raja R Harinath  <rharinath@novell.com>
8425
8426         * decl.cs (MemberCache.AddMethods): Don't warn if
8427         System.Object.Finalize has buggy MethodAttributes.
8428
8429         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
8430         removed below.
8431
8432 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
8433
8434         * doc.cs : detect ambiguous reference to overloaded members.
8435           Fixed bug #71603. MS 1.1 csc does not detect it.
8436
8437 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
8438
8439         * doc.cs : delegates must not be referenced with parameters.
8440           Fixed bug #71605.
8441
8442 2005-04-12  Miguel de Icaza  <miguel@novell.com>
8443
8444         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
8445
8446 2005-04-10  Miguel de Icaza  <miguel@novell.com>
8447
8448         * driver.cs (MainDriver): Stop processing if the CLS stage found
8449         errors. 
8450
8451         (CompilerCallableEntryPoint.InvokeCompiler): Always
8452         reset after execution;   Take a TextWriter argument for the
8453         output.
8454
8455         * report.cs: Use the error stream instead of hardcoding stderr. 
8456
8457 2005-04-09  Miguel de Icaza  <miguel@novell.com>
8458
8459         * class.cs: Reduce code paths to test, too small of an
8460         optimization to make it worth the extra testing.  Always perform
8461         it. 
8462
8463 2005-04-08  Raja R Harinath  <rharinath@novell.com>
8464
8465         Fix #74510.
8466         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
8467         operators that had errors reported on them.
8468
8469 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
8470
8471         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
8472         argument types.
8473         (Attribute.Resolve): Add named argument type checking.
8474         
8475         * class.cs (FixedField.Define): Use IsPrimitiveType
8476         
8477         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
8478         
8479         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
8480         unsafe parameter types.
8481         
8482         * statement.cs (Using.ResolveExpression): Add better error description.
8483         
8484         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
8485         
8486 2005-04-08  Raja R Harinath  <rharinath@novell.com>
8487
8488         Fix #74484.
8489         * attribute.cs (Attribute.GetAttributeUsage): Resolve
8490         AttributeUsageAttribute in the emitcontext of the attribute class,
8491         not in the emitcontext of the attributable entity it was attached to.
8492         * cs-parser.jay: Use 'current_class', not 'current_container',
8493         when creating a GlobalAttribute.
8494
8495 2005-04-08  Alp Toker  <alp@atoker.com>
8496
8497         * pending.cs: The fix to #58413 failed to compile methods implementing
8498         interfaces with/without params modifiers and vice versa, even though
8499         params modifiers aren't part of the signature. Make the modifier check
8500         less strict as in csc.
8501
8502 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
8503             Anoob V E  <projectmonokochi@rediffmail.com>
8504             Harilal P R  <projectmonokochi@rediffmail.com>
8505
8506         Fix #58413.
8507         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
8508         modifiers of pending methods.
8509         (PendingImplementation.PendingImplementation): Initialize it.
8510         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
8511         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
8512         with ParameterData.  Add check for modifiers.
8513         * class.cs (MethodData.Define): Update to changes.
8514
8515 2005-04-07  Raja R Harinath  <rharinath@novell.com>
8516
8517         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
8518
8519 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
8520
8521         * class.cs (PropertyMethod.Define): Check private accessor in abstract
8522         property.
8523         
8524         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
8525         
8526         * rootcontext.cs,
8527         * typemanager.cs: Registered RequiredAttributeAttribute.
8528         
8529 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
8530
8531         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
8532         Warning CS0169 is back at level 3.
8533         (IMethodData.SetMemberIsUsed): New method.
8534         
8535         * decl.cs (IsUsed): New value; moved from FieldBase.Status
8536         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
8537         
8538         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
8539
8540         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
8541         contants.
8542         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
8543         is used.
8544         
8545         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
8546         is used.
8547         
8548         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
8549         to avoid the problems with nested types.
8550
8551 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
8552             Anoob V.E  <projectmonokochi@rediffmail.com>
8553             Harilal P.R  <projectmonokochi@rediffmail.com>
8554             Raja R Harinath  <rharinath@novell.com>
8555
8556         Fix #73820.
8557         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
8558         attribute.
8559         * typemanager (GetConstructor): Make public.
8560
8561 2005-04-05  John Luke  <john.luke@gmail.com>
8562             Raja R Harinath  <rharinath@novell.com>
8563
8564         Fix #62232.
8565         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
8566         struct too.  Return false quicker in a few cases.
8567         (VerifyUnManaged): Use it.
8568
8569 2005-04-05  Raja R Harinath  <rharinath@novell.com>
8570
8571         Fix #74041.
8572         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
8573         not 'unreachable_seen'.
8574
8575 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
8576
8577         * attribute.cs (Attribute.GetValue): Removed unused.
8578         
8579         * codegen.cs (CodeGen.TrimExt): Removed unused.
8580         
8581         * cs-parser.jay (output): Removed unused.
8582         
8583         * cs-tokenizer.cs (hex_digits): Removed unused.
8584         
8585         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
8586         
8587         * expression.cs (Indirection.LoadExprValue): Removed unused.
8588         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
8589         
8590         * iterators.cs (Iterator.param_types): Removed unused.
8591         
8592         * statement.cs (Goto.block): Removed unused.
8593         (ToplevelBlock.did): Removed unused.
8594         (Switch.ResolveConstantSwitch): Removed unused.
8595
8596 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
8597
8598         * rootcontext.cs: Allow mcs to bootstrap with the compilation
8599         resetting thingy.
8600
8601 2005-04-01  Raja R Harinath  <rharinath@novell.com>
8602
8603         Fix #74232 and cs0208-3.cs.
8604         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
8605         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
8606         unmanaged type.  Don't use FieldBuilders when 't' is a
8607         TypeBuilder.  Use ModFlags and MemberType fields.
8608         * class.cs (MemberBase.member_type): Rename from MemberType.
8609         (MemberBase.MemberType): New property.  Determines member_type on
8610         demand.
8611         (MemberBase.DoDefine): Don't initialize MemberType here.
8612         (FieldMember.Define): Likewise.
8613
8614 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
8615
8616         Fix #74241
8617         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
8618         Attributes are emitted there.
8619         
8620 2005-04-01  Raja R Harinath  <rharinath@novell.com>
8621
8622         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
8623         keyword in 'partial enum' too.
8624         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
8625         is not allowed).
8626         Report from Kamil Skalski <nazgul@omega.pl>.
8627
8628         Fix #74309.
8629         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
8630         have partial containers too.
8631
8632         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
8633         in block' checks to Block.CheckInvariantMeaningInBlock.
8634         * statement.cs (Block.GetKnownVariableInfo): Make private.
8635         (Block.IsVariableUsedInChildBlock): Remove.
8636         (Block.IsVariableUsedInBlock): Likewise.
8637         (Block.CheckInvariantMeaningInBlock): New.  Show location of
8638         conflicting declaration.
8639         (Block.AddVariable): Make error messages less long-winded and more
8640         specific.  Show location of conflicting declaration.
8641         * parameter.cs (Parameters.Location): New readonly property.
8642
8643 2005-03-31  Raja R Harinath  <rharinath@novell.com>
8644
8645         Clean up semantics of invoking ResolveMemberAccess.
8646         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
8647         can have an instance, ensure that we pass in a non-TypeExpression
8648         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
8649         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
8650         argument.  Update to changes and simplify.
8651         (FieldExpr.Emitinstance): Remove CS0120 check.
8652         (PropertyExpr.EmitInstance): Likewise.
8653         * expression.cs (Argument.Resolve): Likewise.
8654         (Invocation.DoResolve): Update to changes in semantics of
8655         InstanceExpression.
8656
8657 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
8658
8659         Fix #74241
8660         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
8661         customization.
8662         
8663         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
8664
8665 2005-03-31  Raja R Harinath  <rharinath@novell.com>
8666
8667         Fix difference in behaviour with commandline invocation.
8668         * driver.cs (Driver.Reset): New.
8669         (CompilerCallableEntryPoint): Call it.
8670
8671         * statement.cs (If.Resolve): Avoid spurious "uninitialized
8672         variable" warnings if the boolean expression failed to resolve.
8673
8674 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
8675
8676         * attribute.cs: Fix the union of several permissions when some of them
8677         are unrestricted (so the result isn't an unrestricted permission set).
8678         Fix #74036.
8679
8680 2005-03-30  Raja R Harinath  <rharinath@novell.com>
8681
8682         * ecore.cs (MemberExpr): New class.  Convert from interface
8683         IMemberExpr.
8684         (MemberExpr.ResolveMemberAccess): Refactor and move here from
8685         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
8686         error checks.
8687         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
8688         (MethodGroupExpr.IsExplicitImpl): Remove.
8689         (Expression.GetFieldFromEvent): Remove.
8690         (SimpleName.MemberStaticCheck): Remove.
8691         (SimpleName.DoSimpleNameResolve): Update to changes.
8692         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
8693         (MemberAccess.IdenticalNameAndTypeName): Remove.
8694         (MemberAccess.error176): Move to MemberExpr.
8695         (MemberAccess.DoResolve): Update to changes.
8696         (BaseAccess.DoResolve): Likewise.
8697
8698 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
8699
8700         C# 2.0 Conditional attribute class implementation
8701         
8702         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
8703         Analyzes class whether it has attribute which has ConditionalAttribute
8704         and its condition is not defined.
8705         
8706         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
8707         (Class.IsExcluded): New method. Search for at least one defined
8708         condition in ConditionalAttribute of attribute class.
8709
8710 2005-03-30  Raja R Harinath  <rharinath@novell.com>
8711
8712         * ecore.cs (PropertyExpr): Derive from Expression, not
8713         ExpressionStatement.
8714         (PropertyExpr.EmitStatement): Remove.
8715
8716 2005-03-29  Raja R Harinath  <rharinath@novell.com>
8717
8718         Fix #74060.
8719         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
8720         internal field "value__" of an enum be private.  The examples for
8721         "value__" that I found on MSDN all used FieldAttributes.Private.
8722
8723         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
8724         Don't mention IL method attribute names.
8725
8726         Fix #47991.  Remove a TODO.
8727         * statement.cs (Block.Toplevel): Make into a field.
8728         (Block.Parameters): Move into ToplevelBlock.
8729         (Block.known_variables): Rename from child_variable_names.
8730         (Block.Block): Remove variants that take Parameters.  Initialize
8731         'Toplevel' with the immediately surrounding toplevel block.
8732         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
8733         LocalInfo parameter.
8734         (Block.GetKnownVariableInfo): New.
8735         (Block.IsVariableNameUsedInChildBlock): Update.
8736         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
8737         the block, even though it may not be in scope.
8738         (Block.AddVariable): Remove Parameters parameter.  Use
8739         Toplevel.Parameters instead.
8740         (Block.AddConstant): Remove Parameters parameter.
8741         (Block.GetParameterReference): Update to use Toplevel.Parameters.
8742         (Block.IsParamaterReference): Likewise.
8743         (Block.IsLocalParameter): Likewise.  Simplify a lot.
8744         (ToplevelBlock.Parameters): New.  Moved from Block.
8745         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
8746         initialize Parameters to a non-null value.
8747         * cs-parser.jay: Update to changes.
8748         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
8749         simple names that mean different things in the same block.  Use
8750         Block.IsVariableNameUsedInBlock.
8751
8752 2005-03-28  Raja R Harinath  <rharinath@novell.com>
8753
8754         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
8755         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
8756         GetTypeHandle.  It is possible for a reflected type to derive from
8757         a TypeBuilder (e.g., int[] derives from the TypeBuilder
8758         System.Array during mscorlib compilation).
8759         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
8760         contain a method_hash, don't create one either.  Don't create a
8761         deep copy of the base cache's method_hash.
8762         (MemberCache.SetupCache): Rename back from DeepCopy.
8763         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
8764         already initialized.  If we see an override function, add its
8765         underlying base virtual function to the member_hash too.
8766
8767         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
8768
8769 2005-03-26  Raja R Harinath  <harinath@acm.org>
8770
8771         Fix #73038.
8772         * assign.cs (Assign.DoResolve): When the RHS of an assignment
8773         fails to resolve, ensure that the LHS is still resolved as an
8774         lvalue.
8775
8776 2005-03-25  Raja R Harinath  <harinath@acm.org>
8777
8778         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
8779         ec.ContainerType.
8780         (Enum.current_ec): Remove.
8781         (Enum.LookupEnumValue): Remove EmitContext argument.
8782         Just uses the one created during DefineType.
8783         (Enum.FindMembers): Update.
8784         * expression.cs (MemberAccess.DoResolve): Update.
8785
8786 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
8787
8788         * assign.cs (Assign.DoResolve): Check for CS1717 when
8789         source and target are same (uses Equals).
8790
8791         * expression.cs (LocalVariableReference, ParameterReference,
8792         This): Implemented Equals, GetHashCode.
8793
8794         * statement.cs (Block.GetParameterReference): Removed useless
8795         local variable.
8796
8797 2005-03-22  Raja R Harinath  <rharinath@novell.com>
8798
8799         Fix cs0128.cs
8800         * statement.cs (Block.AddVariable): Ensure that we skip implicit
8801         blocks before deciding whether the error is cs0136 or cs0128.
8802
8803         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
8804         (using_alias_directive, using_namespace_directive): Pass
8805         MemberName, not an expression to Namespace.UsingAlias and
8806         Namespace.Using.
8807         (MakeName): Use the MemberName of the namespace.
8808         * namespace.cs (Namespace.MemberName): New.
8809         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
8810         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
8811         Likewise.
8812         * decl.cs (MemberName.Name): Make readonly.
8813         (MemberName.FromDotted): New "constructor".
8814         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
8815         (MemberCore.Name): Compute from MemberName on demand.
8816         (MemberCore.SetMemberName): Provide a way to change the
8817         MemberName.
8818         (MemberCore.AddToContainer): Don't take a fullname parameter.
8819         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
8820         fully qualified name of the container to the member name.
8821         (TypeContainer.AddToTypeContainer): Use a fully qualified name
8822         only if the type is a member of the root container.
8823         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
8824         MemberName.Left rather than searching for an embedded ".".
8825         (PartialContainer.CreatePart): Update to changes in RootContext.
8826         (MemberBase.ShortName): Turn into a property.  Use
8827         MemberCore.SetMemberName.
8828         (MemberBase.ExplicitInterfaceName): Remove.
8829         (MemberBase.UpdateMemberName): Remove.
8830         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
8831         (PropertyBase.SetMemberName): New override.
8832         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
8833         (Tree.GetDecl): New.
8834         (Tree.AllDecls): Rename from Decls.
8835         * attribute.cs, enum.cs, report.cs: Update to changes.
8836         * driver.cs (MainDriver): Use MemberName.FromDotted on
8837         RootContext.MainClass.
8838
8839 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
8840
8841         * class.cs (FixedField.Define): Check for CS1664 and more sanity
8842         checks.
8843
8844         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
8845
8846 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
8847
8848         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
8849         property accessor modifiers.
8850
8851         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
8852         fixed buffer attribute (CS1716).
8853         (PropertyMethod.HasCustomAccessModifier): When property accessor
8854         has custom modifier.
8855
8856         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
8857         modifiers.
8858         (PropertyExpr.DoResolveLValue): Add CS0272.
8859
8860 2005-03-17  Miguel de Icaza  <miguel@novell.com>
8861
8862         * convert.cs: When converting to a pointer, use the proper Conv.U
8863         or Conv.I depending on the source data type.
8864
8865         * cs-tokenizer.cs: Make the size for large decimal constants,
8866         fixes #72957.
8867
8868 2005-03-17  Martin Baulig  <martin@ximian.com>
8869
8870         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
8871         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
8872
8873 2005-03-17  Martin Baulig  <martin@ximian.com>
8874
8875         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
8876         to bool so we can return an error condition.
8877         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
8878         returned an error.
8879
8880 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
8881
8882         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
8883         attributes.
8884
8885 2005-03-16  Raja R Harinath  <rharinath@novell.com>
8886
8887         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
8888         Refactor to avoid traversing the list of assemblies, and to avoid
8889         string concatenation.
8890         * typemanager.cs (guid_attr_type): Remove.
8891         (negative_hits, pointers, references): Remove hashes.
8892         (type_hash): New.
8893         (GetConstructedType): New.  Uses type_hash to handle constructed
8894         types (arrays, references, pointers).
8895         (GetReferenceType, GetPointerType): Use it.
8896         (GetNestedType): New.  Uses type_hash to handle nested types of
8897         reflected types.
8898         (LookupType, LookupTypeDirect): Remove.
8899         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
8900         'types' hash and LookupTypeReflection directly.
8901         (params_string, params_object): Use GetConstructedType.
8902         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
8903         top-level types.
8904         (Namespace.Lookup): Use cached_types.
8905         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
8906         provided by old TypeManager.LookupType.
8907         * rootcontext.cs (MakeFQN): Remove.
8908         * decl.cs (DeclSpace.MakeFQN): Likewise.
8909         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
8910         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
8911         TypeManager.GetConstructedType.
8912         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
8913
8914 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
8915
8916         * class.cs (MethodCore.CheckBase): Report CS1715 for properties and
8917         indexers.
8918
8919         * cs-parser.jay: Reports CS1527 for any namespace element.
8920
8921         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
8922         Added CS0407.
8923
8924         * expression.cs (ParameterReference.IsAssigned): Changed error to
8925         CS0269.
8926         (Error_WrongNumArguments): Moved CS0245 detection here.
8927
8928         * statement.cs (Return.Resolve): Add CS1622 report.
8929
8930 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
8931
8932         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
8933
8934 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
8935
8936         * attribute.cs expression.cs: Get rid of some allocations.
8937
8938 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
8939
8940         * doc.cs : just eliminate the latest change.
8941
8942 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
8943
8944         * doc.cs : commented out the latest change. It breaks xml-030.cs
8945
8946 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
8947
8948         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
8949           fail. So invoke CreateType() in FindDocumentedType().
8950
8951 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
8952
8953         * cs-tokenizer.cs : added IsKeyword().
8954         * doc.cs : Detect keyword incorrectly used as identifier.
8955           Allow identifiers prefixed by @.
8956
8957 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
8958
8959         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
8960         It caused exception in namespace resolving (again!).
8961         
8962         * class.cs (Class.ctor): Removed exit.
8963         (PropertyMethod.ctor): ditto.
8964         
8965         * codegen.cs (Codegen.Reset): Reset static data.
8966         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
8967         
8968         * cs-tokenizer.cs (Cleanup): Removed.
8969         
8970         * driver.cs (GetSystemDir): Rewrote to one line command.
8971         It caused problem with unloaded dynamic modules.
8972         (UnixParseOption): Removed Exit.
8973         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
8974         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
8975         Now can be mcs used as library.
8976         
8977         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
8978         empty location.
8979         
8980         * location.cs (Reset): Reset static data.
8981         
8982         * namespace.cs (Reset): Reset static data.
8983         
8984         * report.cs (Report.Reset): Reset static data.
8985         
8986         * rootcontext.cs (RootContext.Reset): Reset static data.
8987         
8988         * tree.cs (RootTypes.ctor): Use Location.Null
8989         
8990         * typemanager.cs (TypeManager.Reset): Reset static data.
8991         (CoreLookupType): Removed Exit.
8992         (TypeHandle.Reset): Reset static data.
8993         
8994 2005-03-10  Raja R Harinath  <rharinath@novell.com>
8995
8996         Fix #73516.
8997         * typemanager.cs (ComputeNamespaces): Import namespaces from
8998         referenced modules too.
8999
9000 2005-03-09  Raja R Harinath  <rharinath@novell.com>
9001
9002         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
9003         than '.'.
9004
9005 2005-03-09  Raja R Harinath  <rharinath@novell.com>
9006
9007         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
9008         enclosing DeclSpace.  This ensures that a name-lookup populates
9009         more caches and there are fewer 'TypeExpression's.  Carve out
9010         nested type lookup into ...
9011         (LookupNestedTypeInHierarchy): ... this.
9012
9013 2005-03-09  Raja R Harinath  <rharinath@novell.com>
9014
9015         Clean up a few partial-class semantics.  
9016         Fixes test-357.cs and cs1618-2.cs.
9017         * cs-parser.jay (struct_declaration): Use 'current_class' as
9018         parent of newly-created struct.  Remove call to Register ().
9019         Use 'pop_current_class' to complete handing the current struct.
9020         (interface_declaration): Likewise.
9021         (class_declaration): Likewise.
9022         (enum_declaration): Use 'current_class' as parent of newly created
9023         enum.
9024         (delegate_declaration): Likewise.
9025         (pop_current_class): New function.  This is used to handle closing
9026         up the 'current_class' and 'current_container', and pointing them
9027         to the enclosing class/container.
9028         (CSharpParser): Initialize 'current_class' too.
9029         * decl.cs (MemberCore): Add check for invariant: a partial
9030         container is not a parsed entity, and thus does not enclose any
9031         parsed members.
9032         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
9033         (DeclSpace.BaseTypeExpr): Use it.
9034         (DeclSpace.LookupType): Add check for invariant.
9035         * class.cs (TypeContainer): Add check for invariant: a nested
9036         class should have the same NamespaceEntry as its enclosing class.
9037         (TypeContainer.EmitFieldInitializers): Make virtual.
9038         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
9039         MemberCore.
9040         (TypeContainer.Register): Remove.
9041         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
9042         null.  Use TypeResolveEmitContext for resolving base types and
9043         interfaces.  Move initialization of Parts.TypeBuilder here from
9044         ...
9045         (TypeContainer.DefineNestedTypes): ... here.
9046         (PartialContainer): Take a Namespace not a NamespaceEntry.
9047         (PartialContainer.Create): Don't use Register.  Call the
9048         appropriate Add... function directly.
9049         (ClassPart): Take both the PartialContainer and the enclosing
9050         class as constructor arguments.
9051         (ClassPart.EmitFieldInitializers): Override.
9052         (ClassPart.PartFindNestedTypes): Remove.
9053         (FieldBase.GetInitializerExpression): Resolve the initializer
9054         expression in the emit context of the enclosing class.
9055         * tree.cs (RootTypes): Remove Register ().
9056         
9057 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
9058
9059         * cs-parser.jay: Removed CS0134.
9060         
9061         * driver.cs: Removed CS1901.
9062         
9063         * expression.cs (SizeOf.DoResolve): Don't report CS0233
9064         for predefined types.
9065
9066 2005-03-07  Duncan Mak  <duncan@novell.com>
9067
9068         * codegen.cs (Save):  Catch UnauthorizedAccessException as
9069         well. Fixes bug #73454.
9070
9071 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
9072
9073         * cs-tokenizer.cs (xtoken): Add CS1035.
9074         
9075         * class.cs (MethodData.Define): Add CS0683.
9076         (FieldMember.ctor): Add CS0681.
9077
9078 2005-03-07  Raja R Harinath  <rharinath@novell.com>
9079
9080         * ecore.cs (SimpleName.DoResolve): Rename from
9081         SimpleName.DoResolveAllowStatic.
9082         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
9083         Pass 'intermediate' flag to MemberStaticCheck.
9084         (SimpleName.MemberStaticCheck): Skip "static check" only in case
9085         of "intermediate" lookups via MemberAccess.
9086         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
9087         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
9088
9089 2005-03-07  Raja R Harinath  <rharinath@novell.com>
9090
9091         Fix #73394.
9092         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
9093         slipped in because of variable names that are identical to a
9094         builtin type's BCL equivalent ('string String;', 'int Int32;').
9095         (PropertyExpr.EmitInstance): Likewise.
9096
9097 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
9098
9099         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
9100         
9101         * report.cs (warning_ignore_table): Made public.
9102
9103 2005-03-04  Raja R Harinath  <rharinath@novell.com>
9104
9105         Fix #73282.
9106         * class.cs (MethodData.Emit): Pass 'container' to
9107         container.GetObsoleteAttribute instead of 'container.Parent'.
9108
9109 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
9110
9111         * cs-parser.jay: Add 1534 error test.
9112
9113         * iterators.cs (Yield.CheckContext): Add error 1629.
9114         (Iterator.ctor): Save unsafe modifier.
9115         (MoveNextMethod.DoEmit): Restore unsafe context.
9116
9117         * namespace.cs (UsingAlias): Better error message.
9118
9119 2005-03-03  Dan Winship  <danw@novell.com>
9120
9121         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
9122         the warning message [#73219]
9123
9124 2005-03-03  Raja R Harinath  <rharinath@novell.com>
9125
9126         Fix compile with MCS 1.0.0.0.
9127         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
9128         w_restore to not depend on string constant folding.
9129
9130 2005-03-03  Raja R Harinath  <rharinath@novell.com>
9131
9132         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
9133         CS0246 check to users who passed 'silent = false'.
9134         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
9135         check.
9136         (SimpleName.SimpleNameResolve): Update.
9137         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
9138         (MemberAccess.IdenticalNameAndTypeName): Update.
9139         * doc.cs (FindDocumentedTypeNonArray): Update.
9140
9141 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
9142
9143         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
9144         * parameters.cs (ComputeAndDefineParameters): Remove.
9145         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
9146         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
9147         Use GetParameterInfo.
9148
9149 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
9150
9151         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
9152
9153 2005-03-02  Raja R Harinath  <rharinath@novell.com>
9154
9155         Unify DeclSpace.LookupType and DeclSpace.FindType.
9156         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
9157         is in charge of defining nested types on demand.
9158         (DeclSpace.LookupType): Use it when the current_type is a
9159         TypeBuilder.  Use LookupTypeDirect for reflected types.
9160         (DeclSpace.FindType): Remove.
9161         (DeclSpace.LookupInterfaceOrClass): Likewise.
9162         (DeclSpace.DefineTypeAndParents): Likewise.
9163         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
9164         DeclSpace.LookupType.
9165         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
9166         * typemanager.cs (LookupType): Simplify.
9167         (AddUserType): Remove type from negative_hits.
9168         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
9169         * class.cs (TypeContainer.FindMembers): Move handling of nested
9170         types ...
9171         (TypeContainer.FindMembers_NestedTypes): ... here.
9172         (TypeContainer.FindNestedType): Implement override.
9173         (ClassPart.FindNestedType): Delegate to PartialContainer.
9174         (ClassPart.PartFindNestedType): Looks up the nested types of the
9175         part alone.
9176
9177 2005-03-02  Martin Baulig  <martin@ximian.com>
9178
9179         * class.cs (TypeContainer.DoDefineMembers): We also need a default
9180         static constructor in static classes.
9181
9182 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
9183
9184         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
9185         sizeParamIndex is not specified.
9186
9187 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
9188
9189         Fix #73117
9190         * report.cs (WarningMessage.IsEnabled): Missing null check.
9191
9192 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
9193
9194         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
9195         in the fields and not in the properties.
9196
9197 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
9198
9199         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
9200         fields as well.
9201
9202 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
9203
9204         * attribute.cs: Small refactoring (improved robustness).
9205         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
9206         (ValidateGuid): Removed.
9207         (Resolve): Removed referenced to above mentioned.
9208         (GetAttributeUsage): Made private and changed to work without
9209         class assistance.
9210         (GetIndexerAttributeValue): Don't crash.
9211         (GetConditionalAttributeValue): Ditto.
9212         (GetClsCompliantAttributeValue): Ditto.
9213         (ExtractSecurityPermissionSet): All attributes exceptions are
9214         error 648.
9215         (GetPropertyValue): New helper.
9216         (GetMethodImplOptions): New method.
9217         (DefinePInvokeMethod): Reuse common code. Implemented handling of
9218         some missing properties.
9219         
9220         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
9221         (Method.ApplyAttributeBuilder): Updated.
9222         
9223         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
9224         exception.
9225
9226 2005-02-28  Raja R Harinath  <rharinath@novell.com>
9227
9228         Fix #73052.
9229         * report.cs (Report.SymbolRelatedToPreviousError): Handle
9230         non-simple types (array, pointer, reference).
9231
9232 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
9233
9234         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
9235
9236         * class.cs (MethodCore.IsDuplicateImplementation): Special error
9237         for operators.
9238         (Method.CheckBase): Catch wrong destructor here.
9239         (MethodData.Define): Add errors 550, 668.
9240
9241         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
9242
9243         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
9244
9245         * pending.cs (VerifyPendingMethods): Add error 551.
9246
9247         * typemanager.cs (CSharpName): Next error report helper.
9248
9249 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
9250
9251         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
9252         attributes. Removed useless attribute double check.
9253         It saves almost 2MBs for corlib.
9254
9255 2005-02-25  Raja R Harinath  <rharinath@novell.com>
9256
9257         Fix #72924.
9258         * statement.cs (ExpressionStatement.Resolve): Make robust to being
9259         called twice in case of error.
9260
9261 2005-02-23  Chris Toshok  <toshok@ximian.com>
9262
9263         Fix compiler portions of #72827.
9264         * statement.cs (Block.Emit): call Begin/EndScope on the
9265         EmitContext instead of the ILGenerator.
9266
9267         * codegen.cs (EmitContext.BeginScope): new method, call
9268         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
9269         we have one.)
9270         (EmitContext.BeginScope): same, but EndScope and CloseScope
9271
9272         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
9273         offset and call the superclass's OpenScope(int) with it.
9274         (SymbolWriter.CloseScope): get the current il
9275         offset and call superclass's CloseScope(int) with it.
9276
9277 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
9278
9279         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
9280         CS1677 for out and ref as well.
9281
9282         * class.cs (Method.Define): Add error CS1599 detection.
9283         
9284         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
9285         
9286         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
9287         
9288         * delegate.cs (Delegate.Define): Add error CS1599 detection.
9289         
9290         * support.cs.cs (ModifierDesc): New helper method.
9291
9292 2005-02-23  Raja R Harinath  <rharinath@novell.com>
9293             Abin Thomas  <projectmonokochi@rediffmail.com>
9294             Anoob V E  <projectmonokochi@rediffmail.com>
9295             Harilal P R  <projectmonokochi@rediffmail.com>
9296
9297         Fix #57851, #72718.
9298         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
9299         MemberLookup (used for error reporting) actually returns a result.
9300         Fix error report number (122, not 112).
9301
9302 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
9303             Anoob V E  <projectmonokochi@rediffmail.com>
9304             Harilal P R  <projectmonokochi@rediffmail.com>
9305
9306         Fix #71134.
9307         * pending.cs (PendingImplementation.GetAbstractMethods):
9308         Find NonPublic members too.
9309
9310 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
9311
9312         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
9313         Fixed error 217.
9314         
9315         * class.cs (MethodCore.CheckMethodAgainstBase):
9316         Add error 239 report.
9317
9318 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9319
9320         Fix #68955.
9321         * expression.cs (Invocation.IsApplicable): Make public.
9322         (Invocation.IsParamsMethodApplicable): Likewise.
9323         * delegate.cs (Delegate.VerifyApplicability): Don't use
9324         Invocation.VerifyArgumentCompat for parameter applicability
9325         testing.  Use Invocation.IsApplicable and
9326         Invocation.IsParamsMethodApplicable.
9327
9328 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
9329
9330         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
9331         
9332         * class.cs (Operator.Define): Add error 217 report.
9333         
9334 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9335
9336         * namespace.cs (UsingEntry.Resolve): Undo change below.
9337
9338 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9339
9340         Fix #72756.
9341         * ecore.cs (Expression.MemberLookupFailed): Add argument to
9342         disable the error message when the extended MemberLookup also
9343         fails.
9344         (Expression.MemberLookupFinal): Update.
9345         (SimpleName.DoSimpleNameResolve): Update.
9346         * expression.cs (MemberAccess.ResolveNamespaceOrType):
9347         Don't use MemberLookupFinal.
9348         (New.DoResolve): Update.
9349         (BaseAccess.CommonResolve): Update.
9350
9351 2005-02-21  Raja R Harinath  <rharinath@novell.com>
9352
9353         Fix #72732.
9354         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
9355         occured previously, don't resolve again.
9356
9357 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
9358
9359         Fix #69949
9360         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
9361         argument. Call ResolveAttributeUsage for unresolved.
9362         when types doesn't match ctor arguments.
9363         
9364         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
9365         for nested attribute classes.
9366         (Class.attribute_usage): Removed.
9367         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
9368         for attribute class.
9369         
9370         * ecore.cs (IsAttribute): Removed.
9371         
9372         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
9373         
9374         * rootcontext.cs (RegisterAttribute): Removed, attributes are
9375         now normal types.
9376         (attribute_types): Removed.
9377         (EmitCode): Global attributes are emited as the latest.
9378
9379 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
9380
9381         * class.cs (EmitFieldInitializers): Don't emit field initializer
9382         for default values when optimilization is on.
9383         
9384         * constant.cs (Constant.IsDefaultValue): New property.
9385         
9386         * driver.cs: Add /optimize handling.
9387         
9388         * constant.cs,
9389         * ecore.cs,
9390         * literal.cs: Implement new IsDefaultValue property.
9391         
9392         * rootcontext.cs (Optimize): New field, holds /optimize option.
9393
9394 2005-02-18  Raja R Harinath  <rharinath@novell.com>
9395
9396         Fix crasher in re-opened #72347.
9397         * namespace.cs (Namespace.Lookup): Return null if
9398         DeclSpace.DefineType returns null.
9399
9400         Fix #72678.
9401         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
9402
9403 2005-02-18  Raja R Harinath  <rharinath@novell.com>
9404
9405         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
9406         now returns null if it cannot resolve to an lvalue.
9407         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
9408         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
9409         returned null.  Remove check for SimpleName.
9410         (EventExpr.DoResolveLValue): New.
9411         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
9412         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
9413         error from ...
9414         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
9415         avoid CS0131 error.
9416         (Unary.ResolveOperator): Move CS0211 check ...
9417         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
9418         CS0131 error.
9419         (Unary.DoResolveLValue): Simplify.
9420         (AddressOf.DoResolveLValue): New.
9421         (ArrayAccess.DoResolveLValue): New.
9422
9423 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
9424
9425         * attribute.cs (Attribute.Resolve): Add arguments casting for
9426         when types doesn't match ctor arguments.
9427
9428 2005-02-16  Raja R Harinath  <rharinath@novell.com>
9429
9430         Fix parts of #63202.
9431         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
9432         lookup of operator in base type.  Ensure that all checks happen
9433         when the operator resolves to an "op_..." method.
9434
9435 2005-02-15  Raja R Harinath  <rharinath@novell.com>
9436
9437         Fix #71992.
9438         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
9439         'ignore_cs0104' parameter.  Pass it to ...
9440         (NamespaceEntry.Lookup): ... this.
9441         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
9442         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
9443         (TypeLookupExpression.DoResolveAsTypeStep): Update.
9444         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
9445         Update.  Request that cs0104 errors be ignored.
9446         (ComposedCast.ResolveAsTypeStep): Update.
9447
9448 2005-02-14  Raja R Harinath  <rharinath@novell.com>
9449
9450         Fix #59209.
9451         * expression.cs (Invocation.BetterFunction): Remove support for
9452         comparing virtual functions and their overrides.
9453         (Invocation.IsOverride): New.
9454         (Invocation.OverloadResolve): Don't consider 'override' functions
9455         during candidate selection.  Store them in a lookaside list.
9456         If the selected method is a 'virtual' function, use the list to
9457         find any overrides that are closer to the LHS type.
9458
9459 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
9460
9461         * expression.cs (New.DoResolve): Add complex core type reduction.
9462         (New.Constantify): Converts complex core type syntax like 'new int ()'
9463         to simple constant.
9464         
9465 2005-02-14  Raja R Harinath  <rharinath@novell.com>
9466
9467         * decl.cs (EntryType.EntryType): New constructor to create an
9468         updated copy of a cache entry.
9469         (MemberCache.AddMethods): Use it.
9470         (MemberCache.ClearDeclaredOnly): Remove.
9471         (MemberCache.MemberCache): Update.
9472
9473 2005-02-11  Miguel de Icaza  <miguel@novell.com>
9474
9475         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
9476         variable.  This one is represents the actual low-level declaration
9477         of the method, as opposed to the semantic level `IsStatic'.   
9478
9479         An anonymous method which is hosted into a static method might be
9480         actually an instance method.  IsStatic would reflect the
9481         container, while MethodIsStatic represents the actual code
9482         generated.
9483
9484         * expression.cs (ParameterReference): Use the new MethodIsStatic
9485         instead of IsStatic.
9486
9487         * anonymous.cs (AnonymousMethod.Compatible): Pass the
9488         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
9489         set on the current EmitContext. 
9490
9491         * expression.cs (Cast): Overload DoResolveLValue so we can pass
9492         resolve our casted expression as an LValue.  This triggers the
9493         proper LValue processing that is later required by Assign.
9494
9495         This fixes 72347.
9496
9497         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
9498
9499 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
9500
9501         C# 2.0 Fixed buffer implementation
9502
9503         * anonymous.cs: Update after RegisterHelperClass renaming.
9504
9505         * attribute.cs (AttributeTester.fixed_buffer_cache):
9506         Cache of external fixed buffers.
9507         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
9508         implementation if field is fixed buffer else null.
9509
9510         * class.cs
9511         (TypeContainer.AddField): Accept FieldMember instead of Field.
9512         (FieldBase.IsFieldClsCompliant): Extracted code from
9513         VerifyClsCompliance descendant customization.
9514         (FixedField): New class handles fixed buffer fields.
9515         (FixedFieldExternal): Keeps information about imported fixed
9516         buffer.
9517         (IFixedField): Make access to internal or external fixed buffer
9518         same.
9519
9520         * cs-parser.jay: Add fixed buffer parsing.
9521
9522         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
9523         buffer.
9524
9525         * expression.cs (Indirection): Extended implementation to accept
9526         fixed buffer field.
9527         (PointerArithmetic.Emit): Get element from fixed buffer as well.
9528         (ElementAccess.MakePointerAccess): Get type as parameter.
9529         (DoResolve): Add fixed buffer field expression conversion.
9530         (DoResolveLValue): Ditto.
9531         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
9532         (ArrayPtr): Derives from FixedBufferPtr.
9533         (ArrayPtr.Emit): Add extra emit for array elements.
9534
9535         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
9536
9537         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
9538         for compiler generated types.
9539         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
9540
9541         * statement.cs (Fixed): Refactored to be easier add fixed buffer
9542         and consume less memory.
9543         (Fixed.Resolve): Add fixed buffer case.
9544
9545         * typemanager.cs (compiler_generated_attr_ctor,
9546         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
9547         (HasElementType): Add our own implementation to work on every
9548         runtime.
9549
9550 2005-02-11  Miguel de Icaza  <miguel@novell.com>
9551
9552         * anonymous.cs (CaptureContext): Track whether `this' has been
9553         referenced.   
9554
9555         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
9556         only captured `this' if it was implicitly done (instance
9557         methods/variables were used). 
9558
9559         * codegen.cs (EmitContext.CaptureThis): New method to flag that
9560         `this' must be captured.
9561
9562 2005-01-30  Miguel de Icaza  <miguel@novell.com>
9563  
9564         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
9565         is null it means that there has been no need to capture anything,
9566         so we just create a sibling.
9567
9568         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
9569
9570         Just a partial fix.  The other half is fairly elusive.
9571         
9572 2005-02-10  Raja R Harinath  <rharinath@novell.com>
9573
9574         Fix #52586, cs0121-4.cs.
9575         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
9576         and return a hashtable.
9577         (MemberCache.ClearDeclaredOnly): New.
9578         (MemberCache.MemberCache): Update to change.  Make a deep copy of
9579         the method_hash of a base type too.
9580         (MemberCache.AddMethods): Adapt to having a deep copy of the base
9581         type methods.  Overwrite entries with the same MethodHandle so
9582         that the ReflectedType is correct.  The process leaves in base
9583         virtual functions and their overrides as distinct entries.
9584         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
9585         matters since it was boxed in a ArrayList before.
9586         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
9587         modifier.
9588         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
9589         case of a virtual function and its override (choose the overload
9590         as better).
9591         (Invocation.OverloadResolve): Avoid 'override' members during
9592         'applicable_type' calculation.
9593
9594 2005-02-09  Raja R Harinath  <rharinath@novell.com>
9595
9596         Combine two near-redundant caches.
9597         * typemanager.cs (method_params): Rename from method_internal_params.
9598         (TypeManager.GetParameterData): New.  Replace
9599         Invocation.GetParameterData.
9600         (TypeManager.LookupParametersByBuilder): Remove.
9601         * expression.cs (Invocation.method_parameter_cache): Remove.
9602         (Invocation.GetParameterData): Remove.
9603         Update to changes.
9604         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
9605         Update to changes.
9606
9607 2005-02-08  Raja R Harinath  <rharinath@novell.com>
9608
9609         Fix #72015.
9610         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
9611         TypeManager.multicast_delegate_type is null, resolve it by looking
9612         up "System.MulticastDelegate".
9613         * rootcontext.cs (RootContext.ResolveCore): Simplify.
9614
9615 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
9616             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
9617             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
9618
9619         Fix cs0164.cs.
9620         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
9621         (LabeledStatement.AddReference): New.  Set 'referenced'.
9622         (Goto.Resolve): Use it.
9623
9624 2005-02-05  John Luke  <john.luke@gmail.com>
9625
9626         * driver.cs: remove duplicate -doc line in Usage ()
9627
9628 2005-02-04  Raja R Harinath  <rharinath@novell.com>
9629
9630         * location.cs (Location.AddFile): Fix CS2002 error report.
9631
9632 2005-02-02  Martin Baulig  <martin@ximian.com>
9633
9634         * delegate.cs (Delegate.DefineType): Report an internal error if
9635         TypeManager.multicast_delegate_type is null.  See bug #72015 for
9636         details.        
9637
9638 2005-02-02  Raja R Harinath  <rharinath@novell.com>
9639
9640         Fix a crasher in a variant of #31984.
9641         * const.cs (Constant.CheckBase): New override that defers the
9642         new-or-override check in case the base type hasn't been populated
9643         yet.
9644         (Constant.Define): Ensure the new-or-override check is performed.
9645
9646 2005-02-01  Duncan Mak  <duncan@ximian.com>
9647
9648         * const.cs (LookupConstantValue): Check that `ce' is not null
9649         before calling GetValue ().
9650
9651 2005-02-01  Raja R Harinath  <rharinath@novell.com>
9652
9653         Fix test-334.cs (#69519).
9654         * cs-parser.jay (using_alias_directive): Pass in an expression to
9655         NamespaceEntry.UsingAlias.
9656         (using_namespace_directive): Pass in an expression to
9657         NamespaceEntry.Using.
9658         (namespace_name): Don't flatten to a string.
9659         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
9660         (NamespaceEntry.AliasEntry.Resolve): Lookup using
9661         ResolveAsTypeStep.
9662         (NamespaceEntry.UsingEntry): Likewise.
9663         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
9664         changes.
9665         (NamespaceEntry.LookupForUsing): Remove.
9666         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
9667         names.
9668         (NamespaceEntry.Lookup): Remove support for dotted names.
9669
9670 2005-02-01  Raja R Harinath  <rharinath@novell.com>
9671
9672         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
9673         split into two.
9674         (NamespaceEntry.ImplicitParent): Compute on demand.
9675         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
9676         parallels the current.
9677         (NamespaceEntry.LookupForUsing): Use it.
9678         (NamespaceEntry.Lookup): If the current namespace-entry is
9679         implicit, don't search aliases and using tables.
9680
9681 2005-02-01  Raja R Harinath  <rharinath@novell.com>
9682
9683         Fix #31984.
9684         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
9685         BaseCache here.
9686         (TypeContainer.BaseCache): Compute on demand.
9687         (TypeContainer.FindMembers): Define constants and types if they're
9688         not already created.
9689         (FieldMember.Define): Move resetting of ec.InUnsafe before error
9690         check.
9691         * const.cs (Constant.Define): Make idempotent.
9692
9693 2005-01-29  Miguel de Icaza  <miguel@novell.com>
9694
9695         * pending.cs: Produce better code (no nops produced by using Ldarg
9696         + value).
9697         
9698         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
9699         i - 1' it should be arg + 1.
9700
9701         Fixes bug #71819.
9702
9703 2005-01-28  Raja R Harinath  <rharinath@novell.com>
9704
9705         * attribute.cs (Attribute.CheckAttributeType): Make private
9706         non-virtual.
9707         (Attribute.ResolveType): Make virtual.
9708         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
9709         handling of RootContext.Tree.Types.
9710
9711 2005-01-27  Raja R Harinath  <rharinath@novell.com>
9712
9713         Update attribute-handling to use the SimpleName/MemberAccess
9714         mechanisms.
9715         * cs-parser.jay (attribute): Pass in an expression to the
9716         constructors of Attribute and GlobalAttribute.
9717         * attribute.cs (Attribute): Take an expression for the name.
9718         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
9719         passed in attribute name expression.
9720         (Attribute.CheckAttributeType): Use it.
9721         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
9722         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
9723         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
9724         argument to prevent error messages if the lookup fails.
9725
9726 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
9727
9728         * expression.cs (Indirection): Implemented IVariable interface
9729         to support indirection in AddressOf operator.
9730         (PointerArithmetic.Emit): Add optimalization for case where
9731         result can be precomputed.
9732
9733 2005-01-26  Martin Baulig  <martin@ximian.com>
9734
9735         * class.cs (TypeContainer.AttributeTargets): Return the correct
9736         AttributeTargets depending on our `Kind' instead of throwing an
9737         exception; fixes #71632.
9738
9739 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
9740
9741         Fix #71257
9742         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
9743         constant members.
9744
9745 2005-01-25  Raja R Harinath  <rharinath@novell.com>
9746
9747         Fix #71602.
9748         * expression.cs (MemberAccess.DoResolve): Don't complain with
9749         cs0572 when the LHS of a member access has identical name and type
9750         name.
9751
9752 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
9753
9754         Fix #71651, #71675
9755         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
9756         CreatePermission.
9757         Create custom PermissionSet only for PermissionSetAttribute.
9758
9759 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
9760
9761         Fix #71649
9762         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
9763         delegates in static class.
9764
9765 2005-01-24  Martin Baulig  <martin@ximian.com>
9766
9767         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
9768         merging an implicit block, just use its reachability.
9769
9770         * statement.cs (Block.Resolve): Make the unreachable code check
9771         work wrt. implicit blocks; see test-337 from #63842.
9772
9773 2005-01-21  Alp Toker  <alp@atoker.com>
9774  
9775         * cs-parser.jay: destructor_declaration's container is PartialContainer
9776         not Class when partial types are used, so use Kind prop instead of
9777         'is'.
9778         
9779 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
9780
9781         * cs-parser.jay: Improve error reporting when an interface
9782         declares new types.
9783
9784 2005-01-20  Dick Porter  <dick@ximian.com>
9785
9786         * support.cs: SeekableStreamReader fix from Sandor Dobos
9787         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
9788         chars are read.  Fixes bug 70369.
9789
9790 2005-01-20  Raja R Harinath  <rharinath@novell.com>
9791
9792         * cs-parser.jay (catch_clause): Simplify current_block handling
9793         somewhat.
9794
9795 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
9796
9797         * convert.cs (ImplicitStandardConversionExists): Synchronize the
9798         code with ImplicitStandardConversion to handle the implicit
9799         conversion of method groups into valid delegate invocations. 
9800
9801         The problem is that in parameter handling we were using this code
9802         path.  Fixes bug #64698
9803
9804 2005-01-19  Raja R Harinath  <rharinath@novell.com>
9805
9806         * cs-parser.jay: Fix several infelicities.
9807         - Avoid assigning to the parser value stack.  Code like 
9808           '$3 = null' is unclean.  Synthesize a value for the code block
9809           instead. 
9810         - Avoid using oob_stack for storing location information.  Use ...
9811         (_mark_): ... this.  New (empty) rule.  Saves the current location
9812         in $$.
9813         (foreach_statement): Avoid using oob_stack for current_block
9814         handling.  Use technique used in for_statement and
9815         using_statement.  Synthesize a value for the code block to store
9816         additional intermediate information.
9817
9818 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
9819
9820         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
9821         of a different type is only allowed to private fields of a
9822         containing type, not on fields of a base class.
9823
9824         See test-174.cs and error cs0122-9.cs
9825
9826 2005-01-13  Raja R Harinath  <rharinath@novell.com>
9827
9828         Fix test-335.cs (bug #58126).
9829         * cs-parser.jay (argument): Split out non-expression parts of the
9830         rule into 'non_simple_argument'.
9831         (invocation_expression): Support parenthesized invocations with
9832         multiple arguments, and with single non-simple arguments.
9833
9834 2005-01-13  Raja R Harinath  <rharinath@novell.com>
9835
9836         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
9837         places.
9838
9839 2005-01-12  Raja R Harinath  <rharinath@novell.com>
9840
9841         Fix cs0038-1.cs, cs1640-6.cs.
9842         * ecore.cs (Expression.Resolve): Remove special-case for
9843         SimpleName in error-handling.
9844         (Expression.almostMatchedMembers): Relax access permission to
9845         protected.
9846         (Expression.MemberLookupFailed): Handle duplicates in
9847         almostMatchedMembers list.
9848         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
9849         * expression.cs (New.DoResolve): Report CS1540 for more cases.
9850         * typemanager.cs (GetFullNameSignature): Use the MethodBase
9851         overload if the passed in MemberInfo is a MethodBase.
9852
9853 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
9854
9855         Fix #70749
9856         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
9857         for non-CAS & merge permission sets properly.
9858
9859 2005-01-11  Raja R Harinath  <rharinath@novell.com>
9860
9861         Improve standard-compliance of simple name and member access 
9862         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
9863         * ecore.cs (FullNamedExpression): New abstract base class 
9864         for Namespaces and TypeExpressions.
9865         (ResolveFlags.SimpleName): Remove.
9866         (SimpleName): Remove support for dotted names.
9867         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
9868         DeclSpace.FindType and DeclSpace.LookupType.
9869         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
9870         (Expression.ExprClassName): Make member function.
9871         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
9872         a namespace.  Remove creation of dotted "SimpleName"s.
9873         (MemberAccess.DoResolve): Likewise.
9874         * decl.cs (DeclSpace.Cache): Make private.
9875         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
9876         (DeclSpace.FindType): Update.
9877         (DeclSpace.LookupType): Move here from RootContext.  Return a 
9878         FullNamedExpression.
9879         * namespace.cs (Namespace): Derive from FullNamedExpression
9880         so that it can be part of expression resolution.
9881         (Namespace.Lookup): Return an FullNamedExpression.
9882         (NamespaceEntry.LookupAlias): Lookup aliases only in current
9883         namespace.
9884         * rootcontext.cs (NamespaceLookup): Remove.
9885         (LookupType): Move to DeclSpace.
9886         * attribute.cs (CheckAttributeType): Update.
9887         * doc.cs (FindDocumentedType): Remove allowAlias argument.
9888         (FindDocumentedTypeNonArray): Likewise.
9889
9890 2005-01-11  Raja R Harinath  <rharinath@novell.com>
9891
9892         Fix cs0509.cs, cs1632.cs.
9893         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
9894         is the same as IsInterface.
9895         (TypeContainer.GetClassBases): Likewise.
9896         * statement.cs (LabeledStatement.ig): New field.
9897         (LabeledStatement.LabelTarget): Save ILGenerator which created the
9898         label.
9899         (LabeledStatement.DoEmit): Check that the label was created with
9900         the same ILGenerator.
9901
9902 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
9903
9904         Fix #71058
9905         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
9906         accessors to its properties.
9907
9908         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
9909         from accessors to property.
9910         
9911 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
9912
9913         Fix #70722
9914         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
9915         only for overrides.
9916         
9917 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
9918
9919         * attribute.cs: Check for null and empty strings.  
9920
9921         I have lost another battle to Paolo.
9922
9923 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
9924
9925         Fix #70942
9926         * class.cs (PropertyMethod): Set Parent field in ctors.
9927         (SetMethod.InternalParameters): Add unsafe switch hack.
9928         Override MarkForDuplicationCheck where it is appropriate.
9929
9930         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
9931         It says whether container allows members with the same name.
9932         Base default is no.
9933         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
9934         Removed is_method parameter.
9935
9936 2005-01-06  Duncan Mak  <duncan@ximian.com>
9937
9938         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
9939         because the previous change led to incorrect reporting of CS1032
9940         ("Cannot define/undefine preprocessor symbols after first token in
9941         file"). Instead of using `tokens_seen' as the only flag that
9942         triggers CS1040, introduce `comments_seen'. This new flag is used
9943         to signify having seen comments on the current line, so it is
9944         unset after a newline.
9945
9946 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
9947
9948         * doc.cs : When searching for a type, find nested type too.
9949           This fixes bug #71040.
9950
9951 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
9952
9953         * doc.cs :
9954           - Warn missing member comment on those classes which also does not
9955             have doc comments. Fixed bug #71041.
9956           - Don't warn missing doc comment on default constructor.
9957             Fixed bug #71042.
9958
9959 2005-01-06  Duncan Mak  <duncan@ximian.com>
9960
9961         * cs-tokenizer.cs (xtoken): After handling traditional C-style
9962         comments, set `tokens_seen' to true. This allows us to detect
9963         misplaced preprocessor directives (i.e. not at the beginning of
9964         the a line, nor after whitespaces). In that case, report error
9965         CS1040. This fixes bug #56460.
9966
9967         * cs-parser.jay (interface_member_declaration): Add checks for
9968         IsExplicitImpl, and report CS0541 error if an interface member is
9969         defined as an explicit interface declaration.
9970
9971 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
9972
9973         Fix #70817
9974         * class.cs (PropertyMethod): Set Parent field in ctors.
9975         (SetMethod.InternalParameters): Add unsafe switch hack.
9976         
9977         * decl.cs (MemberCore.Parent): Cannot be readonly.
9978
9979 2005-01-06  Raja R Harinath  <rharinath@novell.com>
9980
9981         * decl.cs (DeclSpace.ResolveType): Remove.
9982         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
9983         Merge in code from ...
9984         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
9985         * class.cs, enum.cs: Update to changes.
9986
9987 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
9988
9989         * anonymous.cs: Ensure that we init the scope of our parent if it
9990         has not been initialized yet.
9991
9992 2004-12-30  Duncan Mak  <duncan@ximian.com>
9993
9994         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
9995         if field.FieldBuilder is null. Fixes #70758.
9996
9997         * convert.cs: Fixed some typos and updated some of the comments.
9998         (ImplicitStandardConversionExists):
9999         (TryImplicitIntConversion): If `target_type' is an interface and
10000         the type of `ic' implements this interface, return true or a new
10001         BoxedCast instead of null. This fixes #70468.
10002
10003 2004-12-29  Duncan Mak  <duncan@ximian.com>
10004
10005         * expression.cs (Argument.Emit): Check that Expr is
10006         IMemoryLocation before casting to it, and report CS1510 otherwise.
10007
10008         This fixes #70402.
10009
10010 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
10011
10012         * statement.cs (Block.ThisVariable): remove the recursion here, to
10013         make the --profile more sane.
10014
10015 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
10016
10017         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
10018         assembly, by JB Evain.
10019
10020 2004-12-17  Raja R Harinath  <rharinath@novell.com>
10021
10022         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
10023           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
10024         "parent" refers to enclosing type/class.  "base" refers to superclass.
10025
10026 2004-12-17  Raja R Harinath  <rharinath@novell.com>
10027
10028         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
10029         Ensure that we only have GlobalAttributes.
10030         * attribute.cs (Attribute.Emit): Make non-virtual.
10031         (GlobalAttribute.Emit): Remove.
10032         (Attribute.Resolve): Make virtual.
10033         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
10034         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
10035         the argument. Don't create one.
10036         (Attribute.GetObsoleteAttribute): Likewise.
10037         (Attribute.GetClsCompliantAttributeValue): Likewise.
10038         * class.cs, decl.cs: Update to changes.
10039
10040 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
10041
10042         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
10043         
10044         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
10045         
10046         * statement.cs (Foreach.Resolve): Add error 186 report.
10047
10048 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
10049
10050         * expression.cs (Conditional.DoResolve): Add warning 429.
10051         
10052         * statement.cs (If.Resolve): Add warning 665.
10053
10054 2004-12-16  Raja R Harinath  <rharinath@novell.com>
10055
10056         New invariant: RootContext.Tree.Types.NamespaceEntry == null
10057         except when in the parser, and in GlobalAttribute.
10058         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
10059         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
10060         RootContext.Tree.Types.NamespaceEntry once work is done.
10061         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
10062         and resets RootContext.Tree.Types.NamespaceEntry.
10063
10064 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
10065
10066         * cs-parser.jay: Don't create a block for every variable.
10067
10068 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
10069
10070         * location.cs: Provide extra information.
10071
10072         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
10073         variables from the captured environment, it is the ldarg_0.
10074
10075 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
10076
10077         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
10078         find a conclusion.
10079         
10080         * class.cs: Changed warning level for 169 to avoid developer
10081         displeasure from warning flooding. It will be changed back when they
10082         fix most of current BCL warnings.
10083         
10084         * RootContext.cs: Pushed default WarningLevel to 3.
10085         
10086         * statement.cs: Removed unused variable.
10087
10088 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
10089
10090         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
10091         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
10092         Add error 502 report.
10093         (StaticClass.DefineType): Add error 441 report.
10094         (Class.AllowedModifiersProp): New virtual property as temporary
10095         extension to AllowedModifiers.
10096         (Class.DefineType): Add error 418 report. Moved ModFlags check here
10097         to share implementation with StaticClass and don't call virtual
10098         methods from ctor.
10099         
10100         * driver.cs (MainDriver): Add error 1558 test.
10101
10102         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
10103         report. Moved error 36 test here.
10104
10105         * statement.cs (Throw.Resolve): Add error 724 report.
10106
10107         * typemanager.cs: Add out_attribute_type core type.
10108         
10109 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
10110
10111         * class.cs (TypeContainer.VerifyClsCompliance): Add error
10112         3018 report.
10113         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
10114
10115         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
10116         3017 report.
10117         
10118         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
10119
10120         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
10121         Add error 3023 report.
10122         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
10123
10124         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
10125         implementation.
10126
10127 2004-12-12  John Luke  <john.luke@gmail.com>
10128
10129         * driver.cs (AddArgs): take -- into account when
10130         adding arguments, fixes bug 65710 
10131
10132 2004-12-12  Martin Baulig  <martin@ximian.com>
10133
10134         * expression.cs (Unary.TryReduceNegative): Added support for
10135         SByteConstant and ByteConstant.
10136         (Unary.Reduce): Check error values from TryReduceNegative().
10137
10138 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
10139
10140         * attributes.cs (Attribute.Resolve): Avoid multiple error report
10141         and report exception as error 182.
10142
10143 2004-12-10  Raja R Harinath  <rharinath@novell.com>
10144
10145         * driver.cs (Main): Fix message when there are warnings.
10146
10147 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
10148
10149         * delegate.cs: Fixed my fix from yesterday, sorry about that.
10150
10151 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
10152
10153         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
10154         Reduced number of warnings.
10155         
10156         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
10157
10158 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
10159
10160         * driver.cs: Removed message.
10161
10162         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
10163
10164 2004-12-08    <vargaz@freemail.hu>
10165
10166         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
10167
10168 2004-12-08  Martin Baulig  <martin@ximian.com>
10169
10170         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
10171         instead of a CS3002 for properties and indexer.
10172
10173 2004-12-08  Martin Baulig  <martin@ximian.com>
10174
10175         * decl.cs (MemberName.ToString): Make this work again.
10176
10177 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
10178
10179         * attribute.cs (Resolve): Add error 591 detection.
10180
10181         * class.cs (FieldMember.Define): Add error 1547 detection.
10182         (Indexer.Define): Add error 620 detection.
10183         (Operator.Define): Add error 590 detection.
10184
10185         * ecore.cs: Missing argument for error 79.
10186
10187         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
10188         detection.
10189
10190 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
10191
10192         Fix #70106
10193         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
10194         only.
10195
10196 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
10197
10198         * cs-parser.jay : handle doc comments on implicit/explicit operators.
10199           Some operator comments were suppressed.
10200         * doc.cs : Implicit/explicit operator name in doc comments are like
10201           "op_Explicit(type)~returnType", so added suffix handling.
10202
10203 2004-12-07  Martin Baulig  <martin@ximian.com>
10204
10205         * decl.cs
10206         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
10207         (MemberCore.GetClsCompliantAttributeValue): Likewise.
10208         (DeclSpace.ec): New protected field; store the EmitContext here.
10209         (DeclSpace.EmitContext): New public property; moved here from
10210         `TypeContainer'.
10211         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
10212         EmitContext.
10213
10214         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
10215         (Enum.Emit): Don't create a new EmitContext.
10216
10217         * delegate.cs (Delegate.DefineType): Always create the
10218         EmitContext.
10219
10220         * iterators.cs (Iterators.DefineIterator): Create a new
10221         EmitContext and store it in `ec'.
10222
10223 2004-08-24  Martin Baulig  <martin@ximian.com>
10224
10225         * typemanager.cs
10226         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
10227         this for accessibility checks.
10228         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
10229         IsNestedFamilyAccessible.
10230         (TypeManager.IsSubclassOf): New method, do what the name actually
10231         says.   
10232
10233 2004-12-06  Raja R Harinath  <rharinath@novell.com>
10234
10235         Fix crash on cs0657-17.cs.
10236         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
10237         Use RootContext.Tree.Types, not 'new RootTypes ()'.
10238         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
10239         the case where the NamespaceEntry gets overwritten.
10240
10241 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
10242
10243         Fixed #69195, #56821
10244         * ecore.cs (ResolveBoolean): Tiny refactoring.
10245
10246         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
10247         of right expression resolving when left is false constant and
10248         operator is LogicalAnd OR true constant and operator is LogicalOr.
10249
10250         * statement.cs (ResolveUnreachable): Always reports warning.
10251
10252 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
10253
10254         * class.cs: Distinguish between 1721 and 1722 (just a little help
10255         for the programmer).
10256
10257 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
10258
10259         * delegate.cs: Only allow this on new versions of the language. 
10260
10261 2004-12-02  Duncan Mak  <duncan@ximian.com>
10262
10263         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
10264         Expression class.
10265         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
10266         here as a static method. Take an additional bool out parameter
10267         `must_do_cs1540_check' for signaling to InstanceResolve.
10268         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
10269         member field from PropertyExpr class and made it an argument of
10270         the method instead.
10271         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
10272         check for MarshalByRefObject, and report CS0122 instead of CS1540.
10273         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
10274         and `remove_accessor' as well as InstanceResolve: report CS0122
10275         where applicable.
10276
10277         Fixes #70129.
10278
10279 2004-12-03  Raja R Harinath  <rharinath@novell.com>
10280
10281         Fix test-327.cs, test-328.cs, and put in early infrastructure
10282         for eventually fixing #52697.
10283         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
10284         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
10285         from other methods.
10286         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
10287         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
10288         (VerifyUsing, error246): Update.
10289         * rootcontext.cs (RootContext.NamespaceLookup): Just use
10290         'NamespaceEntry.LookupNamespaceOrType'.
10291
10292 2004-12-03  Martin Baulig  <martin@ximian.com>
10293
10294         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
10295         method as our child, call AnonymousMethod.Compatible() on it.
10296
10297 2004-12-03  Raja R Harinath  <rharinath@novell.com>
10298
10299         Disable XML documentation support in 'basic' profile.
10300         * decl.cs, class.cs [BOOTSTRAP_WITH_OLDLIB]: Don't import System.Xml.
10301         Redirect XmlElement to System.Object.
10302         * driver.cs, enum.cs, rootcontext.cs: Don't reference System.Xml.
10303         * doc.cs [BOOTSTRAP_WITH_OLDLIB]: Disable compile.
10304         * mcs.exe.sources: Add doc-bootstrap.cs.
10305         * doc-bootstrap.cs: New file.  Contains empty stub implementation
10306         of doc.cs.
10307
10308 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
10309
10310         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
10311           comments are allowed.
10312
10313 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
10314
10315         * delegate.cs: Add checks for subtypes in paramaters and return values
10316         in VerifyMethod () to add support for Covariance/Contravariance
10317         in delegates.
10318         
10319 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
10320
10321         * report.cs: Remove extra closing parenthesis.
10322
10323         * convert.cs (Error_CannotImplicitConversion): If the name of the
10324         types are the same, provide some extra information.
10325
10326         * class.cs (FieldBase): Use an unused bit field from the field to
10327         encode the `has_offset' property from the FieldMember.  This saves
10328         a couple of Ks on bootstrap compilation.
10329
10330         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
10331         method as our child, return the AnonymousMethod resolved
10332         expression.
10333
10334         * expression.cs (New.DoResolve): Allow return values from
10335         NewDelegate to also include AnonymousMethods.
10336
10337         Fixes #70150.
10338
10339 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
10340
10341         Fix bug #70102
10342         * attribute.cs (Resolve): Improved implementation of params
10343         attribute arguments.
10344
10345         * support.cs (ParameterData): Add HasParams to be faster.
10346
10347 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
10348
10349         all things are for /doc support:
10350
10351         * doc.cs: new file that supports XML documentation generation.
10352         * mcs.exe.sources: added doc.cs.
10353         * driver.cs:
10354           Handle /doc command line option.
10355           Report error 2006 instead of 5 for missing file name for /doc.
10356           Generate XML documentation when required, after type resolution.
10357         * cs-tokenizer.cs:
10358           Added support for picking up documentation (/// and /** ... */),
10359           including a new XmlCommentState enumeration.
10360         * cs-parser.jay:
10361           Added lines to fill Documentation element for field, constant,
10362           property, indexer, method, constructor, destructor, operator, event
10363           and class, struct, interface, delegate, enum.
10364           Added lines to warn incorrect comment.
10365         * rootcontext.cs :
10366           Added Documentation field (passed only when /doc was specified).
10367         * decl.cs:
10368           Added DocComment, DocCommentHeader, GenerateDocComment() and
10369           OnGenerateDocComment() and some supporting private members for
10370           /doc feature to MemberCore.
10371         * class.cs:
10372           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
10373         * delegate.cs:
10374           Added overriden DocCommentHeader.
10375         * enum.cs:
10376           Added overriden DocCommentHeader and GenerateDocComment().
10377
10378 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
10379
10380         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
10381         unwrapping the enumeration values, chain to
10382         DoConstantNumericPromotions again, so we can promote things to the
10383         fundamental types (takes care of enums that are bytes, sbytes).
10384
10385         Fixes bug #62054.
10386
10387 2004-12-01  Raja R Harinath  <rharinath@novell.com>
10388
10389         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
10390         Fix long-standing bug in type-lookup.  Use FindType instead of
10391         LookupType when ec.ResolvingTypeTree.
10392         (Attribute.ResolveType, Attribute.Resolve)
10393         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
10394         Update to changes.
10395         (Attributes.Search): Remove internal version.  Update.
10396         (Attributes.SearchMulti): Update.
10397         (Attributes.GetClsCompliantAttribute): Remove.
10398         (Attributes.GetIndexerNameAttribute): Remove.
10399         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
10400         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
10401         * class.cs (Indexer.Define): Likewise.
10402
10403 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
10404
10405         Fix bug #68790
10406         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
10407         MarshallByReference members access.
10408
10409         * expression.cs: Use CheckMarshallByRefAccess;
10410         Better error CS0197 message.
10411
10412         * report.cs: Print whole related error message.
10413
10414 2004-11-30  Raja R Harinath  <rharinath@novell.com>
10415
10416         * Makefile (mcs.exe) [PROFILE=default]: Keep a copy of mcs.exe in
10417         the current directory to help debugging.
10418
10419 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
10420
10421         * class (GetClassBases): Better error 60 report.
10422         (EventProperty): Disabled warning 67 detection.
10423
10424 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
10425
10426         Fix bug #60324
10427         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
10428
10429         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
10430         precise values.
10431
10432 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
10433
10434         Fix bug #49488
10435         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
10436
10437         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
10438
10439 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
10440
10441         * attribute.cs (Attribute.Resolve): Refine error reporting and
10442         report a cs0117 if the identifier does not exist, to distinguish
10443         from 0617 which is a miss-use of the actual identifier.
10444
10445         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
10446         between cs0070 and cs0079.
10447
10448         * class.cs (MemberBase.DoDefine): When reporting a wrong
10449         accessibility level, we use MethodCore to compare instead of
10450         Method (this was a regression in some refactoring effort).
10451
10452         So now we correctly report cs0056 again.
10453
10454         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
10455         testing the target_type (which was known to be object_type) and
10456         not the source type (which is anonymous_method).
10457
10458         Fixed reporting of error cs1660.
10459
10460         * expression.cs (UserCast.Source): Expose the underlying cast.
10461
10462         * statement.cs (Switch.SwitchGoverningType): Sort the list of
10463         allowed types to find a match to int32 first (most common).
10464
10465         In addition, it ignores any ImplicitUserConversions that did an
10466         internal implicit conversion (as the switch statement allows only
10467         one integral conversion to exist).
10468
10469         * class.cs (PartialContainer.Create): rename `name' to
10470         `member_name' for clarity.  Then replace the string calls with a
10471         call to MemberName.GetPartialName, as now using
10472         MemberName.ToString is an error (this is due to the side effects
10473         it had, that were fixed in the past).
10474
10475         This will restore the error reporting on a number of partial class
10476         errors that were missusing this (and getting an exception as a
10477         results, which is now just a plain textual warning, because
10478         yyparse debug output would crash otherwise).
10479
10480 2004-11-26  Raja R Harinath  <rharinath@novell.com>
10481
10482         * Makefile (PROGRAM_INSTALL_DIR): Remove.
10483
10484 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
10485
10486         * rootcontext.cs (LookupType): Make sure to cache lookups that
10487         don't give us a negative result. This saves about 5% of corlib
10488         compilation time.
10489
10490 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
10491
10492         * report.cs (AbstractMessage.Print): messages are sent to stderr
10493
10494         * class.cs (TypeContainer.GetClassBases): It is an error to have a
10495         non-interface in the list of interfaces (at this point, either
10496         parent was properly set, or a base class is being listed in the
10497         interfaces section).
10498
10499         This flags error 1722, and resolves the crash from bug 69259.
10500
10501 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
10502
10503         * statement.cs (Using.EmitExpressionFinally): make this work right
10504         for valuetypes. Fixes 69926.
10505
10506 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
10507
10508         * const.cs (Const.ChangeType): Cope with the "0 literal can be
10509         converted to an enum" here, before we try to change the underlying
10510         type.  This code exists, but it is a different code path than the
10511         one used while encoding constants.
10512
10513         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
10514         old bug: when converting from the null literal to a pointer,
10515         return an EmptyCast, not the NullLiteral.
10516
10517         This fixes #69921, the recent null_type changes probably made this
10518         bug more prominent.
10519
10520         (ImplicitReferenceConversionExists): In addition, resynchronized
10521         the code here, so it matches the same code in
10522         ImplicitReferenceConversionExists for the `from any class-type S
10523         to any interface-type T'.
10524         
10525
10526 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
10527
10528         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
10529
10530 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
10531
10532         * cs-parser.jay: Use verbosity accordingly. 
10533
10534 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
10535
10536         * expression.cs (Unary.ResolveOperator): Do not report warning;
10537         AddressOf reads from variable.
10538         
10539         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
10540
10541 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
10542
10543         Fix bug #69462
10544
10545         * attribute.cs (Attributable): Removed CheckTargets.
10546         (Attributes.Emit): Explicit attribute targets are tested here.
10547
10548         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
10549         not enabled for interfaces.
10550
10551         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
10552         (GetAssemblyName): Ouch next bug there.
10553
10554 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
10555
10556         * expression.cs: Error 275 added.
10557         
10558 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
10559
10560         Fix bug #69177 (Implemented decimal constant support)
10561
10562         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
10563         (BinaryFold): Add DecimalConstant.
10564
10565         * const.cs (Define): Decimal constant 
10566         (is not constant.
10567         (ChangeType): Add decimal type handling.
10568         (LookupConstantValue): Don't set value for decimal type but
10569         emit DecimalConstantAttribute. Needed for constant optimization.
10570
10571         * constant.cs (ToDecimal): New method.
10572         (ConvertToDecimal): New method.
10573         (IntConstant): Implemented ConvertToDecimal.
10574         (DecimalConstant.Emit): Emit optimized version for decimals in
10575         int range.
10576
10577         * expression.cs (ResolveOperator): Changed order of constant
10578         reduction to work correctly with native types which have
10579         overloaded operators.
10580         (ResolveMemberAccess): Extract constant value from attribute
10581         for decimal type.
10582
10583         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
10584
10585         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
10586         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
10587         (ChangeType): Decimal is special.
10588         (TypeToCoreType): Add decimal type.
10589
10590 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
10591
10592         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
10593         decimal types.
10594
10595 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
10596
10597         * class.cs (EventField.ApplyAttributeBuilder): Fix error
10598         test cs1667-5.cs.
10599
10600 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
10601
10602         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
10603
10604         * pending.cs (PendingImplementation): Grab only interfaces.
10605
10606 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
10607
10608         * statement.cs (ForeachHelperMethods): Add location member and
10609         error 202 detection.
10610
10611 2004-11-19  Raja R Harinath  <rharinath@novell.com>
10612
10613         * Makefile (EXTRA_DISTFILES): Remove mcs.exe.config.  It's
10614         automatically handled by executable.make.
10615         (PROGRAM): Make profile-specific.
10616
10617 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
10618
10619         * expression.cs (DoResolveBase): Fixed wrong warning for out
10620         variables.
10621
10622 2004-11-18  Martin Baulig  <martin@ximian.com>
10623
10624         Merged latest changes into gmcs.  Please keep this comment in
10625         here, it makes it easier for me to see what changed in MCS since
10626         the last time I merged.
10627
10628 2004-11-17  Raja R Harinath  <rharinath@novell.com>
10629
10630         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
10631         (TypeHandle.GetMemberCache): New.
10632         (TypeHandle.TypeHandle): Update.
10633         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
10634         (TypeManager.LookupParentInterfacesCache):
10635         Rename from LookupInterfaceCache.  Optimize slightly.
10636         (TypeManager.MemberLookup_FindMembers): Update.
10637         * decl.cs (MemberCache.MemberCache): Set Container to null in the
10638         multi-type variant.
10639         (AddCacheContents): Rename from AddHashtable.
10640         * class.cs (TypeContainer.parent_container): Remove.
10641         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
10642         (TypeContainer.DoDefineMembers): Don't initialize it.
10643         Update to name changes.
10644         
10645 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
10646
10647         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
10648         that factors the code to check access modifiers on override.  
10649
10650         (PropertyBase): Use the code here.
10651
10652         Patch from Lluis S'anchez, fixes bug #69361.
10653
10654 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
10655
10656         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
10657         routine that is used to report the use of a captured variable
10658         whose address has been taken.
10659
10660         There are two checks: one when variables are being captured and
10661         the other check is when the address of a variable is taken. 
10662         
10663         (because an anonymous methods might be resolved before *or* after
10664         the address has been taken) and 
10665
10666         * expression.cs (Conditional.DoResolve): Remove the special
10667         casing that Martin added to trueExpr and falseExpr being both
10668         NullLiteral.  We get the right behavior now just by introducing
10669         the null_type into the compiler. 
10670
10671         * convert.cs (ExplicitConversion): Change the code to use
10672         null_type instead of testing `expr is NullLiteral'.
10673         (ImplicitConversionStandard): use null_type too.
10674         (ImplicitReferenceConversionExists): use null_type too.
10675         (ImplicitReferenceConversion): use null_type too.
10676
10677         * literal.cs: The type of `NullLiteral' is now null_type instead
10678         of object_type. 
10679         (Resolve): Set the type here.
10680
10681         * typemanager.cs: Introduce null_type.
10682
10683 2004-11-17  Martin Baulig  <martin@ximian.com>
10684
10685         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
10686         direction, like FindMembers() does.  Fixes #69546, testcase is in
10687         test-315.cs.    
10688
10689 2004-11-16  Martin Baulig  <martin@ximian.com>
10690
10691         This is based on a patch from Marek Safar, see bug #69082.
10692         Fixes bugs #63705 and #67130.
10693
10694         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
10695         method; create a MemberCache for an interface type and cache the
10696         result.
10697
10698         * decl.cs (IMemberContainer.ParentContainer): Removed.
10699         (IMemberContainer.ParentCache): New property.
10700         (MemberCache.SetupCacheForInterface): Removed.
10701         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
10702         to create a cache for an interface's "parent".
10703
10704         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
10705         interfaces too.
10706
10707 2004-11-16  Martin Baulig  <martin@ximian.com>
10708
10709         Merged back from gmcs; these changes already went into gmcs a
10710         couple of weeks ago.
10711
10712         * typemanager.cs
10713         (TypeManager.AddUserType): Removed the `ifaces' argument.
10714         (TypeManager.RegisterBuilder): Take a `Type []' instead of a
10715         `TypeExpr []'.
10716         (TypeManager.AddUserInterface): Removed.
10717         (TypeManager.ExpandInterfaces): Return a `Type []' instead of a
10718         `TypeExpr []'.
10719         (TypeManager.GetInterfaces): Likewise.
10720         (TypeManager.GetExplicitInterfaces): Likewise.
10721
10722         * ecore.cs (TypeExpr.GetInterfaces): Removed.
10723
10724         * class.cs (TypeContainer.base_class_type): Replaced with `ptype'.
10725         (TypeContainer.base_inteface_types): Replaced with `ifaces'.
10726
10727 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
10728
10729         * statement.cs: Avoid adding bools to a hashtable.
10730
10731 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
10732
10733         * expression.cs (Invocation.OverloadResolve): Flag error if we are
10734         calling an unsafe method from a safe location.
10735
10736 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
10737
10738         Fix #69167
10739         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
10740
10741 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
10742
10743         * namespace.cs (VerifyUsing): use GetPartialName instead of
10744         ToString. 
10745
10746 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
10747
10748         * statement.cs (Return.Resolve): Fix regression in typo: if
10749         `in_exc', we have to request a NeedReturnLabel, this was a typo
10750         introduced in the anonymous method check-in.  Fixes #69131.
10751
10752         * Indexers were using the ShortName when defining themselves,
10753         causing a regression in the compiler bootstrap when applying the
10754         patch from 2004-11-02 (first part), now they use their full name
10755         and the bug is gone.
10756
10757 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
10758
10759         * driver.cs: Strip the path from the names of embedded resources. Fixes
10760         #68519.
10761
10762 2004-11-04  Raja R Harinath  <rharinath@novell.com>
10763
10764         Fix error message regression: cs0104-2.cs.
10765         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
10766         (AliasEntry.Resolve): Update.
10767         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
10768         'silent' flag.
10769         (RootContext.LookupType): Update.
10770
10771 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
10772
10773         * cs-parser.jay: Add support for handling accessor modifiers
10774         * class: Add support port accessor modifiers and error checking,
10775         define PropertyMethod.Define as virtual (not abstract anymore)
10776         * ecore.cs: Add checking for proeprties access with access modifiers
10777         * iterators.cs: Modify Accessor constructor call based in the modified
10778         constructor
10779 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
10780
10781         * expression.cs (StringConcat): Handle being called twice,
10782         as when we have a concat in a field init with more than two
10783         ctors in the class
10784
10785 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
10786
10787         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
10788         special case explicit implementations, we should always produce
10789         the .property or .event declaration.
10790         
10791         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
10792         since it will not return correct data if people use this
10793         unresolved in the presence of using statements (see test-313).
10794
10795         * class.cs (MethodData.Define): If we are an explicit interface
10796         implementation, set the method name to the full name of the
10797         interface plus the name of the method.  
10798
10799         Notice that using the method.MethodName.GetFullName() does not
10800         work, as it will only contain the name as declared on the source
10801         file (it can be a shorthand in the presence of using statements)
10802         and not the fully qualifed type name, for example:
10803
10804         using System;
10805
10806         class D : ICloneable {
10807                 object ICloneable.Clone ()  {
10808                 }
10809         }
10810
10811         Would produce a method called `ICloneable.Clone' instead of
10812         `System.ICloneable.Clone'.
10813
10814         * namespace.cs (Alias.Resolve): Use GetPartialName.
10815         
10816 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
10817
10818         * cs-parser.jay: Add error 1055 report.
10819
10820 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
10821
10822         * assign.cs (Assign.DoResolve): Only do the transform of
10823         assignment into a New if the types are compatible, if not, fall
10824         through and let the implicit code deal with the errors and with
10825         the necessary conversions. 
10826
10827 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
10828
10829         * cs-parser.jay: Add error 1031 report.
10830
10831         * cs-tokenizer.cs: Add location for error 1038.
10832
10833 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
10834
10835         * cs-parser.jay: Add error 1016 report.
10836
10837 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
10838
10839         * cs-parser.jay: Add errors 1575,1611 report.
10840
10841 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
10842
10843         * cs-parser.jay: Add error 1001 report.
10844
10845 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
10846
10847         Fix #68850
10848         * attribute.cs (GetMarshal): Add method argument for
10849         caller identification.
10850
10851         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
10852         agument for GetMarshal and RuntimeMissingSupport.
10853
10854 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
10855
10856         * attribute.cs (ExtractSecurityPermissionSet): Removed
10857         TypeManager.code_access_permission_type.
10858
10859         * typemanager.cs: Removed TypeManager.code_access_permission_type.
10860
10861 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
10862
10863         * expression.cs (LocalVariableReference.DoResolveLValue): Check
10864         for obsolete use of a variable here.   Fixes regression on errors
10865         cs0619-25 and cs0619-26.
10866
10867 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
10868
10869         Fix #62358, implemented security attribute encoding.
10870
10871         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
10872         Tests permitted SecurityAction for assembly or other types.
10873         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
10874         data from SecurityPermissionAttribute to PermisionSet class.
10875
10876         * class.cs (ApplyAttributeBuilder): Added special handling
10877         for System.Security.Permissions.SecurityAttribute based types.
10878
10879         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
10880         special handling for System.Security.Permissions.SecurityAttribute
10881         based types.
10882
10883         * enum.cs (ApplyAttributeBuilder): Added special handling
10884         for System.Security.Permissions.SecurityAttribute based types.
10885
10886         * parameter.cs (ApplyAttributeBuilder): Added special handling
10887         for System.Security.Permissions.SecurityAttribute based types.
10888
10889         * rootcontext.cs: Next 2 core types.
10890
10891         * typemanager.cs (TypeManager.security_permission_attr_type):
10892         Built in type for the SecurityPermission Attribute.
10893         (code_access_permission_type): Build in type.
10894
10895 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
10896
10897         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
10898         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
10899         all of this information into
10900         EmitContext.EmitCapturedVariableInstance.
10901         
10902         * codegen.cs (EmitCapturedVariableInstance): move here the
10903         funcionality of emitting an ldarg.0 in the presence of a
10904         remapping.   This centralizes the instance emit code.
10905
10906         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
10907         then emit a load of this: it means that we have reached the
10908         topmost ScopeInfo: the one that contains the pointer to the
10909         instance of the class hosting the anonymous method.
10910
10911         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
10912         captures to the topmost CaptureContext.
10913
10914 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
10915
10916         * expression.cs (LocalVariableReference): Move the knowledge about
10917         the iterators into codegen's EmitCapturedVariableInstance.
10918
10919 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
10920
10921         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
10922         all code paths return a value from an anonymous method (it is the
10923         same as the 161 error, but for anonymous methods).
10924
10925 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
10926
10927         The introduction of anonymous methods in the compiler changed
10928         various ways of doing things in the compiler.  The most
10929         significant one is the hard split between the resolution phase
10930         and the emission phases of the compiler.
10931
10932         For instance, routines that referenced local variables no
10933         longer can safely create temporary variables during the
10934         resolution phase: they must do so from the emission phase,
10935         since the variable might have been "captured", hence access to
10936         it can not be done with the local-variable operations from the runtime.
10937         
10938         * statement.cs 
10939
10940         (Block.Flags): New flag `IsTopLevel' to indicate that this block
10941         is a toplevel block.
10942
10943         (ToplevelBlock): A new kind of Block, these are the blocks that
10944         are created by the parser for all toplevel method bodies.  These
10945         include methods, accessors and anonymous methods.
10946
10947         These contain some extra information not found in regular blocks:
10948         A pointer to an optional CaptureContext (for tracking captured
10949         local variables and parameters).  A pointer to the parent
10950         ToplevelBlock.
10951         
10952         (Return.Resolve): Catch missmatches when returning a value from an
10953         anonymous method (error 1662).
10954         Invoke NeedReturnLabel from the Resolve phase instead of the emit
10955         phase.
10956
10957         (Break.Resolve): ditto.
10958
10959         (SwitchLabel): instead of defining the labels during the
10960         resolution phase, we now turned the public ILLabel and ILLabelCode
10961         labels into methods called GetILLabelCode() and GetILLabel() that
10962         only define the label during the Emit phase.
10963
10964         (GotoCase): Track the SwitchLabel instead of the computed label
10965         (its contained therein).  Emit the code by using
10966         SwitchLabel.GetILLabelCode ().
10967
10968         (LocalInfo.Flags.Captured): A new flag has been introduce to track
10969         whether the Local has been captured or not.
10970
10971         (LocalInfo.IsCaptured): New property, used to tell whether the
10972         local has been captured.
10973         
10974         * anonymous.cs: Vastly updated to contain the anonymous method
10975         support.
10976
10977         The main classes here are: CaptureContext which tracks any
10978         captured information for a toplevel block and ScopeInfo used to
10979         track the activation frames for various local variables.   
10980
10981         Each toplevel block has an optional capture context associated
10982         with it.  When a method contains an anonymous method both the
10983         toplevel method and the anonymous method will create a capture
10984         context.   When variables or parameters are captured, they are
10985         recorded on the CaptureContext that owns them, for example:
10986
10987         void Demo () {
10988              int a;
10989              MyDelegate d = delegate {
10990                  a = 1;
10991              }
10992         }
10993
10994         Here `a' will be recorded as captured on the toplevel
10995         CapturedContext, the inner captured context will not have anything
10996         (it will only have data if local variables or parameters from it
10997         are captured in a nested anonymous method.
10998
10999         The ScopeInfo is used to track the activation frames for local
11000         variables, for example:
11001
11002         for (int i = 0; i < 10; i++)
11003                 for (int j = 0; j < 10; j++){
11004                    MyDelegate d = delegate {
11005                         call (i, j);
11006                    }
11007                 }
11008
11009         At runtime this captures a single captured variable `i', but it
11010         captures 10 different versions of the variable `j'.  The variable
11011         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
11012         recorded on a child.  
11013
11014         The toplevel ScopeInfo will also track information like the `this'
11015         pointer if instance variables were referenced (this is necessary
11016         as the anonymous method lives inside a nested class in the host
11017         type of the method). 
11018
11019         (AnonymousMethod): Expanded to track the Toplevel, implement
11020         `AnonymousMethod.Compatible' to tell whether an anonymous method
11021         can be converted to a target delegate type. 
11022
11023         The routine now also produces the anonymous method content
11024
11025         (AnonymousDelegate): A helper class that derives from
11026         DelegateCreation, this is used to generate the code necessary to
11027         produce the delegate for the anonymous method that was created. 
11028
11029         * assign.cs: API adjustments for new changes in
11030         Convert.ImplicitStandardConversionExists.
11031
11032         * class.cs: Adjustments to cope with the fact that now toplevel
11033         blocks are of type `ToplevelBlock'. 
11034
11035         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
11036         insteda of standard blocks.
11037
11038         Flag errors if params arguments are passed to anonymous methods.
11039
11040         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
11041         `CurrentAnonymousMethod' which points to the current Anonymous
11042         Method.  The variable points to the AnonymousMethod class that
11043         holds the code being compiled.  It is set in the new EmitContext
11044         created for the anonymous method.
11045
11046         (EmitContext.Phase): Introduce a variable and an enumeration to
11047         assist in enforcing some rules about when and where we are allowed
11048         to invoke certain methods (EmitContext.NeedsReturnLabel is the
11049         only one that enfonces this right now).
11050
11051         (EmitContext.HaveCaptureInfo): new helper method that returns
11052         whether we have a CapturedContext initialized.
11053
11054         (EmitContext.CaptureVariable): New method used to register that a
11055         LocalInfo must be flagged for capturing. 
11056
11057         (EmitContext.CapturedParameter): New method used to register that a
11058         parameters must be flagged for capturing. 
11059         
11060         (EmitContext.CapturedField): New method used to register that a
11061         field must be flagged for capturing. 
11062
11063         (EmitContext.HaveCapturedVariables,
11064         EmitContext.HaveCapturedFields): Return whether there are captured
11065         variables or fields. 
11066
11067         (EmitContext.EmitMethodHostInstance): This is used to emit the
11068         instance for the anonymous method.  The instance might be null
11069         (static methods), this (for anonymous methods that capture nothing
11070         and happen to live side-by-side with the current method body) or a
11071         more complicated expression if the method has a CaptureContext.
11072
11073         (EmitContext.EmitTopBlock): Routine that drives the emission of
11074         code: it will first resolve the top block, then emit any metadata
11075         and then emit the code.  The split is done so that we can extract
11076         any anonymous methods and flag any captured variables/parameters.
11077         
11078         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
11079         during this phase, the ILGenerator should not be used as labels
11080         and local variables declared here might not be accessible to any
11081         code that is part of an anonymous method.  
11082
11083         Exceptions to this include the temporary variables that are
11084         created by some statements internally for holding temporary
11085         variables. 
11086         
11087         (EmitContext.EmitMeta): New routine, in charge of emitting all the
11088         metadata for a cb
11089
11090         (EmitContext.TemporaryReturn): This method is typically called
11091         from the Emit phase, and its the only place where we allow the
11092         ReturnLabel to be defined other than the EmitMeta.  The reason is
11093         that otherwise we would have to duplicate a lot of logic in the
11094         Resolve phases of various methods that today is on the Emit
11095         phase. 
11096
11097         (EmitContext.NeedReturnLabel): This no longer creates the label,
11098         as the ILGenerator is not valid during the resolve phase.
11099
11100         (EmitContext.EmitThis): Extended the knowledge in this class to
11101         work in anonymous methods in addition to iterators. 
11102
11103         (EmitContext.EmitCapturedVariableInstance): This emits whatever
11104         code is necessary on the stack to access the instance to a local
11105         variable (the variable will be accessed as a field).
11106
11107         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
11108         EmitContext.EmitAddressOfParameter): Routines to support
11109         parameters (not completed at this point). 
11110         
11111         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
11112         will also remove the parameters.
11113
11114         * convert.cs (Convert): Define a `ConstantEC' which points to a
11115         null.  This is just to prefity some code that uses
11116         ImplicitStandardConversion code and do not have an EmitContext
11117         handy.
11118
11119         The idea is to flag explicitly that at that point in time, it is
11120         known that the conversion will not trigger the delegate checking
11121         code in implicit conversions (which requires a valid
11122         EmitContext). 
11123
11124         Everywhere: pass new EmitContext parameter since
11125         ImplicitStandardConversionExists now requires it to check for
11126         anonymous method conversions. 
11127
11128         (Convert.ImplicitStandardConversionExists): If the type of an
11129         expression is the anonymous_method_type, and the type is a
11130         delegate, we invoke the AnonymousMethod.Compatible method to check
11131         whether an implicit conversion is possible. 
11132
11133         (Convert.ImplicitConversionStandard): Only do implicit method
11134         group conversions if the language level is not ISO_1.
11135
11136         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
11137         MethodInfo for the Invoke method.  used by Delegate and
11138         AnonymousDelegate.
11139
11140         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
11141         method conversions if the target type is a delegate.
11142
11143         Removed extra debugging nops.
11144
11145         (LocalVariableReference): Turn the `local_info' into a public
11146         field. 
11147
11148         Add `prepared' field, the same hack used for FieldExprs to cope
11149         with composed assignments, as Local variables do not necessarily
11150         operate purely on the stack as they used to: they can be captured
11151         fields. 
11152
11153         Add `temp' for a temporary result, like fields.
11154
11155         Refactor DoResolve and DoResolveLValue into DoResolveBase.
11156
11157         It now copes with Local variables that are captured and emits the
11158         proper instance variable to load it from a field in the captured
11159         case. 
11160
11161         (ParameterReference.DoResolveBase): During the resolve phase,
11162         capture parameters if we are in an anonymous method.
11163
11164         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
11165         anonymous method, use the EmitContext helper routines to emit the
11166         parameter reference.
11167
11168         * iterators.cs: Set RemapToProxy to true/false during the
11169         EmitDispose class.
11170
11171         * parameters.cs (GetParameterByName): New helper method. 
11172
11173         * typemanager.cs (anonymous_method_type) a new type that
11174         represents an anonyous method.  This is always an internal type,
11175         used as a fencepost to test against the anonymous-methodness of an
11176         expression. 
11177         
11178 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
11179
11180         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
11181         561 report.
11182         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
11183
11184 2004-10-18  Martin Baulig  <martin@ximian.com>
11185
11186         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
11187         `Type' directly, but call ResolveType() on it.
11188         (Catch.Resolve): Likewise.
11189         (Foreach.Resolve): Likewise.
11190
11191 2004-10-18  Martin Baulig  <martin@ximian.com>
11192
11193         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
11194         `Type' directly, but call ResolveType() on it.
11195         (Probe.DoResolve): Likewise.
11196         (ArrayCreation.LookupType): Likewise.
11197         (TypeOf.DoResolve): Likewise.
11198         (SizeOf.DoResolve): Likewise.
11199
11200 2004-10-18  Martin Baulig  <martin@ximian.com>
11201
11202         * expression.cs (Invocation.BetterFunction): Put back
11203         TypeManager.TypeToCoreType().
11204
11205 2004-10-18  Raja R Harinath  <rharinath@novell.com>
11206
11207         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
11208         the ResolveType.
11209
11210 2004-10-18  Martin Baulig  <martin@ximian.com>
11211
11212         * parameter.cs (Parameter.Resolve):  Don't access the TypeExpr's
11213         `Type' directly, but call ResolveType() on it.
11214
11215 2004-10-18  Martin Baulig  <martin@ximian.com>
11216
11217         * class.cs (FieldMember.Define): Don't access the TypeExpr's
11218         `Type' directly, but call ResolveType() on it.
11219         (MemberBase.DoDefine): Likewise.
11220
11221         * expression.cs (New.DoResolve): Don't access the TypeExpr's
11222         `Type' directly, but call ResolveType() on it.
11223         (ComposedCast.DoResolveAsTypeStep): Likewise.
11224
11225         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
11226         `Type' directly, but call ResolveType() on it.
11227
11228 2004-10-17  John Luke  <john.luke@gmail.com>
11229
11230         * class.cs (Operator.GetSignatureForError): use CSharpName
11231
11232         * parameter.cs (Parameter.GetSignatureForError): Returns
11233         correct name even if was not defined.
11234
11235 2004-10-13  Raja R Harinath  <rharinath@novell.com>
11236
11237         Fix #65816.
11238         * class.cs (TypeContainer.EmitContext): New property.
11239         (DefineNestedTypes): Create an emitcontext for each part.
11240         (MethodCore.DoDefineParameters): Use container's emitcontext.
11241         Pass type array to InternalParameters.
11242         (MemberBase.DoDefine): Use container's emitcontext.
11243         (FieldMember.Define): Likewise.
11244         (Event.Define): Likewise.
11245         (SetMethod.GetParameterInfo): Change argument to EmitContext.
11246         Pass type array to InternalParameters.
11247         (SetIndexerMethod.GetParameterInfo): Likewise.
11248         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
11249         * delegate.cs (Define): Pass emitcontext to
11250         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
11251         array to InternalParameters.
11252         * expression.cs (ParameterReference.DoResolveBase): Pass
11253         emitcontext to GetParameterInfo.
11254         (ComposedCast.DoResolveAsTypeStep): Remove check on
11255         ec.ResolvingTypeTree.
11256         * parameter.cs (Parameter.Resolve): Change argument to
11257         EmitContext.  Use ResolveAsTypeTerminal.
11258         (Parameter.GetSignature): Change argument to EmitContext.
11259         (Parameters.ComputeSignature): Likewise.
11260         (Parameters.ComputeParameterTypes): Likewise.
11261         (Parameters.GetParameterInfo): Likewise.
11262         (Parameters.ComputeAndDefineParameterTypes): Likewise.
11263         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
11264         * support.cs (InternalParameters..ctor): Remove variant that takes
11265         a DeclSpace.
11266         * typemanager.cs (system_intptr_expr): New.
11267         (InitExpressionTypes): Initialize it.
11268
11269 2004-10-12  Chris Toshok  <toshok@ximian.com>
11270
11271         * cs-parser.jay: fix location for try_statement and catch_clause.
11272
11273 2004-10-11  Martin Baulig  <martin@ximian.com>
11274
11275         * report.cs: Don't make --fatal abort on warnings, we have
11276         -warnaserror for that.
11277
11278 2004-10-07  Raja R Harinath  <rharinath@novell.com>
11279
11280         More DeclSpace.ResolveType avoidance.
11281         * decl.cs (MemberCore.InUnsafe): New property.
11282         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
11283         with newly created EmitContext.
11284         (FieldMember.Define): Likewise.
11285         * delegate.cs (Delegate.Define): Likewise.
11286         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
11287         only if normal name-lookup fails.
11288         (TypeExpr.DoResolve): Enable error-checking.
11289         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
11290         (SizeOf.DoResolve): Likewise.
11291         (ComposedCast.DoResolveAsTypeStep): Likewise.
11292         (StackAlloc.DoResolve): Likewise.
11293         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
11294         (Block.Unsafe): New property.
11295         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
11296         (Unsafe): Set 'unsafe' flag of contained block.
11297         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
11298         (Fixed.Resolve): Likewise.
11299         (Catch.Resolve): Likewise.
11300         (Using.ResolveLocalVariableDecls): Likewise.
11301         (Foreach.Resolve): Likewise.
11302
11303 2004-10-05  John Luke <john.luke@gmail.com>
11304
11305         * cs-parser.jay: add location to error CS0175
11306
11307 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
11308
11309         * ecore.cs (Expression.Constantity): Add support for turning null
11310         into a constant.
11311
11312         * const.cs (Const.Define): Allow constants to be reference types
11313         as long as the value is Null.
11314
11315 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
11316
11317         * namespace.cs (NamespaceEntry.Using): No matter which warning
11318         level is set, check if this namespace name has already been added.
11319
11320 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
11321
11322         * expression.cs: reftype [!=]= null should always use br[true,false].
11323         # 67410
11324
11325 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
11326
11327         Fix #67108
11328         * attribute.cs: Enum conversion moved to 
11329         GetAttributeArgumentExpression to be applied to the all
11330         expressions.
11331
11332 2004-10-01  Raja R Harinath  <rharinath@novell.com>
11333
11334         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
11335         * class.c (TypeContainer.DefineType): Flag error if
11336         base types aren't accessible due to access permissions.
11337         * decl.cs (DeclSpace.ResolveType): Move logic to
11338         Expression.ResolveAsTypeTerminal.
11339         (DeclSpace.ResolveTypeExpr): Thin layer over
11340         Expression.ResolveAsTypeTerminal.
11341         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
11342         Refactor code into NestedAccess.  Use it.
11343         (DeclSpace.NestedAccess): New.
11344         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
11345         argument to silence errors.  Check access permissions.
11346         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
11347         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
11348         (Cast.DoResolve): Likewise.
11349         (New.DoResolve): Likewise.
11350         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
11351         (TypeOf.DoResolve): Likewise.
11352
11353         * expression.cs (Invocation.BetterConversion): Return the Type of
11354         the better conversion.  Implement section 14.4.2.3 more faithfully.
11355         (Invocation.BetterFunction): Make boolean.  Make correspondence to
11356         section 14.4.2.2 explicit.
11357         (Invocation.OverloadResolve): Update.
11358         (Invocation): Remove is_base field.
11359         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
11360         (Invocation.Emit): Likewise.
11361
11362 2004-09-27  Raja R Harinath  <rharinath@novell.com>
11363
11364         * README: Update to changes.
11365
11366 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
11367
11368         * cs-parser.jay: Reverted 642 warning fix.
11369
11370 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
11371
11372         Fix bug #66615
11373         * decl.cs (FindMemberWithSameName): Indexer can have more than
11374         1 argument.
11375
11376 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
11377
11378         * expression.cs (LocalVariableReference.DoResolveLValue):
11379         Do not report warning 219 for out values.
11380         (EmptyExpression.Null): New member to avoid extra allocations.
11381
11382 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
11383
11384         * cs-parser.jay: Fix wrong warning 642 report.
11385
11386         * cs-tokenizer.cs (CheckNextToken): New helper;
11387         Inspect next character if is same as expected.
11388
11389 2004-09-23  Martin Baulig  <martin@ximian.com>
11390
11391         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
11392         (Convert.ImplicitReferenceConversionExists): Likewise.
11393
11394 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
11395
11396         * class.cs (Operator.Define): Add error 448 and 559 report.
11397
11398 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
11399
11400         * class.cs (MemberBase.IsTypePermitted): New protected
11401         method for checking error CS0610.
11402
11403 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
11404
11405         * class.cs (TypeContainer.HasExplicitLayout): New property
11406         Returns whether container has StructLayout attribute set Explicit.
11407         (FieldMember): New abstract class for consts and fields.
11408         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
11409         (Field): Reuse FieldMember.
11410
11411         * const.cs (Const): Reuse FieldMember.
11412
11413         * rootcontext.cs: EmitConstants call moved to class.
11414
11415 2004-09-22  Martin Baulig  <martin@ximian.com>
11416
11417         Thanks to Peter Sestoft for this bug report.
11418
11419         * expression.cs (Conditional): If both the `trueExpr' and the
11420         `falseExpr' is a NullLiteral, return a NullLiteral.
11421
11422 2004-09-22  Martin Baulig  <martin@ximian.com>
11423
11424         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
11425         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
11426         for the "get_Current" call.
11427
11428 2004-09-22  Martin Baulig  <martin@ximian.com>
11429
11430         Marek and me just fixed one of our oldest bugs: #28562 :-)
11431
11432         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
11433
11434         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
11435         we're an EnumConstant, just return that.
11436         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
11437         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
11438         to get the value which'll actually be written into the attribute.
11439         However, we have to use GetValue() to access the attribute's value
11440         in the compiler.        
11441
11442 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
11443
11444         * constant.cs (Constant.IsNegative): New abstract property
11445         IsNegative.
11446
11447         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
11448         (StackAlloc.DoResolve): Reused IsNegative.
11449
11450 2004-09-21  Martin Baulig  <martin@ximian.com>
11451
11452         * codegen.cs (VariableStorage): Don't store the ILGenerator here;
11453         if we're used in an iterator, we may be called from different
11454         methods.
11455
11456         * statement.cs (Foreach.EmitFinally): Only emit an `Endfinally' if
11457         we actually have an exception block.
11458
11459 2004-09-20  John Luke <jluke@cfl.rr.com>
11460
11461         * class.cs, cs-parser.jay: Improve the error report for 1520:
11462         report the actual line where the error happens, not where the
11463         class was declared.
11464
11465         * assign.cs, delegate.cs, ecore.cs, expression.cs, statement.cs:
11466         Pass location information that was available elsewhere.
11467
11468 2004-09-19  Sebastien Pouliot  <sebastien@ximian.com>
11469
11470         * codegen.cs: Fix bug #56621. It is now possible to use MCS on the MS
11471         runtime to delay sign assemblies.
11472
11473 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
11474
11475         * cs-parser.jay: Do not report the stack trace, this is barely
11476         used nowadays.
11477
11478 2004-08-22  John Luke  <john.luke@gmail.com>
11479  
11480         * driver.cs : check that a resource id is not already used
11481         before adding it, report CS1508 if it is, bug #63637
11482
11483 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
11484
11485         * ecore.cs: Removed dead code.
11486
11487 2004-09-18  Marek Safar  <marek.safar@seznam.cz>
11488
11489         * class.cs: Do not report warning CS0067 on the interfaces.
11490
11491 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
11492
11493         * cs-parser.jay: Add error 504 report.
11494
11495 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
11496
11497         * rootcontext.cs: WarningLevel is 4 by default now.
11498
11499         * statement.cs (Fixed.Resolve): Do not null
11500         VariableInfo.
11501
11502 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
11503
11504         Fixed bug #55780
11505         * ecore.cs (PropertyExpr.FindAccessors): Do not perform
11506         deep search when property is not virtual.
11507         (PropertyExpr.ResolveAccessors): Make one call for both
11508         accessors.
11509
11510 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
11511
11512         Fixed bug #65766
11513         * statement.cs: Error 152 report constains also location.
11514
11515 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
11516
11517         Fixed bug #65766
11518         * const.cs: Explicitly set constant as static.
11519
11520 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
11521
11522         Fixed bug #64226
11523         * cs-parser.jay: Add error 1017 report.
11524
11525 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
11526
11527         Fixed bug #59980, #64224
11528         * expression.cs (Invocation.DoResolve): Fixed error CS0571 test.
11529
11530         * typemanager.cs (IsSpecialMethod): Simplified
11531
11532 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
11533
11534         * decl.cs (MemberCore.Emit): Resuscitated VerifyObsoleteAttribute
11535         condition with better params.
11536
11537 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
11538
11539         Fixed bug #65238
11540         * attribute.cs (Resolve): Property has to have both
11541         accessors.
11542
11543 2004-09-14  Martin Baulig  <martin@ximian.com>
11544
11545         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
11546
11547 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
11548
11549         Fixed bug #61902
11550         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
11551         called and is obsolete then this member suppress message
11552         when call is inside next [Obsolete] method or type.
11553
11554         * expression.cs: Use TestObsoleteMethodUsage member.
11555
11556 2004-09-14  Martin Baulig  <martin@ximian.com>
11557
11558         * cs-parser.jay: Sync a bit with the GMCS version.
11559
11560 2004-09-14  Martin Baulig  <martin@ximian.com>
11561
11562         * cs-parser.jay (CSharpParser): Don't derive from GenericsParser.
11563         (CSharpParser.yacc_verbose_flag): New public field.
11564
11565         * genericparser.cs: Removed.
11566
11567 2004-09-14  Raja R Harinath  <rharinath@novell.com>
11568
11569         * cs-parser.jay (event_declaration): Re-enable cs0071 error.
11570
11571 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
11572
11573         * class.cs (MethodCore.CheckBase): Fix bug #65757.
11574
11575 2004-09-10  Martin Baulig  <martin@ximian.com>
11576
11577         Backported my MemberName changes from GMCS into MCS.
11578
11579         - we are now using a special `MemberName' class instead of using
11580         strings; in GMCS, the `MemberName' also contains the type
11581         arguments.
11582
11583         - changed the grammar rules a bit:
11584           * the old `member_name' is now a `namespace_or_type_name':
11585             The rule is that we use `namespace_or_type_name' everywhere
11586             where we expect either a "member name" (GetEnumerator) or a
11587             "member name" with an explicit interface name
11588             (IEnumerable.GetEnumerator).
11589             In GMCS, the explicit interface name may include type arguments
11590             (IEnumerable<T>.GetEnumerator).
11591           * we use `member_name' instead of just `IDENTIFIER' for
11592             "member names":
11593             The rule is that we use `member_name' wherever a member may
11594             have type parameters in GMCS.       
11595
11596         * decl.cs (MemberName): New public class.
11597         (MemberCore.MemberName): New public readonly field.
11598         (MemberCore.ctor): Take a `MemberName' argument, not a string.
11599         (DeclSpace): Likewise.
11600
11601         * delegate.cs (Delegate.ctor): Take a MemberName, not a string.
11602         * enum.cs (Enum.ctor): Likewise.
11603
11604         * namespace.cs (AliasEntry.Alias): Changed type from Expression to
11605         MemberName.     
11606         (AliasEntry.ctor): Take a MemberName, not an Expression.
11607         (AliasEntry.UsingAlias): Likewise.
11608
11609         * class.cs (TypeContainer.ctor): Take a MemberName, not a string.
11610         (IMethodData.MemberName): Changed type from string to MemberName.
11611         (MemberBase.ExplicitInterfaceName): Likewise.
11612         (AbstractPropertyEventMethod.SetupName): Make this private.
11613         (AbstractPropertyEventMethod.ctor): Added `string prefix'
11614         argument; compute the member name here.
11615         (AbstractPropertyEventMethod.UpdateName): Recompute the name based
11616         on the `member.MemberName' and the `prefix'.
11617
11618         * cs-parser.jay (attribute_name): Use `namespace_or_type_name',
11619         not `type_name'.
11620         (struct_declaration): Use `member_name' instead of `IDENTIFIER';
11621         thus, we get a `MemberName' instead of a `string'.  These
11622         declarations may have type parameters in GMCS.
11623         (interface_method_declaration, delegate_declaration): Likewise.
11624         (class_declaration, interface_declaration): Likewise.
11625         (method_header): Use `namespace_or_type_name' instead of
11626         `member_name'.  We may be an explicit interface implementation.
11627         (property_declaration, event_declaration): Likewise.
11628         (member_name): This is now just an `IDENTIFIER', not a
11629         `namespace_or_type_name'.
11630         (type_name, interface_type): Removed.
11631         (namespace_or_type_name): Return a MemberName, not an Expression.
11632         (primary_expression): Use `member_name' instead of `IDENTIFIER';
11633         call GetTypeExpression() on the MemberName to get an expression.
11634         (IndexerDeclaration.interface_type): Changed type from string to
11635         MemberName.
11636         (MakeName): Operate on MemberName's instead of string's.
11637
11638 2004-09-13  Raja R Harinath  <rharinath@novell.com>
11639
11640         Fix bug #55770.
11641         * namespace.cs (AliasEntry.Resolve): Implement section 16.3.1.
11642         (NamespaceEntry.Lookup): Add new argument to flag if we want the
11643         lookup to avoid symbols introduced by 'using'.
11644         * rootcontext.cs (NamespaceLookup): Update.
11645
11646 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
11647
11648         * class.cs (TypeContainer.DoDefineMembers): Do not call
11649         DefineDefaultConstructor for static classes.
11650
11651 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
11652
11653         * attribute.cs (Attribute.Resolve): Add error 653 report.
11654
11655         * class.cs (Class.ApplyAttributeBuilder): Add error 641
11656         report.
11657         (Method.ApplyAttributeBuilder): Add error 685 report.
11658         (Operator.Define): Add error 564 report.
11659
11660         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
11661
11662         * expression.cs (Invocation.DoResolve): Add error
11663         245 and 250 report.
11664
11665         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
11666         error 674 report.
11667
11668 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
11669
11670         * class.cs (ConstructorInitializer.Resolve):
11671         Wrong error number (515->516).
11672
11673 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
11674
11675         * class.cs (Indexer.Define): Add error 631 report.
11676
11677 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
11678
11679         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
11680
11681 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
11682
11683         * expression.cs (Probe.DoResolve): Add error CS0241 report.
11684
11685 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
11686
11687         * cs-parser.jay: Added error CS0241 report.
11688
11689 2004-09-10  Raja R Harinath  <rharinath@novell.com>
11690
11691         * cs-parser.jay (fixed_statement): Introduce a scope for the
11692         declaration in the 'fixed' statement.
11693
11694 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
11695
11696         * cs-parser.jay: Added CS0230 error report.
11697
11698 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
11699
11700         * cs-parser.jay: Added errors CS0231 and CS0257 report.
11701
11702 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
11703
11704         * expression.cs (Argument.Resolve): Added error CS0192 and
11705         CS0199 report.
11706
11707 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
11708
11709         C# 2.0 #pragma warning feature
11710
11711         * cs-tokenizer.cs (PreProcessPragma): New method; 
11712         Handles #pragma directive.
11713
11714         * report.cs (WarningRegions): New class; Support
11715         class for #pragma warning directive. It tests whether
11716         warning is enabled for a given line.
11717
11718 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
11719
11720         * const.cs: Add more descriptive error report, tahnks to
11721         Sebastien. 
11722
11723 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
11724
11725         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
11726
11727 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
11728
11729         * expression.cs: Apply patch from Ben: Remove dead code from
11730         ArrayCreation, and remove the TurnintoConstant call in const.cs,
11731         as that code just threw an exception anwyays.
11732
11733         * const.cs: Remove the call to the turnintoconstant, for details
11734         see bug: #63144
11735         
11736         * literal.cs: The type of the null-literal is the null type;  So
11737         we use a placeholder type (literal.cs:System.Null, defined here)
11738         for it.
11739
11740         * expression.cs (Conditional.DoResolve): Remove some old code that
11741         is no longer needed, conversions have been fixed.
11742
11743         (ArrayCreationExpression.DoResolve): Return false if we fail to
11744         resolve the inner expression.
11745
11746 2004-09-07  Raja R Harinath  <rharinath@novell.com>
11747
11748         Fix test-290.cs.
11749         * cs-parser.jay (delegate_declaration): Record a delegate
11750         declaration as a type declaration.
11751         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
11752
11753 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
11754
11755         * parameter.cs: Do not crash if the type can not be resolved. 
11756
11757         * expression.cs: Report errors with unsafe pointers, fixes #64896
11758
11759 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
11760
11761         * expression.cs: Pointer arith always needs to do a conv.i
11762         if the operand is a long. fix 65320
11763
11764 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
11765
11766         Fixed cs0619-37.cs, cs0619-38.cs
11767
11768         * enum.cs (GetObsoleteAttribute): Removed.
11769
11770         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
11771         on Enum member is double staged. The first is tested member
11772         and then enum.
11773
11774 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
11775
11776         Fixed #56986, #63631, #65231
11777
11778         * class.cs: (TypeContainer.AddToMemberContainer): New method,
11779         adds member to name container.
11780         (TypeContainer.AddToTypeContainer): New method, adds type to
11781         name container.
11782         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
11783         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
11784         AddOperator): Simplified by reusing AddToMemberContainer.
11785         (TypeContainer.UserDefinedStaticConstructor): Changed to property
11786         instead of field.
11787         (Method.CheckForDuplications): Fixed implementation to test all
11788         possibilities.
11789         (MemberBase): Detection whether member is explicit interface
11790         implementation is now in constructor.
11791         (MemberBase.UpdateMemberName): Handles IndexerName.
11792         (Accessor): Changed to keep also location information.
11793         (AbstractPropertyEventMethod): Is derived from MemberCore.
11794         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
11795         will be emited or not.
11796         (PropertyBase.AreAccessorsDuplicateImplementation):
11797         Tests whether accessors are not in collision with some method.
11798         (Operator): Is derived from MethodCore to simplify common
11799         operations.
11800
11801         * decl.cs (Flags.TestMethodDuplication): Test for duplication
11802         must be performed.
11803         (DeclSpace.AddToContainer): Adds the member to defined_names
11804         table. It tests for duplications and enclosing name conflicts.
11805
11806         * enum.cs (EnumMember): Clean up to reuse the base structures
11807
11808 2004-09-03  Martin Baulig  <martin@ximian.com>
11809
11810         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
11811         into TypeContainer, to make partial classes work again.
11812
11813 2004-09-03  Martin Baulig  <martin@ximian.com>
11814
11815         * rootcontext.cs (RootContext.V2): Removed.
11816
11817 2004-03-23  Martin Baulig  <martin@ximian.com>
11818
11819         * expression.cs (Invocation.OverloadResolve): Added `bool
11820         may_fail' argument and use it instead of the Location.IsNull() hack.
11821
11822 2004-09-03  Martin Baulig  <martin@ximian.com>
11823
11824         Merged latest changes into gmcs.  Please keep this comment in
11825         here, it makes it easier for me to see what changed in MCS since
11826         the last time I merged.
11827
11828 2004-09-03  Raja R Harinath  <rharinath@novell.com>
11829
11830         Fix #61128.
11831         * expression.cs (BetterConversion): Don't allow either conversion 
11832         to be null.  Remove redundant implicit conversion test when 'q ==
11833         null' -- when this function is invoked, we already know that the
11834         implicit conversion exists.
11835         (BetterFunction): Assume that 'best' is non-null.  Remove
11836         redundant reimplementation of IsApplicable when 'best' is null.
11837         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
11838         number of arguments.
11839         (IsAncestralType): Extract from OverloadResolve.
11840         (OverloadResolve): Make robust to the MethodGroupExpr being
11841         unsorted.  Implement all the logic of Section 14.5.5.1, and
11842         support overloading of methods from multiple applicable types.
11843         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
11844
11845         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
11846         (RealError, Warning): Append type of report to related symbol.
11847
11848 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
11849
11850         * enum.cs: Fixed CLS-Compliance checks for enum members.
11851         Error tests cs3008-8.cs, cs3014-8.cs
11852
11853 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
11854
11855         Fixed bug #62342, #63102
11856         * class.cs: ImplementIndexer uses member.IsExplicitImpl
11857         like ImplementMethod.
11858
11859 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
11860
11861         * attribute.cs (Attribute.GetAttributeArgumentExpression):
11862         Fixed bug #65170.
11863
11864 2004-09-02  Martin Baulig  <martin@ximian.com>
11865
11866         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
11867         TypeManager.GetArgumentTypes() rather than calling GetParameters()
11868         on the MethodBase.
11869
11870 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
11871
11872         C# 2.0 Static classes implemented
11873
11874         * class.cs (TypeContainer): instance_constructors,
11875         initialized_fields, initialized_static_fields,
11876         default_constructor, base_inteface_types are protected to be
11877         accessible from StaticClass.
11878         (TypeContainer.DefineDefaultConstructor): New virtual method
11879         for custom default constructor generating
11880         (StaticClass): New class to handle "Static classes" feature.
11881
11882         * cs-parser.jay: Handle static keyword on class like instance
11883         of StaticClass.
11884
11885         * driver.cs: Added "/langversion" command line switch with two
11886         options (iso-1, default).
11887
11888 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
11889
11890         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
11891
11892 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
11893
11894         * delegate.cs: Style.
11895
11896 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
11897
11898         * delegate.cs: Add seperate instance expr field for miguel.
11899
11900 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
11901
11902         * PointerArithmetic (Resolve): make sure we are not doing
11903         pointer arith on void*. Also, make sure we are resolved
11904         by not setting eclass until resolve.
11905
11906         All callers: Make sure that PointerArithmetic gets resolved.
11907
11908 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
11909
11910         * ArrayCreation (LookupType): If the type does not resolve 
11911         to an array, give an error.
11912
11913 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
11914
11915         * statement.cs (Try.Resolve): Fixed bug #64222
11916
11917 2004-08-27  Martin Baulig  <martin@ximian.com>
11918
11919         * class.cs
11920         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
11921         crash here.     
11922
11923 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
11924
11925         * ecore.cs (Constantify): Get underlying type via
11926         System.Enum.GetUnderlyingType to avoid StackOverflow on the
11927         Windows in special cases.
11928
11929 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
11930
11931         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
11932         for obtaining also private methods.
11933         (GetRemoveMethod): Used GetRemoveMethod (true)
11934         for obtaining also private methods.
11935
11936 2004-08-24  Martin Baulig  <martin@ximian.com>
11937
11938         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
11939         MethodAttributes.HideBySig for operators.
11940
11941 2004-08-23  Martin Baulig  <martin@ximian.com>
11942
11943         Back to the old error reporting system :-)
11944
11945         * report.cs (Message): Removed.
11946         (Report.MessageData, ErrorData, WarningData): Removed.
11947         (Report.Error, Warning): Back to the old system.
11948
11949 2004-08-23  Martin Baulig  <martin@ximian.com>
11950
11951         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
11952
11953         * class.cs (TypeContainer.ParentContainer): New public virtual
11954         method; replaces the explicit interface implementation.
11955         (ClassPart.ParentContainer): Override.
11956
11957 2004-08-23  Martin Baulig  <martin@ximian.com>
11958
11959         * statement.cs (Switch): Added support for constant switches; see
11960         #59428 or test-285.cs.
11961
11962 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
11963
11964         Fixed bug #62740.
11965         * statement.cs (GetEnumeratorFilter): Removed useless
11966         logic because C# specs is strict. GetEnumerator must be
11967         public.
11968
11969 2004-08-22  Martin Baulig  <martin@ximian.com>
11970
11971         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
11972         a switch and may break, reset the barrier.  Fixes #59867.
11973
11974 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
11975
11976         CLS-Compliance speed up (~5% for corlib)
11977
11978         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
11979         New method. Tests container for CLS-Compliant names
11980
11981         * class.cs (TypeContainer.VerifyClsName): New method.
11982         Checks whether container name is CLS Compliant.
11983         (Constructor): Implements IMethodData.
11984
11985         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
11986         low-case table for CLS Compliance test.
11987         (MemberCache.VerifyClsParameterConflict): New method.
11988         Checks method parameters for CS3006 error.
11989
11990         * enum.cs (EnumMember): Is derived from MemberCore.
11991         (Enum.VerifyClsName): Optimized for better performance.
11992
11993 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
11994
11995         * report.cs: Renamed Error_T to Error and changed all
11996         references.
11997
11998 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
11999
12000         * class.cs (TypeContainer.IndexerArrayList): New inner class
12001         container for indexers.
12002         (TypeContainer.DefaultIndexerName): New constant for default
12003         indexer name. Replaced all "Item" with this constant.
12004         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
12005
12006         * typemanager.cs (TypeManager.default_member_ctor): Cache here
12007         DefaultMemberAttribute constructor.
12008
12009 2004-08-05  Martin Baulig  <martin@ximian.com>
12010
12011         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
12012         Fix bug #59429.
12013
12014 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
12015
12016         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
12017         multi platforms problem.
12018
12019         * compiler.csproj: Included shared files.
12020
12021 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
12022
12023         Fix bug 60333, 55971 in the more general way
12024         * attribute.cs (Attribute.GetAttributeArgumentExpression):
12025         Added arg_type argument for constant conversion.
12026         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
12027
12028 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
12029
12030         Fix bug #59760
12031         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
12032         OperatorArrayList, MethodCoreArrayList for typecontainer
12033         containers. Changed class member types to these new types.
12034         (MethodArrayList.DefineMembers): Added test for CS0659.
12035
12036 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
12037
12038         * cfold.cs: Synchronize the folding with the code in expression.cs
12039         Binary.DoNumericPromotions for uint operands.
12040
12041         * attribute.cs: Revert patch from Raja, it introduced a regression
12042         while building Blam-1.2.1 (hard to isolate a test case).
12043
12044 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
12045
12046         Fix for #55382
12047         * class.cs:
12048         (TypeContainer.Define): Renamed to DefineContainerMembers because of
12049         name collision.
12050         (MethodCore.parent_method): New member. The method we're overriding
12051         if this is an override method.
12052         (MethodCore.CheckBase): Moved from Method class and made common.
12053         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
12054         private.
12055         (MethodCore.CheckForDuplications): New abstract method. For custom
12056         member duplication search in a container
12057         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
12058         method and its return type.
12059         (Event.conflict_symbol): New member. Symbol with same name in the
12060         parent class.
12061
12062         * decl.cs:
12063         (MemberCache.FindMemberWithSameName): New method. The method
12064         is looking for conflict with inherited symbols.
12065
12066 2004-08-04  Martin Baulig  <martin@ximian.com>
12067
12068         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
12069
12070         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
12071
12072 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
12073
12074         * report.cs (Message): New enum for better error, warning reference in
12075         the code.
12076         (MessageData): New inner abstract class. It generally handles printing of
12077         error and warning messages.
12078         Removed unused Error, Warning, Message methods.
12079
12080 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
12081
12082         Fix for cs0592-8.cs test
12083         * attribute.cs
12084         (Attributable.ValidAttributeTargets): Made public.
12085         (Attribute.ExplicitTarget): New member for explicit target value.
12086         (Attribute.CheckTargets): Now we translate explicit attribute
12087         target to Target here.
12088
12089 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
12090
12091         * ecore.cs (MethodGroupExpr): new IsBase property.
12092
12093         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
12094
12095         * delegate.cs (DelegateCreation): store a MethodGroupExpr
12096         rather than an instance expr.
12097
12098         (DelegateCreation.Emit): Use the method group rather than
12099         the instance expression. Also, if you have base.Foo as the
12100         method for a delegate, make sure to emit ldftn, not ldftnvirt.
12101
12102         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
12103
12104         (NewDelegate.DoResolve): Only check for the existance of Invoke
12105         if the method is going to be needed. Use MethodGroupExpr.
12106
12107         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
12108
12109         * expression.cs: For pointer arith., make sure to use
12110         the size of the type, not the size of the pointer to
12111         the type.
12112
12113 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
12114
12115         Fix for #60722
12116         * class.cs (Class): Added error CS0502 test.
12117
12118 2004-08-03  John Luke  <jluke@cfl.rr.com>
12119             Raja R Harinath  <rharinath@novell.com>
12120
12121         Fix for #60997.
12122         * attribute.cs (Attribute.complained_before): New flag.
12123         (Attribute.ResolveType, Attribute.Resolve),
12124         (Attribute.DefinePInvokeMethod): Set it.
12125         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
12126         
12127 2004-08-03  Martin Baulig  <martin@ximian.com>
12128
12129         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
12130         use a user-defined operator; we still need to do numeric
12131         promotions in case one argument is a builtin type and the other
12132         one has an implicit conversion to that type.  Fixes #62322.
12133
12134 2004-08-02  Martin Baulig  <martin@ximian.com>
12135
12136         * statement.cs (LocalInfo.Flags): Added `IsThis'.
12137         (LocalInfo.IsThis): New public property.
12138         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
12139
12140 2004-08-01  Martin Baulig  <martin@ximian.com>
12141
12142         * class.cs (TypeContainer.GetClassBases): Don't set the default
12143         here since we may get called from GetPartialBases().
12144         (TypeContainer.DefineType): If GetClassBases() didn't return a
12145         parent, use the default one.
12146
12147 2004-07-30  Duncan Mak  <duncan@ximian.com>
12148
12149         * Makefile (mcs2.exe, mcs3.exe): add $(EXTRA_SOURCES).
12150
12151 2004-07-30  Martin Baulig  <martin@ximian.com>
12152
12153         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
12154
12155         * class.cs (SourceMethod): New public class, derive from the
12156         symbol writer's ISourceMethod.
12157         (Method): Use the new symbol writer API.
12158
12159         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
12160         as argument and use the new symbol writer.
12161
12162         * location.cs
12163         (SourceFile): Implement the symbol writer's ISourceFile.
12164         (Location.SymbolDocument): Removed.
12165         (Location.SourceFile): New public property.
12166
12167         * symbolwriter.cs: Use the new symbol writer API.
12168
12169 2004-07-30  Raja R Harinath  <rharinath@novell.com>
12170
12171         * Makefile (install-local): Remove.  Functionality moved to
12172         executable.make.
12173
12174 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
12175
12176         * Makefile: Install mcs.exe.config file together with mcs.exe.
12177         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
12178         correct runtime version.
12179         
12180 2004-07-25  Martin Baulig  <martin@ximian.com>
12181
12182         * class.cs
12183         (TypeContainer.RegisterOrder): Removed, this was unused.
12184         (TypeContainer, interface_order): Removed.
12185         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
12186         TypeContainer as argument since we can also be called with a
12187         `PartialContainer' for a partial class/struct/interface.
12188         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
12189         of checking whether we're an `Interface' - we could be a
12190         `PartialContainer'.
12191         (PartialContainer.Register): Override; call
12192         AddClass()/AddStruct()/AddInterface() on our parent.
12193
12194         * cs-parser.jay (interface_member_declaration): Add things to the
12195         `current_container', not the `current_class'.
12196
12197         * rootcontext.cs (RegisterOrder): The overloaded version which
12198         takes an `Interface' was unused, removed.
12199
12200         * typemanager.cs (TypeManager.LookupInterface): Return a
12201         `TypeContainer', not an `Interface'.
12202         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
12203         contain a `PartialContainer' for an interface, so check it's
12204         `Kind' to figure out what it is.
12205
12206 2004-07-25  Martin Baulig  <martin@ximian.com>
12207
12208         * class.cs (Class.DefaultTypeAttributes): New public constant.
12209         (Struct.DefaultTypeAttributes): Likewise.
12210         (Interface.DefaultTypeAttributes): Likewise.
12211         (PartialContainer.TypeAttr): Override this and add the
12212         DefaultTypeAttributes.
12213
12214 2004-07-25  Martin Baulig  <martin@ximian.com>
12215
12216         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
12217         we can just use the `Parent' field instead.
12218
12219 2004-07-25  Martin Baulig  <martin@ximian.com>
12220
12221         * class.cs (TypeContainer.Emit): Renamed to EmitType().
12222
12223 2004-07-25  Martin Baulig  <martin@ximian.com>
12224
12225         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
12226         our parts before defining any methods.
12227         (TypeContainer.VerifyImplements): Make this virtual.
12228         (ClassPart.VerifyImplements): Override and call VerifyImplements()
12229         on our PartialContainer.
12230
12231 2004-07-25  Martin Baulig  <martin@ximian.com>
12232
12233         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
12234
12235         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
12236         argument, we can just use the `Parent' field instead.
12237
12238         * class.cs
12239         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
12240         (MemberBase.DoDefine): Likewise.
12241
12242 2004-07-24  Martin Baulig  <martin@ximian.com>
12243
12244         * decl.cs (MemberCore.Parent): New public field.
12245         (DeclSpace.Parent): Moved to MemberCore.
12246
12247         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
12248         (MemberBase.ctor): Added TypeContainer argument, pass it to our
12249         parent's .ctor.
12250         (FieldBase, Field, Operator): Likewise.
12251         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
12252         (EventField, Event): Likewise.
12253
12254 2004-07-23  Martin Baulig  <martin@ximian.com>
12255
12256         * class.cs (PartialContainer): New public class.
12257         (ClassPart): New public class.
12258         (TypeContainer): Added support for partial classes.
12259         (TypeContainer.GetClassBases): Splitted some of the functionality
12260         out into GetNormalBases() and GetPartialBases().
12261
12262         * cs-tokenizer.cs (Token.PARTIAL): New token.
12263         (Tokenizer.consume_identifier): Added some hacks to recognize
12264         `partial', but only if it's immediately followed by `class',
12265         `struct' or `interface'.
12266
12267         * cs-parser.jay: Added support for partial clases.
12268
12269 2004-07-23  Martin Baulig  <martin@ximian.com>
12270
12271         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
12272         a `DeclSpace' and also made it readonly.
12273         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
12274         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
12275         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
12276
12277         * cs-parser.jay: Pass the `current_class', not the
12278         `current_container' (at the moment, this is still the same thing)
12279         to a new Method, Property, Event, Indexer or Constructor.
12280
12281 2004-07-23  Martin Baulig  <martin@ximian.com>
12282
12283         * cs-parser.jay (CSharpParser): Added a new `current_class' field
12284         and removed the `current_interface' one.
12285         (struct_declaration, class_declaration, interface_declaration):
12286         Set `current_class' to the newly created class/struct/interface;
12287         set their `Bases' and call Register() before parsing their body.
12288
12289 2004-07-23  Martin Baulig  <martin@ximian.com>
12290
12291         * class.cs (Kind): New public enum.
12292         (TypeContainer): Made this class abstract.
12293         (TypeContainer.Kind): New public readonly field.
12294         (TypeContainer.CheckDef): New public method; moved here from
12295         cs-parser.jay.
12296         (TypeContainer.Register): New public abstract method.
12297         (TypeContainer.GetPendingImplementations): New public abstract
12298         method.
12299         (TypeContainer.GetClassBases): Removed the `is_class' and
12300         `is_iface' parameters.
12301         (TypeContainer.DefineNestedTypes): Formerly known as
12302         DoDefineType().
12303         (ClassOrStruct): Made this class abstract.
12304
12305         * tree.cs (RootTypes): New public type. 
12306
12307 2004-07-20  Martin Baulig  <martin@ximian.com>
12308
12309         * tree.cs (Tree.RecordNamespace): Removed.
12310         (Tree.Namespaces): Removed.
12311
12312         * rootcontext.cs (RootContext.IsNamespace): Removed.
12313
12314         * cs-parser.jay (namespace_declaration): Just create a new
12315         NamespaceEntry here.
12316
12317 2004-07-20  Martin Baulig  <martin@ximian.com>
12318
12319         * statement.cs (ExceptionStatement): New abstract class.  This is
12320         now used as a base class for everyone who's using `finally'.
12321         (Using.ResolveLocalVariableDecls): Actually ResolveLValue() all
12322         our local variables before using them.
12323
12324         * flowanalysis.cs (FlowBranching.StealFinallyClauses): New public
12325         virtual method.  This is used by Yield.Resolve() to "steal" an
12326         outer block's `finally' clauses.
12327         (FlowBranchingException): The .ctor now takes an ExceptionStatement
12328         argument.
12329
12330         * codegen.cs (EmitContext.StartFlowBranching): Added overloaded
12331         version which takes an ExceptionStatement.  This version must be
12332         used to create exception branchings.
12333
12334         * iterator.cs
12335         (Yield.Resolve): "Steal" all `finally' clauses from containing blocks.
12336         (Iterator.EmitMoveNext): Added exception support; protect the
12337         block with a `fault' clause, properly handle 'finally' clauses.
12338         (Iterator.EmitDispose): Run all the `finally' clauses here.
12339
12340 2004-07-20  Martin Baulig  <martin@ximian.com>
12341
12342         * iterator.cs: This is the first of a set of changes in the
12343         iterator code.  Match the spec more closely: if we're an
12344         IEnumerable, then GetEnumerator() must be called.  The first time
12345         GetEnumerator() is called, it returns the current instance; all
12346         subsequent invocations (if any) must create a copy.
12347
12348 2004-07-19  Miguel de Icaza  <miguel@ximian.com>
12349
12350         * expression.cs: Resolve the constant expression before returning
12351         it. 
12352
12353 2004-07-19  Martin Baulig  <martin@ximian.com>
12354
12355         * iterators.cs (Iterator.MapVariable): Don't define fields twice.
12356         (Iterator.MoveNextMethod.DoEmit): Use `TypeManager.int32_type' as
12357         the return type of the new EmitContext.
12358
12359 2004-07-18  Martin Baulig  <martin@ximian.com>
12360
12361         * class.cs (Property.Define): Fix iterators.
12362
12363         * iterators.cs (Iterator.Define): Moved the
12364         `container.AddInterator (this)' call here from the .ctor; only do
12365         it if we resolved successfully.
12366
12367 2004-07-17  Miguel de Icaza  <miguel@ximian.com>
12368
12369         * cs-tokenizer.cs (handle_preprocessing_directive): Do not return
12370         `true' for preprocessing directives that we parse.  The return
12371         value indicates whether we should return to regular tokenizing or
12372         not, not whether it was parsed successfully.
12373
12374         In the past if we were in: #if false ... #line #endif, we would
12375         resume parsing after `#line'.  See bug 61604.
12376
12377         * typemanager.cs: Removed an old hack from Gonzalo to get corlib
12378         building: IsEnumType should return true only for enums, not for
12379         enums or System.Enum itself.  This fixes #61593.
12380
12381         Likely what happened is that corlib was wrong: mcs depended on
12382         this bug in some places.  The bug got fixed, we had to add the
12383         hack, which caused bug 61593.
12384
12385         * expression.cs (ArrayAccess.GetStoreOpCode): Remove an old hack
12386         that was a workaround for the older conditions.
12387
12388 2004-07-16  Ben Maurer  <bmaurer@ximian.com>
12389
12390         * assign.cs: IAssignMethod has a new interface, as documented
12391         inline. All assignment code now uses this new api.
12392
12393         * ecore.cs, expression.cs: All classes which implement
12394         IAssignMethod now use the new interface.
12395
12396         * expression.cs (Invocation): add a hack to EmitCall so that
12397         IndexerAccess can be the target of a compound assignment without
12398         evaluating its arguments twice.
12399
12400         * statement.cs: Handle changes in Invocation api.
12401
12402 2004-07-16  Martin Baulig  <martin@ximian.com>
12403
12404         * iterators.cs: Rewrote this.  We're now using one single Proxy
12405         class for both the IEnumerable and the IEnumerator interface and
12406         `Iterator' derives from Class so we can use the high-level API.
12407
12408         * class.cs (TypeContainer.AddIterator): New method.
12409         (TypeContainer.DoDefineType): New protected virtual method, which
12410         is called from DefineType().
12411         (TypeContainer.DoDefineMembers): Call DefineType() and
12412         DefineMembers() on all our iterators.
12413         (TypeContainer.Emit): Call Emit() on all our iterators.
12414         (TypeContainer.CloseType): Call CloseType() on all our iterators.
12415
12416         * codegen.cs (EmitContext.CurrentIterator): New public field.
12417
12418 2004-07-15  Martin Baulig  <martin@ximian.com>
12419
12420         * typemanager.cs
12421         (TypeManager.not_supported_exception_type): New type.   
12422
12423 2004-07-14  Martin Baulig  <martin@ximian.com>
12424
12425         * iterators.cs: Use real error numbers.
12426
12427 2004-07-14  Martin Baulig  <martin@ximian.com>
12428
12429         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
12430         requires this to be a System.Collection.IEnumerable and not a
12431         class implementing that interface.
12432         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
12433
12434 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
12435
12436         * class.cs: Fixed previous fix, it broke some error tests.
12437
12438 2004-07-12  Martin Baulig  <martin@ximian.com>
12439
12440         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
12441         Fixes #61293.
12442
12443 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
12444
12445         * assign.cs (LocalTemporary): Add new argument: is_address,If
12446         `is_address' is true, then the value that we store is the address
12447         to the real value, and not the value itself.
12448         
12449         * ecore.cs (PropertyExpr): use the new local temporary
12450         stuff to allow us to handle X.Y += z (where X is a struct)
12451
12452 2004-07-08  Martin Baulig  <martin@ximian.com>
12453
12454         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
12455         not always return, just like we're doing in Using.Resolve().
12456
12457 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
12458
12459         * cs-parser.jay (fixed_statement): flag this as Pinned.
12460
12461 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
12462
12463         * typemanager.cs (TypeManager): Removed MakePinned method, this
12464         mechanism is replaced with the .NET 2.x compatible mechanism of
12465         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
12466
12467         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
12468         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
12469         `IsFixed' property which has a different meaning.
12470
12471 2004-07-02  Raja R Harinath  <rharinath@novell.com>
12472
12473         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
12474         visible from inside a nested class, not just the names of the
12475         immediately enclosing class.
12476         Fix for bug #60730.
12477
12478 2004-06-24  Raja R Harinath  <rharinath@novell.com>
12479
12480         * expression.cs (BetterConversion): Remove buggy special-case
12481         handling of "implicit constant expression conversions".  At this
12482         point, we already know that the conversion is possible -- we're
12483         only checking to see which is better.
12484
12485 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
12486
12487         * cs-parser.jay: Added error CS0210 test.
12488
12489 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
12490
12491         * cs-parser.jay: Added error CS0134 test.
12492
12493 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
12494
12495         Fix bug #52507
12496         * cs-parser.jay: Added error CS0145 test.
12497
12498 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
12499
12500         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
12501
12502 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
12503         
12504         * expression.cs (StackAlloc.Resolve): The argument may not
12505         be a constant; deal with this case.
12506         
12507 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
12508
12509         * attribute.cs (IndexerName_GetIndexerName): Renamed to
12510         GetIndexerAttributeValue.
12511         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
12512
12513         * class.cs (Indexer.Define): Added error tests for CS0415,
12514         CS0609.
12515
12516 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
12517
12518         * attribute.cs (Attribute.Resolve): Keep field code in sync with
12519         property code.
12520
12521 2004-06-23  Martin Baulig  <martin@ximian.com>
12522
12523         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
12524         neither return nor throw, reset the barrier as well.  Fixes #60457.
12525
12526 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
12527
12528         * class.cs : EventAttributes is now set to None by default.
12529           This fixes bug #60459.
12530
12531 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
12532
12533         Fix bug #60219
12534         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
12535         Don't throw exception but return null (it's sufficient now).
12536
12537 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
12538
12539         * typemanager.cs (GetArgumentTypes): Faster implementation.
12540
12541 2004-06-18  Martin Baulig  <martin@ximian.com>
12542
12543         * attribute.cs (Attribute.Resolve): Check whether we're an
12544         EmptyCast which a Constant child.  Fixes #60333.
12545
12546 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
12547
12548         * statement.cs (EmitCollectionForeach): Account for the fact that
12549         not all valuetypes are in areas which we can take the address of.
12550         For these variables, we store to a temporary variable. Also, make
12551         sure that we dont emit a `callvirt' on a valuetype method.
12552
12553 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
12554
12555         * expression.cs (StackAlloc.DoReSolve): Added test for
12556         negative parameter (CS0247).
12557
12558 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
12559
12560         Fix bug #59792
12561         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
12562
12563 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
12564
12565         Fix bug #59781
12566         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
12567         ulong.
12568
12569 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
12570
12571         Fix bug #58254 & cs1555.cs, cs1556.cs
12572         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
12573
12574 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
12575
12576         * cs-parser.jay: Added error CS1669 test for indexers.
12577
12578 2004-06-11  Martin Baulig  <martin@ximian.com>
12579
12580         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
12581         call this twice: for params and varargs methods.
12582
12583 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12584
12585         * class.cs:
12586         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
12587
12588 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12589
12590         * attribute.cs (Attribute.GetValidTargets): Made public.
12591
12592         * class.cs: 
12593         (AbstractPropertyEventMethod): New class for better code sharing.
12594         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
12595         CS1667 report.
12596         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
12597
12598 2004-06-11  Raja R Harinath  <rharinath@novell.com>
12599
12600         Fix bug #59477.
12601         * ecore.cs (ResolveFlags): Add new 'Intermediate' flag to tell
12602         that the call to Resolve is part of a MemberAccess.
12603         (Expression.Resolve): Use it for SimpleName resolution.
12604         (SimpleName.SimpleNameResolve, SimpleName.DoResolveAllowStatic):
12605         Add 'intermediate' boolean argument.
12606         (SimpleName.DoSimpleNameResolve): Likewise.  Use it to disable an
12607         error message when the SimpleName can be resolved ambiguously
12608         between an expression and a type.
12609         * expression.cs (MemberAccess.IdenticalNameAndTypeName): Make
12610         public.
12611         (MemberAccess.Resolve): Pass 'Intermediate' flag to the Resolve()
12612         call on the left-side.
12613
12614 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12615
12616         * class.cs:
12617         (MethodCore.VerifyClsCompliance): Added test for error CS3000.
12618
12619 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12620
12621         * attribute.cs (Attribute.Emit): Fixed error CS0579 reporting.
12622
12623 2004-06-11  Martin Baulig  <martin@ximian.com>
12624
12625         * expression.cs (Invocation.EmitCall): Use OpCodes.Callvirt for
12626         varargs methods if applicable.
12627
12628 2004-06-11  Martin Baulig  <martin@ximian.com>
12629
12630         * expression.cs (Invocation.EmitCall): Don't use
12631         `method.CallingConvention == CallingConventions.VarArgs' since the
12632         method could also have `CallingConventions.HasThis'.
12633
12634 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
12635
12636         * class.cs (Event.GetSignatureForError): Implemented.
12637         Fixed crash in error test cs3010.cs
12638
12639 2004-06-10  Miguel de Icaza  <miguel@ximian.com>
12640
12641         * cs-tokenizer.cs: Change the way we track __arglist to be
12642         consistent with the other keywords.
12643
12644 2004-06-09  Miguel de Icaza  <miguel@ximian.com>
12645
12646         * codegen.cs: FAQ avoider: turn 1577 into a warning for now until
12647         tomorrow.
12648
12649 2004-06-09  Sebastien Pouliot  <sebastien@ximian.com>
12650
12651         * codegen.cs: Check that all referenced assemblies have a strongname
12652         before strongnaming the compiled assembly. If not report error CS1577.
12653         Fix bug #56563. Patch by Jackson Harper.
12654         * typemanager.cs: Added a method to return all referenced assemblies.
12655         Fix bug #56563. Patch by Jackson Harper.
12656
12657 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
12658
12659         * class.cs:
12660         (Method.ApplyAttributeBuilder): Moved and added conditional
12661         attribute error tests (CS0577, CS0578, CS0243, CS0582, CS0629).
12662
12663         * delegate.cs:
12664         (DelegateCreation.ResolveMethodGroupExpr): Added error CS1618 test.
12665
12666 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
12667
12668         Fixed #59640
12669         * class.cs: (EventField.attribute_targets): Changed default target.
12670
12671 2004-06-08  Martin Baulig  <martin@ximian.com>
12672
12673         * expression.cs (Invocation.EmitCall): Enable varargs methods.
12674
12675 2004-06-08  Martin Baulig  <martin@ximian.com>
12676
12677         * rootcontext.cs (ResolveCore): Added "System.RuntimeArgumentHandle".
12678
12679 2004-06-07  Martin Baulig  <martin@ximian.com>
12680
12681         Added support for varargs methods.
12682
12683         * cs-tokenizer.cs (Token.ARGLIST): New token for the `__arglist'
12684         keyword.
12685
12686         * cs-parser.jay: Added support for `__arglist'.
12687
12688         * decl.cs (MemberCache.AddMethods): Don't ignore varargs methods.
12689
12690         * expression.cs (Argument.AType): Added `ArgList'.
12691         (Invocation): Added support for varargs methods.
12692         (ArglistAccess): New public class.
12693         (Arglist): New public class.
12694
12695         * parameter.cs (Parameter.Modifier): Added `ARGLIST'.
12696
12697         * statement.cs (Block.Flags): Added `HasVarargs'.  We set this on
12698         a method's top-level block if the method has varargs.
12699
12700         * support.cs (ReflectionParameters, InternalParameters): Added
12701         support for varargs methods.    
12702
12703 2004-06-07  Miguel de Icaza  <miguel@ximian.com>
12704
12705         * class.cs: Provide location in indexer error report.
12706
12707         * driver.cs: Use standard names.
12708
12709         * namespace.cs: Catch the use of using after a namespace has been
12710         declared also on using aliases.
12711
12712 2004-06-03  Raja R Harinath  <rharinath@novell.com>
12713
12714         Bug #50820.
12715         * typemanager.cs (closure_private_ok, closure_invocation_type)
12716         (closure_qualifier_type, closure_invocation_assembly)
12717         (FilterWithClosure): Move to ...
12718         (Closure): New internal nested class.
12719         (Closure.CheckValidFamilyAccess): Split out from Closure.Filter.
12720         (MemberLookup, RealMemberLookup): Add new almost_match parameter.
12721         * ecore.cs (almostMatchedMembers): New variable to help report CS1540.
12722         (MemberLookup, MemberLookupFailed): Use it.
12723         * expression.cs (New.DoResolve): Treat the lookup for the
12724         constructor as being qualified by the 'new'ed type.
12725         (Indexers.GetIndexersForTypeOrInterface): Update.
12726
12727 2004-06-03  Marek Safar  <marek.safar@seznam.cz>
12728
12729         * attribute.cs
12730         (GetConditionalAttributeValue): New method. Returns
12731         condition of ConditionalAttribute.
12732         (SearchMulti): New method.  Returns all attributes of type 't'.
12733         Use it when attribute is AllowMultiple = true.
12734         (IsConditionalMethodExcluded): New method.
12735
12736         * class.cs
12737         (Method.IsExcluded): Implemented. Returns true if method has conditional
12738         attribute and the conditions is not defined (method is excluded).
12739         (IMethodData): Extended interface for ConditionalAttribute support.
12740         (PropertyMethod.IsExcluded): Implemented.
12741
12742         * decl.cs
12743         (MemberCore.Flags): Excluded_Undetected, Excluded new caching flags.
12744
12745         * expression.cs
12746         (Invocation.IsMethodExcluded): Checks the ConditionalAttribute
12747         on the method.
12748
12749 2004-06-02 Ben Maurer  <bmaurer@users.sourceforge.net>
12750
12751         * expression.cs (ArrayCreationExpression): Make this just an
12752         `expression'. It can't be a statement, so the code here was
12753         dead.
12754
12755 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
12756
12757         Fixed #59072
12758         * typemanager.cs (GetFullNameSignature): New method for
12759         MethodBase types.
12760
12761 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
12762
12763         Fixed #56452
12764         * class.cs (MemberBase.GetSignatureForError): New virtual method.
12765         Use this method when MethodBuilder is null.
12766         (MethodData.DefineMethodBuilder): Encapsulated code to the new method.
12767         Added test for error CS0626 (MONO reports error for this situation).
12768         (IMethodData.GetSignatureForError): Extended interface.
12769
12770 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
12771
12772         * attribute.cs
12773         (AttributeTester.GetObsoleteAttribute): Returns instance of
12774         ObsoleteAttribute when type is obsolete.
12775
12776         * class.cs
12777         (TypeContainer.VerifyObsoleteAttribute): Override.
12778         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
12779         (MethodCode.VerifyObsoleteAttribute): Override.
12780         (MemberBase.VerifyObsoleteAttribute): Override.
12781
12782         * decl.cs
12783         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
12784         and report proper error.
12785
12786         *delegate.cs
12787         Delegate.VerifyObsoleteAttribute): Override.
12788
12789         * ecore.cs
12790         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
12791         and report proper error.
12792         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
12793
12794         * enum.cs
12795         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
12796         and enum member.
12797
12798         * expression.cs
12799         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
12800         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
12801         Added test for ObsoleteAttribute.
12802
12803         * statement.cs
12804         (Catch): Derived from Statement.
12805
12806 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
12807  
12808         Fixed bug #59071 & cs0160.cs
12809  
12810         * statement.cs (Try.Resolve): Check here whether order of catch
12811         clauses matches their dependencies.
12812
12813 2004-05-31  Miguel de Icaza  <miguel@ximian.com>
12814
12815         * Reverted patch to namespace.cs (Use lookuptypedirect).  This
12816         caused a regression: #59343.  Referencing nested classes from an
12817         assembly stopped working.
12818
12819 2004-05-31  Martin Baulig  <martin@ximian.com>
12820
12821         MCS is now frozen for beta 2.
12822
12823 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
12824
12825         * convert.cs: add a trivial cache for overload operator resolution.
12826
12827 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
12828
12829         * decl.cs: If possible, use lookuptypedirect here. We can only do
12830         this if there is no `.' after the namespace. Avoids using
12831         LookupType, which does lots of slow processing.
12832         (FindNestedType) New method, does what it says :-).
12833         * namespace.cs: use LookupTypeDirect.
12834         * rootcontext.cs: use membercache, if possible.
12835         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
12836
12837 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
12838
12839         * expression.cs:
12840         According to the spec, 
12841
12842         In a member access of the form E.I, if E is a single identifier,
12843         and if the meaning of E as a simple-name (§7.5.2) is a constant,
12844         field, property, localvariable, or parameter with the same type as
12845         the meaning of E as a type-name (§3.8), then both possible
12846         meanings of E are permitted.
12847
12848         We did not check that E as a simple-name had the same type as E as
12849         a type name.
12850
12851         This trivial check gives us 5-7% on bootstrap time.
12852
12853 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
12854
12855         * expression.cs (Invocation.OverloadResolve): Avoid the
12856         use of hashtables and boxing here by allocating on demand.
12857
12858 2004-05-30  Martin Baulig  <martin@ximian.com>
12859
12860         * rootcontext.cs (RootContext.LookupType): Don't cache things if
12861         we're doing a silent lookup.  Don't try to lookup nested types in
12862         TypeManager.object_type (thanks to Ben Maurer).
12863
12864 2004-05-30  Martin Baulig  <martin@ximian.com>
12865
12866         Committing a patch from Ben Maurer.
12867
12868         * rootcontext.cs (RootContext.LookupType): Cache negative results.
12869
12870 2004-05-29  Martin Baulig  <martin@ximian.com>
12871
12872         * class.cs (IMethodData.ShouldIgnore): New method.
12873
12874         * typemanager.cs (TypeManager.MethodFlags): Don't take a
12875         `Location' argument, we don't need it anywhere.  Use
12876         `IMethodData.ShouldIgnore ()' instead of
12877         `MethodData.GetMethodFlags ()'.
12878         (TypeManager.AddMethod): Removed.
12879         (TypeManager.AddMethod2): Renamed to AddMethod.
12880
12881 2004-05-29  Martin Baulig  <martin@ximian.com>
12882
12883         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
12884
12885         * convert.cs (Convert.ImplicitReferenceConversion): If we're
12886         converting from a class type S to an interface type and we already
12887         have an object on the stack, don't box it again.  Fixes #52578.
12888
12889 2004-05-29  Martin Baulig  <martin@ximian.com>
12890
12891         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
12892         Added support for `params' parameters.  Fixes #59267.
12893
12894 2004-05-29  Martin Baulig  <martin@ximian.com>
12895
12896         * literal.cs (NullPointer): Provide a private .ctor which sets
12897         `type' to TypeManager.object_type.  Fixes #59048.
12898
12899 2004-05-29  Martin Baulig  <martin@ximian.com>
12900
12901         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
12902         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
12903
12904         * ecore.cs (EventExpr.instance_expr): Make the field private.
12905
12906 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
12907
12908         Fixed bug #50080 & cs0214-2.cs
12909         * expression.cs (Cast.DoResolve): Check unsafe context here.
12910         
12911         * statement.cs (Resolve.DoResolve): Likewise.
12912
12913 2004-05-26  Martin Baulig  <martin@ximian.com>
12914
12915         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
12916
12917         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
12918         (RootContext.LookupType): Pass down the `silent' flag.
12919
12920 2004-05-25  Martin Baulig  <martin@ximian.com>
12921
12922         * expression.cs
12923         (MethodGroupExpr.IdenticalTypeName): New public property.
12924         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
12925         expression actually refers to a type.
12926
12927 2004-05-25  Martin Baulig  <martin@ximian.com>
12928
12929         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
12930         for #56176 and made it actually work.
12931
12932 2004-05-25  Martin Baulig  <martin@ximian.com>
12933
12934         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
12935         (FieldExpr, PropertyExpr): Override and implement
12936         CacheTemporaries.  Fixes #52279.
12937
12938 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
12939
12940         * location.cs: In the new compiler listing a file twice is a
12941         warning, not an error.
12942
12943 2004-05-24  Martin Baulig  <martin@ximian.com>
12944
12945         * enum.cs (Enum.DefineType): For the `BaseType' to be a
12946         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
12947
12948 2004-05-24  Martin Baulig  <martin@ximian.com>
12949
12950         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
12951         walking the `using' list.  Fixes #53921.
12952
12953 2004-05-24  Martin Baulig  <martin@ximian.com>
12954
12955         * const.cs (Const.LookupConstantValue): Added support for
12956         EmptyCast's; fixes #55251.
12957
12958 2004-05-24  Martin Baulig  <martin@ximian.com>
12959
12960         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
12961         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
12962         which does the CS0135 check.  The reason is that we first need to
12963         check whether the variable actually exists.
12964
12965 2004-05-24  Martin Baulig  <martin@ximian.com>
12966
12967         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
12968         than RootContext.LookupType() to find the explicit interface
12969         type.  Fixes #58584.
12970
12971 2004-05-24  Raja R Harinath  <rharinath@novell.com>
12972
12973         * Makefile: Simplify.  Use executable.make.
12974         * mcs.exe.sources: New file.  List of sources of mcs.exe.
12975
12976 2004-05-24  Anders Carlsson  <andersca@gnome.org>
12977
12978         * decl.cs:
12979         * enum.cs:
12980         Use the invariant culture when doing String.Compare for CLS case
12981         sensitivity.
12982         
12983 2004-05-23  Martin Baulig  <martin@ximian.com>
12984
12985         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
12986         don't have any dots.  Fixes #52622, added cs0246-8.cs.
12987
12988         * namespace.cs (NamespaceEntry.Lookup): Likewise.
12989         
12990 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
12991
12992         * class.cs (MemberBase.Define): Reuse MemberType member for 
12993         resolved type. Other methods can use it too.
12994
12995 2004-05-23  Martin Baulig  <martin@ximian.com>
12996
12997         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
12998         the variable also exists in the current block (otherwise, we need
12999         to report a CS0103).  Fixes #58670.
13000
13001 2004-05-23  Martin Baulig  <martin@ximian.com>
13002
13003         * flowanalysis.cs (Reachability.Reachable): Compute this
13004         on-the-fly rather than storing it as a field.
13005
13006 2004-05-23  Martin Baulig  <martin@ximian.com>
13007
13008         * flowanalysis.cs (Reachability.And): Manually compute the
13009         resulting `barrier' from the reachability.      
13010        
13011 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
13012
13013         Fix bug #57835
13014         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
13015         instance of ObsoleteAttribute when symbol is obsolete.
13016
13017         * class.cs
13018         (IMethodData): Extended interface for ObsoleteAttribute support.
13019
13020 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
13021
13022         * attribute.cs: Fix bug #55970
13023
13024 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
13025
13026         Fix bug #52705
13027         * attribute.cs
13028         (GetObsoleteAttribute): New method. Creates the instance of
13029         ObsoleteAttribute.
13030         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
13031         ObsoleteAttribute when member is obsolete.
13032         (AttributeTester.Report_ObsoleteMessage): Common method for
13033         Obsolete error/warning reporting.
13034
13035         * class.cs
13036         (TypeContainer.base_classs_type): New member for storing parent type.
13037
13038         * decl.cs
13039         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
13040         for this MemberCore.
13041
13042 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
13043
13044         * attribute.cs, const.cs: Fix bug #58590
13045
13046 2004-05-21  Martin Baulig  <martin@ximian.com>
13047
13048         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
13049         out parameters if the end of the method is unreachable.  Fixes
13050         #58098. 
13051
13052 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
13053
13054         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
13055         Hari was right, why extra method.
13056
13057 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
13058
13059         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
13060
13061 2004-05-20  Martin Baulig  <martin@ximian.com>
13062
13063         Merged this back from gmcs to keep the differences to a minumum.
13064
13065         * attribute.cs (Attribute.CheckAttributeType): Take an EmitContext
13066         instead of a Declspace.
13067         (Attribute.ResolveType): Likewise.
13068         (Attributes.Search): Likewise.
13069         (Attributes.Contains): Likewise.
13070         (Attributes.GetClsCompliantAttribute): Likewise.
13071
13072         * class.cs (TypeContainer.VerifyMembers): Added EmitContext
13073         argument.
13074         (MethodData.ApplyAttributes): Take an EmitContext instead of a
13075         DeclSpace.
13076
13077 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
13078
13079         Fix bug #58688 (MCS does not report error when the same attribute
13080         is assigned twice)
13081
13082         * attribute.cs (Attribute.Emit): Distinction between null and default.
13083
13084 2004-05-19  Raja R Harinath  <rharinath@novell.com>
13085
13086         * cs-parser.jay (attribute): Create a GlobalAttribute for the case
13087         of a top-level attribute without an attribute target.
13088         * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
13089         Make non-static.
13090         (Attribute.Conditional_GetConditionName), 
13091         (Attribute.Obsolete_GetObsoleteMessage): Update.
13092         (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
13093         part of ScanForIndexerName.
13094         (Attribute.CanIgnoreInvalidAttribute): New function.
13095         (Attribute.ScanForIndexerName): Move to ...
13096         (Attributes.ScanForIndexerName): ... here.
13097         (Attributes.Attrs): Rename from now-misnamed AttributeSections.
13098         (Attributes.Search): New internal variant that can choose not to
13099         complain if types aren't resolved.  The original signature now
13100         complains.
13101         (Attributes.GetClsCompliantAttribute): Use internal variant, with
13102         complaints suppressed.
13103         (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
13104         only if it not useful.
13105         (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
13106         top-level for attributes that are shared between the assembly
13107         and a top-level class.
13108         * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
13109         * class.cs: Update to reflect changes.
13110         (DefineIndexers): Fuse loops.
13111         * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
13112         a couple more variants of attribute names.
13113
13114 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
13115
13116         Fix bug #52585 (Implemented explicit attribute declaration)
13117
13118         * attribute.cs:
13119         (Attributable.ValidAttributeTargets): New abstract method. It gets
13120         list of valid attribute targets for explicit target declaration.
13121         (Attribute.Target): It holds target itself.
13122         (AttributeSection): Removed.
13123         (Attribute.CheckTargets): New method. It checks whether attribute
13124         target is valid for the current element.
13125
13126         * class.cs:
13127         (EventProperty): New class. For events that are declared like
13128         property (with add and remove accessors).
13129         (EventField): New class. For events that are declared like field.
13130         class.cs
13131
13132         * cs-parser.jay: Implemented explicit attribute target declaration.
13133
13134         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
13135         Override ValidAttributeTargets.
13136
13137         * parameter.cs:
13138         (ReturnParameter): Class for applying custom attributes on 
13139         the return type.
13140         (ParameterAtribute): New class. Class for applying custom
13141         attributes on the parameter type.
13142
13143 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
13144
13145         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
13146         definitions. 
13147
13148         (Method): Allow UNSAFE here.
13149
13150         * modifiers.cs: Support unsafe reporting.
13151
13152 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
13153
13154         * decl.cs: Fix bug #58478.
13155
13156 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
13157
13158         * statement.cs: When checking for unreachable code on an EmptyStatement,
13159         set the location. Fixes bug #58488.
13160
13161 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
13162
13163         * driver.cs: Add -pkg handling.
13164
13165         From Gonzalo: UseShelLExecute=false
13166
13167 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
13168
13169         * attribute.cs:
13170         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
13171         for attribute.
13172         (Attribute.IsClsCompliaceRequired): Moved to base for better
13173         accesibility.
13174         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
13175         when attribute is AttributeUsageAttribute.
13176         (Attribute.GetValidTargets): Simplified.
13177         (Attribute.GetAttributeUsage): New method returns AttributeUsage
13178         attribute for this type.
13179         (Attribute.ApplyAttributes): Method renamed to Emit and make
13180         non-static.
13181         (GlobalAttributeSection): New class for special handling of global
13182         attributes (assembly, module).
13183         (AttributeSection.Emit): New method.
13184
13185         * class.cs: Implemented Attributable abstract methods.
13186         (MethodCore.LabelParameters): Moved to Parameter class.
13187         (Accessor): Is back simple class.
13188         (PropertyMethod): Implemented Attributable abstract class.
13189         (DelegateMethod): Implemented Attributable abstract class.
13190         (Event): New constructor for disctintion between normal Event
13191         and Event with accessors.
13192
13193         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
13194
13195         * codegen.cs, const.cs, decl.cs, delegate.cs:
13196         (CommonAssemblyModulClass): Implemented Attributable abstract class
13197         and simplified.
13198
13199         * enum.cs: Implement IAttributeSupport interface.
13200         (EnumMember): New class for emum members. Implemented Attributable
13201         abstract class
13202
13203         * parameter.cs:
13204         (ParameterBase): Is abstract.
13205         (ReturnParameter): New class for easier [return:] attribute handling.
13206
13207         * typemanager.cs: Removed builder_to_attr.
13208
13209 2004-05-11  Raja R Harinath  <rharinath@novell.com>
13210
13211         Fix bug #57151.
13212         * attribute.cs (Attribute.GetPositionalValue): New function.
13213         * class.cs (TypeContainer.VerifyMembers): New function.
13214         (TypeContainer.Emit): Use it.
13215         (ClassOrStruct): New base class for Class and Struct.
13216         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
13217         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
13218         class.
13219         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
13220         then each non-static field should have a FieldOffset attribute.
13221         Otherwise, none of the fields should have a FieldOffset attribute.
13222         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
13223         and FieldOffset attributes.
13224         * typemanager.cs (TypeManager.struct_layout_attribute_type)
13225         (TypeManager.field_offset_attribute_type): New core types.
13226         (TypeManager.InitCoreTypes): Initialize them.
13227
13228 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
13229
13230         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
13231         Return correct type.
13232         From bug #58270.
13233
13234 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
13235
13236         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
13237         be implicitly converted to ulong.
13238         
13239         * expression.cs: The logic for allowing operator &, | and ^ worked
13240         was wrong, it worked before because we did not report an error in
13241         an else branch.  Fixes 57895.
13242
13243         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
13244         allow volatile fields to be reference types.
13245
13246 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
13247
13248         * driver.cs: Add support for /debug-
13249
13250 2004-05-07  Raja R Harinath  <rharinath@novell.com>
13251
13252         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
13253         Add a 'complain' parameter to silence errors.
13254         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
13255         silently overlooked type-resolutions.
13256         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
13257         to reflect changes.
13258         (Attributes.Search): New function.
13259         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
13260         (Attributes.GetAttributeFullName): Remove hack.
13261         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
13262         Update to reflect changes.
13263         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
13264         Use Attributes.Search instead of nested loops.
13265
13266 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
13267
13268         * decl.cs:
13269         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
13270         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
13271         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
13272
13273         * report.cs: (Report.Warning): Renamed to Warning_T because of
13274         parameter collision.
13275
13276 2004-05-05  Raja R Harinath  <rharinath@novell.com>
13277
13278         * expression.cs (MemberAccess.ResolveMemberAccess):
13279         Exit with non-zero status after Report.Error.
13280         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
13281         Likewise.
13282         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
13283
13284 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
13285
13286         * support.cs: Don't hang when the file is empty.
13287
13288 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
13289
13290         * support.cs: In SeekableStreamReader, compute the preamble size of the
13291           underlying stream. Position changes should take into account that initial
13292           count of bytes.
13293
13294 2004-05-03  Todd Berman  <tberman@sevenl.net>
13295
13296         * driver.cs: remove unused GetSysVersion function.
13297
13298 2004-05-03  Todd Berman  <tberman@sevenl.net>
13299
13300         * driver.cs: Remove the hack from saturday, as well as the hack
13301         from jackson (LoadAssemblyFromGac), also adds the CWD to the
13302         link_paths to get that bit proper.
13303
13304 2004-05-01  Todd Berman  <tberman@sevenl.net>
13305
13306         * driver.cs: Try a LoadFrom before a Load, this checks the current
13307         path. This is currently a bug in mono that is be fixed, however, this
13308         provides a workaround for now. This will be removed when the bug
13309         is fixed.
13310
13311 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
13312
13313         * CryptoConvert.cs: Updated to latest version. Fix issue with 
13314         incomplete key pairs (#57941).
13315
13316 2004-05-01  Todd Berman  <tberman@sevenl.net>
13317
13318         * driver.cs: Remove '.' from path_chars, now System.* loads properly
13319         from the GAC
13320
13321 2004-04-30  Jackson Harper  <jackson@ximian.com>
13322
13323         * codegen.cs: Open keys readonly.
13324         
13325 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
13326
13327         * typemanager.cs: don't report cyclic struct layout when a struct
13328         contains 2 or more fields of the same type. Failed for Pango.AttrShape
13329         which has 2 Pango.Rectangle fields.
13330
13331 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
13332
13333         * expression.cs: Handle IntPtr comparisons with IL code
13334         rather than a method call.
13335
13336 2004-04-29  Martin Baulig  <martin@ximian.com>
13337
13338         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
13339         the list of PropertyInfo's in class hierarchy and find the
13340         accessor.  Fixes #56013.
13341
13342 2004-04-29  Martin Baulig  <martin@ximian.com>
13343
13344         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
13345
13346 2004-04-29  Martin Baulig  <martin@ximian.com>
13347
13348         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
13349
13350         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
13351
13352 2004-04-29  Martin Baulig  <martin@ximian.com>
13353
13354         * class.cs (ConstructorInitializer.Resolve): Check whether the
13355         parent .ctor is accessible.  Fixes #52146.
13356
13357 2004-04-29  Martin Baulig  <martin@ximian.com>
13358
13359         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
13360
13361         * statement.cs (Using.EmitLocalVariableDecls): Use
13362         TypeManager.idisposable_type, not typeof (IDisposable).
13363         (Foreach.EmitCollectionForeach): Added support for valuetypes.
13364
13365 2004-04-29  Martin Baulig  <martin@ximian.com>
13366
13367         * class.cs (Event.Define): Don't emit the field and don't set
13368         RTSpecialName and SpecialName for events on interfaces.  Fixes
13369         #57703. 
13370
13371 2004-04-29  Raja R Harinath  <rharinath@novell.com>
13372
13373         Refactor Attribute.ApplyAttributes.
13374         * attribute.cs (Attributable): New base class for objects that can
13375         have Attributes applied on them.
13376         (Attribute): Make AttributeUsage fields public.
13377         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
13378         (Attribute.IsInternalCall): New property.
13379         (Attribute.UsageAttr): Convert to a public read-only property.
13380         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
13381         (Attribute.ResolveType, Attribute.Resolve)
13382         (Attribute.ScanForIndexerName): Update to reflect changes.
13383         (Attribute.CheckAttributeTarget): Re-format.
13384         (Attribute.ApplyAttributes): Refactor, to various
13385         Attributable.ApplyAttributeBuilder methods.
13386         * decl.cs (MemberCore): Make Attributable.
13387         * class.cs (Accessor): Make Attributable.
13388         (MethodData.ApplyAttributes): Use proper attribute types, not
13389         attribute names.
13390         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
13391         (TypeContainer.ApplyAttributeBuilder)
13392         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
13393         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
13394         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
13395         (Operator.ApplyAttributeBuilder): New factored-out methods.
13396         * const.cs (Const.ApplyAttributeBuilder): Likewise.
13397         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
13398         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
13399         * parameter.cs (ParameterBase): New Attributable base class
13400         that can also represent Return types.
13401         (Parameter): Update to the changes.
13402
13403 2004-04-29  Jackson Harper  <jackson@ximian.com>
13404
13405         * driver.cs: Prefer the corlib system version when looking for
13406         assemblies in the GAC. This is still a hack, but its a better hack
13407         now.
13408         
13409 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
13410
13411         * decl.cs, enum.cs: Improved error 3005 reporting.
13412   
13413         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
13414         (related_symbols): New private member for list of symbols
13415         related to reported error/warning.
13416         
13417         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
13418
13419 2004-04-29  Martin Baulig  <martin@ximian.com>
13420
13421         * ecore.cs (Expression.Constantify): If we're an enum and
13422         TypeManager.TypeToCoreType() doesn't give us another type, use
13423         t.UnderlyingSystemType.  Fixes #56178.  
13424
13425 2004-04-29  Martin Baulig  <martin@ximian.com>
13426
13427         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
13428         interfaces and for each interface, only add members directly
13429         declared in that interface.  Fixes #53255.
13430
13431 2004-04-28  Martin Baulig  <martin@ximian.com>
13432
13433         * expression.cs (ConditionalLogicalOperator): Use a temporary
13434         variable for `left' to avoid that we evaluate it more than once;
13435         bug #52588.
13436
13437 2004-04-28  Martin Baulig  <martin@ximian.com>
13438
13439         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
13440         `void[]' (CS1547).
13441
13442 2004-04-28  Martin Baulig  <martin@ximian.com>
13443
13444         * statement.cs (LocalInfo.Resolve): Check whether the type is not
13445         void (CS1547).
13446
13447         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
13448         whether the type is not void (CS1547).
13449
13450 2004-04-28  Martin Baulig  <martin@ximian.com>
13451
13452         * expression.cs (Unary.DoResolveLValue): Override this and report
13453         CS0131 for anything but Operator.Indirection.
13454
13455 2004-04-28  Martin Baulig  <martin@ximian.com>
13456
13457         Committing a patch from Ben Maurer; see bug #50820.
13458
13459         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
13460         check for classes.
13461
13462         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
13463         classes.        
13464
13465 2004-04-28  Martin Baulig  <martin@ximian.com>
13466
13467         Committing a patch from Ben Maurer; see bug #50820.
13468
13469         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
13470         check for classes.
13471
13472         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
13473         classes.        
13474
13475 2004-04-28  Martin Baulig  <martin@ximian.com>
13476
13477         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
13478         (Block.AddLabel): Call DoLookupLabel() to only search in the
13479         current block.
13480
13481 2004-04-28  Martin Baulig  <martin@ximian.com>
13482
13483         * cfold.cs (ConstantFold.BinaryFold): Added special support for
13484         comparing StringConstants and NullLiterals in Equality and Inequality.
13485
13486 2004-04-28  Jackson Harper  <jackson@ximian.com>
13487
13488         * driver.cs: Attempt to load referenced assemblies from the
13489         GAC. This is the quick and dirty version of this method that
13490         doesnt take into account versions and just takes the first
13491         canidate found. Will be good enough for now as we will not have more
13492         then one version installed into the GAC until I update this method.
13493
13494 2004-04-28  Martin Baulig  <martin@ximian.com>
13495
13496         * typemanager.cs (TypeManager.CheckStructCycles): New public
13497         static method to check for cycles in the struct layout.
13498
13499         * rootcontext.cs (RootContext.PopulateTypes): Call
13500         TypeManager.CheckStructCycles() for each TypeContainer.
13501         [Note: We only need to visit each type once.]
13502
13503 2004-04-28  Martin Baulig  <martin@ximian.com>
13504
13505         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
13506
13507         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
13508         success and added `out object value'.  Use a `bool resolved' field
13509         to check whether we've already been called rather than
13510         `ConstantValue != null' since this breaks for NullLiterals.
13511
13512 2004-04-28  Raja R Harinath  <rharinath@novell.com>
13513
13514         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
13515         setting of this flag, since the 'set' method may be non-public.
13516
13517 2004-04-28  Raja R Harinath  <rharinath@novell.com>
13518
13519         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
13520         check on current_vector.Block.
13521
13522 2004-04-27  Martin Baulig  <martin@ximian.com>
13523
13524         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
13525         a field initializer.  Fixes #56459.
13526
13527 2004-04-27  Martin Baulig  <martin@ximian.com>
13528
13529         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
13530         we're not attempting to use an indexer.  Fixes #52154.
13531
13532 2004-04-27  Martin Baulig  <martin@ximian.com>
13533
13534         * statement.cs (Return): Don't create a return label if we don't
13535         need it; reverts my change from January 20th.  Thanks to Ben
13536         Maurer for this.
13537
13538 2004-04-27  Martin Baulig  <martin@ximian.com>
13539
13540         According to the spec, `goto' can only leave a nested scope, but
13541         never enter it.
13542
13543         * statement.cs (Block.LookupLabel): Only lookup in the current
13544         block, don't recurse into parent or child blocks.
13545         (Block.AddLabel): Check in parent and child blocks, report
13546         CS0140/CS0158 if we find a duplicate.
13547         (Block): Removed this indexer for label lookups.
13548         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
13549         this already does the error reporting for us.
13550
13551         * flowanalysis.cs
13552         (FlowBranching.UsageVector.Block): New public variable; may be null.
13553         (FlowBranching.CreateSibling): Added `Block' argument.
13554         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
13555         label for the target of a `goto' and check whether we're not
13556         leaving a `finally'.
13557
13558 2004-04-27  Martin Baulig  <martin@ximian.com>
13559
13560         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
13561         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
13562         just for returns).
13563
13564 2004-04-27  Martin Baulig  <martin@ximian.com>
13565
13566         * statement.cs (Block.AddLabel): Also check for implicit blocks
13567         and added a CS0158 check.
13568
13569 2004-04-27  Martin Baulig  <martin@ximian.com>
13570
13571         * flowanalysis.cs (FlowBranchingLoop): New class.
13572         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
13573         UsageVector's instead of an ArrayList.
13574         (FlowBranching.Label): Likewise.
13575         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
13576         (FlowBranching.AddBreakVector): New method.
13577
13578 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
13579
13580         * attribute.cs: Small regression fix: only convert the type if we
13581         the type is different, fixes System.Drawing build.
13582
13583 2004-04-27  Martin Baulig  <martin@ximian.com>
13584
13585         * attribute.cs (Attribute.Resolve): If we have a constant value
13586         for a named field or property, implicity convert it to the correct
13587         type.
13588
13589 2004-04-27  Raja R Harinath  <rharinath@novell.com>
13590
13591         * statement.cs (Block.Block): Implicit blocks share
13592         'child_variable_names' fields with parent blocks.
13593         (Block.AddChildVariableNames): Remove.
13594         (Block.AddVariable): Mark variable as "used by a child block" in
13595         every surrounding block.
13596         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
13597         been used in a child block, complain about violation of "Invariant
13598         meaning in blocks" rule.
13599         * cs-parser.jay (declare_local_variables): Don't use
13600         AddChildVariableNames.
13601         (foreach_statement): Don't create an implicit block: 'foreach'
13602         introduces a scope.
13603
13604 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
13605
13606         * convert.cs (ImplicitNumericConversion): 0 is also positive when
13607         converting from 0L to ulong.  Fixes 57522.
13608
13609 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
13610
13611         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
13612         derived class hides via 'new' keyword field from base class (test-242.cs).
13613         TODO: Handle this in the more general way.
13614         
13615         * class.cs (CheckBase): Ditto.
13616
13617 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
13618
13619         * decl.cs (caching_flags): New member for storing cached values
13620         as bit flags.
13621         (MemberCore.Flags): New enum where bit flags for caching_flags
13622         are defined.
13623         (MemberCore.cls_compliance): Moved to caching_flags.
13624         (DeclSpace.Created): Moved to caching_flags.
13625
13626         * class.cs: Use caching_flags instead of DeclSpace.Created
13627         
13628 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
13629
13630         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
13631         if we are only a derived class, not a nested class.
13632
13633         * typemanager.cs: Same as above, but do this at the MemberLookup
13634         level (used by field and methods, properties are handled in
13635         PropertyExpr).   Allow for the qualified access if we are a nested
13636         method. 
13637
13638 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
13639
13640         * class.cs: Refactoring.
13641         (IMethodData): New inteface; Holds links to parent members
13642         to avoid member duplication (reduced memory allocation).
13643         (Method): Implemented IMethodData interface.
13644         (PropertyBase): New inner classes for get/set methods.
13645         (PropertyBase.PropertyMethod): Implemented IMethodData interface
13646         (Event): New inner classes for add/remove methods.
13647         (Event.DelegateMethod): Implemented IMethodData interface.
13648
13649         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
13650         EmitContext (related to class.cs refactoring).
13651
13652 2004-04-21  Raja R Harinath  <rharinath@novell.com>
13653
13654         * delegate.cs (Delegate.VerifyApplicability): If the number of
13655         arguments are the same as the number of parameters, first try to
13656         verify applicability ignoring  any 'params' modifier on the last
13657         parameter.
13658         Fixes #56442.
13659
13660 2004-04-16  Raja R Harinath  <rharinath@novell.com>
13661
13662         * class.cs (TypeContainer.AddIndexer): Use
13663         'ExplicitInterfaceName' to determine if interface name was
13664         explicitly specified.  'InterfaceType' is not initialized at this time.
13665         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
13666         Indexers array is already in the required order.  Initialize
13667         'IndexerName' only if there are normal indexers.
13668         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
13669         (TypeContainer.Emit): Emit DefaultMember attribute only if
13670         IndexerName is initialized.
13671         Fixes #56300.
13672
13673 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
13674
13675         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
13676         Fixes #57007
13677
13678 2004-04-15  Raja R Harinath  <rharinath@novell.com>
13679
13680         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
13681         attributes.
13682         Fix for #56456.
13683
13684         * attribute.cs (Attribute.Resolve): Check for duplicate named
13685         attributes.
13686         Fix for #56463.
13687
13688 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
13689
13690         * iterators.cs (MarkYield): track whether we are in an exception,
13691         and generate code accordingly.  Use a temporary value to store the
13692         result for our state.
13693
13694         I had ignored a bit the interaction of try/catch with iterators
13695         since their behavior was not entirely obvious, but now it is
13696         possible to verify that our behavior is the same as MS .NET 2.0
13697
13698         Fixes 54814
13699
13700 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
13701
13702         * iterators.cs: Avoid creating temporaries if there is no work to
13703         do. 
13704
13705         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
13706         Enumerations, use TypeManager.EnumToUnderlying and call
13707         recursively. 
13708
13709         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
13710         bug #57013
13711
13712         (This.Emit): Use EmitContext.EmitThis to emit our
13713         instance variable.
13714
13715         (This.EmitAssign): Ditto.
13716
13717         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
13718         codepaths, we will move all the functionality into
13719         Mono.CSharp.This 
13720
13721         (FieldExpr.EmitAssign): Ditto.
13722
13723         This fixes several hidden bugs that I uncovered while doing a code
13724         review of this today.
13725
13726         * codegen.cs (EmitThis): reworked so the semantics are more clear
13727         and also support value types "this" instances.
13728
13729         * iterators.cs: Changed so that for iterators in value types, we
13730         do not pass the value type as a parameter.  
13731
13732         Initialization of the enumerator helpers is now done in the caller
13733         instead of passing the parameters to the constructors and having
13734         the constructor set the fields.
13735
13736         The fields have now `assembly' visibility instead of private.
13737
13738 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
13739
13740         * expression.cs (Argument.Resolve): Check if fields passed as ref
13741         or out are contained in a MarshalByRefObject.
13742
13743         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
13744         another compiler type.
13745
13746 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
13747
13748         * class.cs (Indexer.Define): use the new name checking method.
13749         Also, return false on an error.
13750         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
13751         (is_identifier_[start/part]_character): make static.
13752
13753 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
13754
13755         * expression.cs (Binary.ResolveOperator): Do no append strings
13756         twice: since we can be invoked more than once (array evaluation)
13757         on the same concatenation, take care of this here.  Based on a fix
13758         from Ben (bug #56454)
13759
13760 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
13761
13762         * codegen.cs: Fix another case where CS1548 must be reported (when 
13763         delay-sign isn't specified and no private is available #56564). Fix
13764         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
13765         error when MCS is used on the MS runtime and we need to delay-sign 
13766         (which seems unsupported by AssemblyBuilder - see #56621).
13767
13768 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
13769
13770         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
13771         (TypeManager.ComputeNamespaces): Faster implementation for
13772         Microsoft runtime.
13773
13774         * compiler.csproj: Updated AssemblyName to mcs.
13775
13776 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
13777
13778         * rootcontext.cs: Add new types to the boot resolution.
13779
13780         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
13781         MulticastDelegate is not allowed.
13782
13783         * typemanager.cs: Add new types to lookup: System.TypedReference
13784         and ArgIterator.
13785
13786         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
13787         check for TypedReference or ArgIterator, they are not allowed. 
13788
13789         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
13790         makes us properly catch 1510 in some conditions (see bug 56016 for
13791         details). 
13792
13793 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
13794
13795         * CryptoConvert.cs: update from corlib version
13796         with endian fixes.
13797
13798 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
13799
13800         * class.cs (Indexer.Define): Check indexername declaration
13801
13802 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
13803
13804         * attribute.cs (IsClsCompliant): Fixed problem with handling
13805         all three states (compliant, not-compliant, undetected).
13806
13807 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
13808
13809         * attribute.cs (Attribute): Location is now public.
13810         (Resolve): Store resolved arguments (pos_values) in attribute class.
13811         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
13812         (GetClsCompliantAttributeValue): New method that gets
13813         CLSCompliantAttribute value.
13814         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
13815         if exists else null.
13816         (AttributeTester): New class for CLS-Compliant verification routines.
13817
13818         * class.cs (Emit): Add CLS-Compliant verification.
13819         (Method.GetSignatureForError): Implemented.
13820         (Constructor.GetSignatureForError): Implemented
13821         (Constructor.HasCompliantArgs): Returns if constructor has
13822         CLS-Compliant arguments.
13823         (Constructor.Emit): Override.
13824         (Construcor.IsIdentifierClsCompliant): New method; For constructors
13825         is needed to test only parameters.
13826         (FieldBase.GetSignatureForError): Implemented.
13827         (TypeContainer): New member for storing base interfaces.
13828         (TypeContainer.FindMembers): Search in base interfaces too.
13829
13830         * codegen.cs (GetClsComplianceAttribute): New method that gets
13831         assembly or module CLSCompliantAttribute value.
13832         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
13833         for assembly.
13834         (ModuleClass.Emit): Add error 3012 test.
13835
13836         * const.cs (Emit): Override and call base for CLS-Compliant tests.
13837
13838         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
13839         state for all decl types.
13840         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
13841         if CLS-Compliant tests are required.
13842         (IsClsCompliaceRequired): New method. Analyze whether code
13843         must be CLS-Compliant.
13844         (IsExposedFromAssembly): New method. Returns true when MemberCore
13845         is exposed from assembly.
13846         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
13847         value or gets cached value.
13848         (HasClsCompliantAttribute): New method. Returns true if MemberCore
13849         is explicitly marked with CLSCompliantAttribute.
13850         (IsIdentifierClsCompliant): New abstract method. This method is
13851         used to testing error 3005.
13852         (IsIdentifierAndParamClsCompliant): New method. Common helper method
13853         for identifier and parameters CLS-Compliant testing.
13854         (VerifyClsCompliance): New method. The main virtual method for
13855         CLS-Compliant verifications.
13856         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
13857         null. I don't know why is null (too many public members !).
13858         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
13859         and get value of first CLSCompliantAttribute that found.
13860
13861         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
13862         (VerifyClsCompliance): Override and add extra tests.
13863
13864         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
13865         clscheck- disable CLS-Compliant verification event if assembly is has
13866         CLSCompliantAttribute(true).
13867
13868         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
13869         ApllyAttribute is now called in emit section as in the other cases.
13870         Possible future Emit integration.
13871         (IsIdentifierClsCompliant): New override.
13872         (VerifyClsCompliance): New override.
13873         (GetEnumeratorName): Returns full enum name.
13874
13875         * parameter.cs (GetSignatureForError): Implemented.
13876
13877         * report.cs (WarningData): New struct for Warning message information.
13878         (LocationOfPreviousError): New method.
13879         (Warning): New method. Reports warning based on the warning table.
13880         (Error_T): New method. Reports error based on the error table.
13881
13882         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
13883         verifications are done here.
13884
13885         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
13886
13887         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
13888         CLSCompliantAttribute.
13889         (all_imported_types): New member holds all imported types from other
13890         assemblies.
13891         (LoadAllImportedTypes): New method fills static table with exported types
13892         from all referenced assemblies.
13893         (Modules): New property returns all assembly modules.
13894
13895 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
13896
13897         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
13898         throwing a parser error.
13899
13900         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
13901         which removes the hardcoded get_/set_ prefixes for properties, as
13902         IL allows for the properties to be named something else.  
13903
13904         Bug #56013
13905
13906         * expression.cs: Do not override operand before we know if it is
13907         non-null.  Fix 56207
13908
13909 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
13910
13911         * typemanager.cs: support for pinned variables.
13912
13913 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
13914
13915         * decl.cs, typemanager.cs: Avoid using an arraylist
13916         as a buffer if there is only one result set.
13917
13918 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
13919
13920         * expression.cs: Make sure you cant call a static method
13921         with an instance expression, bug #56174.
13922
13923 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
13924
13925         * class.cs (IsDuplicateImplementation): Improve error reporting to
13926         flag 663 (method only differs in parameter modifier).
13927
13928         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
13929         in preprocessor directives.
13930
13931         * location.cs (LookupFile): Allow for the empty path.
13932
13933         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
13934         better approach for some of that patch, but its failing with the
13935         CharSet enumeration.  For now try/catch will do.
13936
13937         * typemanager.cs: Do not crash if a struct does not have fields.
13938         Fixes 56150.
13939
13940 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
13941
13942         * expression.cs: cs0213, cant fix a fixed expression.
13943         fixes 50231.
13944
13945 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
13946
13947         * cs-parser.jay: detect invalid embeded statements gracefully.
13948         bug #51113.
13949
13950 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
13951
13952         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
13953         As a regex:
13954         s/
13955         the invocation type may not be a subclass of the tye of the item/
13956         The type of the item must be a subclass of the invocation item.
13957         /g
13958
13959         Fixes bug #50820.
13960
13961 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
13962
13963         * attribute.cs: Added methods to get a string and a bool from an
13964         attribute. Required to information from AssemblyKeyFileAttribute,
13965         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
13966         * codegen.cs: Modified AssemblyName creation to include support for
13967         strongnames. Catch additional exceptions to report them as CS1548.
13968         * compiler.csproj: Updated include CryptoConvert.cs.
13969         * compiler.csproj.user: Removed file - user specific configuration.
13970         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
13971         Mono.Security assembly. The original class is maintained and tested in
13972         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
13973         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
13974         like CSC 8.0 (C# v2) supports.
13975         * Makefile: Added CryptoConvert.cs to mcs sources.
13976         * rootcontext.cs: Added new options for strongnames.
13977
13978 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
13979
13980         * driver.cs: For --expect-error, report error code `2'
13981         if the program compiled with no errors, error code `1' if
13982         it compiled with an error other than the one expected.
13983
13984 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
13985
13986         * compiler.csproj: Updated for Visual Studio .NET 2003.
13987         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
13988         * compiler.sln: Updated for Visual Studio .NET 2003.
13989
13990 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
13991
13992         * expression.cs: Fix bug #47234. We basically need to apply the
13993         rule that we prefer the conversion of null to a reference type
13994         when faced with a conversion to 'object' (csc behaviour).
13995
13996 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
13997
13998         * statement.cs: Shorter form for foreach, eliminates
13999         a local variable. r=Martin.
14000
14001 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14002
14003         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
14004         checks if we can use brtrue/brfalse to test for 0.
14005         * expression.cs: use the above in the test for using brtrue/brfalse.
14006         cleanup code a bit.
14007
14008 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14009
14010         * expression.cs: Rewrite string concat stuff. Benefits:
14011
14012         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
14013         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
14014         rather than a concat chain.
14015
14016         * typemanager.cs: Add lookups for more concat overloads.
14017
14018 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14019
14020         * expression.cs: Emit shorter il code for array init.
14021
14022         newarr
14023         dup
14024         // set 1
14025
14026         // set 2
14027
14028         newarr
14029         stloc.x
14030
14031         ldloc.x
14032         // set 1
14033
14034         ldloc.x
14035         // set 2
14036
14037 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
14038
14039         * statement.cs: Before, two switch blocks would be merged if the
14040         total size of the blocks (end_item - begin_item + 1) was less than
14041         two times the combined sizes of the blocks.
14042
14043         Now, it will only merge if after the merge at least half of the
14044         slots are filled.
14045
14046         fixes 55885.
14047
14048 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
14049
14050         * class.cs : csc build fix for GetMethods(). See bug #52503.
14051
14052 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
14053
14054         * expression.cs: Make sure fp comparisons work with NaN.
14055         This fixes bug #54303. Mig approved this patch a long
14056         time ago, but we were not able to test b/c the runtime
14057         had a related bug.
14058
14059 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
14060
14061         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
14062
14063 2004-03-19  Martin Baulig  <martin@ximian.com>
14064
14065         * class.cs (MemberCore.IsDuplicateImplementation): Report the
14066         error here and not in our caller.
14067
14068 2004-03-19  Martin Baulig  <martin@ximian.com>
14069
14070         * interface.cs: Completely killed this file.
14071         (Interface): We're now a TypeContainer and live in class.cs.
14072
14073         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
14074         argument; we're now also called for interfaces.
14075         (TypeContainer.DefineMembers): Allow this method being called
14076         multiple times.
14077         (TypeContainer.GetMethods): New public method; formerly known as
14078         Interface.GetMethod().  This is used by PendingImplementation.
14079         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
14080         it's now private and non-static.
14081         (Interface): Moved this here; it's now implemented similar to
14082         Class and Struct.
14083         (Method, Property, Event, Indexer): Added `bool is_interface'
14084         argument to their .ctor's.
14085         (MemberBase.IsInterface): New public field.
14086
14087         * cs-parser.jay: Create normal Method, Property, Event, Indexer
14088         instances instead of InterfaceMethod, InterfaceProperty, etc.
14089         (opt_interface_base): Removed; we now use `opt_class_base' instead.
14090         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
14091
14092 2004-03-19  Martin Baulig  <martin@ximian.com>
14093
14094         * class.cs (MethodCore.IsDuplicateImplementation): New private
14095         method which does the CS0111 checking.
14096         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
14097         Use IsDuplicateImplementation().
14098
14099 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
14100
14101         * decl.cs (FindMemberToOverride): New method to find the correct
14102         method or property to override in the base class.
14103         * class.cs
14104             - Make Method/Property use the above method to find the
14105               version in the base class.
14106             - Remove the InheritableMemberSignatureCompare as it is now
14107               dead code.
14108
14109         This patch makes large code bases much faster to compile, as it is
14110         O(n) rather than O(n^2) to do this validation.
14111
14112         Also, it fixes bug 52458 which is that nested classes are not
14113         taken into account when finding the base class member.
14114
14115         Reviewed/Approved by Martin.
14116
14117 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
14118
14119         * interface.cs: In all interface classes removed redundant
14120         member initialization.
14121
14122 2004-03-16  Martin Baulig  <martin@ximian.com>
14123
14124         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
14125
14126 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
14127
14128         * decl.cs (DefineTypeAndParents): New helper method to define a
14129         type's containers before the type itself is defined;  This is a
14130         bug exposed by the recent changes to Windows.Forms when an
14131         implemented interface was defined inside a class that had not been
14132         built yet.   
14133
14134         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
14135
14136         (Check): Loop correctly to report errors modifiers
14137         (UNSAFE was not in the loop, since it was the same as TOP).
14138
14139         * interface.cs: Every interface member now takes a ModFlags,
14140         instead of a "is_new" bool, which we set on the base MemberCore. 
14141
14142         Every place where we called "UnsafeOk" in the interface, now we
14143         call the proper member (InterfaceMethod.UnsafeOK) instead to get
14144         the unsafe settings from the member declaration instead of the
14145         container interface. 
14146
14147         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
14148
14149         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
14150         `set_indexer_name' to the pending bits (one per type).
14151
14152         We fixed a bug today that was picking the wrong method to
14153         override, since for properties the existing InterfaceMethod code
14154         basically ignored the method name.  Now we make sure that the
14155         method name is one of the valid indexer names.
14156
14157 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
14158  
14159         * support.cs (SeekableStreamReader): Keep track of stream byte
14160         positions and don't mix them with character offsets to the buffer.
14161
14162         Patch from Gustavo Giráldez
14163
14164 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
14165
14166         * interface.cs (InterfaceSetGetBase): Removed double member
14167         initialization, base class does it as well.
14168
14169 2004-03-13  Martin Baulig  <martin@ximian.com>
14170
14171         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
14172         when compiling corlib.
14173
14174 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
14175
14176         * convert.cs (ExplicitConversion): We were reporting an error on
14177         certain conversions (object_type source to a value type, when the
14178         expression was `null') before we had a chance to pass it through
14179         the user defined conversions.
14180
14181         * driver.cs: Replace / and \ in resource specifications to dots.
14182         Fixes 50752
14183
14184         * class.cs: Add check for duplicate operators.  Fixes 52477
14185
14186 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
14187
14188         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
14189         that are in the middle of the statements, not only at the end.
14190         Fixes #54987
14191
14192         * class.cs (TypeContainer.AddField): No longer set the
14193         `HaveStaticConstructor' flag, now we call it
14194         `UserDefineStaticConstructor' to diferentiate the slightly
14195         semantic difference.
14196
14197         The situation is that we were not adding BeforeFieldInit (from
14198         Modifiers.TypeAttr) to classes that could have it.
14199         BeforeFieldInit should be set to classes that have no static
14200         constructor. 
14201
14202         See:
14203
14204         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
14205
14206         And most importantly Zoltan's comment:
14207
14208         http://bugzilla.ximian.com/show_bug.cgi?id=44229
14209
14210         "I think beforefieldinit means 'it's ok to initialize the type sometime 
14211          before its static fields are used', i.e. initialization does not need
14212          to be triggered by the first access to the type. Setting this flag
14213          helps the JIT to compile better code, since it can run the static
14214          constructor at JIT time, and does not need to generate code to call it
14215          (possibly lots of times) at runtime. Unfortunately, mcs does not set
14216          this flag for lots of classes like String. 
14217          
14218          csc sets this flag if the type does not have an explicit static 
14219          constructor. The reasoning seems to be that if there are only static
14220          initalizers for a type, and no static constructor, then the programmer
14221          does not care when this initialization happens, so beforefieldinit
14222          can be used.
14223          
14224          This bug prevents the AOT compiler from being usable, since it 
14225          generates so many calls to mono_runtime_class_init that the AOT code
14226          is much slower than the JITted code. The JITted code is faster, 
14227          because it does not generate these calls if the vtable is type is
14228          already initialized, which is true in the majority of cases. But the
14229          AOT compiler can't do this."
14230
14231 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
14232
14233         * class.cs (MethodData.Emit): Refactor the code so symbolic
14234         information is generated for destructors;  For some reasons we
14235         were taking a code path that did not generate symbolic information
14236         before. 
14237
14238 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
14239
14240         * class.cs: Create a Constructor.CheckBase method that
14241         takes care of all validation type code. The method
14242         contains some code that was moved from Define.
14243
14244         It also includes new code that checks for duplicate ctors.
14245         This fixes bug #55148.
14246
14247 2004-03-09  Joshua Tauberer <tauberer@for.net>
14248
14249         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
14250         a { ... }-style array creation invokes EmitStaticInitializers
14251         which is not good for reference-type arrays.  String, decimal
14252         and now null constants (NullCast) are not counted toward
14253         static initializers.
14254
14255 2004-03-05  Martin Baulig  <martin@ximian.com>
14256
14257         * location.cs (SourceFile.HasLineDirective): New public field;
14258         specifies whether the file contains or is referenced by a "#line"
14259         directive.
14260         (Location.DefineSymbolDocuments): Ignore source files which
14261         either contain or are referenced by a "#line" directive.        
14262
14263 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
14264
14265         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
14266         direct access to our parent, so check the method inline there.
14267
14268 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
14269
14270         * expression.cs (Invocation.EmitCall): Miguel's last commit
14271         caused a regression. If you had:
14272
14273             T t = null;
14274             t.Foo ();
14275
14276         In Foo the implict this would be null.
14277
14278 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
14279
14280         * expression.cs (Invocation.EmitCall): If the method is not
14281         virtual, do not emit a CallVirt to it, use Call.
14282
14283         * typemanager.cs (GetFullNameSignature): Improve the method to
14284         cope with ".ctor" and replace it with the type name.
14285
14286         * class.cs (ConstructorInitializer.Resolve): Now the method takes
14287         as an argument the ConstructorBuilder where it is being defined,
14288         to catch the recursive constructor invocations.
14289
14290 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
14291
14292         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
14293         routines to check if a type is an enumerable/enumerator allow
14294         classes that implement the IEnumerable or IEnumerator interfaces.
14295
14296         * class.cs (Property, Operator): Implement IIteratorContainer, and
14297         implement SetYields.
14298
14299         (Property.Define): Do the block swapping for get_methods in the
14300         context of iterators.   We need to check if Properties also
14301         include indexers or not.
14302
14303         (Operator): Assign the Block before invoking the
14304         OperatorMethod.Define, so we can trigger the Iterator code
14305         replacement. 
14306
14307         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
14308         Property and Operator classes are not created when we parse the
14309         declarator but until we have the block completed, so we use a
14310         singleton SimpleIteratorContainer.Simple to flag whether the
14311         SetYields has been invoked.
14312
14313         We propagate this setting then to the Property or the Operator to
14314         allow the `yield' to function.
14315
14316 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
14317
14318         * codegen.cs: Implemented attribute support for modules.
14319         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
14320         Assembly/Module functionality.
14321
14322         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
14323         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
14324         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
14325
14326 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
14327
14328         * interface.cs (FindMembers): The operation is performed on all base
14329         interfaces and not only on the first. It is required for future CLS Compliance patch.
14330
14331 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
14332
14333         * statement.cs, codegen.cs:
14334         This patch deals with patterns such as:
14335
14336         public class List : IEnumerable {
14337
14338                 public MyEnumerator GetEnumerator () {
14339                         return new MyEnumerator(this);
14340                 }
14341
14342                 IEnumerator IEnumerable.GetEnumerator () {
14343                         ...
14344                 }
14345                 
14346                 public struct MyEnumerator : IEnumerator {
14347                         ...
14348                 }
14349         }
14350
14351         Before, there were a few things we did wrong:
14352         1) we would emit callvirt on a struct, which is illegal
14353         2) we emited ldarg when we needed to emit ldarga
14354         3) we would mistakenly call the interface methods on an enumerator
14355         type that derived from IEnumerator and was in another assembly. For example:
14356
14357         public class MyEnumerator : IEnumerator
14358
14359         Would have the interface methods called, even if there were public impls of the
14360         method. In a struct, this lead to invalid IL code.
14361
14362 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
14363
14364         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
14365           renamed to Emit.
14366
14367         * delegate.cs (Define): Fixed crash when delegate type is undefined.
14368
14369 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
14370
14371         * cs-parser.jay: Fix small regression: we were not testing V2
14372         compiler features correctly.
14373
14374         * interface.cs: If the emit context is null, then create one
14375
14376 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
14377
14378         * decl.cs (GetSignatureForError): New virtual method to get full name
14379           for error messages.
14380
14381         * attribute.cs (IAttributeSupport): New interface for attribute setting.
14382           Now it is possible to rewrite ApplyAttributes method to be less if/else.
14383
14384         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
14385           Duplicated members and code in these classes has been removed.
14386           Better encapsulation in these classes.
14387
14388 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
14389
14390         * assign.cs (Assign.DoResolve): When dealing with compound
14391         assignments, there is a new rule in ECMA C# 2.4 (might have been
14392         there before, but it is documented here) that states that in:
14393
14394         a op= b;
14395
14396         If b is of type int, and the `op' is a shift-operator, then the
14397         above is evaluated as:
14398
14399         a = (int) a op b 
14400
14401         * expression.cs (Binary.ResolveOperator): Instead of testing for
14402         int/uint/long/ulong, try to implicitly convert to any of those
14403         types and use that in pointer arithmetic.
14404
14405         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
14406         method to print information for from the type, not from the
14407         null-method we were given.
14408
14409 2004-02-01  Duncan Mak  <duncan@ximian.com>
14410
14411         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
14412         parsing for cmd, fixes bug #53694.
14413
14414 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
14415
14416         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
14417         in the member name duplication tests. Property and operator name duplication
14418         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
14419
14420 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
14421
14422         * interface.cs (PopulateMethod): Fixed crash when interface method
14423         returns not existing type (error test cs0246-3.cs).
14424
14425 2004-02-02  Ravi Pratap M <ravi@ximian.com>
14426
14427         * cs-parser.jay (interface_accessors): Re-write actions to also
14428         store attributes attached to get and set methods. Fix spelling
14429         while at it.
14430
14431         (inteface_property_declaration): Modify accordingly.
14432
14433         (InterfaceAccessorInfo): New helper class to store information to pass
14434         around between rules that use interface_accessors.
14435
14436         * interface.cs (Emit): Apply attributes on the get and set
14437         accessors of properties and indexers too.
14438
14439         * attribute.cs (ApplyAttributes): Modify accordingly to use the
14440         right MethodBuilder when applying attributes to the get and set accessors.
14441
14442 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
14443
14444         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
14445
14446 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
14447
14448         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
14449
14450 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
14451
14452         * cs-parser.jay: Remove YIELD token, instead use the new grammar
14453         changes that treat `yield' specially when present before `break'
14454         or `return' tokens.
14455
14456         * cs-tokenizer.cs: yield is no longer a keyword.
14457
14458 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
14459
14460         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
14461         setting for default constructors.
14462         For default constructors are almost every time set wrong Modifier. The
14463         generated IL code has been alright. But inside mcs this values was
14464         wrong and this was reason why several of my CLS Compliance tests
14465         failed.
14466
14467 2004-01-22  Martin Baulig  <martin@ximian.com>
14468
14469         * cs-parser.jay (namespace_or_type_name): Return an Expression,
14470         not a QualifiedIdentifier.  This is what `type_name_expression'
14471         was previously doing.
14472         (type_name_expression): Removed; the code is now in
14473         `namespace_or_type_name'.
14474         (qualified_identifier): Removed, use `namespace_or_type_name'
14475         instead.
14476         (QualifiedIdentifier): Removed this class.      
14477
14478 2004-01-22  Martin Baulig  <martin@ximian.com>
14479
14480         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
14481         not a string as alias name.
14482
14483 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
14484
14485         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
14486         #52730 bug, and instead compute correctly the need to use a
14487         temporary variable when requesting an address based on the
14488         static/instace modified of the field and the constructor.
14489  
14490 2004-01-21  Martin Baulig  <martin@ximian.com>
14491
14492         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
14493         class and namespace before looking up aliases.  Fixes #52517.
14494
14495 2004-01-21  Martin Baulig  <martin@ximian.com>
14496
14497         * flowanalysis.cs (UsageVector.Merge): Allow variables being
14498         assinged in a 'try'; fixes exception4.cs.
14499
14500 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14501         * class.cs : Implemented parameter-less constructor for TypeContainer
14502
14503         * decl.cs: Attributes are now stored here. New property OptAttributes
14504
14505         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
14506
14507         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
14508
14509 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14510
14511         * typemanager.cs (CSharpSignature): Now reports also inner class name.
14512           (CSharpSignature): New method for indexer and property signature.
14513
14514 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14515
14516         * pending.cs (IsVirtualFilter): Faster implementation.
14517
14518 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14519
14520         * typemanager.cs: Avoid inclusion of same assembly more than once.
14521
14522 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14523
14524         * cs-parser.jay: Fixed problem where the last assembly attribute
14525           has been applied also to following declaration (class, struct, etc.)
14526           
14527 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
14528
14529         * class.cs: Added error CS0538, CS0539 reporting.
14530         Fixed crash on Microsoft runtime when field type is void.
14531
14532         * cs-parser.jay: Added error CS0537 reporting.
14533
14534         * pending.cs: Added error CS0535 reporting.
14535         Improved error report for errors CS0536, CS0534.
14536
14537 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
14538
14539         Merge a few bits from the Anonymous Method MCS tree.
14540
14541         * statement.cs (ToplevelBlock): New class for toplevel methods,
14542         will hold anonymous methods, lifted variables.
14543
14544         * cs-parser.jay: Create toplevel blocks for delegates and for
14545         regular blocks of code. 
14546
14547 2004-01-20  Martin Baulig  <martin@ximian.com>
14548
14549         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
14550         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
14551         and `NeedExplicitReturn'; added `IsLastStatement'.
14552         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
14553         have a `ReturnLabel' or we're not unreachable.
14554
14555         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
14556         child's reachability; don't just override ours with it.  Fixes
14557         #58058 (lluis's example).
14558         (FlowBranching): Added public InTryOrCatch(), InCatch(),
14559         InFinally(), InLoop(), InSwitch() and
14560         BreakCrossesTryCatchBoundary() methods.
14561
14562         * statement.cs (Return): Do all error checking in Resolve().
14563         Unless we are the last statement in a top-level block, always
14564         create a return label and jump to it.
14565         (Break, Continue): Do all error checking in Resolve(); also make
14566         sure we aren't leaving a `finally'.
14567         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
14568         statement in a top-level block.
14569         (Block.Flags): Added `IsDestructor'.
14570         (Block.IsDestructor): New public property.
14571
14572 2004-01-20  Martin Baulig  <martin@ximian.com>
14573
14574         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
14575
14576 2004-01-20  Martin Baulig  <martin@ximian.com>
14577
14578         * statement.cs (Statement.ResolveUnreachable): New public method.
14579         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
14580         (Block.Resolve): Resolve unreachable statements.
14581
14582 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
14583
14584         * expression.cs: We need to fix the case where we do
14585         not have a temp variable here.
14586
14587         * assign.cs: Only expression compound assignments need
14588         temporary variables.
14589
14590 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
14591
14592         * flowanalysis.cs: Reduce memory allocation in a few ways:
14593           - A block with no variables should not allocate a bit
14594             vector for itself.
14595           - A method with no out parameters does not need any tracking
14596             for assignment of the parameters, so we need not allocate
14597             any data for it.
14598           - The arrays:
14599                 public readonly Type[] VariableTypes;
14600                 public readonly string[] VariableNames;
14601             Are redundant. The data is already stored in the variable
14602             map, so we need not allocate another array for it.
14603           - We need to add alot of checks for if (params | locals) == null
14604             due to the first two changes.
14605
14606 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
14607
14608         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
14609         implement IMemoryLocation, we store a copy on a local variable and
14610         take the address of it.  Patch from Benjamin Jemlich
14611
14612         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
14613         to use a special "type_name_expression" rule which reduces the
14614         number of "QualifiedIdentifier" classes created, and instead
14615         directly creates MemberAccess expressions.
14616
14617 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
14618
14619         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
14620         that fixes #52853.  Null literal assignment to ValueType
14621
14622         * class.cs (MethodData.Emit): Instead of checking the name of the
14623         method to determine if its a destructor, create a new derived
14624         class from Method called Destructor, and test for that.  
14625
14626         * cs-parser.jay: Create a Destructor object instead of a Method.  
14627
14628         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
14629
14630         Fixes: 52933
14631
14632 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
14633
14634         * expression.cs (Binary.ResolveOperator): Perform an implicit
14635         conversion from MethodGroups to their delegate types on the
14636         Addition operation.
14637
14638         * delegate.cs: Introduce a new class DelegateCreation that is the
14639         base class for `NewDelegate' and `ImplicitDelegateCreation',
14640         factor some code in here.
14641
14642         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
14643         conversion from MethodGroups to compatible delegate types. 
14644
14645         * ecore.cs (Expression.Resolve): Do not flag error 654
14646         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
14647         we allow conversions from MethodGroups to delegate types now.
14648
14649         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
14650         assignments in v2 either.
14651
14652 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
14653
14654         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
14655         static read-only fields in ctors.
14656
14657         Applied patch from Benjamin Jemlich 
14658
14659         * expression.cs (UnaryMutator): Avoid leaking local variables. 
14660
14661 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
14662
14663         * cs-tokenizer.cs (IsCastToken): Allow the various native types
14664         here to return true, as they can be used like this:
14665
14666                 (XXX) int.MEMBER ()
14667
14668         Fixed 49836 and all the other dups
14669
14670 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
14671
14672         * driver.cs: Implement /win32res and /win32icon.
14673
14674 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
14675
14676         * cs-parser.jay: Add a rule to improve error handling for the
14677         common mistake of placing modifiers after the type.
14678
14679 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
14680
14681         * cs-parser.jay (interface_event_declaration): Catch
14682         initialization of events on interfaces, and report cs0068
14683
14684         * cs-parser.jay (interface_event_declaration): Catch
14685         initialization of events. 
14686
14687         * ecore.cs: Better report missing constructors.
14688
14689         * expression.cs (Binary.ResolveOperator): My previous bug fix had
14690         the error reporting done in the wrong place.  Fix.
14691
14692         * expression.cs (Binary.ResolveOperator): Catch the 
14693         operator + (E x, E y) error earlier, and later allow for implicit
14694         conversions in operator +/- (E e, U x) from U to the underlying
14695         type of E.
14696
14697         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
14698         52596, if the container class is abstract, the default constructor
14699         is protected otherwise its public (before, we were always public).
14700
14701         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
14702         fixed statement.
14703
14704         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
14705         Jemlich that fixes bug #52597, MCS was generating invalid code for
14706         idisposable structs.   Thanks to Ben for following up with this
14707         bug as well.
14708
14709 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
14710
14711         * driver.cs: Allow assemblies without code to be generated, fixes
14712         52230.
14713
14714 2004-01-07  Nick Drochak <ndrochak@gol.com>
14715
14716         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
14717
14718 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
14719
14720         * cs-parser.jay: Add rules to improve error reporting if fields or
14721         methods are declared at the namespace level (error 116)
14722
14723         * Add rules to catch event add/remove
14724
14725 2004-01-04  David Sheldon <dave-mono@earth.li>
14726
14727   * expression.cs: Added matching ")" to error message for 
14728   CS0077
14729
14730 2004-01-03 Todd Berman <tberman@gentoo.org>
14731
14732         * ecore.cs, attribute.cs:
14733         Applying fix from #52429.
14734
14735 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
14736
14737         * ecore.cs, expression.cs, statement.cs:
14738         Total rewrite of how we handle branching. We
14739         now handle complex boolean expressions with fewer
14740         jumps. As well if (x == 0) no longer emits a ceq.
14741
14742         if (x is Foo) is much faster now, because we generate
14743         better code.
14744
14745         Overall, we get a pretty big improvement on our benchmark
14746         tests. The code we generate is smaller and more readable.
14747
14748         I did a full two-stage bootstrap. The patch was reviewed
14749         by Martin and Miguel.
14750
14751 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
14752
14753         * cs-parser.jay: Make primary_expression not take a QI.
14754         we dont need this because the member_access rule covers
14755         us here. So we replace the rule with just IDENTIFIER.
14756
14757         This has two good effects. First, we remove a s/r conflict.
14758         Second, we allocate many fewer QualifiedIdentifier objects.
14759
14760 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
14761
14762         * attribute.cs: Handle MarshalAs attributes as pseudo, and
14763         set the correct information via SRE. This prevents
14764         hanging on the MS runtime. Fixes #29374.
14765
14766 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
14767
14768         * convert.cs: correctly handle conversions to value types
14769         from Enum and ValueType as unboxing conversions.
14770
14771         Fixes bug #52569. Patch by Benjamin Jemlich.
14772
14773 2004-01-02  Ravi Pratap  <ravi@ximian.com>
14774
14775         * expression.cs (BetterConversion): Prefer int -> uint
14776         over int -> ulong (csc's behaviour). This fixed bug #52046.
14777
14778 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
14779
14780         * decl.cs (MemberCache.FindMembers): now returns a
14781         MemberInfo [].
14782
14783         * typemanager.cs: In general, go with with ^^.
14784         (CopyNewMethods): take an IList.
14785         (RealMemberLookup): Only allocate an arraylist
14786         if we copy from two sets of methods.
14787
14788         This change basically does two things:
14789         1) Fewer array lists allocated due to CopyNewMethods.
14790         2) the explicit cast in MemberList costed ALOT.
14791
14792 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
14793
14794         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
14795         a hashtable to avoid needless string allocations when an identifier is
14796         used more than once (the common case).
14797
14798 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
14799
14800         * pending.cs: MS's TypeBuilder.GetInterfaces ()
14801         is broken, it will not return anything. So, we
14802         have to use the information we have in mcs to
14803         do the task.
14804
14805         * typemanager.cs: Add a cache for GetInterfaces,
14806         since this will now be used more often (due to ^^)
14807
14808         (GetExplicitInterfaces) New method that gets the
14809         declared, not effective, interfaces on a type
14810         builder (eg, if you have interface IFoo, interface
14811         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
14812         { IBar }.
14813
14814         This patch makes MCS able to bootstrap itself on
14815         Windows again.
14816
14817 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
14818
14819         * expression.cs: Remove the Nop's that Miguel put
14820         in by mistake.
14821
14822 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
14823
14824         * report.cs, codegen.cs: Give the real stack trace to
14825         the error when an exception is thrown.
14826
14827 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
14828
14829         * decl.cs: only allocate hashtables for ifaces if 
14830         it is an iface!
14831
14832 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
14833
14834         * expression.cs: fix the error from cs0121-2.cs
14835         (a parent interface has two child interfaces that
14836         have a function with the same name and 0 params
14837         and the function is called through the parent).
14838
14839 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
14840
14841         * class.cs, rootcontext.cs, typmanager.cs: do not
14842         leak pointers.
14843
14844 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
14845
14846         * codegen.cs: remove stack for the ec flow branching.
14847         It is already a linked list, so no need.
14848
14849 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
14850
14851         * Makefile: Allow custom profiler here.
14852
14853 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
14854
14855         * typemanager.cs (LookupType):
14856           - Use a static char [], because split takes
14857             a param array for args, so it was allocating
14858             every time.
14859           - Do not store true in a hashtable, it boxes.
14860
14861 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
14862
14863         * flowanalysis.cs: bytify common enums.
14864
14865 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
14866
14867         * modifiers.cs: Add a new set of flags for the
14868         flags allowed on explicit interface impls.
14869         * cs-parser.jay: catch the use of modifiers in
14870         interfaces correctly.
14871         * class.cs: catch private void IFoo.Blah ().
14872
14873         All related to bug #50572.
14874
14875 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
14876
14877         * decl.cs: Rewrite the consistant accessability checking.
14878         Accessability is not linear, it must be implemented in
14879         a tableish way. Fixes #49704.
14880
14881 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
14882
14883         * expression.cs: Handle negation in a checked context.
14884         We must use subtraction from zero. Fixes #38674.
14885
14886 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14887
14888         * class.cs: Ignore static void main in DLLs.
14889         * rootcontext.cs: Handle the target type here,
14890         since we are have to access it from class.cs
14891         * driver.cs: account for the above.
14892
14893 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
14894
14895         * report.cs: Give line numbers and files if available.
14896
14897 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
14898
14899         * driver.cs: Implement /addmodule.
14900
14901         * typemanager.cs:  Change 'modules' field so it now contains Modules not
14902         ModuleBuilders.
14903
14904 2003-12-20  Martin Baulig  <martin@ximian.com>
14905
14906         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
14907         (FieldBase.IsAssigned): Removed this field.
14908         (FieldBase.SetAssigned): New public method.
14909         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
14910
14911 2003-12-20  Martin Baulig  <martin@ximian.com>
14912
14913         * expression.cs (LocalVariableReference.DoResolve): Don't set
14914         `vi.Used' if we're called from DoResolveLValue().
14915
14916         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
14917         returns the usage vector it just merged into the current one -
14918         pass this one to UsageWarning().
14919         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
14920         of the `EmitContext', don't call this recursively on our children.
14921
14922 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
14923
14924         * driver.cs: Implement /target:module.
14925
14926 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
14927
14928         * support.cs (CharArrayHashtable): New helper class.
14929
14930         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
14931         char arrays, not strings, so we can avoid creating a string in
14932         consume_identifier if the identifier is a keyword.
14933
14934 2003-12-16  Martin Baulig  <martin@ximian.com>
14935
14936         * statement.cs (LocalInfo.Assigned): Removed this property.
14937         (LocalInfo.Flags): Removed `Assigned'.
14938         (LocalInfo.IsAssigned): New public method; takes the EmitContext
14939         and uses flow analysis.
14940         (Block.UsageWarning): Made this method private.
14941         (Block.Resolve): Call UsageWarning() if appropriate.
14942
14943         * expression.cs (LocalVariableReference.DoResolve): Always set
14944         LocalInfo.Used here.
14945
14946 2003-12-13  Martin Baulig  <martin@ximian.com>
14947
14948         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
14949         any value here; we're now using flow analysis to figure out
14950         whether a statement/block returns a value.
14951
14952 2003-12-13  Martin Baulig  <martin@ximian.com>
14953
14954         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
14955         working again.
14956         (FlowBranching.MergeFinally): Don't call
14957         `branching.CheckOutParameters()' here, this is called in
14958         MergeTopBlock().
14959         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
14960         when adding the `finally' vector.       
14961
14962 2003-12-13  Martin Baulig  <martin@ximian.com>
14963
14964         * flowanalysis.cs
14965         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
14966         actually work and also fix #48962.
14967
14968 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
14969
14970         * decl.cs: Do not check System.Object for nested types,
14971         since we know it does not have any. Big bang for buck:
14972
14973         BEFORE:
14974            Run 1:   8.35 seconds
14975            Run 2:   8.32 seconds
14976            corlib:  17.99 seconds
14977         AFTER:
14978            Run 1:   8.17 seconds
14979            Run 2:   8.17 seconds
14980            corlib:  17.39 seconds
14981
14982 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
14983
14984         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
14985         time we are returning 0 members, so we save alot here.
14986
14987 2003-12-11  Martin Baulig  <martin@ximian.com>
14988
14989         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
14990         `MergeChild()', also just take the `FlowBranching' as argument;
14991         call Merge() on it and return the result.
14992         (FlowBranching.Merge): We don't need to do anything if we just
14993         have one sibling.
14994
14995 2003-12-11  Martin Baulig  <martin@ximian.com>
14996
14997         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
14998         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
14999         Maurer for this idea.
15000
15001 2003-12-11  Martin Baulig  <martin@ximian.com>
15002
15003         * flowanalysis.cs (MergeResult): This class is now gone; we now
15004         use the `UsageVector' for this.  The reason for this is that if a
15005         branching just has one sibling, we don't need to "merge" them at
15006         all - that's the next step to do.
15007         (FlowBranching.Merge): We now return a `UsageVector' instead of a
15008         `MergeResult'.
15009
15010 2003-12-11  Martin Baulig  <martin@ximian.com>
15011
15012         Reworked flow analyis and made it more precise and bug-free.  The
15013         most important change is that we're now using a special `Reachability'
15014         class instead of having "magic" meanings of `FlowReturns'.  I'll
15015         do some more cleanups and optimizations and also add some more
15016         documentation this week.
15017
15018         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
15019         largely reworked this class.
15020         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
15021         the new `Reachability' class instead of having "magic" values here.
15022         (FlowBranching): We're now using an instance of `Reachability'
15023         instead of having separate `Returns', `Breaks' etc. fields.
15024
15025         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
15026         based on flow analysis; ignore the return value of block.Emit ().
15027
15028 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
15029
15030         * driver.cs typemanager.cs: Find the mono extensions to corlib even
15031         if they are private.
15032
15033 2003-12-09  Martin Baulig  <martin@ximian.com>
15034
15035         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
15036         call them directly on the UsageVector.
15037
15038 2003-12-09  Martin Baulig  <martin@ximian.com>
15039
15040         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
15041         Changed return type from `FlowReturns' to `Reachability'.
15042
15043 2003-12-09  Martin Baulig  <martin@ximian.com>
15044
15045         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
15046         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
15047         `Reachable' fields with a single `Reachability' one.
15048
15049 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15050
15051         * class.cs (FindMembers): Remove foreach's.
15052
15053         Bootstrap times:
15054
15055         BEFORE
15056                 Run 1:   8.74 seconds
15057                 Run 2:   8.71 seconds
15058
15059         AFTER
15060                 Run 1:   8.64 seconds
15061                 Run 2:   8.58 seconds
15062
15063
15064 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15065
15066         * cs-parser.jay:
15067         * gen-treedump.cs:
15068         * statement.cs:
15069         This patch does a few things:
15070                 1. EmptyStatement is now a singleton, so it is never reallocated.
15071                 2. All blah is EmptyStatement constructs have been changed to
15072                    blah == EmptyStatement.Value, which is much faster and valid
15073                    now that EmptyStatement is a singleton.
15074                 3. When resolving a block, rather than allocating a new array for
15075                    the non-empty statements, empty statements are replaced with
15076                    EmptyStatement.Value
15077                 4. Some recursive functions have been made non-recursive.
15078         Mainly the performance impact is from (3), however (1) and (2) are needed for
15079         this to work. (4) does not make a big difference in normal situations, however
15080         it makes the profile look saner.
15081
15082         Bootstrap times:
15083
15084         BEFORE
15085         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
15086         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
15087         Total memory allocated: 56397 KB
15088
15089         AFTER
15090         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
15091         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
15092         Total memory allocated: 55666 KB
15093
15094 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15095
15096         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
15097         than the hashtable in a hashtable version
15098
15099         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
15100         we always end up concating a string. This results in a huge perf
15101         loss, because many strings have to be tracked by the GC. In this
15102         patch, we first use a hashtable that works with two keys, so that
15103         the strings do not need to be concat'ed.
15104
15105         Bootstrap times:
15106         BEFORE
15107                 Run 1:   8.74 seconds
15108                 Run 2:   8.71 seconds
15109
15110         AFTER
15111                 Run 1:   8.65 seconds
15112                 Run 2:   8.56 seconds
15113
15114 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
15115
15116         * Makefile: Add a new target `do-time' that does a quick and simple
15117         profile, leaving easy to parse output.
15118
15119 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
15120
15121         * codegen.cs (Init): Create the dynamic assembly with 
15122         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
15123
15124 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
15125
15126         * support.cs: Make the PtrHashtable use only one
15127         instance of its comparer.
15128
15129 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
15130
15131         * typemanager.cs: Fix lookup of GetNamespaces.
15132
15133 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
15134
15135         * expression.cs: Removed redundant line.
15136
15137         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
15138         ArrayLists, use for loops with bounds.  
15139
15140         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
15141         arraylist.
15142
15143         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
15144         arraylists, use for loop with bounds.
15145
15146         The above three changes give us a 0.071 second performance
15147         improvement out of 3.294 seconds down to 3.223.  On my machine
15148         the above changes reduced the memory usage by 1,387 KB during
15149         compiler bootstrap.
15150
15151         * cs-parser.jay (QualifiedIdentifier): New class used to represent
15152         QualifiedIdentifiers.  Before we created a new string through
15153         concatenation, and mostly later on, the result would be
15154         manipulated by DecomposeQI through string manipulation.
15155
15156         This reduced the compiler memory usage for bootstrapping from
15157         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
15158         compile times in 0.05 seconds.
15159
15160 2003-11-28  Dick Porter  <dick@ximian.com>
15161
15162         * support.cs: Do string compares with the Invariant culture.
15163
15164         * rootcontext.cs: 
15165         * gen-treedump.cs: 
15166         * expression.cs: 
15167         * driver.cs: 
15168         * decl.cs: 
15169         * codegen.cs: 
15170         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
15171         the comparison is done with the Invariant culture.
15172
15173 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
15174
15175         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
15176         GetEnumerator method.
15177
15178         (ProbeCollectionType): Iterate starting at the most specific type
15179         upwards looking for a GetEnumerator
15180
15181         * expression.cs: Shift count can be up to 31 for int/uint and 63
15182         for long/ulong.
15183
15184 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
15185
15186         * statement.cs (Block.LookupLabel): Also look for the label on the
15187         children blocks.  Use a hash table to keep track of visited
15188         nodes. 
15189
15190         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
15191         we actually did transform the other operand, otherwise fall back
15192         to the common codepath that casts to long.
15193
15194         * cs-tokenizer.cs: Use the same code pattern as the int case.
15195         Maybe I should do the parsing myself, and avoid depending on the
15196         Parse routines to get this done.
15197
15198 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
15199
15200         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
15201         which fixes bug 51347.  This time test it.
15202
15203         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
15204         attributes for example can not tell the difference between these.
15205         The difference was only a syntax feature of the language. 
15206
15207         * attribute.cs: Apply attributes to delegates.
15208
15209         * delegate.cs: Call the apply attributes method.
15210
15211 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
15212
15213         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
15214         comparing 0 vs Byte.MinValue, not the value
15215
15216         (ImplicitConversionRequired): When reporting a conversion error,
15217         use error 31 to print out the constant error instead of the
15218         simpler 29.
15219
15220         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
15221         which fixes bug 51347.
15222
15223 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
15224
15225         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
15226         which fixes the -warnaserror command line option.
15227
15228 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
15229
15230         * cfold.cs (DoNumericPromotions): During constant folding of
15231         additions on UIntConstant, special case intconstants with
15232         IntConstants like we do on the expression binary operator. 
15233
15234 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
15235
15236         * convert.cs (ImplicitReferenceConversion): We were missing a case
15237         (System.Enum are not value types or class types, so we need to
15238         classify them separatedly).
15239
15240         * driver.cs: We do not support error 2007.
15241
15242 2003-11-12 Jackson Harper <jackson@ximian.com>
15243
15244         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
15245         system directory. Also use the full file name so users can
15246         libraries names mscorlib-o-tron.dll in a non system dir.
15247
15248 2003-11-10  Martin Baulig  <martin@ximian.com>
15249
15250         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
15251         (TypeManager.InitCoreTypes): Initialize them here, but instead of
15252         calling `ResolveType()' on them, directly assign their `Type'.
15253
15254 2003-11-08  Martin Baulig  <martin@ximian.com>
15255
15256         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
15257         return value and the `out parent' parameter.
15258         (TypeContainer.DefineType): Moved the CS0644 check into
15259         GetClassBases().  Don't pass the interface types to the
15260         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
15261         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
15262
15263         * ecore.cs (TypeExpr.IsAttribute): New property.
15264         (TypeExpr.GetInterfaces): New method.
15265
15266         * interface.cs (Interface.GetInterfaceTypeByName): Return a
15267         TypeExpr instead of a Type.
15268         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
15269         (Interface.DefineType): Don't pass the interface types to the
15270         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
15271         them later and then call `TypeBulider.AddInterfaceImplementation()'.
15272
15273         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
15274         instead of a `Type[]'.
15275         (TypeManager.RegisterBuilder): Likewise.
15276         (TypeManager.AddUserInterface): Likewise.
15277         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
15278         `Type[]' and also return a `TypeExpr[]'.
15279         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
15280
15281 2003-11-08  Martin Baulig  <martin@ximian.com>
15282
15283         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
15284         Expression.     
15285
15286 2003-11-08  Martin Baulig  <martin@ximian.com>
15287
15288         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
15289         TypeManager.ResolveExpressionTypes().
15290
15291         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
15292         instead of an Expression.
15293         (TypeExpr): This is now an abstract base class for `TypeExpression'.
15294         (TypeExpression): New public class; formerly known as `TypeExpr'.
15295
15296         * expression.cs (ComposedCast): Derive from TypeExpr.
15297
15298         * typemanager.cs (TypeManager.system_*_expr): These are now
15299         TypExpr's instead of Expression's.
15300         (TypeManager.ResolveExpressionTypes): New public static function;
15301         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
15302         of them.        
15303
15304 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
15305
15306         * expression.cs (New.DoResolve): Do not dereference value that
15307         might be a null return.
15308
15309         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
15310         sure that the constant value has the right type.  Fixes an
15311         unreported bug, similar to 50425.
15312
15313         * const.cs (Const.LookupConstantValue): Call
15314         ImplicitStandardConversionExists before doing a conversion to
15315         avoid havng the TypeManager.ChangeType do conversions.
15316
15317         Reduced the number of casts used
15318
15319         (Const.ChangeType): New routine to enable reuse of the constant
15320         type changing code from statement.
15321
15322         * typemanager.cs (ChangeType): Move common initialization to
15323         static global variables.
15324
15325         Fixes #50425.
15326
15327         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
15328         every value type to go through, even if it was void.  Fix that. 
15329
15330         * cs-tokenizer.cs: Use is_identifier_start_character on the start
15331         character of the define, and the is_identifier_part_character for
15332         the rest of the string.
15333
15334 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
15335
15336         * expression.cs (UnaryMutator.EmitCode): When I updated
15337         LocalVariableReference.DoResolve, I overdid it, and dropped an
15338         optimization done on local variable references.
15339
15340 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
15341
15342         * ecore.cs: Convert the return from Ldlen into an int.
15343
15344 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
15345
15346         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
15347         the accessibility, this is a special case for toplevel non-public
15348         classes (internal for instance).
15349
15350 2003-10-20  Nick Drochak <ndrochak@gol.com>
15351
15352         * ecore.cs: Fix typo and build.  Needed another right paren.
15353
15354 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
15355
15356         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
15357         `internal' case regular and protected, but not allowing protected
15358         to be evaluated later.  Bug 49840
15359
15360 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
15361
15362         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
15363         to kb.Nlast, and not the kb.nFirst to isolate the switch
15364         statement.
15365
15366         Extract the underlying type, so enumerations of long/ulong are
15367         treated like long/ulong.
15368
15369 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
15370
15371         * expression.cs (New): Overload the meaning of RequestedType to
15372         track the possible creation of the NewDelegate type, since
15373         DoResolve is invoked more than once for new constructors on field
15374         initialization.
15375
15376         See bugs: #48800 and #37014
15377
15378         * cs-parser.jay (declare_local_constants): Take an arraylist
15379         instead of a single constant.
15380
15381         (local_constant_declaration): It should take a
15382         constant_declarators, not a constant_declarator.  Fixes 49487
15383
15384         * convert.cs: Fix error report.
15385
15386 2003-10-13 Jackson Harper <jackson@ximian.com>
15387
15388         * typemanager.cs (TypeToCoreType): Add float and double this fixes
15389         bug #49611
15390
15391 2003-10-09  Martin Baulig  <martin@ximian.com>
15392
15393         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
15394         to the .ctor.
15395         (MethodCore.DoDefineParameters): Removed the TypeContainer
15396         argument; use the DeclSpace which was passed to the .ctor instead.
15397         (MethodCore.CheckParameter): Take a DeclSpace instead of a
15398         TypeContainer; we only need a DeclSpace here.
15399
15400 2003-10-09  Martin Baulig  <martin@ximian.com>
15401
15402         * class.cs (MethodData): Added additional `DeclSpace ds' argument
15403         to the .ctor.
15404         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
15405         EmitContext's .ctor.    
15406
15407 2003-10-09  Martin Baulig  <martin@ximian.com>
15408
15409         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
15410         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
15411         AsAccessible(), moved them as well.
15412
15413         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
15414
15415 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
15416
15417         * cs-parser.jay : Renamed yyName to yyNames related to jay.
15418
15419 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
15420
15421         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
15422         generation for >=, as spotted by Paolo, bug 48679.  
15423         Patch from David Waite.
15424
15425         * cs-tokenizer.cs: Add handling for #pragma.
15426
15427         * cs-parser.jay: Allow for both yield and yield return in the
15428         syntax.  The anti-cobolization of C# fight will go on!
15429
15430         * class.cs (TypeBuilder.DefineType): Catch error condition here
15431         (Parent.DefineType erroring out and returning null).
15432
15433         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
15434         coping with enumerations variables, we were mistakenly processing
15435         them as a regular value type instead of built-in types.  Fixes the
15436         bug #48063
15437
15438         * typemanager.cs (IsBuiltinOrEnum): New method.
15439
15440 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
15441
15442         * cs-parser.jay: Upgrade: yield now needs the return clause.
15443
15444 2003-09-19  Martin Baulig  <martin@ximian.com>
15445
15446         * decl.cs (MemberCache.SetupCacheForInterface): Take a
15447         `MemberCache parent' argument.  Normally, an interface doesn't
15448         have a parent type except System.Object, but we use this in gmcs
15449         for generic type parameters.
15450
15451 2003-09-18  Martin Baulig  <martin@ximian.com>
15452
15453         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
15454         on `type.IsInterface'; don't check whether the type has a parent
15455         to determine whether it's an interface.
15456
15457 2003-09-15  Martin Baulig  <martin@ximian.com>
15458
15459         * class.cs (TypeContainer.DefineType): Added an error flag to
15460         avoid reporting duplicate CS0146's ("class definition is
15461         circular.").
15462
15463         * driver.cs (Driver.MainDriver): Abort if
15464         RootContext.ResolveTree() reported any errors.
15465
15466 2003-09-07  Martin Baulig  <martin@ximian.com>
15467
15468         * report.cs (Error, Warning): Added overloaded versions which take
15469         a `params object[] args' and call String.Format().
15470
15471 2003-09-07  Martin Baulig  <martin@ximian.com>
15472
15473         * decl.cs (DeclSpace..ctor): Don't call
15474         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
15475         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
15476         (DeclSpace.RecordDecl): New method.
15477
15478         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
15479
15480 2003-09-02  Ravi Pratap  <ravi@ximian.com>
15481
15482         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
15483         value attributes to be applied to ParameterBuilders.
15484
15485         * class.cs (MethodCore.LabelParameters): Make static and more
15486         generic so that it can be used from other places - like interface
15487         methods, for instance.
15488
15489         * interface.cs (Interface.Emit): Call LabelParameters before
15490         emitting attributes on the InterfaceMethod.
15491
15492 2003-08-26  Martin Baulig  <martin@ximian.com>
15493
15494         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
15495         resolving aliases; fixes #47927.
15496
15497 2003-08-26  Martin Baulig  <martin@ximian.com>
15498
15499         * statement.cs (Using.DoResolve): This is internally emitting a
15500         try/finally clause, so we need to set ec.NeedExplicitReturn if we
15501         do not always return.  Fixes #47681.
15502
15503 2003-08-26  Martin Baulig  <martin@ximian.com>
15504
15505         * decl.cs (MemberCore): Moved WarningNotHiding(),
15506         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
15507         into MemberBase.
15508         (AdditionResult): Make this nested in DeclSpace.
15509         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
15510         argument; call NamespaceEntry.Define() unless we're nested in a
15511         class or struct.
15512
15513         * namespace.cs (Namespace.DefineName): New public function.  This
15514         is called from DeclSpace's .ctor to add 
15515         (Namespace.Lookup): Include DeclSpaces in the lookup.
15516
15517         * class.cs (Operator): Derive from MemberBase, not MemberCore.
15518
15519         * const.cs (Const): Derive from MemberBase, not MemberCore.     
15520
15521 2003-08-25  Martin Baulig  <martin@ximian.com>
15522
15523         * convert.cs (Convert.ExplicitReferenceConversion): When
15524         converting from an interface type to a class, unbox if the target
15525         type is a struct type.  Fixes #47822.
15526
15527 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15528
15529         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
15530         #47854.
15531
15532 2003-08-22  Martin Baulig  <martin@ximian.com>
15533
15534         * class.cs (TypeManager.DefineType): When defining a nested type,
15535         call DefineType() on our parent; fixes #47801.
15536
15537 2003-08-22  Martin Baulig  <martin@ximian.com>
15538
15539         * class.cs (MethodData.Define): While checking if a method is an
15540         interface implementation, improve the test a bit more to fix #47654.
15541
15542 2003-08-22  Martin Baulig  <martin@ximian.com>
15543
15544         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
15545         correctly; fixes #47722.
15546
15547 2003-08-22  Martin Baulig  <martin@ximian.com>
15548
15549         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
15550         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
15551
15552         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
15553
15554 2003-08-22  Martin Baulig  <martin@ximian.com>
15555
15556         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
15557         can only be assigned in static constructors.  Fixes #47161.
15558
15559 2003-08-22  Martin Baulig  <martin@ximian.com>
15560
15561         Rewrote and improved the flow analysis code.
15562
15563         * flowbranching.cs (FlowBranching): Make this class abstract.
15564         (FlowBranching.CreateBranching): New static function to create a
15565         new flow branching.
15566         (FlowBranchingBlock, FlowBranchingException): New classes.
15567         (FlowBranching.UsageVector.Type): New public readonly field.
15568         (FlowBranching.UsageVector.Breaks): Removed the setter.
15569         (FlowBranching.UsageVector.Returns): Removed the setter.
15570         (FlowBranching.UsageVector): Added Break(), Return(),
15571         NeverReachable() and Throw() methods to modify the reachability.
15572         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
15573         done by FlowBranching.Merge().
15574         (FlowBranching.UsageVector.MergeChild): New method; merges the
15575         merge result into the current vector.
15576         (FlowBranching.Merge): New abstract method to merge a branching.
15577
15578 2003-08-12  Martin Baulig  <martin@ximian.com>
15579
15580         * expression.cs (Indirection.CacheTemporaries): Create the
15581         LocalTemporary with the pointer type, not its element type.
15582
15583 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
15584
15585         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
15586         token was a keyword or not.
15587
15588         Add `error' options where an IDENTIFIER was expected;  Provide
15589         CheckToken and CheckIdentifierToken convenience error reporting
15590         functions. 
15591
15592         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
15593
15594         * decl.cs: Rename `NamespaceEntry Namespace' public field into
15595         NameSpaceEntry NameSpaceEntry.
15596
15597         (LookupInterfaceOrClass): Avoid creating a full qualified name
15598         from namespace and name: avoid doing lookups when we know the
15599         namespace is non-existant.   Use new Tree.LookupByNamespace which
15600         looks up DeclSpaces based on their namespace, name pair.
15601
15602         * driver.cs: Provide a new `parser verbose' to display the
15603         exception thrown during parsing.  This is turned off by default
15604         now, so the output of a failure from mcs is more graceful.
15605
15606         * namespace.cs: Track all the namespaces defined in a hashtable
15607         for quick lookup.
15608
15609         (IsNamespace): New method
15610
15611 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
15612
15613         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
15614         we know that we need to concatenate (full typename can never be
15615         null). 
15616
15617         * class.cs: ditto.
15618
15619         * statement.cs: Use a bitfield;  Do not initialize to null things
15620         which are done by the constructor by default.
15621
15622         * cs-parser.jay: bug fix, parameter was 4, not 3.
15623
15624         * expression.cs: Just use the property;
15625
15626         * statement.cs: No need for GetVariableInfo method.
15627
15628 2003-08-08  Martin Baulig  <martin@ximian.com>
15629
15630         * flowanalysis.cs (FlowReturns): This is now nested in the
15631         `FlowBranching' class.
15632         (MyBitVector): Moved this here from statement.cs.
15633         (FlowBranching.SiblingType): New enum type.
15634         (FlowBranching.CreateSibling): Added `SiblingType' argument.
15635
15636 2003-08-07  Martin Baulig  <martin@ximian.com>
15637
15638         * flowanalysis.cs (FlowBranchingType): This is now nested in the
15639         `FlowBranching' class and called `BranchingType'.
15640
15641 2003-08-07  Martin Baulig  <martin@ximian.com>
15642
15643         * flowanalysis.cs: Moved all the control flow analysis code into
15644         its own file.
15645
15646 2003-08-07  Martin Baulig  <martin@ximian.com>
15647
15648         * assign.cs (Assign.DoResolve): `target' must either be an
15649         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
15650         #37319.
15651
15652 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
15653
15654         * expression.cs (BinaryMethod): This kind of expression is created by the
15655         Binary class if it determines that the operator has to be handled
15656         by a method.
15657
15658         (BinaryDelegate): This kind of expression is created if we are
15659         dealing with a + or - operator on delegates.
15660
15661         (Binary): remove method, argumetns, and DelegateOperator: when
15662         dealing with methods, 
15663
15664         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
15665
15666         * statement.cs (Block): use bitfields for the three extra booleans
15667         we had in use.   Remove unused topblock parameter.
15668
15669         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
15670
15671         * assign.cs: Drop extra unneeded tests.
15672
15673 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
15674
15675         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
15676
15677         * statement.cs (Foreach): Use VariableStorage instead of
15678         LocalBuilders.   
15679
15680         * codegen.cs (VariableStorage): New class used by clients that
15681         require a variable stored: locals or fields for variables that
15682         need to live across yield.
15683
15684         Maybe provide a convenience api for EmitThis+EmitLoad?
15685
15686         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
15687         these bad boys.
15688
15689 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
15690
15691         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
15692         RemapParameterLValue): New methods that are used to turn a
15693         precomputed FieldInfo into an expression like this:
15694
15695                 instance.FieldInfo
15696
15697         The idea is to use this instead of making LocalVariableReference
15698         have more than one meaning.
15699
15700         * cs-parser.jay: Add error production to BASE.
15701
15702         * ecore.cs: Deal with TypeManager.GetField returning null, which
15703         is now a valid return value.
15704
15705         (FieldExprNoAddress): New expression for Fields whose address can
15706         not be taken.
15707
15708         * expression.cs (LocalVariableReference): During the resolve
15709         phases, create new expressions if we are in a remapping context.
15710         Remove code that dealt with remapping here.
15711
15712         (ParameterReference): same.
15713
15714         (ProxyInstance): New expression, like the `This' expression, but
15715         it is born fully resolved.  We know what we are doing, so remove
15716         the errors that are targeted to user-provided uses of `this'.
15717
15718         * statement.cs (Foreach): our variable is now stored as an
15719         Expression;  During resolution, follow the protocol, dont just
15720         assume it will return this.
15721
15722 2003-08-06  Martin Baulig  <martin@ximian.com>
15723
15724         * support.cs (SeekableStreamReader.cs): New public class.
15725
15726         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
15727         SeekableStreamReader instead of the normal StreamReader.
15728
15729 2003-08-04  Martin Baulig  <martin@ximian.com>
15730
15731         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
15732         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
15733         deambiguate casts and delegate invocations.
15734         (parenthesized_expression): Use the new tokens to ensure this is
15735         not a cast of method invocation.
15736
15737         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
15738         when reading a `)' and Deambiguate_CloseParens () was previously
15739         called.
15740
15741         * expression.cs (ParenthesizedExpression): New class.  This is
15742         just used for the CS0075 test.
15743         (Binary.DoResolve): Check for CS0075.   
15744
15745 2003-07-29  Ravi Pratap  <ravi@ximian.com>
15746
15747         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
15748         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
15749         reference comparison.
15750
15751         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
15752         examine the ReturnType for equality - this is necessary in the
15753         cases of implicit and explicit operators whose signature also
15754         includes the return type.
15755
15756 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
15757
15758         * namespace.cs: Cache the result of the namespace computation,
15759         instead of computing it every time.
15760
15761 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
15762
15763         * decl.cs: Use a global arraylist that we reuse over invocations
15764         to avoid excesive memory consumption.  Reduces memory usage on an
15765         mcs compile by one meg (45 average).
15766
15767         * typemanager.cs (LookupTypeReflection): In .NET pointers are
15768         private, work around that.
15769
15770 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
15771
15772         * literal.cs (IntLiteral): Define Zero and One static literals. 
15773
15774         * cs-parser.jay (integer_literal): use static literals to reduce
15775         memory usage for the most used literals (0, 1 and -1).  211kb
15776         reduced in memory usage.
15777
15778         Replace all calls to `new ArrayList' with `new
15779         ArrayList(4)' which is a good average number for most allocations,
15780         and also requires only 16 bytes of memory for its buffer by
15781         default. 
15782
15783         This reduced MCS memory usage in seven megabytes for the RSS after
15784         bootstrapping.
15785
15786 2003-07-28  Ravi Pratap  <ravi@ximian.com>
15787
15788         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
15789         handle params methods the correct way by forming only one
15790         applicable set with params and normal methods in them. Earlier we
15791         were looking at params methods only if we found no normal methods
15792         which was not the correct thing to do.
15793
15794         (Invocation.BetterFunction): Take separate arguments indicating
15795         when candidate and the best method are params methods in their
15796         expanded form.
15797
15798         This fixes bugs #43367 and #46199.
15799
15800         * attribute.cs: Documentation updates.
15801
15802         (CheckAttribute): Rename to CheckAttributeTarget.
15803         (GetValidPlaces): Rename to GetValidTargets.
15804
15805         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
15806         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
15807
15808         Fixes bug #44468.
15809
15810 2003-07-28  Martin Baulig  <martin@ximian.com>
15811
15812         * class.cs (TypeContainer.DefineMembers): Use the base type's full
15813         name when looking up the base class of a nested class.  Fixes #46977.
15814
15815 2003-07-26  Martin Baulig  <martin@ximian.com>
15816
15817         * expression.cs (Indexers.Indexer): New nested struct; contains
15818         getter, setter and the indexer's type.
15819         (Indexers.Properties): This is now an ArrayList of
15820         Indexers.Indexer's.
15821         (IndexerAccess.DoResolveLValue): Correctly set the type if the
15822         indexer doesn't have any getters.
15823
15824         * assign.cs (Assign.DoResolve): Also do the implicit conversions
15825         for embedded property and indexer assignments.
15826
15827 2003-07-26  Martin Baulig  <martin@ximian.com>
15828
15829         * cs-tokenizer.cs (Tokenizer.xtoken): Report a CS1040 if a
15830         preprocessor directive is not the first non-whitespace character
15831         on a line.
15832
15833 2003-07-26  Martin Baulig  <martin@ximian.com>
15834
15835         * namespace.cs (NamespaceEntry.Lookup): New method; rewrote the
15836         namespace parsing, follow the spec more closely.
15837
15838         * rootcontext.cs (RootContext.NamespaceLookup): Use the new
15839         NamespaceEntry.Lookup().
15840
15841 2003-07-25  Martin Baulig  <martin@ximian.com>
15842
15843         * MethodCore.cs (OverridesSomething): New public field; it's set
15844         from TypeContainer.DefineMembers if this method overrides
15845         something (which doesn't need to be a method).  Fix #39462.
15846
15847 2003-07-25  Ravi Pratap  <ravi@ximian.com>
15848
15849         * typemanager.cs (GetMembers): Ensure that the list of members is
15850         reversed. This keeps things in sync.
15851
15852         * attribute.cs (Attribute.CheckAttribute): Break as soon as we
15853         find an AttributeUsage attribute.
15854
15855         * expression.cs (Invocation.OverloadResolve): Perform the check
15856         which disallows Invoke to be directly called on a Delegate.
15857
15858         (Error_InvokeOnDelegate): Report error cs1533.
15859
15860 2003-07-25  Martin Baulig  <martin@ximian.com>
15861
15862         * expression.cs (Indexers.GetIndexersForType): Only look in the
15863         interface hierarchy if the requested type is already an
15864         interface.  Fixes #46788 while keeping #46502 fixed.
15865
15866 2003-07-25  Martin Baulig  <martin@ximian.com>
15867
15868         * class.cs (TypeContainer.DefineMembers): Check whether all
15869         readonly fields have been assigned and report warning CS0649 if
15870         not.
15871
15872         * statement.cs (LocalInfo.IsFixed): Always return true if this is
15873         a valuetype.
15874
15875 2003-07-24  Ravi Pratap  <ravi@ximian.com>
15876
15877         * decl.cs (MemberCache.AddMethods): Reverse the order of the array
15878         returned from GetMethods to make things consistent with the
15879         assumptions MCS makes about ordering of methods.
15880
15881         This should comprehensively fix bug #45127 and it does :-)
15882
15883         * ecore.cs (MethodGroupExpr.DeclaringType): Correct bug - the
15884         ordering is actually reverse.
15885
15886         * Clean up some debug messages I left lying around.
15887
15888         * interface.cs (Populate*): Get rid of code which emits attributes
15889         since the stage in which we emit attributes is the 'Emit' stage,
15890         not the define stage.
15891
15892         (Emit): Move attribute emission for interface members here.
15893
15894 2003-07-22  Ravi Pratap  <ravi@ximian.com>
15895
15896         * expression.cs (Invocation.OverloadResolve): Follow the spec more
15897         closely: we eliminate methods in base types when we have an
15898         applicable method in a top-level type.
15899
15900         Please see section 14.5.5.1 for an exact description of what goes
15901         on. 
15902
15903         This fixes bug #45127 and a host of other related to corlib compilation.
15904
15905         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
15906         array is the method corresponding to the top-level type (this is
15907         because of the changes made to icall.c) so we change this
15908         accordingly.
15909
15910         (MethodGroupExpr.Name): This too.
15911
15912         * typemanager.cs (GetElementType): New method which does the right
15913         thing when compiling corlib. 
15914
15915         * everywhere: Make use of the above in the relevant places.
15916
15917 2003-07-22  Martin Baulig  <martin@ximian.com>
15918
15919         * cs-parser.jay (invocation_expression): Moved
15920         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
15921         `cast_expression', but create a InvocationOrCast which later
15922         resolves to either an Invocation or a Cast.
15923
15924         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
15925         method; call this before EmitStatement() to make sure that this
15926         expression can be used as a statement.
15927
15928         * expression.cs (InvocationOrCast): New class; resolves to either
15929         an Invocation or a Cast.
15930
15931         * statement.cs (StatementExpression): Call ResolveStatement() on
15932         the ExpressionStatement before emitting it.
15933
15934 2003-07-21  Martin Baulig  <martin@ximian.com>
15935
15936         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
15937         `ref' and `out' attributes match; fixes #46220.
15938         (MemberAccess.ResolveMemberAccess): You can't reference a type
15939         through an expression; fixes #33180.
15940         (Indexers.GetIndexersForType): Don't return the indexers from
15941         interfaces the class implements; fixes #46502.
15942
15943 2003-07-21  Martin Baulig  <martin@ximian.com>
15944
15945         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
15946         CS0661 checks; fixes bug #30442.
15947
15948 2003-07-21  Martin Baulig  <martin@ximian.com>
15949
15950         * decl.cs (AdditionResult): Added `Error'.
15951
15952         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
15953
15954         * typemanager.cs (TypeManager.ChangeType): Catch exceptions;
15955         makes cs0031.cs actually work.
15956
15957 2003-07-20  Martin Baulig  <martin@ximian.com>
15958
15959         * namespace.cs: Fixed that bug which caused a crash when compiling
15960         the debugger's GUI.
15961
15962 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
15963
15964         * typemanager.cs (LookupTypeReflection): Never expose types which
15965         are NotPublic, NestedPrivate, NestedAssembly, or
15966         NestedFamANDAssem.  We used to return these, and later do a check
15967         that would report a meaningful error, but the problem is that we
15968         would not get the real match, if there was a name override.
15969
15970 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
15971
15972         * namespace.cs (Namespace, Name): Do not compute the namespace
15973         name dynamically, compute it in the constructor.  This reduced
15974         memory usage by 1697 KB.
15975
15976         * driver.cs: Use --pause to pause at the end.
15977
15978 2003-07-17  Peter Williams  <peter@newton.cx>
15979
15980         * Makefile: Change the name of the test target so that it doesn't
15981         conflict with the recursive test target.
15982
15983 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
15984
15985         * expression.cs (LocalVariableReference.Emit, EmitAssign,
15986         AddressOf): Do not use EmitThis, that was wrong, use the actual
15987         this pointer.
15988
15989 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
15990
15991         * class.cs (MethodData.Define): While checking if a method is an
15992         interface implementation, improve the test: If we are not public
15993         (use new test here: use the computed MethodAttributes directly,
15994         instead of the parsed modifier flags) check if the `implementing'
15995         method comes from an interface or not.
15996
15997         * pending.cs (VerifyPendingMethods): Slightly better error
15998         message.
15999
16000         * makefile: add test target that does the mcs bootstrap.
16001
16002 2003-07-16  Ravi Pratap  <ravi@ximian.com>
16003
16004         * interface.cs (Define): Do nothing here since there are no
16005         members to populate etc. Move the attribute emission out of here
16006         since this was just totally the wrong place to put it. Attribute
16007         application happens during the 'Emit' phase, not in the 'Define'
16008         phase.
16009
16010         (Emit): Add this method and move the attribute emission here
16011
16012         * rootcontext.cs (EmitCode): Call the Emit method on interface
16013         types too.
16014
16015 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
16016
16017         * expression.cs (OverloadResolve): Report error only if Location
16018         is not 'Null' which means that there was a probe going on.
16019
16020 2003-07-14  Martin Baulig  <martin@ximian.com>
16021
16022         * expression.cs (ConditionalLogicalOperator): New public class to
16023         implement user defined conditional logical operators.
16024         This is section 14.11.2 in the spec and bug #40505.
16025
16026 2003-07-14  Martin Baulig  <martin@ximian.com>
16027
16028         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
16029
16030 2003-07-14  Martin Baulig  <martin@ximian.com>
16031
16032         * codegen.cs (EmitContext.InFixedInitializer): New public field.
16033
16034         * ecore.cs (IVariable.VerifyFixed): New interface method.
16035
16036         * expression.cs (Unary.ResolveOperator): When resolving the `&'
16037         operator, check whether the variable is actually fixed.  Fixes bug
16038         #36055.  Set a variable definitely assigned when taking its
16039         address as required by the spec.
16040
16041         * statement.cs (LocalInfo.IsFixed): New field.
16042         (LocalInfo.MakePinned): Set `IsFixed' to true.
16043
16044 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
16045
16046         * attribute.cs (Attribute.Resolve): While doing a Member lookup
16047         for .ctors, ensure that we only ask for members declared in the
16048         attribute type (BindingFlags.DeclaredOnly).
16049
16050         Fixes bug #43632.
16051
16052         * expression.cs (Error_WrongNumArguments): Report error 1501
16053         correctly the way CSC does.
16054
16055 2003-07-13  Martin Baulig  <martin@ximian.com>
16056
16057         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
16058         lookup on the fully qualified name, to make things like "X.X" work
16059         where "X.X" is a fully qualified type name, but we also have a
16060         namespace "X" in the using list.  Fixes #41975.
16061
16062 2003-07-13  Martin Baulig  <martin@ximian.com>
16063
16064         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
16065         function. If we're a CompoundAssign, we need to create an embedded
16066         CompoundAssign, not an embedded Assign.
16067         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
16068         Fixes #45854.
16069
16070 2003-07-13  Martin Baulig  <martin@ximian.com>
16071
16072         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
16073         work to fix bug #46088.
16074
16075 2003-07-13  Ravi Pratap <ravi@ximian.com>
16076
16077         * class.cs (Operator.Emit): Do not emit attributes here - it is
16078         taken care of by the Method class that we delegate too. This takes
16079         care of bug #45876.
16080
16081 2003-07-10  Martin Baulig  <martin@ximian.com>
16082
16083         * expression.cs (TypeOfVoid): New class.
16084         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
16085
16086 2003-07-10  Martin Baulig  <martin@ximian.com>
16087
16088         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
16089         bug #35957.
16090
16091 2003-07-10  Martin Baulig  <martin@ximian.com>
16092
16093         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
16094         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
16095
16096         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
16097
16098         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
16099
16100 2003-07-10  Martin Baulig  <martin@ximian.com>
16101
16102         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
16103         of decimal.  Fixes #42850.
16104
16105         NOTE: I also fixed the created byte blob, but this doesn't work on
16106         the MS runtime and csc never produces any byte blobs for decimal
16107         arrays.
16108
16109 2003-07-10  Martin Baulig  <martin@ximian.com>
16110
16111         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
16112         structs; fixes #32068.
16113         (Block.AddChildVariableNames): Fixed #44302.
16114
16115 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16116
16117         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
16118
16119 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
16120
16121         * attribute.cs: And this test is onger needed.
16122
16123 2003-07-08  Martin Baulig  <martin@ximian.com>
16124
16125         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
16126         inaccessible types.  Fixes #36313.
16127
16128         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
16129
16130         * namespace.cs (NamespaceEntry): Create implicit entries for all
16131         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
16132         implicit entries for N1.N2 and N1.
16133
16134 2003-07-08  Martin Baulig  <martin@ximian.com>
16135
16136         Rewrote the handling of namespaces to fix a lot of the issues
16137         wrt. `using' aliases etc.
16138
16139         * namespace.cs (Namespace): Splitted this class into a
16140         per-assembly `Namespace' and a per-file `NamespaceEntry'.
16141
16142         * typemanager.cs (TypeManager.IsNamespace): Removed.
16143         (TypeManager.ComputeNamespaces): Only compute namespaces from
16144         loaded assemblies here, not the namespaces from the assembly we're
16145         currently compiling.
16146
16147 2003-07-08  Martin Baulig  <martin@ximian.com>
16148
16149         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
16150
16151 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
16152
16153         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
16154         already fixed it.  
16155
16156         I thought about the memory savings here, but LookupTypeReflection
16157         is used under already very constrained scenarios.  Compiling
16158         corlib or mcs only exposes one hit, so it would not really reduce
16159         any memory consumption.
16160
16161 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16162
16163         * typemanager.cs: fixes bug #45889 by only adding public types from
16164         other assemblies to the list of known types.
16165
16166 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
16167
16168         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
16169         on the type we resolved.
16170
16171 2003-07-05  Martin Baulig  <martin@ximian.com>
16172
16173         * pending.cs (PendingImplementation.ParentImplements): Don't
16174         create the proxy if the parent is abstract.
16175
16176         * class.cs (TypeContainer.DefineIndexers): Process explicit
16177         interface implementations first.  Fixes #37714.
16178
16179 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
16180
16181         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
16182         defined recursively;  but since we modify the input parameters
16183         (left is set to `this' temporarily), we reset this value if the
16184         left_is_explicit is false, which gives the original semantics to
16185         the code.  
16186
16187         * literal.cs (NullPointer): new class used to represent a null
16188         literal in a pointer context.
16189
16190         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
16191         type is a pointer, use a NullPointer object instead of a
16192         NullLiteral.   Closes 43687
16193
16194         (ExplicitConversion): Convert pointer values using
16195         the conv opcode to the proper type.
16196
16197         * ecore.cs (New): change ValueTypeVariable property into a method,
16198         that returns whether the valuetype is suitable for being used.
16199
16200         * expression.cs (Binary.DoNumericPromotions): Only return if we
16201         the int constant was a valid uint, and we can return both left and
16202         right as uints.  If not, we continue processing, to trigger the
16203         type conversion.  This fixes 39018.
16204
16205         * statement.cs (Block.EmitMeta): During constant resolution, set
16206         the CurrentBlock property on the emitcontext, so that we resolve
16207         constants propertly.
16208
16209 2003-07-02  Martin Baulig  <martin@ximian.com>
16210
16211         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
16212         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
16213
16214         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
16215         than emitting it here.
16216
16217         * statement.cs: Fixed some more flow analysis bugs.
16218
16219 2003-07-02  Martin Baulig  <martin@ximian.com>
16220
16221         * class.cs (MethodData.Define): When implementing interface
16222         methods, set Final unless we're Virtual.
16223
16224         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
16225         check work for interface methods.
16226
16227 2003-07-01  Martin Baulig  <martin@ximian.com>
16228
16229         * ecore.cs (EmitContext.This): Replaced this property with a
16230         GetThis() method which takes a Location argument.  This ensures
16231         that we get the correct error location for a CS0188.
16232
16233 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
16234
16235         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
16236         ImplicitStandardConversion.
16237
16238         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
16239
16240 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
16241
16242         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
16243         optimization.
16244
16245 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
16246
16247         * class.cs (Constructor.Define): Turn off initlocals for unsafe
16248         constructors.
16249
16250         (MethodData.Define): Turn off initlocals for unsafe methods.
16251
16252 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
16253
16254         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
16255         complete;  Fixes #37521.
16256
16257         * delegate.cs: Use Modifiers.TypeAttr to compute the
16258         TypeAttributes, instead of rolling our own.  This makes the flags
16259         correct for the delegates.
16260
16261 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
16262
16263         * class.cs (Constructor.Define): Set the private flag for static
16264         constructors as well.
16265
16266         * cs-parser.jay (statement_expression): Set the return value to
16267         null, to avoid a crash when we catch an error.
16268
16269 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
16270
16271         * cs-parser.jay: Applied patch from Jackson that adds support for
16272         extern and unsafe modifiers to destructor declarations.
16273
16274         * expression.cs: Report error 21 if the user is trying to index a
16275         System.Array.
16276
16277         * driver.cs: Add an error message, suggested by the bug report.
16278
16279         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
16280         if we do not have a ": this ()" constructor initializer.  Fixes 45149
16281
16282 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
16283
16284         * namespace.cs: Add some information to reduce FAQs.
16285
16286 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
16287
16288         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
16289         underlying enumeration types.  Fixes #43915.
16290
16291         * expression.cs: Treat ushort/short as legal values to be used in
16292         bitwise operations.
16293
16294 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
16295
16296         * delegate.cs: transfer custom attributes for paramenters from
16297         the delegate declaration to Invoke and BeginInvoke.
16298
16299 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
16300
16301         * attribute.cs: handle custom marshalers and emit marshal info
16302         for fields, too.
16303
16304 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
16305
16306         * makefile.gnu: Added anonymous.cs to the compiler sources.
16307
16308 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
16309
16310         * iterators.cs: Change the name of the proxy class to include two
16311         underscores.
16312
16313         * cs-parser.jay: Update grammar to include anonymous methods.
16314
16315         * anonymous.cs: new file.
16316
16317 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
16318
16319         * class.cs (Field.Define): Add missing test for pointers and
16320         safety. 
16321
16322 2003-05-27  Ravi Pratap  <ravi@ximian.com>
16323
16324         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
16325         we use the stobj opcode.
16326
16327         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
16328         since it wasn't the correct fix. 
16329
16330         It still is puzzling that we are required to use stobj for IntPtr
16331         which seems to be a ValueType.
16332
16333 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
16334
16335         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
16336         during regular simple name resolution.   Now, the trick is that
16337         instead of returning for processing the simplename, we do a
16338         TypeManager.LookupType (ie, a rooted lookup as opposed to a
16339         contextual lookup type).   If a match is found, return that, if
16340         not, return for further composition.
16341
16342         This fixes long-standing 30485.
16343
16344         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
16345         using the address to initialize an object, do an Stobj instead of
16346         using the regular Stelem.
16347
16348         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
16349         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
16350         Because if we are a BaseIndexerAccess that value will be true.
16351         Fixes 43643.
16352
16353         * statement.cs (GotoCase.Resolve): Return after reporting an
16354         error, do not attempt to continue. 
16355
16356         * expression.cs (PointerArithmetic.Emit): If our operand is a
16357         long, convert our constants to match the operand before
16358         multiplying.  Convert to I type before adding.   Fixes 43670.
16359
16360 2003-05-14  Ravi Pratap  <ravi@ximian.com>
16361
16362         * enum.cs (ImplicitConversionExists) : Rename to
16363         ImplicitEnumConversionExists to remove ambiguity. 
16364
16365         * ecore.cs (NullCast): New type of cast expression class which
16366         basically is very similar to EmptyCast with the difference being
16367         it still is a constant since it is used only to cast a null to
16368         something else
16369         (eg. (string) null)
16370
16371         * convert.cs (ImplicitReferenceConversion): When casting a null
16372         literal, we return a NullCast.
16373
16374         * literal.cs (NullLiteralTyped): Remove - I don't see why this
16375         should be around anymore.
16376
16377         The renaming (reported was slightly wrong). Corrections:
16378
16379         ConvertImplicitStandard -> ImplicitConversionStandard
16380         ConvertExplicitStandard -> ExplicitConversionStandard
16381
16382         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
16383         before passing them in !
16384
16385         * convert.cs (ImplicitConversionStandard): When comparing for
16386         equal expr and target types, ensure that expr is not a
16387         NullLiteral.
16388
16389         In general, we must not be checking (expr_type ==
16390         target_type) in the top level conversion methods
16391         (ImplicitConversion, ExplicitConversion etc). This checking is
16392         done in the methods that they delegate to.
16393
16394 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
16395
16396         * convert.cs: Move Error_CannotConvertType,
16397         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
16398         ImplicitNumericConversion, ImplicitConversionExists,
16399         ImplicitUserConversionExists, StandardConversionExists,
16400         FindMostEncompassedType, FindMostSpecificSource,
16401         FindMostSpecificTarget, ImplicitUserConversion,
16402         ExplicitUserConversion, GetConversionOperators,
16403         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
16404         TryImplicitIntConversion, Error_CannotConvertImplicit,
16405         ConvertImplicitRequired, ConvertNumericExplicit,
16406         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
16407         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
16408         its own file.
16409
16410         Perform the following renames:
16411
16412         StandardConversionExists -> ImplicitStandardConversionExists
16413         ConvertImplicit -> ImplicitConversion
16414         ConvertImplicitStandard -> ImplicitStandardConversion
16415         TryImplicitIntConversion -> ImplicitIntConversion
16416         ConvertImplicitRequired -> ImplicitConversionRequired
16417         ConvertNumericExplicit -> ExplicitNumericConversion
16418         ConvertReferenceExplicit -> ExplicitReferenceConversion
16419         ConvertExplicit -> ExplicitConversion
16420         ConvertExplicitStandard -> ExplicitStandardConversion
16421
16422 2003-05-19  Martin Baulig  <martin@ximian.com>
16423
16424         * statement.cs (TypeInfo.StructInfo): Made this type protected.
16425         (TypeInfo): Added support for structs having structs as fields.
16426
16427         * ecore.cs (FieldExpr): Implement IVariable.
16428         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
16429         VariableInfo for the field.
16430
16431 2003-05-18  Martin Baulig  <martin@ximian.com>
16432
16433         * expression.cs (This.DoResolve): Report a CS0027 if we're
16434         emitting a field initializer.
16435
16436 2003-05-18  Martin Baulig  <martin@ximian.com>
16437
16438         * expression.cs (This.ResolveBase): New public function.
16439         (This.DoResolve): Check for CS0188.
16440
16441         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
16442         This.Resolve().
16443
16444         * ecore.cs (MethodGroupExpr.DoResolve): Set the
16445         `instance_expression' to null if we don't have any non-static
16446         methods.
16447
16448 2003-05-18  Martin Baulig  <martin@ximian.com>
16449
16450         Reworked the way how local variables and parameters are handled by
16451         the flow analysis code.
16452
16453         * statement.cs (TypeInfo, VariableMap): New public classes.
16454         (VariableInfo): New public class.  This is now responsible for
16455         checking whether a variable has been assigned.  It is used for
16456         parameters and local variables.
16457         (Block.EmitMeta): Take the InternalParameters as argument; compute
16458         the layout of the flow vectors here.
16459         (Block.LocalMap, Block.ParameterMap): New public properties.
16460         (FlowBranching): The .ctor doesn't get the InternalParameters
16461         anymore since Block.EmitMeta() now computes the layout of the flow
16462         vector.
16463         (MyStructInfo): This class is now known as `StructInfo' and nested
16464         in `TypeInfo'; we don't access this directly anymore.
16465
16466         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
16467         property and removed IsAssigned(), IsFieldAssigned(),
16468         SetAssigned() and SetFieldAssigned(); we now call them on the
16469         VariableInfo so we don't need to duplicate this code everywhere.
16470
16471         * expression.cs (ParameterReference): Added `Block block' argument
16472         to the .ctor.
16473         (LocalVariableReference, ParameterReference, This): The new
16474         VariableInfo class is now responsible for all the definite
16475         assignment stuff.
16476
16477         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
16478         IsParameterAssigned, SetParameterAssigned): Removed.
16479
16480 2003-05-18  Martin Baulig  <martin@ximian.com>
16481
16482         * typemanager.cs (InitCoreTypes): Try calling
16483         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
16484         the 3-args-version.  Corlib now also needs our `void_type'.
16485         (GetMethod): Added overloaded version which takes an optional
16486         `bool report_errors' to allow lookups of optional methods.
16487
16488 2003-05-12  Martin Baulig  <martin@ximian.com>
16489
16490         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
16491         only used for locals and not for parameters.
16492
16493 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
16494
16495         * support.cs (InternalParameters.ParameterType): Return the
16496         ExternalType of the parameter.
16497
16498         * parameter.cs (Parameter.ExternalType): drop the two arguments,
16499         they were unused.
16500
16501 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
16502
16503         * class.cs (MethodData.Define): Do not set the `newslot' on
16504         interface members, if they are also flagged as "override".
16505
16506         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
16507         better code for ++i and i++.  This only works for static fields
16508         and local variables.
16509
16510         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
16511         want to pull the DeclSpace out of the builder_to_declspace instead
16512         of the TypeBuilder (like in TypeContainer.FindMembers).
16513
16514         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
16515         instead of LookupTypeContainer.  Fixes the crash on .NET for
16516         looking up interface members.
16517
16518         * const.cs: Create our own emit context during the Definition
16519         stage, so that constants are evaluated in the proper context, when
16520         a recursive definition happens.
16521
16522 2003-05-11  Martin Baulig  <martin@ximian.com>
16523
16524         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
16525         new block for a switch section.
16526         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
16527         the adding/lookup in the switch block.  Fixes #39828.
16528
16529 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
16530
16531         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
16532         functionality: I needed to convert the data after I had performed
16533         the add/sub operation into the operands type size.
16534
16535         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
16536         pass the type for the box operation, otherwise the resulting
16537         object would have been of type object.
16538
16539         (BoxedCast): Add constructor to specify the type to box as.
16540
16541 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
16542
16543         * iterators.cs: I was reusing the `count' variable inadvertently,
16544         take steps to not allow this to happen.
16545
16546 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
16547
16548         * attribute.cs (Attribute.Resolve): Params attributes are encoded
16549         by creating an array at the point where the params starts and
16550         putting all those arguments there, then adjusting the size of the
16551         array.
16552
16553 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
16554
16555         * expression.cs (New.AddressOf): Implement interface
16556         IMemoryLocation.  This is used when the `new' operator is used in
16557         the context of an invocation to a method on a value type.
16558
16559         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
16560         example. 
16561
16562         * namespace.cs: Also check the using aliases here.
16563
16564         * driver.cs: Move the test for using validity after the types have
16565         been entered, so we do a single pass that also includes the using
16566         aliases. 
16567
16568         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
16569         in the regular case.   CreateSiblingForFinally is doing extra
16570         error checking.
16571
16572         * attribute.cs (GetAttributeArgumentExpression): Store the result
16573         on an out value, and use the return value to indicate failure
16574         instead of using null (which is a valid return for Constant.GetValue).
16575
16576         * statement.cs: Perform the analysis flow for the increment
16577         portion after the statement, because this will be the real flow of
16578         execution.  Fixes #42385
16579
16580         * codegen.cs (EmitContext.EmitArgument,
16581         EmitContext.EmitStoreArgument): New helper functions when the
16582         RemapToProxy flag is set.
16583
16584         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
16585         function.
16586
16587         Add support for remapping parameters. 
16588
16589         * iterators.cs: Propagate parameter values;  Store parameter
16590         values in the proxy classes.
16591
16592 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
16593
16594         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
16595         need a proxy reference;  I do not know what I was thinking
16596
16597         * cs-parser.jay (constructor_initializer): catch another error,
16598         and display nice message.
16599
16600         (field_declaration): catch void field declaration
16601         to flag a better error. 
16602
16603         * class.cs (MemberBase.CheckBase): Report an error instead of a
16604         warning if a new protected member is declared in a struct. 
16605         (Field.Define): catch the error of readonly/volatile.
16606
16607         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
16608
16609         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
16610         volatile variable is taken
16611
16612 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
16613
16614         * statement.cs (Fixed.Resolve): Report an error if we are not in
16615         an unsafe context.
16616
16617 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
16618
16619         * typemanager.cs: reuse the code that handles type clashes for
16620         delegates and enumerations.
16621
16622         * class.cs (Report28): Always report.
16623
16624         * expression.cs (EncodeAsAttribute): Allow nulls here.
16625
16626 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
16627
16628         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
16629         the functionality for testing whether an expression is valid for
16630         an attribute here.  Also handle the case of arrays of elements
16631         being stored. 
16632
16633         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
16634         encoding a linear array into an array of objects that are suitable
16635         to be passed to an CustomAttributeBuilder.
16636
16637         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
16638
16639         * ecore.cs: (FieldExpr): Handle field remapping here.
16640
16641         * iteratators.cs: Pass the instance variable (if the method is an
16642         instance method) to the constructors, so we can access the field
16643         variables on the class.
16644
16645         TODO: Test this with structs.  I think the THIS variable on
16646         structs might have to be a pointer, and not a refenrece
16647
16648 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
16649
16650         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
16651         local variables to fields in a proxy class.
16652
16653         * iterators.cs (PopulateProxy): Rename our internal fields to
16654         <XXX>.  
16655         Create a <THIS> field if we are an instance method, so we can
16656         reference our parent container variables.
16657         (MapVariable): Called back from the EmitContext code to enter a
16658         new variable to field mapping into the proxy class (we just create
16659         a FieldBuilder).
16660
16661         * expression.cs
16662         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
16663         for using the remapped locals to fields.
16664
16665         I placed the code here, because that gives the same semantics to
16666         local variables, and only changes the Emit code.
16667
16668         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
16669         statements inside iterators.
16670         (VariableInfo): Add a FieldBuilder for the cases when we are
16671         remapping local variables to fields in a proxy class
16672
16673         * ecore.cs (SimpleNameResolve): Avoid testing two times for
16674         current_block != null.
16675
16676         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
16677         not cope with strings, as it has been moved to the
16678         TableSwitchEmit.  Fixed bug in switch generation.
16679
16680         * expression.cs (New.DoResolve): Provide more context for the user
16681         when reporting an error.
16682
16683         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
16684         pointers. 
16685
16686         * expression.cs (MemberAccess.DoResolve): When we get a type back,
16687         check the permissions for it.  Note than in a type-resolution
16688         context the check was already present in DeclSpace.ResolveType,
16689         but was missing from the MemberAccess.
16690
16691         (ArrayCreation.CheckIndices): warn if the user has
16692         more nested levels of expressions, but there are no more
16693         dimensions specified.  Avoids crash on bug 41906.
16694
16695 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
16696
16697         * statement.cs (Block): replace Implicit bool, for a generic
16698         flags.   
16699         New flag: `Unchecked'.  This is used during the EmitMeta phase
16700         (which is out-of-line with the regular Resolve/Emit process for a
16701         statement, as this is done ahead of time, but still gets a chance
16702         to call constant resolve).
16703
16704         (Block.Flags): new enum for adding a new flag.
16705
16706         (Block.EmitMeta): track the state of unchecked.
16707
16708         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
16709         to enable constant resolution to work there as well.
16710
16711 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
16712
16713         * typemanager.cs (ienumerable_type): Also look up
16714         System.Collections.IEnumerable. 
16715
16716 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
16717
16718         TODO: Test more than one conditional per method.
16719
16720         * class.cs (Indexer.Define): Report the location where the user is
16721         referencing the unsupported feature.
16722
16723         (MethodData): Overload the use of `conditionals' to
16724         minimize the creation of needless ArrayLists.   This saves roughly
16725         212kb on my machine.
16726
16727         (Method): Implement the new IIteratorContainer interface.
16728         (Method.SetYields): Implement the method by setting the ModFlags
16729         to contain METHOD_YIELDS.
16730
16731         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
16732         which just got set to null.
16733
16734         * iterators.cs: New file.
16735
16736         (Yield, YieldBreak): New statements.
16737
16738         * statement.cs (Return.Resolve): Flag an error if we are used in
16739         an iterator method.
16740
16741         * codegen.cs (InIterator): New flag set if the code is being
16742         compiled in an iterator method.
16743
16744         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
16745         internal modifier, and we just use it to avoid adding extra
16746         fields, as this is seldom used.  
16747
16748         * cs-parser.jay: Add yield_statement (yield and yield break).
16749
16750         * driver.cs: New flag -v2 to turn on version 2 features. 
16751
16752         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
16753         hashtable when v2 is enabled.
16754
16755 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
16756
16757         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
16758         there is already a namespace defined with this name.
16759
16760         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
16761         people upgraded their corlibs.
16762
16763         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
16764         always use fully qualified types, no need to use the compiler
16765         front end.
16766
16767         (TypeManager.IsNamespace): Use binarysearch.
16768
16769         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
16770         AddDelegate): I did not quite use the new IsValid API properly: I
16771         have to pass the short-name and the fullname.  I was passing only
16772         the basename instead of the fullname sometimes. 
16773
16774         (TypeContainer.DefineType): call NamespaceClash.
16775
16776         * interface.cs (Interface.DefineType): use NamespaceClash before
16777         defining the type.
16778
16779         * delegate.cs (Delegate.DefineType): use NamespaceClash before
16780         defining the type.
16781
16782         * enum.cs: (Enum.DefineType): use NamespaceClash before
16783         defining the type.
16784
16785         * typemanager.cs (: 3-line patch that gives us some tasty 11%
16786         speed increase.  First, use the negative_hits cache when we get a
16787         negative.  Second, add the type with its full original name
16788         instead of the new . and + encoded name (reflection uses + to
16789         separate type from a nested type).  Use LookupTypeReflection
16790         directly which bypasses the type->name hashtable (that we already
16791         know does not contain the type.
16792
16793         * decl.cs (DeclSpace.ResolveTypeExpr): track the
16794         location/container type. 
16795
16796         * driver.cs: When passing utf8, use directly the UTF8Encoding.
16797
16798 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
16799
16800         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
16801
16802         * delegate.cs (NewDelegate.Resolve): Test whether an instance
16803         method is being referenced in the method group from a static
16804         context, and report error 120 if so.
16805
16806         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
16807         Error118. 
16808
16809         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
16810         is created, we create the A namespace).
16811
16812         * cs-parser.jay: A namespace also introduces a DeclarationFound.
16813         Fixes #41591
16814
16815 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
16816
16817         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
16818         invocation to ModuleBuilder.GetType with the same values will
16819         return a new type instance, so we need to cache its return
16820         values. 
16821
16822         * expression.cs (Binary.ResolveOperator): Only allow the compare
16823         operators on enums if they are of the same type.
16824
16825         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
16826         types of ValueType on their own case.  Before we were giving them
16827         the same treatment as objects.
16828
16829         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
16830         fullname.  Short name is used to compare against container name.
16831         Fullname is used to check against defined namespace names.
16832
16833         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
16834         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
16835
16836         (Method.CheckBase): Call parent.
16837         (MemberBase.CheckBase): Check for protected members on sealed
16838         classes.
16839         (PropertyBase.CheckBase): Call parent.
16840         (Field.Define): Call parent.
16841
16842         * report.cs: Negative error codes are now mapped to 8000 - code,
16843         so that the display is render more nicely.
16844
16845         * typemanager.cs: Do not use try/catch, instead report a regular
16846         error. 
16847
16848         (GetPointerType, GetReferenceType): These methods provide
16849         mechanisms to obtain the T* and T& from a T.  We had the code
16850         previously scattered around the code base, and it also used
16851         TypeManager.LookupType that would go through plenty of caches.
16852         This one goes directly to the type source.
16853
16854         In some places we did the Type.GetType followed by
16855         ModuleBuilder.GetType, but not in others, so this unifies the
16856         processing as well.
16857
16858         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
16859         statements now that we have namespace information.
16860
16861         * typemanager.cs (IsNamespace): New method, returns whether the
16862         string presented is a namespace or not.
16863
16864         (ComputeNamespaces): New public entry point, computes the list of
16865         available namespaces, using the GetNamespaces API call in Mono, or
16866         the slower version in MS.NET.   
16867
16868         Now before we start the semantic analysis phase, we have a
16869         complete list of namespaces including everything that the user has
16870         provided.
16871
16872         Deleted old code to cache namespaces in .nsc files.
16873
16874 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
16875
16876         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
16877         class/struct location definition Location for the implicit
16878         constructor location.
16879
16880         (Operator.Define): Use the location of the operator for the
16881         implicit Method definition.
16882
16883         (Constructor.Emit): use the constructor location for the implicit
16884         base initializer constructor.
16885
16886         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
16887         and the Expression class now contains two new methods:
16888
16889         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
16890         isolate type lookup from the rest of the resolution process.
16891
16892         Since we use Expressions to hold type definitions due to the way
16893         we parse the input we have historically overloaded Resolve to
16894         perform the Type lookups if a special flag is passed.  Now this is
16895         eliminated and two methods take their place. 
16896
16897         The differences in the two methods between xStep and xTerminal is
16898         that xStep is involved in our current lookup system that uses
16899         SimpleNames to compose a name, while xTerminal is used just to
16900         catch the case where the simplename lookup failed.
16901
16902 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
16903
16904         * expression.cs (ResolveMemberAccess): Remove redundant code.
16905         TypeExpr expressions are always born fully resolved.
16906
16907         * interface.cs (PopulateMethod): Do not lookup the types twice.
16908         We were doing it once during SemanticAnalysis and once during
16909         PopulateMethod.
16910
16911         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
16912         in local variable type definitions, were being returned as a
16913         SimpleName (we decomposed everything into a string), that is
16914         because primary_expression was being used instead of a type in the
16915         grammar (reduce/reduce conflicts).
16916
16917         The part that was wrong is that we converted the expression into a
16918         string (an oversimplification in one hand, compounded with primary
16919         expressions doing string concatenation).
16920
16921         So things like:
16922
16923         A.B.C [] x;
16924
16925         Would return "A.B.C[]" as a SimpleName.  This stopped things like
16926         using clauses from working on this particular context.  And a type
16927         was being matched directly against "A.B.C[]".
16928
16929         We now use the correct approach, and allow for ComposedCast to be
16930         part of the unary expression.  So the "A.B.C []" become a composed
16931         cast of "A.B.C" (as a nested group of MemberAccess with a
16932         SimpleName at the end) plus the rank composition "[]". 
16933
16934         Also fixes 35567
16935
16936 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
16937
16938         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
16939         for the access level checking.
16940
16941         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
16942         `TypeContainer container', because I kept getting confused when I
16943         was debugging this code.
16944
16945         * expression.cs (Indexers): Instead of tracking getters/setters,
16946         we now track them in parallel.  We create one arraylist less, but
16947         most importantly it is possible now for the LValue code to find a
16948         matching get for a set.
16949
16950         (IndexerAccess.DoResolveLValue): Update the code.
16951         GetIndexersForType has been modified already to extract all the
16952         indexers from a type.  The code assumed it did not.
16953
16954         Also make the code set the correct return type for the indexer.
16955         This was fixed a long time ago for properties, but was missing for
16956         indexers.  It used to be void_type.
16957
16958         (Binary.Emit): Test first for doubles instead of
16959         floats, as they are more common.
16960
16961         (Binary.EmitBranchable): Use the .un version of the branch opcodes
16962         when dealing with floats and the <=, >= operators.  This fixes bug
16963         #39314 
16964
16965         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
16966         to load the array value by emitting a load on the foreach variable
16967         type.  This was incorrect.  
16968
16969         We now emit the code to load an element using the the array
16970         variable type, and then we emit the conversion operator.
16971
16972         Fixed #40176
16973
16974 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
16975
16976         * attribute.cs: Avoid allocation of ArrayLists in the common case.
16977
16978 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
16979
16980         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
16981         test for protection before we test for signatures. 
16982
16983         (MethodSignature.ToString): implement.
16984
16985         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
16986         to the case where we reduced into a LongConstant.
16987
16988         * decl.cs (CheckAccessLevel): If the type is an array, we can not
16989         depend on whether the information is acurrate, because the
16990         Microsoft runtime will always claim that the array type is public,
16991         regardless of the real state.
16992
16993         If the type is a pointer, another problem happens: the type is
16994         reported as non-public in Microsoft.  
16995
16996         In both cases we have to call CheckAccessLevel recursively with
16997         the underlying type as the argument to be tested.
16998
16999 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
17000
17001         * assign.cs (Assign.Emit): If we are dealing with a compound
17002         assignment expression, we should use the code path that stores the
17003         intermediate result in a temporary value.  This fixes #40903.
17004
17005         *expression.cs (Indirection.ToString): Provide ToString method for
17006         debugging. 
17007
17008 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
17009
17010         * class.cs: Null out fields holding references to Block objects so
17011         they can be garbage collected.
17012
17013         * expression.cs (OverloadResolve): Remove unused local.
17014
17015 2003-04-07  Martin Baulig  <martin@ximian.com>
17016
17017         * codegen.cs (EmitContext.CurrentFile): New public field.
17018         (EmitContext.Mark): Use the CurrentFile to check whether the
17019         location is in the correct file.
17020         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
17021
17022 2003-04-07  Martin Baulig  <martin@ximian.com>
17023
17024         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
17025
17026         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
17027         location.  [FIXME: The location argument which gets passed to this
17028         method is sometimes wrong!]
17029
17030 2003-04-07  Nick Drochak <ndrochak@gol.com>
17031
17032         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
17033
17034 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
17035
17036         * expression.cs (Indirection.EmitAssign): We were using the
17037         temporary, but returning immediately instead of continuing the
17038         EmitAssing flow.
17039
17040 2003-04-06  Martin Baulig  <martin@ximian.com>
17041
17042         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
17043         if it's a nested child, but also deriving from the outer class.
17044         See test 190.cs.
17045
17046         * typemanager.cs (IsNestedChildOf): Make this work if it's a
17047         nested child, but also deriving from the outer class.  See
17048         test-190.cs.
17049         (FilterWithClosure): We may access private members of the outer
17050         class if we're a nested child and deriving from the outer class.
17051         (RealMemberLookup): Only set `closure_private_ok' if the
17052         `original_bf' contained BindingFlags.NonPublic.
17053
17054 2003-04-05  Martin Baulig  <martin@ximian.com>
17055
17056         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #40670.
17057
17058 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
17059
17060         * class.cs (Event.Define): Do not allow abstract events to have
17061         initializers. 
17062
17063 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
17064
17065         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
17066         block in event declarations.
17067
17068         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
17069         value type, get its address.
17070
17071         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
17072         leaving a class on the stack instead of a boolean value (int
17073         0/1).  Change the code so we compare against null, and then the
17074         result against zero.
17075
17076         * class.cs (TypeContainer.GetClassBases): We were checking for the
17077         parent class being sealed too late.
17078
17079         * expression.cs (Binary.Emit): For <= and >= when dealing with
17080         floating point values, use cgt.un and clt.un instead of cgt and
17081         clt alone.
17082
17083 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
17084
17085         * statement.cs: Apply the same optimization as MS: skip the 
17086         GetEnumerator returning an IEnumerator, and use the one returning a 
17087         CharEnumerator instead. This allows us to avoid the try-finally block 
17088         and the boxing.
17089
17090 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
17091
17092         * cs-parser.jay: Attributes cannot be applied to
17093                          namespaces. Fixes #40473
17094
17095 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17096
17097         * class.cs:
17098         (Add*): check if the name is valid using the full name for constants,
17099         fields, properties and events.
17100
17101 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
17102
17103         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
17104         char constants to be part of the enumeration.
17105
17106         * expression.cs (Conditional.DoResolve): Add support for operator
17107         true. Implements the missing functionality from 14.12
17108
17109         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
17110         operator true/false as required by the spec.
17111
17112         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
17113         implicit conversion to boolean.
17114
17115         * statement.cs (Statement.ResolveBoolean): A boolean expression is
17116         also one where the type implements `operator true'. 
17117
17118         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
17119         get an expression that will invoke operator true based on an
17120         expression.  
17121
17122         (GetConversionOperators): Removed the hack that called op_True
17123         here.  
17124
17125         (Expression.ResolveBoolean): Move this from Statement.
17126
17127 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
17128
17129         * ecore.cs (FieldExpr): do not allow initialization of initonly
17130         fields on derived classes
17131
17132 2003-03-13  Martin Baulig  <martin@ximian.com>
17133
17134         * statement.cs (Block.Emit): Call ig.BeginScope() and
17135         ig.EndScope() when compiling with debugging info; call
17136         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
17137
17138 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
17139
17140         * expression.cs (Indexers): Do not construct immediately, allow
17141         for new members to be appended as we go.  Fixes 38143
17142
17143 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17144
17145         * expression.cs: save/restore context when resolving an unchecked
17146         expression.
17147
17148 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
17149
17150         * cfold.cs: Catch division by zero in modulus operator during
17151         constant folding.
17152
17153 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
17154
17155         * interface.cs (Interface.DefineMembers): Avoid defining members
17156         twice. 
17157
17158 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
17159
17160         * driver.cs: handle the +/- options for -noconfig
17161
17162         * statement.cs (Unckeched.Resolve): Also track the state of
17163         unchecked in the Resolve phase.
17164
17165 2003-02-27  Martin Baulig  <martin@ximian.com>
17166
17167         * ecore.cs (Expression.MemberLookup): Don't create a
17168         MethodGroupExpr for something which is not a method.  Fixes #38291.
17169
17170 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
17171
17172         * class.cs (MemberBase.CheckParameters): Also check that the type
17173         is unmanaged if it is a pointer.
17174
17175         * expression.cs (SizeOf.Resolve): Add location information.
17176
17177         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
17178         a managed type is declared.
17179
17180         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
17181         parameter modifiers as well.  Fixes bug 38606
17182
17183         * class.cs: Very sad.  Am backing out the speed up changes
17184         introduced by the ArrayList -> Array in the TypeContainer, as they
17185         were not actually that much faster, and introduced a bug (no error
17186         reports on duplicated methods).
17187
17188         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
17189         source first, this will guarantee that we have a valid expression
17190         before calling in lower levels functions that will require a
17191         resolved object.  Then use this original_source in the
17192         target.ResolveLValue instead of the original source that was
17193         passed to us.
17194
17195         Another change.  Use target.Resolve instead of LValueResolve.
17196         Although we are resolving for LValues, we will let the Assign code
17197         take care of that (it will be called again from Resolve).  This
17198         basically allows code like this:
17199
17200         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
17201         class Y { void A (X x) { x [0] += o; }
17202
17203         The problem was that the indexer was trying to resolve for
17204         set_Item (idx, object o) and never finding one.  The real set_Item
17205         was set_Item (idx, X).  By delaying the process we get the right
17206         semantics. 
17207
17208         Fixes bug 36505
17209
17210 2003-02-23  Martin Baulig  <martin@ximian.com>
17211
17212         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
17213         while calling DoEmit ().
17214
17215         * codegen.cs (EmitContext.Mark): Don't mark locations in other
17216         source files; if you use the #line directive inside a method, the
17217         compiler stops emitting line numbers for the debugger until it
17218         reaches the end of the method or another #line directive which
17219         restores the original file.
17220
17221 2003-02-23  Martin Baulig  <martin@ximian.com>
17222
17223         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
17224
17225 2003-02-23  Martin Baulig  <martin@ximian.com>
17226
17227         * statement.cs (Block.AddChildVariableNames): We need to call this
17228         recursively, not just for our immediate children.
17229
17230 2003-02-23  Martin Baulig  <martin@ximian.com>
17231
17232         * class.cs (Event.Define): Always make the field private, like csc does.
17233
17234         * typemanager.cs (TypeManager.RealMemberLookup): Make events
17235         actually work, fixes bug #37521.
17236
17237 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
17238
17239         * delegate.cs: When creating the various temporary "Parameters"
17240         classes, make sure that we call the ComputeAndDefineParameterTypes
17241         on those new parameters (just like we do with the formal ones), to
17242         allow them to be resolved in the context of the DeclSpace.
17243
17244         This fixes the bug that Dick observed in Bugzilla #38530.
17245
17246 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
17247
17248         * expression.cs (ResolveMemberAccess): When resolving a constant,
17249         do not attempt to pull a constant if the value was not able to
17250         generate a valid constant.
17251
17252         * const.cs (LookupConstantValue): Do not report more errors than required.
17253
17254 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17255
17256         * expression.cs: fixes bug #38328.
17257
17258 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
17259
17260         * class.cs: Changed all the various members that can be part of a
17261         class from being an ArrayList to be an Array of the right type.
17262         During the DefineType type_list, interface_list, delegate_list and
17263         enum_list are turned into types, interfaces, delegates and enums
17264         arrays.  
17265
17266         And during the member population, indexer_list, event_list,
17267         constant_list, field_list, instance_constructor_list, method_list,
17268         operator_list and property_list are turned into their real arrays.
17269
17270         Although we could probably perform this operation earlier, for
17271         good error reporting we need to keep the lists and remove the
17272         lists for longer than required.
17273
17274         This optimization was triggered by Paolo profiling the compiler
17275         speed on the output of `gen-sample-program.pl' perl script. 
17276
17277         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
17278         not crash in methods like MemberLookupFailed that use this field.  
17279
17280         This problem arises when the compiler fails to resolve a type
17281         during interface type definition for example.
17282
17283 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
17284
17285         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
17286         inherit from System.Object, so we have to stop at null, not only
17287         when reaching System.Object.
17288
17289 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
17290
17291         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
17292         DeclaredOnly because the parent indexer might have had a different
17293         name, but did not loop until the top of the hierarchy was reached.
17294
17295         The problem this one fixes is 35492: when a class implemented an
17296         indexer from an interface, we were getting the interface method
17297         (which was abstract) and we were flagging an error (can not invoke
17298         abstract method).
17299
17300         This also keeps bug 33089 functioning, and test-148 functioning.
17301
17302         * typemanager.cs (IsSpecialMethod): The correct way of figuring
17303         out if a method is special is to see if it is declared in a
17304         property or event, or whether it is one of the predefined operator
17305         names.   This should fix correctly #36804.
17306
17307 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
17308
17309         The goal here is to remove the dependency on EmptyCast.Peel ().
17310         Killing it completely.
17311
17312         The problem is that currently in a number of places where
17313         constants are expected, we have to "probe" for an EmptyCast, and
17314         Peel, which is not the correct thing to do, as this will be
17315         repetitive and will likely lead to errors. 
17316
17317         The idea is to remove any EmptyCasts that are used in casts that
17318         can be reduced to constants, so we only have to cope with
17319         constants. 
17320
17321         This bug hunt was triggered by Bug 37363 and the desire to remove
17322         the duplicate pattern where we were "peeling" emptycasts to check
17323         whether they were constants.  Now constants will always be
17324         constants.
17325
17326         * ecore.cs: Use an enumconstant here instead of wrapping with
17327         EmptyCast.  
17328
17329         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
17330         throwing me off.  By handling this we can get rid of a few hacks.
17331
17332         * statement.cs (Switch): Removed Peel() code.
17333
17334 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
17335
17336         * class.cs: Location information for error 508
17337
17338         * expression.cs (New.DoResolve): Add a guard against double
17339         resolution of an expression.  
17340
17341         The New DoResolve might be called twice when initializing field
17342         expressions (see EmitFieldInitializers, the call to
17343         GetInitializerExpression will perform a resolve on the expression,
17344         and later the assign will trigger another resolution
17345
17346         This leads to bugs (#37014)
17347
17348         * delegate.cs: The signature for EndInvoke should contain any ref
17349         or out parameters as well.  We were not doing this in the past. 
17350
17351         * class.cs (Field.Define): Do not overwrite the type definition
17352         inside the `volatile' group.  Turns out that volatile enumerations
17353         were changing the type here to perform a validity test, which
17354         broke conversions. 
17355
17356 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
17357
17358         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
17359         and structs, we do not want to load the instance variable
17360
17361         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
17362         enum_type has to be handled like an object reference (implicit
17363         conversions exists from this to object), but the regular IsClass
17364         and IsValueType tests will never return true for this one.
17365
17366         Also we use TypeManager.IsValueType instead of type.IsValueType,
17367         just for consistency with the rest of the code (this is only
17368         needed if we ever use the construct exposed by test-180.cs inside
17369         corlib, which we dont today).
17370
17371 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
17372
17373         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
17374         just InternalCall.
17375
17376 2003-02-09  Martin Baulig  <martin@ximian.com>
17377
17378         * namespace.cs (Namespace..ctor): Added SourceFile argument.
17379         (Namespace.DefineNamespaces): New static public method; this is
17380         called when we're compiling with debugging to add all namespaces
17381         to the symbol file.
17382
17383         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
17384         pass it to the Namespace's .ctor.
17385
17386         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
17387         and MethodBase arguments; pass the namespace ID to the symwriter;
17388         pass the MethodBase instead of the token to the symwriter.
17389         (SymbolWriter.DefineNamespace): New method to add a namespace to
17390         the symbol file.
17391
17392 2003-02-09  Martin Baulig  <martin@ximian.com>
17393
17394         * symbolwriter.cs: New file.  This is a wrapper around
17395         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
17396         methods here in near future.
17397
17398 2003-02-09  Martin Baulig  <martin@ximian.com>
17399
17400         * codegen.cs (EmitContext.Mark): Just pass the arguments to
17401         ILGenerator.MarkSequencePoint() which are actually used by the
17402         symbol writer.
17403
17404 2003-02-09  Martin Baulig  <martin@ximian.com>
17405
17406         * location.cs (SourceFile): New public sealed class.  This
17407         contains the name and an index which is used in the location's token.
17408         (Location): Reserve an appropriate number of bits in the token for
17409         the source file instead of walking over that list, this gives us a
17410         really huge performance improvement when compiling with debugging.
17411
17412         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
17413         `SourceFile' argument instead of a string.
17414         (Driver.ProcessFile): Add all the files via Location.AddFile(),
17415         but don't parse/tokenize here, we need to generate the list of all
17416         source files before we do that.
17417         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
17418         the files.
17419
17420         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
17421         instead of a string.
17422
17423         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
17424         of a string.
17425
17426 2003-02-09  Martin Baulig  <martin@ximian.com>
17427
17428         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
17429         filename on `#line default'.
17430
17431 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
17432
17433         * statement.cs: don't clear the pinned var when the fixed statement
17434         returns from the method (fixes bug#37752).
17435
17436 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
17437
17438         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
17439         to IsValueType.
17440
17441 2003-02-07  Martin Baulig  <martin@ximian.com>
17442
17443         * driver.cs: Removed the `--debug-args' command line argument.
17444
17445         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
17446         automatically by the AsssemblyBuilder.
17447         (CodeGen.InitializeSymbolWriter): We don't need to call any
17448         initialization function on the symbol writer anymore.  This method
17449         doesn't take any arguments.
17450
17451 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
17452
17453         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
17454         from referenced assemblies as well.
17455
17456 2003-02-02  Martin Baulig  <martin@ximian.com>
17457
17458         * class.cs (MethodData.Emit): Generate debugging info for external methods.
17459
17460 2003-02-02  Martin Baulig  <martin@ximian.com>
17461
17462         * class.cs (Constructor.Emit): Open the symbol writer before
17463         emitting the constructor initializer.
17464         (ConstructorInitializer.Emit): Call ec.Mark() to allow
17465         single-stepping through constructor initializers.
17466
17467 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
17468
17469         * class.cs: Handle error 549: do not allow virtual methods in
17470         sealed classes. 
17471
17472 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
17473
17474         * decl.cs: Check access levels when resolving types
17475
17476 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
17477
17478         * statement.cs: Add parameters and locals set in catch blocks that might 
17479         return to set vector
17480
17481 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
17482
17483         * class.cs (Operator): Set the SpecialName flags for operators.
17484
17485         * expression.cs (Invocation.DoResolve): Only block calls to
17486         accessors and operators on SpecialName methods.
17487
17488         (Cast.TryReduce): Handle conversions from char constants.
17489
17490
17491 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
17492
17493         * statement.cs: small memory and time optimization in FlowBranching.
17494
17495 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
17496
17497         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
17498         problem that the last fix but in the other sid (Set).
17499
17500         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
17501         access when there is no indexer in the hierarchy.
17502
17503 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
17504
17505         * class.cs: Combine some if statements.
17506
17507 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17508
17509         * driver.cs: fixed bug #37187.
17510
17511 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
17512
17513         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
17514         any indexer, it's needed to build a list with all the indexers in the
17515         hierarchy (AllGetters), else we have problems. Fixes #35653.
17516
17517 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
17518
17519         * class.cs (MethodData.Define): It is wrong for an interface
17520         implementation to be static in both cases: explicit and implicit.
17521         We were only handling this in one case.
17522
17523         Improve the if situation there to not have negations.
17524
17525         * class.cs (Field.Define): Turns out that we do not need to check
17526         the unsafe bit on field definition, only on usage.  Remove the test.
17527
17528 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17529
17530         * driver.cs: use assembly.Location instead of Codebase (the latest
17531         patch made mcs fail when using MS assemblies).
17532
17533 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
17534
17535         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
17536         get the path to *corlib.dll.
17537
17538 2003-01-21  Nick Drochak <ndrochak@gol.com>
17539
17540         * cs-tokenizer.cs:
17541         * pending.cs:
17542         * typemanager.cs: Remove compiler warnings
17543
17544 2003-01-20  Duncan Mak  <duncan@ximian.com>
17545
17546         * AssemblyInfo.cs: Bump the version number to 0.19.
17547
17548 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17549
17550         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
17551
17552 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
17553
17554         * class.cs (Constructor::Emit): Emit debugging info for constructors.
17555
17556 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
17557
17558         * cs-parser.jay: Small fix: we were not comparing the constructor
17559         name correctly.   Thanks to Zoltan for the initial pointer.
17560
17561 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
17562
17563         * cs-tokenizer.cs: Set file name when specified with #line
17564
17565 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
17566
17567         * cs-parser.jay: Only perform the constructor checks here if we
17568         are named like the class;  This will help provider a better
17569         error.  The constructor path is taken when a type definition is
17570         not found, but most likely the user forgot to add the type, so
17571         report that rather than the constructor error.
17572
17573 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
17574
17575         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
17576         allocations.
17577
17578 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
17579
17580         * cs-parser.jay: Add cleanup call.
17581
17582 2003-01-13  Duncan Mak  <duncan@ximian.com>
17583
17584         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
17585         consistent with other methods.
17586
17587 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
17588
17589         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
17590
17591 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
17592
17593         * attribute.cs: only set GuidAttr to true when we have a
17594         GuidAttribute.
17595
17596 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17597
17598         * ecore.cs:
17599         * expression.cs:
17600         * typemanager.cs: fixes to allow mcs compile corlib with the new
17601         Type.IsSubclassOf fix.
17602
17603 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
17604
17605         * expression.cs (LocalVariableReference.DoResolve): Classify a
17606         constant as a value, not as a variable.   Also, set the type for
17607         the variable.
17608
17609         * cs-parser.jay (fixed_statement): take a type instead of a
17610         pointer_type, so we can produce a better error message later.
17611
17612         * statement.cs (Fixed.Resolve): Flag types that are not pointers
17613         as an error.  
17614
17615         (For.DoEmit): Make inifinite loops have a
17616         non-conditional branch back.
17617
17618         (Fixed.DoEmit): First populate the pinned variables, then emit the
17619         statement, then clear the variables.  Before I was emitting the
17620         code once for each fixed piece.
17621
17622
17623 2003-01-08  Martin Baulig  <martin@ximian.com>
17624
17625         * statement.cs (FlowBranching.MergeChild): A break in a
17626         SWITCH_SECTION does not leave a loop.  Fixes #36155.
17627
17628 2003-01-08  Martin Baulig  <martin@ximian.com>
17629
17630         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
17631         lives in the same number space than `param_map'.  Fixes #36154.
17632
17633 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
17634
17635         * cs-parser.jay (constructor_declaration): Set the
17636         Constructor.ModFlags before probing for it.  This makes the
17637         compiler report 514, 515 and 132 (the code was there, but got
17638         broken). 
17639
17640         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
17641         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
17642         (GotoCase.Resolve): Set `Returns' to ALWAYS.
17643
17644 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
17645
17646         * enum.cs: create the enum static fields using the enum type.
17647
17648 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
17649
17650         * class.cs: don't try to create the ParamBuilder for the return
17651         type if it's not needed (and handle it breaking for the ms runtime
17652         anyway).
17653
17654 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
17655
17656         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
17657
17658 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
17659
17660         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
17661         the command.   This showed up while compiling the JANET source
17662         code, which used \r as its only newline separator.
17663
17664 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
17665
17666         * class.cs (Method.Define): If we are an operator (because it
17667         reuses our code), then set the SpecialName and HideBySig.  #36128
17668
17669 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
17670
17671         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
17672         exception, report error 120 `object reference required'.
17673
17674         * driver.cs: Add --pause option, used during to measure the size
17675         of the process as it goes with --timestamp.
17676
17677         * expression.cs (Invocation.DoResolve): Do not allow methods with
17678         SpecialName to be invoked.
17679
17680 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
17681
17682         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
17683         number before adding it.
17684
17685 2002-12-21  Ravi Pratap  <ravi@ximian.com>
17686
17687         * ecore.cs (StandardImplicitConversion): When in an unsafe
17688         context, we allow conversion between void * to any other pointer
17689         type. This fixes bug #35973.
17690
17691 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
17692
17693         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
17694         is not thrown when extensionless outputs are used 
17695
17696 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17697
17698         * rootcontext.cs: fixed compilation of corlib.
17699
17700 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
17701
17702         * attribute.cs (Attributes.Contains): Add new method.
17703
17704         * class.cs (MethodCore.LabelParameters): if the parameter is an
17705         `out' parameter, check that no attribute `[In]' has been passed.
17706
17707         * enum.cs: Handle the `value__' name in an enumeration.
17708
17709 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
17710
17711         * decl.cs: Added special case to allow overrides on "protected
17712         internal" methods
17713
17714 2002-12-18  Ravi Pratap  <ravi@ximian.com>
17715
17716         * attribute.cs (Attributes.AddAttributeSection): Rename to this
17717         since it makes much more sense.
17718
17719         (Attributes.ctor): Don't require a Location parameter.
17720
17721         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
17722
17723         * attribute.cs (ApplyAttributes): Remove extra Location parameters
17724         since we already have that information per attribute.
17725
17726         * everywhere : make appropriate changes.
17727
17728         * class.cs (LabelParameters): Write the code which actually
17729         applies attributes to the return type. We can't do this on the MS
17730         .NET runtime so we flag a warning in the case an exception is
17731         thrown.
17732
17733 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
17734
17735         * const.cs: Handle implicit null conversions here too.
17736
17737 2002-12-17  Ravi Pratap  <ravi@ximian.com>
17738
17739         * class.cs (MethodCore.LabelParameters): Remove the extra
17740         Type [] parameter since it is completely unnecessary. Instead
17741         pass in the method's attributes so that we can extract
17742         the "return" attribute.
17743
17744 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
17745
17746         * cs-parser.jay (parse): Use Report.Error to flag errors instead
17747         of ignoring it and letting the compile continue.
17748
17749         * typemanager.cs (ChangeType): use an extra argument to return an
17750         error condition instead of throwing an exception.
17751
17752 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
17753
17754         * expression.cs (Unary.TryReduce): mimic the code for the regular
17755         code path.  Perform an implicit cast in the cases where we can
17756         implicitly convert to one of the integral types, and then reduce
17757         based on that constant.   This fixes bug #35483.
17758
17759 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17760
17761         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
17762
17763 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17764
17765         * namespace.cs: fixed bug #35489.
17766
17767 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
17768
17769         * class.cs: Remove some dead code.
17770
17771         * cs-parser.jay: Estimate the number of methods needed
17772         (RootContext.MethodCount);
17773
17774         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
17775         numbers instead of StringBuilders.
17776
17777         * support.cs (PtrHashtable): Add constructor with initial size;
17778         We can now reduce reallocations of the method table.
17779
17780 2002-12-10  Ravi Pratap  <ravi@ximian.com>
17781
17782         * attribute.cs (ApplyAttributes): Keep track of the emitted
17783         attributes on a per-target basis. This fixes bug #35413.
17784
17785 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
17786
17787         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
17788         default to the Windows 1252 encoding.
17789
17790         (UnixParseOption): Support version, thanks to Alp for the missing
17791         pointer. 
17792
17793         * AssemblyInfo.cs: Add nice assembly information.
17794
17795         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
17796         (bug 35169).
17797
17798         * cs-parser.jay: Allow a trailing comma before the close bracked
17799         in the attribute_section production.
17800
17801         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
17802         address of the instance was being taken, I will take this out,
17803         because we take the address of the object immediately here.
17804
17805 2002-12-09  Ravi Pratap  <ravi@ximian.com>
17806
17807         * typemanager.cs (AreMultipleAllowed): Take care of the most
17808         obvious case where attribute type is not in the current assembly -
17809         stupid me ;-)
17810
17811 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
17812
17813         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
17814         definitions, instead of doing that afterwards.  
17815
17816         Also we use a nice little hack, depending on the constructor, we
17817         know if we are a "composed" name or a simple name.  Hence, we
17818         avoid the IndexOf test, and we avoid 
17819
17820         * codegen.cs: Add code to assist in a bug reporter to track down
17821         the source of a compiler crash. 
17822
17823 2002-12-07  Ravi Pratap  <ravi@ximian.com>
17824
17825         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
17826         types have been emitted for a given element and flag an error
17827         if something which does not have AllowMultiple set is used more
17828         than once.
17829
17830         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
17831         attribute types and their corresponding AllowMultiple properties
17832
17833         (AreMultipleAllowed): Check the property for a given type.
17834
17835         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
17836         property in the case we have a TypeContainer.
17837
17838         (Attributes.AddAttribute): Detect duplicates and just skip on
17839         adding them. This trivial fix catches a pretty gross error in our
17840         attribute emission - global attributes were being emitted twice!
17841
17842         Bugzilla bug #33187 is now fixed.
17843
17844 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
17845
17846         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
17847         instead of pp_and).
17848
17849         * expression.cs (Binary.ResolveOperator): I can only use the
17850         Concat (string, string, string) and Concat (string, string,
17851         string, string) if the child is actually a concatenation of
17852         strings. 
17853
17854 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
17855
17856         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
17857         context where we need a 2-character lookahead.
17858
17859         * pending.cs (PendingImplementation): Rework so we can keep track
17860         of interface types all the time, and flag those which were
17861         implemented by parents as optional.
17862
17863 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
17864
17865         * expression.cs (Binary.ResolveOperator): Use
17866         String.Concat(string,string,string) or
17867         String.Concat(string,string,string,string) when possible. 
17868
17869         * typemanager: More helper methods.
17870
17871
17872 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
17873
17874         * pending.cs: remove the bogus return from GetMissingInterfaces()
17875         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
17876
17877 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17878
17879         * namespace.cs: avoid duplicated 'using xxx' being added to
17880         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
17881         when we get more than one 'using' statement for the same namespace.
17882         Report a CS0105 warning for it.
17883
17884 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
17885
17886         * cs-tokenizer.cs (consume_identifier): use read directly, instead
17887         of calling getChar/putback, uses internal knowledge of it.    
17888
17889         (xtoken): Reorder tokenizer so most common patterns are checked
17890         first.  This reduces the compilation time in another 5% (from 8.11s
17891         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
17892
17893         The parsing time is 22% of the compilation in mcs, and from that
17894         64% is spent on the tokenization process.  
17895
17896         I tried using a binary search for keywords, but this is slower
17897         than the hashtable.  Another option would be to do a couple of
17898         things:
17899
17900                 * Not use a StringBuilder, instead use an array of chars,
17901                   with a set value.  Notice that this way we could catch
17902                   the 645 error without having to do it *afterwards*.
17903
17904                 * We could write a hand-parser to avoid the hashtable
17905                   compares altogether.
17906
17907         The identifier consumption process takes 37% of the tokenization
17908         time.  Another 15% is spent on is_number.  56% of the time spent
17909         on is_number is spent on Int64.Parse:
17910
17911                 * We could probably choose based on the string length to
17912                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
17913                   computations. 
17914
17915         Another 3% is spend on wrapping `xtoken' in the `token' function.
17916
17917         Handle 0xa0 as whitespace (#34752)
17918
17919 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
17920
17921         * typemanager.cs (IsCLRType): New routine to tell whether a type
17922         is one of the builtin types.  
17923
17924         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
17925         typecode in more places instead of doing pointer comparissions.
17926         We could leverage some knowledge about the way the typecodes are
17927         laid out.
17928
17929         New code to cache namespaces in assemblies, it is currently not
17930         invoked, to be used soon.
17931
17932         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
17933
17934         * expression.cs (Binary.ResolveOperator): specially handle
17935         strings, and do not perform user-defined operator overloading for
17936         built-in types.
17937
17938 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
17939
17940         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
17941         internalcall as it is a pretty simple operation;  Avoid whenever
17942         possible to call Char.IsLetter.
17943
17944         (consume_identifier): Cut by half the number of
17945         hashtable calls by merging the is_keyword and GetKeyword behavior.
17946
17947         Do not short-circuit, because if we do, we
17948         report errors (ie, #if false && true would produce an invalid
17949         directive error);
17950
17951
17952 2002-11-24  Martin Baulig  <martin@ximian.com>
17953
17954         * expression.cs (Cast.TryReduce): If we're in checked syntax,
17955         check constant ranges and report a CS0221.  Fixes #33186.
17956
17957 2002-11-24  Martin Baulig  <martin@ximian.com>
17958
17959         * cs-parser.jay: Make this work for uninitialized variable
17960         declarations in the `for' initializer.  Fixes #32416.
17961
17962 2002-11-24  Martin Baulig  <martin@ximian.com>
17963
17964         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
17965         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
17966
17967 2002-11-24  Martin Baulig  <martin@ximian.com>
17968
17969         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
17970         argument; if true, we also check for user-defined conversions.
17971         This is only needed if both arguments are of a user-defined type.
17972         Fixes #30443, added test-175.cs.
17973         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
17974
17975         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
17976
17977 2002-11-24  Martin Baulig  <martin@ximian.com>
17978
17979         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
17980         function to get the store opcode.
17981         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
17982         only emit the Ldelema if the store opcode is Stobj.  You must run
17983         both test-34 and test-167 to test this.  Fixes #34529.
17984
17985 2002-11-23  Martin Baulig  <martin@ximian.com>
17986
17987         * ecore.cs (Expression.MemberLookup): Added additional
17988         `qualifier_type' argument which is used when we're being called
17989         from MemberAccess.DoResolve() and null if we're called from a
17990         SimpleName lookup.
17991         (Expression.MemberLookupFailed): New method to report errors; this
17992         does the CS1540 check and reports the correct error message.
17993
17994         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
17995         argument for the CS1540 check and redone the way how we're dealing
17996         with private members.  See the comment in the source code for details.
17997         (FilterWithClosure): Reverted this back to revision 1.197; renamed
17998         `closure_start_type' to `closure_qualifier_type' and check whether
17999         it's not null.  It was not this filter being broken, it was just
18000         being called with the wrong arguments.
18001
18002         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
18003         and pass it the correct `qualifier_type'; this also does the error
18004         handling for us.
18005
18006 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
18007
18008         * expression.cs (Invocation.EmitParams): If the we are dealing
18009         with a non-built-in value type, load its address as well.
18010
18011         (ArrayCreation): Use a a pretty constant instead
18012         of the hardcoded value 2.   Use 6 instead of 2 for the number of
18013         static initializers.  
18014
18015         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
18016         because they are not really value types, just glorified integers. 
18017
18018         * driver.cs: Do not append .exe, the CSC compiler does not do it.
18019
18020         * ecore.cs: Remove redundant code for enumerations, make them use
18021         the same code path as everything else, fixes the casting issue
18022         with enumerations in Windows.Forms.
18023
18024         * attribute.cs: Do only cast to string if it is a string, the
18025         validation happens later.
18026
18027         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
18028         people upgrade their corlibs.
18029
18030         * ecore.cs: Oops, enumerations were not following the entire code path
18031
18032 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
18033
18034         * typemanager.cs (FilterWithClosure): Commented out the test for
18035         1540 in typemanager.cs, as it has problems when accessing
18036         protected methods from a parent class (see test-174.cs). 
18037
18038         * attribute.cs (Attribute.ValidateGuid): new method.
18039         (Attribute.Resolve): Use above.
18040
18041 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
18042
18043         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
18044
18045         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
18046         handling for enumerations, as we only needed the TypeContainer
18047         functionality to begin with (this is required for the fix below to
18048         work for enums that reference constants in a container class for
18049         example). 
18050
18051         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
18052
18053         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
18054         a valid TypeBuilder to perform lookups on.o
18055
18056         * class.cs (InheritableMemberSignatureCompare): Use true in the
18057         call to GetGetMethod and GetSetMethod, because we are comparing
18058         the signature, and we need to get the methods *even* if they are
18059         private. 
18060
18061         (PropertyBase.CheckBase): ditto.
18062
18063         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
18064         GotoCase.Resolve): Use Peel on EmpytCasts.
18065
18066         * ecore.cs (EmptyCast): drop child, add Peel method.
18067
18068 2002-11-17  Martin Baulig  <martin@ximian.com>
18069
18070         * ecore.cs (EmptyCast.Child): New public property.
18071
18072         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
18073         label resolved to an EmptyCast.  Fixes #34162.
18074         (GotoCase.Resolve): Likewise.
18075         (Block.EmitMeta): Likewise.
18076
18077 2002-11-17  Martin Baulig  <martin@ximian.com>
18078
18079         * expression.cs (Invocation.BetterConversion): Prefer int over
18080         uint; short over ushort; long over ulong for integer literals.
18081         Use ImplicitConversionExists instead of StandardConversionExists
18082         since we also need to check for user-defined implicit conversions.
18083         Fixes #34165.  Added test-173.cs.
18084
18085 2002-11-16  Martin Baulig  <martin@ximian.com>
18086
18087         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
18088         with the `true' and `false' literals.  Fixes #33151.
18089
18090 2002-11-16  Martin Baulig  <martin@ximian.com>
18091
18092         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
18093         October 22nd; don't do the cs1540 check for static members.
18094
18095         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
18096         now using our own filter here and doing the cs1540 check again.
18097
18098 2002-11-16  Martin Baulig  <martin@ximian.com>
18099
18100         * support.cs (InternalParameters): Don't crash if we don't have
18101         any fixed parameters.  Fixes #33532.
18102
18103 2002-11-16  Martin Baulig  <martin@ximian.com>
18104
18105         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
18106         when looking up static methods to make this work on Windows.
18107         Fixes #33773.
18108
18109 2002-11-16  Martin Baulig  <martin@ximian.com>
18110
18111         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
18112         a setter rather than using PropertyInfo.CanWrite.
18113
18114 2002-11-15  Nick Drochak  <ndrochak@gol.com>
18115
18116         * class.cs: Allow acces to block member by subclasses. Fixes build
18117         breaker.
18118
18119 2002-11-14  Martin Baulig  <martin@ximian.com>
18120
18121         * class.cs (Constructor.Emit): Added the extern/block check.
18122         Fixes bug #33678.
18123
18124 2002-11-14  Martin Baulig  <martin@ximian.com>
18125
18126         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
18127         iteration while looking for indexers, this is needed because the
18128         indexer may have a different name in our base classes.  Fixed the
18129         error reporting (no indexers at all, not get accessor, no
18130         overloaded match).  Fixes bug #33089.
18131         (IndexerAccess.DoResolveLValue): Likewise.
18132
18133 2002-11-14  Martin Baulig  <martin@ximian.com>
18134
18135         * class.cs (PropertyBase.CheckBase): Make this work for multiple
18136         indexers.  Fixes the first part of bug #33089.
18137         (MethodSignature.InheritableMemberSignatureCompare): Added support
18138         for properties.
18139
18140 2002-11-13  Ravi Pratap  <ravi@ximian.com>
18141
18142         * attribute.cs (Attribute.Resolve): Catch the
18143         NullReferenceException and report it since it isn't supposed to
18144         happen. 
18145
18146 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
18147
18148         * expression.cs (Binary.EmitBranchable): Also handle the cases for
18149         LogicalOr and LogicalAnd that can benefit from recursively
18150         handling EmitBranchable.  The code now should be nice for Paolo.
18151
18152 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
18153
18154         * typemanager.cs (LookupType): Added a negative-hit hashtable for
18155         the Type lookups, as we perform quite a number of lookups on
18156         non-Types.  This can be removed once we can deterministically tell
18157         whether we have a type or a namespace in advance.
18158
18159         But this might require special hacks from our corlib.
18160
18161         * TODO: updated.
18162
18163         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
18164         and double which avoids a conversion from an integer to a double.
18165
18166         * expression.cs: tiny optimization, avoid calling IsConstant,
18167         because it effectively performs the lookup twice.
18168
18169 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
18170
18171         But a bogus return here to keep the semantics of the old code
18172         until the Mono runtime is fixed.
18173
18174         * pending.cs (GetMissingInterfaces): New method used to remove all
18175         the interfaces that are already implemented by our parent
18176         classes from the list of pending methods. 
18177
18178         * interface.cs: Add checks for calls after ResolveTypeExpr.
18179
18180 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
18181
18182         * class.cs (Class.Emit): Report warning 67: event not used if the
18183         warning level is beyond 3.
18184
18185         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
18186         being a NullLiteral.
18187
18188         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
18189         specifiers. 
18190
18191         * class.cs (TypeContainer.GetClassBases): Cover a missing code
18192         path that might fail if a type can not be resolved.
18193
18194         * expression.cs (Binary.Emit): Emit unsigned versions of the
18195         operators. 
18196
18197         * driver.cs: use error 5.
18198
18199 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
18200
18201         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
18202
18203 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
18204
18205         * cs-parser.jay (switch_section): A beautiful patch from Martin
18206         Baulig that fixed 33094.
18207
18208 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
18209
18210         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
18211         Check whether the base is abstract and report an error if so.
18212
18213         * expression.cs (IndexerAccess.DoResolveLValue,
18214         IndexerAccess.DoResolve): ditto. 
18215
18216         (Invocation.DoResolve): ditto.
18217
18218         (Invocation.FullMethodDesc): Improve the report string.
18219
18220         * statement.cs (Block): Eliminate IsVariableDefined as it is
18221         basically just a wrapper for GetVariableInfo.
18222
18223         * ecore.cs (SimpleName): Use new 
18224
18225         * support.cs (ReflectionParamter.ParameterType): We unwrap the
18226         type, as we return the actual parameter ref/unref state on a
18227         different call.
18228
18229 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
18230
18231         * support.cs: Return proper flags REF/OUT fixing the previous
18232         commit.  
18233
18234         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
18235         not used to mean `ref' but `ref or out' in ParameterReference
18236
18237         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
18238         full type signature instead of calling TypeManger.CSharpName
18239         ourselves. 
18240
18241         * support.cs (InternalParameters.ParameterDesc): Do not compare
18242         directly to the modflags, because REF/OUT will actually be bitsets
18243         if set. 
18244
18245         * delegate.cs (VerifyMethod): Check also the modifiers.
18246
18247         * cs-tokenizer.cs: Fix bug where floating point values with an
18248         exponent where a sign was missing was ignored.
18249
18250         * driver.cs: Allow multiple assemblies to be specified in a single
18251         /r: argument
18252
18253 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
18254
18255         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
18256         because identifiers after a parenthesis would end up in this kind
18257         of production, and we needed to desamiguate it for having casts
18258         like:
18259
18260                 (UserDefinedType *) xxx
18261
18262 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
18263
18264         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
18265         we should set on the Bindingflags.NonPublic, but not turn on
18266         private_ok.  private_ok controls whether a Private member is
18267         returned (this is chekced on the filter routine), while the
18268         BindingFlags.NonPublic just controls whether private/protected
18269         will be allowed.   This fixes the problem part of the problem of
18270         private properties being allowed to be used in derived classes.
18271
18272         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
18273         so we can call the children DoResolveLValue method (this will
18274         properly signal errors on lvalue assignments to base properties)
18275
18276         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
18277         getter are null, and we have a property info, we know that this
18278         happened because the lookup failed, so we report an error 122 for
18279         protection level violation.
18280
18281         We also silently return if setter and getter are null in the
18282         resolve functions, this condition only happens if we have flagged
18283         the error before.  This is the other half of the problem. 
18284
18285         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
18286         not have accessibility information, that is why we were returning
18287         true in the filter function in typemanager.cs.
18288
18289         To properly report 122 (property is inaccessible because of its
18290         protection level) correctly, we report this error in ResolveAccess
18291         by failing if both the setter and the getter are lacking (ie, the
18292         lookup failed). 
18293
18294         DoResolve and DoLResolve have been modified to check for both
18295         setter/getter being null and returning silently, the reason being
18296         that I did not want to put the knowledge about this error in upper
18297         layers, like:
18298
18299         int old = Report.Errors;
18300         x = new PropertyExpr (...);
18301         if (old != Report.Errors)
18302                 return null;
18303         else
18304                 return x;
18305
18306         So the property expr is returned, but it is invalid, so the error
18307         will be flagged during the resolve process. 
18308
18309         * class.cs: Remove InheritablePropertySignatureCompare from the
18310         class, as we no longer depend on the property signature to compute
18311         whether it is possible to implement a method or not.
18312
18313         The reason is that calling PropertyInfo.GetGetMethod will return
18314         null (in .NET, in Mono it works, and we should change this), in
18315         cases where the Get Method does not exist in that particular
18316         class.
18317
18318         So this code:
18319
18320         class X { public virtual int A { get { return 1; } } }
18321         class Y : X { }
18322         class Z : Y { public override int A { get { return 2; } } }
18323
18324         Would fail in Z because the parent (Y) would not have the property
18325         defined.  So we avoid this completely now (because the alternative
18326         fix was ugly and slow), and we now depend exclusively on the
18327         method names.
18328
18329         (PropertyBase.CheckBase): Use a method-base mechanism to find our
18330         reference method, instead of using the property.
18331
18332         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
18333         routines are gone now.
18334
18335         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
18336         names, they were incorrectly named.
18337
18338         * cs-tokenizer.cs: Return are more gentle token on failure. 
18339
18340         * pending.cs (PendingImplementation.InterfaceMethod): This routine
18341         had an out-of-sync index variable, which caused it to remove from
18342         the list of pending methods the wrong method sometimes.
18343
18344 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
18345
18346         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
18347         CanWrite, because those refer to this particular instance of the
18348         property, and do not take into account the fact that we can
18349         override single members of a property.
18350
18351         Constructor requires an EmitContext.  The resolution process does
18352         not happen here, but we need to compute the accessors before,
18353         because the resolution does not always happen for properties.
18354
18355         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
18356         subclass, before we did not update this flag, but we did update
18357         bindingflags. 
18358
18359         (GetAccessors): Drop this routine, as it did not work in the
18360         presence of partially overwritten set/get methods. 
18361
18362         Notice that this broke the cs1540 detection, but that will require
18363         more thinking. 
18364
18365 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18366
18367         * class.cs:
18368         * codegen.cs:
18369         * driver.cs: issue a warning instead of an error if we don't support
18370         debugging for the platform. Also ignore a couple of errors that may
18371         arise when trying to write the symbols. Undo my previous patch.
18372
18373 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18374
18375         * driver.cs: ignore /debug switch except for Unix platforms.
18376
18377 2002-10-23  Nick Drochak  <ndrochak@gol.com>
18378
18379         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
18380
18381 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
18382
18383         * driver.cs: Do not make mcs-debug conditional, so we do not break
18384         builds that use it.
18385
18386         * statement.cs (UsageVector.MergeChildren): I would like Martin to
18387         review this patch.  But basically after all the children variables
18388         have been merged, the value of "Breaks" was not being set to
18389         new_breaks for Switch blocks.  I think that it should be set after
18390         it has executed.  Currently I set this to the value of new_breaks,
18391         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
18392         conservative, but I do not understand this code very well.
18393
18394         I did not break anything in the build, so that is good ;-)
18395
18396         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
18397
18398 2002-10-20  Mark Crichton  <crichton@gimp.org>
18399
18400         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
18401
18402 2002-10-20  Nick Drochak  <ndrochak@gol.com>
18403
18404         * cfold.cs: Fixed compile blocker.
18405
18406 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
18407
18408         * driver.cs: I was chekcing the key, not the file.
18409
18410 2002-10-19  Ravi Pratap  <ravi@ximian.com>
18411
18412         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
18413         message that we were generating - we just need to silently return
18414         a null.
18415
18416 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
18417
18418         * class.cs (Event.Define): Change my previous commit, as this
18419         breaks the debugger.  This is a temporary hack, as it seems like
18420         the compiler is generating events incorrectly to begin with.
18421
18422         * expression.cs (Binary.ResolveOperator): Added support for 
18423         "U operator - (E x, E y)"
18424
18425         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
18426         y)".
18427
18428         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
18429         init-only variables, but this path did not take into account that
18430         there might be also instance readonly variables.  Correct this
18431         problem. 
18432
18433         This fixes bug 32253
18434
18435         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
18436         delegates as well.
18437
18438         * driver.cs: Change the extension for modules to `netmodule'
18439
18440         * cs-parser.jay: Improved slightly the location tracking for
18441         the debugger symbols.
18442
18443         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
18444         modifiers that were specified instead of the hardcoded value
18445         (FamAndAssem).  This was basically ignoring the static modifier,
18446         and others.  Fixes 32429.
18447
18448         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
18449         fixed a bug in the process (32476)
18450
18451         * expression.cs (ArrayAccess.EmitAssign): Patch from
18452         hwang_rob@yahoo.ca that fixes bug 31834.3
18453
18454 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
18455
18456         * driver.cs: Make the module extension .netmodule.
18457
18458 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
18459
18460         * driver.cs: Report an error if the resource file is not found
18461         instead of crashing.
18462
18463         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
18464         false, like Emit does.
18465
18466 2002-10-16  Nick Drochak  <ndrochak@gol.com>
18467
18468         * typemanager.cs: Remove unused private member.  Also reported mcs
18469         bug to report this as a warning like csc.
18470
18471 2002-10-15  Martin Baulig  <martin@gnome.org>
18472
18473         * statement.cs (Statement.Emit): Made this a virtual method; emits
18474         the line number info and calls DoEmit().
18475         (Statement.DoEmit): New protected abstract method, formerly knows
18476         as Statement.Emit().
18477
18478         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
18479
18480 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
18481
18482         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
18483         have fixed a remaining problem: not every AddXXXX was adding a
18484         fully qualified name.  
18485
18486         Now everyone registers a fully qualified name in the DeclSpace as
18487         being defined instead of the partial name.  
18488
18489         Downsides: we are slower than we need to be due to the excess
18490         copies and the names being registered this way.  
18491
18492         The reason for this is that we currently depend (on the corlib
18493         bootstrap for instance) that types are fully qualified, because
18494         we dump all the types in the namespace, and we should really have
18495         types inserted into the proper namespace, so we can only store the
18496         basenames in the defined_names array.
18497
18498 2002-10-10  Martin Baulig  <martin@gnome.org>
18499
18500         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
18501         from bug #31834, see the bug report for a testcase which is
18502         miscompiled.
18503
18504 2002-10-10  Martin Baulig  <martin@gnome.org>
18505
18506         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
18507         flow analysis code for this.
18508
18509         * statement.cs (Do, While, For): Tell the flow analysis code about
18510         infinite loops.
18511         (FlowBranching.UsageVector): Added support for infinite loops.
18512         (Block.Resolve): Moved the dead code elimination here and use flow
18513         analysis to do it.
18514
18515 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
18516
18517         * class.cs (Field.Define): Catch cycles on struct type
18518         definitions. 
18519
18520         * typemanager.cs (IsUnmanagedtype): Do not recursively check
18521         fields if the fields are static.  We only need to check instance
18522         fields. 
18523
18524         * expression.cs (As.DoResolve): Test for reference type.
18525
18526         * statement.cs (Using.ResolveExpression): Use
18527         ConvertImplicitRequired, not ConvertImplicit which reports an
18528         error on failture
18529         (Using.ResolveLocalVariableDecls): ditto.
18530
18531         * expression.cs (Binary.ResolveOperator): Report errors in a few
18532         places where we had to.
18533
18534         * typemanager.cs (IsUnmanagedtype): Finish implementation.
18535
18536 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
18537
18538         * expression.cs: Use StoreFromPtr instead of extracting the type
18539         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
18540
18541         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
18542         an enumeration value to a System.Enum, but System.Enum is not a
18543         value type, but an class type, so we need to box.
18544
18545         (Expression.ConvertExplicit): One codepath could return
18546         errors but not flag them.  Fix this.  Fixes #31853
18547
18548         * parameter.cs (Resolve): Do not allow void as a parameter type.
18549
18550 2002-10-06  Martin Baulig  <martin@gnome.org>
18551
18552         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
18553         if it's a class type and not a struct.  Fixes #31815.
18554
18555 2002-10-06  Martin Baulig  <martin@gnome.org>
18556
18557         * statement.cs: Reworked the flow analysis code a bit to make it
18558         usable for dead code elimination.
18559
18560 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18561
18562         * cs-parser.jay: allow empty source files. Fixes bug #31781.
18563
18564 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
18565
18566         * expression.cs (ComposedCast.DoResolveType): A quick workaround
18567         to fix the test 165, will investigate deeper.
18568
18569 2002-10-04  Martin Baulig  <martin@gnome.org>
18570
18571         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
18572         finally blocks actually work.
18573         (Try.Resolve): We don't need to create a sibling for `finally' if
18574         there is no finally block.
18575
18576 2002-10-04  Martin Baulig  <martin@gnome.org>
18577
18578         * class.cs (Constructor.Define): The default accessibility for a
18579         non-default constructor is private, not public.
18580
18581 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
18582
18583         * class.cs (Constructor): Make AllowedModifiers public, add
18584         EXTERN.
18585
18586         * cs-parser.jay: Perform the modifiers test here, as the
18587         constructor for the Constructor class usually receives a zero
18588         because of the way we create it (first we create, later we
18589         customize, and we were never checking the modifiers).
18590
18591         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
18592         is a version of LookupTypeReflection that includes the type-name
18593         cache.  This can be used as a fast path for functions that know
18594         the fully qualified name and are only calling into *.GetType() to
18595         obtain a composed type.
18596
18597         This is also used by TypeManager.LookupType during its type
18598         composition.
18599
18600         (LookupType): We now also track the real type name, as sometimes
18601         we can get a quey for the real type name from things like
18602         ComposedCast.  This fixes bug 31422.
18603
18604         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
18605         complete type fullname, it does not have to go through the type
18606         resolution system to obtain the composed version of the type (for
18607         obtaining arrays or pointers).
18608
18609         (Conditional.Emit): Use the EmitBoolExpression to
18610         generate nicer code, as requested by Paolo.
18611
18612         (ArrayCreation.CheckIndices): Use the patch from
18613         hwang_rob@yahoo.ca to validate the array initializers. 
18614
18615 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
18616
18617         * class.cs (ConstructorInitializer.Emit): simplify code by using
18618         Invocation.EmitCall, and at the same time, fix the bugs in calling
18619         parent constructors that took variable arguments. 
18620
18621         * ecore.cs (Expression.ConvertNumericExplicit,
18622         Expression.ImplicitNumericConversion): Remove the code that
18623         manually wrapped decimal (InternalTypeConstructor call is now gone
18624         as well).
18625
18626         * expression.cs (Cast.TryReduce): Also handle decimal types when
18627         trying to perform a constant fold on the type.
18628
18629         * typemanager.cs (IsUnmanagedtype): Partially implemented.
18630
18631         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
18632         that only turned off an error report, and did nothing else. 
18633
18634 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
18635
18636         * driver.cs: Handle and ignore /fullpaths
18637
18638 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
18639
18640         * expression.cs (Binary.ResolveOperator): Catch the case where
18641         DoNumericPromotions returns true, 
18642
18643         (Binary.DoNumericPromotions): Simplify the code, and the tests.
18644
18645 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
18646
18647         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
18648         report error 70.
18649
18650 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
18651
18652         * ecore.cs (ConvertNumericExplicit): It is not enough that the
18653         conversion exists, but it is also required that the conversion be
18654         performed.  This manifested in "(Type64Enum) 2".  
18655
18656         * class.cs (TypeManager.AddMethod): The fix is not to change
18657         AddEnum, because that one was using a fully qualified name (every
18658         DeclSpace derivative does), but to change the AddMethod routine
18659         that was using an un-namespaced name.  This now correctly reports
18660         the duplicated name.
18661
18662         Revert patch until I can properly fix it.  The issue
18663         is that we have a shared Type space across all namespaces
18664         currently, which is wrong.
18665
18666         Options include making the Namespace a DeclSpace, and merge
18667         current_namespace/current_container in the parser.
18668
18669 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
18670
18671         * cs-parser.jay: Improve error reporting when we get a different
18672         kind of expression in local_variable_type and
18673         local_variable_pointer_type. 
18674
18675         Propagate this to avoid missleading errors being reported.
18676
18677         * ecore.cs (ImplicitReferenceConversion): treat
18678         TypeManager.value_type as a target just like object_type.   As
18679         code like this:
18680
18681         ValueType v = 1;
18682
18683         Is valid, and needs to result in the int 1 being boxed before it
18684         is assigned to the value type v.
18685
18686         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
18687         to validate the enumeration name.
18688
18689         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
18690         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
18691         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
18692
18693         * ecore.cs (TryImplicitIntConversion): When doing an
18694         implicit-enumeration-conversion, check if the type is 64-bits and
18695         perform a conversion before passing to EnumConstant.
18696
18697 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
18698
18699         * decl.cs (Error_AmbiguousTypeReference); New routine used to
18700         report ambiguous type references.  Unlike the MS version, we
18701         report what the ambiguity is.   Innovation at work ;-)
18702
18703         (DeclSpace.FindType): Require a location argument to
18704         display when we display an ambiguous error.
18705
18706         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
18707
18708         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
18709
18710         * expression.cs (EmitDynamicInitializers): Apply patch from
18711         hwang_rob@yahoo.ca that fixes the order in which we emit our
18712         initializers. 
18713
18714 2002-09-21  Martin Baulig  <martin@gnome.org>
18715
18716         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
18717         delegate takes no arguments.
18718
18719 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
18720
18721         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
18722         from integers.
18723
18724         * expression.cs: Extract the underlying type.
18725
18726         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
18727
18728         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
18729
18730 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
18731
18732         * class.cs (TypeContainer.DefineType): We can not use the nice
18733         PackingSize with the size set to 1 DefineType method, because it
18734         will not allow us to define the interfaces that the struct
18735         implements.
18736
18737         This completes the fixing of bug 27287
18738
18739         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
18740         means also structs.  This fixes part of the problem. 
18741         (Expresion.ImplicitReferenceConversionExists): ditto.
18742
18743         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
18744         error if there were no errors reported during the type lookup
18745         process, to avoid duplicates or redundant errors.  Without this
18746         you would get an ambiguous errors plus a type not found.  We have
18747         beaten the user enough with the first error.  
18748
18749         (DeclSparce.FindType): Emit a warning if we have an ambiguous
18750         reference. 
18751
18752         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
18753         during the resolution process, stop the lookup, this avoids
18754         repeated error reports (same error twice).
18755
18756         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
18757
18758         * typemanager.cs (LookupType): Redo the type lookup code to match
18759         the needs of System.Reflection.  
18760
18761         The issue is that System.Reflection requires references to nested
18762         types to begin with a "+" sign instead of a dot.  So toplevel
18763         types look like: "NameSpace.TopLevelClass", and nested ones look
18764         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
18765         levels. 
18766
18767 2002-09-19  Martin Baulig  <martin@gnome.org>
18768
18769         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
18770         says that a method always returns or always throws an exception,
18771         don't report the CS0161.
18772
18773         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
18774         set `Returns = new_returns'.
18775
18776 2002-09-19  Martin Baulig  <martin@gnome.org>
18777
18778         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
18779         to an enum constant, check for a CS0176.
18780
18781 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
18782
18783         * class.cs (TypeContainer.CheckPairedOperators): Now we check
18784         for operators that must be in pairs and report errors.
18785
18786         * ecore.cs (SimpleName.DoResolveType): During the initial type
18787         resolution process, when we define types recursively, we must
18788         check first for types in our current scope before we perform
18789         lookups in the enclosing scopes.
18790
18791         * expression.cs (MakeByteBlob): Handle Decimal blobs.
18792
18793         (Invocation.VerifyArgumentsCompat): Call
18794         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
18795         I thought we were supposed to always call this, but there are a
18796         few places in the code where we dont do it.
18797
18798 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
18799
18800         * driver.cs: Add support in -linkres and -resource to specify the
18801         name of the identifier.
18802
18803 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
18804
18805         * ecore.cs (StandardConversionExists): Sync with the conversion
18806         code: allow anything-* to void* conversions.
18807
18808         (FindMostSpecificSource): Use an Expression argument
18809         instead of a Type, because we might be handed over a Literal which
18810         gets a few more implicit conversions that plain types do not.  So
18811         this information was being lost.
18812
18813         Also, we drop the temporary type-holder expression when not
18814         required.
18815
18816 2002-09-17  Martin Baulig  <martin@gnome.org>
18817
18818         * class.cs (PropertyBase.CheckBase): Don't check the base class if
18819         this is an explicit interface implementation.
18820
18821 2002-09-17  Martin Baulig  <martin@gnome.org>
18822
18823         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
18824         different `IndexerName' attributes.
18825
18826         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
18827         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
18828         virtual CommonResolve().
18829
18830 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
18831
18832         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
18833         and convert that to the UnderlyingType.
18834
18835         * statement.cs (Foreach.Resolve): Indexers are just like variables
18836         or PropertyAccesses.
18837
18838         * cs-tokenizer.cs (consume_string): Track line numbers and columns
18839         inside quoted strings, we were not doing this before.
18840
18841 2002-09-16  Martin Baulig  <martin@gnome.org>
18842
18843         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
18844         resolve it.  This is needed for the definite assignment check of the
18845         instance expression, fixes bug #29846.
18846         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
18847
18848 2002-09-16  Nick Drochak  <ndrochak@gol.com>
18849
18850         * parameter.cs: Fix compile error.  Cannot reference static member
18851         from an instance object.  Is this an mcs bug?
18852
18853 2002-09-14  Martin Baulig  <martin@gnome.org>
18854
18855         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
18856         multiple times.  Fixes bug #30295, added test-166.cs.
18857
18858 2002-09-14  Martin Baulig  <martin@gnome.org>
18859
18860         * statement.cs (Block.Emit): Don't emit unreachable code.
18861         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
18862         `break' statements.
18863         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
18864
18865 2002-09-14  Martin Baulig  <martin@gnome.org>
18866
18867         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
18868         is set.
18869
18870 2002-09-14  Martin Baulig  <martin@gnome.org>
18871
18872         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
18873         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
18874         be false on the ms runtime.
18875
18876 2002-09-13  Martin Baulig  <martin@gnome.org>
18877
18878         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
18879         the CS0038 error message.
18880
18881 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
18882
18883         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
18884         constant inside, return it.
18885
18886 2002-09-12  Martin Baulig  <martin@gnome.org>
18887
18888         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
18889         implicit conversion can be done between enum types.
18890
18891         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
18892         check whether an implicit conversion to the current enum's UnderlyingType
18893         exists and report an error if not.
18894
18895         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
18896         without debugging support.
18897
18898         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
18899         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
18900
18901 2002-09-12  Martin Baulig  <martin@gnome.org>
18902
18903         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
18904
18905         * ecore.cs (IMemberExpr.DeclaringType): New property.
18906         (SimpleName.SimpleNameResolve): Check whether we're accessing a
18907         nonstatic member of an outer type (CS0038).
18908
18909 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
18910
18911         * driver.cs: Activate the using-error detector at warning level
18912         4 (at least for MS-compatible APIs).
18913
18914         * namespace.cs (VerifyUsing): Small buglett fix.
18915
18916         * pending.cs (PendingImplementation): pass the container pointer. 
18917
18918         * interface.cs (GetMethods): Allow for recursive definition.  Long
18919         term, I would like to move every type to support recursive
18920         definitions, not the current ordering mechanism that we have right
18921         now.
18922
18923         The situation is this: Attributes are handled before interfaces,
18924         so we can apply attributes to interfaces.  But some attributes
18925         implement interfaces, we will now handle the simple cases
18926         (recursive definitions will just get an error).  
18927
18928         * parameter.cs: Only invalidate types at the end if we fail to
18929         lookup all types.  
18930
18931 2002-09-09  Martin Baulig  <martin@gnome.org>
18932
18933         * ecore.cs (PropertyExpr.Emit): Also check for
18934         TypeManager.system_int_array_get_length so this'll also work when
18935         compiling corlib.  Fixes #30003.
18936
18937 2002-09-09  Martin Baulig  <martin@gnome.org>
18938
18939         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
18940         and throw an exception if we can't get the type's size.  Fixed #30040,
18941         added test-165.cs.
18942
18943 2002-09-09  Martin Baulig  <martin@gnome.org>
18944
18945         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
18946
18947         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
18948         context.  Fixes bug #30027.
18949
18950         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
18951         virtual functions.  Fixes bug #30043, added test-164.cs.
18952
18953 2002-09-08  Ravi Pratap  <ravi@ximian.com>
18954
18955         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
18956
18957 2002-09-08  Nick Drochak  <ndrochak@gol.com>
18958
18959         * driver.cs: Use an object to get the windows codepage since it's not a
18960         static property.
18961
18962 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
18963
18964         * statement.cs (For.Emit): for infinite loops (test == null)
18965         return whether there is a break inside, not always "true".
18966
18967         * namespace.cs (UsingEntry): New struct to hold the name of the
18968         using definition, the location where it is defined, and whether it
18969         has been used in a successful type lookup.
18970
18971         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
18972         strings.
18973
18974         * decl.cs: ditto.
18975
18976 2002-09-06  Ravi Pratap  <ravi@ximian.com>
18977
18978         * attribute.cs : Fix incorrect code which relied on catching
18979         a NullReferenceException to detect a null being passed in
18980         where an object was expected.
18981
18982 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
18983
18984         * statement.cs (Try): flag the catch variable as assigned
18985
18986         * expression.cs (Cast): Simplified by using ResolveType instead of
18987         manually resolving.
18988
18989         * statement.cs (Catch): Fix bug by using ResolveType.
18990
18991 2002-09-06  Ravi Pratap  <ravi@ximian.com>
18992
18993         * expression.cs (BetterConversion): Special case for when we have
18994         a NullLiteral as the argument and we have to choose between string
18995         and object types - we choose string the way csc does.
18996
18997         * attribute.cs (Attribute.Resolve): Catch the
18998         NullReferenceException and report error #182 since the Mono
18999         runtime no more has the bug and having this exception raised means
19000         we tried to select a constructor which takes an object and is
19001         passed a null.
19002
19003 2002-09-05  Ravi Pratap  <ravi@ximian.com>
19004
19005         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
19006         message (1502, 1503) when we can't locate a method after overload
19007         resolution. This is much more informative and closes the bug
19008         Miguel reported.
19009
19010         * interface.cs (PopulateMethod): Return if there are no argument
19011         types. Fixes a NullReferenceException bug.
19012
19013         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
19014         expressions too. Previously we were checking only in one place for
19015         positional arguments leaving out named arguments.
19016
19017         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
19018         type to the enum type is not allowed. Remove code corresponding to
19019         that.
19020
19021         (ConvertNumericExplicit): Allow explicit conversions from
19022         the underlying type to enum type. This precisely follows the spec
19023         and closes a bug filed by Gonzalo.
19024
19025 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19026
19027         * compiler.csproj:
19028         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
19029
19030 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
19031
19032         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
19033         it was important that we stored the right value after the
19034         reduction in `converted'.
19035
19036 2002-09-04  Martin Baulig  <martin@gnome.org>
19037
19038         * location.cs (Location.SymbolDocument): Use full pathnames for the
19039         source files.
19040
19041 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
19042
19043         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
19044         of the expression resolve mechanism, because that will catch the
19045         SimpleName error failures.
19046
19047         (Conditional): If we can not resolve the
19048         expression, return, do not crash.
19049
19050 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19051
19052         * cs-tokenizer.cs:
19053         (location): display token name instead of its number.
19054
19055 2002-08-28  Martin Baulig  <martin@gnome.org>
19056
19057         * expression.cs (Binary.ResolveOperator): Don't silently return
19058         but return an error if an operator cannot be applied between two
19059         enum types.
19060
19061 2002-08-28  Martin Baulig  <martin@gnome.org>
19062
19063         * class.cs (Constructor.Define): Set the permission attributes
19064         correctly instead of making all constructors public.
19065
19066 2002-08-28  Martin Baulig  <martin@gnome.org>
19067
19068         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
19069         for private members before reporting a CS0103; if we find anything,
19070         it's a CS0122.
19071
19072 2002-08-28  Martin Baulig  <martin@gnome.org>
19073
19074         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
19075         to check whether `closure_start_type == closure_invocation_type',
19076         we also need to check whether `m.DeclaringType == closure_invocation_type'
19077         before bypassing the permission checks.  We might be accessing
19078         protected/private members from the base class.
19079         (TypeManager.RealMemberLookup): Only set private_ok if private
19080         members were requested via BindingFlags.NonPublic.
19081
19082         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
19083
19084         * expression.cs (MemberAccess.ResolveMemberAccess): Set
19085         MethodGroupExpr.IsExplicitImpl if appropriate.
19086         (Invocation.DoResolve): Don't report the CS0120 for explicit
19087         interface implementations.
19088
19089 2002-08-27  Martin Baulig  <martin@gnome.org>
19090
19091         * expression.cs (Invocation.DoResolve): If this is a static
19092         method and we don't have an InstanceExpression, we must report
19093         a CS0120.
19094
19095 2002-08-25  Martin Baulig  <martin@gnome.org>
19096
19097         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
19098         `==' between a valuetype and an object.
19099
19100 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
19101
19102         * ecore.cs (TypeExpr): Provide a ToString method.
19103
19104 2002-08-24  Martin Baulig  <martin@gnome.org>
19105
19106         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
19107         now called proggie.dbg and it's a binary file.
19108
19109 2002-08-23  Martin Baulig  <martin@gnome.org>
19110
19111         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
19112
19113 2002-08-23  Martin Baulig  <martin@gnome.org>
19114
19115         * struct.cs (MyStructInfo.ctor): Make this work with empty
19116         structs; it's not allowed to use foreach() on null.
19117
19118 2002-08-23  Martin Baulig  <martin@gnome.org>
19119
19120         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
19121         writer the full pathname of the generated assembly.
19122
19123 2002-08-23  Martin Baulig  <martin@gnome.org>
19124
19125         * statements.cs (FlowBranching.UsageVector.MergeChildren):
19126         A `finally' block never returns or breaks; improved handling of
19127         unreachable code.
19128
19129 2002-08-23  Martin Baulig  <martin@gnome.org>
19130
19131         * statement.cs (Throw.Resolve): Allow `throw null'.
19132
19133 2002-08-23  Martin Baulig  <martin@gnome.org>
19134
19135         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
19136         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
19137         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
19138         MemberLookup would return a wrong event if this is an explicit
19139         interface implementation and the class has an event with the same
19140         name.
19141
19142 2002-08-23  Martin Baulig  <martin@gnome.org>
19143
19144         * statement.cs (Block.AddChildVariableNames): New public method.
19145         (Block.AddChildVariableName): Likewise.
19146         (Block.IsVariableNameUsedInChildBlock): Likewise.
19147         (Block.AddVariable): Check whether a variable name has already
19148         been used in a child block.
19149
19150         * cs-parser.jay (declare_local_variables): Mark all variable names
19151         from the current block as being used in a child block in the
19152         implicit block.
19153
19154 2002-08-23  Martin Baulig  <martin@gnome.org>
19155
19156         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
19157         find the symbol writer.
19158
19159         * driver.cs: csc also allows the arguments to /define being
19160         separated by commas, not only by semicolons.
19161
19162 2002-08-23  Martin Baulig  <martin@gnome.org>
19163
19164         * interface.cs (Interface.GetMembers): Added static check for events.
19165
19166 2002-08-15  Martin Baulig  <martin@gnome.org>
19167
19168         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
19169         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
19170
19171         * ecore.cs (Expression.MemberLookup): Added documentation and explained
19172         why the MethodData.EmitDestructor() change was necessary.
19173
19174 2002-08-20  Martin Baulig  <martin@gnome.org>
19175
19176         * class.cs (TypeContainer.FindMembers): Added static check for events.
19177
19178         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
19179
19180         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
19181         use Type.GetEvents(), not Type.FindMembers().
19182
19183 2002-08-20  Martin Baulig  <martin@gnome.org>
19184
19185         * decl.cs (MemberCache): Added a special method cache which will
19186         be used for method-only searched.  This ensures that a method
19187         search will return a MethodInfo with the correct ReflectedType for
19188         inherited methods.      
19189
19190 2002-08-20  Martin Baulig  <martin@gnome.org>
19191
19192         * decl.cs (DeclSpace.FindMembers): Made this public.
19193
19194 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19195
19196         * delegate.cs: fixed build on windows.
19197         [FIXME:  Filed as bug #29150: MCS must report these errors.]
19198
19199 2002-08-19  Ravi Pratap  <ravi@ximian.com>
19200
19201         * ecore.cs (StandardConversionExists): Return a false
19202         if we are trying to convert the void type to anything else
19203         since that is not allowed.
19204
19205         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
19206         we flag error 70 in the event an event is trying to be accessed
19207         directly from outside the declaring type.
19208
19209 2002-08-20  Martin Baulig  <martin@gnome.org>
19210
19211         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
19212         MemberCache from typemanager.cs to decl.cs.
19213
19214 2002-08-19  Martin Baulig  <martin@gnome.org>
19215
19216         * class.cs (TypeContainer): Implement IMemberContainer.
19217         (TypeContainer.DefineMembers): Create the MemberCache.
19218         (TypeContainer.FindMembers): Do better BindingFlags checking; only
19219         return public members if BindingFlags.Public was given, check
19220         whether members are static.
19221
19222 2002-08-16  Martin Baulig  <martin@gnome.org>
19223
19224         * decl.cs (DeclSpace.Define): Splitted this in Define and
19225         DefineMembers.  DefineMembers is called first and initializes the
19226         MemberCache.
19227
19228         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
19229         DefineMembers() on all our DeclSpaces.
19230
19231         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
19232         but call DefineMembers() on all nested interfaces.  We call their
19233         Define() in our new Define() function.
19234
19235         * interface.cs (Interface): Implement IMemberContainer.
19236         (Interface.Define): Moved all code except the attribute stuf to
19237         DefineMembers().
19238         (Interface.DefineMembers): Initialize the member cache.
19239
19240         * typemanager.cs (IMemberFinder): Removed this interface, we don't
19241         need this anymore since we can use MemberCache.FindMembers directly.
19242
19243 2002-08-19  Martin Baulig  <martin@gnome.org>
19244
19245         * typemanager.cs (MemberCache): When creating the cache for an
19246         interface type, add all inherited members.
19247         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
19248         to `out bool used_cache' and documented it.
19249         (TypeManager.MemberLookup): If we already used the cache in the first
19250         iteration, we don't need to do the interfaces check.
19251
19252 2002-08-19  Martin Baulig  <martin@gnome.org>
19253
19254         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
19255         here from IMemberFinder and don't implement this interface anymore.
19256         (DeclSpace.MemberCache): Moved here from IMemberFinder.
19257
19258         * typemanager.cs (IMemberFinder): This interface is now only used by
19259         classes which actually support the member cache.
19260         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
19261         since we only put DeclSpaces into this Hashtable.
19262         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
19263         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
19264
19265 2002-08-16  Martin Baulig  <martin@gnome.org>
19266
19267         * typemanager.cs (ICachingMemberFinder): Removed.
19268         (IMemberFinder.MemberCache): New property.
19269         (TypeManager.FindMembers): Merged this with RealFindMembers().
19270         This function will never be called from TypeManager.MemberLookup()
19271         so we can't use the cache here, just the IMemberFinder.
19272         (TypeManager.MemberLookup_FindMembers): Check whether the
19273         IMemberFinder has a MemberCache and call the cache's FindMembers
19274         function.
19275         (MemberCache): Rewrote larger parts of this yet another time and
19276         cleaned it up a bit.
19277
19278 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
19279
19280         * driver.cs (LoadArgs): Support quoting.
19281
19282         (Usage): Show the CSC-like command line arguments.
19283
19284         Improved a few error messages.
19285
19286 2002-08-15  Martin Baulig  <martin@gnome.org>
19287
19288         * typemanager.cs (IMemberContainer.Type): New property.
19289         (IMemberContainer.IsInterface): New property.
19290
19291         The following changes are conditional to BROKEN_RUNTIME, which is
19292         defined at the top of the file.
19293
19294         * typemanager.cs (MemberCache.MemberCache): Don't add the base
19295         class'es members, but add all members from TypeHandle.ObjectType
19296         if we're an interface.
19297         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
19298         is the current type.
19299         (MemberCache.CacheEntry.Container): Removed this field.
19300         (TypeHandle.GetMembers): Include inherited members.
19301
19302 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19303
19304         * typemanager.cs: fixed compilation and added a comment on a field that
19305         is never used.
19306
19307 2002-08-15  Martin Baulig  <martin@gnome.org>
19308
19309         * class.cs (ConstructorInitializer.Resolve): In the
19310         Expression.MemberLookup call, use the queried_type as
19311         invocation_type.
19312
19313         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
19314         declared' attribute, it's always true.
19315         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
19316         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
19317         temporary wrapper for FindMembers which tells MemberLookup whether
19318         members from the base classes are included in the return value.
19319         This will go away soon.
19320         (TypeManager.MemberLookup): Use this temporary hack here; once the
19321         new MemberCache is completed, we don't need to do the DeclaredOnly
19322         looping here anymore since the MemberCache will take care of this.
19323         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
19324         (MemberCache): When creating the MemberCache for a class, get
19325         members from the current class and all its base classes.
19326         (MemberCache.CacheEntry.Container): New field.  This is a
19327         temporary hack until the Mono runtime is fixed to distinguish
19328         between ReflectedType and DeclaringType.  It allows us to use MCS
19329         with both the MS runtime and the unfixed Mono runtime without
19330         problems and without accecting performance.
19331         (MemberCache.SearchMembers): The DeclaredOnly looping from
19332         TypeManager.MemberLookup is now done here.      
19333
19334 2002-08-14  Martin Baulig  <martin@gnome.org>
19335
19336         * statement.cs (MyStructInfo.MyStructInfo): Don't call
19337         Type.GetFields on dynamic types but get the fields from the
19338         corresponding TypeContainer.
19339         (MyStructInfo.GetStructInfo): Added check for enum types.
19340
19341         * typemanager.cs (MemberList.IsSynchronized): Implemented.
19342         (MemberList.SyncRoot): Implemented.
19343         (TypeManager.FilterWithClosure): No need to check permissions if
19344         closure_start_type == closure_invocation_type, don't crash if
19345         closure_invocation_type is null.
19346
19347 2002-08-13  Martin Baulig  <martin@gnome.org>
19348
19349         Rewrote TypeContainer.FindMembers to use a member cache.  This
19350         gives us a speed increase of about 35% for the self-hosting MCS
19351         build and of about 15-20% for the class libs (both on GNU/Linux).
19352
19353         * report.cs (Timer): New class to get enhanced profiling.  This
19354         whole class is "TIMER" conditional since it remarkably slows down
19355         compilation speed.
19356
19357         * class.cs (MemberList): New class.  This is an IList wrapper
19358         which we're now using instead of passing MemberInfo[]'s around to
19359         avoid copying this array unnecessarily.
19360         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
19361         (ICachingMemberFinder, IMemberContainer): New interface.
19362         (TypeManager.FilterWithClosure): If `criteria' is null, the name
19363         has already been checked, otherwise use it for the name comparision.
19364         (TypeManager.FindMembers): Renamed to RealMemberFinder and
19365         provided wrapper which tries to use ICachingMemberFinder.FindMembers
19366         if possible.  Returns a MemberList, not a MemberInfo [].
19367         (TypeHandle): New class, implements IMemberContainer.  We create
19368         one instance of this class per type, it contains a MemberCache
19369         which is used to do the member lookups.
19370         (MemberCache): New class.  Each instance of this class contains
19371         all members of a type and a name-based hash table.
19372         (MemberCache.FindMembers): This is our new member lookup
19373         function.  First, it looks up all members of the requested name in
19374         the hash table.  Then, it walks this list and sorts out all
19375         applicable members and returns them.
19376
19377 2002-08-13  Martin Baulig  <martin@gnome.org>
19378
19379         In addition to a nice code cleanup, this gives us a performance
19380         increase of about 1.4% on GNU/Linux - not much, but it's already
19381         half a second for the self-hosting MCS compilation.
19382
19383         * typemanager.cs (IMemberFinder): New interface.  It is used by
19384         TypeManager.FindMembers to call FindMembers on a TypeContainer,
19385         Enum, Delegate or Interface.
19386         (TypeManager.finder_to_member_finder): New PtrHashtable.
19387         (TypeManager.finder_to_container): Removed.
19388         (TypeManager.finder_to_delegate): Removed.
19389         (TypeManager.finder_to_interface): Removed.
19390         (TypeManager.finder_to_enum): Removed.
19391
19392         * interface.cs (Interface): Implement IMemberFinder.
19393
19394         * delegate.cs (Delegate): Implement IMemberFinder.
19395
19396         * enum.cs (Enum): Implement IMemberFinder.
19397
19398         * class.cs (TypeContainer): Implement IMemberFinder.
19399
19400 2002-08-12  Martin Baulig  <martin@gnome.org>
19401
19402         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
19403
19404 2002-08-12  Martin Baulig  <martin@gnome.org>
19405
19406         * ecore.cs (ITypeExpression): New interface for expressions which
19407         resolve to a type.
19408         (TypeExpression): Renamed to TypeLookupExpression.
19409         (Expression.DoResolve): If we're doing a types-only lookup, the
19410         expression must implement the ITypeExpression interface and we
19411         call DoResolveType() on it.
19412         (SimpleName): Implement the new ITypeExpression interface.
19413         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
19414         hack, the situation that we're only looking up types can't happen
19415         anymore when this method is called.  Moved the type lookup code to
19416         DoResolveType() and call it.
19417         (SimpleName.DoResolveType): This ITypeExpression interface method
19418         is now doing the types-only lookup.
19419         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
19420         (ResolveFlags): Added MaskExprClass.
19421
19422         * expression.cs (MemberAccess): Implement the ITypeExpression
19423         interface.
19424         (MemberAccess.DoResolve): Added support for a types-only lookup
19425         when we're called via ITypeExpression.DoResolveType().
19426         (ComposedCast): Implement the ITypeExpression interface.
19427
19428         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
19429         Expression.Resolve() with ResolveFlags.Type instead.
19430
19431 2002-08-12  Martin Baulig  <martin@gnome.org>
19432
19433         * interface.cs (Interface.Define): Apply attributes.
19434
19435         * attribute.cs (Attribute.ApplyAttributes): Added support for
19436         interface attributes.
19437
19438 2002-08-11  Martin Baulig  <martin@gnome.org>
19439
19440         * statement.cs (Block.Emit): Only check the "this" variable if we
19441         do not always throw an exception.
19442
19443         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
19444         whether the property has a set accessor.
19445
19446 2002-08-11  Martin Baulig  <martin@gnome.org>
19447
19448         Added control flow analysis support for structs.
19449
19450         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
19451         with control flow analysis turned off.
19452         (IVariable): New interface.
19453         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
19454         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
19455         (FieldExpr.DoResolve): Resolve the instance expression with flow
19456         analysis turned off and do the definite assignment check after the
19457         resolving when we know what the expression will resolve to.
19458
19459         * expression.cs (LocalVariableReference, ParameterReference):
19460         Implement the new IVariable interface, only call the flow analysis
19461         code if ec.DoFlowAnalysis is true.
19462         (This): Added constructor which takes a Block argument.  Implement
19463         the new IVariable interface.
19464         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
19465         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
19466         This does the definite assignment checks for struct members.
19467
19468         * class.cs (Constructor.Emit): If this is a non-static `struct'
19469         constructor which doesn't have any initializer, call
19470         Block.AddThisVariable() to tell the flow analysis code that all
19471         struct elements must be initialized before control returns from
19472         the constructor.
19473
19474         * statement.cs (MyStructInfo): New public class.
19475         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
19476         argument to this indexer.  If non-zero, check an individual struct
19477         member, not the whole struct.
19478         (FlowBranching.CheckOutParameters): Check struct members.
19479         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
19480         overloaded versions of these methods which take an additional
19481         `int field_idx' argument to check struct members.
19482         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
19483         overloaded versions of these methods which take an additional
19484         `string field_name' argument to check struct member.s
19485         (VariableInfo): Implement the IVariable interface.
19486         (VariableInfo.StructInfo): New public property.  Returns the
19487         MyStructInfo instance of the variable if it's a struct or null.
19488         (Block.AddThisVariable): New public method.  This is called from
19489         Constructor.Emit() for non-static `struct' constructor which do
19490         not have any initializer.  It creates a special variable for the
19491         "this" instance variable which will be checked by the flow
19492         analysis code to ensure that all of the struct's fields are
19493         initialized before control returns from the constructor.
19494         (UsageVector): Added support for struct members.  If a
19495         variable/parameter is a struct with N members, we reserve a slot
19496         in the usage vector for each member.  A struct is considered fully
19497         initialized if either the struct itself (slot 0) or all its
19498         members are initialized.
19499
19500 2002-08-08  Martin Baulig  <martin@gnome.org>
19501
19502         * driver.cs (Driver.MainDriver): Only report an error CS5001
19503         if there were no compilation errors.
19504
19505         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
19506         `UnsafeContext' property to determine whether the parent is in
19507         unsafe context rather than checking the parent's ModFlags:
19508         classes nested in an unsafe class are unsafe as well.
19509
19510 2002-08-08  Martin Baulig  <martin@gnome.org>
19511
19512         * statement.cs (UsageVector.MergeChildren): Distinguish between
19513         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
19514         we return.  Added test17() and test18() to test-154.cs.
19515
19516 2002-08-08  Martin Baulig  <martin@gnome.org>
19517
19518         * typemanager.cs (TypeManager.FilterWithClosure): If we have
19519         Family access, make sure the invoking type isn't a subclass of the
19520         queried type (that'd be a CS1540).
19521
19522         * ecore.cs (Expression.MemberLookup): Added overloaded version of
19523         this method which takes an additional `Type invocation_type'.
19524
19525         * expression.cs (BaseAccess.DoResolve): Use the base type as
19526         invocation and query type.
19527         (MemberAccess.DoResolve): If the lookup failed and we're about to
19528         report a CS0122, try a lookup with the ec.ContainerType - if this
19529         succeeds, we must report a CS1540.
19530
19531 2002-08-08  Martin Baulig  <martin@gnome.org>
19532
19533         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
19534         (MethodGroupExpr): Implement the IMemberExpr interface.
19535
19536         * expression (MemberAccess.ResolveMemberAccess): No need to have
19537         any special code for MethodGroupExprs anymore, they're now
19538         IMemberExprs.   
19539
19540 2002-08-08  Martin Baulig  <martin@gnome.org>
19541
19542         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
19543         Family, FamANDAssem and FamORAssem permissions.
19544         (TypeManager.IsSubclassOrNestedChildOf): New public method.
19545
19546 2002-08-08  Martin Baulig  <martin@gnome.org>
19547
19548         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
19549         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
19550         or loop block.
19551
19552 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
19553
19554         * driver.cs: implemented /resource option to embed managed resources.
19555
19556 2002-08-07  Martin Baulig  <martin@gnome.org>
19557
19558         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
19559         (FieldBase.HasFieldInitializer): New public property.
19560         (FieldBase.GetInitializerExpression): New public method.  Resolves and
19561         returns the field initializer and makes sure it is only resolved once.
19562         (TypeContainer.EmitFieldInitializers): Call
19563         FieldBase.GetInitializerExpression to get the initializer, this ensures
19564         that it isn't resolved multiple times.
19565
19566         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
19567         the resolving process (SimpleName/MemberLookup) that we're currently
19568         emitting a field initializer (which must not access any instance members,
19569         this is an error CS0236).
19570
19571         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
19572         argument, if the `IsFieldInitializer' flag is set, we must report and
19573         error CS0236 and not an error CS0120.   
19574
19575 2002-08-07  Martin Baulig  <martin@gnome.org>
19576
19577         * ecore.cs (IMemberExpr): New public interface.
19578         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
19579         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
19580         if the expression is an IMemberExpr.
19581
19582         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
19583         to be null, implicitly default to `this' if we're non-static in
19584         this case.  Simplified the code a lot by using the new IMemberExpr
19585         interface.  Also fixed bug #28176 here.
19586
19587 2002-08-06  Martin Baulig  <martin@gnome.org>
19588
19589         * cs-parser.jay (SimpleLookup): Removed.  We need to create
19590         ParameterReferences during semantic analysis so that we can do a
19591         type-only search when resolving Cast, TypeOf and SizeOf.
19592         (block): Pass the `current_local_parameters' to the Block's
19593         constructor.
19594
19595         * class.cs (ConstructorInitializer): Added `Parameters parameters'
19596         argument to the constructor.
19597         (ConstructorInitializer.Resolve): Create a temporary implicit
19598         block with the parameters.
19599
19600         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
19601         references here if we aren't doing a type-only search.
19602
19603         * statement.cs (Block): Added constructor which takes a
19604         `Parameters parameters' argument.
19605         (Block.Parameters): New public property.
19606
19607         * support.cs (InternalParameters.Parameters): Renamed `parameters'
19608         to `Parameters' and made it public readonly.
19609
19610 2002-08-06  Martin Baulig  <martin@gnome.org>
19611
19612         * ecore.cs (Expression.Warning): Made this public as well.
19613
19614         * report.cs (Report.Debug): Print the contents of collections.
19615
19616 2002-08-06  Martin Baulig  <martin@gnome.org>
19617
19618         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
19619         used to tell Resolve() which kinds of expressions it may return.
19620         (Expression.Resolve): Added overloaded version of this method which
19621         takes a `ResolveFlags flags' argument.  This can be used to tell
19622         Resolve() which kinds of expressions it may return.  Reports a
19623         CS0118 on error.
19624         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
19625         ResolveFlags.SimpleName.
19626         (Expression.Error118): Added overloaded version of this method which
19627         takes a `ResolveFlags flags' argument.  It uses the flags to determine
19628         which kinds of expressions are allowed.
19629
19630         * expression.cs (Argument.ResolveMethodGroup): New public method.
19631         Resolves an argument, but allows a MethodGroup to be returned.
19632         This is used when invoking a delegate.
19633
19634         * TODO: Updated a bit.
19635
19636 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19637
19638         Fixed compilation with csc.
19639
19640         * ecore.cs: Expression.Error made public. Is this correct? Should
19641         Warning be made public too?
19642
19643         * expression.cs: use ea.Location instead of ea.loc.
19644         [FIXME:  Filed as bug #28607: MCS must report these errors.]
19645
19646 2002-08-06  Martin Baulig  <martin@gnome.org>
19647
19648         * ecore.cs (Expression.loc): Moved the location here instead of
19649         duplicating it in all derived classes.
19650         (Expression.Location): New public property.
19651         (Expression.Error, Expression.Warning): Made them non-static and
19652         removed the location argument.
19653         (Expression.Warning): Added overloaded version which takes an
19654         `int level' argument.
19655         (Expression.Error118): Make this non-static and removed the
19656         expression and location arguments.
19657         (TypeExpr): Added location argument to the constructor.
19658
19659         * expression.cs (StaticCallExpr): Added location argument to
19660         the constructor.
19661         (Indirection, PointerArithmetic): Likewise.
19662         (CheckedExpr, UnCheckedExpr): Likewise.
19663         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
19664         (StringPtr): Likewise.
19665
19666
19667 2002-08-05  Martin Baulig  <martin@gnome.org>
19668
19669         * expression.cs (BaseAccess.DoResolve): Actually report errors.
19670
19671         * assign.cs (Assign.DoResolve): Check whether the source
19672         expression is a value or variable.
19673
19674         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
19675         while resolving the corresponding blocks.
19676
19677         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
19678         an error, don't silently return null.
19679
19680         * statement.cs (Block.AddVariable): Do the error reporting here
19681         and distinguish between CS0128 and CS0136.
19682         (Block.DoResolve): Report all unused labels (warning CS0164).
19683         (LabeledStatement): Pass the location to the constructor.
19684         (LabeledStatement.HasBeenReferenced): New property.
19685         (LabeledStatement.Resolve): Set it to true here.
19686
19687         * statement.cs (Return.Emit): Return success even after reporting
19688         a type mismatch error (CS0126 or CS0127), this is what csc does and
19689         it avoids confusing the users with any consecutive errors.
19690
19691 2002-08-05  Martin Baulig  <martin@gnome.org>
19692
19693         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
19694
19695         * const.cs (Const.LookupConstantValue): Catch circular definitions.
19696
19697         * expression.cs (MemberAccess.DoResolve): Silently return if an
19698         error has already been reported.
19699
19700         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
19701         error has already been reported.
19702
19703 2002-08-05  Martin Baulig  <martin@gnome.org>
19704
19705         * statement.cs (UsageVector): Only initialize the `parameters'
19706         vector if we actually have any "out" parameters.
19707
19708 2002-08-05  Martin Baulig  <martin@gnome.org>
19709
19710         * expression.cs (Binary.ResolveOperator): When combining delegates,
19711         they must have the same type.
19712
19713 2002-08-05  Martin Baulig  <martin@gnome.org>
19714
19715         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
19716         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
19717         work with the ms runtime and we also don't need it: if we're a
19718         PropertyBuilder and not in the `indexer_arguments' hash, then we
19719         are a property and not an indexer.
19720
19721         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
19722         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
19723         since the latter one doesn't work with the ms runtime.
19724
19725 2002-08-03  Martin Baulig  <martin@gnome.org>
19726
19727         Fixed bugs #27998 and #22735.
19728
19729         * class.cs (Method.IsOperator): New public field.
19730         (Method.CheckBase): Report CS0111 if there's already a method
19731         with the same parameters in the current class.  Report CS0508 when
19732         attempting to change the return type of an inherited method.
19733         (MethodData.Emit): Report CS0179 if a method doesn't have a body
19734         and it's not marked abstract or extern.
19735         (PropertyBase): New abstract base class for Property and Indexer.
19736         (PropertyBase.CheckBase): Moved here from Property and made it work
19737         for indexers.
19738         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
19739         the same so we can reuse it there.
19740         (Property, Indexer): Derive from PropertyBase.
19741         (MethodSignature.inheritable_property_signature_filter): New delegate
19742         to find properties and indexers.
19743
19744         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
19745         argument and improved error reporting.
19746
19747         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
19748         EmptyReadOnlyParameters and made it a property.
19749
19750         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
19751         version of this method which takes a `PropertyInfo indexer'.
19752         (TypeManager.RegisterIndexer): New method.
19753
19754         * class.cs: Added myself as author of this file :-)
19755
19756 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19757
19758         * class.cs: fixed compilation on windoze.
19759
19760 2002-08-03  Martin Baulig  <martin@gnome.org>
19761
19762         * interface.cs (Interface.GetInterfaceBases): Check whether all
19763         base interfaces are at least as accessible than the current one.
19764
19765         * class.cs (TypeContainer.GetClassBases): Check whether base types
19766         are at least as accessible than the current type.
19767         (TypeContainer.AsAccessible): Implemented and made non-static.
19768         (MemberBase.CheckParameters): Report errors if the accessibility
19769         checks fail.
19770
19771         * delegate.cs (Delegate.Delegate): The default visibility is
19772         internal for top-level types and private for nested types.
19773         (Delegate.Define): Report errors if the accessibility checks fail.
19774
19775         * enum.cs (Enum.Enum): The default visibility is internal for
19776         top-level types and private for nested types.
19777         (Enum.DefineType): Compute the correct visibility.
19778
19779         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
19780         function which takes a `bool is_toplevel' instead of a TypeContainer.
19781
19782         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
19783         builtin type.
19784
19785 2002-08-02  Martin Baulig  <martin@gnome.org>
19786
19787         * expression.cs (LocalVariableReferenc): Added constructor which
19788         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
19789         (LocalVariableReference.IsReadOnly): New property.
19790         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
19791         variable is readonly, use our own readonly flag to do this; you can
19792         use the new constructor to get a writable reference to a read-only
19793         variable.
19794
19795         * cs-parser.jay (foreach_statement, using_statement): Get a writable
19796         reference to the local variable.
19797
19798 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
19799
19800         * rootcontext.cs (ResolveCore): Also include System.Exception
19801
19802         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
19803         we reach an EmptyStatement.
19804
19805         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
19806         is also fine.
19807
19808         * expression.cs (Binary.ResolveOperator): Check error result in
19809         two places.
19810
19811         use brtrue/brfalse directly and avoid compares to null.
19812
19813 2002-08-02  Martin Baulig  <martin@gnome.org>
19814
19815         * class.cs (TypeContainer.Define): Define all nested interfaces here.
19816         Fixes bug #28407, added test-155.cs.
19817
19818 2002-08-01  Martin Baulig  <martin@gnome.org>
19819
19820         * class.cs (Event.EmitDefaultMethod): Make this work with static
19821         events.  Fixes #28311, added verify-3.cs.
19822
19823 2002-08-01  Martin Baulig  <martin@gnome.org>
19824
19825         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
19826         `is_disposable' fields.
19827         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
19828         `hm.is_disposable' if we're using the collection pattern.
19829         (Foreach.EmitCollectionForeach): Use the correct type for the
19830         enumerator's local variable, only emit the try/finally block if
19831         necessary (fixes #27713).
19832
19833 2002-08-01  Martin Baulig  <martin@gnome.org>
19834
19835         * ecore.cs (Expression.report118): Renamed to Error118 and made
19836         it public static.
19837
19838         * statement.cs (Throw.Resolve): Check whether the expression is of
19839         the correct type (CS0118) and whether the type derives from
19840         System.Exception (CS0155).
19841         (Catch.Resolve): New method.  Do the type lookup here and check
19842         whether it derives from System.Exception (CS0155).
19843         (Catch.CatchType, Catch.IsGeneral): New public properties.
19844
19845         * typemanager.cs (TypeManager.exception_type): Added.
19846
19847 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
19848
19849         * driver.cs: Updated About function.
19850
19851 2002-07-31  Martin Baulig  <martin@gnome.org>
19852
19853         Implemented Control Flow Analysis.
19854
19855         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
19856         (EmitContext.CurrentBranching): Added.
19857         (EmitContext.StartFlowBranching): Added.
19858         (EmitContext.EndFlowBranching): Added.
19859         (EmitContext.KillFlowBranching): Added.
19860         (EmitContext.IsVariableAssigned): Added.
19861         (EmitContext.SetVariableAssigned): Added.
19862         (EmitContext.IsParameterAssigned): Added.
19863         (EmitContext.SetParameterAssigned): Added.
19864         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
19865         Added control flow analysis stuff here.
19866
19867         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
19868         resolve the expression as lvalue.
19869         (LocalVariableReference.DoResolve): Check whether the variable has
19870         already been assigned.
19871         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
19872         the parameter as assigned here.
19873         (ParameterReference.DoResolve): Check whether the parameter has already
19874         been assigned.
19875         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
19876         expression as lvalue.
19877
19878         * statement.cs (FlowBranching): New class for the flow analysis code.
19879         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
19880         (LabeledStatement.IsDefined): New public property.
19881         (LabeledStatement.AddUsageVector): New public method to tell flow
19882         analyis that the label may be reached via a forward jump.
19883         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
19884         flow analysis.
19885         (VariableInfo.Number): New public field.  This is used by flow analysis
19886         to number all locals of a block.
19887         (Block.CountVariables): New public property.  This is the number of
19888         local variables in this block (including the locals from all parent
19889         blocks).
19890         (Block.EmitMeta): Number all the variables.
19891
19892         * statement.cs: Added flow analysis support to all classes.
19893
19894 2002-07-31  Martin Baulig  <martin@gnome.org>
19895
19896         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
19897         To get debugging messages, compile mcs with /define:MCS_DEBUG and
19898         then use this argument.
19899
19900         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
19901
19902         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
19903         use this to specify /define options.
19904
19905 2002-07-29  Martin Baulig  <martin@gnome.org>
19906
19907         * statement.cs (Fixed): Moved all code that does variable lookups
19908         and resolvings from Emit to Resolve.
19909
19910         * statement.cs (For): Moved all code that does variable lookups
19911         and resolvings from Emit to Resolve.
19912
19913         * statement.cs (Using): Moved all code that does variable lookups
19914         and resolvings from Emit to Resolve.
19915
19916 2002-07-29  Martin Baulig  <martin@gnome.org>
19917
19918         * attribute.cs (Attribute.Resolve): Explicitly catch a
19919         System.NullReferenceException when creating the
19920         CustromAttributeBuilder and report a different warning message.
19921
19922 2002-07-29  Martin Baulig  <martin@gnome.org>
19923
19924         * support.cs (ParameterData.ParameterName): Added method to
19925         get the name of a parameter.
19926
19927         * typemanager.cs (TypeManager.IsValueType): New public method.
19928
19929 2002-07-29  Martin Baulig  <martin@gnome.org>
19930
19931         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
19932         is a flag which specifies that it's either ref or out.
19933         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
19934         the out parameter to `out Parameter.Modifier mod', also set the
19935         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
19936
19937         * support.cs (InternalParameters.ParameterModifier): Distinguish
19938         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
19939         Parameter.Modifier.ISBYREF flag if it's either ref or out.
19940
19941         * expression.cs (Argument.GetParameterModifier): Distinguish
19942         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
19943         Parameter.Modifier.ISBYREF flag if it's either ref or out.
19944
19945 2002-07-29  Martin Baulig  <martin@gnome.org>
19946
19947         * expression.cs (ParameterReference.ParameterReference): Added
19948         `Location loc' argument to the constructor.
19949
19950         * cs-parser.jay: Pass location to ParameterReference.
19951
19952 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
19953
19954         * statement.cs (Try): Initialize the location.
19955
19956         * cs-parser.jay: pass location to Try.
19957
19958         * expression.cs (Unary.Reduce): Change the prototype to return
19959         whether a constant fold could be performed or not.  The result is
19960         returned in an out parameters.  In the case of Indirection and
19961         AddressOf, we want to perform the full tests.
19962
19963 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
19964
19965         * statement.cs (Statement.Emit): Flag dead code.
19966
19967 2002-07-27  Andrew Birkett  <andy@nobugs.org>
19968
19969         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
19970
19971 2002-07-27  Martin Baulig  <martin@gnome.org>
19972
19973         * class.cs (MethodData.Define): Put back call to
19974         TypeManager.AddMethod(), accidentally commented this out.
19975
19976         * report.cs (Debug): New public method to print debugging information,
19977         this is `[Conditional ("DEBUG")]'.
19978
19979 2002-07-26  Martin Baulig  <martin@gnome.org>
19980
19981         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
19982         (switch_statement): Push the current_block to the switch_stack and
19983         pop it again when we're done with the switch.
19984         (switch_section): The new block is a child of the current_block.
19985         Fixes bug #24007, added test-152.cs.
19986
19987 2002-07-27  Martin Baulig  <martin@gnome.org>
19988
19989         * expression.cs (Invocation.EmitArguments): When calling a varargs
19990         function with only its fixed arguments, we need to pass an empty
19991         array.
19992
19993 2002-07-27  Martin Baulig  <martin@gnome.org>
19994
19995         Mono 0.13 has been released.
19996
19997 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
19998
19999         * driver.cs: Rename --resource to --linkres, because that is what
20000         we do currently, we dont support --resource yet.
20001
20002         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
20003
20004 2002-07-25  Martin Baulig  <martin@gnome.org>
20005
20006         * class.cs (MethodData): New public class.  This is a `method builder'
20007         class for a method or one accessor of a Property/Indexer/Event.
20008         (MethodData.GetMethodFlags): Moved here from MemberBase.
20009         (MethodData.ApplyAttributes): Likewise.
20010         (MethodData.ApplyObsoleteAttribute): Likewise.
20011         (MethodData.ApplyConditionalAttribute): Likewise.
20012         (MethodData.ApplyDllImportAttribute): Likewise.
20013         (MethodData.CheckAbstractAndExternal): Likewise.
20014         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
20015         (MethodData.Emit): Formerly known as Method.Emit().
20016         (MemberBase): Moved everything which was specific to a single
20017         accessor/method to MethodData.
20018         (Method): Create a new MethodData and call Define() and Emit() on it.
20019         (Property, Indexer, Event): Create a new MethodData objects for each
20020         accessor and call Define() and Emit() on them.
20021
20022 2002-07-25  Martin Baulig  <martin@gnome.org>
20023
20024         Made MethodCore derive from MemberBase to reuse the code from there.
20025         MemberBase now also checks for attributes.
20026
20027         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
20028         (MemberBase.GetMethodFlags): Moved here from class Method and marked
20029         as virtual.
20030         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
20031         `CallingConventions cc' and `Attributes opt_attrs' arguments.
20032         (MemberBase.ApplyAttributes): New virtual method; applies the
20033         attributes to a method or accessor.
20034         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
20035         (MemberBase.ApplyConditionalAttribute): Likewise.
20036         (MemberBase.ApplyDllImportAttribute): Likewise.
20037         (MemberBase.CheckAbstractAndExternal): Likewise.
20038         (MethodCore.ParameterTypes): This is now a property instead of a
20039         method, it's initialized from DoDefineParameters().
20040         (MethodCore.ParameterInfo): Removed the set accessor.
20041         (MethodCore.DoDefineParameters): New protected virtual method to
20042         initialize ParameterTypes and ParameterInfo.
20043         (Method.GetReturnType): We can now simply return the MemberType.
20044         (Method.GetMethodFlags): Override the MemberBase version and add
20045         the conditional flags.
20046         (Method.CheckBase): Moved some code from Define() here, call
20047         DoDefineParameters() here.
20048         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
20049         here to avoid some larger code duplication.
20050         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
20051         ensure that abstract and external accessors don't declare a body.
20052
20053         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
20054         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
20055         lookup in the attribute's parent classes, so we need to abort as soon
20056         as we found the first match.
20057         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
20058         the attribute has no arguments.
20059
20060         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
20061         of a Method.
20062
20063 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20064
20065         * cs-parser.jay: reverted previous patch.
20066
20067 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20068
20069         * cs-parser.jay: fixed bug #22119.
20070
20071 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20072
20073         * attribute.cs: fixed compilation. The error was:
20074         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
20075         be assigned to before control leaves the current method."
20076         [FIXME:  Filed as bug #28186: MCS must report this error.]
20077
20078 2002-07-25  Martin Baulig  <martin@gnome.org>
20079
20080         * attribute.cs (Attribute.Conditional_GetConditionName): New static
20081         method to pull the condition name ouf of a Conditional attribute.
20082         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
20083         the obsolete message and error flag out of an Obsolete attribute.
20084
20085         * class.cs (Method.GetMethodFlags): New public method to get the
20086         TypeManager.MethodFlags for this method.
20087         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
20088         private methods.
20089         (Method.Define): Get and apply the Obsolete and Conditional attributes;
20090         if we're overriding a virtual function, set the new private variable
20091         `parent_method'; call the new TypeManager.AddMethod().
20092
20093         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
20094         the MethodBuilder and the Method in a PtrHashtable.
20095         (TypeManager.builder_to_method): Added for this purpose.
20096         (TypeManager.MethodFlags): Added IsObsoleteError.
20097         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
20098         Obsolete and Conditional arguments in MethodBuilders.  If we discover
20099         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
20100         the message from the attribute.
20101
20102 2002-07-24  Martin Baulig  <martin@gnome.org>
20103
20104         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
20105         preprocessor directives, ensure that the argument to #define/#undef is
20106         exactly one identifier and that it's actually an identifier.
20107
20108         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
20109         did not work ....
20110
20111 2002-07-24  Martin Baulig  <martin@gnome.org>
20112
20113         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
20114         initialize it to TypeManager.object_type in the constructor.
20115         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
20116         of the `hm.get_current' method if we're using the collection pattern.
20117         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
20118         for the explicit conversion to make it work when we're using the collection
20119         pattern and the `Current' property has a different return type than `object'.
20120         Fixes #27713.
20121
20122 2002-07-24  Martin Baulig  <martin@gnome.org>
20123
20124         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
20125         does not match, but don't report any errors.  This method is called in
20126         order for all methods in a MethodGroupExpr until a matching method is
20127         found, so we don't want to bail out if the first method doesn't match.
20128         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
20129         matches, report the 123.  Fixes #28070.
20130
20131 2002-07-24  Martin Baulig  <martin@gnome.org>
20132
20133         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
20134         TypeManager.TypeToCoreType() to the top of the method so the
20135         following equality checks will work.  Fixes #28107.
20136
20137 2002-07-24  Martin Baulig  <martin@gnome.org>
20138
20139         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
20140         operand is of type uint, and the other operand is of type sbyte,
20141         short or int, the operands are converted to type long." -
20142         Actually do what this comment already told us.  Fixes bug #28106,
20143         added test-150.cs.
20144
20145 2002-07-24  Martin Baulig  <martin@gnome.org>
20146
20147         * class.cs (MethodBase): New abstract class.  This is now a base
20148         class for Property, Indexer and Event to avoid some code duplication
20149         in their Define() and DefineMethods() methods.
20150         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
20151         generic methods for Define() and DefineMethods().
20152         (FieldBase): Derive from MemberBase, not MemberCore.
20153         (Property): Derive from MemberBase, not MemberCore.
20154         (Property.DefineMethod): Moved all the code from this method to the
20155         new MethodBase.DefineAccessor(), just call it with appropriate
20156         argumetnts.
20157         (Property.Define): Call the new Property.DoDefine(), this does some
20158         sanity checks and we don't need to duplicate the code everywhere.
20159         (Event): Derive from MemberBase, not MemberCore.
20160         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
20161         accessors, this will also make them work with interface events.
20162         (Indexer): Derive from MemberBase, not MemberCore.
20163         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
20164         (Indexer.Define): Use the new MethodBase functions.
20165
20166         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
20167         argument to the constructor.
20168         (Interface.FindMembers): Added support for interface events.
20169         (Interface.PopluateEvent): Implemented.
20170
20171         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
20172
20173 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
20174
20175         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
20176         but this is required to check for a method name being the same as
20177         the containing class.  
20178
20179         Handle this now.
20180
20181 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20182
20183         * interface.cs: initialize variable.
20184
20185 2002-07-23  Martin Baulig  <martin@gnome.org>
20186
20187         Implemented the IndexerName attribute in interfaces.
20188
20189         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
20190         name if this is an explicit interface implementation.
20191         (Indexer.InterfaceIndexerName): New public variable.  If we're
20192         implementing an interface indexer, this is the IndexerName in that
20193         interface.  Otherwise, it's the IndexerName.
20194         (Indexer.DefineMethod): If we're implementing interface indexer,
20195         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
20196         and Pending.ImplementIndexer methods.
20197         (Indexer.Define): Also define the PropertyBuilder if we're
20198         implementing an interface indexer and this is neither an explicit
20199         interface implementation nor do the IndexerName match the one in
20200         the interface.
20201
20202         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
20203         If a method is defined here, then we always need to create a proxy
20204         for it.  This is used when implementing interface indexers.
20205         (Pending.IsInterfaceIndexer): New public method.
20206         (Pending.ImplementIndexer): New public method.
20207         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
20208         This is used when implementing interface indexers to define a proxy
20209         if necessary.
20210         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
20211         define a proxy if necessary.
20212
20213         * interface.cs (Interface.IndexerName): New public variable.
20214         (Interface.PopulateIndexer): Set the IndexerName.
20215         (Interface.DefineIndexers): New private method.  Populate all the
20216         indexers and make sure their IndexerNames match.
20217
20218         * typemanager.cs (IndexerPropertyName): Added support for interface
20219         indexers.
20220
20221 2002-07-22  Martin Baulig  <martin@gnome.org>
20222
20223         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
20224         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
20225         ret if HasReturnLabel.
20226         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
20227         variables.
20228
20229         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
20230         and set the ec.LoopBeginTryCatchLevel.
20231         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
20232         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
20233         the current ec.TryCatchLevel, the branch goes out of an exception
20234         block.  In this case, we need to use Leave and not Br.
20235
20236 2002-07-22  Martin Baulig  <martin@gnome.org>
20237
20238         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
20239         block unless the block does not always return or it is contained in
20240         another try { ... } catch { ... } block.  Fixes bug #26506.
20241         Added verify-1.cs to the test suite.
20242
20243 2002-07-22  Martin Baulig  <martin@gnome.org>
20244
20245         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
20246         then we do not always return.  Fixes bug #24985.
20247
20248 2002-07-22  Martin Baulig  <martin@gnome.org>
20249
20250         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
20251         lookup on a per-class level; ie. walk up the class hierarchy until we
20252         found at least one applicable method, then choose the best among them.
20253         Fixes bug #24463 and test-29.cs.
20254
20255 2002-07-22  Martin Baulig  <martin@gnome.org>
20256
20257         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
20258         return types of the methods.  The return type is not part of the
20259         signature and we must not check it to make the `new' modifier work.
20260         Fixes bug #27999, also added test-147.cs.
20261         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
20262
20263         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
20264         on the method's return type.
20265
20266 2002-07-21  Martin Baulig  <martin@gnome.org>
20267
20268         * assign.cs: Make this work if the rightmost source is a constant and
20269         we need to do an implicit type conversion.  Also adding a few more tests
20270         to test-38.cs which should have caught this.
20271
20272         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
20273         target in the makefile for this.  The makefile.gnu is primarily intended
20274         for end-users who don't want to debug the compiler.
20275
20276 2002-07-21  Martin Baulig  <martin@gnome.org>
20277
20278         * assign.cs: Improved the Assign class so it can now handle embedded
20279         assignments (X = Y = Z = something).  As a side-effect this'll now also
20280         consume less local variables.  test-38.cs now passes with MCS, added
20281         a few new test cases to that test.
20282
20283 2002-07-20  Martin Baulig  <martin@gnome.org>
20284
20285         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
20286         instructions.  Fixes bug #27977, also added test-146.cs.
20287
20288 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20289
20290         * cs-tokenizer.cs: fixed getHex ().
20291
20292 2002-07-19  Martin Baulig  <martin@gnome.org>
20293
20294         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
20295         not Type.GetType() to lookup the array type.  This is needed when
20296         we're constructing an array of a user-defined type.
20297         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
20298         single-dimensional arrays, but also for single-dimensial arrays of
20299         type decimal.
20300
20301 2002-07-19  Martin Baulig  <martin@gnome.org>
20302
20303         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
20304         this function is called, it's not allowed to share LocalBuilders
20305         among ILGenerators.
20306
20307 2002-07-19  Martin Baulig  <martin@gnome.org>
20308
20309         * expression.cs (Argument.Resolve): Report an error 118 when trying
20310         to pass a type as argument.
20311
20312 2002-07-18  Martin Baulig  <martin@gnome.org>
20313
20314         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
20315         Conv_R_Un for the signed `long' type.
20316
20317 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
20318
20319         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
20320         `expr' for the temporary result, as that will fail if we do
20321         multiple resolves on the same expression.
20322
20323 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
20324
20325         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
20326         ec.TypeContainer for looking up aliases. 
20327
20328         * class.cs (TypeContainer): Remove LookupAlias from here.
20329
20330         * decl.cs (DeclSpace); Move here.
20331
20332 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
20333
20334         * class.cs (FindMembers): Only call filter if the constructor
20335         bulider is not null.
20336
20337         Also handle delegates in `NestedTypes' now.  Now we will perform
20338         type lookups using the standard resolution process.  This also
20339         fixes a bug.
20340
20341         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
20342         This uses Expressions (the limited kind that can be parsed by the
20343         tree) instead of strings.
20344
20345         * expression.cs (ComposedCast.ToString): Implement, used to flag
20346         errors since now we have to render expressions.
20347
20348         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
20349         FormArrayType. 
20350
20351         * ecore.cs (SimpleName.ToString): ditto.
20352
20353         * cs-parser.jay: Instead of using strings to assemble types, use
20354         Expressions to assemble the type (using SimpleName, ComposedCast,
20355         MemberAccess).  This should fix the type lookups in declarations,
20356         because we were using a different code path for this.
20357
20358         * statement.cs (Block.Resolve): Continue processing statements
20359         even when there is an error.
20360
20361 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
20362
20363         * class.cs (Event.Define): Also remove the `remove' method from
20364         the list of pending items.
20365
20366         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
20367         generate more compact code. 
20368
20369 2002-07-17  Martin Baulig  <martin@gnome.org>
20370
20371         * const.cs (Const.LookupConstantValue): Add support for constant
20372         `unchecked' and `checked' expressions.
20373         Also adding test case test-140.cs for this.
20374
20375 2002-07-17  Martin Baulig  <martin@gnome.org>
20376
20377         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
20378         check whether mi.ReturnType implements the IEnumerator interface; the
20379         `==' and the IsAssignableFrom() will fail in this situation.
20380
20381 2002-07-16  Ravi Pratap  <ravi@ximian.com>
20382
20383         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
20384         here too.
20385
20386 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20387
20388         * expression.cs: fixed bug #27811.
20389
20390 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
20391
20392         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
20393         Molaro: when we are a ref, the value already contains a pointer
20394         value, do not take the address of it.
20395
20396 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
20397         * removed mb-parser.jay and mb-tokenizer.cs
20398
20399 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
20400
20401         * expression.cs: check against the building corlib void type.
20402
20403 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
20404
20405         * ecore.cs: fix for valuetype static readonly fields: when 
20406         initializing them, we need their address, not the address of a copy.
20407
20408 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
20409
20410         * typemanager.cs: register also enum_type in corlib.
20411
20412 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
20413
20414         * class.cs: allow calling this (but not base) initializers in structs.
20415
20416 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
20417
20418         * ecore.cs: make sure we compare against the building base types
20419         in GetTypeSize ().
20420
20421 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
20422
20423         * typemanager.cs: fix TypeToCoreType() to handle void and object
20424         (corlib gets no more typerefs after this change).
20425
20426 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
20427
20428         * expression.cs (ArrayCreation.EmitArrayArguments): use
20429         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
20430
20431         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
20432         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
20433         array indexes, the runtime actually forbids them.
20434
20435         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
20436         for array arguments here.
20437
20438         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
20439         instead of the default for ValueTypes.
20440
20441         (New.DoEmit): Use IsValueType instead of
20442         IsSubclassOf (value_type)
20443         (New.DoResolve): ditto.
20444         (Invocation.EmitCall): ditto.
20445
20446         * assign.cs (Assign): ditto.
20447
20448         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
20449         Statements *are* currently doing part of their resolution during
20450         Emit.  
20451
20452         Expressions do always resolve during resolve, but statements are
20453         only required to propagate resolution to their children.
20454
20455 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
20456
20457         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
20458
20459         (LoadAssembly): Do not add the dll if it is already specified
20460
20461         (MainDriver): Add the System directory to the link path at the end,
20462         after all the other -L arguments. 
20463
20464         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
20465         wrong opcode for loading bytes and bools (ldelem.i1 instead of
20466         ldelem.u1) and using the opposite for sbytes.
20467
20468         This fixes Digger, and we can finally run it.
20469
20470         * driver.cs (UnixParseOption): Move the option parsing here.  
20471         (CSCParseOption): Implement CSC-like parsing of options.
20472
20473         We now support both modes of operation, the old Unix way, and the
20474         new CSC-like way.  This should help those who wanted to make cross
20475         platform makefiles.
20476
20477         The only thing broken is that /r:, /reference: and /lib: are not
20478         implemented, because I want to make those have the same semantics
20479         as the CSC compiler has, and kill once and for all the confussion
20480         around this.   Will be doing this tomorrow.
20481
20482         * statement.cs (Unsafe.Resolve): The state is checked during
20483         resolve, not emit, so we have to set the flags for IsUnsfe here.
20484
20485 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
20486
20487         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
20488         not catch the Error_ObjectRefRequired in SimpleName (as it is
20489         possible to have a class/instance variable name that later gets
20490         deambiguated), we have to check this here.      
20491
20492 2002-07-10  Ravi Pratap  <ravi@ximian.com>
20493
20494         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
20495         make static and put into Expression.
20496
20497         (Event.Define): Register the private field of the event with the 
20498         TypeManager so that GetFieldFromEvent can get at it.
20499
20500         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
20501         keep track of the private field associated with an event which
20502         has no accessors.
20503
20504         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
20505         private field.
20506
20507         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
20508
20509 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
20510
20511         * expression.cs (Binary.EmitBranchable): this routine emits the
20512         Binary expression in a branchable context.  This basically means:
20513         we need to branch somewhere, not just get the value on the stack.
20514
20515         This works together with Statement.EmitBoolExpression.
20516
20517         * statement.cs (Statement.EmitBoolExpression): Use
20518         EmitBranchable. 
20519
20520 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
20521
20522         * statement.cs (For): Reduce the number of jumps in loops.
20523
20524         (For): Implement loop inversion for the For statement.
20525
20526         (Break): We can be breaking out of a Try/Catch controlled section
20527         (foreach might have an implicit try/catch clause), so we need to
20528         use Leave instead of Br.
20529
20530         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
20531         now).  If the instace expression supports IMemoryLocation, we use
20532         the AddressOf method from the IMemoryLocation to extract the
20533         address instead of emitting the instance.
20534
20535         This showed up with `This', as we were emitting the instance
20536         always (Emit) instead of the Address of This.  Particularly
20537         interesting when This is a value type, as we dont want the Emit
20538         effect (which was to load the object).
20539
20540 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
20541
20542         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
20543
20544         * statement.cs (Checked): Set the CheckedState during the resolve
20545         process too, as the ConvCast operations track the checked state on
20546         the resolve process, and not emit.
20547
20548         * cs-parser.jay (namespace_member_declaration): Flag that we have
20549         found a declaration when we do.  This is used to flag error 1529
20550
20551         * driver.cs: Report ok when we display the help only.
20552
20553 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
20554
20555         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
20556
20557 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
20558
20559         * cs-tokenizer.cs (define): We also have to track locally the
20560         defines.  AllDefines is just used for the Conditional Attribute,
20561         but we also need the local defines for the current source code. 
20562
20563 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
20564
20565         * statement.cs (While, For, Do): These loops can exit through a
20566         Break statement, use this information to tell whether the
20567         statement is the last piece of code.
20568
20569         (Break): Flag that we break.
20570
20571         * codegen.cs (EmitContexts): New `Breaks' state variable.
20572
20573 2002-07-03  Martin Baulig  <martin@gnome.org>
20574
20575         * class.cs (TypeContainer.MethodModifiersValid): Allow override
20576         modifiers in method declarations in structs.  Otherwise, you won't
20577         be able to override things like Object.Equals().
20578
20579 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
20580
20581         * class.cs (Method, Property, Indexer): Do not allow the public
20582         modifier to be used in explicit interface implementations.
20583
20584         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
20585         override modifiers in method declarations in structs
20586
20587 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
20588
20589         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
20590         integer or real overflow, report an error
20591
20592 2002-07-02  Martin Baulig  <martin@gnome.org>
20593
20594         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
20595         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
20596         to tell the runtime about our newly created System.Object and
20597         System.ValueType types.
20598
20599 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
20600
20601         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
20602         struct instead of Ldarg/Starg.
20603
20604 2002-07-02  Martin Baulig  <martin@gnome.org>
20605
20606         * expression.cs (Indirection.Indirection): Call
20607         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
20608
20609 2002-07-02  Martin Baulig  <martin@gnome.org>
20610
20611         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
20612         ValueType, call TypeManager.TypeToCoreType() on it.
20613         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
20614         the OpCodes.Newarr argument.
20615
20616 2002-07-02  Martin Baulig  <martin@gnome.org>
20617
20618         * expression.cs (Invocation.EmitCall): When compiling corlib,
20619         replace all calls to the system's System.Array type to calls to
20620         the newly created one.
20621
20622         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
20623         System.Array methods.
20624         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
20625         from the system's System.Array type which must be replaced.
20626
20627 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
20628
20629         * typemanager.cs: load unverifiable_code_ctor so we can build
20630         corlib using the correct type. Avoid using GetTypeCode() with
20631         TypeBuilders.
20632         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
20633         TypeManager.object_type to allow building corlib.
20634
20635 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
20636
20637         * ecore.cs: handle System.Enum separately in LoadFromPtr().
20638
20639 2002-07-01  Martin Baulig  <martin@gnome.org>
20640
20641         * class.cs: Make the last change actually work, we need to check
20642         whether `ifaces != null' to avoid a crash.
20643
20644 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
20645
20646         * class.cs: when we build structs without fields that implement
20647         interfaces, we need to add the interfaces separately, since there is
20648         no API to both set the size and add the interfaces at type creation
20649         time.
20650
20651 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
20652
20653         * expression.cs: the dimension arguments to the array constructors
20654         need to be converted if they are a long.
20655
20656 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
20657
20658         * class.cs: don't emit ldarg.0 if there is no parent constructor
20659         (fixes showstopper for corlib).
20660
20661 2002-06-29  Martin Baulig  <martin@gnome.org>
20662
20663         MCS now compiles corlib on GNU/Linux :-)
20664
20665         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
20666         ie. check for MethodImplOptions.InternalCall.
20667
20668         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
20669         and TypeManager.attribute_type are null, so we must explicitly check
20670         whether parent is not null to find out whether it's an attribute type.
20671         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
20672         and SetBuilder, not only if the property is neither abstract nor external.
20673         This is necessary to set the MethodImplOptions on the accessor methods.
20674         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
20675         SetBuilder, see Property.Emit().
20676
20677         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
20678         populate "System.Object", "System.ValueType" and "System.Attribute" since
20679         they've already been populated from BootCorlib_PopulateCoreTypes().
20680
20681 2002-06-29  Martin Baulig  <martin@gnome.org>
20682
20683         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
20684         is the NullLiteral, we also need to make sure that target_type is not
20685         an enum type.   
20686
20687 2002-06-29  Martin Baulig  <martin@gnome.org>
20688
20689         * rootcontext.cs (RootContext.ResolveCore): We must initialize
20690         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
20691         before calling BootstrapCorlib_ResolveDelegate ().
20692
20693 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20694
20695         * statement.cs: fixed build-breaker. All tests passed ok.
20696
20697 2002-06-27  Martin Baulig  <martin@gnome.org>
20698
20699         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
20700         for System.Decimal when compiling corlib.
20701
20702 2002-06-27  Martin Baulig  <martin@gnome.org>
20703
20704         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
20705         switch blocks which contain nothing but a default clause.
20706
20707 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
20708
20709        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
20710
20711 2002-06-27  Martin Baulig  <martin@gnome.org>
20712
20713         * ecore.cs (PropertyExpr.PropertyExpr): Call
20714         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
20715
20716         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
20717         is already a TypeBuilder.
20718
20719 2002-06-27  Martin Baulig  <martin@gnome.org>
20720
20721         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
20722         `target_type == TypeManager.array_type', not IsAssignableFrom() in
20723         the "from an array-type to System.Array" case.  This makes it work
20724         when compiling corlib.
20725
20726 2002-06-27  Martin Baulig  <martin@gnome.org>
20727
20728         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
20729         non-static PropertyExpr, set its InstanceExpression.  This makes
20730         the `ICollection.Count' property work in System/Array.cs.
20731
20732 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
20733
20734         * driver.cs: Made error handling more consistent.  Errors now
20735         tracked by Report class, so many methods which used to return int
20736         now return void.  Main() now prints success/failure and 
20737         errors/warnings message.
20738
20739         Renamed '--probe' compiler argument to '--expect-error'.  Removed
20740         the magic number return values (123 and 124).  Now, if the
20741         expected error occurs, the compiler exits with success (exit value
20742         0).  If the compilation completes without seeing that particular
20743         error, the compiler exits with failure (exit value 1).  The
20744         makefile in mcs/errors has been changed to handle the new behaviour.
20745
20746         * report.cs: Made 'expected error' number a property and renamed
20747         it from 'Probe' to 'ExpectedError'.
20748
20749         * genericparser.cs: Removed error handling support, since it is
20750         now all done by Report class.
20751
20752         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
20753         class, so parse() no longer returns an int.
20754
20755         * namespace.cs: Use Report.Error instead of GenericParser.error
20756
20757 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
20758
20759         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
20760         TypeContainer.AddOperator): At the front of the list put the
20761         explicit implementations, so they get resolved/defined first. 
20762
20763 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
20764
20765         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
20766         interface type is implemented by this TypeContainer.  Used during
20767         explicit interface implementation.
20768
20769         (Property.Define, Indexer.Define, Method.Define): Validate that
20770         the given interface in the explicit implementation is one of the
20771         base classes for the containing type.
20772
20773         Also if we are explicitly implementing an interface, but there is
20774         no match in the pending implementation table, report an error.
20775
20776         (Property.Define): Only define the property if we are
20777         not explicitly implementing a property from an interface.  Use the
20778         correct name also for those properties (the same CSC uses,
20779         although that is really not needed).
20780
20781         (Property.Emit): Do not emit attributes for explicitly implemented
20782         properties, as there is no TypeBuilder.
20783
20784         (Indexer.Emit): ditto.
20785
20786         Hiding then means that we do not really *implement* a pending
20787         implementation, which makes code fail.
20788
20789 2002-06-22  Martin Baulig  <martin@gnome.org>
20790
20791         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
20792         the return value of Object.GetType().  [FIXME: we need to do this whenever
20793         we get a type back from the reflection library].
20794
20795 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
20796
20797         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
20798
20799 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
20800
20801         * attribute.cs: Return null if we can not look up the type.
20802
20803         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
20804         the interface types found.
20805
20806         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
20807         interface types found.
20808
20809         * typemanager.cs (GetInterfaces): Make this routine returns alll
20810         the interfaces and work around the lame differences between
20811         System.Type and System.Reflection.Emit.TypeBuilder in the results
20812         result for GetInterfaces.
20813
20814         (ExpandInterfaces): Given an array of interface types, expand and
20815         eliminate repeated ocurrences of an interface.  This expands in
20816         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
20817         be IA, IB, IC.
20818
20819 2002-06-21  Martin Baulig  <martin@gnome.org>
20820
20821         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
20822         on System.Enum.
20823
20824 2002-06-21  Martin Baulig  <martin@gnome.org>
20825
20826         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
20827         and called with one of the core types, return the corresponding typebuilder for
20828         that type.
20829
20830         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
20831         element type.
20832
20833 2002-06-21  Martin Baulig  <martin@gnome.org>
20834
20835         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
20836         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
20837         (Expression.ConvertReferenceExplicit): Likewise.
20838
20839         * expression.cs (ElementAccess.DoResolve): Likewise.
20840         (ElementAccess.DoResolveLValue): Likewise.
20841
20842 2002-06-10  Martin Baulig  <martin@gnome.org>
20843
20844         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
20845         add the "value" parameter to the parameter list.
20846
20847         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
20848         to our caller.
20849
20850 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
20851
20852         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
20853         the argument to an int, uint, long or ulong, per the spec.  Also
20854         catch negative constants in array creation.
20855
20856 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
20857
20858         * class.cs: do not allow the same interface to appear twice in
20859         the definition list.
20860
20861 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
20862
20863         * ecore.cs: don't use ldlen with System.Array.
20864
20865 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
20866
20867         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
20868
20869 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
20870
20871         * modifiers.cs: produce correct field attributes for protected
20872         internal. Easy fix so miguel can work on ther harder stuff:-)
20873
20874 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
20875
20876         * pending.cs: New file.  Move the code from class.cs here.
20877         Support clearning the pending flag for all methods (when not doing
20878         explicit interface implementation).
20879
20880 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
20881
20882         * rootcontext.cs: added a couple more types needed to bootstrap.
20883
20884 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
20885
20886         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
20887         constructor in the type, instead of any constructor in the type
20888         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
20889         a bug in the Mono runtime when applying the params attribute). 
20890
20891 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
20892         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
20893
20894 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
20895
20896         * expression.cs (Unary.ResolveOperator): Use TypeManager
20897         to resolve the type.
20898
20899 2002-06-13  Ravi Pratap  <ravi@ximian.com>
20900
20901         * cs-parser.jay (enum_member_declaration): Pass in the attributes
20902         attached.
20903
20904         * enum.cs (AddEnumMember): Add support to store the attributes associated 
20905         with each member too.
20906
20907         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
20908         field builders too - this takes care of the enum member case.
20909
20910 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
20911
20912         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
20913         address-of operator on both value types and pointers.
20914
20915 2002-06-10  Martin Baulig  <martin@gnome.org>
20916
20917         * interface.cs (Interface.PopulateIndexer): Add the indexer's
20918         PropertyBuilder to the `property_builders' list.
20919
20920         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
20921         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
20922         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
20923         find any indexers which are inherited from an interface.
20924
20925 2002-06-09  Martin Baulig  <martin@gnome.org>
20926
20927         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
20928         the same type as the constant if necessary.  There's also a test-130.cs
20929         for this.
20930
20931         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
20932
20933         * typemanager.cs (TypeManager.ChangeType): Previously known as
20934         Enum.ChangeEnumType().
20935
20936 2002-06-09  Martin Baulig  <martin@gnome.org>
20937
20938         * expression.cs (Cast.TryReduce): Added support for consts.
20939
20940 2002-06-08  Ravi Pratap  <ravi@ximian.com>
20941
20942         * class.cs (Accessor): Hold attributes information so we can pass
20943         it along.
20944
20945         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
20946         Modify to pass in attributes attached to the methods.
20947
20948         (add_accessor_declaration, remove_accessor_declaration): Ditto.
20949
20950         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
20951         to handle the Accessor kind :-)
20952
20953         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
20954
20955 2002-06-08  Martin Baulig  <martin@gnome.org>
20956
20957         * expression.cs (Unary.TryReduceNegative): Added support for
20958         ULongConstants.
20959
20960 2002-06-08  Martin Baulig  <martin@gnome.org>
20961
20962         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
20963         name can't be found in the `defined_names' - the caller will do a
20964         MemberLookup in this case and thus find methods in System.Enum
20965         such as Enum.IsDefined().
20966
20967 2002-06-08  Martin Baulig  <martin@gnome.org>
20968
20969         * enum.cs (Enum.ChangeEnumType): This is a custom version of
20970         Convert.ChangeType() which works with TypeBuilder created types.
20971         (Enum.LookupEnumValue, Enum.Define): Use it here.
20972
20973         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
20974         `TypeBuilder.BaseType != null' check.
20975         (TypeContainer.FindMembers): Only lookup parent members if we
20976         actually have a parent.
20977         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
20978         (ConstructorInitializer.Resolve): Likewise.
20979
20980         * interface.cs (Interface.FindMembers): Added
20981         `TypeBuilder.BaseType != null' check.
20982
20983         * rootcontext.cs (RootContext.ResolveCore): Added
20984         "System.Runtime.CompilerServices.IndexerNameAttribute" to
20985         classes_second_stage.
20986
20987         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
20988         debug_type and trace_type when compiling with --nostdlib.       
20989
20990 2002-06-07  Martin Baulig  <martin@gnome.org>
20991
20992         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
20993         (AddField): Set it to true when adding a non-static field.
20994         (DefineType): Use `have_nonstatic_fields' to find out whether we
20995         have non-static fields, not `Fields != null'.
20996
20997 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
20998
20999         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
21000         dereferencing a null on the static-field code path)
21001
21002 2002-05-30  Martin Baulig  <martin@gnome.org>
21003
21004         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
21005         to take command line arguments.  Use reflection to call the new
21006         custom `Initialize' function on the symbol writer and pass it the
21007         command line arguments.
21008
21009         * driver.cs (--debug-args): New command line argument to pass command
21010         line arguments to the symbol writer.
21011
21012 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
21013
21014         * assign.cs (DoResolve): Forgot to do the implicit conversion to
21015         the target type for indexers and properties.  Thanks to Joe for
21016         catching this.
21017
21018 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
21019
21020         * typemanager.cs (MethodFlags): returns the method flags
21021         (Obsolete/ShouldIgnore) that control warning emission and whether
21022         the invocation should be made, or ignored. 
21023
21024         * expression.cs (Invocation.Emit): Remove previous hack, we should
21025         not do this on matching a base type, we should do this based on an attribute
21026
21027         Only emit calls to System.Diagnostics.Debug and
21028         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
21029         on the command line.
21030
21031         * rootcontext.cs: Global settings for tracing and debugging.
21032
21033         * cs-tokenizer.cs (define): New utility function to track
21034         defines.   Set the global settings for TRACE and DEBUG if found.
21035
21036 2002-05-25  Ravi Pratap  <ravi@ximian.com>
21037
21038         * interface.cs (Populate*): Pass in the TypeContainer as well as
21039         the DeclSpace as parameters so that we can create EmitContexts and
21040         then use that to apply attributes etc.
21041
21042         (PopulateMethod, PopulateEvent, PopulateProperty)
21043         (PopulateIndexer): Apply attributes everywhere.
21044
21045         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
21046         etc.
21047
21048         (ApplyAttributes): Update accordingly.
21049
21050         We now apply interface attributes for all members too.
21051
21052 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
21053
21054         * class.cs (Indexer.Define); Correctly check if we are explicit
21055         implementation (instead of checking the Name for a ".", we
21056         directly look up if the InterfaceType was specified).
21057
21058         Delay the creation of the PropertyBuilder.
21059
21060         Only create the PropertyBuilder if we are not an explicit
21061         interface implementation.   This means that explicit interface
21062         implementation members do not participate in regular function
21063         lookups, and hence fixes another major ambiguity problem in
21064         overload resolution (that was the visible effect).
21065
21066         (DefineMethod): Return whether we are doing an interface
21067         implementation. 
21068
21069         * typemanager.cs: Temporary hack until we get attributes in
21070         interfaces (Ravi is working on that) and we get IndexerName
21071         support in interfaces.
21072
21073         * interface.cs: Register the indexers as properties.
21074
21075         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
21076         warning, I have verified that this is a bug in the .NET runtime
21077         (JavaScript suffers of the same problem).
21078
21079         * typemanager.cs (MemberLookup): When looking up members for
21080         interfaces, the parent of an interface is the implicit
21081         System.Object (so we succeed in searches of Object methods in an
21082         interface method invocation.  Example:  IEnumerable x;  x.ToString
21083         ()) 
21084
21085 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
21086
21087         * class.cs (Event): Events should also register if they do
21088         implement the methods that an interface requires.
21089
21090         * typemanager.cs (MemberLookup); use the new GetInterfaces
21091         method. 
21092
21093         (GetInterfaces): The code used to lookup interfaces for a type is
21094         used in more than one place, factor it here. 
21095
21096         * driver.cs: Track the errors at the bottom of the file, we kept
21097         on going.
21098
21099         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
21100         instance if the method we are calling is static!
21101
21102 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
21103
21104         * attribute.cs (ApplyAttributes): Make this function filter out
21105         the IndexerName attribute (as that attribute in reality is never
21106         applied) and return the string constant for the IndexerName
21107         attribute. 
21108
21109         * class.cs (TypeContainer.Emit): Validate that all the indexers
21110         have the same IndexerName attribute, and if so, set the
21111         DefaultName attribute on the class. 
21112
21113         * typemanager.cs: The return value might contain other stuff (not
21114         only methods).  For instance, consider a method with an "Item"
21115         property and an Item method.
21116
21117         * class.cs: If there is a problem with the parameter types,
21118         return. 
21119
21120 2002-05-24  Ravi Pratap  <ravi@ximian.com>
21121
21122         * ecore.cs (ImplicitConversionExists): Wrapper function which also
21123         looks at user defined conversion after making a call to 
21124         StandardConversionExists - we need this for overload resolution.
21125
21126         * expression.cs : Update accordingly the various method calls.
21127
21128         This fixes 2 bugs filed against implicit user defined conversions 
21129
21130 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
21131
21132         * statement.cs: Track the result of the assignment.
21133
21134 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
21135
21136         * expression.cs (MemberAccess): Improved error reporting for
21137         inaccessible members.
21138
21139 2002-05-22  Martin Baulig  <martin@gnome.org>
21140
21141         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
21142         itself with debugging support.
21143
21144 2002-05-22  Martin Baulig  <martin@gnome.org>
21145
21146         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
21147         Removed, this isn't needed anymore.
21148
21149 2002-05-20  Martin Baulig  <martin@gnome.org>
21150
21151         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
21152         be underlying type for an enum.
21153
21154 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
21155
21156         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
21157         that splits out the loading of just the core types.
21158
21159         * rootcontext.cs (ResolveCore): Split the struct resolution in
21160         two, so we can load the enumeration underlying types before any
21161         enums are used.
21162
21163         * expression.cs (Is): Bandaid until we fix properly Switch (see
21164         bug #24985 for details).
21165
21166         * typemanager.cs (ImplementsInterface): The hashtable will contain
21167         a null if there are no interfaces implemented.
21168
21169 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
21170
21171         * cs-parser.jay (indexer_declarator): It is fine to have array
21172         parameters
21173
21174 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
21175
21176         * typemanager.cs: (RegisterBuilder): New function used to register
21177         TypeBuilders that implement interfaces.  Since
21178         TypeBuilder.GetInterfaces (as usual) does not work with lame
21179         Reflection.Emit. 
21180         (AddUserType): register interfaces.
21181
21182         (ImplementsInterface): Use the builder_to_ifaces hash if we are
21183         dealing with TypeBuilder.  Also, arrays are showing up as
21184         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
21185         methods can not be invoked on them!
21186
21187         * ecore.cs (ExplicitReferenceConversionExists): Made public.
21188         (ImplicitReferenceConversionExists): Split out from
21189         StandardConversionExists. 
21190
21191         * expression.cs (As): We were only implementing one of the three
21192         cases for the as operator.  We now implement them all.
21193         (Is): Implement the various other cases for Is as well.
21194
21195         * typemanager.cs (CACHE): New define used to control if we want or
21196         not the FindMembers cache.  Seems to have a negative impact on
21197         performance currently
21198
21199         (MemberLookup): Nested types have full acess to
21200         enclosing type members
21201
21202         Remove code that coped with instance/static returns for events, we
21203         now catch this in RealFindMembers.
21204
21205         (RealFindMembers): only perform static lookup if the instance
21206         lookup did not return a type or an event.  
21207
21208 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
21209
21210         * assign.cs (CompoundAssign): We pass more semantic information
21211         now to Compound Assignments than we did before: now we have all
21212         the information at hand, and now we resolve the target *before* we
21213         do the expression expansion, which allows the "CacheValue" method
21214         to have the effect we intended (before, a [x] += 1 would generate
21215         two differen ArrayAccess expressions from the ElementAccess,
21216         during the resolution process).
21217
21218         (CompoundAssign.DoResolve): Resolve target and original_source here.
21219
21220 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
21221
21222         * expression.cs (ArrayAccess): dropped debugging information. 
21223
21224         * typemanager.cs: Small bug fix: I was always returning i_members,
21225         instead of one of i_members or s_members (depending on which had
21226         the content).
21227
21228         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
21229         method is invoked before any code generation takes place, and it
21230         is a mechanism to inform that the expression will be invoked more
21231         than once, and that the method should use temporary values to
21232         avoid having side effects
21233
21234         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
21235
21236         * ecore.cs (Expression.CacheTemporaries): Provide empty default
21237         implementation.
21238
21239         * expression.cs (Indirection, ArrayAccess): Add support for
21240         CacheTemporaries in these two bad boys. 
21241
21242         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
21243         ldobj or ldind_ref.  
21244         (StoreFromPtr): Handle stobj as well.
21245
21246         * expression.cs (UnaryMutator): Share more code.
21247
21248         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
21249         down: I was not tracking the Filter function as well, which
21250         was affecting the results of the cache.
21251
21252 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
21253
21254         * attribute.cs: Remove the hack to handle the CharSet property on
21255         StructLayouts. 
21256
21257 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
21258
21259         * attribute.cs (DoResolve): More uglyness, we now only try to
21260         resolve the attribute partially, to extract the CharSet
21261         information (only if we are a StructLayout attribute).  Otherwise 
21262
21263         (GetExtraTypeInfo): Add some code to conditionally kill in the
21264         future this.   I am more and more convinced that the .NET
21265         framework has special code to handle the attribute setting on
21266         certain elements.
21267
21268         * expression.cs (IsParamsMethodApplicable): Revert my previous
21269         foreach change here, it was wrong.
21270
21271 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
21272
21273         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
21274         (pp_expr): do not abort on unknown input, just return.
21275         (eval): abort if there are pending chars.
21276
21277         * attribute.cs (Attribute.Resolve): Positional parameters are
21278         optional.  Deal with that case.
21279
21280         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
21281         the Ansi/Unicode/Auto information for the type.
21282
21283         (TypeContainer.DefineType): instantiate the EmitContext here, as
21284         we will be using it during the type definition (to resolve
21285         attributes) and during the emit phase.
21286
21287         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
21288         to pull type information out of the attributes
21289
21290         (Attribute.Resolve): track the constructor builder, and allow for
21291         multiple invocations (structs and classes will use this).
21292
21293         * ecore.cs (MemberLookupFinal): new version with all the
21294         parameters customizable.
21295
21296         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
21297         constructors.  Return if the result value is null (as the error
21298         would have been flagged already by MemberLookupFinal)
21299
21300         Do not allow instances of abstract classes or interfaces to be
21301         created.
21302
21303         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
21304         We have to compare the assembly property here when dealing with
21305         FamANDAssem and Assembly access modifiers, because we might be
21306         creating an assembly from *modules* (that means that we are not
21307         getting TypeBuilders for types defined in other modules that are
21308         part of this assembly).
21309
21310         (Method.Emit): If the method is marked abstract and has a body,
21311         emit an error. 
21312
21313         (TypeContainer.DefineMembers): If both the defined member and the
21314         parent name match are methods, then do not emit any warnings: let
21315         the Method.Define routine take care of flagging warnings.  But if
21316         there is a mismatch (method overrides something else, or method is
21317         overriwritten by something, then emit warning).
21318
21319         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
21320         set to null, this means `do not check for the return type on the
21321         signature'. 
21322
21323         (Method.Define): set the return type for the method signature to
21324         null, so that we get methods with the same name and parameters and
21325         different return types.  This is used to flag warning 114 (you are
21326         hiding a method, and you probably want to use the new/override
21327         keywords instead).
21328
21329         * typemanager.cs (MemberLookup): Implemented proper access
21330         control, closing a long standing set of bug reports.  The problem
21331         was that the Framework only has two bits: Public and NonPublic,
21332         and NonPublic includes private and protected methods, but we need
21333         to enforce the FamANDAssem, FamOrAssem and Family. 
21334
21335 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
21336
21337         * statement.cs (GotoCase): Return true: Ammounts to giving up
21338         knowledge on whether we return or not, and letting the other case
21339         be responsible for it.
21340
21341 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
21342
21343         * driver.cs: Do not load directories for each file processed, only
21344         do it if there is a pattern.
21345
21346         * ecore.cs: Report readonly assigns here as well, as we might have
21347         been resolved only by MemberAccess.
21348
21349         (SimpleName.SimpleNameResolve): Also be useful for LValue
21350         resolution.   We need this to propagate assign to local readonly variables
21351
21352         * typemanager.cs: Use a ptrhashtable for the criteria, because we
21353         do not want to reuse potential criteria memory.
21354
21355         * class.cs (MyEventBuilder): Set reflected_type;
21356
21357         * ecore.cs (Constantify): Added support for constifying bools.
21358
21359         (RootContext.LookupType): Added a cache for values looked up in
21360         the declaration space.
21361
21362         * typemanager.cs (FindMembers): Now is a front-end to
21363         RealFindMembers, and provides a two-level hashtable-based cache to
21364         the request.  
21365
21366         15% performance improvement: from 22.5 to 19.2 seconds.
21367
21368         * expression.cs (IsParamsMethodApplicable): use foreach.
21369         (Invocation.DoResolve): ditto.
21370         (New.DoResolve): ditto.
21371         (ArrayCreation.DoResolve): ditto.
21372
21373         * ecore.cs (FindMostEncompassingType): use foreach.
21374
21375         * delegate.cs (NewDelegate.DoResolve): Use foreach
21376
21377         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
21378         (RemoveMethods): use foreach.
21379
21380         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
21381         nested foreach statements instead of for, and also break out of
21382         the inner loop once a match is found.
21383
21384         (Invocation.OverloadResolve): Use foreach, simplify the code. 
21385
21386 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
21387
21388         * cfold.cs (BinaryFold): During an enumeration evaluation context,
21389         we actually unwrap the expression to allow for extra information
21390         to be extracted. 
21391
21392         * expression.cs: Use Shr_Un on unsigned operations. 
21393
21394 2002-05-08  Ravi Pratap  <ravi@ximian.com>
21395
21396         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
21397         applicable operators was not being considered correctly. This closes
21398         the bug Miguel reported.
21399
21400 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
21401
21402         * attribute.cs: check that the type derives from System.Attribute
21403         and report the correct error in that case (moved the duplicate code to
21404         its own method, too).
21405
21406 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
21407
21408         * attribute.cs: lookup attribute type name as the spec says: first the
21409         bare attribute name and then name + "Attribute" (nant compiles with
21410         mcs after this fix).
21411
21412 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
21413
21414         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
21415         Because of the way we parse things, we should try to see if a
21416         UIntConstant can fit in an integer.
21417
21418 2002-05-07  Ravi Pratap  <ravi@ximian.com>
21419
21420         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
21421         when we are in an explicit context.
21422
21423         (ConvertReferenceExplicit): When converting from Iface type S to Class
21424         T make sure the rules are implemented as an OR.
21425
21426         * parameter.cs (ParameterType): Make it a property for now although the
21427         purpose really isn't anything immediate.
21428
21429         * expression.cs (Is*Applicable): Do better checking on the parameter type
21430         of a ref/out parameter. The ones from the system assemblies are already 
21431         marked with the correct type so we don't need to do any correction.
21432
21433         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
21434         the object type is standard too so include that.
21435
21436 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
21437
21438         * ecore.cs (StandardConversionExists): Augment with missing code:
21439         deal with IntConstant, LongConstants and Enumerations.
21440
21441         * assign.cs: Report the error, instead of failing silently
21442
21443         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
21444         typecontainer that they are declared, because the
21445         typecontainer/namespace will have the list of using clauses that
21446         need to be applied.
21447
21448         Assembly Attributes were escaping the normal registration
21449         mechanism. 
21450
21451         (EmitCode): Apply attributes within an EmitContext that represents
21452         the container they were declared on.
21453
21454         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
21455
21456 2002-05-06  Ravi Pratap  <ravi@ximian.com>
21457
21458         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
21459         Revamp completely - make much cleaner as we now operate only
21460         on a set of Types.
21461
21462         (FindMostSpecificSource, FindMostSpecificTarget): New methods
21463         to implement the logic detailed in the spec more correctly.
21464
21465         (UserDefinedConversion): Update accordingly.
21466
21467 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
21468
21469         * statement.cs: Return flow analysis information up.
21470
21471         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
21472         and the default.
21473
21474         (token): Do not consume an extra character before calling
21475         decimal_digits.
21476
21477 2002-05-06  Piers Haken <piersh@friskit.com>
21478
21479         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
21480
21481 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
21482
21483         * class.cs (Constructor.Emit): Set the IsStatic flag in the
21484         EmitContext during the instance constructor initializer
21485         resolution, to stop access to instance variables.
21486
21487         This is mandated by the spec, last paragraph of the `constructor
21488         initializers' section. 
21489
21490 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
21491
21492         * cs-parser.jay, class.cs (Accessor): new class used to represent
21493         an accessor (get or set).  In the past we used `null' to represent
21494         a missing accessor.  But this is ambiguous because there was no
21495         way to tell in abstract indexers/properties if one of them was
21496         specified.
21497
21498         Now there is a way of addressing that.
21499
21500         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
21501         instead of FindMembers.
21502
21503         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
21504         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
21505
21506         * attribute.cs: Treat indexers and properties as the same in terms
21507         of applying attributes
21508
21509         * ecore.cs (FindMostEncompassedType): Use statically initialized
21510         EmptyExpressions()s like we do elsewhere to avoid creating useless
21511         objects (and we take this out of the tight loop).
21512
21513         (GetConversionOperators): Move the code to extract the actual
21514         operators to a separate routine to clean things up.
21515
21516 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
21517
21518         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
21519         events are always registered FieldBuilders.
21520
21521         * class.cs (FieldBase): New class shared by Fields 
21522
21523         * delegate.cs: If we are a toplevel delegate, use our full name.
21524         If we are a nested delegate, then only use our tail name.
21525
21526 2002-05-02  Ravi Pratap  <ravi@ximian.com>
21527
21528         * expression.cs (IsApplicable): Ensure that we add the "&" to
21529         ref/out types before comparing it with the type of the argument.
21530
21531         (IsParamsMethodApplicable): Ditto.
21532
21533         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
21534         silly me ;-)
21535
21536         * delegate.cs : Handle the case when we have more than one applicable
21537         method. Flag an error only when we finish checking all.
21538
21539 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
21540
21541         * expression.cs: Add support for boolean static initializers.
21542
21543 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
21544
21545         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
21546
21547         * parameter.cs (ComputeParameterTypes,
21548         ComputeAndDefineParameterTypes): Better error handling: now we
21549         clear the `types' cache if we fail during any of the type lookups.
21550         We also return the status code correctly to our caller
21551
21552         * delegate.cs: If we fail to define a delegate, abort the extra
21553         steps. 
21554
21555         * expression.cs (Binary.ResolveOperator): for
21556         operator==(object,object) and operator !=(object, object) we also
21557         have to verify that there is an implicit conversion from one to
21558         the other.
21559
21560         (ArrayAccess.DoResolve): Array Access can operate on
21561         non-variables. 
21562
21563 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
21564
21565         * assign.cs (CompoundAssign): A new class used as a "flag" that
21566         the assignment actually is happening as part of a compound
21567         assignment operator.
21568
21569         During compound assignment, a few new rules exist to enable things
21570         like:
21571
21572         byte b |= 1 + 2
21573
21574         From the spec:
21575
21576         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
21577         to the type of x) if y is implicitly convertible to the type of x,
21578         and the operator is a builtin operator and the return type of the
21579         operator is explicitly convertible to the type of x. 
21580
21581         * rootcontext.cs: Reset warning level to 2.  4 catches various
21582         "interesting" features in mcs, we must clean this up at some
21583         point, but currently am trying to kill other bugs ;-)
21584
21585         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
21586         in container classes as well.  
21587
21588         * expression.cs (Binary.ResolveOperator): Handle string case
21589         before anything else (as operator overloading does emit an error
21590         before doing anything else).
21591
21592         This code could go away when we move to a table driven model, but
21593         i could not come up with a good plan last night.
21594
21595 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
21596
21597         * typemanager.cs (CSharpName): reimplementation using regex.
21598         * class.cs: added null check for fields in Emit
21599         * rootcontext.cs: set warninglevel to 4
21600
21601 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
21602
21603         * typemanager.cs (CSharpName): reimplemented with Lupus
21604         suggestion.
21605
21606 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
21607
21608         * statement.cs (If): correclty implement Resolve, because we were
21609         not catching sem errors in there.  The same process is needed
21610         everywhere else. 
21611         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
21612
21613
21614         (Statement.Warning_DeadCodeFound): Factorize code.
21615         (While): Report dead code here too.
21616
21617         (Statement): Added Resolve virtual method to allow
21618         for resolution split from the emit code.
21619
21620 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
21621
21622         * statement.cs (EmitBoolExpression): No longer try to resolve the
21623         expression here.    
21624         (MakeBoolean): New utility function that resolve, implicitly
21625         converts to boolean and tags the expression. 
21626
21627
21628         (If, Do): Implement dead code elimination.
21629         (While): Implement loop inversion
21630
21631         (Do, While, For, If): Resolve the expression prior to calling our
21632         code generation.
21633
21634 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
21635
21636         * class.cs:
21637           - added method Report28 (warning: program has more than one entry point)
21638           - added method IsEntryPoint, implements paragraph 10.1 of the spec
21639           - modified method Method.Define, the part at the end of the method
21640
21641         * rootcontext.cs: added static public Location EntryPointLocation;
21642           
21643         * ../errors/cs0028.cs : Add test case for the above warning.              
21644
21645         * typemanager.cs:
21646           - modified method CSharpName to allow arrays of primitive type to
21647             be printed nicely (e.g. instead of System.Int32[][] it now prints
21648             int[][])
21649           - added method CSharpSignature: returns the signature of a method
21650             in string format to be used in reporting errors, warnings, etc.
21651
21652         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
21653         with String.Empty.
21654
21655 2002-04-26  Ravi Pratap  <ravi@ximian.com>
21656
21657         * delegate.cs (Define): Fix extremely silly bug where I was
21658         setting the type of the 'object' parameter of the BeginInvoke
21659         method to System.IAsyncResult instead of System.Object ;-)
21660
21661 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
21662
21663         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
21664         here. 
21665
21666         (Constructor.Emit): return if we fail to initialize the
21667         constructor.  Another door closed!  
21668
21669         * expression.cs (New.DoResolve): Improve error message (from -6 to
21670         1501).  Use DeclaredOnly lookup to find the exact constructor.
21671
21672         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
21673         loop.  This is useful.
21674
21675         * cs-parser.jay: Adjust the default parameters so that destructors
21676         have the proper signature.
21677
21678 2002-04-26  Martin Baulig  <martin@gnome.org>
21679
21680         * driver.cs (LoadAssembly): If `assembly' contains any characters
21681         which are only valid in path names and not in assembly names
21682         (currently slash, backslash and point), use Assembly.LoadFrom ()
21683         instead of Assembly.Load () on the `assembly' (before iteration
21684         over the link_paths).
21685
21686 2002-04-26  Martin Baulig  <martin@gnome.org>
21687
21688         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
21689
21690 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
21691
21692         * class.cs (Property): use the new typemanager.MemberLookup
21693
21694         (TypeContainer.MemberLookup): Implement using the
21695         TypeManager.MemberLookup now. 
21696
21697         * typemanager.cs: Make MemberLookup a function of the TypeManager,
21698         and return MemberInfos, so that these can be used without an
21699         EmitContext (what we had before).
21700
21701 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
21702
21703         * expression.cs: Fix the case where the argument to params if the
21704         type of the params.  I omitted handling this before.   Fixed
21705
21706 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
21707
21708         * driver.cs: Call BootCorlib_PopulateCoreType
21709
21710         * class.cs (Property.CheckBase): Check for properties only, not
21711         for all members. 
21712
21713         * interface.cs: Temporary hack: try/catch around the
21714         CustomAttributeBuilder, because I am getting an exception that I
21715         do not understand.
21716
21717         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
21718         types whose definitions are required to be there (attributes are
21719         defined before standard types).
21720
21721         Compute definitions as we boot the various types, as they are used
21722         immediately (value_type class will need object_type, but if we do
21723         not initialize object_type, we will pass a null, which will let
21724         the runtime pick the System.Object from the existing corlib, which
21725         is not what we want).
21726
21727 2002-04-22  Patrik Torstensson <totte@labs2.com>
21728
21729         * cs-tokenizer.cs: fixed a number of trim() issues.
21730
21731 2002-04-22  Ravi Pratap  <ravi@ximian.com>
21732
21733         * expression.cs (Argument.Type): Ensure that we return the correct
21734         type when we have out or ref parameters [in which case we 
21735         append a "&"].
21736
21737 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
21738
21739         * class.cs (Property, Indexer): Allow extern modifier in there. 
21740
21741         * typemanager.cs (InitBaseTypes): Initializes object_type and
21742         value_type, since those will be used early on during the bootstrap
21743         process to compile corlib.
21744
21745         (InitCoreTypes): Move code from here to InitBaseTypes.
21746
21747 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
21748
21749         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
21750         single-dimension arrays as using the ldlen opcode.  
21751
21752         Daniel Lewis discovered this optimization.  
21753
21754         * typemanager.cs: Add signature for System.Array::get_Length
21755
21756 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21757
21758         * statement.cs: report the error when the foreach does not apply to an
21759         array nor a collection.
21760
21761 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
21762
21763         * expression.cs: Add implicit conversions to the operator ~.
21764
21765         * constant.cs (DecimalConstant.Emit): Emit decimal value.
21766
21767         * typemanager.cs: Locate the decimal constructor.
21768
21769 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21770
21771         * attribute.cs: use the new property of TypeOf.
21772         * expression.cs: added 'get' property around typearg.
21773
21774         These changes fix a build breaker reported by NickD. Is this the
21775         correct way to fix?  If not, please, revert my changes and make it
21776         work :-).
21777
21778 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
21779
21780         * attribute.cs: Add support for typeof in attribute invocations.
21781         I am not sure that this is right though.
21782
21783 2002-04-14  Duncan Mak  <duncan@ximian.com>
21784
21785         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
21786         Binary.Operator.Division case.
21787
21788 2002-04-13  Ravi Pratap  <ravi@ximian.com>
21789
21790         * class.cs (DefineType): Ensure that we do a proper check on
21791         attribute types and also register it with the TypeManager.
21792
21793         (TypeContainer.Targets): The default for attribute types is
21794         AttributeTargets.All.
21795
21796         * attribute.cs (ApplyAttributes): Registering the attribute type
21797         is done elsewhere, not when we discover we have a Usage attribute.
21798
21799 2002-04-12  Ravi Pratap  <ravi@ximian.com>
21800
21801         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
21802         and get rid of is_delegate parameter.
21803
21804         * everywhere : update.
21805
21806 2002-04-12  Ravi Pratap  <ravi@ximian.com>
21807
21808         * cs-parser.jay (compilation_unit): Revamp completely to use
21809         some new ideas that I got from Rhys' grammar to solve the problems
21810         with assembly level attributes.
21811
21812         (outer_declaration): New grammar production.
21813
21814         (attribute_sections): Add.
21815
21816         (opt_attributes): Base on attribute_sections
21817
21818         (namespace_declaration): Allow opt_attributes to tackle the case
21819         when we have assembly level attributes - we are clever in this
21820         regard now ;-)
21821
21822         * attribute.cs (ApplyAttributes): Do not worry about assembly 
21823         attributes in the non-global context.
21824
21825         * rootcontext.cs (AddGlobalAttributes): Go back to using this
21826         instead of SetGlobalAttributes.
21827
21828         * class.cs, rootcontext.cs : Ensure we define and generate 
21829         attribute types before anything else.
21830
21831         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
21832         and flag the new error -20 for the case when the attribute type
21833         does not have valid targets specified. csc does not catch this.
21834
21835         * ../errors/errors.txt : update for error # -20
21836
21837 2002-04-11  Ravi Pratap  <ravi@ximian.com>
21838
21839         * support.cs (InternalParameters.ParameterModifier): Do some null
21840         checking and return sane values.
21841
21842         * class.cs (Method.Define): If we are a PInvoke method, ensure
21843         that we are static and extern. Report error # 601
21844
21845         * ../errors/cs0601.cs : Add test case for the above error.
21846
21847 2002-04-07  Ravi Pratap  <ravi@ximian.com>
21848
21849         * rootcontext.cs (attribute_types): We need to keep type of
21850         all attribute types separately and emit code for them first.
21851
21852         (RegisterAttribute) : Implement.
21853
21854         * class.cs (DefineType): Check if the current Type is a custom
21855         attribute type and register it accordingly.
21856
21857         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
21858         adding the first attribute twice and rename to
21859
21860         (SetGlobalAttributes): this.
21861
21862         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
21863         lookups.
21864
21865         * attribute.cs (ApplyAttributes): Take an additional argument telling us
21866         if we are processing global arguments. Hmm, I am unsure of this.
21867
21868 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21869
21870         * expression.cs: added static array of strings to avoid calling
21871         Enum.ToString () for Operator in Binary. Significant recover of
21872         performance.
21873
21874 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
21875
21876         * class.cs (FindMembers): Allow the Builders of the various
21877         members to be null.  If they are skip them.  This only happens
21878         during the PInvoke declaration.
21879
21880 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
21881
21882         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
21883         failure, so we do not keep going afterwards.
21884
21885         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
21886         wanted to pass `false' as the `is_delegate' argument.  If this is
21887         the case, why not use delegate_type == null to mean `is_delegate =
21888         false' and anything else as is_delegate = true.
21889
21890 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
21891
21892         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
21893         code for the section, not the beginning of the tests.
21894
21895 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
21896
21897         * cfold.cs: Handle operator + (Enum x, Underlying x) 
21898
21899         * expression.cs (Binary): same.  Warn about errors where we have
21900         Enum/Enum in operator + as well.
21901
21902 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
21903
21904         * statement.cs:
21905                 - added support for switch(bool)
21906                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
21907                 - add TableSwitchEmit() to handle table-based switch statements
21908
21909 2002-04-05  Ravi Pratap  <ravi@ximian.com>
21910
21911         * expression.cs (Invocation.OverloadResolve): Factor out code which
21912         does parameter compatibility checking with arguments so that we can 
21913         re-use the code even from Delegate.VerifyApplicability
21914
21915         (VerifyArgumentsCompat): Move above code here.
21916
21917         * delegate.cs (VerifyApplicability): Get rid of duplicate code
21918         and instead make a call to the above method.
21919
21920 2002-03-31  Ravi Pratap  <ravi@ximian.com>
21921
21922         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
21923         We use it to keep track of classes which are attribute types.
21924
21925 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
21926
21927         * delegate.cs (Delegate.Define): Correctly define the types in the
21928         presence of fixed and array parameters.
21929
21930         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
21931         doing FindMembers.
21932
21933         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
21934         include NonPublic after the first iteration.
21935
21936         * class.cs (Indexer.CheckBase): Only check if both parents are
21937         non-null. 
21938
21939         * cs-parser.jay (accessor_body): If empty, set to null.
21940
21941         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
21942         same code path here to resolve constants names that we did have in
21943         MemberAccess.DoResolve.  There is too much code duplicated here.
21944
21945 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
21946
21947         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
21948
21949         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
21950         to MakeUnionSet.
21951
21952         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
21953         tokens, numbers and strings.
21954
21955         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
21956         parenthesis.
21957
21958         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
21959         asyncronous parameters and the regular parameters.  
21960
21961         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
21962         specify the target directory.
21963
21964         * expression.cs: (This.DoResolve): Simplify
21965         (As.Emit): Optimize, do not generate IsInst if the expression is
21966         always of the given type.
21967
21968         (Is.DoResolve): Bug fix, we were reporting both always/never for
21969         the is expression.
21970
21971         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
21972         creating too many unnecessary arrays.
21973
21974 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
21975
21976         * class.cs (EmitFieldInitializer): Use Assign expression to assign
21977         fields instead of rolling our own initializer.   Takes care of all
21978         implicit conversions, and drops unnecessary static checks/argument.
21979
21980 2002-03-31  Dick Porter  <dick@ximian.com>
21981
21982         * driver.cs: use the GetDirectories() return values properly, and
21983         use "/" as path separator.
21984
21985 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
21986
21987         * expression.cs (Unary): Optimize - - expr into expr.
21988         (Binary): Optimize a + (-b) into a -b.
21989
21990         * codegen.cs (CodeGen): Made all methods static.
21991
21992 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
21993
21994         * rootcontext.cs: 
21995
21996         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
21997         TypeBuilder property.
21998
21999         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
22000         instead. 
22001
22002         * tree.cs: Removed the various RecordXXXX, and replaced with a
22003         single RecordDecl.  Removed all the accessor methods, and just
22004         left a single access point Type 
22005
22006         * enum.cs: Rename DefineEnum to DefineType.
22007
22008         * decl.cs: New abstract method `DefineType' used to unify the
22009         Defines for Enumerations, Interfaces, TypeContainers and
22010         Delegates.
22011
22012         (FindType): Moved LookupInterfaceOrClass here.  Moved the
22013         LookupBaseClasses method that used to live in class.cs and
22014         interface.cs here, and renamed to FindType.
22015
22016         * delegate.cs: Implement DefineType.  Take advantage of the
22017         refactored pattern for locating the parent builder without taking
22018         the parent_builder argument (which we know does not work if we are
22019         nested, and triggering a toplevel definition).
22020
22021 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
22022
22023         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
22024         accessibility of a member has changed during override and report
22025         an error if so.
22026
22027         * class.cs (Method.Define, Property.Define): Only complain on
22028         overrides if the method is private, any other accessibility is
22029         fine (and since we just checked the permission is the same, we are
22030         good to go).
22031
22032         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
22033         and elif are processed always.  The other pre-processing
22034         directives are only processed if we are "taking" the path
22035
22036 2002-03-29  Martin Baulig  <martin@gnome.org>
22037
22038         * class.cs (Method.Emit): Only emit symbolic debugging info if the
22039         current location is not Null.
22040
22041         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
22042         a separate method so we can profile it.
22043
22044         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
22045         `span.Seconds' are just seconds, but no minutes or hours.
22046         (MainDriver): Profile the CodeGen.SaveSymbols calls.
22047
22048 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
22049
22050         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
22051         Remove the gratuitous set of Final:
22052
22053                                 // If an interface implementation, then we can set Final.
22054                                 if (((flags & MethodAttributes.Abstract) == 0) &&
22055                                     implementing.DeclaringType.IsInterface)
22056                                         flags |= MethodAttributes.Final;
22057
22058         I do not know what I was smoking when I used that.
22059
22060
22061         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
22062         step into fixing the name resolution issues for delegates and
22063         unifying the toplevel name resolution.
22064
22065 2002-03-28  Martin Baulig  <martin@gnome.org>
22066
22067         * class.cs (Method.Emit): If we have a symbol writer, call its
22068         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
22069         tell it about the current method.
22070
22071         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
22072         writer that we're going to emit the first byte of IL code for a new
22073         statement (a new source line).
22074         (EmitContext.EmitTopBlock): If we have a symbol writer, call
22075         EmitContext.Mark() before emitting any code.
22076
22077         * location.cs (SymbolDocument): Return null when we're Null.
22078
22079         * statement.cs (Statement): Moved the `Location loc' variable here.
22080         (Statement.EmitBoolExpression): If we have a symbol writer, call
22081         ec.Mark() before emitting any code to tell it that we're at the
22082         beginning of a new statement.
22083         (StatementExpression): Added `Location' argument to the constructor.
22084         (Block): Added public readonly variable `StartLocation' and public
22085         variable `EndLocation'.  The latter is to be set using SetEndLocation().
22086         (Block): Added constructor which takes a start and end location.
22087         (Block.SetEndLocation): New method. This sets the end location.
22088         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
22089         local variables we create.
22090         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
22091         each statement and do also mark the begin and end of the block.
22092
22093         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
22094         tell it the current lexer.Location, use Location.Null for the end of the
22095         block.
22096         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
22097         current block, set its end location using SetEndLocation().
22098         (statement_expression): StatementExpression constructor now takes the
22099         lexer.Location as additional argument.
22100         (for_statement, declare_local_variables): Likewise.
22101         (declare_local_variables): When creating a new implicit block, use the
22102         new Block constructor and pass it the lexer.Location.
22103
22104 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
22105
22106         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
22107         members also on the parent interfaces recursively.
22108
22109 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
22110
22111         * report.cs: Use new formats, since Gonzalo finished the missing
22112         bits. 
22113
22114         * expression.cs (Binary.ResolveOperator): added missing operator|
22115         operator& and operator^ for bool/bool.
22116
22117         * cs-parser.jay: CheckDef now takes a Location argument that is
22118         used to report errors more precisly (instead of reporting the end
22119         of a definition, we try to track something which is a lot closer
22120         to the source of the problem).
22121
22122         * cs-tokenizer.cs: Track global token use, so we can properly flag
22123         the use of #define/#undef after the first token has been seen.
22124
22125         Also, rename the reportXXXX to Error_DescriptiveName
22126
22127         * decl.cs (DeclSpace.IsTopLevel): Move property here from
22128         TypeContainer, so that Enum and Interface can use this too.
22129
22130         * class.cs (TypeContainer.LookupInterfaceOrClass,
22131         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
22132         `builder' argument.  Typically this was used to pass the parent
22133         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
22134         the definition).  
22135
22136         The problem is that a nested class could trigger the definition of
22137         a toplevel class, and the builder would be obviously wrong in that
22138         case. 
22139
22140         So we drop this argument, and we compute dynamically the
22141         TypeBuilder/ModuleBuilder (the correct information was available
22142         to us anyways from DeclSpace.Parent)
22143
22144         * interface.cs (Interface.DefineInterface): Drop builder
22145         parameter cleanup like class.cs
22146
22147         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
22148         like class.cs
22149
22150         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
22151         values. 
22152
22153         (Try.Emit): Propagate the returns value from the statement.
22154
22155         (Return.Emit): Even if we are leavning 
22156
22157         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
22158
22159         * modifiers.cs: Fix the computation of MethodAttributes flags.
22160
22161 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
22162
22163         * driver.cs: allow compilation of files that start with '/'.
22164         Add a default case when checking the argument of --target.
22165
22166 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
22167
22168         * interface.cs: Implement the same search algorithm for types in
22169         the interface code.
22170
22171         * delegate.cs: Do not allow multiple definition.
22172
22173         * Recovered ChangeLog that got accidentally amputated
22174
22175         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
22176
22177         * rootcontext.cs: Load manually enum to allow core classes to
22178         contain enumerations.
22179
22180         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
22181         Update to new static methods in TypeManager.
22182
22183         * typemanager.cs (GetMethod, GetConstructor): Use our
22184         implementation of FindMembers to find the members, since during
22185         corlib compilation, the types are TypeBuilders and GetMethod and
22186         GetConstructor do not work.
22187
22188         Make all methods in TypeManager static.
22189
22190         (InitCodeHelpers): Split the functionality from
22191         the InitCodeTypes function.
22192
22193         * driver.cs: Call InitCodeHelpers after we have populated the
22194         types. 
22195
22196         * cs-parser.jay (delegate_declaration): we did not used to compute
22197         the delegate name correctly for void delegates.
22198
22199 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
22200
22201         * rootcontext.cs (RootContext): Init the interface_resolve_order
22202         and type_container_resolve_order always.
22203
22204         (ResolveCore, BootstrapCorlib_ResolveClass,
22205         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
22206         compiler when compiling with --nostdlib
22207
22208         * class.cs (TypeContainer.DefineType): Check that our parent is
22209         not null.  This test is most important when we are bootstraping
22210         the core types.
22211
22212         * codegen.cs: Split out the symbol writing code.
22213
22214 2002-03-25  Martin Baulig  <martin@gnome.org>
22215
22216         * driver.cs (-g): Made -g an alias for --debug.
22217
22218 2002-03-24  Martin Baulig  <martin@gnome.org>
22219
22220         * codegen.cs (SymbolWriter): New public variable. Returns the
22221         current symbol writer.
22222         (CodeGen): Added `bool want_debugging_support' argument to the
22223          constructor. If true, tell the ModuleBuild that we want debugging
22224         support and ask it for the ISymbolWriter.
22225         (Save): If we have a symbol writer, call it's Close() method after
22226         saving the assembly.
22227
22228         * driver.c (--debug): New command line argument to create a
22229         debugger information file.
22230
22231         * location.cs (SymbolDocument): New public property. Returns an
22232         ISymbolDocumentWriter object for the current source file or null
22233         if we don't have a symbol writer.
22234
22235 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
22236
22237         * driver.cs (LoadAssembly): Correctly return when all the paths
22238         have been tried and not before.
22239
22240         * statement.cs (Switch.Emit): return the actual coverage for this
22241         statement (returns/not-returns)
22242
22243         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
22244         switch of the statement if we are the last switch section.  That
22245         kills two problems: try/catch problems (we used to emit an empty
22246         nop at the end) and switch statements where all branches would
22247         return. 
22248
22249 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
22250
22251         * driver.cs: Add default assemblies (the equivalent to the
22252         Microsoft CSC.RSP file)
22253
22254         * cs-tokenizer.cs: When updating `cols and setting it to zero,
22255         also update tokens_seen and set it to false.
22256
22257         * driver.cs: Implement --recurse for Mike.
22258
22259         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
22260         correctly splitting out the paths.
22261
22262 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
22263
22264         * interface.cs (Interface.PopulateProperty): Instead of using
22265         `parent' as the declaration space for the set parameters, use
22266         `this' 
22267
22268         * support.cs (InternalParameters): InternalParameters constructor
22269         takes a DeclSpace instead of a TypeContainer.
22270
22271         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
22272         types are being initialized, load the address of it before calling
22273         the function.  
22274
22275         (New): Provide a mechanism to disable the generation of local
22276         value type temporaries when the caller will be providing us with
22277         an address to store it.
22278
22279         (ArrayCreation.EmitDynamicInitializers): Use it.
22280
22281 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
22282
22283         * expression.cs (Invocation.EmitArguments): Only probe for array
22284         property if there is more than one argument.  Sorry about that.
22285
22286         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
22287         empty param arrays.
22288
22289         * class.cs (Method.LabelParameters): Fix incorrect code path that
22290         prevented the `ParamArrayAttribute' from being applied to the
22291         params attribute.
22292
22293 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
22294
22295         * support.cs (ReflectionParameters): Correctly compute whether the
22296         last argument is a params array.  Fixes the problem with
22297         string.Split ('a')
22298
22299         * typemanager.cs: Make the assemblies array always be non-null
22300         (empty, but non-null)
22301
22302         * tree.cs (RecordDecl): New function that abstracts the recording
22303         of names.  This reports error 101, and provides a pointer to the
22304         previous declaration.  Fixes a crash in the compiler.
22305
22306         * cs-parser.jay (constructor_declaration): Update to new grammar,
22307         and provide a constructor_body that can be empty.
22308
22309 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
22310
22311         * driver.cs: Add support for --resources.
22312
22313         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
22314         Make all types for the various array helper methods be integer.
22315
22316         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
22317         CheckState to ConvCast.
22318
22319         (ConvCast): Now it takes a `checked' state argument, to avoid
22320         depending on the emit context for the conversion, and just using
22321         the resolve time setting.
22322
22323         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
22324         instead of Invocation.EmitArguments.  We do not emit the original
22325         arguments, instead we emit those which have been converted to
22326         unsigned int expressions.
22327
22328         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
22329
22330         * codegen.cs: ditto.
22331
22332         * expression.cs (LocalVariableReference): Drop the use of the
22333         Store function that depended on the variable index.
22334
22335         * statement.cs (VariableInfo): Drop the `Idx' property from this
22336         class, as this is not taking into account the indexes for
22337         temporaries tat we generate during the execution, getting the
22338         indexes wrong.
22339
22340         * class.cs: First emit class initializers, then call the parent
22341         constructor. 
22342
22343         * expression.cs (Binary): Fix opcode emision.
22344         (UnaryMutator.EmitCode): Support checked code generation
22345
22346         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
22347         matches for events for both the Static and Instance scans,
22348         pointing to the same element.   Fix that.
22349
22350 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
22351
22352         * rootcontext.cs (ResolveTree): Always set the
22353         interface_resolve_order, because nested interfaces will be calling
22354         into us.
22355
22356         * class.cs (GetInterfaceOrClass): Track the same resolution
22357         process used by TypeManager.LookupType.  This fixes the nested
22358         type lookups in class declarations (separate path from
22359         LookupType). 
22360
22361         (TypeContainer.DefineType): Also define nested interfaces.
22362         (TypeContainer.RegisterOrder): New public function used to
22363         register the order in which child interfaces need to be closed.
22364
22365         Nested interfaces need to be closed after their parents have been
22366         created. 
22367
22368         * interface.cs (InterfaceAttr): Put all the logic for computing
22369         the interface attribute here. 
22370
22371         (DefineInterface): Register our interface order with the
22372         RootContext or with the TypeContainer depending on the case.
22373
22374 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
22375
22376         * cs-parser.jay: rework foreach statement to work with the new
22377         changes to the policy on SimpleNames.
22378
22379         * report.cs: support Stacktrace on warnings as well.
22380
22381         * makefile: drop --unsafe and /unsafe from the compile.
22382
22383 2002-03-13  Ravi Pratap  <ravi@ximian.com>
22384
22385         * ecore.cs (StandardConversionExists): Modify to take an Expression
22386         as the first parameter. Ensure we do null -> reference type conversion
22387         checking.
22388
22389         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
22390         temporary Expression objects.
22391
22392 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
22393
22394         * interface.cs: workaround bug in method overloading resolution
22395         (there is already a bugzilla bug for it).
22396
22397 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
22398
22399         We could also solve this problem by having a separate path for
22400         performing type lookups, instead of DoResolve, we could have a
22401         ResolveType entry point, and only participating pieces of the
22402         production (simplename, deref, array) would implement this. 
22403
22404         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
22405         signal SimpleName to only resolve type names and not attempt to
22406         resolve anything else.
22407
22408         * expression.cs (Cast): Set the flag.
22409
22410         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
22411
22412         * class.cs: Only report 108 if there is no `new' modifier.
22413
22414         * cs-parser.jay: rework foreach statement to work with the new
22415         changes to the policy on SimpleNames.
22416
22417         * report.cs: support Stacktrace on warnings as well.
22418
22419         * makefile: drop --unsafe and /unsafe from the compile.
22420
22421 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
22422
22423         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
22424         lookups here, instead of doing that at parse time.  This means
22425         that our grammar will not introduce `LocalVariableReferences' as
22426         expressions at this point.  That solves the problem of code like
22427         this:
22428
22429         class X {
22430            static void Main ()
22431            { int X = 1;
22432             { X x = null }}}
22433
22434         This is only half the fix.  The full fix requires parameters to
22435         also be handled in this way.
22436
22437         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
22438         makes the use more obvious of the DeclSpace.  The
22439         ec.TypeContainer.TypeBuilder is now only used to pull the
22440         TypeBuilder for it.
22441
22442         My theory is that I can get rid of the TypeBuilder completely from
22443         the EmitContext, and have typecasts where it is used (from
22444         DeclSpace to where it matters).  
22445
22446         The only pending problem is that the code that implements Aliases
22447         is on TypeContainer, and probably should go in DeclSpace.
22448
22449         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
22450         lookups here, instead of doing that at parse time.  This means
22451         that our grammar will not introduce `LocalVariableReferences' as
22452         expressions at this point.  That solves the problem of code like
22453         this:
22454
22455         class X {
22456            static void Main ()
22457            { int X = 1;
22458             { X x = null }}}
22459
22460         This is only half the fix.  The full fix requires parameters to
22461         also be handled in this way.
22462
22463         * class.cs (Property.DefineMethod): When implementing an interface
22464         method, set newslot, when implementing an abstract method, do not
22465         set the flag (before we tried never setting it, or always setting
22466         it, which is the difference).
22467         (Indexer.DefineMethod): same.
22468         (Method.DefineMethod): same.
22469
22470         * ecore.cs: Only set the status used flag if we get back a Field.
22471
22472         * attribute.cs: Temporary hack, so Paolo can keep working.
22473
22474 2002-03-08  Ravi Pratap  <ravi@ximian.com>
22475
22476         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
22477         the unmanaged type in the case we have a MarshalAs attribute.
22478
22479         (Resolve): Handle the case when we are parsing the special MarshalAs
22480         attribute [we need to store the unmanaged type to use later]
22481
22482         * typemanager.cs (marshal_as_attr_type): Built in type for the 
22483         MarshalAs Attribute.
22484
22485         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
22486         on parameters and accordingly set the marshalling info.
22487
22488 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
22489
22490         * class.cs: Optimizing slightly by removing redundant code after
22491         we switched to the `NoTypes' return value.
22492         (Property.DefineMethod): use NoTypes here too.
22493
22494         This fixes the bug I introduced in my last batch of changes.
22495
22496 2002-03-05  Ravi Pratap  <ravi@ximian.com>
22497
22498         * tree.cs (RecordEnum): Add. We now keep track of enums too.
22499
22500         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
22501         Enums since those are types too. 
22502
22503         * cs-parser.jay (enum_declaration): Record enums as we parse them.
22504
22505         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
22506         thanks to a call during the lookup process.
22507
22508 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
22509
22510         * statement.cs (Foreach): Lots of work to accomodate a particular
22511         kind of foreach statement that I had not kept in mind.  It is
22512         possible to have foreachs on classes that provide a GetEnumerator
22513         method that return objects that implement the "pattern" for using
22514         a foreach, there is no need to support GetEnumerator
22515         specifically. 
22516
22517         This is needed to compile nant.
22518
22519         * decl.cs: Only report 114 if the member is not `Finalize' and if
22520         the warning level is at least 2.
22521
22522         * class.cs: Moved the compare function from Method to
22523         MethodSignature. 
22524
22525         (MethodSignature.InheritableMemberSignatureCompare): Add new
22526         filter function that is used to extract inheritable methods from a
22527         class. 
22528
22529         (Method.Define): Use the new `inheritable_method_signature_filter'
22530         delegate
22531
22532         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
22533         command. 
22534
22535 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
22536
22537         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
22538
22539         * cs-parser.jay: Add opt_semicolon to the interface declaration.
22540
22541         * expression.cs: Pass location information to
22542         ConvertImplicitStandard. 
22543
22544         * class.cs: Added debugging code to track return values from
22545         interfaces. 
22546
22547 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
22548
22549         * expression.cs (Is.DoResolve): If either side of the `is' is an
22550         interface, do not flag the warning.
22551
22552         * ecore.cs (ImplicitReferenceConversion): We need a separate test
22553         for interfaces
22554
22555         * report.cs: Allow for --fatal to be used with --probe.
22556
22557         * typemanager.cs (NoTypes): Move the definition for the empty Type
22558         array here. 
22559
22560         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
22561         properties. 
22562         (TypeContainer.DefineProxy): New function used to proxy to parent
22563         implementations when implementing interfaces.
22564         (TypeContainer.ParentImplements): used to lookup if our parent
22565         implements a public function that is required by an interface.
22566         (TypeContainer.VerifyPendingMethods): Hook this up.
22567
22568         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
22569         `modules' and `assemblies' arraylists into arrays.  We only grow
22570         these are the very early start up of the program, so this improves
22571         the speedof LookupType (nicely measured).
22572
22573         * expression.cs (MakeByteBlob): Replaced unsafe code with
22574         BitConverter, as suggested by Paolo.
22575
22576         * cfold.cs (ConstantFold.Binary): Special case: perform constant
22577         folding of string concatenation, but if either side is a string,
22578         and the other is not, then return null, and let the runtime use
22579         the concatenation on the string plus the object (using
22580         `Object.ToString'). 
22581
22582 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
22583
22584         Constant Folding has been implemented now.
22585
22586         * expression.cs (Unary.Reduce): Do not throw an exception, catch
22587         the error instead on types that are not supported in one's
22588         complement. 
22589
22590         * constant.cs (Constant and all children): New set of functions to
22591         perform implict and explicit conversions.
22592
22593         * ecore.cs (EnumConstant): Implement the new functions to perform
22594         conversion by proxying to the child expression.
22595
22596         * codegen.cs: (ConstantCheckState): Constant evaluation has its
22597         own separate setting that can not be turned off from the command
22598         line using --unchecked or --checked and is only controlled using
22599         the checked/unchecked statements and expressions.  This setting is
22600         used by the constant folder to flag errors.
22601
22602         * expression.cs (CheckedExpr, UncheckedExpr): Set the
22603         ConstantCheckState as well.   
22604
22605         During Resolve, they also have to flag the state, because the
22606         constant folder runs completely in the Resolve phase.
22607
22608         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
22609         well.
22610
22611 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
22612
22613         * cfold.cs: New file, this file contains the constant folder.
22614
22615         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
22616         argument to track whether we are using the resulting address to
22617         load or store a value and provide better error messages. 
22618
22619         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
22620         new AddressOf arguments.
22621
22622         * statement.cs (Foreach.EmitCollectionForeach): Update
22623
22624         * expression.cs (Argument.Emit): Call AddressOf with proper
22625         arguments to track usage.
22626
22627         (New.DoEmit): Call AddressOf with new arguments.
22628
22629         (Unary.Emit): Adjust AddressOf call.
22630
22631 2002-03-01  Ravi Pratap  <ravi@ximian.com>
22632
22633         * cs-parser.jay (member_access): Change the case for pre-defined types
22634         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
22635         this suggestion.
22636
22637         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
22638         a method body.
22639
22640         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
22641         essentially like methods and apply attributes like MethodImplOptions to them too.
22642
22643         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
22644         not being null.
22645
22646         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
22647         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
22648         is the DeclSpace.
22649
22650         * Update code everywhere accordingly.
22651
22652         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
22653
22654         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
22655
22656 2002-02-28  Ravi Pratap  <ravi@ximian.com>
22657
22658         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
22659         try performing lookups against those instead of jumping straight into using
22660         the 'using' clauses.
22661
22662         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
22663
22664         (LookupType): Perform lookups in implicit parents too.
22665
22666         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
22667         sequence as RootContext.LookupType. 
22668
22669         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
22670         the various cases of namespace lookups into this method.
22671
22672 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
22673
22674         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
22675         in positional arguments)
22676
22677         * class.cs (Operator): Update the AllowedModifiers to contain
22678         extern. 
22679
22680         * cs-parser.jay: Update operator declaration to allow for the
22681         operator body to be empty.
22682
22683         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
22684         values. 
22685
22686 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
22687
22688         * class.cs (Method.Emit): Label parameters.
22689
22690         * driver.cs: Return 1 or 0 as the program exit code.
22691
22692 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
22693
22694         * expression.cs: Special case the `null' object when trying to
22695         auto-compute the type, as anything can be explicitly converted to
22696         that. 
22697
22698         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
22699         spotting this Paolo.
22700
22701         (Expression.ImplicitNumericConversion): Perform comparissions of
22702         the type using the underlying type in the case of an enumeration
22703         rather than using the enumeration type for the compare.
22704
22705         Cope with the underlying == type case, which is not possible to
22706         catch before. 
22707
22708         (Expression.ConvertNumericExplicit): Perform comparissions of
22709         the type using the underlying type in the case of an enumeration
22710         rather than using the enumeration type for the compare.
22711
22712         * driver.cs: If the user does not supply an extension, assume .exe
22713
22714         * cs-parser.jay (if_statement): Rewrote so that we can track the
22715         location for the if statement.
22716
22717         * expression.cs (Binary.ConstantFold): Only concat strings when
22718         the operation is "+", not everything ;-)
22719
22720         * statement.cs (Statement.EmitBoolExpression): Take a location
22721         argument. 
22722         (If, While, Do): Track location.
22723
22724         * expression.cs (Binary.ResolveOperator): In the object + string
22725         case, I was missing a call to ConvertImplicit
22726
22727 2002-02-25  Ravi Pratap  <ravi@ximian.com>
22728
22729         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
22730         Location arguments. Ensure we use RootContext.LookupType to do our work
22731         and not try to do a direct Type.GetType and ModuleBuilder.GetType
22732
22733         * interface.cs (PopulateMethod): Handle the type of the parameter being
22734         null gracefully.
22735
22736         * expression.cs (Invocation.BetterFunction): Handle the case when we 
22737         have a params method with no fixed arguments and a call is made with no
22738         arguments.
22739
22740 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
22741
22742         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
22743         the verbatim-string-literal
22744
22745         * support.cs (InternalParameters.ParameterModifier): handle null
22746         fixed parameters.
22747         (InternalParameters.ParameterType): ditto.
22748
22749         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
22750         duplicating the name of the variable parameter.
22751         (GetParameterByName): Fix bug where we were not looking up array
22752         paramters if they were the only present (thanks Paolo!).
22753         (GetParameterInfo): We only have an empty set of types if both
22754         fixed and array are set to null.
22755         (GetParameterInfo-idx): Handle FixedParameter == null
22756
22757         * cs-parser.jay: Handle the case where there is no catch
22758         statements (missing null test).
22759
22760 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
22761
22762         * driver.cs (MainDriver): Be conservative on our command line
22763         handling.
22764
22765         Catch DirectoryNotFoundException when calling GetFiles.
22766
22767         (SplitPathAndPattern): Used to split the input specification into
22768         a path and a pattern that we can feed to Directory.GetFiles.
22769
22770 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
22771
22772         * statement.cs (Fixed): Implement the last case of the Fixed
22773         statement (string handling).
22774
22775         * expression.cs (StringPtr): New class used to return a char * to
22776         a string;  Used by the Fixed statement.
22777
22778         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
22779
22780         * expression.cs (Binary.ResolveOperator): Remove redundant
22781         MemberLookup pn parent type.
22782         Optimize union call, we do not need a union if the types are the same.
22783         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
22784         type.
22785
22786         Specialize the use of MemberLookup everywhere, instead of using
22787         the default settings. 
22788
22789         (StackAlloc): Implement stackalloc keyword.
22790
22791         * cs-parser.jay: Add rule to parse stackalloc.
22792
22793         * driver.cs: Handle /h, /help, /?
22794
22795         * expression.cs (MakeByteBlob): Removed the hacks we had in place
22796         before we supported unsafe code.
22797
22798         * makefile: add --unsafe to the self compilation of mcs.
22799
22800 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
22801
22802         * expression.cs (PointerArithmetic): New class that is used to
22803         perform pointer arithmetic.
22804         (Binary.Resolve): Handle pointer arithmetic
22805         Handle pointer comparission.
22806         (ArrayPtr): Utility expression class that is used to take the
22807         address of an array.
22808
22809         (ElementAccess): Implement array access for pointers
22810
22811         * statement.cs (Fixed): Implement fixed statement for arrays, we
22812         are missing one more case before we are done.
22813
22814         * expression.cs (Indirection): Implement EmitAssign and set the
22815         ExprClass to Variable.  This allows pointer dereferences to be
22816         treated as variables, and to have values assigned to them.
22817
22818         * ecore.cs (Expression.StoreFromPtr): New utility function to
22819         store values dereferencing.
22820
22821 2002-02-20  Ravi Pratap  <ravi@ximian.com>
22822
22823         * expression.cs (Binary.ResolveOperator): Ensure that we are
22824         not trying to operate on a void type - this fixes the reported
22825         bug.
22826
22827         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
22828         the parent implementation is sealed.
22829
22830         * ../errors/cs0239.cs : Add.
22831
22832         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
22833
22834         * typemanager.cs (unverifiable_code_type): Corresponds to 
22835         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
22836         which have unsafe code in them.
22837
22838         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
22839         unsafe context.
22840
22841 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
22842
22843         * cs-tokenizer.cs: Add support for @"litreal strings"
22844
22845         Make tokenizer accept pre-processor directives
22846         on any column (remove the old C-like limitation). 
22847
22848         * rootcontext.cs (EmitCode): Emit any global attributes.
22849         (AddGlobalAttributes): Used to keep track of assembly attributes. 
22850
22851         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
22852
22853         * cs-parser.jay: Add support for global attributes.  
22854
22855 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
22856
22857         * expression.cs (Indirection): New helper class.  Unary will
22858         create Indirection classes to be able to implement the
22859         IMemoryLocation interface on it.
22860
22861 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
22862
22863         * cs-parser.jay (fixed_statement): reference the right statement.
22864
22865         * statement.cs (Fixed.Emit): Finish implementing the fixed
22866         statement for the &x case.
22867
22868 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
22869
22870         * class.cs (Property.Define, Method.Define): Remove newslot when
22871         `implementing'.  
22872
22873         * modifiers.cs: My use of NewSlot when `Abstract' was set was
22874         wrong.  NewSlot should only be used if the `new' keyword is present.
22875
22876         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
22877         locating our system dir.  Sorry about this.
22878
22879 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
22880
22881         * driver.cs (GetSystemDir): Compute correctly the location of our
22882         system assemblies.  I was using the compiler directory instead of
22883         the library directory.
22884
22885 2002-02-13  Ravi Pratap  <ravi@ximian.com>
22886
22887         * expression.cs (BetterFunction): Put back in what Miguel commented out
22888         since it is the correct fix. The problem is elsewhere ;-)
22889
22890         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
22891         parameters of the parms method are themselves compatible or not !
22892
22893         (StandardConversionExists): Fix very dangerous bug where we were forgetting
22894         to check that a class implements an interface before saying that an implicit
22895         conversion was allowed. Use ImplementsInterface to do the checking.
22896
22897 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
22898
22899         * class.cs (Method.Define): Track whether we are an explicit
22900         implementation or not.  And only call DefineMethodOverride if we
22901         are an explicit implementation.
22902
22903         (Property.DefineMethod): Ditto.
22904
22905 2002-02-11  Ravi Pratap  <ravi@ximian.com>
22906
22907         * expression.cs (BetterFunction): Catch hideous bug which was
22908          preventing us from detecting ambiguous calls due to implicit casts i.e
22909         cs0121.
22910
22911 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
22912
22913         * support.cs (Pair): Remove un-needed method.  I figured why I was
22914         getting the error in cs-parser.jay, the variable in a foreach loop
22915         is readonly, and the compiler does not really treat this as a variable.
22916
22917         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
22918         instead of EQUALS in grammar.  
22919
22920         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
22921
22922         * expression.cs (Unary.DoResolve): Check whether the argument is
22923         managed or not.
22924
22925 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
22926
22927         * support.cs: Api for Pair to set a value.  Despite the fact that
22928         the variables are public the MS C# compiler refuses to compile
22929         code that accesses the field if the variable is part of a foreach
22930         statement. 
22931
22932         * statement.cs (Fixed): Begin implementation of the fixed
22933         statement.
22934
22935         (Block.AddVariable): Return the VariableInfo on success and null
22936         on failure instead of true/false. 
22937
22938         * cs-parser.jay (foreach): Catch errors on variables already
22939         defined (we were ignoring this value before) and properly unwind
22940         the block hierarchy
22941
22942         (fixed_statement): grammar for the fixed statement.
22943
22944 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
22945
22946         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
22947         pointer types to be incretemented.
22948
22949         (SizeOf): Implement.
22950
22951         * cs-parser.jay (pointer_member_access): Implement
22952         expr->IDENTIFIER production.
22953
22954         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
22955         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
22956         on safe contexts.
22957
22958         (Unary): Implement indirection.
22959
22960         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
22961         use in non-unsafe context).
22962
22963         (SimpleName.DoResolve): Check for pointers in field access on safe
22964         contexts. 
22965
22966         (Expression.LoadFromPtr): Factor the load-indirect code in this
22967         function.  This was duplicated in UnboxCast and ParameterReference
22968
22969 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
22970
22971         * expression.cs (ComposedCast): report an error if a pointer cast
22972         is used in a safe region.
22973
22974         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
22975         pointer type casts in unsafe context.
22976
22977         * codegen.cs (EmitContext): Set up IsUnsafe.
22978
22979         * cs-parser.jay (non_expression_type): Add productions for pointer
22980         casts. 
22981
22982         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
22983         code.  We should not use force into static mode if the method is
22984         not virtual.  Fixes bug in MIS
22985
22986         * statement.cs (Do.Emit, While.Emit, For.Emit,
22987         Statement.EmitBoolExpression): Add support to Do and While to
22988         propagate infinite loop as `I do return' semantics.
22989
22990         Improve the For case to also test for boolean constants.
22991
22992         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
22993         to the list of attributes we can add.
22994
22995         Remove `EmitContext' argument.
22996
22997         * class.cs (Method.Define): Apply parameter attributes.
22998         (Constructor.Define): Apply parameter attributes.
22999         (MethodCore.LabelParameters): Move here the core of labeling
23000         parameters. 
23001
23002         * support.cs (ReflectionParameters.ParameterModifier,
23003         InternalParameters.ParameterModifier): Use IsByRef on the type and
23004         only return the OUT bit for these parameters instead of in/out/ref
23005         flags.
23006
23007         This is because I miss-understood things.  The ParameterInfo.IsIn
23008         and IsOut represent whether the parameter has the [In] and [Out]
23009         attributes set.  
23010
23011 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
23012
23013         * ecore.cs (FieldExpr.Emit): Release temporaries.
23014
23015         * assign.cs (LocalTemporary.Release): new function.
23016
23017         * codegen.cs (EmitContext.GetTemporaryStorage,
23018         EmitContext.FreeTemporaryStorage): Rework the way we deal with
23019         temporary storage.  Now we can "put back" localbuilders when we
23020         are done with them
23021
23022 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
23023
23024         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
23025         need to make a copy of the variable to generate verifiable code.
23026
23027 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
23028
23029         * driver.cs: Compute dynamically the system directory.
23030
23031         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
23032         Slower, but more generally useful.  Used by the abstract
23033         registering implementation. 
23034
23035         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
23036         the rules for the special rule on Type/instances.  First check if
23037         we have the same name, and if so, try that special static path
23038         rather than the instance path.
23039
23040 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
23041
23042         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
23043         for, while and if.
23044
23045         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
23046         Enum, ValueType, Delegate or Array for non-corlib compiles.
23047
23048         * cs-tokenizer.cs: Catch long identifiers (645)
23049
23050         * typemanager.cs (IndexerPropetyName): Ravi never tested this
23051         piece of code.
23052
23053         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
23054         fix, we were returning too early, so we were not registering
23055         pending methods from abstract classes.
23056
23057         Do not register pending methods if the class is abstract.
23058
23059         * expression.cs (Conditional.DoResolve): Report circular implicit
23060         conversions when we neecd to compute it for conditional
23061         expressions. 
23062
23063         (Is.DoResolve): If the expression is always of the provided type,
23064         flag warning 183.  If the expression can not ever be of the
23065         provided type flag warning 184.
23066
23067         * class.cs: Catch 169 as well.
23068
23069         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
23070         read. 
23071
23072 2002-01-18  Nick Drochak  <ndrochak@gol.com>
23073
23074         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
23075
23076 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
23077
23078         * interface.cs: (PopulateMethod): Check for pointers being defined
23079         only if the unsafe context is active.
23080         (PopulateProperty): ditto.
23081         (PopulateIndexer): ditto.
23082
23083         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
23084         specified.  If pointers are present, make sure that they are
23085         present in an unsafe context.
23086         (Constructor, Constructor.Define): ditto.
23087         (Field, Field.Define): ditto.
23088         (Property, Property.Define): ditto.
23089         (Event, Event.Define): ditto.
23090
23091         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
23092         hashtable if there are classes or structs defined.
23093
23094         * expression.cs (LocalVariableReference.DoResolve): Simplify this
23095         code, as the constant resolution moved.
23096
23097         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
23098         the metadata, so we can flag error 133. 
23099
23100         * decl.cs (MemberCore.UnsafeOK): New function to test that a
23101         pointer is being declared in an unsafe context.
23102
23103 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
23104
23105         * modifiers.cs (Modifiers.Check): Require a Location argument.
23106         Report error 227 for Unsafe use.
23107
23108         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
23109
23110         * statement.cs (For.Emit): If the test is null, then report that
23111         we do `return', as we wont reach anything afterwards.
23112
23113         (Switch.SwitchGoverningType): Track the expression that matched
23114         the conversion.
23115
23116         * driver.cs: Allow negative numbers as an error code to flag.
23117
23118         * cs-parser.jay: Handle 1551.
23119
23120         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
23121
23122 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
23123
23124         * cs-parser.jay: Report 1518 (type declaration can only contain
23125         class, struct, interface, enum or delegate)
23126
23127         (switch_label): Report 1523 (keywords `case' or `default' must
23128         preced code)
23129
23130         (opt_switch_sections): Report 1522 (empty switch)
23131
23132         * driver.cs: Report 1515 (response file specified multiple times)
23133         Report 1516 (Source file specified multiple times).
23134
23135         * expression.cs (Argument.Resolve): Signal 1510
23136
23137         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
23138         access not allowed in static code)
23139
23140 2002-01-11  Ravi Pratap  <ravi@ximian.com>
23141
23142         * typemanager.cs (IsPointerType): Utility method which we are going
23143         to need a lot.
23144
23145         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
23146         the object type, so we take care of that.
23147
23148         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
23149
23150         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
23151         added to non-params parameters :-)
23152
23153         * typemanager.cs (CSharpName): Include 'void' type too. 
23154
23155         (void_ptr_type): Include in the set of core types.
23156
23157         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
23158         duplicating code.
23159
23160         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
23161         an unsafe context.
23162
23163         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
23164         completely forgotten about it.
23165
23166 2002-01-10  Ravi Pratap  <ravi@ximian.com>
23167
23168         * cs-parser.jay (pointer_type): Add. This begins our implementation
23169         of parsing rules for unsafe code.
23170
23171         (unsafe_statement): Implement.
23172
23173         (embedded_statement): Modify to include the above.
23174
23175         * statement.cs (Unsafe): Implement new class for unsafe blocks.
23176
23177         * codegen.cs (EmitContext.InUnsafe): Add. This determines
23178         if the current context is an unsafe one.
23179
23180         * cs-parser.jay (local_variable_pointer_type): Since local variable types
23181         are handled differently, we need separate rules for them.
23182
23183         (local_variable_declaration): Update to use local_variable_pointer_type
23184         to allow variable declarations of unmanaged pointer types.
23185
23186         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
23187         in unsafe contexts.
23188
23189         * ../errors/cs0214.cs : Add.
23190
23191 2002-01-16  Nick Drochak  <ndrochak@gol.com>
23192
23193         * makefile: remove 'response' file when cleaning.
23194
23195 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
23196
23197         * cs-parser.jay: Report 1524.
23198
23199 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
23200
23201         * typemanager.cs (RegisterMethod): drop checking if we have
23202         registered this from here
23203
23204 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
23205
23206         * class.cs (Method.EmitDestructor): Implement calling our base
23207         destructor. 
23208
23209         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
23210         value of InFinally.
23211
23212         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
23213         this routine and will wrap the call in a try/catch block.  Deal
23214         with the case.
23215
23216 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
23217
23218         * ecore.cs (Expression.MemberLookup): instead of taking a
23219         parameter `same_type' that was used to tell whether we could
23220         access private members we compute our containing type from the
23221         EmitContext.
23222
23223         (FieldExpr): Added partial support for volatile fields.  This does
23224         not work for volatile fields exposed from assemblies, as I can not
23225         figure out how to extract the modreq from it.
23226
23227         Updated all the source files to use this.
23228
23229         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
23230         because it is referenced by MemberLookup very often. 
23231
23232 2002-01-09  Ravi Pratap  <ravi@ximian.com>
23233
23234         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
23235         TypeBuilder.GetCustomAttributes to retrieve what we need.
23236
23237         Get rid of redundant default_member_attr_type as this is the same as
23238         default_member_type which already exists.
23239
23240         * interface.cs, attribute.cs : Update accordingly.
23241
23242 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
23243
23244         * typemanager.cs: Enable IndexerPropertyName again.  It does not
23245         work for TYpeBuilders though.  Ravi, can you please fix this?
23246
23247         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
23248
23249         * expression.cs (Argument.Emit): Handle the case of ref objects
23250         being passed to ref functions;  
23251
23252         (ParameterReference.EmitLoad): Loads the content of the pointer
23253         without dereferencing.
23254
23255 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
23256
23257         * cs-tokenizer.cs: Implemented the pre-processing expressions.
23258
23259 2002-01-08  Ravi Pratap  <ravi@ximian.com>
23260
23261         * class.cs (Indexer.DefineMethod): Incorporate the interface
23262         type in the name of the method if we are doing explicit interface
23263         implementation.
23264
23265         * expression.cs (ConversionExists): Remove as it is completely obsolete.
23266
23267         (BetterConversion): Fix extremely trivial bug where we were referring to
23268         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
23269         again !
23270
23271         * ../errors/bug16.cs : Add although we have fixed it.
23272
23273 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
23274
23275         * expression.cs (BaseIndexer): Begin implementation.
23276
23277         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
23278
23279         * cs-parser.jay (indexer_declarator): Use qualified_identifier
23280         production directly to remove a shift/reduce, and implement
23281         explicit interface implementation.
23282
23283         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
23284         after a floating point suffix.
23285
23286         * expression.cs (DoNumericPromotions): Improved the conversion for
23287         uint/uint.  If we have a constant, we avoid doing a typecast to a
23288         larger type.
23289
23290         * class.cs (Indexer): Implement explicit interface implementation
23291         for indexers.
23292
23293 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
23294
23295         * class.cs: make the default instance constructor public and hidebysig.
23296
23297 2001-01-03  Ravi Pratap  <ravi@ximian.com>
23298
23299         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
23300         so we can call it from elsewhere.
23301
23302         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
23303         we emit it internally if the class has a defined indexer; otherwise the user
23304         emits it by decorating the class definition with the DefaultMemberAttribute.
23305
23306         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
23307         attribute is not used on a type which defines an indexer.
23308
23309         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
23310         character when we skip whitespace.
23311
23312         * ../errors/cs0646.cs : Add.
23313
23314 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
23315
23316         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
23317         again. 
23318
23319         * makefile: Add practical target `mcs3.exe' which builds the third
23320         generation compiler. 
23321
23322         * expression.cs (New): Fix structures constructor calling.
23323
23324         * class.cs (Property, Method, Indexer): Emit Final flag on the
23325         method if we are an interface implementation and we are not
23326         abstract. 
23327
23328         * ecore.cs (PropertyExpr): New public field `IsBase', tells
23329         whether this property is referencing a `base' method.
23330
23331         * expression.cs (Invocation.EmitCall): take an extra argument:
23332         is_base, this is used to determine whether the `call' or
23333         `callvirt' opcode should be used.
23334
23335
23336         * delegate.cs: update EmitCall.
23337
23338         * class.cs (Method.Define): Set NewSlot for the cases where we are
23339         not implementing an interface method.
23340
23341         (Property.Define): ditto.
23342
23343 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
23344
23345         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
23346         'r'.  Allows mcs to parse itself fully.
23347
23348 2002-01-02  Ravi Pratap  <ravi@ximian.com>
23349
23350         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
23351         of the number of initializers that require the InitializeArray method.
23352
23353         (CheckIndices): Store the Expression in all cases - not the plain value. Also
23354         update the above field where necessary.
23355
23356         (MakeByteBlob): Update accordingly.
23357
23358         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
23359         greater than 2.
23360
23361         (EmitDynamicInitializers): Update in accordance with the new optimization.
23362
23363         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
23364         same OpCode applies.
23365
23366         * cs-parser.jay : Fix some glaring errors I introduced.
23367
23368 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
23369
23370         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
23371         so that we can check for name clashes there too.
23372
23373         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
23374         for interface indexers.
23375
23376         * interfaces.cs (Define): Emit the default member attribute.
23377
23378         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
23379         variable was being referred to while setting the value ;-)
23380
23381 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
23382
23383         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
23384         byte-by-byte information when we know the data is zero.
23385
23386         Make the block always a multiple of 4, because
23387         DefineInitializedData has a bug.
23388
23389         * assign.cs: Fix, we should assign from the temporary, not from
23390         the source. 
23391
23392         * expression.cs (MakeByteBlob): Fix my incorrect code.
23393
23394 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
23395
23396         * typemanager.cs (EnumToUnderlying): This function is used to get
23397         the underlying type from an enumeration, because it does not
23398         always work. 
23399
23400         * constant.cs: Use the I4_S form for values between -128 and 127.
23401
23402         * statement.cs (Block.LookupLabel): Looks up a label.
23403         (Block): Drop support for labeled blocks.
23404
23405         (LabeledStatement): New kind of statement that represents a label
23406         only.
23407
23408         (Goto): Finally implement this bad boy.
23409
23410         * cs-parser.jay: Update to reflect new mechanism to implement
23411         labels.
23412
23413 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
23414
23415         * codegen.cs (EmitContext.This): a codegen property that keeps the
23416         a single instance of this instead of creating many different this
23417         instances. 
23418
23419         * delegate.cs (Delegate.DoResolve): Update to use the property;
23420
23421         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
23422
23423         * expression.cs (BaseAccess.DoResolve): Ditto.
23424
23425 2001-12-29  Ravi Pratap  <ravi@ximian.com>
23426
23427         * typemanager.cs (methodimpl_attr_type): Add to hold the type
23428         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
23429
23430         (InitCoreTypes): Update accordingly.
23431
23432         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
23433         so we can quickly store the state.
23434
23435         (ApplyAttributes): Set the correct implementation flags
23436         for InternalCall methods.
23437
23438 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
23439
23440         * expression.cs (EmitCall): if a method is not virtual, then do
23441         not use callvirt on it.
23442
23443         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
23444         user defined stuff) requires the use of stobj, which takes an
23445         address on the stack instead of an array and an index.  So emit
23446         the Ldelema operation for it.
23447
23448         (EmitStoreOpcode): Use stobj for valuetypes.
23449
23450         (UnaryMutator.EmitCode): Use the right 1 value depending on
23451         whether we are dealing with int64/uint64, float or doubles.
23452
23453         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
23454         constructors that I implemented last night.
23455
23456         (Constructor.IsDefault): Fix to work properly for static
23457         constructors.
23458
23459         * cs-parser.jay (CheckDef): report method signature errors.
23460         Update error number 103 to be 132.
23461
23462         * decl.cs: New AdditionResult enumeration value: MethodExists.
23463         Although we do this check for methods later on in the semantic
23464         analysis, catching repeated default constructors is so easy that
23465         we catch these here. 
23466
23467         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
23468         promotions code.
23469
23470         (ParameterReference.EmitAssign, Emit): handle
23471         bools as bytes.
23472
23473         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
23474         (ArrayAccess.EmitStoreOpcode): ditto.
23475
23476         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
23477
23478         * expression.cs (MakeByteBlob): Complete all the missing types
23479         (uint, short, ushort, byte, sbyte)
23480
23481         * class.cs: Only init instance field initializers on instance
23482         constructors. 
23483
23484         Rename `constructors' to instance_constructors. 
23485
23486         (TypeContainer.AddConstructor): Only add constructors to the list
23487         if it is not static.
23488
23489         Make sure that we handle default_static_constructor independently
23490         everywhere where we handle instance_constructors
23491
23492 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
23493
23494         * class.cs: Do not lookup or create a base initializer for a
23495         static constructor.
23496
23497         (ConstructorInitializer.Resolve): use the proper type to lookup
23498         for constructors.
23499
23500         * cs-parser.jay: Report error 1585 (modifiers between type and name).
23501
23502         * enum.cs, interface.cs: Remove CloseType, this is taken care by
23503         in DeclSpace. 
23504
23505         * decl.cs: CloseType is now an virtual method, the default
23506         implementation just closes this type.
23507
23508 2001-12-28  Ravi Pratap  <ravi@ximian.com>
23509
23510         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
23511         to PreserveSig by default. Also emit HideBySig on such methods.
23512
23513         Basically, set the defaults to standard values.
23514
23515         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
23516         argument, if candidate is better, it can't be worse than the best !
23517
23518         (Invocation): Re-write bits to differentiate between methods being
23519         applicable in their expanded form and their normal form - for params
23520         methods of course.
23521
23522         Get rid of use_standard everywhere as only standard conversions are allowed
23523         in overload resolution. 
23524
23525         More spec conformance.
23526
23527 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
23528
23529         * driver.cs: Add --timestamp, to see where the compiler spends
23530         most of its time.
23531
23532         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
23533         `this' in static code.
23534
23535         (SimpleName.DoResolve): Implement in terms of a helper function
23536         that allows static-references to be passed upstream to
23537         MemberAccess.
23538
23539         (Expression.ResolveWithSimpleName): Resolve specially simple
23540         names when called by MemberAccess to implement the special
23541         semantics. 
23542
23543         (Expression.ImplicitReferenceConversion): Handle conversions from
23544         Null to reference types before others, as Null's type is
23545         System.Object. 
23546
23547         * expression.cs (Invocation.EmitCall): Handle the special case of
23548         calling methods declared on a reference type from a ValueType
23549         (Base classes System.Object and System.Enum)
23550
23551         (MemberAccess.Resolve): Only perform lookups on Enumerations if
23552         the left hand side is a TypeExpr, not on every enumeration. 
23553
23554         (Binary.Resolve): If types are reference types, then do a cast to
23555         object on operators != and == of both arguments.
23556
23557         * typemanager.cs (FindMembers): Extract instance and static
23558         members if requested.
23559
23560         * interface.cs (PopulateProperty): Use void_type instead of null
23561         as the return type for the setter method.
23562
23563         (PopulateIndexer): ditto.
23564
23565 2001-12-27  Ravi Pratap  <ravi@ximian.com>
23566
23567         * support.cs (ReflectionParameters): Fix minor bug where we
23568         were examining the wrong parameter for the ParamArray attribute.
23569
23570         Cope with requests for the type of the parameter at position
23571         greater than the params parameter's. We now return the element
23572         type of the params array as that makes more sense.
23573
23574         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
23575         accordingly as we no longer have to extract the element type
23576         ourselves.
23577
23578         (Invocation.OverloadResolve): Update.
23579
23580 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
23581
23582         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
23583         against IEnumerator, test whether the return value is a descendant
23584         of the IEnumerator interface.
23585
23586         * class.cs (Indexer.Define): Use an auxiliary method to implement
23587         the other bits of the method definition.  Begin support for
23588         explicit interface implementation.
23589
23590         (Property.DefineMethod): Use TypeManager.void_type instead of null
23591         for an empty return value.
23592
23593 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
23594
23595         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
23596         dealing with a FieldExpr which is composed of a FieldBuilder, in
23597         the code path we did extract the constant, but we should have
23598         obtained the underlying value to be able to cast it (otherwise we
23599         end up in an infinite loop, this is what Ravi was running into).
23600
23601         (ArrayCreation.UpdateIndices): Arrays might be empty.
23602
23603         (MemberAccess.ResolveMemberAccess): Add support for section
23604         14.5.4.1 that deals with the special case of E.I when E is a type
23605         and something else, that I can be a reference to a static member.
23606
23607         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
23608         handle a particular array type to create byte blobs, it is just
23609         something we dont generate byteblobs for.
23610
23611         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
23612         arguments. 
23613
23614         * location.cs (Push): remove the key from the hashtable that we
23615         are about to add.   This happens for empty files.
23616
23617         * driver.cs: Dispose files after we have parsed them.
23618
23619         (tokenize): new function that only runs the tokenizer on its
23620         input, for speed testing.
23621
23622 2001-12-26  Ravi Pratap  <ravi@ximian.com>
23623
23624         * class.cs (Event.Define): Define the private field only if there
23625         are no accessors defined.
23626
23627         * expression.cs (ResolveMemberAccess): If there is no associated
23628         field with the event, that means we have an event defined with its
23629         own accessors and we should flag error cs0070 since transforming
23630         ourselves into a field is not valid in that case.
23631
23632         * ecore.cs (SimpleName.DoResolve): Same as above.
23633
23634         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
23635         and charset to sane values.
23636
23637 2001-12-25  Ravi Pratap  <ravi@ximian.com>
23638
23639         * assign.cs (DoResolve): Perform check on events only if they 
23640         are being accessed outside the declaring type.
23641
23642         * cs-parser.jay (event_declarations): Update rules to correctly
23643         set the type of the implicit parameter etc.
23644
23645         (add_accessor, remove_accessor): Set current local parameters.
23646
23647         * expression.cs (Binary): For delegate addition and subtraction,
23648         cast the return value from the method into the appropriate delegate
23649         type.
23650
23651 2001-12-24  Ravi Pratap  <ravi@ximian.com>
23652
23653         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
23654         of these as the workaround is unnecessary.
23655
23656         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
23657         delegate data - none of that is needed at all.
23658
23659         Re-write bits to extract the instance expression and the delegate method
23660         correctly.
23661
23662         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
23663         on delegates too.
23664
23665         * attribute.cs (ApplyAttributes): New method to take care of common tasks
23666         of attaching attributes instead of duplicating code everywhere.
23667
23668         * everywhere : Update code to do attribute emission using the above method.
23669
23670 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
23671
23672         * expression.cs (IsParamsMethodApplicable): if there are not
23673         parameters, return immediately.
23674
23675         * ecore.cs: The 0 literal can be implicity converted to an enum
23676         type. 
23677
23678         (SimpleName.DoResolve): First lookup the type, then lookup the
23679         members. 
23680
23681         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
23682         want to get its address.  If the InstanceExpression is not
23683         addressable, store the result in a temporary variable, then get
23684         the address of it.
23685
23686         * codegen.cs: Only display 219 errors on warning level or above. 
23687
23688         * expression.cs (ArrayAccess): Make it implement the
23689         IMemoryLocation interface.
23690
23691         (Binary.DoResolve): handle the operator == (object a, object b)
23692         and operator != (object a, object b) without incurring into a
23693         BoxedCast (because 5 != o should never be performed).
23694
23695         Handle binary enumerator operators.
23696
23697         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
23698         value type, otherwise use Ldelem_ref.
23699
23700         Use precomputed names;
23701
23702         (AddressOf): Implement address of
23703
23704         * cs-parser.jay (labeled_statement): Fix recursive block
23705         addition by reworking the production.
23706
23707         * expression.cs (New.DoEmit): New has a special case:
23708                 
23709                  If we are dealing with a ValueType, we have a few
23710                  situations to deal with:
23711                 
23712                     * The target of New is a ValueType variable, that is
23713                       easy, we just pass this as the variable reference
23714                 
23715                     * The target of New is being passed as an argument,
23716                       to a boxing operation or a function that takes a
23717                       ValueType.
23718                 
23719                       In this case, we need to create a temporary variable
23720                       that is the argument of New.
23721
23722
23723 2001-12-23  Ravi Pratap  <ravi@ximian.com>
23724
23725         * rootcontext.cs (LookupType): Check that current_type is not null before
23726         going about looking at nested types.
23727
23728         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
23729         not implement the IAssignMethod interface any more.
23730
23731         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
23732         where we tranform them into FieldExprs if they are being resolved from within
23733         the declaring type.
23734
23735         * ecore.cs (SimpleName.DoResolve): Do the same here.
23736
23737         * assign.cs (DoResolve, Emit): Clean up code considerably. 
23738
23739         * ../errors/bug10.cs : Add.
23740
23741         * ../errors/cs0070.cs : Add.
23742
23743         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
23744
23745         * assign.cs : Get rid of EventIsLocal everywhere.
23746
23747 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
23748
23749         * ecore.cs (ConvertIntLiteral): finished the implementation.
23750
23751         * statement.cs (SwitchLabel): Convert the value we are using as a
23752         key before looking up the table.
23753
23754 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
23755
23756         * codegen.cs (EmitTopBlock): Require a Location argument now.
23757
23758         * cs-parser.jay (constructor_declarator): We need to setup
23759         current_local_parameters before we parse the
23760         opt_constructor_initializer, to allow the variables to be bound
23761         to the constructor arguments.
23762
23763         * rootcontext.cs (LookupType): First lookup nested classes in our
23764         class and our parents before we go looking outside our class.
23765
23766         * expression.cs (ConstantFold): Extract/debox the values at the
23767         beginnning. 
23768
23769         * rootcontext.cs (EmitCode): Resolve the constants first before we
23770         resolve the types.  This is not really needed, but it helps debugging.
23771
23772         * statement.cs: report location.
23773
23774         * cs-parser.jay: pass location to throw statement.
23775
23776         * driver.cs: Small bug fix.
23777
23778         * report.cs: Updated format to be 4-zero filled digits.
23779
23780 2001-12-22  Ravi Pratap  <ravi@ximian.com>
23781
23782         * expression.cs (CheckIndices): Fix minor bug where the wrong
23783         variable was being referred to ;-)
23784
23785         (DoEmit): Do not call EmitStaticInitializers when the 
23786         underlying type is System.Object.
23787
23788 2001-12-21  Ravi Pratap  <ravi@ximian.com>
23789
23790         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
23791         and do the usual workaround for SRE.
23792
23793         * class.cs (MyEventBuilder.EventType): New member to get at the type
23794         of the event, quickly.
23795
23796         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
23797
23798         * assign.cs (Assign.DoResolve): Handle the case when the target
23799         is an EventExpr and perform the necessary checks.
23800
23801         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
23802         interface.
23803
23804         (SimpleName.MemberStaticCheck): Include check for EventExpr.
23805
23806         (EventExpr): Set the type in the constructor itself since we 
23807         are meant to be born fully resolved.
23808
23809         (EventExpr.Define): Revert code I wrote earlier.
23810                 
23811         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
23812         instance expression is null. The instance expression is a This in that case
23813         or a null, depending on whether it is a static method or not.
23814
23815         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
23816         refers to more than one method.
23817
23818         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
23819         and accordingly flag errors.
23820
23821 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
23822
23823         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
23824
23825 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
23826
23827         * location.cs (ToString): Provide useful rutine.
23828
23829 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
23830
23831         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
23832         objects, return the actual integral boxed.
23833
23834         * statement.cs (SwitchLabel): define an ILLabel for each
23835         SwitchLabel. 
23836
23837         (Switch.CheckSwitch): If the value is a Literal, extract
23838         the underlying literal.
23839
23840         Also in the unused hashtable we had, add the SwitchLabel so we can
23841         quickly look this value up.
23842
23843         * constant.cs: Implement a bunch of new constants.  Rewrite
23844         Literal based on this.  Made changes everywhere to adapt to this.
23845
23846         * expression.cs (Expression.MakeByteBlob): Optimize routine by
23847         dereferencing array only once, and also copes with enumrations.
23848
23849         bytes are two bytes wide, not one.
23850
23851         (Cast): Perform constant conversions.
23852
23853         * ecore.cs (TryImplicitIntConversion): Return literals instead of
23854         wrappers to the literals here.
23855
23856         * expression.cs (DoNumericPromotions): long literals can converted
23857         to ulong implicity (this is taken care of elsewhere, but I was
23858         missing this spot).
23859
23860         * ecore.cs (Expression.Literalize): Make the return type Literal,
23861         to improve type checking.
23862
23863         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
23864
23865 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
23866
23867         * literal.cs: Revert code from ravi that checked the bounds.  The
23868         bounds are sane by the definition of the type itself. 
23869
23870         * typemanager.cs: Fix implementation of ImplementsInterface.  We
23871         need to actually look up in our parent hierarchy for interfaces
23872         implemented. 
23873
23874         * const.cs: Use the underlying type for enumerations
23875
23876         * delegate.cs: Compute the basename for the delegate creation,
23877         that should fix the delegate test case, and restore the correct
23878         Type Lookup semantics in rootcontext
23879
23880         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
23881         referencing a nested type with the Reflection API is using the "+"
23882         sign. 
23883
23884         * cs-parser.jay: Do not require EOF token at the end.
23885
23886 2001-12-20  Ravi Pratap  <ravi@ximian.com>
23887
23888         * rootcontext.cs (LookupType): Concatenate type names with
23889         a '.' instead of a '+' The test suite passes again.
23890
23891         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
23892         field of the enumeration.
23893
23894         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
23895         the case when the member is an EventExpr.
23896
23897         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
23898         static has an associated instance expression.
23899
23900         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
23901
23902         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
23903
23904         * class.cs (Event.Define): Register event and perform appropriate checks
23905         for error #111.
23906
23907         We define the Add and Remove methods even if the use provides none because
23908         in that case, we provide default implementations ourselves.
23909
23910         Define a private field of the type of the event. This is done by the CSC compiler
23911         and we should be doing it too ;-)
23912
23913         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
23914         More methods we use in code we generate.
23915
23916         (multicast_delegate_type, delegate_type): Two separate types since the distinction
23917         is important.
23918
23919         (InitCoreTypes): Update accordingly for the above.
23920
23921         * class.cs (Event.Emit): Generate code for default accessors that we provide
23922
23923         (EmitDefaultMethod): Do the job in the above.
23924
23925         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
23926         appropriate place.
23927
23928 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
23929
23930         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
23931         builders even if we were missing one.
23932
23933         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
23934         pass the Basename as our class name instead of the Name.  The
23935         basename will be correctly composed for us.
23936
23937         * parameter.cs (Paramters): Now takes a Location argument.
23938
23939         * decl.cs (DeclSpace.LookupType): Removed convenience function and
23940         make all the code call directly LookupType in RootContext and take
23941         this chance to pass the Location information everywhere.
23942
23943         * Everywhere: pass Location information.
23944
23945 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
23946
23947         * class.cs (Constructor.Define): Updated way of detecting the
23948         length of the parameters.
23949
23950         (TypeContainer.DefineType): Use basename as the type name for
23951         nested types.
23952
23953         (TypeContainer.Define): Do not recursively define types here, as
23954         definition is taken care in order by the RootContext.
23955
23956         * tree.cs: Keep track of namespaces in a per-file basis.
23957
23958         * parameter.cs (Parameter.ComputeSignature): Update to use
23959         DeclSpace. 
23960
23961         (Parameters.GetSignature): ditto.
23962
23963         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
23964         instead of a TypeContainer.
23965
23966         (Interface.SemanticAnalysis): Use `this' instead of our parent to
23967         resolve names.  Because we need to be resolve in our context, not
23968         our parents.
23969
23970         * driver.cs: Implement response files.
23971
23972         * class.cs (TypeContainer.DefineType): If we are defined, do not
23973         redefine ourselves.
23974
23975         (Event.Emit): Emit the code for add/remove handlers.
23976         (Event.Define): Save the MethodBuilders for add/remove.
23977
23978         * typemanager.cs: Use pair here too.
23979
23980         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
23981         DictionaryEntry requires the first argument to be non-null.  
23982
23983         (enum_declaration): Compute full name for registering the
23984         enumeration.
23985
23986         (delegate_declaration): Instead of using
23987         formal_parameter_list, use opt_formal_parameter_list as the list
23988         can be empty.
23989
23990         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
23991         (EventParsing): New property that controls whether `add' and
23992         `remove' are returned as tokens or identifiers (for events);
23993
23994 2001-12-19  Ravi Pratap  <ravi@ximian.com>
23995
23996         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
23997         use MyEventBuilder only and let it wrap the real builder for us.
23998
23999         (MyEventBuilder): Revamp constructor etc.
24000
24001         Implement all operations that we perform on EventBuilder in precisely the same
24002         way here too.
24003
24004         (FindMembers): Update to use the EventBuilder member.
24005
24006         (Event.Emit): Update accordingly.
24007
24008 2001-12-18  Ravi Pratap  <ravi@ximian.com>
24009
24010         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
24011         by calling the appropriate methods.
24012
24013         (GetCustomAttributes): Make stubs as they cannot possibly do anything
24014         useful.
24015
24016         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
24017
24018 2001-12-17  Ravi Pratap  <ravi@ximian.com>
24019
24020         * delegate.cs (Delegate.Populate): Check that the return type
24021         and various parameters types are indeed accessible.
24022
24023         * class.cs (Constructor.Define): Same here.
24024
24025         (Field.Define): Ditto.
24026
24027         (Event.Define): Ditto.
24028
24029         (Operator.Define): Check that the underlying Method defined itself
24030         correctly - so it's MethodBuilder should not be null.
24031
24032         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
24033         expression happens to be null.
24034
24035         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
24036         members but as of now we don't seem to be able to do anything really useful with it.
24037
24038         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
24039         not the EventBuilder.
24040
24041 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
24042
24043         * cs-tokenizer.cs: Add support for defines.
24044         Add support for #if, #elif, #else, #endif
24045
24046         (eval_var): evaluates a variable.
24047         (eval): stubbed for evaluating functions.
24048
24049         * cs-parser.jay: Pass the defines information
24050
24051         * driver.cs: Add --define command line option.
24052
24053         * decl.cs: Move MemberCore here.
24054
24055         Make it the base class for DeclSpace.  This allows us to catch and
24056         report 108 and 109 for everything now.
24057
24058         * class.cs (TypeContainer.Define): Extract all the members
24059         before populating and emit the warning 108 (new keyword required
24060         to override) instead of having each member implement this.
24061
24062         (MemberCore.Define): New abstract method, we will be using this in
24063         the warning reporting engine in Populate.
24064
24065         (Operator.Define): Adjust to new MemberCore protocol. 
24066
24067         * const.cs (Const): This does not derive from Expression, it is a
24068         temporary object we use to create fields, it is a MemberCore. 
24069
24070         * class.cs (Method.Define): Allow the entry point to be in a
24071         specific class.
24072
24073         * driver.cs: Rewrite the argument handler to clean it up a bit.
24074
24075         * rootcontext.cs: Made it just an auxiliary namespace feature by
24076         making everything static.
24077
24078         * driver.cs: Adapt code to use RootContext type name instead of
24079         instance variable.
24080
24081         * delegate.cs: Remove RootContext argument.
24082
24083         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
24084         argument. 
24085
24086         * class.cs (Event.Define): The lookup can fail.
24087
24088         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
24089
24090         * expression.cs: Resolve the this instance before invoking the code.
24091
24092 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
24093
24094         * cs-parser.jay: Add a production in element_access that allows
24095         the thing to become a "type" reference.  This way we can parse
24096         things like "(string [])" as a type.
24097
24098         Note that this still does not handle the more complex rules of
24099         casts. 
24100
24101
24102         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
24103
24104         * ecore.cs: (CopyNewMethods): new utility function used to
24105         assemble the list of methods from running FindMembers.
24106
24107         (MemberLookup): Rework FindMembers so that 
24108
24109 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
24110
24111         * class.cs (TypeContainer): Remove Delegates who fail to be
24112         defined.
24113
24114         * delegate.cs (Populate): Verify that we dont get null return
24115         values.   TODO: Check for AsAccessible.
24116
24117         * cs-parser.jay: Use basename to emit error 574 (destructor should
24118         have the same name as container class), not the full name.
24119
24120         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
24121         possible representation.  
24122
24123         Also implements integer type suffixes U and L.
24124
24125 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
24126
24127         * expression.cs (ArrayCreation.DoResolve): We need to do the
24128         argument resolution *always*.
24129
24130         * decl.cs: Make this hold the namespace.  Hold the root context as
24131         well.
24132         (LookupType): Move here.
24133
24134         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
24135
24136         * location.cs (Row, Name): Fixed the code, it was always returning
24137         references to the first file.
24138
24139         * interface.cs: Register properties defined through interfaces.
24140
24141         * driver.cs: Add support for globbing on the command line
24142
24143         * class.cs (Field): Make it derive from MemberCore as well.
24144         (Event): ditto.
24145
24146 2001-12-15  Ravi Pratap  <ravi@ximian.com>
24147
24148         * class.cs (Event::Define): Check that the type of the event is a delegate
24149         type else flag error #66.
24150
24151         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
24152         same.
24153
24154         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
24155         values of EntryPoint, CharSet etc etc.
24156
24157         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
24158
24159         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
24160         be null and we should ignore this. I am not sure if this is really clean. Apparently,
24161         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
24162         which needs this to do its work.
24163
24164         * ../errors/cs0066.cs : Add.
24165
24166 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
24167
24168         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
24169         helper functions.
24170
24171         * class.cs: (MethodSignature.MethodSignature): Removed hack that
24172         clears out the parameters field.
24173         (MemberSignatureCompare): Cleanup
24174
24175         (MemberCore): New base class used to share code between MethodCore
24176         and Property.
24177
24178         (RegisterRequiredImplementations) BindingFlags.Public requires
24179         either BindingFlags.Instace or Static.  Use instance here.
24180
24181         (Property): Refactored code to cope better with the full spec.
24182
24183         * parameter.cs (GetParameterInfo): Return an empty array instead
24184         of null on error.
24185
24186         * class.cs (Property): Abstract or extern properties have no bodies.
24187
24188         * parameter.cs (GetParameterInfo): return a zero-sized array.
24189
24190         * class.cs (TypeContainer.MethodModifiersValid): Move all the
24191         method modifier validation to the typecontainer so we can reuse
24192         this on properties.
24193
24194         (MethodCore.ParameterTypes): return an empty sized array of types.
24195
24196         (Property.Define): Test property modifier validity.
24197
24198         Add tests for sealed/override too.
24199
24200         (Method.Emit): abstract or extern methods have no bodies.
24201
24202 2001-12-14  Ravi Pratap  <ravi@ximian.com>
24203
24204         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
24205         thing.
24206
24207         (Method::Define, ::Emit): Modify accordingly.
24208
24209         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
24210
24211         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
24212
24213         * makefile: Pass in /unsafe.
24214
24215 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
24216
24217         * class.cs (MakeKey): Kill routine.
24218
24219         * class.cs (TypeContainer.Define): Correctly define explicit
24220         method implementations (they require the full interface name plus
24221         the method name).
24222
24223         * typemanager.cs: Deply the PtrHashtable here and stop using the
24224         lame keys.  Things work so much better.
24225
24226         This of course broke everyone who depended on `RegisterMethod' to
24227         do the `test for existance' test.  This has to be done elsewhere.
24228
24229         * support.cs (PtrHashtable): A hashtable that avoid comparing with
24230         the object stupid Equals method (because, that like fails all over
24231         the place).  We still do not use it.
24232
24233         * class.cs (TypeContainer.SetRequiredInterface,
24234         TypeContainer.RequireMethods): Killed these two routines and moved
24235         all the functionality to RegisterRequiredImplementations.
24236
24237         (TypeContainer.RegisterRequiredImplementations): This routine now
24238         registers all the implementations required in an array for the
24239         interfaces and abstract methods.  We use an array of structures
24240         which can be computed ahead of time to reduce memory usage and we
24241         also assume that lookups are cheap as most classes will not
24242         implement too many interfaces.
24243
24244         We also avoid creating too many MethodSignatures.
24245
24246         (TypeContainer.IsInterfaceMethod): Update and optionally does not
24247         clear the "pending" bit if we find that there are problems with
24248         the declaration.
24249
24250         (TypeContainer.VerifyPendingMethods): Update to report errors of
24251         methods that look like implementations but are not.
24252
24253         (TypeContainer.Define): Add support for explicit interface method
24254         implementation. 
24255
24256 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
24257
24258         * typemanager.cs: Keep track of the parameters here instead of
24259         being a feature of the TypeContainer.
24260
24261         * class.cs: Drop the registration of parameters here, as
24262         InterfaceMethods are also interface declarations.
24263
24264         * delegate.cs: Register methods with the TypeManager not only with
24265         the TypeContainer.  This code was buggy.
24266
24267         * interface.cs: Full registation here.
24268
24269 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
24270
24271         * expression.cs: Remove reducer for binary expressions, it can not
24272         be done this way.
24273
24274         * const.cs: Put here the code that used to go into constant.cs
24275
24276         * constant.cs: Put here the code for constants, this is a new base
24277         class for Literals.
24278
24279         * literal.cs: Make Literal derive from Constant.
24280
24281 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
24282
24283         * statement.cs (Return.Emit): Report error 157 if the user
24284         attempts to return from a finally block.
24285
24286         (Return.Emit): Instead of emitting a return, jump to the end of
24287         the function.
24288
24289         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
24290         LocalBuilder to store the result of the function.  ReturnLabel is
24291         the target where we jump.
24292
24293
24294 2001-12-09  Radek Doulik  <rodo@ximian.com>
24295
24296         * cs-parser.jay: remember alias in current namespace
24297
24298         * ecore.cs (SimpleName::DoResolve): use aliases for types or
24299         namespaces
24300
24301         * class.cs (LookupAlias): lookup alias in my_namespace
24302
24303         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
24304         aliases hashtable
24305         (LookupAlias): lookup alias in this and if needed in parent
24306         namespaces
24307
24308 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
24309
24310         * support.cs: 
24311
24312         * rootcontext.cs: (ModuleBuilder) Made static, first step into
24313         making things static.  I need this to avoid passing the
24314         TypeContainer when calling ParameterType.
24315
24316         * support.cs (InternalParameters.ParameterType): Remove ugly hack
24317         that did string manipulation to compute the type and then call
24318         GetType.  Use Parameter.ParameterType instead.
24319
24320         * cs-tokenizer.cs: Consume the suffix for floating values.
24321
24322         * expression.cs (ParameterReference): figure out whether this is a
24323         reference parameter or not.  Kill an extra variable by computing
24324         the arg_idx during emission.
24325
24326         * parameter.cs (Parameters.GetParameterInfo): New overloaded
24327         function that returns whether a parameter is an out/ref value or not.
24328
24329         (Parameter.ParameterType): The type of the parameter (base,
24330         without ref/out applied).
24331
24332         (Parameter.Resolve): Perform resolution here.
24333         (Parameter.ExternalType): The full type (with ref/out applied).
24334
24335         * statement.cs (Using.Emit, Using.EmitExpression): Implement
24336         support for expressions on the using statement.
24337
24338 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
24339
24340         * statement.cs (Using.EmitLocalVariableDecls): Split the
24341         localvariable handling of the using statement.
24342
24343         (Block.EmitMeta): Keep track of variable count across blocks.  We
24344         were reusing slots on separate branches of blocks.
24345
24346         (Try.Emit): Emit the general code block, we were not emitting it. 
24347
24348         Check the type of the declaration to be an IDisposable or
24349         something that can be implicity converted to it. 
24350
24351         Emit conversions if required.
24352
24353         * ecore.cs (EmptyExpression): New utility class.
24354         (Expression.ImplicitConversionExists): New utility function.
24355
24356 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
24357
24358         * statement.cs (Using): Implement.
24359
24360         * expression.cs (LocalVariableReference): Support read only variables.
24361
24362         * statement.cs: Remove the explicit emit for the Leave opcode.
24363         (VariableInfo): Add a readonly field.
24364
24365 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
24366
24367         * ecore.cs (ConvCast): new class used to encapsulate the various
24368         explicit integer conversions that works in both checked and
24369         unchecked contexts.
24370
24371         (Expression.ConvertNumericExplicit): Use new ConvCast class to
24372         properly generate the overflow opcodes.
24373
24374 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
24375
24376         * statement.cs: The correct type for the EmptyExpression is the
24377         element_type, not the variable type.  Ravi pointed this out.
24378
24379 2001-12-04  Ravi Pratap  <ravi@ximian.com>
24380
24381         * class.cs (Method::Define): Handle PInvoke methods specially
24382         by using DefinePInvokeMethod instead of the usual one.
24383
24384         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
24385         above to do the task of extracting information and defining the method.
24386
24387 2001-12-04  Ravi Pratap  <ravi@ximian.com>
24388
24389         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
24390         of the condition for string type.
24391
24392         (Emit): Move that here. 
24393
24394         (ArrayCreation::CheckIndices): Keep string literals in their expression
24395         form.
24396
24397         (EmitDynamicInitializers): Handle strings appropriately.
24398
24399 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
24400
24401         * codegen.cs (EmitContext): Replace multiple variables with a
24402         single pointer to the current Switch statement.
24403
24404         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
24405         EmitContext.
24406
24407 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
24408
24409         * statement.cs 
24410
24411         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
24412         default'.
24413
24414         (Foreach.Emit): Foreach on arrays was not setting
24415         up the loop variables (for break/continue).
24416
24417         (GotoCase): Semi-implented.
24418
24419 2001-12-03  Ravi Pratap  <ravi@ximian.com>
24420
24421         * attribute.cs (CheckAttribute): Handle system attributes by using
24422         Attribute.GetAttributes to examine information we need.
24423
24424         (GetValidPlaces): Same here.
24425
24426         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
24427
24428         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
24429
24430         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
24431
24432         (Method::Define): Set appropriate flags if we have a DllImport attribute.
24433
24434         (Method::Emit): Handle the case when we are a PInvoke method.
24435
24436 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
24437
24438         * expression.cs: Use ResolveWithSimpleName on compound names.
24439
24440 2001-12-02  Ravi Pratap  <ravi@ximian.com>
24441
24442         * constant.cs (EmitConstant): Make sure we resolve the associated expression
24443         before trying to reduce it.
24444
24445         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
24446
24447         * constant.cs (LookupConstantValue): Implement.
24448
24449         (EmitConstant): Use the above in emitting the constant.
24450
24451         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
24452         that are user-defined by doing a LookupConstantValue on them.
24453
24454         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
24455         too, like above.
24456
24457 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
24458
24459         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
24460
24461         (BaseAccess.DoResolve): Implement.
24462
24463         (MemberAccess.DoResolve): Split this routine into a
24464         ResolveMemberAccess routine that can be used independently
24465
24466 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
24467
24468         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
24469         As that share bits of the implementation.  Is returns a boolean,
24470         while As returns the Type that is being probed.
24471
24472 2001-12-01  Ravi Pratap  <ravi@ximian.com>
24473
24474         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
24475         instead of a Literal - much easier.
24476
24477         (EnumInTransit): Remove - utterly useless :-)
24478
24479         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
24480
24481         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
24482
24483         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
24484         chain when we have no associated expression.
24485
24486 2001-11-30  Ravi Pratap  <ravi@ximian.com>
24487
24488         * constant.cs (Define): Use Location while reporting the errror.
24489
24490         Also emit a warning when 'new' is used and there is no inherited
24491         member to hide.
24492
24493         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
24494         populated.
24495
24496         (LookupEnumValue): Implement to lookup an enum member's value and define it
24497         if necessary.
24498
24499         (Populate): Re-write accordingly to use the above routine.
24500
24501 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
24502
24503         * expression.cs (This): Fix prototype for DoResolveLValue to
24504         override the base class DoResolveLValue.
24505
24506         * cs-parser.cs: Report errors cs574 and cs575 (destructor
24507         declarations) 
24508
24509         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
24510         (we need to load the address of the field here).  This fixes
24511         test-22. 
24512
24513         (FieldExpr.DoResolveLValue): Call the DoResolve
24514         function to initialize the Instance expression.
24515
24516         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
24517         correctly the GetEnumerator operation on a value type.
24518
24519         * cs-parser.jay: Add more simple parsing error catches.
24520
24521         * statement.cs (Switch): Add support for string switches.
24522         Handle null specially.
24523
24524         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
24525
24526 2001-11-28  Ravi Pratap  <ravi@ximian.com>
24527
24528         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
24529
24530         (declare_local_constant): New helper function.
24531
24532         * statement.cs (AddConstant): Keep a separate record of constants
24533
24534         (IsConstant): Implement to determine if a variable is a constant.
24535
24536         (GetConstantExpression): Implement.
24537
24538         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
24539
24540         * statement.cs (IsVariableDefined): Re-write.
24541
24542 2001-11-27  Ravi Pratap  <ravi@ximian.com>
24543
24544         * class.cs (TypeContainer::FindMembers): Look for constants
24545         in the case when we are looking for MemberTypes.Field
24546
24547         * expression.cs (MemberAccess::DoResolve): Check that in the
24548         case we are a FieldExpr and a Literal, we are not being accessed
24549         by an instance reference.
24550
24551         * cs-parser.jay (local_constant_declaration): Implement.
24552
24553         (declaration_statement): Implement for constant declarations.
24554
24555 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
24556
24557         * statement.cs (Switch): Catch double defaults.
24558
24559         (Switch): More work on the switch() statement
24560         implementation.  It works for integral values now, need to finish
24561         string support.
24562
24563
24564 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
24565
24566         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
24567         integer literals into other integer literals.  To be used by
24568         switch. 
24569
24570 2001-11-24  Ravi Pratap  <ravi@ximian.com>
24571
24572         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
24573         some memory.
24574
24575         (EmitDynamicInitializers): Cope with the above since we extract data
24576         directly from ArrayData now.
24577
24578         (ExpectInitializers): Keep track of whether initializers are mandatory
24579         or not.
24580
24581         (Bounds): Make it a hashtable to prevent the same dimension being 
24582         recorded for every element in that dimension.
24583
24584         (EmitDynamicInitializers): Fix bug which prevented the Set array method
24585         from being found.
24586
24587         Also fix bug which was causing the indices to be emitted in the reverse
24588         order.
24589
24590 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
24591
24592         * expression.cs (ArrayCreation): Implement the bits that Ravi left
24593         unfinished.  They do not work, because the underlying code is
24594         sloppy.
24595
24596 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
24597
24598         * cs-parser.jay: Remove bogus fixme.
24599
24600         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
24601         on Switch statement.
24602
24603 2001-11-23  Ravi Pratap  <ravi@ximian.com>
24604
24605         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
24606         the same. 
24607
24608         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
24609         parameter. Apparently, any expression is allowed. 
24610
24611         (ValidateInitializers): Update accordingly.
24612
24613         (CheckIndices): Fix some tricky bugs thanks to recursion.
24614
24615         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
24616         I was being completely brain-dead.
24617
24618         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
24619         and re-write acordingly.
24620
24621         (DelegateInvocation): Re-write accordingly.
24622
24623         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
24624
24625         (MakeByteBlob): Handle types more correctly.
24626
24627         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
24628         initialization from expressions but it is incomplete because I am a complete
24629         Dodo :-|
24630
24631 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
24632
24633         * statement.cs (If.Emit): Fix a bug that generated incorrect code
24634         on If.  Basically, we have to return `true' (ie, we do return to
24635         our caller) only if both branches of the if return.
24636
24637         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
24638         short-circuit operators, handle them as short circuit operators. 
24639
24640         (Cast.DoResolve): Resolve type.
24641         (Cast.Cast): Take an expression as the target type.
24642
24643         * cs-parser.jay (cast_expression): Remove old hack that only
24644         allowed a limited set of types to be handled.  Now we take a
24645         unary_expression and we resolve to a type during semantic
24646         analysis.
24647
24648         Use the grammar productions from Rhys to handle casts (this is
24649         not complete like Rhys syntax yet, we fail to handle that corner
24650         case that C# has regarding (-x), but we will get there.
24651
24652 2001-11-22  Ravi Pratap  <ravi@ximian.com>
24653
24654         * class.cs (EmitFieldInitializer): Take care of the case when we have a
24655         field which is an array type.
24656
24657         * cs-parser.jay (declare_local_variables): Support array initialization too.
24658
24659         * typemanager.cs (MakeKey): Implement.
24660
24661         (everywhere): Use the above appropriately.
24662
24663         * cs-parser.jay (for_statement): Update for array initialization while
24664         declaring variables.
24665
24666         * ecore.cs : The error message was correct, it's the variable's names that
24667         were misleading ;-) Make the code more readable.
24668
24669         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
24670         the correct type etc.
24671
24672         (ConvertExplicit): Handle Enum types by examining the underlying type.
24673
24674 2001-11-21  Ravi Pratap  <ravi@ximian.com>
24675
24676         * parameter.cs (GetCallingConvention): Always return
24677         CallingConventions.Standard for now.
24678
24679 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
24680
24681         * expression.cs (Binary.ResolveOperator): Update the values of `l'
24682         and `r' after calling DoNumericPromotions.
24683
24684         * ecore.cs: Fix error message (the types were in the wrong order).
24685
24686         * statement.cs (Foreach.ProbeCollectionType): Need to pass
24687         BindingFlags.Instance as well 
24688
24689         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
24690         implicit int literal conversion in an empty cast so that we
24691         propagate the right type upstream.
24692
24693         (UnboxCast): new class used to unbox value types.
24694         (Expression.ConvertExplicit): Add explicit type conversions done
24695         by unboxing.
24696
24697         (Expression.ImplicitNumericConversion): Oops, forgot to test for
24698         the target type before applying the implicit LongLiterals to ULong
24699         literal cast.
24700
24701 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
24702
24703         * cs-parser.jay (for_statement): Reworked the way For works: now
24704         we declare manually any variables that are introduced in
24705         for_initializer to solve the problem of having out-of-band code
24706         emition (that is what got for broken).
24707
24708         (declaration_statement): Perform the actual variable declaration
24709         that used to be done in local_variable_declaration here.
24710
24711         (local_variable_declaration): Do not declare anything, just pass
24712         the information on a DictionaryEntry
24713
24714 2001-11-20  Ravi Pratap  <ravi@ximian.com>
24715
24716         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
24717         re-write of the logic to now make it recursive.
24718
24719         (UpdateIndices): Re-write accordingly.
24720
24721         Store element data in a separate ArrayData list in the above methods.
24722
24723         (MakeByteBlob): Implement to dump the array data into a byte array.
24724
24725 2001-11-19  Ravi Pratap  <ravi@ximian.com>
24726
24727         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
24728         into CheckIndices.
24729
24730         * constant.cs (Define): Implement.
24731
24732         (EmitConstant): Re-write fully.
24733
24734         Pass in location info.
24735
24736         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
24737         respectively.
24738
24739         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
24740         DictionaryEntry since we need location info too.
24741
24742         (constant_declaration): Update accordingly.
24743
24744         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
24745         code into another method : UpdateIndices.
24746
24747 2001-11-18  Ravi Pratap  <ravi@ximian.com>
24748
24749         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
24750         some type checking etc.
24751
24752 2001-11-17  Ravi Pratap  <ravi@ximian.com>
24753
24754         * expression.cs (ArrayCreation::ValidateInitializers): Implement
24755         bits to provide dimension info if the user skips doing that.
24756
24757         Update second constructor to store the rank correctly.
24758
24759 2001-11-16  Ravi Pratap  <ravi@ximian.com>
24760
24761         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
24762         and try to implement.
24763
24764         * ../errors/cs0150.cs : Add.
24765
24766         * ../errors/cs0178.cs : Add.
24767
24768 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
24769
24770         * statement.cs: Implement foreach on multi-dimensional arrays. 
24771
24772         * parameter.cs (Parameters.GetParameterByName): Also lookup the
24773         name of the params argument.
24774
24775         * expression.cs: Use EmitStoreOpcode to get the right opcode while
24776         initializing the array.
24777
24778         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
24779         we can use this elsewhere.
24780
24781         * statement.cs: Finish implementation of foreach for single
24782         dimension arrays.
24783
24784         * cs-parser.jay: Use an out-of-band stack to pass information
24785         around, I wonder why I need this.
24786
24787         foreach_block: Make the new foreach_block the current_block.
24788
24789         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
24790         function used to return a static Parameters structure.  Used for
24791         empty parameters, as those are created very frequently.
24792
24793         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
24794
24795 2001-11-15  Ravi Pratap  <ravi@ximian.com>
24796
24797         * interface.cs : Default modifier is private, not public. The
24798         make verify test passes again.
24799
24800 2001-11-15  Ravi Pratap  <ravi@ximian.com>
24801
24802         * support.cs (ReflectionParameters): Fix logic to determine
24803         whether the last parameter is a params one. Test 9 passes again.
24804
24805         * delegate.cs (Populate): Register the builders we define with
24806         RegisterParameterForBuilder. Test 19 passes again.
24807
24808         * cs-parser.jay (property_declaration): Reference $6 instead
24809         of $$ to get at the location.
24810
24811         (indexer_declaration): Similar stuff.
24812
24813         (attribute): Ditto.
24814
24815         * class.cs (Property): Register parameters for the Get and Set methods
24816         if they exist. Test 23 passes again.
24817
24818         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
24819         call to EmitArguments as we are sure there aren't any params arguments. 
24820         Test 32 passes again.
24821
24822         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
24823         IndexOutOfRangeException. 
24824
24825         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
24826         Test 33 now passes again.
24827
24828 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
24829
24830         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
24831         broke a bunch of things.  Will have to come up with a better way
24832         of tracking locations.
24833
24834         * statement.cs: Implemented foreach for single dimension arrays.
24835
24836 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
24837
24838         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
24839         an error.  This removes the lookup from the critical path.
24840
24841         * cs-parser.jay: Removed use of temporary_loc, which is completely
24842         broken. 
24843
24844 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
24845
24846         * support.cs (ReflectionParameters.ParameterModifier): Report
24847         whether the argument is a PARAMS argument or not.
24848
24849         * class.cs: Set the attribute `ParamArrayAttribute' on the
24850         parameter argument.
24851
24852         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
24853         and cons_param_array_attribute (ConstructorInfo for
24854         ParamArrayAttribute)., 
24855
24856         * codegen.cs: Emit the return using the `Return' statement, that
24857         way we can report the error correctly for missing return values. 
24858
24859         * class.cs (Method.Emit): Clean up.
24860
24861         * expression.cs (Argument.Resolve): Take another argument: the
24862         location where this argument is used.  Notice that this is not
24863         part of the "Argument" class as to reduce the size of the
24864         structure (we know the approximate location anyways).
24865
24866         Test if the argument is a variable-reference, if not, then
24867         complain with a 206.
24868
24869         (Argument.Emit): Emit addresses of variables.
24870
24871         (Argument.FullDesc): Simplify.
24872
24873         (Invocation.DoResolve): Update for Argument.Resolve.
24874
24875         (ElementAccess.DoResolve): ditto.
24876
24877         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
24878         method should be virtual, as this method is always virtual.
24879
24880         (NewDelegate.DoResolve): Update for Argument.Resolve.
24881
24882         * class.cs (ConstructorInitializer.DoResolve): ditto.
24883
24884         * attribute.cs (Attribute.Resolve): ditto.
24885
24886 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
24887
24888         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
24889
24890         * expression.cs (ParameterReference): Drop IStackStorage and implement
24891         IAssignMethod instead. 
24892
24893         (LocalVariableReference): ditto.
24894
24895         * ecore.cs (FieldExpr): Drop IStackStorage and implement
24896         IAssignMethod instead. 
24897
24898 2001-11-13  Miguel de Icaza <miguel@ximian.com>
24899
24900         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
24901         enumerations that are used in heavily used structures derive from
24902         byte in a laughable and pathetic attempt to reduce memory usage.
24903         This is the kind of pre-optimzations that you should not do at
24904         home without adult supervision.
24905
24906         * expression.cs (UnaryMutator): New class, used to handle ++ and
24907         -- separatedly from the other unary operators.  Cleans up the
24908         code, and kills the ExpressionStatement dependency in Unary.
24909
24910         (Unary): Removed `method' and `Arguments' from this class, making
24911         it smaller, and moving it all to SimpleCall, so I can reuse this
24912         code in other locations and avoid creating a lot of transient data
24913         strucutres when not required.
24914
24915         * cs-parser.jay: Adjust for new changes.
24916
24917 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
24918
24919         * enum.cs (Enum.Populate): If there is a failure during
24920         definition, return
24921
24922         * cs-parser.jay (opt_enum_base): we used to catch type errors
24923         here, but this is really incorrect.  The type error should be
24924         catched during semantic analysis.
24925
24926 2001-12-11  Ravi Pratap  <ravi@ximian.com>
24927
24928         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
24929         current_local_parameters as expected since I, in my stupidity, had forgotten
24930         to do this :-)
24931
24932         * attribute.cs (GetValidPlaces): Fix stupid bug.
24933
24934         * class.cs (Method::Emit): Perform check on applicability of attributes.
24935
24936         (Constructor::Emit): Ditto.
24937
24938         (Field::Emit): Ditto.
24939
24940         (Field.Location): Store location information.
24941
24942         (Property, Event, Indexer, Operator): Ditto.
24943
24944         * cs-parser.jay (field_declaration): Pass in location for each field.
24945
24946         * ../errors/cs0592.cs : Add.
24947
24948 2001-11-12  Ravi Pratap  <ravi@ximian.com>
24949
24950         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
24951
24952         (InitCoreTypes): Update accordingly.
24953
24954         (RegisterAttrType, LookupAttr): Implement.
24955
24956         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
24957         info about the same.
24958
24959         (Resolve): Update to populate the above as necessary.
24960
24961         (Error592): Helper.
24962
24963         (GetValidPlaces): Helper to the above.
24964
24965         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
24966
24967         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
24968
24969 2001-11-12  Ravi Pratap  <ravi@ximian.com>
24970
24971         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
24972
24973         * ../errors/cs0617.cs : Add.
24974
24975 2001-11-11  Ravi Pratap  <ravi@ximian.com>
24976
24977         * enum.cs (Emit): Rename to Populate to be more consistent with what
24978         we expect it to do and when exactly it is called.
24979
24980         * class.cs, rootcontext.cs : Update accordingly.
24981
24982         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
24983         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
24984
24985         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
24986
24987         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
24988         of a fieldinfo using the above, when dealing with a FieldBuilder.
24989
24990 2001-11-10  Ravi Pratap  <ravi@ximian.com>
24991
24992         * ../errors/cs0031.cs : Add.
24993
24994         * ../errors/cs1008.cs : Add.
24995
24996         * ../errrors/cs0543.cs : Add.
24997
24998         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
24999         enum type.
25000
25001         (FindMembers): Implement.
25002
25003         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
25004         enums and delegates too.
25005
25006         (enum_types): Rename to builder_to_enum.
25007
25008         (delegate_types): Rename to builder_to_delegate.
25009
25010         * delegate.cs (FindMembers): Implement.
25011
25012 2001-11-09  Ravi Pratap  <ravi@ximian.com>
25013
25014         * typemanager.cs (IsEnumType): Implement.
25015
25016         * enum.cs (Emit): Re-write parts to account for the underlying type
25017         better and perform checking etc.
25018
25019         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
25020         of the underlying type.
25021
25022         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
25023         value
25024
25025         * enum.cs (error31): Helper to report error #31.
25026
25027         * cs-parser.jay (enum_declaration): Store location of each member too.
25028
25029         * enum.cs (member_to_location): New hashtable. 
25030
25031         (AddEnumMember): Update location hashtable.
25032
25033         (Emit): Use the location of each member while reporting errors.
25034
25035 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
25036
25037         * cs-parser.jay: A for_initializer if is a
25038         local_variable_declaration really ammount to have an implicit
25039         block with the variable declaration and no initializer for for.
25040
25041         * statement.cs (For.Emit): Cope with null initializers.
25042
25043         This fixes the infinite loop on for initializers.
25044
25045 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
25046
25047         * enum.cs: More cleanup.
25048
25049         * ecore.cs: Remove dead code.
25050
25051         * class.cs (Property.Emit): More simplification.
25052         (Event.Emit): ditto.
25053
25054         Reworked to have less levels of indentation.
25055
25056 2001-11-08  Ravi Pratap  <ravi@ximian.com>
25057
25058         * class.cs (Property): Emit attributes.
25059
25060         (Field): Ditto.
25061
25062         (Event): Ditto.
25063
25064         (Indexer): Ditto.
25065
25066         (Operator): Ditto.
25067
25068         * enum.cs (Emit): Ditto.
25069
25070         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
25071         Enums too.
25072
25073         * class.cs (Field, Event, etc.): Move attribute generation into the
25074         Emit method everywhere.
25075
25076         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
25077         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
25078         as we had no way of defining nested enums !
25079
25080         * rootcontext.cs : Adjust code accordingly.
25081
25082         * typemanager.cs (AddEnumType): To keep track of enum types separately.
25083
25084 2001-11-07  Ravi Pratap  <ravi@ximian.com>
25085
25086         * expression.cs (EvalConstantExpression): Move into ecore.cs
25087
25088         * enum.cs (Enum): Rename some members and make them public and readonly
25089         according to our convention.
25090
25091         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
25092         nothing else.
25093
25094         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
25095
25096         (Enum::Emit): Write a simple version for now which doesn't try to compute
25097         expressions. I shall modify this to be more robust in just a while.
25098
25099         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
25100
25101         (TypeContainer::CloseType): Create the Enum types too.
25102
25103         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
25104
25105         * expression.cs (EvalConstantExpression): Get rid of completely.
25106
25107         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
25108         user-defined values and other cases.
25109
25110         (IsValidEnumLiteral): Helper function.
25111
25112         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
25113         out there in the case we had a literal FieldExpr.
25114
25115         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
25116
25117         (Literalize): Revamp a bit to take two arguments.
25118
25119         (EnumLiteral): New class which derives from Literal to wrap enum literals.
25120
25121 2001-11-06  Ravi Pratap  <ravi@ximian.com>
25122
25123         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
25124
25125         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
25126
25127         (Resolve): Use the above to ensure we have proper initializers.
25128
25129 2001-11-05  Ravi Pratap  <ravi@ximian.com>
25130
25131         * expression.cs (Expression::EvalConstantExpression): New method to 
25132         evaluate constant expressions.
25133
25134         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
25135
25136 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
25137
25138         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
25139         in an array.
25140
25141         (Binary.ResolveOperator): Handle operator != (object a, object b)
25142         and operator == (object a, object b);
25143
25144         (Binary.DoNumericPromotions): Indicate whether the numeric
25145         promotion was possible.
25146
25147         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
25148         Implement.  
25149
25150         Made the ArrayAccess implement interface IAssignMethod instead of
25151         IStackStore as the order in which arguments are passed reflects
25152         this.
25153
25154         * assign.cs: Instead of using expr.ExprClass to select the way of
25155         assinging, probe for the IStackStore/IAssignMethod interfaces.
25156
25157         * typemanager.cs: Load InitializeArray definition.
25158
25159         * rootcontext.cs (RootContext.MakeStaticData): Used to define
25160         static data that can be used to initialize arrays. 
25161
25162 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
25163
25164         * expression.cs: Handle operator== and operator!= for booleans.
25165
25166         (Conditioal.Reduce): Implement reducer for the ?: operator.
25167
25168         (Conditional.Resolve): Implement dead code elimination.
25169
25170         (Binary.Resolve): Catch string literals and return a new
25171         concatenated string.
25172
25173         (Unary.Reduce): Implement reduction of unary expressions.
25174
25175         * ecore.cs: Split out the expression core handling here.
25176
25177         (Expression.Reduce): New method used to perform constant folding
25178         and CSE.  This is needed to support constant-expressions. 
25179
25180         * statement.cs (Statement.EmitBoolExpression): Pass true and false
25181         targets, and optimize for !x.
25182
25183 2001-11-04  Ravi Pratap  <ravi@ximian.com>
25184
25185         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
25186         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
25187         set custom atttributes.
25188
25189         * literal.cs (Literal::GetValue): New abstract method to return the actual
25190         value of the literal, cast as an object.
25191
25192         (*Literal): Implement GetValue method.
25193
25194         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
25195         expressions to the arraylist but objects of type Argument.
25196
25197         * class.cs (TypeContainer::Emit): Emit our attributes too.
25198
25199         (Method::Emit, Constructor::Emit): Ditto.
25200
25201         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
25202         to be ignoring earlier.
25203
25204 2001-11-03  Ravi Pratap  <ravi@ximian.com>
25205
25206         * attribute.cs (AttributeSection::Define): Implement to do the business
25207         of constructing a CustomAttributeBuilder.
25208
25209         (Attribute): New trivial class. Increases readability of code.  
25210
25211         * cs-parser.jay : Update accordingly.
25212
25213         (positional_argument_list, named_argument_list, named_argument): New rules
25214
25215         (attribute_arguments): Use the above so that we are more correct.
25216
25217 2001-11-02  Ravi Pratap  <ravi@ximian.com>
25218
25219         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
25220         to perform all checks for a method with a params parameter.
25221
25222         (Invocation::OverloadResolve): Update to use the above method and therefore
25223         cope correctly with params method invocations.
25224
25225         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
25226         params too.
25227
25228         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
25229         constructors in our parent too because we can't afford to miss out on 
25230         protected ones ;-)
25231
25232         * attribute.cs (AttributeSection): New name for the class Attribute
25233
25234         Other trivial changes to improve readability.
25235
25236         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
25237         use the new class names.
25238
25239 2001-11-01  Ravi Pratap  <ravi@ximian.com>
25240
25241         * class.cs (Method::Define): Complete definition for params types too
25242
25243         (Indexer::Define): Ditto.
25244
25245         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
25246         Cope everywhere with a request for info about the array parameter.
25247
25248 2001-11-01  Ravi Pratap  <ravi@ximian.com>
25249
25250         * tree.cs (RecordNamespace): Fix up to check for the correct key.
25251
25252         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
25253         local_variable_type to extract the string corresponding to the type.
25254
25255         (local_variable_type): Fixup the action to use the new helper method.
25256
25257         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
25258         go.
25259
25260         * expression.cs : Clean out code which uses the above.
25261
25262 2001-10-31  Ravi Pratap  <ravi@ximian.com>
25263
25264         * typemanager.cs (RegisterMethod): Check if we already have an existing key
25265         and bale out if necessary by returning a false.
25266
25267         (RegisterProperty): Ditto.
25268
25269         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
25270         and print out appropriate error messages.
25271
25272         * interface.cs (everywhere): Ditto.
25273
25274         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
25275         location to constructor.
25276
25277         * class.cs (Property, Event, Indexer): Update accordingly.
25278
25279         * ../errors/cs111.cs : Added.
25280
25281         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
25282         of a method, as laid down by the spec.
25283
25284         (Invocation::OverloadResolve): Use the above method.
25285
25286 2001-10-31  Ravi Pratap  <ravi@ximian.com>
25287
25288         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
25289         now take a TypeContainer and a Parameters object.
25290
25291         (ParameterData): Modify return type of ParameterModifier method to be 
25292         Parameter.Modifier and not a string.
25293
25294         (ReflectionParameters, InternalParameters): Update accordingly.
25295
25296         * expression.cs (Argument::GetParameterModifier): Same here.
25297
25298         * support.cs (InternalParameters::ParameterType): Find a better way of determining
25299         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
25300         symbol in it at all so maybe this is only for now.
25301
25302 2001-10-30  Ravi Pratap  <ravi@ximian.com>
25303
25304         * support.cs (InternalParameters): Constructor now takes an extra argument 
25305         which is the actual Parameters class.
25306
25307         (ParameterDesc): Update to provide info on ref/out modifiers.
25308
25309         * class.cs (everywhere): Update call to InternalParameters to pass in
25310         the second argument too.
25311
25312         * support.cs (ParameterData): Add ParameterModifier, which is a method 
25313         to return the modifier info [ref/out etc]
25314
25315         (InternalParameters, ReflectionParameters): Implement the above.
25316
25317         * expression.cs (Argument::ParameterModifier): Similar function to return
25318         info about the argument's modifiers.
25319
25320         (Invocation::OverloadResolve): Update to take into account matching modifiers 
25321         too.
25322
25323         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
25324         a new SetFormalParameters object which we pass to InternalParameters.
25325
25326 2001-10-30  Ravi Pratap  <ravi@ximian.com>
25327
25328         * expression.cs (NewArray): Merge into the ArrayCreation class.
25329
25330 2001-10-29  Ravi Pratap  <ravi@ximian.com>
25331
25332         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
25333         NewUserdefinedArray into one as there wasn't much of a use in having
25334         two separate ones.
25335
25336         * expression.cs (Argument): Change field's name to ArgType from Type.
25337
25338         (Type): New readonly property which returns the proper type, taking into 
25339         account ref/out modifiers.
25340
25341         (everywhere): Adjust code accordingly for the above.
25342
25343         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
25344         whether we are emitting for a ref or out parameter.
25345
25346         * expression.cs (Argument::Emit): Use the above field to set the state.
25347
25348         (LocalVariableReference::Emit): Update to honour the flag and emit the
25349         right stuff.
25350
25351         * parameter.cs (Attributes): Set the correct flags for ref parameters.
25352
25353         * expression.cs (Argument::FullDesc): New function to provide a full desc.
25354
25355         * support.cs (ParameterData): Add method ParameterDesc to the interface.
25356
25357         (ReflectionParameters, InternalParameters): Implement the above method.
25358
25359         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
25360         reporting errors.
25361
25362         (Invocation::FullMethodDesc): Ditto. 
25363
25364 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
25365
25366         * cs-parser.jay: Add extra production for the second form of array
25367         creation. 
25368
25369         * expression.cs (ArrayCreation): Update to reflect the above
25370         change. 
25371
25372         * Small changes to prepare for Array initialization.
25373
25374 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
25375
25376         * typemanager.cs (ImplementsInterface): interface might be null;
25377         Deal with this problem;
25378
25379         Also, we do store negative hits on the cache (null values), so use
25380         this instead of calling t.GetInterfaces on the type everytime.
25381
25382 2001-10-28  Ravi Pratap  <ravi@ximian.com>
25383
25384         * typemanager.cs (IsBuiltinType): New method to help determine the same.
25385
25386         * expression.cs (New::DoResolve): Get rid of array creation code and instead
25387         split functionality out into different classes.
25388
25389         (New::FormArrayType): Move into NewBuiltinArray.
25390
25391         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
25392         quite useless.
25393
25394         (NewBuiltinArray): New class to handle creation of built-in arrays.
25395
25396         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
25397         account creation of one-dimensional arrays.
25398
25399         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
25400
25401         (NewUserdefinedArray::DoResolve): Implement.
25402
25403         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
25404
25405         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
25406         we maintain inside the TypeManager. This is necessary to perform lookups on the
25407         module builder.
25408
25409         (LookupType): Update to perform GetType on the module builders too.     
25410
25411         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
25412
25413         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
25414
25415 2001-10-23  Ravi Pratap  <ravi@ximian.com>
25416
25417         * expression.cs (New::DoResolve): Implement guts of array creation.
25418
25419         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
25420
25421 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
25422
25423         * expression.cs: Fix bug I introduced lsat night that broke
25424         Delegates. 
25425
25426         (Expression.Resolve): Report a 246 error (can not resolve name)
25427         if we find a SimpleName in the stream.
25428
25429         (Expression.ResolveLValue): Ditto.
25430
25431         (Expression.ResolveWithSimpleName): This function is a variant of
25432         ResolveName, this one allows SimpleNames to be returned without a
25433         warning.  The only consumer of SimpleNames is MemberAccess
25434
25435 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
25436
25437         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
25438         might arrive here.  I have my doubts that this is correct.
25439
25440         * statement.cs (Lock): Implement lock statement.
25441
25442         * cs-parser.jay: Small fixes to support `lock' and `using'
25443
25444         * cs-tokenizer.cs: Remove extra space
25445
25446         * driver.cs: New flag --checked, allows to turn on integer math
25447         checking. 
25448
25449         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
25450         Threading.Monitor.Exit 
25451
25452 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
25453
25454         * expression.cs (IndexerAccess::DoResolveLValue): Set the
25455         Expression Class to be IndexerAccess.
25456
25457         Notice that Indexer::DoResolve sets the eclass to Value.
25458
25459 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
25460
25461         * class.cs (TypeContainer::Emit): Emit code for indexers.
25462
25463         * assign.cs (IAssignMethod): New interface implemented by Indexers
25464         and Properties for handling assignment.
25465
25466         (Assign::Emit): Simplify and reuse code. 
25467
25468         * expression.cs (IndexerAccess, PropertyExpr): Implement
25469         IAssignMethod, clean up old code. 
25470
25471 2001-10-22  Ravi Pratap  <ravi@ximian.com>
25472
25473         * typemanager.cs (ImplementsInterface): New method to determine if a type
25474         implements a given interface. Provides a nice cache too.
25475
25476         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
25477         method.
25478
25479         (ConvertReferenceExplicit): Ditto.
25480
25481         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
25482         various methods, with correct names etc.
25483
25484         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
25485         Operator.UnaryNegation.
25486
25487         * cs-parser.jay (operator_declarator): Be a little clever in the case where
25488         we have a unary plus or minus operator.
25489
25490         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
25491         UnaryMinus.
25492
25493         * everywhere : update accordingly.
25494
25495         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
25496         respectively.
25497
25498         * class.cs (Method::Define): For the case where we are implementing a method
25499         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
25500         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
25501
25502 2001-10-21  Ravi Pratap  <ravi@ximian.com>
25503
25504         * interface.cs (FindMembers): Implement to work around S.R.E
25505         lameness.
25506
25507         * typemanager.cs (IsInterfaceType): Implement.
25508
25509         (FindMembers): Update to handle interface types too.
25510
25511         * expression.cs (ImplicitReferenceConversion): Re-write bits which
25512         use IsAssignableFrom as that is not correct - it doesn't work.
25513
25514         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
25515         and accordingly override EmitStatement.
25516
25517         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
25518         using the correct logic :-)
25519
25520 2001-10-19  Ravi Pratap  <ravi@ximian.com>
25521
25522         * ../errors/cs-11.cs : Add to demonstrate error -11 
25523
25524 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
25525
25526         * assign.cs (Assign::Resolve): Resolve right hand side first, and
25527         then pass this as a hint to ResolveLValue.
25528
25529         * expression.cs (FieldExpr): Add Location information
25530
25531         (FieldExpr::LValueResolve): Report assignment to readonly
25532         variable. 
25533
25534         (Expression::ExprClassFromMemberInfo): Pass location information.
25535
25536         (Expression::ResolveLValue): Add new method that resolves an
25537         LValue. 
25538
25539         (Expression::DoResolveLValue): Default invocation calls
25540         DoResolve. 
25541
25542         (Indexers): New class used to keep track of indexers in a given
25543         Type. 
25544
25545         (IStackStore): Renamed from LValue, as it did not really describe
25546         what this did.  Also ResolveLValue is gone from this interface and
25547         now is part of Expression.
25548
25549         (ElementAccess): Depending on the element access type
25550
25551         * typemanager.cs: Add `indexer_name_type' as a Core type
25552         (System.Runtime.CompilerServices.IndexerNameAttribute)
25553
25554         * statement.cs (Goto): Take a location.
25555
25556 2001-10-18  Ravi Pratap  <ravi@ximian.com>
25557
25558         * delegate.cs (Delegate::VerifyDelegate): New method to verify
25559         if two delegates are compatible.
25560
25561         (NewDelegate::DoResolve): Update to take care of the case when
25562         we instantiate a delegate from another delegate.
25563
25564         * typemanager.cs (FindMembers): Don't even try to look up members
25565         of Delegate types for now.
25566
25567 2001-10-18  Ravi Pratap  <ravi@ximian.com>
25568
25569         * delegate.cs (NewDelegate): New class to take care of delegate
25570         instantiation.
25571
25572         * expression.cs (New): Split the delegate related code out into 
25573         the NewDelegate class.
25574
25575         * delegate.cs (DelegateInvocation): New class to handle delegate 
25576         invocation.
25577
25578         * expression.cs (Invocation): Split out delegate related code into
25579         the DelegateInvocation class.
25580
25581 2001-10-17  Ravi Pratap  <ravi@ximian.com>
25582
25583         * expression.cs (New::DoResolve): Implement delegate creation fully
25584         and according to the spec.
25585
25586         (New::DoEmit): Update to handle delegates differently.
25587
25588         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
25589         because of which we were printing out arguments in reverse order !
25590
25591         * delegate.cs (VerifyMethod): Implement to check if the given method
25592         matches the delegate.
25593
25594         (FullDelegateDesc): Implement.
25595
25596         (VerifyApplicability): Implement.
25597
25598         * expression.cs (Invocation::DoResolve): Update to accordingly handle
25599         delegate invocations too.
25600
25601         (Invocation::Emit): Ditto.
25602
25603         * ../errors/cs1593.cs : Added.
25604
25605         * ../errors/cs1594.cs : Added.
25606
25607         * delegate.cs (InstanceExpression, TargetMethod): New properties.
25608
25609 2001-10-16  Ravi Pratap  <ravi@ximian.com>
25610
25611         * typemanager.cs (intptr_type): Core type for System.IntPtr
25612
25613         (InitCoreTypes): Update for the same.
25614
25615         (iasyncresult_type, asynccallback_type): Ditto.
25616
25617         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
25618         correct.
25619
25620         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
25621         too.
25622
25623         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
25624         the builders for the 4 members of a delegate type :-)
25625
25626         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
25627         type.
25628
25629         * expression.cs (New::DoResolve): Implement guts for delegate creation.
25630
25631         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
25632
25633 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
25634
25635         * statement.cs (Break::Emit): Implement.   
25636         (Continue::Emit): Implement.
25637
25638         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
25639         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
25640         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
25641         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
25642         end loop
25643
25644         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
25645         properties that track the label for the current loop (begin of the
25646         loop and end of the loop).
25647
25648 2001-10-15  Ravi Pratap  <ravi@ximian.com>
25649
25650         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
25651         use of emitting anything at all.
25652
25653         * class.cs, rootcontext.cs : Get rid of calls to the same.
25654
25655         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
25656
25657         (Populate): Define the constructor correctly and set the implementation
25658         attributes.
25659
25660         * typemanager.cs (delegate_types): New hashtable to hold delegates that
25661         have been defined.
25662
25663         (AddDelegateType): Implement.
25664
25665         (IsDelegateType): Implement helper method.
25666
25667         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
25668
25669         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
25670         and accordingly handle it.
25671
25672         * delegate.cs (Populate): Take TypeContainer argument.
25673         Implement bits to define the Invoke method. However, I still haven't figured out
25674         how to take care of the native int bit :-(
25675
25676         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
25677         Qualify the name of the delegate, not its return type !
25678
25679         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
25680         conversion.
25681
25682         (StandardConversionExists): Checking for array types turns out to be recursive.
25683
25684         (ConvertReferenceExplicit): Implement array conversion.
25685
25686         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
25687
25688 2001-10-12  Ravi Pratap  <ravi@ximian.com>
25689
25690         * cs-parser.jay (delegate_declaration): Store the fully qualified
25691         name as it is a type declaration.
25692
25693         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
25694         readonly.
25695
25696         (DefineDelegate): Renamed from Define. Does the same thing essentially,
25697         as TypeContainer::DefineType.
25698
25699         (Populate): Method in which all the definition of the various methods (Invoke)
25700         etc is done.
25701
25702         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
25703         see.
25704
25705         (CloseDelegate): Finally creates the delegate.
25706
25707         * class.cs (TypeContainer::DefineType): Update to define delegates.
25708         (Populate, Emit and CloseType): Do the same thing here too.
25709
25710         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
25711         delegates in all these operations.
25712
25713 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
25714
25715         * expression.cs: LocalTemporary: a new expression used to
25716         reference a temporary that has been created.
25717
25718         * assign.cs: Handle PropertyAccess back here, so that we can
25719         provide the proper semantic access to properties.
25720
25721         * expression.cs (Expression::ConvertReferenceExplicit): Implement
25722         a few more explicit conversions. 
25723
25724         * modifiers.cs: `NEW' modifier maps to HideBySig.
25725
25726         * expression.cs (PropertyExpr): Make this into an
25727         ExpressionStatement, and support the EmitStatement code path. 
25728
25729         Perform get/set error checking, clean up the interface.
25730
25731         * assign.cs: recognize PropertyExprs as targets, and if so, turn
25732         them into toplevel access objects.
25733
25734 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
25735
25736         * expression.cs: PropertyExpr::PropertyExpr: use work around the
25737         SRE.
25738
25739         * typemanager.cs: Keep track here of our PropertyBuilders again to
25740         work around lameness in SRE.
25741
25742 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
25743
25744         * expression.cs (LValue::LValueResolve): New method in the
25745         interface, used to perform a second resolution pass for LValues. 
25746
25747         (This::DoResolve): Catch the use of this in static methods.
25748
25749         (This::LValueResolve): Implement.
25750
25751         (This::Store): Remove warning, assigning to `this' in structures
25752         is 
25753
25754         (Invocation::Emit): Deal with invocation of
25755         methods on value types.  We need to pass the address to structure
25756         methods rather than the object itself.  (The equivalent code to
25757         emit "this" for structures leaves the entire structure on the
25758         stack instead of a pointer to it). 
25759
25760         (ParameterReference::DoResolve): Compute the real index for the
25761         argument based on whether the method takes or not a `this' pointer
25762         (ie, the method is static).
25763
25764         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
25765         value types returned from functions when we need to invoke a
25766         method on the sturcture.
25767
25768
25769 2001-10-11  Ravi Pratap  <ravi@ximian.com>
25770
25771         * class.cs (TypeContainer::DefineType): Method to actually do the business of
25772         defining the type in the Modulebuilder or Typebuilder. This is to take
25773         care of nested types which need to be defined on the TypeBuilder using
25774         DefineNestedMethod.
25775
25776         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
25777         methods in RootContext, only ported to be part of TypeContainer.
25778
25779         (TypeContainer::GetInterfaceOrClass): Ditto.
25780
25781         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
25782
25783         * interface.cs (Interface::DefineInterface): New method. Does exactly
25784         what RootContext.CreateInterface did earlier, only it takes care of nested types 
25785         too.
25786
25787         (Interface::GetInterfaces): Move from RootContext here and port.
25788
25789         (Interface::GetInterfaceByName): Same here.
25790
25791         * rootcontext.cs (ResolveTree): Re-write.
25792
25793         (PopulateTypes): Re-write.
25794
25795         * class.cs (TypeContainer::Populate): Populate nested types too.
25796         (TypeContainer::Emit): Emit nested members too.
25797
25798         * typemanager.cs (AddUserType): Do not make use of the FullName property,
25799         instead just use the name argument passed in as it is already fully
25800         qualified.
25801
25802         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
25803         to TypeContainer mapping to see if a type is user-defined.
25804
25805         * class.cs (TypeContainer::CloseType): Implement. 
25806
25807         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
25808         the default constructor.
25809
25810         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
25811         twice.
25812
25813         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
25814
25815         * interface.cs (CloseType): Create the type here.
25816
25817         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
25818         the hierarchy.
25819
25820         Remove all the methods which are now in TypeContainer.
25821
25822 2001-10-10  Ravi Pratap  <ravi@ximian.com>
25823
25824         * delegate.cs (Define): Re-write bits to define the delegate
25825         correctly.
25826
25827 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
25828
25829         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
25830
25831         * expression.cs (ImplicitReferenceConversion): handle null as well
25832         as a source to convert to any reference type.
25833
25834         * statement.cs (Return): Perform any implicit conversions to
25835         expected return type.  
25836
25837         Validate use of return statement.  
25838
25839         * codegen.cs (EmitContext): Pass the expected return type here.
25840
25841         * class.cs (Method, Constructor, Property): Pass expected return
25842         type to EmitContext.
25843
25844 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
25845
25846         * expression.cs: Make DoResolve take an EmitContext instead of a
25847         TypeContainer.
25848
25849         Replaced `l' and `location' for `loc', for consistency.
25850
25851         (Error, Warning): Remove unneeded Tc argument.
25852
25853         * assign.cs, literal.cs, constant.cs: Update to new calling
25854         convention. 
25855
25856         * codegen.cs: EmitContext now contains a flag indicating whether
25857         code is being generated in a static method or not.
25858
25859         * cs-parser.jay: DecomposeQI, new function that replaces the old
25860         QualifiedIdentifier.  Now we always decompose the assembled
25861         strings from qualified_identifier productions into a group of
25862         memberaccesses.
25863
25864 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
25865
25866         * rootcontext.cs: Deal with field-less struct types correctly now
25867         by passing the size option to Define Type.
25868
25869         * class.cs: Removed hack that created one static field. 
25870
25871 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
25872
25873         * statement.cs: Moved most of the code generation here. 
25874
25875 2001-10-09  Ravi Pratap  <ravi@ximian.com>
25876
25877         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
25878         seem very right.
25879
25880         (ElementAccess): Remove useless bits for now - keep checks as the spec
25881         says.
25882
25883 2001-10-08  Ravi Pratap  <ravi@ximian.com>
25884
25885         * expression.cs (ElementAccess::DoResolve): Remove my crap code
25886         and start performing checks according to the spec.
25887
25888 2001-10-07  Ravi Pratap  <ravi@ximian.com>
25889
25890         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
25891         rank_specifiers instead.
25892
25893         (rank_specifiers): Change the order in which the rank specifiers are stored
25894
25895         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
25896
25897         * expression.cs (ElementAccess): Implement the LValue interface too.
25898
25899 2001-10-06  Ravi Pratap  <ravi@ximian.com>
25900
25901         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
25902         except that user defined conversions are not included.
25903
25904         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
25905         perform the conversion of the return type, if necessary.
25906
25907         (New::DoResolve): Check whether we are creating an array or an object
25908         and accordingly do the needful.
25909
25910         (New::Emit): Same here.
25911
25912         (New::DoResolve): Implement guts of array creation.
25913
25914         (New::FormLookupType): Helper function.
25915
25916 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
25917
25918         * codegen.cs: Removed most of the code generation here, and move the
25919         corresponding code generation bits to the statement classes. 
25920
25921         Added support for try/catch/finalize and throw.
25922
25923         * cs-parser.jay: Added support for try/catch/finalize.
25924
25925         * class.cs: Catch static methods having the flags override,
25926         virtual or abstract.
25927
25928         * expression.cs (UserCast): This user cast was not really doing
25929         what it was supposed to do.  Which is to be born in fully resolved
25930         state.  Parts of the resolution were being performed at Emit time! 
25931
25932         Fixed this code.
25933
25934 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
25935
25936         * expression.cs: Implicity convert the result from UserCast.
25937
25938 2001-10-05  Ravi Pratap  <ravi@ximian.com>
25939
25940         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
25941         prevented it from working correctly. 
25942
25943         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
25944         merely ConvertImplicit.
25945
25946 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
25947
25948         * typemanager.cs: Make the LookupTypeContainer function static,
25949         and not per-instance.  
25950
25951         * class.cs: Make static FindMembers (the one that takes a Type
25952         argument). 
25953
25954         * codegen.cs: Add EmitForeach here.
25955
25956         * cs-parser.jay: Make foreach a toplevel object instead of the
25957         inline expansion, as we need to perform semantic analysis on it. 
25958
25959 2001-10-05  Ravi Pratap  <ravi@ximian.com>
25960
25961         * expression.cs (Expression::ImplicitUserConversion): Rename to
25962         UserDefinedConversion.
25963
25964         (Expression::UserDefinedConversion): Take an extra argument specifying 
25965         whether we look for explicit user conversions too.
25966
25967         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
25968
25969         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
25970
25971         (ExplicitUserConversion): Make it a call to UserDefinedConversion
25972         with the appropriate arguments.
25973
25974         * cs-parser.jay (cast_expression): Record location too.
25975
25976         * expression.cs (Cast): Record location info.
25977
25978         (Expression::ConvertExplicit): Take location argument.
25979
25980         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
25981         to determine if we are doing explicit conversions.
25982
25983         (UserCast::Emit): Update accordingly.
25984
25985         (Expression::ConvertExplicit): Report an error if everything fails.
25986
25987         * ../errors/cs0030.cs : Add.
25988
25989 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
25990
25991         * modifiers.cs: If the ABSTRACT keyword is present, also set the
25992         virtual and newslot bits. 
25993
25994         * class.cs (TypeContainer::RegisterRequiredImplementations):
25995         Record methods we need.
25996
25997         (TypeContainer::MakeKey): Helper function to make keys for
25998         MethodBases, since the Methodbase key is useless.
25999
26000         (TypeContainer::Populate): Call RegisterRequiredImplementations
26001         before defining the methods.   
26002
26003         Create a mapping for method_builders_to_methods ahead of time
26004         instead of inside a tight loop.
26005
26006         (::RequireMethods):  Accept an object as the data to set into the
26007         hashtable so we can report interface vs abstract method mismatch.
26008
26009 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
26010
26011         * report.cs: Make all of it static.
26012
26013         * rootcontext.cs: Drop object_type and value_type computations, as
26014         we have those in the TypeManager anyways.
26015
26016         Drop report instance variable too, now it is a global.
26017
26018         * driver.cs: Use try/catch on command line handling.
26019
26020         Add --probe option to debug the error reporting system with a test
26021         suite. 
26022
26023         * report.cs: Add support for exiting program when a probe
26024         condition is reached.
26025
26026 2001-10-03  Ravi Pratap  <ravi@ximian.com>
26027
26028         * expression.cs (Binary::DoNumericPromotions): Fix the case when
26029         we do a forcible conversion regardless of type, to check if 
26030         ForceConversion returns a null.
26031
26032         (Binary::error19): Use location to report error.
26033
26034         (Unary::error23): Use location here too.
26035
26036         * ../errors/cs0019.cs : Check in.
26037
26038         * ../errors/cs0023.cs : Check in.
26039
26040         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
26041         case of a non-null MethodInfo object with a length of 0 !
26042
26043         (Binary::ResolveOperator): Flag error if overload resolution fails to find
26044         an applicable member - according to the spec :-)
26045         Also fix logic to find members in base types.
26046
26047         (Unary::ResolveOperator): Same here.
26048
26049         (Unary::report23): Change name to error23 and make first argument a TypeContainer
26050         as I was getting thoroughly confused between this and error19 :-)
26051
26052         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
26053         (::FindMostEncompassedType): Implement.
26054         (::FindMostEncompassingType): Implement.
26055         (::StandardConversionExists): Implement.
26056
26057         (UserImplicitCast): Re-vamp. We now need info about most specific
26058         source and target types so that we can do the necessary conversions.
26059
26060         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
26061         mathematical union with no duplicates.
26062
26063 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
26064
26065         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
26066         in order from base classes to child classes, so that we can in
26067         child classes look up in our parent for method names and
26068         attributes (required for handling abstract, virtual, new, override
26069         constructs: we need to instrospect our base class, and if we dont
26070         populate the classes in order, the introspection might be
26071         incorrect.  For example, a method could query its parent before
26072         the parent has any methods and would determine that the parent has
26073         no abstract methods (while it could have had them)).
26074
26075         (RootContext::CreateType): Record the order in which we define the
26076         classes.
26077
26078 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
26079
26080         * class.cs (TypeContainer::Populate): Also method definitions can
26081         fail now, keep track of this.
26082
26083         (TypeContainer::FindMembers): Implement support for
26084         DeclaredOnly/noDeclaredOnly flag.
26085
26086         (Constructor::Emit) Return the ConstructorBuilder.
26087
26088         (Method::Emit) Return the MethodBuilder. 
26089         Check for abstract or virtual methods to be public.
26090
26091         * rootcontext.cs (RootContext::CreateType): Register all the
26092         abstract methods required for the class to be complete and the
26093         interface methods that must be implemented. 
26094
26095         * cs-parser.jay: Report error 501 (method requires body if it is
26096         not marked abstract or extern).
26097
26098         * expression.cs (TypeOf::Emit): Implement.
26099
26100         * typemanager.cs: runtime_handle_type, new global type.
26101
26102         * class.cs (Property::Emit): Generate code for properties.
26103
26104 2001-10-02  Ravi Pratap  <ravi@ximian.com>
26105
26106         * expression.cs (Unary::ResolveOperator): Find operators on base type
26107         too - we now conform exactly to the spec.
26108
26109         (Binary::ResolveOperator): Same here.
26110
26111         * class.cs (Operator::Define): Fix minor quirk in the tests.
26112
26113         * ../errors/cs0215.cs : Added.
26114
26115         * ../errors/cs0556.cs : Added.
26116
26117         * ../errors/cs0555.cs : Added.
26118
26119 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
26120
26121         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
26122         single integer which is really efficient
26123
26124 2001-10-01  Ravi Pratap  <ravi@ximian.com>
26125
26126         *  expression.cs (Expression::ImplicitUserConversion): Use location
26127         even in the case when we are examining True operators.
26128  
26129         * class.cs (Operator::Define): Perform extensive checks to conform
26130         with the rules for operator overloading in the spec.
26131
26132         * expression.cs (Expression::ImplicitReferenceConversion): Implement
26133         some of the other conversions mentioned in the spec.
26134
26135         * typemanager.cs (array_type): New static member for the System.Array built-in
26136         type.
26137
26138         (cloneable_interface): For System.ICloneable interface.
26139
26140         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
26141         we start resolving the tree and populating types.
26142
26143         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
26144  
26145 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
26146
26147         * expression.cs (Expression::ExprClassFromMemberInfo,
26148         Expression::Literalize): Create literal expressions from
26149         FieldInfos which are literals.
26150
26151         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
26152         type casts, because they were wrong.  The test suite in tests
26153         caught these ones.
26154
26155         (ImplicitNumericConversion): ushort to ulong requires a widening
26156         cast. 
26157
26158         Int32 constant to long requires widening cast as well.
26159
26160         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
26161         for integers because the type on the stack is not i4.
26162
26163 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
26164
26165         * expression.cs (report118): require location argument. 
26166
26167         * parameter.cs: Do not dereference potential null value.
26168
26169         * class.cs: Catch methods that lack the `new' keyword when
26170         overriding a name.  Report warnings when `new' is used without
26171         anything being there to override.
26172
26173         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
26174
26175         * class.cs: Only add constructor to hashtable if it is non-null
26176         (as now constructors can fail on define).
26177
26178         (TypeManager, Class, Struct): Take location arguments.
26179
26180         Catch field instance initialization in structs as errors.
26181
26182         accepting_filter: a new filter for FindMembers that is static so
26183         that we dont create an instance per invocation.
26184
26185         (Constructor::Define): Catch errors where a struct constructor is
26186         parameterless 
26187
26188         * cs-parser.jay: Pass location information for various new
26189         constructs. 
26190
26191         * delegate.cs (Delegate): take a location argument.
26192
26193         * driver.cs: Do not call EmitCode if there were problesm in the
26194         Definition of the types, as many Builders wont be there. 
26195
26196         * decl.cs (Decl::Decl): Require a location argument.
26197
26198         * cs-tokenizer.cs: Handle properly hex constants that can not fit
26199         into integers, and find the most appropiate integer for it.
26200
26201         * literal.cs: Implement ULongLiteral.
26202
26203         * rootcontext.cs: Provide better information about the location of
26204         failure when CreateType fails.
26205
26206 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
26207
26208         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
26209         as well.
26210
26211         * expression.cs (Binary::CheckShiftArguments): Add missing type
26212         computation.
26213         (Binary::ResolveOperator): Add type to the logical and and logical
26214         or, Bitwise And/Or and Exclusive Or code paths, it was missing
26215         before.
26216
26217         (Binary::DoNumericPromotions): In the case where either argument
26218         is ulong (and most signed types combined with ulong cause an
26219         error) perform implicit integer constant conversions as well.
26220
26221 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
26222
26223         * expression.cs (UserImplicitCast): Method should always be
26224         non-null. 
26225         (Invocation::BetterConversion): Simplified test for IntLiteral.
26226
26227         (Expression::ImplicitNumericConversion): Split this routine out.
26228         Put the code that performs implicit constant integer conversions
26229         here. 
26230
26231         (Expression::Resolve): Become a wrapper around DoResolve so we can
26232         check eclass and type being set after resolve.
26233
26234         (Invocation::Badness): Remove this dead function
26235
26236         (Binary::ResolveOperator): Do not compute the expensive argumnets
26237         unless we have a union for it.
26238
26239         (Probe::Emit): Is needs to do an isinst and then
26240         compare against null.
26241
26242         (::CanConvert): Added Location argument.  If the Location argument
26243         is null (Location.Null), then we do not report errors.  This is
26244         used by the `probe' mechanism of the Explicit conversion.  We do
26245         not want to generate an error for something that the user
26246         explicitly requested to be casted.  But the pipeline for an
26247         explicit cast first tests for potential implicit casts.
26248
26249         So for now, if the Location is null, it means `Probe only' to
26250         avoid adding another argument.   Might have to revise this
26251         strategy later.
26252
26253         (ClassCast): New class used to type cast objects into arbitrary
26254         classes (used in Explicit Reference Conversions).
26255
26256         Implement `as' as well.
26257
26258         Reverted all the patches from Ravi below: they were broken:
26259
26260                 * The use of `level' as a mechanism to stop recursive
26261                   invocations is wrong.  That was there just to catch the
26262                   bug with a strack trace but not as a way of addressing
26263                   the problem.
26264
26265                   To fix the problem we have to *understand* what is going
26266                   on and the interactions and come up with a plan, not
26267                   just get things going.
26268
26269                 * The use of the type conversion cache that I proposed
26270                   last night had an open topic: How does this work across
26271                   protection domains.  A user defined conversion might not
26272                   be public in the location where we are applying the
26273                   conversion, a different conversion might be selected
26274                   (ie, private A->B (better) but public B->A (worse),
26275                   inside A, A->B applies, but outside it, B->A will
26276                   apply).
26277
26278                 * On top of that (ie, even if the above is solved),
26279                   conversions in a cache need to be abstract.  Ie, `To
26280                   convert from an Int to a Short use an OpcodeCast', not
26281                   `To convert from an Int to a Short use the OpcodeCast on
26282                   the variable 5' (which is what this patch was doing).
26283
26284 2001-09-28  Ravi Pratap  <ravi@ximian.com>
26285
26286         * expression.cs (Invocation::ConversionExists): Re-write to use
26287         the conversion cache
26288
26289         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
26290         cache all conversions done, not just user-defined ones.
26291
26292         (Invocation::BetterConversion): The real culprit. Use ConversionExists
26293         to determine if a conversion exists instead of acutually trying to 
26294         perform the conversion. It's faster too.
26295
26296         (Expression::ConvertExplicit): Modify to use ConversionExists to check
26297         and only then attempt the implicit conversion.
26298
26299 2001-09-28  Ravi Pratap  <ravi@ximian.com>
26300
26301         * expression.cs (ConvertImplicit): Use a cache for conversions
26302         already found. Check level of recursion and bail out if necessary.
26303
26304 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
26305
26306         * typemanager.cs (string_concat_string_string, string_concat_object_object):
26307         Export standard methods that we expect for string operations.
26308
26309         * statement.cs (Block::UsageWarning): Track usage of variables and
26310         report the errors for not used variables.
26311
26312         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
26313         operator. 
26314
26315 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
26316
26317         * codegen.cs: remove unnneded code 
26318
26319         * expression.cs: Removed BuiltinTypeAccess class
26320
26321         Fix the order in which implicit conversions are
26322         done.  
26323
26324         The previous fixed dropped support for boxed conversions (adding a
26325         test to the test suite now)
26326
26327         (UserImplicitCast::CanConvert): Remove test for source being null,
26328         that code is broken.  We should not feed a null to begin with, if
26329         we do, then we should track the bug where the problem originates
26330         and not try to cover it up here.
26331
26332         Return a resolved expression of type UserImplicitCast on success
26333         rather than true/false.  Ravi: this is what I was talking about,
26334         the pattern is to use a static method as a "constructor" for
26335         objects. 
26336
26337         Also, do not create arguments until the very last minute,
26338         otherwise we always create the arguments even for lookups that
26339         will never be performed. 
26340
26341         (UserImplicitCast::Resolve): Eliminate, objects of type
26342         UserImplicitCast are born in a fully resolved state. 
26343
26344         * typemanager.cs (InitCoreTypes): Init also value_type
26345         (System.ValueType). 
26346
26347         * expression.cs (Cast::Resolve): First resolve the child expression.
26348
26349         (LValue): Add new method AddressOf to be used by
26350         the `&' operator.  
26351
26352         Change the argument of Store to take an EmitContext instead of an
26353         ILGenerator, because things like FieldExpr need to be able to call
26354         their children expression to generate the instance code. 
26355
26356         (Expression::Error, Expression::Warning): Sugar functions for
26357         reporting errors.
26358
26359         (Expression::MemberLookup): Accept a TypeContainer instead of a
26360         Report as the first argument.
26361
26362         (Expression::ResolvePrimary): Killed.  I still want to improve
26363         this as currently the code is just not right.
26364
26365         (Expression::ResolveMemberAccess): Simplify, but it is still
26366         wrong. 
26367
26368         (Unary::Resolve): Catch errors in AddressOf operators.
26369
26370         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
26371         index to a byte for the short-version, or the compiler will choose
26372         the wrong Emit call, which generates the wrong data.
26373
26374         (ParameterReference::Emit, ::Store): same.
26375
26376         (FieldExpr::AddressOf): Implement.
26377
26378         * typemanager.cs: TypeManager: made public variable instead of
26379         property.
26380
26381         * driver.cs: document --fatal.
26382
26383         * report.cs (ErrorMessage, WarningMessage): new names for the old
26384         Error and Warning classes.
26385
26386         * cs-parser.jay (member_access): Turn built-in access to types
26387         into a normal simplename
26388
26389 2001-09-27  Ravi Pratap  <ravi@ximian.com>
26390
26391         * expression.cs (Invocation::BetterConversion): Fix to cope
26392         with q being null, since this was introducing a bug.
26393
26394         * expression.cs (ConvertImplicit): Do built-in conversions first.
26395
26396 2001-09-27  Ravi Pratap  <ravi@ximian.com>
26397
26398         * expression.cs (UserImplicitCast::Resolve): Fix bug.
26399
26400 2001-09-27  Ravi Pratap  <ravi@ximian.com>
26401
26402         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
26403         I had introduced long ago (what's new ?).
26404
26405         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
26406         the work of all the checking. 
26407         (ConvertImplicit): Call CanConvert and only then create object if necessary.
26408         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
26409
26410         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
26411         that is the right way. 
26412
26413         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
26414         overloading resolution. Use everywhere instead of cutting and pasting code.
26415
26416         (Binary::ResolveOperator): Use MakeUnionSet.
26417
26418         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
26419         we have to convert to bool types. Not complete yet.
26420
26421 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
26422
26423         * typemanager.cs (TypeManager::CSharpName): support ushort.
26424
26425         * expression.cs (Expression::TryImplicitIntConversion): Attempts
26426         to provide an expression that performsn an implicit constant int
26427         conversion (section 6.1.6).
26428         (Expression::ConvertImplicitRequired): Reworked to include
26429         implicit constant expression conversions.
26430
26431         (Expression::ConvertNumericExplicit): Finished.
26432
26433         (Invocation::Emit): If InstanceExpression is null, then it means
26434         that we perform a call on this.
26435
26436 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
26437
26438         * expression.cs (Unary::Emit): Remove some dead code.
26439         (Probe): Implement Resolve and Emit for `is'.
26440         (Expression::ConvertImplicitRequired): Attempt to do constant
26441         expression conversions here.  Maybe should be moved to
26442         ConvertImplicit, but I am not sure.
26443         (Expression::ImplicitLongConstantConversionPossible,
26444         Expression::ImplicitIntConstantConversionPossible): New functions
26445         that tell whether is it possible to apply an implicit constant
26446         expression conversion.
26447
26448         (ConvertNumericExplicit): Started work on explicit numeric
26449         conversions.
26450
26451         * cs-parser.jay: Update operator constants.
26452
26453         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
26454         (Parameters::GetSignature): Hook up VerifyArgs here.
26455         (Parameters::VerifyArgs): Verifies that no two arguments have the
26456         same name. 
26457
26458         * class.cs (Operator): Update the operator names to reflect the
26459         ones that the spec expects (as we are just stringizing the
26460         operator names).
26461
26462         * expression.cs (Unary::ResolveOperator): Fix bug: Use
26463         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
26464         previous usage did only work for our methods.
26465         (Expression::ConvertImplicit): Handle decimal implicit numeric
26466         conversions as well.
26467         (Expression::InternalTypeConstructor): Used to invoke constructors
26468         on internal types for default promotions.
26469
26470         (Unary::Emit): Implement special handling for the pre/post
26471         increment/decrement for overloaded operators, as they need to have
26472         the same semantics as the other operators.
26473
26474         (Binary::ResolveOperator): ditto.
26475         (Invocation::ConversionExists): ditto.
26476         (UserImplicitCast::Resolve): ditto.
26477
26478 2001-09-26  Ravi Pratap  <ravi@ximian.com>
26479
26480         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
26481         operator, return after emitting body. Regression tests pass again !
26482
26483         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
26484         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
26485         (Invocation::OverloadResolve): Ditto.
26486         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
26487
26488         * everywhere : update calls to the above methods accordingly.
26489
26490 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
26491
26492         * assign.cs (Assign): Make it inherit from ExpressionStatement.
26493
26494         * expression.cs (ExpressionStatement): New base class used for
26495         expressions that can appear in statements, so that we can provide
26496         an alternate path to generate expression that do not leave a value
26497         on the stack.
26498
26499         (Expression::Emit, and all the derivatives): We no longer return
26500         whether a value is left on the stack or not.  Every expression
26501         after being emitted leaves a single value on the stack.
26502
26503         * codegen.cs (EmitContext::EmitStatementExpression): Use the
26504         facilties of ExpressionStatement if possible.
26505
26506         * cs-parser.jay: Update statement_expression.
26507
26508 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
26509
26510         * driver.cs: Change the wording of message
26511
26512 2001-09-25  Ravi Pratap  <ravi@ximian.com>
26513
26514         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
26515         the type of the expression to the return type of the method if
26516         we have an overloaded operator match ! The regression tests pass again !
26517         (Unary::ResolveOperator): Ditto.
26518
26519         * expression.cs (Invocation::ConversionExists): Correct the member lookup
26520         to find "op_Implicit", not "implicit" ;-)
26521         (UserImplicitCast): New class to take care of user-defined implicit conversions.
26522         (ConvertImplicit, ForceConversion): Take TypeContainer argument
26523
26524         * everywhere : Correct calls to the above accordingly.
26525
26526         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
26527         (ConvertImplicit): Do user-defined conversion if it exists.
26528
26529 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
26530
26531         * assign.cs: track location.
26532         (Resolve): Use implicit conversions on assignment.
26533
26534         * literal.cs: Oops.  Not good, Emit of short access values should
26535         pass (Bytes) or the wrong argument will be selected.
26536
26537         * expression.cs (Unary::Emit): Emit code for -expr.
26538
26539         (Unary::ResolveOperator): Handle `Substract' for non-constants
26540         (substract from zero from the non-constants).
26541         Deal with Doubles as well. 
26542
26543         (Expression::ConvertImplicitRequired): New routine that reports an
26544         error if no implicit conversion exists. 
26545
26546         (Invocation::OverloadResolve): Store the converted implicit
26547         expressions if we make them
26548
26549 2001-09-24  Ravi Pratap  <ravi@ximian.com>
26550
26551         * class.cs (ConstructorInitializer): Take a Location argument.
26552         (ConstructorBaseInitializer): Same here.
26553         (ConstructorThisInitializer): Same here.
26554
26555         * cs-parser.jay : Update all calls accordingly.
26556
26557         * expression.cs (Unary, Binary, New): Take location argument.
26558         Update accordingly everywhere.
26559
26560         * cs-parser.jay : Update all calls to the above to take a location
26561         argument.
26562
26563         * class.cs : Ditto.
26564
26565 2001-09-24  Ravi Pratap  <ravi@ximian.com>
26566
26567         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
26568         (Invocation::BetterConversion): Same here
26569         (Invocation::ConversionExists): Ditto.
26570
26571         (Invocation::ConversionExists): Implement.
26572
26573 2001-09-22  Ravi Pratap  <ravi@ximian.com>
26574
26575         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
26576         Also take an additional TypeContainer argument.
26577
26578         * All over : Pass in TypeContainer as argument to OverloadResolve.
26579
26580         * typemanager.cs (CSharpName): Update to check for the string type and return
26581         that too.
26582
26583         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
26584         a given method.
26585
26586 2001-09-21  Ravi Pratap  <ravi@ximian.com>
26587
26588         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
26589         (Invocation::BetterFunction): Implement.
26590         (Invocation::BetterConversion): Implement.
26591         (Invocation::ConversionExists): Skeleton, no implementation yet.
26592
26593         Okay, things work fine !
26594
26595 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
26596
26597         * typemanager.cs: declare and load enum_type, delegate_type and
26598         void_type. 
26599
26600         * expression.cs (Expression::Emit): Now emit returns a value that
26601         tells whether a value is left on the stack or not.  This strategy
26602         might be reveted tomorrow with a mechanism that would address
26603         multiple assignments.
26604         (Expression::report118): Utility routine to report mismatches on
26605         the ExprClass.
26606
26607         (Unary::Report23): Report impossible type/operator combination
26608         utility function.
26609
26610         (Unary::IsIncrementableNumber): Whether the type can be
26611         incremented or decremented with add.
26612         (Unary::ResolveOperator): Also allow enumerations to be bitwise
26613         complemented. 
26614         (Unary::ResolveOperator): Implement ++, !, ~,
26615
26616         (Invocation::Emit): Deal with new Emit convetion.
26617
26618         * All Expression derivatives: Updated their Emit method to return
26619         whether they leave values on the stack or not.
26620
26621         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
26622         stack for expressions that are statements. 
26623
26624 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
26625
26626         * expression.cs (LValue): New interface.  Must be implemented by
26627         LValue objects.
26628         (LocalVariableReference, ParameterReference, FieldExpr): Implement
26629         LValue interface.
26630
26631         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
26632         interface for generating code, simplifies the code.
26633
26634 2001-09-20  Ravi Pratap  <ravi@ximian.com>
26635
26636         * expression.cs (everywhere): Comment out return statements in ::Resolve
26637         methods to avoid the warnings.
26638
26639 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
26640
26641         * driver.cs (parse): Report error 2001 if we can not open the
26642         source file.
26643
26644         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
26645         not resolve it.
26646
26647         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
26648         object. 
26649
26650         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
26651         otherwise nested blocks end up with the same index.
26652
26653         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
26654
26655         * expression.cs:  Instead of having FIXMEs in the Resolve
26656         functions, throw exceptions so it is obvious that we are facing a
26657         bug. 
26658
26659         * cs-parser.jay (invocation_expression): Pass Location information.
26660
26661         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
26662         Use a basename for those routines because .NET does not like paths
26663         on them. 
26664
26665         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
26666         already defined.
26667
26668 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
26669
26670         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
26671         are loading the correct data types (throws an exception if not).
26672         (TypeManager::InitCoreTypes): Use CoreLookupType
26673
26674         * expression.cs (Unary::ResolveOperator): return the child
26675         expression for expressions which are just +expr.
26676         (Unary::ResolveOperator): Return negative literals for -LITERAL
26677         expressions (otherwise they are Unary {Literal}).
26678         (Invocation::Badness): Take into account `Implicit constant
26679         expression conversions'.
26680
26681         * literal.cs (LongLiteral): Implement long literal class.
26682         (IntLiteral): export the `Value' of the intliteral. 
26683
26684 2001-09-19  Ravi Pratap  <ravi@ximian.com>
26685
26686         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
26687
26688         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
26689         instead of 'Operator'
26690
26691         * expression.cs (Binary::ResolveOperator): Update accordingly.
26692         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
26693         and 'Minus'
26694
26695         * cs-parser.jay (unary_expression): Update to use the new names.
26696
26697         * gen-treedump.cs (GetUnary): Same here.
26698
26699         * expression.cs (Unary::Resolve): Implement.
26700         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
26701         operators are found instead of making noise ;-)
26702         (Unary::ResolveOperator): New method to do precisely the same thing which
26703         Binary::ResolveOperator does for Binary expressions.
26704         (Unary.method, .Arguments): Add.
26705         (Unary::OperName): Implement.   
26706         (Unary::ForceConversion): Copy and Paste !
26707
26708         * class.cs (Operator::Define): Fix a small bug for the case when we have 
26709         a unary operator.
26710
26711         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
26712         for the inbuilt operators. Only overloading works for now ;-)
26713
26714 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
26715
26716         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
26717         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
26718
26719         * expression.cs (This::Emit): Implement. 
26720         (This::Resolve): Implement.
26721         (TypeOf:Resolve): Implement.
26722         (Expression::ResolveSimpleName): Add an implicit this to instance
26723         field references. 
26724         (MemberAccess::Resolve): Deal with Parameters and Fields. 
26725         Bind instance variable to Field expressions.
26726         (FieldExpr::Instance): New field used to track the expression that
26727         represents the object instance.
26728         (FieldExpr::Resolve): Track potential errors from MemberLookup not
26729         binding 
26730         (FieldExpr::Emit): Implement.
26731
26732         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
26733         the last instruction contains a return opcode to avoid generating
26734         the last `ret' instruction (this generates correct code, and it is
26735         nice to pass the peverify output).
26736
26737         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
26738         initializer for static and instance variables.
26739         (Constructor::Emit): Allow initializer to be null in the case of
26740         static constructors.  Only emit initializer for instance
26741         constructors. 
26742
26743         (TypeContainer::FindMembers): Return a null array if there are no
26744         matches.
26745
26746         Also fix the code for the MemberTypes.Method branch, as it was not
26747         scanning that for operators (or tried to access null variables before).
26748
26749         * assign.cs (Assign::Emit): Handle instance and static fields. 
26750
26751         * TODO: Updated.
26752
26753         * driver.cs: Stop compilation if there are parse errors.
26754
26755         * cs-parser.jay (constructor_declaration): Provide default base
26756         initializer for non-static constructors.
26757         (constructor_declarator): Do not provide a default base
26758         initializers if none was specified.
26759         Catch the fact that constructors should not have parameters.
26760
26761         * class.cs: Do not emit parent class initializers for static
26762         constructors, that should be flagged as an error.
26763
26764 2001-09-18  Ravi Pratap  <ravi@ximian.com>
26765
26766         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
26767         Move back code into TypeContainer::Populate.
26768
26769 2001-09-18  Ravi Pratap  <ravi@ximian.com>
26770
26771         * class.cs (TypeContainer::AddConstructor): Fix the check to
26772         compare against Name, not Basename. 
26773         (Operator::OpType): Change Plus and Minus to Add and Subtract.
26774
26775         * cs-parser.jay : Update accordingly.
26776
26777         * class.cs (TypeContainer::FindMembers): For the case where we are searching
26778         for methods, don't forget to look into the operators too.
26779         (RegisterMethodBuilder): Helper method to take care of this for
26780         methods, constructors and operators.
26781         (Operator::Define): Completely revamp.
26782         (Operator.OperatorMethod, MethodName): New fields.
26783         (TypeContainer::Populate): Move the registering of builders into
26784         RegisterMethodBuilder.
26785         (Operator::Emit): Re-write.
26786
26787         * expression.cs (Binary::Emit): Comment out code path to emit method
26788         invocation stuff for the case when we have a user defined operator. I am
26789         just not able to get it right !
26790
26791 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
26792
26793         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
26794         argument. 
26795
26796         (Expression::MemberLookup): Provide a version that allows to
26797         specify the MemberTypes and BindingFlags. 
26798
26799         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
26800         so it was not fetching variable information from outer blocks.
26801
26802         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
26803         Beforefieldinit as it was buggy.
26804
26805         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
26806         that Ravi put here.  
26807
26808         * class.cs (Constructor::Emit): Only emit if block is not null.
26809         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
26810         deal with this by semantically definining it as if the user had
26811         done it.
26812
26813         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
26814         constructors as we now "emit" them at a higher level.
26815
26816         (TypeContainer::DefineDefaultConstructor): Used to define the
26817         default constructors if none was provided.
26818
26819         (ConstructorInitializer): Add methods Resolve and Emit. 
26820
26821         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
26822
26823 2001-09-17  Ravi Pratap  <ravi@ximian.com>
26824
26825         * class.cs (TypeContainer::EmitDefaultConstructor): Register
26826         the default constructor builder with our hashtable for methodbuilders
26827         to methodcores.
26828
26829         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
26830         and argument_count is 0 in which case we have a match.
26831         (Binary::ResolveOperator): More null checking and miscellaneous coding
26832         style cleanup.
26833
26834 2001-09-17  Ravi Pratap  <ravi@ximian.com>
26835
26836         * rootcontext.cs (IsNameSpace): Compare against null.
26837
26838         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
26839
26840         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
26841         and Unary::Operator.
26842
26843         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
26844         accordingly.
26845
26846         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
26847         we have overloaded operators.
26848         (Binary::ResolveOperator): Implement the part which does the operator overload
26849         resolution.
26850
26851         * class.cs (Operator::Emit): Implement.
26852         (TypeContainer::Emit): Emit the operators we have too.
26853
26854         * expression.cs (Binary::Emit): Update to emit the appropriate code for
26855         the case when we have a user-defined operator.
26856
26857 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
26858
26859         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
26860
26861 2001-09-16  Ravi Pratap  <ravi@ximian.com>
26862
26863         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
26864         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
26865         (Constructor::Emit): Implement.
26866         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
26867         if we have no work to do. 
26868         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
26869         Emit method.
26870
26871         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
26872         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
26873
26874         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
26875         of parent.parent.
26876
26877 2001-09-15  Ravi Pratap  <ravi@ximian.com>
26878
26879         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
26880         in the source.
26881         (Tree::RecordNamespace): Method to do what the name says ;-)
26882         (Tree::Namespaces): Property to get at the namespaces hashtable.
26883
26884         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
26885         keep track.
26886
26887         * rootcontext.cs (IsNamespace): Fixed it :-)
26888
26889 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
26890
26891         * class.cs (TypeContainer::FindMembers): Add support for
26892         constructors. 
26893         (MethodCore): New class that encapsulates both the shared aspects
26894         of a Constructor and a Method.  
26895         (Method, Constructor): Factored pieces into MethodCore.
26896
26897         * driver.cs: Added --fatal which makes errors throw exceptions.
26898         Load System assembly as well as part of the standard library.
26899
26900         * report.cs: Allow throwing exceptions on errors for debugging.
26901
26902         * modifiers.cs: Do not use `parent', instead use the real type
26903         container to evaluate permission settings.
26904
26905         * class.cs: Put Ravi's patch back in.  He is right, and we will
26906         have to cope with the
26907
26908 2001-09-14  Ravi Pratap  <ravi@ximian.com>
26909
26910         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
26911         FamORAssem, not FamANDAssem.
26912
26913 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
26914
26915         * driver.cs: Added --parse option that only parses its input files
26916         and terminates.
26917
26918         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
26919         incorrect.  IsTopLevel is not used to tell whether an object is
26920         root_types or not (that can be achieved by testing this ==
26921         root_types).  But to see if this is a top-level *class* (not
26922         necessarly our "toplevel" container). 
26923
26924 2001-09-14  Ravi Pratap  <ravi@ximian.com>
26925
26926         * enum.cs (Enum::Define): Modify to call the Lookup method on the
26927         parent instead of a direct call to GetType.
26928
26929 2001-09-14  Ravi Pratap  <ravi@ximian.com>
26930
26931         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
26932         Modifiers.TypeAttr. This should just be a call to that method.
26933
26934         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
26935         object so that we can determine if we are top-level or not.
26936
26937         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
26938         TypeContainer too.
26939
26940         * enum.cs (Enum::Define): Ditto.
26941
26942         * modifiers.cs (FieldAttr): Re-write.
26943
26944         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
26945         (TypeContainer::HaveStaticConstructor): New property to provide access
26946         to precisely that info.
26947
26948         * modifiers.cs (MethodAttr): Re-write.
26949         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
26950
26951         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
26952         of top-level types as claimed.
26953
26954 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
26955
26956         * expression.cs (MemberLookup): Fruitless attempt to lookup
26957         constructors.  Maybe I need to emit default constructors?  That
26958         might be it (currently .NET emits this for me automatically).
26959         (Invocation::OverloadResolve): Cope with Arguments == null.
26960         (Invocation::EmitArguments): new function, shared by the new
26961         constructor and us.
26962         (Invocation::Emit): Handle static and instance methods.  Emit
26963         proper call instruction for virtual or non-virtual invocations.
26964         (New::Emit): Implement.
26965         (New::Resolve): Implement.
26966         (MemberAccess:Resolve): Implement.
26967         (MethodGroupExpr::InstanceExpression): used conforming to the spec
26968         to track instances.
26969         (FieldExpr::Resolve): Set type.
26970
26971         * support.cs: Handle empty arguments.
26972                 
26973         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
26974         SimpleLookup): Auxiliary routines to help parse a qualifier
26975         identifier.  
26976
26977         Update qualifier_identifier rule.
26978
26979         * codegen.cs: Removed debugging messages.
26980
26981         * class.cs: Make this a global thing, this acts just as a "key" to
26982         objects that we might have around.
26983
26984         (Populate): Only initialize method_builders_to_methods once.
26985
26986         * expression.cs (PropertyExpr): Initialize type from the
26987         PropertyType. 
26988
26989         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
26990         Resolve pattern.  Attempt to implicitly convert value to boolean.
26991         Emit code.
26992
26993         * expression.cs: Set the type for the int32/int32 argument case.
26994         (Binary::ResolveOperator): Set the return type to boolean for
26995         comparission operators
26996
26997         * typemanager.cs: Remove debugging print code.
26998
26999         (Invocation::Resolve): resolve type.
27000
27001         * class.cs: Allocate a MemberInfo of the correct size, as the code
27002         elsewhere depends on the test to reflect the correct contents.
27003
27004         (Method::) Keep track of parameters, due to System.Reflection holes
27005
27006         (TypeContainer::Populate): Keep track of MethodBuilders to Method
27007         mapping here.
27008
27009         (TypeContainer::FindMembers): Use ArrayList and then copy an array
27010         of the exact size and return that.
27011
27012         (Class::LookupMethodByBuilder): New function that maps
27013         MethodBuilders to its methods.  Required to locate the information
27014         on methods because System.Reflection bit us again.
27015
27016         * support.cs: New file, contains an interface ParameterData and
27017         two implementations: ReflectionParameters and InternalParameters
27018         used to access Parameter information.  We will need to grow this
27019         as required.
27020
27021         * expression.cs (Invocation::GetParameterData): implement a cache
27022         and a wrapper around the ParameterData creation for methods. 
27023         (Invocation::OverloadResolve): Use new code.
27024
27025 2001-09-13  Ravi Pratap  <ravi@ximian.com>
27026
27027         * class.cs (TypeContainer::EmitField): Remove and move into 
27028         (Field::Define): here and modify accordingly.
27029         (Field.FieldBuilder): New member.
27030         (TypeContainer::Populate): Update accordingly.
27031         (TypeContainer::FindMembers): Implement.
27032
27033 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
27034
27035         * statement.cs: (VariableInfo::VariableType): New field to be
27036         initialized with the full type once it is resolved. 
27037
27038 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
27039
27040         * parameter.cs (GetParameterInfo): Use a type cache to compute
27041         things only once, and to reuse this information
27042
27043         * expression.cs (LocalVariableReference::Emit): Implement.
27044         (OpcodeCast::Emit): fix.
27045
27046         (ParameterReference::Resolve): Implement.
27047         (ParameterReference::Emit): Implement.
27048
27049         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
27050         that are expressions need to stay as Expressions.
27051
27052         * typemanager.cs (CSharpName): Returns the C# name of a type if
27053         possible. 
27054
27055         * expression.cs (Expression::ConvertImplicit): New function that
27056         implements implicit type conversions.
27057
27058         (Expression::ImplicitReferenceConversion): Implements implicit
27059         reference conversions.
27060
27061         (EmptyCast): New type for transparent casts.
27062
27063         (OpcodeCast): New type for casts of types that are performed with
27064         a sequence of bytecodes.
27065
27066         (BoxedCast): New type used for casting value types into reference
27067         types.  Emits a box opcode.
27068
27069         (Binary::DoNumericPromotions): Implements numeric promotions of
27070         and computation of the Binary::Type.
27071
27072         (Binary::EmitBranchable): Optimization.
27073
27074         (Binary::Emit): Implement code emission for expressions.
27075
27076         * typemanager.cs (TypeManager): Added two new core types: sbyte
27077         and byte.
27078
27079 2001-09-12  Ravi Pratap  <ravi@ximian.com>
27080
27081         * class.cs (TypeContainer::FindMembers): Method which does exactly
27082         what Type.FindMembers does, only we don't have to use reflection. No
27083         implementation yet.
27084
27085         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
27086         typecontainer objects as we need to get at them.
27087         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
27088
27089         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
27090         typecontainer object.
27091
27092         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
27093         of just a Report object.
27094
27095 2001-09-11  Ravi Pratap  <ravi@ximian.com>
27096
27097         * class.cs (Event::Define): Go back to using the prefixes "add_" and
27098         "remove_"
27099         (TypeContainer::Populate): Now define the delegates of the type too.
27100         (TypeContainer.Delegates): Property to access the list of delegates defined
27101         in the type.
27102
27103         * delegates.cs (Delegate::Define): Implement partially.
27104
27105         * modifiers.cs (TypeAttr): Handle more flags.
27106
27107 2001-09-11  Ravi Pratap  <ravi@ximian.com>
27108
27109         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
27110         and not <=
27111         (Operator::Define): Re-write logic to get types by using the LookupType method
27112         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
27113         (Indexer::Define): Ditto.
27114         (Event::Define): Ditto.
27115         (Property::Define): Ditto.
27116
27117 2001-09-10  Ravi Pratap  <ravi@ximian.com>
27118
27119         * class.cs (TypeContainer::Populate): Now define operators too. 
27120         (TypeContainer.Operators): New property to access the list of operators
27121         in a type.
27122         (Operator.OperatorMethodBuilder): New member to hold the method builder
27123         for the operator we are defining.
27124         (Operator::Define): Implement.
27125
27126 2001-09-10  Ravi Pratap  <ravi@ximian.com>
27127
27128         * class.cs (Event::Define): Make the prefixes of the accessor methods
27129         addOn_ and removeOn_ 
27130
27131         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
27132         of the location being passed in too. Ideally, this should go later since all
27133         error reporting should be done through the Report object.
27134
27135         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
27136         (Populate): Iterate thru the indexers we have and define them too.
27137         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
27138         for the get and set accessors.
27139         (Indexer::Define): Implement.
27140
27141 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
27142
27143         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
27144         my previous implementation, did not work.
27145
27146         * typemanager.cs: Add a couple of missing types (the longs).
27147
27148         * literal.cs: Use TypeManager.bool_type instead of getting it.
27149
27150         * expression.cs (EventExpr): New kind of expressions.
27151         (Expressio::ExprClassFromMemberInfo): finish
27152
27153 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
27154
27155         * assign.cs: Emit stores to static fields differently.
27156
27157 2001-09-08  Ravi Pratap  <ravi@ximian.com>
27158
27159         * Merge in changes and adjust code to tackle conflicts. Backed out my
27160         code in Assign::Resolve ;-) 
27161
27162 2001-09-08  Ravi Pratap  <ravi@ximian.com>
27163
27164         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
27165         instead Report.Error and also pass in the location.
27166         (CSharpParser::Lexer): New readonly property to return the reference
27167         to the Tokenizer object.
27168         (declare_local_variables): Use Report.Error with location instead of plain 
27169         old error.
27170         (CheckDef): Ditto.
27171
27172         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
27173         (Operator.CheckBinaryOperator): Ditto.
27174
27175         * cs-parser.jay (operator_declarator): Update accordingly.
27176
27177         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
27178         (CheckBinaryOperator): Same here.
27179
27180         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
27181         on the name without any prefixes of namespace names etc. This is because we
27182         already might have something already fully qualified like 
27183         'System.Console.WriteLine'
27184
27185         * assign.cs (Resolve): Begin implementation. Stuck ;-)
27186
27187 2001-09-07  Ravi Pratap  <ravi@ximian.com>
27188
27189         * cs-tokenizer.cs (location): Return a string which also contains
27190         the file name.
27191
27192         * expression.cs (ElementAccess): New class for expressions of the
27193         type 'element access.'
27194         (BaseAccess): New class for expressions of the type 'base access.'
27195         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
27196         respectively.
27197
27198         * cs-parser.jay (element_access): Implement action.
27199         (base_access): Implement actions.
27200         (checked_expression, unchecked_expression): Implement.
27201
27202         * cs-parser.jay (local_variable_type): Correct and implement.
27203         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
27204
27205         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
27206
27207         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
27208         name and the specifiers.
27209
27210         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
27211
27212         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
27213         making them all public ;-)
27214
27215         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
27216         class anyways.
27217
27218 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
27219
27220         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
27221         PropertyExprs.
27222         (FieldExpr, PropertyExprs): New resolved expressions.
27223         (SimpleName::MemberStaticCheck): Perform static checks for access
27224         to non-static fields on static methods. Maybe this should be
27225         generalized for MemberAccesses. 
27226         (SimpleName::ResolveSimpleName): More work on simple name
27227         resolution. 
27228
27229         * cs-parser.jay (primary_expression/qualified_identifier): track
27230         the parameter index.
27231
27232         * codegen.cs (CodeGen::Save): Catch save exception, report error.
27233         (EmitContext::EmitBoolExpression): Chain to expression generation
27234         instead of temporary hack.
27235         (::EmitStatementExpression): Put generic expression code generation.
27236
27237         * assign.cs (Assign::Emit): Implement variable assignments to
27238         local variables, parameters and fields.
27239
27240 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
27241
27242         * statement.cs (Block::GetVariableInfo): New method, returns the
27243         VariableInfo for a variable name in a block.
27244         (Block::GetVariableType): Implement in terms of GetVariableInfo
27245
27246         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
27247         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
27248
27249 2001-09-06  Ravi Pratap  <ravi@ximian.com>
27250
27251         * cs-parser.jay (operator_declaration): Continue on my quest : update
27252         to take attributes argument.
27253         (event_declaration): Ditto.
27254         (enum_declaration): Ditto.
27255         (indexer_declaration): Ditto.
27256
27257         * class.cs (Operator::Operator): Update constructor accordingly.
27258         (Event::Event): Ditto.
27259
27260         * delegate.cs (Delegate::Delegate): Same here.
27261
27262         * enum.cs (Enum::Enum): Same here.
27263
27264 2001-09-05  Ravi Pratap  <ravi@ximian.com>
27265
27266         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
27267
27268         * ../tests/cs0658.cs : New file to demonstrate error 0658.
27269
27270         * attribute.cs (Attributes): New class to encapsulate all attributes which were
27271         being passed around as an arraylist.
27272         (Attributes::AddAttribute): Method to add attribute sections.
27273
27274         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
27275         (struct_declaration): Update accordingly.
27276         (constant_declaration): Update.
27277         (field_declaration): Update.
27278         (method_header): Update.
27279         (fixed_parameter): Update.
27280         (parameter_array): Ditto.
27281         (property_declaration): Ditto.
27282         (destructor_declaration): Ditto.
27283
27284         * class.cs (Struct::Struct): Update constructors accordingly.
27285         (Class::Class): Ditto.
27286         (Field::Field): Ditto.
27287         (Method::Method): Ditto.
27288         (Property::Property): Ditto.
27289         (TypeContainer::OptAttribute): update property's return type.
27290
27291         * interface.cs (Interface.opt_attributes): New member.
27292         (Interface::Interface): Update to take the extra Attributes argument.
27293
27294         * parameter.cs (Parameter::Parameter): Ditto.
27295
27296         * constant.cs (Constant::Constant): Ditto.
27297
27298         * interface.cs (InterfaceMemberBase): New OptAttributes field.
27299         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
27300         the attributes as a parameter.
27301         (InterfaceProperty): Update constructor call.
27302         (InterfaceEvent): Ditto.
27303         (InterfaceMethod): Ditto.
27304         (InterfaceIndexer): Ditto.
27305
27306         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
27307         pass the attributes too.
27308         (interface_event_declaration): Ditto.
27309         (interface_property_declaration): Ditto.
27310         (interface_method_declaration): Ditto.
27311         (interface_declaration): Ditto.
27312
27313 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
27314
27315         * class.cs (Method::Define): Track the "static Main" definition to
27316         create an entry point. 
27317
27318         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
27319         EntryPoint if we find it. 
27320
27321         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
27322         (EmitContext::ig): Make this variable public.
27323
27324         * driver.cs: Make the default output file be the first file name
27325         with the .exe extension.  
27326
27327         Detect empty compilations
27328
27329         Handle various kinds of output targets.  Handle --target and
27330         rename -t to --dumper.
27331
27332         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
27333         methods inherited from Expression return now an Expression.  This
27334         will is used during the tree rewriting as we resolve them during
27335         semantic analysis.
27336
27337         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
27338         the spec.  Missing entirely is the information about
27339         accessability of elements of it.
27340
27341         (Expression::ExprClassFromMemberInfo): New constructor for
27342         Expressions that creates a fully initialized Expression based on
27343         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
27344         a Type.
27345
27346         (Invocation::Resolve): Begin implementing resolution of invocations.
27347
27348         * literal.cs (StringLiteral):  Implement Emit.
27349
27350 2001-09-05  Ravi Pratap  <ravi@ximian.com>
27351
27352         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
27353         member.
27354
27355 2001-09-04  Ravi Pratap  <ravi@ximian.com>
27356
27357         * cs-parser.jay (attribute_arguments): Implement actions.
27358         (attribute): Fix bug in production. Implement action.
27359         (attribute_list): Implement.
27360         (attribute_target): Implement.
27361         (attribute_target_specifier, opt_target_specifier): Implement
27362         (CheckAttributeTarget): New method to check if the attribute target
27363         is valid.
27364         (attribute_section): Implement.
27365         (opt_attributes): Implement.
27366
27367         * attribute.cs : New file to handle attributes.
27368         (Attribute): Class to hold attribute info.
27369
27370         * cs-parser.jay (opt_attribute_target_specifier): Remove production
27371         (attribute_section): Modify production to use 2 different rules to 
27372         achieve the same thing. 1 s/r conflict down !
27373         Clean out commented, useless, non-reducing dimension_separator rules.
27374
27375         * class.cs (TypeContainer.attributes): New member to hold list
27376         of attributes for a type.
27377         (Struct::Struct): Modify to take one more argument, the attribute list.
27378         (Class::Class): Ditto.
27379         (Field::Field): Ditto.
27380         (Method::Method): Ditto.
27381         (Property::Property): Ditto.
27382
27383         * cs-parser.jay (struct_declaration): Update constructor call to
27384         pass in the attributes too.
27385         (class_declaration): Ditto.
27386         (constant_declaration): Ditto.
27387         (field_declaration): Ditto.
27388         (method_header): Ditto.
27389         (fixed_parameter): Ditto.
27390         (parameter_array): Ditto.
27391         (property_declaration): Ditto.
27392
27393         * constant.cs (Constant::Constant): Update constructor similarly.
27394         Use System.Collections.
27395
27396         * parameter.cs (Parameter::Parameter): Update as above.
27397
27398 2001-09-02  Ravi Pratap  <ravi@ximian.com>
27399
27400         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
27401         (TypeContainer.delegates): New member to hold list of delegates.
27402
27403         * cs-parser.jay (delegate_declaration): Implement the action correctly 
27404         this time as I seem to be on crack ;-)
27405
27406 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
27407
27408         * rootcontext.cs (RootContext::IsNamespace): new function, used to
27409         tell whether an identifier represents a namespace.
27410
27411         * expression.cs (NamespaceExpr): A namespace expression, used only
27412         temporarly during expression resolution.
27413         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
27414         utility functions to resolve names on expressions.
27415
27416 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
27417
27418         * codegen.cs: Add hook for StatementExpressions. 
27419
27420         * class.cs: Fix inverted test for static flag in methods.
27421
27422 2001-09-02  Ravi Pratap  <ravi@ximian.com>
27423
27424         * class.cs (Operator::CheckUnaryOperator): Correct error number used
27425         to make it coincide with MS' number.
27426         (Operator::CheckBinaryOperator): Ditto.
27427
27428         * ../errors/errors.txt : Remove error numbers added earlier.
27429
27430         * ../errors/cs1019.cs : Test case for error # 1019
27431
27432         * ../errros/cs1020.cs : Test case for error # 1020
27433
27434         * cs-parser.jay : Clean out commented cruft.
27435         (dimension_separators, dimension_separator): Comment out. Ostensibly not
27436         used anywhere - non-reducing rule.
27437         (namespace_declarations): Non-reducing rule - comment out.
27438
27439         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
27440         with TypeContainer::AddEnum.
27441
27442         * delegate.cs : New file for delegate handling classes.
27443         (Delegate): Class for declaring delegates.
27444
27445         * makefile : Update.
27446
27447         * cs-parser.jay (delegate_declaration): Implement.
27448
27449 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
27450
27451         * class.cs (Event::Define): Implement.
27452         (Event.EventBuilder): New member.
27453
27454         * class.cs (TypeContainer::Populate): Update to define all enums and events
27455         we have.
27456         (Events): New property for the events arraylist we hold. Shouldn't we move to using
27457         readonly fields for all these cases ?
27458
27459 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
27460
27461         * class.cs (Property): Revamp to use the convention of making fields readonly.
27462         Accordingly modify code elsewhere.
27463
27464         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
27465         the Define method of the Property class.
27466
27467         * class.cs : Clean up applied patch and update references to variables etc. Fix 
27468         trivial bug.
27469         (TypeContainer::Populate): Update to define all the properties we have. Also
27470         define all enumerations.
27471
27472         * enum.cs (Define): Implement.
27473
27474 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
27475
27476         * cs-parser.jay (overloadable_operator): The semantic value is an
27477         enum of the Operator class.
27478         (operator_declarator): Implement actions.
27479         (operator_declaration): Implement.
27480
27481         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
27482         validity of definitions.
27483         (Operator::CheckBinaryOperator): Static method to check for binary operators
27484         (TypeContainer::AddOperator): New method to add an operator to a type.
27485
27486         * cs-parser.jay (indexer_declaration): Added line to actually call the
27487         AddIndexer method so it gets added ;-)
27488
27489         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
27490         already taken care of by the MS compiler ?  
27491
27492 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
27493
27494         * class.cs (Operator): New class for operator declarations.
27495         (Operator::OpType): Enum for the various operators.
27496
27497 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
27498
27499         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
27500         ostensibly handle this in semantic analysis.
27501
27502         * cs-parser.jay (general_catch_clause): Comment out
27503         (specific_catch_clauses, specific_catch_clause): Ditto.
27504         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
27505         (catch_args, opt_catch_args): New productions.
27506         (catch_clause): Rewrite to use the new productions above
27507         (catch_clauses): Modify accordingly.
27508         (opt_catch_clauses): New production to use in try_statement
27509         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
27510         and re-write the code in the actions to extract the specific and
27511         general catch clauses by being a little smart ;-)
27512
27513         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
27514         Hooray, try and catch statements parse fine !
27515
27516 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
27517
27518         * statement.cs (Block::GetVariableType): Fix logic to extract the type
27519         string from the hashtable of variables.
27520
27521         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
27522         I end up making that mistake ;-)
27523         (catch_clauses): Fixed gross error which made Key and Value of the 
27524         DictionaryEntry the same : $1 !!
27525
27526 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
27527
27528         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
27529
27530         * cs-parser.jay (event_declaration): Correct to remove the semicolon
27531         when the add and remove accessors are specified. 
27532
27533 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
27534
27535         * cs-parser.jay (IndexerDeclaration): New helper class to hold
27536         information about indexer_declarator.
27537         (indexer_declarator): Implement actions.
27538         (parsing_indexer): New local boolean used to keep track of whether
27539         we are parsing indexers or properties. This is necessary because 
27540         implicit_parameters come into picture even for the get accessor in the 
27541         case of an indexer.
27542         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
27543
27544         * class.cs (Indexer): New class for indexer declarations.
27545         (TypeContainer::AddIndexer): New method to add an indexer to a type.
27546         (TypeContainer::indexers): New member to hold list of indexers for the
27547         type.
27548
27549 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
27550
27551         * cs-parser.jay (add_accessor_declaration): Implement action.
27552         (remove_accessor_declaration): Implement action.
27553         (event_accessors_declaration): Implement
27554         (variable_declarators): swap statements for first rule - trivial.
27555
27556         * class.cs (Event): New class to hold information about event
27557         declarations.
27558         (TypeContainer::AddEvent): New method to add an event to a type
27559         (TypeContainer::events): New member to hold list of events.
27560
27561         * cs-parser.jay (event_declaration): Implement actions.
27562
27563 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
27564
27565         * cs-parser.jay (dim_separators): Implement. Make it a string
27566         concatenating all the commas together, just as they appear.
27567         (opt_dim_separators): Modify accordingly
27568         (rank_specifiers): Update accordingly. Basically do the same
27569         thing - instead, collect the brackets here.
27570         (opt_rank_sepcifiers): Modify accordingly.
27571         (array_type): Modify to actually return the complete type string
27572         instead of ignoring the rank_specifiers.
27573         (expression_list): Implement to collect the expressions
27574         (variable_initializer): Implement. We make it a list of expressions
27575         essentially so that we can handle the array_initializer case neatly too.
27576         (variable_initializer_list): Implement.
27577         (array_initializer): Make it a list of variable_initializers
27578         (opt_array_initializer): Modify accordingly.
27579
27580         * expression.cs (New::NType): Add enumeration to help us
27581         keep track of whether we have an object/delegate creation
27582         or an array creation.
27583         (New:NewType, New::Rank, New::Indices, New::Initializers): New
27584         members to hold data about array creation.
27585         (New:New): Modify to update NewType
27586         (New:New): New Overloaded contructor for the array creation
27587         case.
27588
27589         * cs-parser.jay (array_creation_expression): Implement to call
27590         the overloaded New constructor.
27591
27592 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
27593
27594         * class.cs (TypeContainer::Constructors): Return member
27595         constructors instead of returning null.
27596
27597 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
27598
27599         * typemanager.cs (InitCoreTypes): Initialize the various core
27600         types after we have populated the type manager with the user
27601         defined types (this distinction will be important later while
27602         compiling corlib.dll)
27603
27604         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
27605         on Expression Classification.  Now all expressions have a method
27606         `Resolve' and a method `Emit'.
27607
27608         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
27609         generation from working.     Also add some temporary debugging
27610         code. 
27611
27612 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
27613
27614         * codegen.cs: Lots of code generation pieces.  This is only the
27615         beginning, will continue tomorrow with more touches of polish.  We
27616         handle the fundamentals of if, while, do, for, return.  Others are
27617         trickier and I need to start working on invocations soon.
27618
27619         * gen-treedump.cs: Bug fix, use s.Increment here instead of
27620         s.InitStatement. 
27621
27622         * codegen.cs (EmitContext): New struct, used during code
27623         emission to keep a context.   Most of the code generation will be
27624         here. 
27625
27626         * cs-parser.jay: Add embedded blocks to the list of statements of
27627         this block.  So code generation proceeds in a top down fashion.
27628
27629 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
27630
27631         * statement.cs: Add support for multiple child blocks.
27632
27633 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
27634
27635         * codegen.cs (EmitCode): New function, will emit the code for a
27636         Block of code given a TypeContainer and its ILGenerator. 
27637
27638         * statement.cs (Block): Standard public readonly optimization.
27639         (Block::Block constructors): Link children. 
27640         (Block::Child): Child Linker.
27641         (Block::EmitVariables): Emits IL variable declarations.
27642
27643         * class.cs: Drop support for MethodGroups here, delay until
27644         Semantic Analysis.
27645         (Method::): Applied the same simplification that I did before, and
27646         move from Properties to public readonly fields.
27647         (Method::ParameterTypes): Returns the parameter types for the
27648         function, and implements a cache that will be useful later when I
27649         do error checking and the semantic analysis on the methods is
27650         performed.
27651         (Constructor::GetCallingConvention): Renamed from CallingConvetion
27652         and made a method, optional argument tells whether this is a class
27653         or a structure to apply the `has-this' bit.
27654         (Method::GetCallingConvention): Implement, returns the calling
27655         convention. 
27656         (Method::Define): Defines the type, a second pass is performed
27657         later to populate the methods.
27658
27659         (Constructor::ParameterTypes): implement a cache similar to the
27660         one on Method::ParameterTypes, useful later when we do semantic
27661         analysis. 
27662
27663         (TypeContainer::EmitMethod):  New method.  Emits methods.
27664
27665         * expression.cs: Removed MethodGroup class from here.
27666
27667         * parameter.cs (Parameters::GetCallingConvention): new method.
27668
27669 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
27670
27671         * class.cs (TypeContainer::Populate): Drop RootContext from the
27672         argument. 
27673
27674         (Constructor::CallingConvention): Returns the calling convention.
27675         (Constructor::ParameterTypes): Returns the constructor parameter
27676         types. 
27677
27678         (TypeContainer::AddConstructor): Keep track of default constructor
27679         and the default static constructor.
27680
27681         (Constructor::) Another class that starts using `public readonly'
27682         instead of properties. 
27683
27684         (Constructor::IsDefault): Whether this is a default constructor. 
27685
27686         (Field::) use readonly public fields instead of properties also.
27687
27688         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
27689         track of static constructors;  If none is used, turn on
27690         BeforeFieldInit in the TypeAttributes. 
27691
27692         * cs-parser.jay (opt_argument_list): now the return can be null
27693         for the cases where there are no arguments. 
27694
27695         (constructor_declarator): If there is no implicit `base' or
27696         `this', then invoke the default parent constructor. 
27697
27698         * modifiers.cs (MethodAttr): New static function maps a set of
27699         modifiers flags into a MethodAttributes enum
27700         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
27701         MethodAttr, TypeAttr to represent the various mappings where the
27702         modifiers are used.
27703         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
27704
27705 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
27706
27707         * parameter.cs (GetParameterInfo): Fix bug where there would be no
27708         method arguments.
27709
27710         * interface.cs (PopulateIndexer): Implemented the code generator
27711         for interface indexers.
27712
27713 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
27714
27715         * interface.cs (InterfaceMemberBase): Now we track the new status
27716         here.  
27717
27718         (PopulateProperty): Implement property population.  Woohoo!  Got
27719         Methods and Properties going today. 
27720
27721         Removed all the properties for interfaces, and replaced them with
27722         `public readonly' fields. 
27723
27724 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
27725
27726         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
27727         initialize their hashtables/arraylists only when they are needed
27728         instead of doing this always.
27729
27730         * parameter.cs: Handle refs and out parameters.
27731
27732         * cs-parser.jay: Use an ArrayList to construct the arguments
27733         instead of the ParameterCollection, and then cast that to a
27734         Parameter[] array.
27735
27736         * parameter.cs: Drop the use of ParameterCollection and use
27737         instead arrays of Parameters.
27738
27739         (GetParameterInfo): Use the Type, not the Name when resolving
27740         types. 
27741
27742 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
27743
27744         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
27745         and instead use public readonly fields.
27746
27747         * class.cs: Put back walking code for type containers.
27748
27749 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
27750
27751         * class.cs (MakeConstant): Code to define constants.
27752
27753         * rootcontext.cs (LookupType): New function.  Used to locate types 
27754
27755
27756 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
27757
27758         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
27759         this System.Reflection code is.  Kudos to Microsoft
27760
27761         * typemanager.cs: Implement a type cache and avoid loading all
27762         types at boot time.  Wrap in LookupType the internals.  This made
27763         the compiler so much faster.  Wow.  I rule!
27764
27765         * driver.cs: Make sure we always load mscorlib first (for
27766         debugging purposes, nothing really important).
27767
27768         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
27769         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
27770
27771         * rootcontext.cs: Lookup types on their namespace;  Lookup types
27772         on namespaces that have been imported using the `using' keyword.
27773
27774         * class.cs (TypeContainer::TypeAttr): Virtualize.
27775         (Class::TypeAttr): Return attributes suitable for this bad boy.
27776         (Struct::TypeAttr): ditto.
27777         Handle nested classes.
27778         (TypeContainer::) Remove all the type visiting code, it is now
27779         replaced with the rootcontext.cs code
27780
27781         * rootcontext.cs (GetClassBases): Added support for structs. 
27782
27783 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
27784
27785         * interface.cs, statement.cs, class.cs, parameter.cs,
27786         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
27787         Drop use of TypeRefs, and use strings instead.
27788
27789 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
27790
27791         * rootcontext.cs: 
27792
27793         * class.cs (Struct::Struct): set the SEALED flags after
27794         checking the modifiers.
27795         (TypeContainer::TypeAttr): new property, returns the
27796         TypeAttributes for a class.  
27797
27798         * cs-parser.jay (type_list): Oops, list production was creating a
27799         new list of base types.
27800
27801         * rootcontext.cs (StdLib): New property.
27802         (GetInterfaceTypeByName): returns an interface by type name, and
27803         encapsulates error handling here.
27804         (GetInterfaces): simplified.
27805         (ResolveTree): Encapsulated all the tree resolution here.
27806         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
27807         types. 
27808
27809         * driver.cs: Add support for --nostdlib, to avoid loading the
27810         default assemblies.
27811         (Main): Do not put tree resolution here. 
27812
27813         * rootcontext.cs: Beginning of the class resolution.
27814
27815 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
27816
27817         * rootcontext.cs: Provide better error reporting. 
27818
27819         * cs-parser.jay (interface_base): set our $$ to be interfaces.
27820
27821         * rootcontext.cs (CreateInterface): Handle the case where there
27822         are no parent interfaces.
27823
27824         (CloseTypes): Routine to flush types at the end.
27825         (CreateInterface): Track types.
27826         (GetInterfaces): Returns an array of Types from the list of
27827         defined interfaces.
27828
27829         * typemanager.c (AddUserType): Mechanism to track user types (puts
27830         the type on the global type hash, and allows us to close it at the
27831         end). 
27832
27833 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
27834
27835         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
27836         RecordInterface instead.
27837
27838         * cs-parser.jay: Updated to reflect changes above.
27839
27840         * decl.cs (Definition): Keep track of the TypeBuilder type that
27841         represents this type here.  Not sure we will use it in the long
27842         run, but wont hurt for now.
27843
27844         * driver.cs: Smaller changes to accomodate the new code.
27845
27846         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
27847         when done. 
27848
27849         * rootcontext.cs (CreateInterface):  New method, used to create
27850         the System.TypeBuilder type for interfaces.
27851         (ResolveInterfaces): new entry point to resolve the interface
27852         hierarchy. 
27853         (CodeGen): Property, used to keep track of the code generator.
27854
27855 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
27856
27857         * cs-parser.jay: Add a second production for delegate_declaration
27858         with `VOID'.
27859
27860         (enum_body): Put an opt_comma here instead of putting it on
27861         enum_body or enum_member_declarations so we can handle trailing
27862         commas on enumeration members.  Gets rid of a shift/reduce.
27863
27864         (type_list): Need a COMMA in the middle.
27865
27866         (indexer_declaration): Tell tokenizer to recognize get/set
27867
27868         * Remove old targets.
27869
27870         * Re-add the parser target.
27871
27872 2001-07-13  Simon Cozens <simon@simon-cozens.org>
27873
27874         * cs-parser.jay: Add precendence rules for a number of operators
27875         ot reduce the number of shift/reduce conflicts in the grammar.
27876
27877 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
27878
27879         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
27880         and put it here.
27881
27882         Get rid of old crufty code.
27883
27884         * rootcontext.cs: Use this to keep track of the parsed
27885         representation and the defined types available to the program. 
27886
27887         * gen-treedump.cs: adjust for new convention.
27888
27889         * type.cs: Split out the type manager, and the assembly builder
27890         from here. 
27891
27892         * typemanager.cs: the type manager will live here now.
27893
27894         * cil-codegen.cs: And the code generator here. 
27895
27896 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
27897
27898         * makefile: Fixed up for easy making.
27899
27900 2001-07-13  Simon Cozens <simon@simon-cozens.org>
27901
27902         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
27903         the 
27904
27905         (unary_expression): Expand pre_increment_expression and
27906         post_decrement_expression to reduce a shift/reduce.
27907
27908 2001-07-11  Simon Cozens
27909
27910         * cs-tokenizer.cs: Hex numbers should begin with a 0.
27911
27912         Improve allow_keyword_as_indent name.
27913
27914 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
27915
27916         * Adjustments for Beta2. 
27917
27918 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
27919
27920         * decl.cs: Added `Define' abstract method.
27921         (InTransit): new property, used to catch recursive definitions. 
27922
27923         * interface.cs: Implement `Define'. 
27924
27925         * modifiers.cs: Map Modifiers.constants to
27926         System.Reflection.TypeAttribute flags.
27927
27928         * class.cs: Keep track of types and user-defined types.
27929         (BuilderInit): New method for creating an assembly
27930         (ResolveType): New function to launch the resolution process, only
27931         used by interfaces for now.
27932
27933         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
27934         that are inserted into the name space. 
27935
27936 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
27937
27938         * ARGH.  I have screwed up my tree so many times due to the use of
27939         rsync rather than using CVS.  Going to fix this at once. 
27940
27941         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
27942         load types.
27943
27944 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
27945
27946         * Experiment successful: Use System.Type rather that our own
27947         version of Type.  
27948
27949 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
27950
27951         * cs-parser.jay: Removed nsAliases from here.
27952
27953         Use new namespaces, handle `using XXX;' 
27954
27955         * namespace.cs: Reimplemented namespace handling, use a recursive
27956         definition of the class.  Now we can keep track of using clauses
27957         and catch invalid using clauses.
27958
27959 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
27960
27961         * gen-treedump.cs: Adapted for all the renaming.
27962
27963         * expression.cs (Expression): this class now has a Type property
27964         which returns an expression Type.
27965
27966         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
27967         `Type', as this has a different meaning now in the base
27968
27969 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
27970
27971         * interface.cs, class.cs: Removed from all the sources the
27972         references to signature computation, as we can not do method
27973         signature computation during the parsing time, as we are not
27974         trying to solve at that point distinguishing:
27975
27976         class X {
27977                 void a (Blah x) {}
27978                 void a (NS.Blah x) {}
27979         }
27980
27981         Which depending on the context might be valid or not, as we do not
27982         know if Blah is the same thing as NS.Blah at that point.
27983
27984         * Redid everything so the code uses TypeRefs now instead of
27985         Types.  TypeRefs are just temporary type placeholders, that need
27986         to be resolved.  They initially have a pointer to a string and the
27987         current scope in which they are used.  This is used later by the
27988         compiler to resolve the reference to an actual Type. 
27989
27990         * DeclSpace is no longer a CIR.Type, and neither are
27991         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
27992         are all DeclSpaces, but no Types. 
27993
27994         * type.cs (TypeRefManager): This implements the TypeRef manager,
27995         which keeps track of all the types that need to be resolved after
27996         the parsing has finished. 
27997
27998 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
27999
28000         * ARGH.  We are going to have to store `foreach' as a class rather
28001         than resolving it, as we need to verify error 1579 after name
28002         resolution.   *OR* we could keep a flag that says `This request to
28003         IEnumerator comes from a foreach statement' which we can then use
28004         to generate the error.
28005
28006 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
28007
28008         * class.cs (TypeContainer.AddMethod): we now add methods to the
28009         MethodGroup instead of the method hashtable.  
28010
28011         * expression.cs: Add MethodGroup abstraction, which gets us one
28012         step closer to the specification in the way we handle method
28013         declarations.  
28014
28015         * cs-parser.jay (primary_expression): qualified_identifier now
28016         tried to match up an identifier to a local variable reference or
28017         to a parameter reference.
28018
28019         current_local_parameters is now a parser global variable that
28020         points to the current parameters for the block, used during name
28021         lookup.
28022
28023         (property_declaration): Now creates an implicit `value' argument to
28024         the set accessor.
28025
28026 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
28027
28028         * parameter.cs: Do not use `param' arguments as part of the
28029         signature, per the spec.
28030
28031 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
28032
28033         * decl.cs: Base class for classes, structs and interfaces.  This
28034         is the "Declaration Space" 
28035
28036         * cs-parser.jay: Use CheckDef for checking declaration errors
28037         instead of having one on each function.
28038
28039         * class.cs: Factor out some code for handling error handling in
28040         accordance to the "Declarations" section in the "Basic Concepts"
28041         chapter in the ECMA C# spec.
28042
28043         * interface.cs: Make all interface member classes derive from
28044         InterfaceMemberBase.
28045
28046 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
28047
28048         * Many things: all interfaces are parsed and generated in
28049         gen-treedump.  Support for member variables, constructors,
28050         destructors, properties, constants is there.
28051
28052         Beginning of the IL backend, but very little done, just there for
28053         testing purposes. 
28054
28055 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
28056
28057         * cs-parser.jay: Fix labeled statement.
28058
28059         * cs-tokenizer.cs (escape): Escape " and ' always.
28060         ref_line, ref_name: keep track of the line/filename as instructed
28061         by #line by the compiler.
28062         Parse #line.
28063
28064 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
28065
28066         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
28067         to match the values in System.CodeDOM.
28068
28069         Divid renamed to Divide.
28070
28071         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
28072         statements. 
28073         (Statements.set): remove.
28074
28075         * System.CodeDOM/CodeCatchClause.cs: always have a valid
28076         statements. 
28077
28078         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
28079         falseStatements always have valid values. 
28080
28081         * cs-parser.jay: Use System.CodeDOM now.
28082