2010-06-01 Marek Safar <marek.safar@gmail.com>
[mono.git] / mcs / mcs / ChangeLog
1 2010-06-01  Marek Safar  <marek.safar@gmail.com>
2
3         * convert.cs, expression.cs: Emit unbox for underlying nullable
4         type boxing cast.
5
6 2010-05-29  Marek Safar  <marek.safar@gmail.com>
7
8         A fix for bug #610126
9         * expression.cs: Don't use branch optimization for types bigger than
10         int.
11
12 2010-05-28  Marek Safar  <marek.safar@gmail.com>
13
14         A fix for bug #609088
15         * import.cs: Check private modifier correctly.
16
17 2010-05-28  Marek Safar  <marek.safar@gmail.com>
18
19         A fix for bug #609049
20         * ecore.cs: Don't ignore override methods when looking for base
21         member.
22
23 2010-05-27  Marek Safar  <marek.safar@gmail.com>
24
25         A fix for bugs #608007, #572540, #566130, #476358
26
27         * generic.cs, linq.cs, expression.cs, statement.cs, cs-parser.jay:
28         More tricky refactoring of implicit linq blocks.
29         
30 2010-05-25  Marek Safar  <marek.safar@gmail.com>
31
32         * linq.cs, cs-parser.jay: Keep location for all linq clauses.
33
34 2010-05-25  Marek Safar  <marek.safar@gmail.com>
35
36         * context.cs, expression.cs, cs-parser.jay: Don't store current
37         block in This expression (it's too early for linq blocks).
38
39 2010-05-21  Marek Safar  <marek.safar@gmail.com>
40
41         * expression.cs: Use constrained prefix more broadly to avoid boxing.
42
43 2010-05-20  Marek Safar  <marek.safar@gmail.com>
44
45         A fix for bug #591149
46         * nullable.cs: Don't double wrap same expression.
47         
48 2010-05-20  Marek Safar  <marek.safar@gmail.com>
49
50         A fix for bug #569827
51         * anonymous.cs: Any issued error in probing mode means no match.
52
53 2010-05-20  Marek Safar  <marek.safar@gmail.com>
54
55         * expression.cs: Search for base indexer using the closest match
56         rule.
57
58 2010-05-20  Marek Safar  <marek.safar@gmail.com>
59
60         A fix for bug #572071
61         * method.cs: Set override constraints using unexpanded interface
62         list.
63
64 2010-05-20  Marek Safar  <marek.safar@gmail.com>
65
66         A fix for bug #572071
67         * ecore.cs: Include secondary extension method lookup in probing
68         mode.
69
70 2010-05-19  Marek Safar  <marek.safar@gmail.com>
71
72         A fix for bug #515801
73         * typespec.cs (MayBecomeEqualGenericTypes): Recursively check
74         type arguments.
75
76 2010-05-19  Marek Safar  <marek.safar@gmail.com>
77
78         A fix for bug #515801
79         * pending.cs: Advance counter correctly.
80
81 2010-05-19  Marek Safar  <marek.safar@gmail.com>
82
83         A fix for bug #480139
84         * method.cs, pending.cs: Indexer override uses base name.
85         
86 2010-05-19  Marek Safar  <marek.safar@gmail.com>
87
88         A fix for bug #424064
89         * generic.cs: Replace original with inflated type parameter on
90         failure.
91
92 2010-05-19  Marek Safar  <marek.safar@gmail.com>
93
94         A fix for bug #359733
95         * parameter.cs: Extension attribute can be defined in each assembly.
96
97 2010-05-18  Marek Safar  <marek.safar@gmail.com>
98
99         A fix for bug #446507
100         * method.cs: Only one method can implement an interface.
101
102 2010-05-18  Marek Safar  <marek.safar@gmail.com>
103
104         A fix for bug #594905
105         * convert.cs, constant.cs, expression.cs, literal.cs, ecore.cs:
106         Typed null can be used as a source for expression methods.
107
108 2010-05-18  Marek Safar  <marek.safar@gmail.com>
109
110         A fix for bug #606551
111         * namespace.cs: Using directive imports only types and not nested
112         namespaces.
113
114 2010-05-17  Marek Safar  <marek.safar@gmail.com>
115
116         * typespec.cs, expression.cs, statement.cs, ecore.cs, complete.cs,
117         delegate.cs: Member instance is resolved after member overload
118         definitely resolves static/instance property of member expression.
119         Fixes #545047, #358848, #456605, #460016, #603299
120
121 2010-05-12  Marek Safar  <marek.safar@gmail.com>
122
123         A fix for bug #604981
124         * generic.cs, decl.cs, anonymous.cs: Reset more type arguments
125         details for nested anonymous methods stories.
126
127 2010-05-11  Marek Safar  <marek.safar@gmail.com>
128
129         A fix for bug #604735
130         * namespace.cs: Don't report namespace collision.
131
132 2010-05-11  Marek Safar  <marek.safar@gmail.com>
133
134         A fix for bug #604748
135         * class.cs, typespec.cs: Search full imported attribute hierarchy
136         for AttributeUsage.
137
138 2010-05-11  Marek Safar  <marek.safar@gmail.com>
139
140         * namespace.cs: Ignore missing dependencies failure at
141         initialization.
142
143 2010-05-11  Marek Safar  <marek.safar@gmail.com>
144
145         A fix for bug #604640
146         * namespace.cs: Don't resolve using constraints too early.
147
148 2010-05-11  Marek Safar  <marek.safar@gmail.com>
149
150         A fix for bug #604239
151         * generic.cs: Copy partial type constraints to partial container.
152
153 2010-05-10  Marek Safar  <marek.safar@gmail.com>
154
155         A fix for bug #557210
156         * import.cs: Relax underlying enum field rules.
157
158 2010-05-10  Marek Safar  <marek.safar@gmail.com>
159
160         A fix for bug #603476
161         * property.cs: Implement IParametersMember for indexer accessors.
162
163 2010-05-07  Marek Safar  <marek.safar@gmail.com>
164
165         A fix for bug #601141
166         * class.cs: Update all partial modifiers.
167
168 2010-05-06  Marek Safar  <marek.safar@gmail.com>
169
170         A fix for bug #601708
171         * method.cs, membercache.cs: Destructors cannot be hidden.
172
173 2010-05-06  Marek Safar  <marek.safar@gmail.com>
174
175         A fix for bug #602551
176         * class.cs: Resursive reference of type definition is allowed.
177
178 2010-05-06  Marek Safar  <marek.safar@gmail.com>
179
180         * anonymous.cs: Mutate cached storey instance types too.
181
182 2010-05-06  Marek Safar  <marek.safar@gmail.com>
183
184         A fix for bug #602443
185         * convert.cs: Explicit enum conversion cannot involve user operators
186
187 2010-05-05  Miguel de Icaza  <miguel@novell.com>
188
189         * class.cs (TypeContainer.DefineBaseTypes)
190         (TypeContainer.CheckRecursiveDefinition): check for the iface not
191         being null, as we could have failed resolution and crashed;
192         Fixes #442144
193
194         * cs-parser.jay: Productions to catch common mistakes when other
195         punctuation operators are used instead of comma.   Fixes 571702 
196
197 2010-05-05  Marek Safar  <marek.safar@gmail.com>
198
199         * anonymous.cs: Mutate correct set of constraints.
200
201 2010-05-05  Marek Safar  <marek.safar@gmail.com>
202
203         A fix for bug #602842
204         * expression.cs: Resolve all array bound arguments.
205
206 2010-05-05  Marek Safar  <marek.safar@gmail.com>
207
208         * import.cs: Don't import private fields.
209
210 2010-04-30  Marek Safar  <marek.safar@gmail.com>
211
212         Partially based on patch by <sami.lamti@gmail.com>
213
214         * eval.cs, ecore.cs: Fixed eval show methods.
215
216 2010-04-30  Marek Safar  <marek.safar@gmail.com>
217
218         * generic.cs, delegate.cs: Implement output type inference of
219         methodgroup now when the specification was cleared at least little
220         bit.
221
222 2010-04-29  Marek Safar  <marek.safar@gmail.com>
223
224         A fix for bug #575611
225         * class.cs: Fix recursive unmanaged recursice sruct check.
226         
227 2010-04-29  Marek Safar  <marek.safar@gmail.com>
228
229         A fix for bug #479776
230         * expression.cs: Implement typeof unbounded nested generic types.
231
232 2010-04-29  Marek Safar  <marek.safar@gmail.com>
233
234         A fix for bug #474953
235         * class.cs: Fix valid recursive base type definition.
236
237 2010-04-29  Marek Safar  <marek.safar@gmail.com>
238
239         A fix for bug #421737
240         * convert.cs, expression.cs: A boxing conversion exists from a
241         nullable-type to a reference type, if a boxing conversion exists
242         from the underlying non-nullable-value-type to the reference type.
243
244 2010-04-29  Marek Safar  <marek.safar@gmail.com>
245
246         A fix for bug #376875
247         * import.cs: Import volatile modifier.
248
249 2010-04-29  Marek Safar  <marek.safar@gmail.com>
250
251         A fix for bug #372412
252         * typespec.cs, expression.cs, codegen.cs: Emit readonly prefix for
253         generic arrays.
254
255 2010-04-29  Marek Safar  <marek.safar@gmail.com>
256
257         A fix for bug #568955
258         * statements.cs: Handle recursive scope initializers.
259
260 2010-04-28  Marek Safar  <marek.safar@gmail.com>
261
262         A fix for bug #566511
263         * anonymous.cs: Always get inflated version of hoisted variable
264         on generic type definition.
265
266 2010-04-28  Marek Safar  <marek.safar@gmail.com>
267
268         * import.cs, membercache.cs: Relax rules for valid properties.
269
270 2010-04-28  Marek Safar  <marek.safar@gmail.com>
271
272         * import.cs: Intern arrays used in generic arguments.
273
274 2010-04-28  Marek Safar  <marek.safar@gmail.com>
275
276         A fix for bug #600398
277         * convert.cs: Actually use effective base type for the comparison.
278
279 2010-04-28  Marek Safar  <marek.safar@gmail.com>
280
281         A fix for bug #600326
282         * ecore.cs: Pass arity to base member lookup.
283
284 2010-04-28  Marek Safar  <marek.safar@gmail.com>
285
286         A fix for bug #573385
287         * expression.cs: MemberAccess is of generic type based on right
288         arity length only.
289
290 2010-05-28  Marek Safar  <marek.safar@gmail.com>
291
292         * cs-tokenizer.cs: Made tab size configurable.
293
294 2010-05-27  Marek Safar  <marek.safar@gmail.com>
295
296         * attribute.cs: Ensure Obsolete members are defined before doing
297         ctor look-up.
298
299 2010-05-27  Marek Safar  <marek.safar@gmail.com>
300
301         * visit.cs: Add DOM visitor skeleton.
302         
303         * *.cs: Updated.
304
305 2010-05-27  Marek Safar  <marek.safar@gmail.com>
306
307         * attribute.cs, codegen.cs: Drop COMPILER_ACCESS hack.
308         
309 2010-05-27  Marek Safar  <marek.safar@gmail.com>
310
311         * *.cs: Major rewrite of compiler internals to better work with
312         unmodified System.Reflection.Emit. Some of the key changes are
313         - TypeSpec replaces reflection specific System.Type.
314         - All Type(TypeSpec) operations are now done in compiler therefore
315         no dependency on SRE to inflate generic members and types or to
316         query unclosed types.
317         - MemberCache is now the only and full hierarchical topology.
318         - Generic constraints are implemented properly.
319         - And as a bonus compilation is on average 30% faster.
320
321 2010-04-15  Jb Evain  <jbevain@novell.com>
322
323         * dmcs.exe.config: update the runtime version to .net 4.0 RTM.
324
325 2010-04-12  Marek Safar  <marek.safar@gmail.com>
326
327         * expression.cs, attribute.cs, parameter.cs: More attribute type
328         checks.
329
330 2010-04-12  Marek Safar  <marek.safar@gmail.com>
331
332         A fix for bug #593342
333
334         * generic.cs, parameter.cs, argument.cs, field.cs, property.cs,
335         decl.cs, roottypes.cs, constant.cs, nullable.cs, expression.cs,
336         method.cs, ecore.cs, class.cs, delegate.cs, attribute.cs,
337         codegen.cs: Add custom attribute encoder to deal with unfinished
338         types and easier corlib bootstrap from its own types.
339
340 2010-03-26  Marek Safar  <marek.safar@gmail.com>
341
342         * cs-parser.jay: Report invalid constraint types.
343
344 2010-03-16  Jb Evain  <jbevain@novell.com>
345
346         * Makefile: rename the net_2_1 profile to moonlight.
347
348 2010-03-11  Marek Safar  <marek.safar@gmail.com>
349
350         * statement.cs, cs-parser.jay: Use correct location for empty
351         statements.
352
353 2010-03-11  Marek Safar  <marek.safar@gmail.com>
354
355         * cs-parser.jay: Disable Location from expression.
356         
357         * generic.cs: Check constraints for overrides in the parser.
358
359 2010-03-09  Marek Safar  <marek.safar@gmail.com>
360
361         * cs-parser.jay (GetLocation): Use an expression when available.
362
363 2010-03-04  Marek Safar  <marek.safar@gmail.com>
364
365         A fix for bug #582579
366         * ecore.cs (FieldExpr): Don't optimize cross reference loads.
367
368 2010-03-04  Marek Safar  <marek.safar@gmail.com>
369
370         A patch by kornelpal@gmail.com
371         
372         * dynamic.cs, anonymous.cs, rootcontext.cs, class.cs: Don't make
373         compiler generated classes sealed by default. Emit and close top
374         level compiler generated classes as well. 
375         
376         * support.cs: Use RuntimeHelpers.GetHashCode.
377
378 2010-03-03  Rolf Bjarne Kvinge  <RKvinge@novell.com>
379
380         * Makefile: We need to use the internal bootstrapping gmcs for
381         net_2_1_bootstrap too now.
382
383 2010-03-02  Raja R Harinath  <harinath@hurrynot.org>
384
385         * expression.cs (IndexerAccess.ResolveAccessor): Add CS1540 check.
386
387 2010-03-02  Marek Safar  <marek.safar@gmail.com>
388
389         * cs-tokenizer.cs: Missed few locations in previous fix.
390
391 2010-03-02  Marek Safar  <marek.safar@gmail.com>
392
393         * cs-tokenizer.cs, argument.cs, dynamic.cs, assign.cs, anonymous.cs,
394         nullable.cs, expression.cs, statement.cs, cs-parser.jay, cfold.cs:
395         Report correct location for operator errors.
396
397 2010-03-02  Marek Safar  <marek.safar@gmail.com>
398
399         * typemanager.cs (IsDynamicType): Don't check external types when
400         the attribute is not external.
401
402 2010-02-24  Marek Safar  <marek.safar@gmail.com>
403
404         A fix for bug #582579
405         * decl.cs (IsExposedFromAssembly): Use PartialContainer for parent
406         modifiers.
407
408 2010-02-24  Marek Safar  <marek.safar@gmail.com>
409
410         A fix for bug #581804
411         * ecore.cs: Fixed type comparison.
412
413 2010-02-08  Miguel de Icaza  <miguel@novell.com>
414
415         * namespace.cs (CompletionGetTypesStartingWith): Do not include
416         private types in the completion results.
417
418         * cs-parser.jay: Bubble completions after "from x in ?" and "from x
419         ... let ?"
420
421 2010-02-17  Marek Safar  <marek.safar@gmail.com>
422
423         * generic.cs, field.cs, decl.cs, cs-parser.jay: Simplify special
424         constraint parsing.
425
426 2010-02-14  Miguel de Icaza  <miguel@novell.com>
427
428         * eval.cs: Do not do the report printer dance unless the user has
429         set the DescribeTypes feature.
430
431 2010-02-10  Marek Safar  <marek.safar@gmail.com>
432
433         * argument.cs, dynamic.cs, expression.cs: Track RC API changes.
434
435 2010-02-08  Marek Safar  <marek.safar@gmail.com>
436
437         A fix for bug #577029
438         * anonymous.cs: Fixed TypeBuilder* check.
439
440 2010-02-06  Miguel de Icaza  <miguel@novell.com>
441
442         * eval.cs (CompileBlock): Also undo if there are problems during
443         semantic analysis, fixes various cases where invalid C# code would
444         be reported, but the internal changes would not be undone.
445
446 2010-02-03  Miguel de Icaza  <miguel@novell.com>
447
448         * driver.cs: Change the --fatal flag to allow a number to be
449         passed, this ignores the first N fatal errors.   Useful to debug
450         errors that do not happen on the first hit.
451
452         * cs-parser.jay (invocation_expression): accept both the
453         CLOSE_PARENS and COMPLETE_COMPLETION, this allows completions
454         inside an invocation.
455
456         * driver.cs: Expose FatalErrors.
457
458         * eval.cs: Initialize the printer's Fatal property from the
459         Driver's FatalError flag, this allows csharp --fatal to work
460         again. 
461
462         Add support for calling Describe (typeof (TYPE)) if the expression
463         entered is a TYPE.
464         
465 2010-02-02  Marek Safar  <marek.safar@gmail.com>
466
467         A fix for bug #574991
468         * rootcontext.cs, class.cs, driver.cs: Hide enhanced warnings behind
469         --lint.
470
471 2010-02-02  Marek Safar  <marek.safar@gmail.com>
472
473         A fix for bug #575986
474         * expression.cs: Don't mutate typeof type definitions.
475
476 2010-01-28  Marek Safar  <marek.safar@gmail.com>
477
478         * decl.cs: Use only one set of modifiers.
479
480 2010-01-26  Marek Safar  <marek.safar@gmail.com>
481
482         A fix for bug #573329
483         * eval.cs: Don't disable error reporting completely on silent mode.
484         
485 2010-01-25  Marek Safar  <marek.safar@gmail.com>
486
487         A fix for bug #573312
488         * constant.cs, expression.cs, ecore.cs: Emit correct offset for
489         pointer index of unknown size types greater than 2.
490
491 2010-01-15  Marek Safar  <marek.safar@gmail.com>
492
493         * *.cs: Use only 1 member kind enum.
494
495 2010-01-15  Marek Safar  <marek.safar@gmail.com>
496
497         * *.cs: Add event specification.
498
499 2010-01-14  Marek Safar  <marek.safar@gmail.com>
500
501         * membercache.cs: Extracted from decl.cs.
502         
503         * *.cs: Put more infrastructure in place.
504
505 2010-01-13  Marek Safar  <marek.safar@gmail.com>
506
507         * *.cs: Add property specification, unused yet.
508
509 2010-01-13  Marek Safar  <marek.safar@gmail.com>
510
511         * property.cs: Move all property based declarations into a new file.
512
513 2010-01-13  Marek Safar  <marek.safar at gmail.com>
514
515         * expression.cs (Conditional): Resolve reduced expression.
516
517 2010-01-13  Marek Safar  <marek.safar at gmail.com>
518
519         * *.cs: Introduced non-generic method specification.
520
521 2010-01-07  Marek Safar  <marek.safar@gmail.com>
522
523         * method.cs: Move all method based declarations into a new file.
524
525 2010-01-07  Marek Safar  <marek.safar@gmail.com>
526
527         * *.cs: Extract field specification.
528
529 2009-12-17  Marek Safar  <marek.safar@gmail.com>
530
531         * field.cs: Extracted from class.cs
532
533 2009-12-15  Marek Safar  <marek.safar@gmail.com>
534
535         * attribute.cs (GetFixedBuffer): Work on field definition only.
536
537 2009-12-15  Marek Safar  <marek.safar@gmail.com>
538
539         * *.cs: Clean up NET_4_0 conditional where possible.
540
541 2009-12-14 Rodrigo Kumpera  <rkumpera@novell.com>
542
543         support.cs (DynamicType): Assembly property returns the assembly builder.
544         This is required due to how compiler context works in corlib.
545
546 2009-12-14  Marek Safar  <marek.safar@gmail.com>
547
548         A fix for bug #564376
549         * assign.cs (LocalTemporary): Removed no longer needed special
550         by-ref handling.
551
552 2009-12-11  Marek Safar  <marek.safar@gmail.com>
553
554         * modifiers.cs, decl.cs, iterators.cs, const.cs, anonymous.cs,
555         class.cs, delegate.cs, cs-parser.jay, enum.cs: Turn modifiers into
556         enum for easier debugging.
557
558 2009-12-10  Marek Safar  <marek.safar@gmail.com>
559
560         * decl.cs, anonymous.cs, class.cs: Sealed Define it's now main entry
561         point.
562         
563         * parameter.cs, delegate.cs, dynamic.cs: Don't use builder methods
564         directly.
565
566 2009-12-10  Marek Safar  <marek.safar@gmail.com>
567
568         * cs-parser.jay, statement.cs: Handle parser error in code
569         completition.
570
571 2009-12-10  Marek Safar  <marek.safar@gmail.com>
572
573         * ecore.cs: Ignore base imported methods when they are already
574         in method bag.
575         
576         * eval.cs: Handle non-existent keys.
577         
578         * report.cs, driver.cs: Make fatal work with console printer only.
579
580 2009-12-08 Rodrigo Kumpera  <rkumpera@novell.com>
581
582         * typemanager.cs (MakeGenericMethod): Fix stupid mistake.
583
584 2009-12-08 Rodrigo Kumpera  <rkumpera@novell.com>
585
586         * typemanager.cs: Add MakeGenericMethod that checks if the method
587         is really the generic method definition.
588
589         ecore.cs (MethodGroupExpr:IsApplicable): Use new TypeManager function
590         to inflate generic methods.
591
592 2009-12-08  Marek Safar  <marek.safar@gmail.com>
593
594         A fix for bug #561149
595         * anonymous.cs: Use actual type parameters when checking for generic
596         method host.
597
598 2009-12-08  Marek Safar  <marek.safar@gmail.com>
599
600         A fix for bug #561369
601         * expression.cs (DoNumericPromotion): Fixed typo.
602
603 2009-12-08  Marek Safar  <marek.safar@gmail.com>
604
605         *.cs: Moving to generics world.
606
607         cs-parser.jay: Removed current_array_type.
608
609 2009-12-07  Marek Safar  <marek.safar@gmail.com>
610
611         *.cs: Moving to generics world.
612
613 2009-12-04  Marek Safar  <marek.safar@gmail.com>
614
615         *.cs: Moving to generics world (day 2).
616
617 2009-12-03  Marek Safar  <marek.safar@gmail.com>
618
619         *.cs: Moving to generics world.
620
621 2009-12-02  Marek Safar  <marek.safar@gmail.com>
622
623         * typemanager.cs, parameter.cs, class.cs, delegate.cs, attribute.cs:
624         Encode dynamic type attribute for elements where attributes cannot
625         be used.
626
627 2009-12-01  Marek Safar  <marek.safar@gmail.com>
628
629          argument.cs, assign.cs, expression.cs, cs-parser.jay: Named
630          arguments by ref.
631
632 2009-12-01  Marek Safar  <marek.safar@gmail.com>
633
634         A fix for bug #360455
635         * class.cs: Never report a unused warning for generic events to
636         workaround wrong expression type.
637
638 2009-11-30  Marek Safar  <marek.safar@gmail.com>
639
640         A fix for bug #558305
641         * decl.cs, class.cs: Check partial method definitions using correct
642         flag.
643
644 2009-11-30  Marek Safar  <marek.safar@gmail.com>
645
646         * argument.cs: Don't cache rarely used dynamic flag.
647
648 2009-11-27  Marek Safar  <marek.safar@gmail.com>
649
650         * cs-parser.jay: Use jay global stacks (saves over 3MB for corlib).
651
652 2009-11-27  Marek Safar  <marek.safar@gmail.com>
653
654         * ecore.cs (SimpleName): Removed no longer needed in_transit as
655         Resolve is now non-reentrant (saves ~0.6MB for corlib).
656
657 2009-11-26  Marek Safar  <marek.safar@gmail.com>
658
659         A fix for bug #545081
660         * decl.cs: Check private nested types of nested types recursively.
661
662 2009-11-26  Marek Safar  <marek.safar@gmail.com>
663
664         A fix for bug #558305
665         * location.cs: Ignore self referencing #line directive
666
667 2009-11-26  Marek Safar  <marek.safar@gmail.com>
668
669         A fix for bug #558292
670         * class.cs: Allow single unsafe fixed buffer fields.
671
672 2009-11-26  Marek Safar  <marek.safar@gmail.com>
673
674         * expression: Optimize few more zero-based operations.
675
676 2009-11-26  Marek Safar  <marek.safar@gmail.com>
677
678         * cs-tokenizer.cs, cs-parser.jay: Simplify literal parsing, also
679         avoids boxing of literal values.
680
681 2009-11-26  Marek Safar  <marek.safar@gmail.com>
682
683         * cs-tokenizer.cs, argument.cs, eval.cs, linq.cs, decl.cs,
684         expression.cs, ecore.cs, location.cs, cs-parser.jay, attribute.cs,
685         codegen.cs: LocatedToken redesing to avoid excessive allocation and
686         boxing (saves ~7MB for corlib). Also fixes presise token location.
687
688 2009-11-25  Marek Safar  <marek.safar@gmail.com>
689
690         * ecore.cs, cs-parser.jay: Keep parser structures local. Share
691         common data buckers.
692
693 2009-11-24  Marek Safar  <marek.safar@gmail.com>
694
695         * expression.cs: Lower static array initializer barrier.
696         
697         * support.cs, driver.cs: Share reader buffer.
698
699 2009-11-23  Marek Safar  <marek.safar@gmail.com>
700
701         * cs-tokenizer.cs, support.cs: Some tokenizer optimizations.
702
703 2009-11-23  Marek Safar  <marek.safar@gmail.com>
704
705         * cs-tokenizer.cs, support.cs: Use Dictionary instead of Hashtable,
706         cleanup some obsolete code.
707
708 2009-11-20  Marek Safar  <marek.safar@gmail.com>
709
710         * context.cs, expression.cs, ecore.cs, complete.cs: Cleaned up
711         Expression.Resolve.
712
713 2009-11-20  Marek Safar  <marek.safar@gmail.com>
714
715         * *.cs: Resolved expressions are never resolved again, this helps to
716         uncover some not easy to find bugs and improve the performance.
717
718 2009-11-19  Marek Safar  <marek.safar@gmail.com>
719
720         * *.cs: Made constant expressions fully compatible with any other
721         expression.
722
723 2009-11-19  Marek Safar  <marek.safar@gmail.com>
724
725         * *.cs: DoResolve is a worker method and has to be protected.
726
727 2009-11-18  Marek Safar  <marek.safar@gmail.com>
728
729         * *.cs: More context specific handling.
730
731 2009-11-17  Marek Safar  <marek.safar@gmail.com>
732
733         * *.cs: More context specific handling.
734
735 2009-11-16  Marek Safar  <marek.safar@gmail.com>
736
737         * dynamic.cs, class.cs: Removed few fixed user types conversions.
738         
739         * symbolwriter.cs: Uses public ILOffset.
740
741 2009-11-13  Marek Safar  <marek.safar@gmail.com>
742
743         A fix for bug #553650
744         * generic.cs: Another missing TypeToCoreType, still too many to fix.
745
746 2009-11-13  Marek Safar  <marek.safar@gmail.com>
747
748         A fix for bug #555170
749
750         * class.cs, delegate.cs, enum.cs: Constants have to be available
751         for parameters resolve.
752
753 2009-11-12  Marek Safar  <marek.safar@gmail.com>
754
755         * typemanager.cs, argument.cs, support.cs, delegate.cs: Dynamic
756         arrays.
757
758 2009-11-12  Marek Safar  <marek.safar@gmail.com>
759
760         * argument.cs, context.cs, expression.cs, ecore.cs: Dynamic binding
761         with a statically known candidate set.
762
763 2009-11-11  Scott Peterson  <lunchtimemama@gmail.com>
764
765         * generic.cs: Made type inflation for generic constraint checks
766         recursive. This fixes BGO #553655.
767
768 2009-11-11  Marek Safar  <marek.safar@gmail.com>
769
770         * dynamic.cs, decl.cs, expression.cs, ecore.cs: More dynamic type
771         checks.
772
773 2009-11-10  Marek Safar  <marek.safar@gmail.com>
774
775         * typemanager.cs, generic.cs, parameter.cs, argument.cs, dynamic.cs,
776         linq.cs, rootcontext.cs, ecore.cs, class.cs, delegate.cs,
777         attribute.cs: Add some dynamic error checking.
778
779 2009-11-07  Marek Safar  <marek.safar@gmail.com>
780
781         A fix for bug #553465
782
783         * expression.cs: Fixed mixed version of expression tree anonymous
784         type.
785
786 2009-11-06  Marek Safar  <marek.safar@gmail.com>
787
788         A fix for bug #553031
789
790         * linq.cs, expression.cs, class.cs, cs-parser.jay: Initialize
791         expression tree version of anonymous type with members declaration.
792
793 2009-11-05  Marek Safar  <marek.safar@gmail.com>
794
795         * parameter.cs: Handle nullable parameter default expression.
796         
797         * argument.cs, dynamic.cs, expression.cs, support.cs, ecore.cs,
798         class.cs, attribute.cs: Check for wrong dynamic arguments.
799
800 2009-11-05  Marek Safar  <marek.safar@gmail.com>
801
802         * statement.cs: Dynamic statements.
803
804 2009-11-04  Marek Safar  <marek.safar@gmail.com>
805
806         * dynamic.cs, assign.cs, context.cs, expression.cs, ecore.cs:
807         Compound assignments over dynamic type.
808
809 2009-11-03  Marek Safar  <marek.safar@gmail.com>
810
811         * argument.cs, dynamic.cs, expression.cs, delegate.cs: Dynamic
812         constructor arguments.
813
814 2009-10-30  Marek Safar  <marek.safar@gmail.com>
815
816         * dynamic.cs, convert.cs, assign.cs, constant.cs, expression.cs,
817         codegen.cs: Unary mutator on dynamic member access expression.
818
819 2009-10-29  Marek Safar  <marek.safar@gmail.com>
820
821         A fix for bug #550580   
822         * convert.cs: Don't eliminate explicit precission casts.
823
824 2009-10-28  Marek Safar  <marek.safar@gmail.com>
825
826         A fix for bug #550404
827         
828         * parameter.cs, iterators.cs, context.cs, anonymous.cs,
829         expression.cs, statement.cs, ecore.cs: Quote any nested expression
830         tree.
831
832 2009-10-27  Marek Safar  <marek.safar@gmail.com>
833
834         * constant.cs, nullable.cs: Create nullable-null as LiftedNull
835         constant.
836         
837         * class.cs: Allow nullable binary user operators.
838
839 2009-10-26  Marek Safar  <marek.safar@gmail.com>
840
841         * expression.cs: Move binary expression optimization at the end of
842         resolve.
843
844 2009-10-23  Marek Safar  <marek.safar@gmail.com>
845
846         * constant.cs, nullable.cs, expression.cs, literal.cs, cfold.cs:
847         Separate NullConstant from NullLiteral.
848
849 2009-10-23  Marek Safar  <marek.safar@gmail.com>
850
851         * typemanager.cs, eval.cs, decl.cs, roottypes.cs, context.cs,
852         anonymous.cs, expression.cs, rootcontext.cs, ecore.cs, class.cs,
853         flowanalysis.cs, cs-parser.jay, driver.cs, codegen.cs: Split
854         ModuleContainer. Add common unclosed member check routine.
855
856 2009-10-22  Marek Safar  <marek.safar@gmail.com>
857
858         * argument.cs: Use literal flag for real literals only.
859
860         * dynamic.cs: Use correct return type for custom delegates.
861
862 2009-10-22  Marek Safar  <marek.safar@gmail.com>
863
864         * dynamic.cs, expression.cs: Pass logical binary flag to dynamic
865         resolver.
866
867 2009-10-22  Marek Safar  <marek.safar@gmail.com>
868
869         * dynamic.cs, ecore.cs: Dynamic invocation with void return type.
870
871 2009-10-21  Marek Safar  <marek.safar@gmail.com>
872
873         * dynamic.cs, convert.cs, expression.cs, ecore.cs: Wrap array index
874         conversion.
875
876 2009-10-21  Marek Safar  <marek.safar@gmail.com>
877
878         * typemanager.cs, dynamic.cs, expression.cs: Don't resolve runtime
879         binder flags.
880
881 2009-10-20  Marek Safar  <marek.safar@gmail.com>
882
883         * argument.cs, dynamic.cs, expression.cs: Latest API update.
884
885 2009-10-19  Marek Safar  <marek.safar@gmail.com>
886
887         * typemanager.cs, expression.cs: Dynamic array initializer.
888
889 2009-10-16  Marek Safar  <marek.safar@gmail.com>
890
891         * typemanager.cs, rootcontext.cs: Clear -nostdlib flag when object
892         is imported.
893
894 2009-10-16  Marek Safar  <marek.safar@gmail.com>
895
896         A fix for bug #493523, #507067
897         * convert.cs, nullable.cs, expression.cs: Do implicit and explicit
898         standard nullable conversion using underlying standard conversion
899         and not full conversion.
900
901 2009-10-15  Marek Safar  <marek.safar@gmail.com>
902
903         * dynamic.cs, expression.cs, ecore.cs, delegate.cs: Check return
904         type in VerifyArgumentsCompat.
905
906 2009-10-15  Marek Safar  <marek.safar@gmail.com>
907
908         * nullable.cs, expression.cs, statement.cs, namespace.cs, ecore.cs:
909         Reject variable used with type arguments.
910
911 2009-10-14  Marek Safar  <marek.safar@gmail.com>
912
913         * argument.cs, dynamic.cs, assign.cs, expression.cs, ecore.cs:
914         Implement dynamic expressions assignment.
915
916 2009-10-14  Marek Safar  <marek.safar@gmail.com>
917
918         * expression.cs: Build underlying expression when resolving unary
919         mutators.
920
921 2009-10-14  Marek Safar  <marek.safar@gmail.com>
922
923         * expression.cs: Emit enum array initializer using binary blob.
924
925 2009-10-08  Marek Safar  <marek.safar@gmail.com>
926
927         * typemanager.cs, constant.cs: Optimize decimal constants which fit
928         to long range.
929
930 2009-10-07  Marek Safar  <marek.safar@gmail.com>
931
932         * typemanager.cs: Reset object_type.
933         
934         * assign: Made SimpleAssign public.
935
936 2009-10-06  Marek Safar  <marek.safar@gmail.com>
937
938         * typemanager.cs, decl.cs, namespace.cs, ecore.cs, class.cs: Pass
939         invocation assembly to IsThisOrFriendAssembly.
940
941 2009-10-05  Marek Safar  <marek.safar@gmail.com>
942
943         * expression.cs: Equality comparison of generic parameter with
944         class constraint.
945
946 2009-10-05  Marek Safar  <marek.safar@gmail.com>
947
948         A fix for bug #543570
949         * generic.cs: Import predefined constraints correctly.
950
951 2009-10-02  Marek Safar  <marek.safar@gmail.com>
952
953         * ecore.cs: Don't crash on overloads with optional paremeters where
954         arguments count overflows.
955         
956         * parameter.cs: Import optional parameter constants using optional
957         value type.
958
959 2009-10-01  Marek Safar  <marek.safar@gmail.com>
960
961         * Makefile: Default is gmcs compiler.
962
963 2009-10-01  Marek Safar  <marek.safar@gmail.com>
964
965         * cs-parser.jay: Fixed few NRE.
966
967 2009-10-01  Marek Safar  <marek.safar@gmail.com>
968
969         * cs-parser.jay, driver.cs: Expose parser exception in verbose mode.
970
971 2009-09-30  Marek Safar  <marek.safar@gmail.com>
972
973         * linq.cs, convert.cs, assign.cs, expression.cs, ecore.cs: Add
974         ShimExpression, ImplicitCast.
975
976 2009-09-30  Marek Safar  <marek.safar@gmail.com>
977
978         A fix for bug #542959
979         * delegate.cs: Emit correct delegate instance variable when there
980         are static and non-static overloads.
981
982 2009-09-29  Marek Safar  <marek.safar@gmail.com>
983
984         * dynamic.cs, linq.cs, anonymous.cs, expression.cs, statement.cs,
985         ecore.cs, cs-parser.jay: Unary expression dynamic compiler.
986
987 2009-09-28  Marek Safar  <marek.safar@gmail.com>
988
989         A fix for bug #542487
990         * ecore.cs: Resolve extension methods hidden by properties.
991
992 2009-09-25  Marek Safar  <marek.safar@gmail.com>
993
994         * expression.cs, ecore.cs: More dynamic binary expressions.
995
996 2009-09-22  Marek Safar  <marek.safar@gmail.com>
997
998         * nullable.cs, expression.cs: Fixed null lifted conversion for
999         bitwise enum operations.
1000
1001 2009-09-22  Marek Safar  <marek.safar@gmail.com>
1002
1003         * convert.cs, ecore.cs: Fixed explicit unsafe coversion of long
1004         values in checked context.
1005
1006 2009-09-22  Marek Safar  <marek.safar@gmail.com>
1007
1008         * expression.cs, ecore.cs: Fixed array index constant conversion.
1009
1010 2009-09-20  Miguel de Icaza  <miguel@novell.com>
1011
1012         * expression.cs: Do not crash when MemberLookup returns something
1013         that is not a MemberExpr here.   Report error 582 instead. 
1014
1015         Fixes #499988.
1016
1017 2009-09-18  Marek Safar  <marek.safar@gmail.com>
1018
1019         * decl.cs, class.cs: Check protected property accessors.
1020
1021 2009-09-18  Marek Safar  <marek.safar@gmail.com>
1022
1023         * dynamic.cs, assign.cs: Dynamic compound assignment.
1024
1025 2009-09-17  Marek Safar  <marek.safar@gmail.com>
1026
1027         * expression.cs: Fixed compound assignment explicit conversion.
1028
1029 2009-09-17  Marek Safar  <marek.safar@gmail.com>
1030
1031         * expression.cs, ecore.cs: Cannot infer variables from method group.
1032
1033 2009-09-16  Marek Safar  <marek.safar@gmail.com>
1034
1035         * argument.cs, dynamic.cs, convert.cs, context.cs, anonymous.cs,
1036         constant.cs, nullable.cs, expression.cs, literal.cs, ecore.cs,
1037         codegen.cs: Dynamic binary operations scaffolding.
1038
1039 2009-09-15  Marek Safar  <marek.safar@gmail.com>
1040
1041         * expression.cs: Fixes nullable promotion for enum type variables.
1042
1043 2009-09-11  Marek Safar  <marek.safar@gmail.com>
1044
1045         * driver.cs, dynamic.cs: Reset more static variables.
1046
1047 2009-09-11  Marek Safar  <marek.safar@gmail.com>
1048
1049         * dynamic.cs, expression.cs, rootcontext.cs, namespace.cs, ecore.cs,
1050         driver.cs: Introduced Expression::MakeExpression.
1051
1052 2009-09-11  Marek Safar  <marek.safar@gmail.com>
1053
1054         * eval.cs: Exposed MessageOutput instead of cleaning up eval API.
1055
1056 2009-09-09  Marek Safar  <marek.safar@gmail.com>
1057
1058         * eval.cs, report.cs: Use Console.Out for all eval error or warning
1059         output.
1060
1061 2009-09-09  Marek Safar  <marek.safar@gmail.com>
1062
1063         A fix for bug #518707
1064         * expression.cs (Is): Optimize only generic parameter type
1065         expression probing value type generic parameter.
1066
1067 2009-09-09  Marek Safar  <marek.safar@gmail.com>
1068
1069         A fix for bug #532571
1070         * ecore.cs: Check for simple name type arguments used with
1071         non-generic type.
1072
1073 2009-09-08  Marek Safar  <marek.safar@gmail.com>
1074
1075         A fix for bug #497421
1076         * generic.cs (CheckConstraint): Don't use buildin types to check for
1077         parameterless constructor.
1078
1079 2009-09-08  Marek Safar  <marek.safar@gmail.com>
1080
1081         A fix for bug #537402
1082         * generic.cs (CheckConstraint): Correctly inflate generic type
1083         arguments when checking generic method. 
1084
1085 2009-09-08  Marek Safar  <marek.safar@gmail.com>
1086
1087         A fix for bug #536463
1088         * decl.cs (AddToContainer): Don't report collision between explicit
1089         and parameterless non-explicit members.
1090
1091 2009-09-08  Marek Safar  <marek.safar@gmail.com>
1092
1093         * eval.cs: Reset more static stuff.
1094
1095 2009-09-07  Marek Safar  <marek.safar@gmail.com>
1096
1097         A fix for bug #324625
1098         * expression.cs, ecore.cs: Create nested generic type expression
1099         using declaring and not current type.
1100
1101 2009-09-07  Marek Safar  <marek.safar@gmail.com>
1102
1103         * *.cs: Changed Report class to accept various output printers and
1104         be an instance class. An expression resolver can now use different
1105         message reporter for each call and Report.Error can safely throw
1106         an exception. Part of ongoing work to turn mcs into proper library.
1107
1108 2009-09-04  Marek Safar  <marek.safar@gmail.com>
1109
1110         * statement.cs, ecore.cs: Removed error reporting from emit code.
1111
1112 2009-09-04  Marek Safar  <marek.safar@gmail.com>
1113
1114         * cs-parser.jay, parameter.cs: Moved parser check out of constructor
1115
1116 2009-09-03  Marek Safar  <marek.safar@gmail.com>
1117
1118         * anonymous.cs, expression.cs, statement.cs, cs-parser.jay: Moved
1119         parser checks out of constructors.
1120
1121 2009-09-02  Marek Safar  <marek.safar@gmail.com>
1122
1123         * expression.cs, statement.cs, ecore.cs: Use common Report.Error.
1124
1125 2009-09-02  Marek Safar  <marek.safar@gmail.com>
1126
1127         A fix for bug #535448
1128         * anonymous.cs, class.cs: Copy return label between all contexts.
1129
1130 2009-09-02  Marek Safar  <marek.safar@gmail.com>
1131
1132         A fix for bug #535395
1133         * namespace.cs: Resolve context can be null.
1134
1135 2009-08-25  Marek Safar  <marek.safar@gmail.com>
1136
1137         A fix for bug #533912
1138         * generic.cs: Use correct context for constraints resolving.
1139
1140 2009-08-25  Marek Safar  <marek.safar@gmail.com>
1141
1142         A fix for bug #532630
1143         * driver.cs: Trim conditional symbols.
1144
1145 2009-08-25  Marek Safar  <marek.safar@gmail.com>
1146
1147         * context.cs: New file.
1148         
1149         * *.exe.sources, *.csproj: Updated.
1150
1151 2009-08-25  Marek Safar  <marek.safar@gmail.com>
1152
1153         * generic.cs, parameter.cs, decl.cs, statement.cs, namespace.cs,
1154         class.cs, generic-mcs.cs, codegen.cs: Add GetSignatureForError to
1155         IMembercontext, some small cleanups.
1156
1157 2009-08-24  Marek Safar  <marek.safar@gmail.com>
1158
1159         * *.cs: Split ResolveContext and EmitContext.
1160
1161 2009-08-24  Marek Safar  <marek.safar@gmail.com>
1162
1163         * *.cs: Only ResolveContext implements IMemberContext.
1164
1165 2009-08-21  Marek Safar  <marek.safar@gmail.com>
1166
1167         * *.cs: Renamed IResolveContext to IMemberContext.
1168
1169 2009-08-21  Marek Safar  <marek.safar@gmail.com>
1170
1171         * *.cs: Detached ResolveContext from EmitContext.
1172
1173 2009-08-21  Marek Safar  <marek.safar@gmail.com>
1174
1175         * codegen.cs: Moved flow-analysis to BlockContext.
1176
1177 2009-08-21  Marek Safar  <marek.safar@gmail.com>
1178
1179         * *.cs: Detached BlockContext from EmitContext.
1180
1181 2009-08-20 Gonzalo Paniagua Javier <gonzalo@novell.com>
1182
1183         * statement.cs: avoid nullref when the return value of GetEnumerator()
1184         does not contain any MoveNext() method.
1185
1186 2009-08-19  Marek Safar  <marek.safar@gmail.com>
1187
1188         * *.cs: Removed IResolveContext::GenericDeclContainer.
1189
1190 2009-08-19  Marek Safar  <marek.safar@gmail.com>
1191
1192         * class.cs, delegate.cs: Changed Delegate to be TypeContainer based.
1193
1194 2009-08-19  Marek Safar  <marek.safar@gmail.com>
1195
1196         * generic.cs, iterators.cs, expression.cs, statement.cs, ecore.cs,
1197         cs-parser.jay, attribute.cs, codegen.cs: Better error reports.
1198
1199 2009-08-18  Marek Safar  <marek.safar@gmail.com>
1200
1201         * *.cs: Removed boolean fields from EmitContext.
1202
1203 2009-08-18  Marek Safar  <marek.safar@gmail.com>
1204
1205         * *.cs: Add IResolveContext::IsStatic.
1206
1207 2009-08-18  Marek Safar  <marek.safar@gmail.com>
1208
1209         * *.cs: Moved TopBlock's methods from EmitContext to TopBlock.
1210
1211 2009-08-17  Marek Safar  <marek.safar@gmail.com>
1212
1213         * *.cs: Removed DeclContainer from EmitContext.
1214
1215 2009-08-17  Marek Safar  <marek.safar@gmail.com>
1216
1217         * *.cs: Add IResolveContext::CurrentTypeParameters.
1218
1219 2009-08-14  Marek Safar  <marek.safar@gmail.com>
1220
1221         * *.cs: Removed TypeContainer and ContainerType from EmitContext.
1222
1223 2009-08-14  Marek Safar  <marek.safar@gmail.com>
1224
1225         * decl.cs, expression.cs, namespace.cs, ecore.cs, class.cs,
1226         codegen.cs: Add IResolveContext::LookupExtensionMethod.
1227
1228 2009-08-13  Marek Safar  <marek.safar@gmail.com>
1229
1230         * decl.cs: Look in PartialContainer for parent type parameters.
1231
1232 2009-08-13  Marek Safar  <marek.safar@gmail.com>
1233
1234         * decl.cs, namespace.cs, ecore.cs, class.cs, attribute.cs,
1235         codegen.cs: Add IResolveContext::LookupTypeParameter.
1236
1237 2009-08-13  Marek Safar  <marek.safar@gmail.com>
1238
1239         * lambda.cs, expression.cs, statement.cs, namespace.cs, ecore.cs:
1240         Moved resolved logic from Emit to Resolve.
1241
1242 2009-08-13  Marek Safar  <marek.safar@gmail.com>
1243
1244         * parameter.cs, decl.cs, roottypes.cs, class.cs, attribute.cs,
1245         codegen.cs: Reworked atttributes handling of ResolveContext.
1246
1247 2009-08-12  Marek Safar  <marek.safar@gmail.com>
1248
1249         * decl.cs, ecore.cs, class.cs, attribute.cs, codegen.cs: Pushed
1250         LookupNamespaceOrType to ResolveContext.
1251
1252 2009-08-12  Marek Safar  <marek.safar@gmail.com>
1253
1254         * typemanager.cs, decl.cs, expression.cs, namespace.cs, ecore.cs,
1255         class.cs: Removed unused parameters and methods.
1256
1257 2009-08-11  Marek Safar  <marek.safar@gmail.com>
1258
1259         * generic.cs, lambda.cs, anonymous.cs, statement.cs, generic-mcs.cs,
1260         codegen.cs: Finding the best common type of a set of expressions for
1261         lambda statements.
1262
1263 2009-08-07  Marek Safar  <marek.safar@gmail.com>
1264
1265         * dynamic.cs, expression.cs: More dynamic conversions.
1266
1267 2009-08-06  Miguel de Icaza  <miguel@novell.com>
1268
1269         * generic.cs: This loop was incorrect, it was increment ii, but
1270         checking for `i'.  This was a change introduced to fix #327497,
1271         now we fix #424012.
1272  
1273         * class.cs: Catch another case for cs0533 error, fixes #324782.
1274
1275 2009-08-06 Rodrigo Kumpera  <rkumpera@novell.com>
1276
1277         * typemanager.cs (GetGenericArguments): SRE returns null for
1278         generic methods on type builder instances if they are not generic
1279         themselves. For example, for Foo<int>::Bar() it returns null, but
1280         not for Foo<int>::Bar<>() or Foo<int>::Bar<double>().
1281
1282 2009-08-05  Marek Safar  <marek.safar@gmail.com>
1283
1284         * argument.cs, dynamic.cs, expression.cs, ecore.cs, class.cs,
1285         delegate.cs: Work on dynamic binding.
1286
1287 2009-08-04  Marek Safar  <marek.safar@gmail.com>
1288
1289         A second fix for bug #525342
1290         * class.cs: Attach partial method attributes to method
1291         implementation.
1292
1293 2009-08-03  Marek Safar  <marek.safar@gmail.com>
1294
1295         * typemanager.cs, parameter.cs, support.cs, class.cs: Dynamic type
1296         restrictions.
1297         
1298         * rootcontext.cs: Default to langversion v4.
1299
1300 2009-08-03  Marek Safar  <marek.safar@gmail.com>
1301
1302         * pending.cs: Check return type before member info is set.
1303
1304 2009-08-03  Marek Safar  <marek.safar@gmail.com>
1305
1306         * anonymous.cs: Fully initialize generic hoisted field expression.
1307
1308 2009-08-02  Miguel de Icaza  <miguel@novell.com>
1309
1310         * cs-parser.jay: Flag variables declared on the interactive shell
1311         as used to prevent the 168 warning about local variable not being
1312         used. 
1313
1314 2009-07-31  Marek Safar  <marek.safar@gmail.com>
1315
1316         * parameter.cs, dynamic.cs, support.cs, class.cs, delegate.cs,
1317         attribute.cs: Emit dynamic export attribute.
1318
1319 2009-07-30  Marek Safar  <marek.safar@gmail.com>
1320
1321         * expression.cs: More verifier work.
1322
1323 2009-07-29  Marek Safar  <marek.safar@gmail.com>
1324
1325         * nullable.cs: Fixed SRE crash during corlib compilation.
1326
1327 2009-07-29  Marek Safar  <marek.safar@gmail.com>
1328
1329         * generic.cs, typemanager.cs, decl.cs, iterators.cs, convert.cs,
1330         nullable.cs, expression.cs, ecore.cs, class.cs, attribute.cs:
1331         More TypeManager.TypeToCoreType needed.
1332
1333 2009-07-29  Marek Safar  <marek.safar@gmail.com>
1334
1335         * anonymous.cs: Update after recent SRE fixes.
1336
1337 2009-07-28  Marek Safar  <marek.safar@gmail.com>
1338
1339         * typemanager.cs, expression.cs, ecore.cs, delegate.cs: Use correct
1340         version of GetFieldHandle for fields of generic types.
1341
1342 2009-07-27  Marek Safar  <marek.safar@gmail.com>
1343
1344         * typemanager.cs, argument.cs, convert.cs, assign.cs, expression.cs,
1345         ecore.cs: Add TypeManager.IsDynamicType,
1346         PredefinedAttributes.Dynamic.
1347
1348 2009-07-27  Marek Safar  <marek.safar@gmail.com>
1349
1350         A fix for bug #415375
1351         * expression.cs: Fixed object and reference type parameter
1352         comparison.
1353
1354 2009-07-27  Marek Safar  <marek.safar@gmail.com>
1355
1356         A fix for bug #525342
1357         * class.cs: Attach partial method attributes to method
1358         implementation.
1359
1360 2009-07-24  Marek Safar  <marek.safar@gmail.com>
1361
1362         * argument.cs, dynamic.cs, expression.cs, class.cs, attribute.cs:
1363         Dynamic arguments.
1364
1365 2009-07-24  Marek Safar  <marek.safar@gmail.com>
1366
1367         * anonymous.cs (MutateField): Add imported types handling.
1368
1369 2009-07-23  Marek Safar  <marek.safar@gmail.com>
1370
1371         * expression.cs, delegate.cs: Moved arguments resolve into their
1372         counterparts expressions. Removed argument resolve from
1373         CollectionElementInitializer.
1374
1375 2009-07-23  Marek Safar  <marek.safar@gmail.com>
1376
1377         A fix for bug #523683
1378         * convert.cs, delegate.cs: Use common overload mechanism for method
1379         group conversion check.
1380
1381 2009-07-22  Marek Safar  <marek.safar@gmail.com>
1382
1383         A fix for bug #523899
1384         * generics.cs: Exact type inference with other bound types.
1385
1386 2009-07-22  Raja R Harinath  <harinath@hurrynot.org>
1387
1388         Don't complain when the same type is implemented by the output
1389         assembly as well as multiple referenced assemblies
1390         * namespace.cs (RootNamespace.LookupTypeReflection): Add
1391         'must_be_unique' flag.
1392         (GlobalRootNamespace): Update to changes.
1393         (Namespace.LookupType): Pass 'must_be_unique' only when we don't
1394         already have a type in hand.
1395
1396 2009-07-22  Marek Safar  <marek.safar@gmail.com>
1397
1398         * expression.cs: More verifier instrumentation.
1399         
1400         * statement.cs: Do proper throw expression conversion.
1401
1402 2009-07-22  Marek Safar  <marek.safar@gmail.com>
1403
1404         A fix for bug #522789
1405         * expression.cs: Mutate invocation return type.
1406
1407 2009-07-16  Marek Safar  <marek.safar@gmail.com>
1408
1409         * anonymous.cs: Split assignable and readonly generated variable
1410         references.
1411
1412 2009-07-16  Marek Safar  <marek.safar@gmail.com>
1413
1414         A fix for bug #521671
1415         * statement.cs: Fixed crash when checking missing type.
1416
1417 2009-07-16  Marek Safar  <marek.safar@gmail.com>
1418
1419         * typemanager.cs, generic.cs, argument.cs, linq.cs, convert.cs,
1420         assign.cs, expression.cs, statement.cs, support.cs, ecore.cs,
1421         class.cs, driver.cs: Work on dynamic binding.
1422
1423         * dynamic.cs: New file.
1424
1425         * *.sources, *.proj: Updated.
1426
1427 2009-07-15  Marek Safar  <marek.safar@gmail.com>
1428
1429         * expression.cs (Conditional): Avoid double Resolve.
1430
1431 2009-07-13  Marcus Griep  <marcus@griep.us>
1432
1433         * ecore.cs: Fix obscure bug with resolving members of interfaces
1434         that hide parent interface members. Fixes bug #444388 and corrects
1435         bug #323096
1436
1437 2009-07-13  Marek Safar  <marek.safar@gmail.com>
1438
1439         * expression.cs (LocalVariableReference): Bounce resolve.
1440
1441 2009-07-10  Marek Safar  <marek.safar@gmail.com>
1442
1443         * typemanager.cs, lambda.cs, parameter.cs, convert.cs, anonymous.cs,
1444         expression.cs, literal.cs, ecore.cs, complete.cs: Moved internal
1445         types to new class.
1446         
1447         * support.cs: New dynamic type wrapper.
1448
1449 2009-07-08  Marek Safar  <marek.safar@gmail.com>
1450
1451         * ecore.cs, cs-parser.jay: Better error reporting for implicitly
1452         typed local variable.
1453
1454 2009-07-06  Marek Safar  <marek.safar@gmail.com>
1455
1456         A fix for bug #519005
1457         * anonymous.cs: Use null_type as no return type placeholder.
1458
1459 2009-07-02  Marek Safar  <marek.safar@gmail.com>
1460
1461         * generic.cs: Handle type inference of identical type parameters
1462         with different bounds.
1463
1464 2009-07-01  Marek Safar  <marek.safar@gmail.com>
1465
1466         * expression.cs, class.cs: Events variance.
1467         
1468         * cs-parser.jay: Interface events error messages.
1469
1470 2009-07-01  Marek Safar  <marek.safar@gmail.com>
1471
1472         * generic.cs, argument.cs: Updated type inference logic to C# 4.0.
1473
1474 2009-06-29  Marek Safar  <marek.safar@gmail.com>
1475
1476         * parameter.cs, convert.cs, expression.cs, class.cs: Default
1477         parameter expression can be value-type New.
1478
1479         * cs-parser.jay: Clean up too many parameter modifier boolean flags.
1480
1481 2009-06-26  Marek Safar  <marek.safar@gmail.com>
1482
1483         * generic.cs, argument.cs, expression.cs, ecore.cs, cs-parser.jay:
1484         Implemented C# 4.0 named arguments.
1485
1486 2009-06-24  Marek Safar  <marek.safar@gmail.com>
1487
1488         * typemanager.cs, parameter.cs, iterators.cs, convert.cs,
1489         expression.cs, ecore.cs, delegate.cs: Removed unnecessary ArgList
1490         parameter modifier. Also fixes bug #515497.
1491
1492 2009-06-24  Marek Safar  <marek.safar@gmail.com>
1493
1494         * *.cs: Replaced ArrayList with Arguments in need of a nonsequential 
1495         arguments expression to be implemented.
1496         
1497         *.sources: Add argument.cs
1498
1499 2009-06-23  Marek Safar  <marek.safar@gmail.com>
1500
1501         * parameter.cs: Moved GetParameterIndexByName to base class.
1502         
1503         * expression.cs, statement.cs, ecore.cs, delegate.cs: Removed
1504         unused AType. Use argument's version of GetExpressionTree.
1505
1506 2009-06-22  Marek Safar  <marek.safar@gmail.com>
1507
1508         * expression.cs, cs-parser.jay, attribute.cs, codegen.cs: Named
1509         arguments grammar.
1510
1511 2009-06-17  Marek Safar  <marek.safar@gmail.com>
1512
1513         A fix for bug #514096
1514         * class.cs: Allow IntPtr/UIntPtr fields to be volatile.
1515
1516 2009-06-17  Marek Safar  <marek.safar@gmail.com>
1517
1518         * expression.cs: The first multi-dimensional array nested array
1519         initializers was not checked.
1520         
1521         * statement.cs (Switch): Fixed error message to reflect 2.0 changes.
1522
1523 2009-06-17  Marek Safar  <marek.safar@gmail.com>
1524
1525         A fix for bug #513400
1526         * nullable.cs (EmitEquality): Operands emit could be simplified for
1527         built-in types when we now emit user operators differently.
1528
1529 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1530
1531         * ecore.cs: Report inaccessible delegate methods correctly.
1532
1533 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1534
1535         * parameter.cs, expression.cs, ecore.cs, class.cs, delegate.cs,
1536         cs-parser.jay: Implemented C# 4.0 optional parameters.
1537
1538 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1539
1540         * driver.cs: Removed broken DefineManifestResource.
1541
1542 2009-06-16  Raja R Harinath  <harinath@hurrynot.org>
1543
1544         * Makefile [net_2_0_bootstrap]: Don't explicitly mention net_1_1.
1545         Use $(BOOTSTRAP_PROFILE) instead.
1546
1547 2009-06-12  Jb Evain  <jbevain@novell.com>
1548
1549         * rootcontext.cs: add a Platform field.
1550         * driver.cs: handle /platform.
1551         * codegen.cs: pass the proper flags according to
1552         the platform when saving the assembly.
1553
1554 2009-06-11  Marek Safar  <marek.safar@gmail.com>
1555
1556         * parameter.cs, const.cs, report.cs, cs-parser.jay, attribute.cs:
1557         Add optional parameters grammar.
1558
1559 2009-06-10  Marek Safar  <marek.safar@gmail.com>
1560
1561         * eval.cs, anonymous.cs, report.cs, rootcontext.cs, cs-parser.jay,
1562         driver.cs: Split lang version and metadata version.
1563
1564 2009-06-10  Marek Safar  <marek.safar@gmail.com>
1565
1566         * decl.cs: Better overload ctor collision error message.
1567
1568 2009-06-05  Jb Evain  <jbevain@novell.com>
1569
1570         * driver.cs (EmbededResource): avoid using an internal method
1571         in gmcs to embed manifest resources.
1572
1573 2009-06-04  Sebastien Pouliot  <sebastien@ximian.com>
1574
1575         * generic.cs, parameter.cs: Avoid using 'var' so we can bootstrap
1576         the compiler from older mono versions (like moon's bots)
1577
1578 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1579
1580         * namespace.cs (LookupTypeReflection): Ignore collisions between
1581         forwarded types.
1582
1583 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1584
1585         * codegen.cs: Enabled generic type forwarders.
1586
1587 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1588
1589         * dmcs.*: Add another version of SRE compiler.
1590
1591 2009-06-03  Marek Safar  <marek.safar@gmail.com>
1592
1593         * generic.cs, typemanager.cs, parameter.cs, convert.cs,
1594         generic-mcs.cs: Fixed variant type conversions.
1595
1596 2009-06-02  Marek Safar  <marek.safar@gmail.com>
1597
1598         A fix for bug #507863
1599         * codegen.cs: Fixes a crash on invalid string value attribute.
1600
1601 2009-06-01  Marek Safar  <marek.safar@gmail.com>
1602
1603         A fix for bug #508334
1604         * typemanager.cs, parameter.cs, convert.cs, expression.cs, ecore.cs,
1605         cs-parser.jay: Fully import __arglist modifier.
1606
1607 2009-05-29  Marek Safar  <marek.safar@gmail.com>
1608
1609         * generic.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs,
1610         delegate.cs, generic-mcs.cs: Rewrote type variance checks to
1611         actually work with closed generic types.
1612
1613 2009-05-27  Alan McGovern  <amcgovern@novell.com>
1614
1615         * class.cs, decl.cs, delegate.cs, parameter.cs: 
1616         Fix the build by replacing the use of 'var' with the actual type.
1617
1618 2009-05-27  Marek Safar  <marek.safar@gmail.com>
1619
1620         * generic.cs, parameter.cs, decl.cs, ecore.cs, class.cs, delegate.cs
1621     cs-parser.jay, generic-mcs.cs: Report wrong variant types
1622         declarations.
1623           
1624         * driver.cs, rootcontext.cs, report.cs: Add 3.0 language version
1625         filter.
1626
1627 2009-05-26  Rodrigo Kumpera  <rkumpera@novell.com>
1628                         Marek Safar  <marek.safar@gmail.com>
1629
1630         A fix for bug #377509
1631         * parameter.cs: Use predefined and not empty name for implicit
1632         setters.
1633
1634 2009-05-21  Marek Safar  <marek.safar@gmail.com>
1635
1636         * class.cs: Don't report wrong warnings for event fields.
1637
1638 2009-05-21  Marek Safar  <marek.safar@gmail.com>
1639
1640         A fix for bug #504667
1641         * class.cs: Check for static class using parent container instead of
1642         parent type.
1643
1644 2009-05-08  Marek Safar  <marek.safar@gmail.com>
1645
1646         A fix for bug #496922
1647         * expression.cs: Always use temporary variable when using object
1648         initializer.
1649
1650 2009-04-28  Marek Safar  <marek.safar@gmail.com>
1651
1652         A fix for bug #495112
1653         * class.cs (IsUnmanagedType): Handle recursive unmanaged types using
1654         local cache.
1655
1656 2009-04-27  Miguel de Icaza  <miguel@novell.com>
1657
1658         * driver.cs: Add a flag to work as a replacement for CSC in VS.
1659
1660 2009-04-24  Miguel de Icaza  <miguel@novell.com>
1661
1662         * complete.cs: No idea how gonzalo got a null in the list, but
1663         avoid crashing.
1664
1665 2009-04-24  Miguel de Icaza  <miguel@novell.com>
1666
1667         * complete.cs (CompletionElementInitializer): New completion class
1668         to support completing inside a C# 3 element initializer, so this
1669         allows completion for Silverlight situations where it is very
1670         common to do:
1671
1672         new TextBlock () { Fo<TAB>
1673
1674         (CompletionSimpleName): Expose the prefix that was
1675         passed to the simple name.
1676
1677         * cs-parser.jay (object_or_collection_initializer): Add support
1678         for element_initializers.
1679
1680         * expression.cs (CollectionOrObjectInitializers.DoResolve):
1681         special case completion expressions as this method aggressively
1682         collects data before it operates, and errors were being thrown
1683         earlier than we were able to complete.
1684
1685 2009-04-23  Miguel de Icaza  <miguel@novell.com>
1686
1687         * eval.cs: Make getcompletions silent and enable debugging output
1688         if the -v option is passed.
1689
1690         * namespace.cs (NamespaceEntry.CompletionGetTypesStartingWith):
1691         Consider looking up the namespace that matches the prefix being
1692         used. 
1693
1694         This is part of the support for allowing completions like:
1695         `System.Co<TAB>' to complete to System.Console.
1696
1697         * complete.cs (CompletionSimpleName.AppendResults): Make this
1698         routine reusable.
1699
1700 2009-04-21  Raja R Harinath  <harinath@hurrynot.org>
1701
1702         * cs-parser.jay (GetTokenName): Mark GENERATE_COMPLETION and
1703         COMPLETE_COMPLETION as internal.
1704
1705 2009-04-17  Miguel de Icaza  <miguel@novell.com>
1706
1707         * complete.cs: Include namespace resolution in simple names as
1708         well as global types and types in the using scope in the
1709         resolution. 
1710
1711         * namespace.cs: Supporting infrastrcture to provide completions
1712         based on the current using scope. 
1713
1714         * eval.cs: Introduce an entry point that allows for initialization
1715         to return a list of the files passed on the command line.
1716
1717 2009-04-14  Marek Safar  <marek.safar@gmail.com>
1718
1719         A fix for bug #494243
1720         * report.cs (SymbolRelatedToPreviousError): Fixed NRE.
1721
1722 2009-04-13  Marek Safar  <marek.safar@gmail.com>
1723
1724         A fix for bug #493887
1725         * statement.cs: Don't skip string multi-section with default or
1726         null label when populating string hashtable.
1727
1728 2009-04-06  Marek Safar  <marek.safar@gmail.com>
1729
1730         A fix for bug #492329
1731         * expression.cs (New): Load variable when assigning type parameter
1732         to ref variable.
1733
1734 2009-04-06  Marek Safar  <marek.safar@gmail.com>
1735
1736         A fix for bug #488960
1737         * decl.cs: Compare MVAR types using non-null values.
1738
1739 2009-03-27  Marek Safar  <marek.safar@gmail.com>
1740
1741         * typemanager.cs, expression.cs: Removed unused nullable checks.
1742
1743 2009-03-27  Marek Safar  <marek.safar@gmail.com>
1744
1745         * *.cs: Removed some gmcs conditionals.
1746
1747 2009-03-26  Marek Safar  <marek.safar@gmail.com>
1748
1749         * generic.cs, support.cs: Moved generics stuff out of support.cs
1750
1751 2009-03-24  Marek Safar  <marek.safar@gmail.com>
1752
1753         * ecore.cs, expression.cs: Use queried type for MethodGroupExpr
1754         DeclaringType.
1755
1756 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1757
1758         * attribute.cs: Consider all members for error reporting when
1759         checking named arguments.
1760
1761 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1762
1763         A fix for bug #487625
1764         * namespace.cs: Use a warning for all predefined type conflicts.
1765
1766 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1767
1768         A fix for bug #485706
1769         * statement.cs: Explicitly type catch type argument to pass verifier
1770         check.
1771
1772 2009-03-22  Miguel de Icaza  <miguel@novell.com>
1773
1774         Initial support to provide code completion facilities to consumers
1775         of the evaluator API.
1776         
1777         * cs-tokenizer.cs (CompleteOnEOF): this new property is used to
1778         support the completion engine.   When we reach the end of the
1779         input stream instead of returning EOF, when this flag is true the
1780         tokenizer instead produces:
1781
1782                 One GENERATE_COMPLETION token: this token then must be
1783                 handled in the grammar at every point where the user
1784                 would likely request a completion.
1785
1786                 As many COMPLETE_COMPLETION tokens as necessary.   These
1787                 tokens are generated to assist the parser in unwinding and
1788                 producing a valid parse tree.    
1789
1790         The parser rules do not have to be perfect, the parser needs to be
1791         augmented with judicious use of GENERATE_COMPLETION tokens to
1792         improve the areas where we can provide completion and the parser
1793         needs to add support for COMPLETE_COMPLETION tokens in productions
1794         to make them work.
1795
1796         It is common to not have enough support for COMPLETE_COMPLETION
1797         under certain rules and that even if we generated the
1798         GENERATE_COMPLETION token that the resulting tree will be invalid
1799         due to the missing rules that support COMPLETE_COMPLETION.
1800
1801         The final EOF token is produced by having the parser notify the
1802         tokenizer when it reaches the root production that the next token
1803         should be EOF.
1804
1805         * support.cs (CompletionResult): New Exception.   This exception
1806         is thrown to return the completion results when one of the special
1807         completion expressions is reached.
1808
1809         This exception is thrown by the completing ExpressionStatements
1810         classes that live in complete.cs
1811
1812         * complete.cs (CompletingExpression): a new base class for
1813         completing expressions.   This derives from the
1814         ExpressionStatement class and not from Expression as it allows
1815         completion to happen not only where expressions are expected in
1816         the grammar, but also where statements are expected.
1817
1818         (CompletionSimpleName): A new class used to provide completions
1819         for SimpleNames.     This currently only resolves to local
1820         variables from the evaluator context (GetVars call).
1821
1822         (CompletionMemberAccess): Implements support for completing member
1823         access patterns. 
1824
1825         * cs-parser.jay: Add support for completion in a few places. 
1826
1827         * eval.cs (GetCompletions): New public API for the evaluator that
1828         returns a list of possible completions given the input.   The
1829         return value is an array of completions 
1830
1831         * anonymous.cs (Compatible): If the exception thrown from the
1832         resolved expression is a CompletionResult exception let that one
1833         through instead of printing a diagnostic error in the try/catch. 
1834 <       
1835 2009-03-22  Miguel de Icaza  <miguel@novell.com>
1836
1837         * 
1838
1839         * driver.cs (Main): Use Environment.Exit to quit quickly and
1840         prevent the compiler from doing the usual wait for helper thread
1841         to terminate.  
1842
1843         This is to prevent a slowdown that was reported by Gonzalo on
1844         ASP.NET 
1845
1846 2009-03-19  Marek Safar  <marek.safar@gmail.com>
1847
1848         * ecore.cs: Load build-in types directly instead of accessing
1849         an internal field.
1850
1851 2009-03-18  Marek Safar  <marek.safar@gmail.com>
1852
1853         * ecore.cs: Always use unbox.any when available.
1854
1855 2009-03-18  Marek Safar  <marek.safar@gmail.com>
1856
1857         * class.cs: Always set TypeAttributes.BeforeFieldInit conditionally.
1858
1859 2009-03-17  Marek Safar  <marek.safar@gmail.com>
1860
1861         * generic.cs: Removed obsolete version of type inference.
1862
1863 2009-03-16  Marek Safar  <marek.safar@gmail.com>
1864
1865         * typemanager.cs, decl.cs, roottypes.cs, anonymous.cs, nullable.cs,
1866         expression.cs, rootcontext.cs, namespace.cs, ecore.cs, class.cs,
1867         delegate.cs, flowanalysis.cs, cs-parser.jay, driver.cs,
1868         attribute.cs, codegen.cs: Changed RootTypes to be ModuleContainer.
1869
1870 2009-03-11  Marek Safar  <marek.safar@gmail.com>
1871
1872         A fix for bug #482996
1873         * anonymous.cs: Make sure we are not infering return type when
1874         checking type compatibility.
1875
1876 2009-03-11  Marek Safar  <marek.safar@gmail.com>
1877
1878         * typemanager.cs, generic.cs, parameter.cs, decl.cs, const.cs,
1879         rootcontext.cs, namespace.cs, class.cs, delegate.cs, driver.cs,
1880         generic-mcs.cs, attribute.cs, codegen.cs: Maintain predefined
1881         attributes in their own structure. Needed when accessing their
1882         properties before they are resolved.
1883
1884 2009-03-09  Marek Safar  <marek.safar@gmail.com>
1885
1886         * cs-tokenizer.cs: Optimized GetKeyword using an array instead of
1887         hashtable (~10x faster).
1888         
1889         * driver.cs: Removed wrong Reset.
1890
1891 2009-03-08  Marek Safar  <marek.safar@gmail.com>
1892
1893         * class.cs: Use correct common base type for unmanaged delayed
1894         check.
1895
1896         * rootcontext.cs: Wrap unhandled exception.
1897
1898 2009-03-06  Raja R Harinath  <harinath@hurrynot.org>
1899
1900         Make SeekableStreamReader self-tuning and arbitrarily seekable
1901         * support.cs (SeekableStreamReader.ResetStream): New.  Allocates
1902         the buffer.
1903         (SeekableStreamReader.Position.set): Use it.  Simplify logic
1904         which, as a side-effect, makes it arbitrarily-seekable.  Tune the
1905         buffer size when the stream needs to be re-read from the beginning.
1906
1907 2009-03-05  Marek Safar  <marek.safar@gmail.com>
1908
1909         A fix for bug #480100
1910         * parameter.cs: A parameter is not hoisted when used directly as ET.
1911
1912 2009-03-04  Marek Safar  <marek.safar@gmail.com>
1913
1914         * statement.cs: Fixed an issue when using variable is of interface
1915         type.
1916
1917 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1918
1919         A fix for bug #480319
1920         * report.cs, driver.cs: Support -warnaserror-:<warning list> option.
1921
1922 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1923
1924         A fix for bug #480867
1925         * typemanager.cs, expression.cs, ecore.cs: Changed method group
1926         expression to have no valid type.
1927
1928 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1929
1930         A fix for bug #481258
1931         * class.cs: Set extension method flag in partial container.
1932
1933 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1934
1935         * statement.cs, typemanager.cs: Use expression for StringEmitter.
1936         
1937         * attribute.cs: Add sanity check.
1938
1939 2009-02-27  Marek Safar  <marek.safar@gmail.com>
1940
1941         * class.cs: Add external constructor error.
1942
1943 2009-02-26  Marek Safar  <marek.safar@gmail.com>
1944
1945         A fix for bug #475354
1946         * convert.cs, nullable.cs, expression.cs, statement.cs: Emit
1947         correctly user defined nullable equality operators.
1948
1949 2009-02-25  Marek Safar  <marek.safar@gmail.com>
1950
1951         A fix for bug #479532
1952         * expression.cs: Implement NewInitialize::AddressOf.
1953
1954 2009-02-25  Marek Safar  <marek.safar@gmail.com>
1955
1956         A fix for bug #413633
1957         * expression.cs: Iterate all base class-constraint types.
1958
1959 2009-02-24  Marek Safar  <marek.safar@gmail.com>
1960
1961         A fix for bug #479209
1962         * literal.cs: Mutate null underlying type.
1963
1964 2009-02-24  Marek Safar  <marek.safar@gmail.com>
1965
1966         A fix for bug #476295
1967         * convert.cs: Avoid wrapping implicitly convertible reference type.
1968
1969 2009-02-23  Marek Safar  <marek.safar@gmail.com>
1970
1971         * iterators.cs: Create MemberName correctly.
1972
1973 2009-02-23  Marek Safar  <marek.safar@gmail.com>
1974
1975         A fix for bug #478655
1976         * literal.cs: Check also underlying null type conversion.
1977
1978 2009-02-21  Marek Safar  <marek.safar@gmail.com>
1979
1980         * generic.cs, ecore.cs, class.cs: Removed redundant AsAccessible.
1981
1982 2009-02-20  Marek Safar  <marek.safar@gmail.com>
1983
1984         A fix for bug #477447
1985         * statement.cs: Add reference to correct parent storey when this
1986         is accessible from deep children storey (more than 1 level).
1987
1988 2009-02-19  Marek Safar  <marek.safar@gmail.com>
1989
1990         A fix for bug #475860 by David Mitchell <dmitchell@logos.com>
1991         * class.cs: Define base type members before setting up member cache.
1992
1993 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1994
1995         A fix for bug #477378
1996         * nullable.cs, expression.cs, statement.cs: More precise null type
1997         sanity checks.
1998
1999 2009-02-18  Marek Safar  <marek.safar@gmail.com>
2000
2001         A fix for bug #472805
2002         * typemanager.cs, namespace.cs: Import only visible extension method
2003         types.
2004
2005 2009-02-18  Marek Safar  <marek.safar@gmail.com>
2006
2007         A fix for bug #476895
2008         * attribute.cs: Use correct resolve context for attribute type.
2009
2010 2009-02-18  Marek Safar  <marek.safar@gmail.com>
2011
2012         A fix for bug #476266
2013         * anonymous.cs: Mutate multi-dimensional arrays.
2014
2015 2009-02-18  Marek Safar  <marek.safar@gmail.com>
2016
2017         A fix for bug #476400
2018         * statement.cs, expression.cs: Removed wrong Dispose optimization.
2019
2020 2009-02-18  Marek Safar  <marek.safar@gmail.com>
2021
2022         A fix for bug #476811
2023         * generics.cs: Fixed null-literal check.
2024
2025 2009-02-17  Marek Safar  <marek.safar@gmail.com>
2026
2027         * typemanager.cs, convert.cs, flowanalysis.cs, driver.cs,
2028         expression.cs, ecore.cs, rootcontext.cs, eval.cs, class.cs: More
2029         messing with static variables.
2030
2031 2009-02-16  Marek Safar  <marek.safar@gmail.com>
2032
2033         A fix for bug #475965
2034         * generics.cs: Check generic parameter type after extracting from
2035         Expression<T>.
2036
2037 2009-02-16  Marek Safar  <marek.safar@gmail.com>
2038
2039         A fix for bug #475823
2040         * convert.cs, expression.cs, literal.cs, ecore.cs, cfold.cs: Add
2041         typed-null support.
2042
2043 2009-02-14  Marek Safar  <marek.safar@gmail.com>
2044
2045         * modifiers.cs, decl.cs, ecore.cs, class.cs, flowanalysis.cs:
2046         Simplified event field definition using backing field and not
2047         field builder directly.
2048
2049         * expression.cs (EmitLdArg): Optimize fast paths.
2050
2051 2009-02-13  Marek Safar  <marek.safar@gmail.com>
2052
2053         A fix for bug #475327
2054         * expression.cs (ArrayCreation): Don't mutate values optimized away.
2055
2056 2009-02-13  Marek Safar  <marek.safar@gmail.com>
2057
2058         A fix for bug #475342
2059         * cs-parser.jay: Using 'super' instead of 'base' to call base
2060         constructor crashes compiler.
2061
2062 2009-02-13  Marek Safar  <marek.safar@gmail.com>
2063
2064         A fix for bug #475354
2065         * expression.cs (Constantify): Add nullable types.
2066         
2067         * const.cs (EmitDecimalConstant): Avoid explicit cast.
2068
2069 2009-02-12  Marek Safar  <marek.safar@gmail.com>
2070
2071         A fix for bug #475246
2072         * expression.cs: More broken flowanalysis hacking needed.
2073
2074 2009-02-12  Marek Safar  <marek.safar@gmail.com>
2075
2076         * attribute.cs: Compare only ref/out array modifiers. 
2077
2078 2009-02-11  Marek Safar  <marek.safar@gmail.com>
2079
2080         * statement.cs: Use member cache when looking for foreach members.
2081
2082 2009-02-11  Marek Safar  <marek.safar@gmail.com>
2083
2084         * expression.cs: Don't expose internal initializer types.
2085         
2086         * statement.cs: Check also explicit conversions for goto case.
2087
2088 2009-02-11  Marek Safar  <marek.safar@gmail.com>
2089
2090         * convert.cs, statement.cs: Removed usage of IsAssignableFrom.
2091
2092 2009-02-10  Marek Safar  <marek.safar@gmail.com>
2093
2094         * *.cs: Replace null-type with NullLiteral where appropriate.
2095
2096 2009-02-09  Marek Safar  <marek.safar@gmail.com>
2097
2098         * expression.cs: Initializer of reference argument use temporary
2099         variable to be verifiable.
2100         
2101         * parameter.cs: Share EmitLdArg.
2102
2103 2009-02-09  Marek Safar  <marek.safar@gmail.com>
2104
2105         A fix for bug #473559
2106         * class.cs: Fixed: Not reporting error about nested class with the
2107         same name.
2108
2109 2009-02-06  Scott Peterson  <lunchtimemama@gmail.com>
2110
2111         Contributed under the MIT/X11 license.
2112
2113         * generic.cs: Added VerifyVariantTypeParameters which performs new
2114         variance verification logic. The old logic, based on the spec, was
2115         wrong because the spec is full of LIES!
2116
2117         * generic-mcs.cs: Stubbed out the VerifyVariantTypeParameters method.
2118
2119         *typemanager.cs: Moved variance verification logic to GenericTypeExpr.
2120
2121         * class.cs:
2122         * ecore.cs: Added calls to the new variance verification logic.
2123
2124         * parameter.cs:
2125         * delegate.cs: Removed calls to the old variance verification logic.
2126
2127 2009-02-06  Marek Safar  <marek.safar@gmail.com>
2128
2129         * delegate.cs: Use cached Invoke method directly.
2130
2131 2009-02-06  Marek Safar  <marek.safar@gmail.com>
2132
2133         * expression.cs: Emit expression tree for hoisted variable access.
2134
2135 2009-02-04  Marek Safar  <marek.safar@gmail.com>
2136
2137         * namespace.cs: Add better extension class check.
2138
2139 2009-02-05  Scott Peterson  <lunchtimemama@gmail.com>
2140
2141         * generic.cs: Fixed typeo (TypeParameter.Variacne).
2142
2143 2009-02-04  Scott Peterson  <lunchtimemama@gmail.com>
2144
2145         This patch adds initial generic variance support to the compiler.
2146         It is contributed under the MIT/X11 license.
2147
2148         * typemanager.cs: Modified ImplementsInterface to check variance.
2149         Added VerifyVariantTypeParameters which checks the specified type to see
2150         if it uses a variant type parameter as a type argument (which is not
2151         allowed). Added IsVariantOf which determins if the first type is a
2152         variant of the second. NOTE: This only supports reference types at
2153         the moment to conform with the current level of VM support. When the
2154         VM supports value types, this will follow step.
2155
2156         * generic.cs: Added the Variance enum. Added a Variance property to
2157         TypeParameter and added variance support to definition phase. Added a
2158         Variance property to TypeParameterName. Also check to make sure that
2159         no variant types appear in generic method parameters.
2160
2161         * cs-tokenizer.cs: Modified parse_less_than to tokenize the variance
2162         keywords if the langversion supports it.
2163
2164         * parameter.cs: Added Parameter.VerifyNoVariantTypeParameters to ensure
2165         that variant types are only used in legal positions. Also added
2166         ParametersCompiled.VerifyNoVariantTypeParameters to check all of its
2167         parameters.
2168
2169         * decl.cs: Construct TypeParameter with the variance information.
2170
2171         * convert.cs: Checks variance in ImplicitReferenceConversionExists
2172         and ImplicitConversionStandard.
2173
2174         * rootcontext.cs: Added new "Future" language version.
2175
2176         * class.cs: In TypeContainer.DoDefineMembers, ensure that contravariant
2177         type parameters are not used as type arguments in interface inheritance.
2178         In MemberBase.DoMemberDependentChecks, ensure that contravariant type
2179         parameters are not used as method return types. In MemberBase.
2180         ResolveMemberType, ensure that variant type parameters are not used
2181         as type arguments. Also call VerifyNoVariantTypeParameters on every
2182         set of parameters which are resolved.
2183
2184         * delegate.cs: Modified Delegate.Define to ensure that variant
2185         parameters are not used as type arguments and that a contravariant
2186         parameter is not used as the return type. Also call
2187         VerifyNoVariantTypeParameters on the delegate parameters.
2188
2189         * cs-parser.jay: Modified grammar to support "in" and "out" keywords
2190         to specify generic variance.
2191
2192         * driver.cs: Added support for LanguageVersion.Future in the form of
2193         "-langversion:future".
2194
2195         * generic-mcs.cs: Stubbed out new members in generic.cs.
2196
2197 2009-02-03  Marek Safar  <marek.safar@gmail.com>
2198
2199         * class.cs, generic.cs: Emit type parameter constraints for nested
2200         types.
2201
2202 2009-02-02  Marek Safar  <marek.safar@gmail.com>
2203
2204         A fix for bug #471213
2205         * class.cs: Avoid emitting backing field for abstract event fields.
2206
2207 2009-02-01  Marek Safar  <marek.safar@gmail.com>
2208
2209         A fix for bug #359731
2210         * cs-tokenizer.cs, cs-parser.jay: Correctly parse nested query
2211         expressions.
2212
2213 2009-01-30  Marek Safar  <marek.safar@gmail.com>
2214
2215         A fix for bug #470767
2216         * statement.cs: Introduced BlockScopeExpression, needed when 
2217         expression tree conversion has to emit scope variables.
2218
2219 2009-01-29  Marek Safar  <marek.safar@gmail.com>
2220
2221         * class.cs: Remove duplicate CallingConvention.
2222
2223 2009-01-29  Marek Safar  <marek.safar@gmail.com>
2224
2225         *.cs: Rename Parameters to ParametersCompiled and ParametersImported
2226         when I finally found the right naming convention.
2227
2228 2009-01-29  Marek Safar  <marek.safar@gmail.com>
2229
2230         * cs-tokenizer.cs: Put back different open parens optimization.
2231
2232 2009-01-28  Marek Safar  <marek.safar@gmail.com>
2233
2234         A fix for bug #470227
2235         * cs-tokenizer.cs: Remove too agressive parser optimization.
2236
2237 2009-01-28  Marek Safar  <marek.safar@gmail.com>
2238
2239         A fix for bug #324319
2240         * class.cs: Remove too early base type resolve.
2241
2242 2009-01-27  Marek Safar  <marek.safar@gmail.com>
2243
2244         A fix for bug #324319
2245         * ecore.cs: Explicitly type null when assigning to type argument to
2246         make pass verifier check.
2247
2248 2009-01-27  Marek Safar  <marek.safar@gmail.com>
2249
2250         * anonymous.cs: Fixed recent regression when initializing captured 
2251         this.
2252
2253 2009-01-26  Marek Safar  <marek.safar@gmail.com>
2254
2255         A fix for bug #469019
2256         * anonymous.cs: Use all parent type parameters when instantiating
2257         nested generic storey.
2258
2259 2009-01-26  Marek Safar  <marek.safar@gmail.com>
2260
2261         * expression.cs: Check for null instance methodgroup expression.
2262
2263 2009-01-26  Marek Safar  <marek.safar@gmail.com>
2264
2265         A fix for bug #469244
2266         * cs-tokenizer.cs, cs-parser.jay: Fixed parsing of nullable type
2267         instance inside a conditional expression.
2268
2269 2009-01-23  Marek Safar  <marek.safar@gmail.com>
2270
2271         * typemanager.cs, generic.cs, parameter.cs, decl.cs, anonymous.cs,
2272         expression.cs, report.cs, ecore.cs, attribute.cs: Use common 
2273         GetElementType and HasElementType. IsValueType clean up.
2274
2275 2009-01-23  Marek Safar  <marek.safar@gmail.com>
2276
2277         * nullable.cs: Use common EmitCall.
2278         
2279         * expression.cs: Emit constraint. for virtual calls only.
2280
2281 2009-01-23  Marek Safar  <marek.safar@gmail.com>
2282
2283         * typemanager.cs, generic.cs, eval.cs, convert.cs, const.cs, 
2284         expression.cs, statement.cs, rootcontext.cs, ecore.cs, class.cs,
2285         driver.cs, attribute.cs, enum.cs: Split IsValueType and IsStruct
2286         checks.
2287
2288 2009-01-22  Jb Evain  <jbevain@novell.com>
2289
2290         * anonymous.cs: make anonymous types' ToString implementation
2291         match what csc outputs.
2292
2293 2009-01-21  Marek Safar  <marek.safar@gmail.com>
2294
2295         * typemanager.cs, ecore.cs, iterator.cs: TypeLookupExpression clean
2296         up.
2297
2298 2009-01-17  Marek Safar  <marek.safar@gmail.com>
2299
2300         * convert.cs, ecore.cs: Explicitly casts type arguments to pass
2301         verifier checks.
2302
2303 2009-01-16  Marek Safar  <marek.safar@gmail.com>
2304
2305         * nullable.cs (LiftedBinaryOperator): Check for all possible null
2306         expressions.
2307
2308 2009-01-15  Marek Safar  <marek.safar@gmail.com>
2309
2310         A fix for bug #466634
2311         * statement.cs: Add reference for nested storey when only this
2312         is captured.
2313
2314 2009-01-15  Marek Safar  <marek.safar@gmail.com>
2315
2316         A fix for bug #466474
2317         * codegen.cs: Emit SecurityPermissionAttribute when -unsafe option
2318         was specified.
2319
2320 2009-01-15  Marek Safar  <marek.safar@gmail.com>
2321
2322         * iterators.cs, anonymous.cs, expression.cs, statement.cs, ecore.cs:
2323         Fixed nested stories parent referencing process. Also fixes #463985.
2324
2325 2009-01-06  Marek Safar  <marek.safar@gmail.com>
2326
2327         * decl.cs, iterators.cs, expression.cs, statement.cs, doc.cs, 
2328         class.cs, cs-parser.jay, codegen.cs: Clean up destructor
2329         implementation. Also fixes #463108.
2330
2331 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2332
2333         A fix for bug #416109
2334         * decl.cs: Issue correct CLSAttribute warning location.
2335
2336 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2337
2338         A fix for bug #456775
2339         * attribute.cs: Use attribute owner scope when resolving attribute
2340         arguments.
2341
2342 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2343
2344         A fix for bug #457257
2345         * decl.cs: Fixed incorrect member declaring type comparison.
2346
2347 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2348
2349         A fix for bug #460896
2350         * driver.cs: Handle /RES resources as embeddable.
2351
2352 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2353
2354         A fix for bug #462515
2355         * ecore.cs: Report inacessible members upwards.
2356
2357 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2358
2359         A fix for bug #463190, #463192
2360         * decl.cs, namespace.cs: Also import internal extension classes.
2361
2362 2009-01-04  Marek Safar  <marek.safar@gmail.com>
2363
2364         A fix for bug #463415
2365         * generic.cs: Use right index for RemoveDependentTypes.
2366
2367 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2368
2369         A fix for bug #463196
2370         * expression.cs: Fixed enum to null comparison.
2371
2372 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2373
2374         A fix for bug #463121
2375         * nullable.cs: Fixed nullable user equality operator comparison.
2376
2377 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2378
2379         A fix for bug #462950
2380         * class.cs, decl.cs: Use full explicit name when defining automatic
2381         property backing field.
2382
2383 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2384
2385         A fix for bug #462592
2386         * pending.cs: Emit type arguments for generic proxy method.
2387
2388 2008-12-30  Marek Safar  <marek.safar@gmail.com>
2389
2390         * expression.cs (As): Mutate all type arguments.
2391
2392 2008-12-29  Marek Safar  <marek.safar@gmail.com>
2393
2394         A fix for bug #462622
2395         * anonymous.cs: Resolve anonymous type GetHashCode in unchecked
2396         context.
2397
2398 2008-12-29  Marek Safar  <marek.safar@gmail.com>
2399
2400         A fix for bug #450782
2401         * ecore.cs: Consider more variables of form V.I to be fixed.
2402
2403 2008-12-29  Marek Safar  <marek.safar@gmail.com>
2404
2405         A fix for bug #460712
2406         * typemanager.cs: Core types could be imported.
2407
2408 2008-12-28  Marek Safar  <marek.safar@gmail.com>
2409
2410         A fix for bugs #460847, #460772, #458049, #457339, #447807
2411         * generic.cs, parameter.cs, lambda.cs, linq.cs, anonymous.cs
2412         statement.cs, ecore.cs, class.cs, delegate.cs, flowanalysis.cs
2413         cs-parser.jay, driver.cs: LINQ implementation upgrade to deal with
2414         user lambdas used inside query clauses.
2415
2416 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2417
2418         A fix for bug #460229
2419         * cs-tokenizer.cs: Ignore wrongly placed BOM markers.
2420
2421 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2422
2423         A fix for bug #459952
2424         * decl.cs, namespace.cs: Use common CheckAccessLevel.
2425
2426 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2427
2428         A fix for bug #459630
2429         * convert.cs: Enum to valuetype conversion is not allowed.
2430
2431 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2432
2433         A fix for bug #457087
2434         * generic.cs: Don't crash when constraint comes from type
2435         declaration.
2436
2437 2008-12-16  Marek Safar  <marek.safar@gmail.com>
2438
2439         A fix for bug #459221
2440         * anonymous.cs, statement.cs: Delay only captured this
2441         initialization.
2442
2443 2008-12-12  Marek Safar  <marek.safar@gmail.com>
2444
2445         A fix for bug #457489
2446         * anonymous.cs, statement.cs: Split anonymous storey instantiation
2447         and initialization to capture scope initializers correctly.
2448
2449 2008-12-11  Marek Safar  <marek.safar@gmail.com>
2450
2451         * generic.cs, parameter.cs, expression.cs, statement.cs, doc.cs:
2452         ParameterReference refactoring.
2453
2454 2008-12-03  Marek Safar  <marek.safar@gmail.com>
2455
2456         * typemanager.cs, namespace.cs, driver.cs: Allow ExtensionAttribute
2457         to be imported from any assembly.
2458
2459 2008-12-03  Marek Safar  <marek.safar@gmail.com>
2460
2461         * parameter.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs
2462         statement.cs, class.cs, cs-parser.jay: Removed duplicate parameters
2463         from anonymous method and lambda expression.
2464
2465 2008-12-01  Marek Safar  <marek.safar@gmail.com>
2466
2467         A fix for bug #448560
2468         * expression.cs (As): Box any generic type arguments to be
2469         verifiable.
2470
2471 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
2472
2473         Add tripwire for implicit conversion bugs
2474         * ecore.cs (MethodGroupExpr.Error_ArgumentCountWrong): New helper
2475         for CS1501 error.
2476         (MethodGroupExpr.OverloadResolve): Add sanity check between
2477         IsApplicable and VerifyArgumentsCompat.
2478         (VerifyArgumentsCompat): Report CS1501 where appropriate.
2479
2480 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
2481
2482         Fix build break in System.Data_test
2483         * convert.cs (ImplicitConversionExists): Move NullLiteral
2484         conversions ...
2485         (ImplicitStandardConversionExists): ... here.
2486
2487 2008-11-28  Marek Safar  <marek.safar@gmail.com>
2488
2489         * literal.cs: Emit correctly explicit null to nullable cast.
2490
2491 2008-11-28  Marek Safar  <marek.safar@gmail.com>
2492
2493         * ecore.cs, generics.cs: Fixed crash when type arguments fail to
2494         resolve.
2495
2496 2008-11-28  Marek Safar  <marek.safar@gmail.com>
2497
2498         A fix for bug #449005
2499         * convert.cs, nullable.cs: Use only one implicit nullable
2500         conversion.
2501
2502 2008-11-27  Marek Safar  <marek.safar@gmail.com>
2503
2504         * convert.cs, literal.cs: More Convert cleanup is needed.
2505
2506 2008-11-27  Marek Safar  <marek.safar@gmail.com>
2507
2508         * decl.cs, class.cs: Fixed misleading error message.
2509
2510 2008-11-26  Marek Safar  <marek.safar@gmail.com>
2511
2512         A fix for bug #449005
2513         * nullable.cs (EmitEquality): Disable optimization for user operator
2514         operands.
2515
2516 2008-11-25  Marek Safar  <marek.safar@gmail.com>
2517
2518         A fix for bug #447027
2519         * anonymous.cs (HoistedVariable): Cache also outer access to deal
2520         with context variables stored as expression instances.
2521
2522 2008-11-25  Marek Safar  <marek.safar@gmail.com>
2523
2524         A fix for bug #447027
2525         * delegate.cs: Fixed delegate VerifyMethod logic.
2526
2527 2008-11-24  Marek Safar  <marek.safar@gmail.com>
2528
2529         * ecore.cs, delegate.cs: MethodGroup expressions can be applicable
2530         but not verifiable.
2531
2532 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2533
2534         * typemanager.cs, decl.cs, anonymous.cs, class.cs, enum.cs: Rewrote
2535         member type resolve to follow normal flow, instead of random
2536         property access.
2537
2538 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2539
2540         * iterators.cs (GetEnumeratorStatement): Re-use already resolved
2541         type.
2542
2543 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2544
2545         * const.cs: Emit decimal array constant as literal.
2546
2547 2008-11-20  Marek Safar  <marek.safar@gmail.com>
2548
2549         * iterators.cs, ecore.cs: Removed CurrentBlock statement.
2550
2551 2008-11-19  Marek Safar  <marek.safar@gmail.com>
2552
2553         * eval.cs, location.cs, driver.cs (Location.SourceFiles): Turned
2554         into real property (saves 8 MB for corlib compilation).
2555
2556 2008-11-19  Marek Safar  <marek.safar@gmail.com>
2557
2558         * generic.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs,
2559         nullable.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay
2560         generic-mcs.cs: Small cleanup of TypeArguments.
2561
2562 2008-11-18  Marek Safar  <marek.safar@gmail.com>
2563
2564         * generic.cs, iterators.cs, anonymous.cs, nullable.cs, ecore.cs,
2565         expression.cs, namespace.cs, generic-mcs.cs, class.cs: Small cleanup
2566         of ConstructedType expression, renamed to GenericTypeExpr.
2567
2568 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2569
2570         A fix for bug #445303
2571         * location.cs (IsConditionalDefined): Handle undefined global
2572         defines.
2573
2574 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2575
2576         A fix for bug #444678
2577         * expression.cs (TryReduceConstant): Always create new constant
2578         instance.
2579
2580 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2581
2582         A fix for bug #444673
2583         * ecore.cs: Ignore open generic types when used as generic type
2584         instance fields.
2585
2586 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2587
2588         A fix for bug #445458
2589         * expression.cs, cs-parser.jay: Don't crash when an expression
2590         statement is null.
2591
2592 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2593
2594         A fix for bug #445464
2595         * expression.cs, cs-parser.jay: Fixed typeof of non-generic type
2596         inside unbound type.
2597
2598 2008-11-14  Jb Evain  <jbevain@novell.com>
2599
2600         * driver.cs: ignore empty -nowarn argument such as
2601         the one in -nowarn:12,13,,.
2602
2603 2008-11-13  Marek Safar  <marek.safar@gmail.com>
2604
2605         A fix for bug #444271
2606         * anonymous.cs: Rescan parent storeys when best candidate was
2607         undone.
2608
2609 2008-11-13  Marek Safar  <marek.safar@gmail.com>
2610
2611         * generic.cs, expression.cs, ecore.cs, cs-parser.jay: Removed
2612         useless UnboundTypeExpression.
2613         
2614         * attribute.cs: Do check obsolete attribute on generic types.
2615
2616 2008-11-12  Marek Safar  <marek.safar@gmail.com>
2617
2618         A fix for bugs #425680, #400139
2619         * ecore.cs, expression.cs: Trying to do some almost_matched_members
2620         refactoring.
2621
2622 2008-11-11  Marek Safar  <marek.safar@gmail.com>
2623
2624         A fix for bug #435747
2625         * assign.cs, expression.cs: Cleanup New assignment to emit correcly
2626         compound value types assignment. Few micro optimizations added.
2627
2628 2008-11-10  Marek Safar  <marek.safar@gmail.com>
2629
2630         A fix for bug #442610
2631         * anonymous.cs (MutateConstructor): More SRE hacking.
2632
2633 2008-11-10  Marek Safar  <marek.safar@gmail.com>
2634
2635         A fix for bug #442579
2636         * ecore.cs: Also initialize expanded form of a method with 1 params
2637         parameter.
2638
2639 2008-11-06  Marek Safar  <marek.safar@gmail.com>
2640
2641         * expression.cs (UnaryMutator): Do early l-side check.
2642
2643 2008-11-05  Miguel de Icaza  <miguel@novell.com>
2644
2645         * codegen.cs (InitDynamic): also setup Assembly.Name like we do in
2646         Init, otherwise we would crash later on when checking for friend
2647         assemblies. 
2648
2649         * eval.cs: Do not hide errors from invalid calls to LoadAssembly.
2650         Otherwise we never get any meaningful information as to what
2651         failed. 
2652
2653 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2654
2655         A fix for bug #436318
2656         * driver.cs, report.cs: Add -warnaserror:Wn to command line options.
2657
2658 2008-11-05  Miguel de Icaza  <miguel@novell.com>
2659
2660         * namespace.cs: Turns out that it was a really bad idea to hide
2661         the errors for namespaces not found here in eval mode.    
2662
2663         * eval.cs: When we process using clauses, only enter those into
2664         the list of valid using clauses after they have been validated.   
2665
2666         The above change gives the proper semantics: it does not
2667         senselessly report the same errors with broken using statements by
2668         never storing them in the first place when they are invalid.
2669
2670 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2671
2672         A fix for bug #421839
2673         * cs-parser.jay: Remove expression from coalesce rule to force lower
2674         priority than the assignment operator.
2675
2676 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2677
2678         A fix for bug #437875
2679         * nullable.cs: Compile correctly method group operand used with null
2680         coalescing operator.
2681
2682 2008-11-04  Marek Safar  <marek.safar@gmail.com>
2683
2684         A fix for bug #434589
2685         * expression.cs (Binary): Ignore lifted conversions when at least
2686         one operand is of reference type.
2687
2688 2008-11-04  Marek Safar  <marek.safar@gmail.com>
2689
2690         * cs-parser.jay: Better syntax error report.
2691
2692 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2693
2694         A fix for bug #436792
2695         * cs-parser.jay: Use GetLocation to access location.
2696
2697 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2698
2699         A fix for bug #440774
2700         * cs-parser.jay: Also set current_array_type when parsing local
2701         variables types.
2702
2703 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2704
2705         A fix for bug #440785
2706         * expression.cs (As): Don't resolve self modifing expression
2707         multiple times.
2708
2709 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2710
2711         A fix for bug #439447
2712         * cs-tokenizer.cs: Tokenize surrogates only where allowed.
2713
2714 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2715
2716         A fix for bug #437571
2717         * cs-parser.jay: Fixes internal error for invalid expression
2718         statements.
2719
2720 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2721
2722         * ecore.cs: Resolve correctly ambiguous params delegate methods.
2723
2724 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2725
2726         * generic.cs, anonymous.cs: Simplified GetDeclarations.
2727
2728 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2729
2730         * cs-tokenizer.cs: More precise cast parsing.
2731
2732 2008-10-16  Martin Baulig  <martin@ximian.com>
2733
2734         * anonymous.cs (AnonymousMethodStorey): Put back the
2735         `hoisted_locals' hashtable and use it in EmitType().
2736
2737 2008-10-15  Marek Safar  <marek.safar@gmail.com>
2738
2739         * cs-tokenizer.cs, nullable.cs, expression.cs, statement.cs,
2740         cs-parser.jay: Tokenizer optimizations and memory reduction, saves
2741         ~5MB for corlib.
2742
2743 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2744
2745         * cs-tokenizer.cs: Add bool type to the list of valid cast tokens.
2746
2747 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2748
2749         * statement.cs: Mutate scope initializers.
2750
2751 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2752
2753         * expression.cs: Use typeless value for This constant.
2754         
2755         * ecore.cs: Access FieldInfo via GetConstructedFieldInfo.
2756
2757 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2758
2759         * cs-tokenizer.cs, cs-parser.jay: Unify context sensite keyword
2760         tokenizer.
2761
2762 2008-10-13  Marek Safar  <marek.safar@gmail.com>
2763
2764         * cs-tokenizer.cs: Add missing alias qualifier and dotted generic
2765         type to type cast.
2766
2767 2008-10-13  Marek Safar  <marek.safar@gmail.com>
2768
2769         * cs-tokenizer.cs, expression.cs, cs-parser.jay: Reworked parens
2770         parser and tokenizer. Fixes many ambiguities including #433258.
2771
2772 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2773
2774         * cs-parser.jay: Fixed missing accessor recovery.
2775
2776 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2777
2778         A fix for bug #433701
2779         * expression.cs: Better error message.
2780
2781 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2782
2783         * cs-parser.jay, expression.cs: Start reporting real parser errors.
2784         
2785         * Makefile: Disabled unused debug symbols.
2786
2787         Also fixes: #320556, #321097, #321656, #321876, #351316
2788
2789 2008-10-09  Miguel de Icaza  <miguel@novell.com>
2790
2791         * eval.cs: rename "<interactive>" to "{interactive}", to work
2792         around a requirement in the compiler that this be a valid
2793         filename, and in Windows it is not (433886).
2794
2795 2008-10-09  Marek Safar  <marek.safar@gmail.com>
2796
2797         * cs-tokenizer.cs, cs-parser.jay: Fixed more subtle parser problems
2798
2799 2008-10-08  Marek Safar  <marek.safar@gmail.com>
2800
2801         * cs-tokenizer.cs, eval.cs, anonymous.cs, statement.cs, class.cs
2802         cs-parser.jay: Generic type declaration and type arguments cleanup.
2803
2804 2008-10-05  Marek Safar  <marek.safar@gmail.com>
2805
2806         * cs-parser.jay: Allow parsing weird array creation construct.
2807
2808 2008-10-05  Marek Safar  <marek.safar@gmail.com>
2809
2810         * cs-parser.jay: Conflicts reduction.
2811
2812 2008-10-04  Marek Safar  <marek.safar@gmail.com>
2813
2814         * cs-parser.jay: Conflicts reduction.
2815
2816 2008-10-04  Raja R Harinath  <harinath@hurrynot.org>
2817
2818         Fix #398325
2819         * flowanalysis.cs (MyBitvector.MakeShared): Rename from 'Shared'
2820         property.  Add a 'count' hint about the use of the shared vector.
2821         Ensure that we don't leak out dirty bits.
2822         (UsageVector.MergeChild): Throw away information about variables
2823         in child vectors.
2824         Based on patch and analysis by Moritz Kroll <Moritz.Kroll@gmx.de>.
2825
2826 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2827
2828         A fix for bug #431746
2829         * iterators.cs, anonymous.cs: Re-initialize hoisted iterator
2830         parameters when iterator is created.
2831
2832 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2833
2834         A fix for bug #431827
2835         * expression.cs: Fixed right based pointer arithmetic operations
2836         emit.
2837
2838 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2839
2840         A fix for bug #353779
2841         * assign.cs, expression.cs: Fixed compound assignment conversions.
2842
2843 2008-10-02  Marek Safar  <marek.safar@gmail.com>
2844
2845         A fix for bug #375262
2846         * statement.cs: Refactor ArrayForeach to be usable with string
2847         indexer. Optimized single dimentional arrays foreach.
2848
2849 2008-10-02  Marek Safar  <marek.safar@gmail.com>
2850
2851         A fix for bug #431255
2852         * anonymous.cs, expression.cs: Removed broken optimization.
2853
2854 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2855
2856         * anonymous.cs: Use full type parameters of parent generic
2857         containers. Removed unnecessary AddParentStoreyReference call.
2858
2859 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2860
2861         A fix for bug #324702
2862         * class.cs: Use better shorter names for explicit interface member
2863         implementations.
2864
2865         * ecore.cs, typemanager.cs: Convert only mscorlib predefined names.
2866
2867 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2868         
2869         * expression.cs: Use new interface to check fixed expression.
2870
2871 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2872
2873         A fix for bug #421101
2874         * expression.cs, statement.cs, ecore.cs: Use IFixedExpression
2875         interface to check for fixed fixed-buffers.
2876
2877 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2878
2879         A fix for bug #429264
2880         * assign.cs, anonymous.cs, ecore.cs: More type mutators added.
2881         
2882         * delegate.cs: Removed unnecessary casts.
2883
2884 2008-09-30  Marek Safar  <marek.safar@gmail.com>
2885
2886         A fix for bug #352151
2887         * decl.cs, iterators.cs, anonymous.cs, report.cs, namespace.cs,
2888         class.cs: Fixed already defined explicit interface members check.
2889
2890 2008-09-29  Rodrigo Kumpera  <rkumpera@novell.com>
2891
2892         cs-tokenizer.cs: Fix typo.
2893
2894 2008-09-28  Miguel de Icaza  <miguel@novell.com>
2895
2896         * eval.cs (InteractiveBase): The quit command now just sets a
2897         flag, instead of calling Environment.Exit(), it is milder on
2898         embedded hosts. 
2899
2900         CompiledMethod is now in Mono.CSharp, not nested inside
2901         the Evaluator, it was inconvenient to use.
2902
2903 2008-09-27  Miguel de Icaza  <miguel@novell.com>
2904
2905         * eval.cs (Evaluator): Introduce Compile method, to allow compiled
2906         code to be invoked without having to reparse.
2907
2908 2008-09-27  Miguel de Icaza  <miguel@novell.com>
2909
2910         * ecore.cs: The recent changes to FieldExpr broke this as well.
2911         Fixes LINQ queries in the interactive shell.
2912
2913         * Multiple files: indentation fixing for the Mono coding
2914         guidelines for the switch statement.
2915
2916         * eval.cs: Make the Evaluator API thread safe.
2917
2918 2008-09-26  Marek Safar  <marek.safar@gmail.com>
2919
2920         * anonymous.cs, statement.cs, class.cs, cs-parser.jay: Simplified
2921         constructor parsing.
2922
2923 2008-09-26  Marek Safar  <marek.safar@gmail.com>
2924
2925         A fix for bug #325326
2926         * statement.cs: Check possible mistaken empty statement using
2927         explicit blocks only.
2928
2929 2008-09-25  Miguel de Icaza  <miguel@novell.com>
2930
2931         * eval.cs (LoadAssembly, ReferenceAssembly): Call
2932         RootNamespace.ComputeNamespaces to update the internal list of
2933         namespaces, this is no longer done for us.
2934
2935         (InteractiveBase): Use the Evaluator APIs instead of calling into
2936         Driver directly
2937
2938 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2939
2940         A fix for bug #429264
2941         * expression.cs: Missing mutator for access to multidimensional
2942         arrays.
2943
2944 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2945
2946         * class.cs, statement: Emit DebuggerHidden attribute for iterator
2947         entry wrapper.
2948         
2949         * driver.cs: Missing input argument check.
2950
2951 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2952
2953         * typemanager.cs, generic.cs, eval.cs, decl.cs, anonymous.cs,
2954         expression.cs, statement.cs, rootcontext.cs, class.cs, 
2955         cs-parser.jay, driver.cs, generic-mcs.cs, enum.cs: Removed obsolete
2956         DefineMembers.
2957
2958 2008-09-24  Miguel de Icaza  <miguel@novell.com>
2959
2960         * ecore.cs (FieldExpr): Only initialize eclass when we return a
2961         fully constructed FieldExpr, fixes the regression introduced in
2962         the last commit.
2963         
2964         * ecore.cs, expression.cs: Plug back the eclass initialization as
2965         otherwise it regresses `csharp'. 
2966
2967 2008-09-24  Marek Safar  <marek.safar@gmail.com>
2968
2969         * typemanager.cs, decl.cs, convert.cs, assign.cs, expression.cs,
2970         ecore.cs, attribute.cs: Moved obsolete method checks from emit
2971         phase to resolve phase. It resolves problems with expression trees
2972         and fixes bugs #323796, #325156.
2973
2974 2008-09-23  Marek Safar  <marek.safar@gmail.com>
2975
2976         * codegen.cs: Report better error when symbol writer is missing.
2977
2978 2008-09-23  Marek Safar  <marek.safar@gmail.com>
2979
2980         * codegen.cs: Set .NET symbol writer.
2981         
2982         * decl.cs: Guard against null generic arguments.
2983         
2984         * report.cs: Don't report exactly same additional details.
2985
2986 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2987
2988         A fix for bug #324917
2989         * cs-parser.jay: Add missing multidimensional non-expression type
2990         ranks.
2991         
2992 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2993
2994         A fix for bug #428191
2995         * anonymous.cs: Create an outer generic fields also for non-storey
2996         anonymous methods.
2997
2998 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2999
3000         A fix for bug #378294
3001         * class.cs: Make fixed size buffers gmcs feature only.
3002
3003 2008-09-22  Marek Safar  <marek.safar@gmail.com>
3004
3005         A fix for bug #355622, #324993
3006         * assign.cs, const.cs, class.cs: Create new EmitContext for each
3007         field initializer.
3008
3009 2008-09-19  Marek Safar  <marek.safar@gmail.com>
3010
3011         * nullable.cs, expression.cs, namespace.cs, delegate.cs: Duplicate
3012         error reporting.
3013
3014 2008-09-19  Marek Safar  <marek.safar@gmail.com>
3015
3016         A fix for bug #416110
3017         * generic.cs: Struct constraint results in default ctor and
3018         ValueType base type constraint to be set.
3019
3020 2008-09-19  Marek Safar  <marek.safar@gmail.com>
3021
3022         A fix for bug #423791
3023         * generic.cs: Fixed params output type type-inference.
3024
3025 2008-09-19  Marek Safar  <marek.safar@gmail.com>
3026
3027         * cs-parser.jay, expression.cs: Fixed few expression crashes.
3028         
3029 2008-09-19  Marek Safar  <marek.safar@gmail.com>
3030
3031         * cs-tokenizer.cs: Don't break on extra partial modifier.
3032
3033 2008-09-19  Marek Safar  <marek.safar@gmail.com>
3034
3035         A fix for bug #427592
3036         * generic.cs: Use common parameter resolve method.
3037
3038 2008-09-18  Marek Safar  <marek.safar@gmail.com>
3039
3040         A fix for bug #414758
3041         * expression.cs, ecore.cs: Fixed crash when accessing non-static
3042         property.
3043
3044 2008-09-18  Marek Safar  <marek.safar@gmail.com>
3045
3046         * driver.cs, namespace.cs: Read types and namespaces after all
3047         requested assemblies are loaded, fixes issues with System.Core
3048         auto-reference, and #419888.
3049
3050 2008-09-18  Marek Safar  <marek.safar@gmail.com>
3051
3052         A fix for bug #417705
3053         * cs-parser.jay: Fixed as/is operator expression split.
3054
3055 2008-09-18  Marek Safar  <marek.safar@gmail.com>
3056
3057         * const.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay:
3058         Fixed expression tree representation of empty new expression and
3059         new initializer expression.
3060
3061 2008-09-18  Miguel de Icaza  <miguel@novell.com>
3062
3063         * eval.cs: Remove warning, keep reference to driver around.
3064
3065         * Hide fields that do not need to be public.
3066
3067 2008-09-17  Marek Safar  <marek.safar@gmail.com>
3068
3069         A fix for bug #426385
3070         * expression.cs (ImplicitlyTypedArrayCreation): Use full implicit
3071         conversion for array elements.
3072
3073 2008-09-17  Marek Safar  <marek.safar@gmail.com>
3074
3075         * expression.cs, statement.cs, class.cs, cs-parser.jay: Fixed
3076         void parsing conflicts.
3077
3078 2008-09-15  Marek Safar  <marek.safar@gmail.com>
3079
3080         A fix for bug #425601
3081         * driver.cs, typemanager.cs, namespace.cs: Automatically reference
3082         System.Core only when there is no custom ExtensionAttribute
3083         implementation.
3084
3085 2008-09-15  Miguel de Icaza  <miguel@novell.com>
3086
3087         * namespace.cs: Do not report CS0246 (name
3088
3089 2008-09-12  Marek Safar  <marek.safar@gmail.com>
3090
3091         A fix for bug #425669
3092         * generic.cs: Don't cache generic static anonymous method 
3093         containers.
3094
3095 2008-09-12  Marek Safar  <marek.safar@gmail.com>
3096
3097         * generic.cs, class.cs, delegate.cs: Check recursive inherited
3098         conflicting constraints.
3099
3100 2008-09-12  Raja R Harinath  <harinath@hurrynot.org>
3101
3102         * cs-tokenizer.cs (consume_identifier): Allow partial methods in
3103         mcs too.
3104
3105 2008-09-12  Marek Safar  <marek.safar@gmail.com>
3106
3107         * literal.cs, convert.cs, expression.cs, statement.cs: More null
3108         to null pointer conversion fixes.
3109
3110 2008-09-11  Marek Safar  <marek.safar@gmail.com>
3111
3112         * cs-parser.jay, expression.cs: An implicitly typed local variable
3113         declarator cannot use an array initializer.
3114
3115 2008-09-11  Marek Safar  <marek.safar@gmail.com>
3116
3117         * cs-parser.jay: Reduced number of printed tokens, add sorting.
3118
3119 2008-09-11  Marek Safar  <marek.safar@gmail.com>
3120
3121         * generic.cs (InflatedConstraints): Don't crash when constraints
3122         are different.
3123         
3124         * cs-parser.jay: const_declarator is a block.
3125
3126         * constant.cs: Check for not allowed NaN conversions.
3127
3128 2008-09-10  Miguel de Icaza  <miguel@novell.com>
3129
3130         * driver.cs: Drop --shell argument, the compiler is no longer a
3131         REPL. 
3132
3133         * eval.cs: Move most of the code that deals with evaluation into
3134         this file and document the public API from repl.cs
3135
3136         * repl.cs: Remove from here.
3137         
3138 2008-09-10  Marek Safar  <marek.safar@gmail.com>
3139
3140         A fix for bug #424684
3141         * generic.cs: Generic class constraints must come first.
3142
3143 2008-09-09  Miguel de Icaza  <miguel@novell.com>
3144
3145         * cs-parser.jay: Improve error reporting for syntax errors in
3146         statements and expressions, we now report the expected tokens
3147         instead of reporting the useless "; expected".
3148
3149         Drop the strings from the token declaration, it turns out that
3150         they did not do what I thought they did.  Instead they were adding
3151         two sets of tokens to the tables.
3152
3153 2008-09-09  Marek Safar  <marek.safar@gmail.com>
3154
3155         * typemanager.cs, generic.cs, parameter.cs, expression.cs, class.cs,
3156         delegate.cs: Share special type check.
3157
3158 2008-09-09  Marek Safar  <marek.safar@gmail.com>
3159
3160         A fix for bug #423981
3161         * expression.cs (EmitBranchable): Correctly emit inverted float conditions.
3162
3163 2008-09-09  Marek Safar  <marek.safar@gmail.com>
3164
3165         * ecore.cs (ReducedConstantExpression): Implemented ConvertExplicitly and
3166         ConvertImplicitly.
3167
3168 2008-09-09  Marek Safar  <marek.safar@gmail.com>
3169
3170         A fix for bugs: #324750, #335946
3171         * cs-tokenizer.cs, cs-parser.jay, expression.cs: Use a custom 
3172         lookup rule to determine ?-based tokens.
3173
3174 2008-09-08  Miguel de Icaza  <miguel@novell.com>
3175
3176         * repl.cs (OptionalAssign.EmitStatement): It is possible that some
3177         expressions (like event adding or removing) end up here, so we
3178         need to treat those as statements.
3179
3180         Add LoadAssembly method.
3181
3182 2008-09-04  Miguel de Icaza  <miguel@novell.com>
3183
3184         * repl.cs: Add Time method.
3185
3186 2008-09-05  Marek Safar  <marek.safar@gmail.com>
3187
3188         * cs-tokenizer.cs: Fixed swaped UTF-16 surrogates parsing.
3189
3190 2008-09-05  Miguel de Icaza  <miguel@novell.com>
3191
3192         * repl.cs: Add workaround for old compilers.
3193
3194 2008-09-04  Jb Evain  <jbevain@novell.com>
3195
3196         * repl.cs (PrettyPrint): pretty print everything that
3197         implements IDictionary, as well as IEnumerables. Also,
3198         add a quit helper property.
3199
3200 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3201
3202         * constant.cs: Better error reporting for decimal literals.
3203         
3204         * class.cs, attribute.cs, typemanager.cs: Emit more fixed buffer
3205         field attributes.
3206         
3207 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3208                         Miguel de Icaza  <miguel@novell.com>
3209
3210         A fix for bug #422951
3211         * assign.cs (Assign.DoResolve): Perform the type conversions
3212         checks before we attempt to initialize `New' initializers. 
3213
3214 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3215
3216         A fix for bug #422853
3217         * delegate.cs (DelegateCreation): Add special handling for
3218         EmptyExpression.Null instance expression which is just another
3219         hack for undecided member instance exression.
3220
3221 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3222
3223         * expression.cs, ecore.cs: Emit full expression tree for reduced
3224         binary expressions.
3225
3226 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3227
3228         * expression.cs (This): Guard against multi-resolving.
3229         
3230         * ecore.cs, statement.cs (Throw): Simplified.
3231         
3232         * flowanalysis.cs: Also verify event fields.
3233
3234 2008-09-04  Miguel de Icaza  <miguel@novell.com>
3235
3236         * assign.cs (Assign.DoResolve): Perform the type conversions
3237         checks before we attempt to initialize `New' initializers. 
3238
3239         * repl.cs (PrettyPrint): Add Hashtable prettyprint
3240
3241         * anonymous.cs (AnonymousTypeClass): On EvalMode make the class
3242         public. 
3243
3244         * repl.cs: Update help.
3245
3246 2008-09-03  Miguel de Icaza  <miguel@novell.com>
3247
3248         * driver.cs (ProcessDefaultConfig): Now it encapsulates all the
3249         handling of the default config handling, including the special
3250         treatment of System.Core assembly. 
3251
3252         Fixes the REPL processing for LINQ.
3253
3254 2008-09-03  Marek Safar  <marek.safar@gmail.com>
3255
3256         A fix for bug #422507
3257         * expression.cs (UnboxCast): Add missing child expression mutator.
3258
3259 2008-09-03  Marek Safar  <marek.safar@gmail.com>
3260
3261         * driver.cs: Don't self reference System.Core assembly.
3262
3263 2008-09-03  Marek Safar  <marek.safar@gmail.com>
3264
3265         A fix for bug #422507
3266         * expression.cs (StringConcat): Add missing type mutator.
3267
3268 2008-09-03  Marek Safar  <marek.safar@gmail.com>
3269
3270         * generic.cs (TypeInferenceContext): Follow equality rule for
3271         constructed type lower bound type inference.
3272
3273 2008-09-02  Miguel de Icaza  <miguel@novell.com>
3274
3275         * getline.cs (CmdRefresh): Apply patch from Douglas S. Blank
3276         <dblank@cs.brynmawr.edu> which updates the cursor position on
3277         refresh.
3278         
3279 2008-09-02  Marek Safar  <marek.safar@gmail.com>
3280
3281         A fix for bug #367145
3282         * driver.cs: Fixed import of extension methods when using -noconfig
3283         option.
3284
3285 2008-09-02  Marek Safar  <marek.safar@gmail.com>
3286
3287         * iterator.cs: Don't emit GetEnumerator method twice but call a generic
3288         version from non-generic implementation instead.
3289
3290 2008-09-01  Marek Safar  <marek.safar@gmail.com>
3291
3292         A fix for bug #418908
3293         * class.cs: Use AddScopeStatement for field initializers.
3294
3295 2008-09-01  Marek Safar  <marek.safar@gmail.com>
3296
3297         A fix for bug #415385
3298         * ecore.cs, convert.cs: Do method group conversion for equal group types.
3299
3300 2008-09-01  Marek Safar  <marek.safar@gmail.com>
3301
3302         A fix for bug #421736
3303         * iterators.cs: Don't crash on unreachable iterators.
3304
3305 2008-09-01  Marek Safar  <marek.safar@gmail.com>
3306
3307         A fix for bug #421628
3308         * parameter.cs, attribute.cs: Clone also parameter attributes.
3309
3310 2008-08-30  Miguel de Icaza  <miguel@novell.com>
3311
3312         * namespace.cs (LookupType): In EvalMode, try to replace
3313         the TypeBuilder from our cache with a Type as Reflection.Emit does
3314         not  like to mix code from older assemblies emitted and new
3315         assemblies emitted. 
3316
3317         This sounds like a serious Mono bug that prevents multiple
3318         assemblies to be generated and consumed at the same time.
3319
3320         * cs-parser.jay (push_current_class): Do not make interactive
3321         classes internal or private, make them public as we currently
3322         generate each new class in a new assembly.   
3323
3324 2008-08-29  Miguel de Icaza  <miguel@novell.com>
3325
3326         * decl.cs, roottypes.cs, class.cs:: Add an infrastructure to
3327         remove types that are entered into the global namespace during
3328         parsing so that we can remove them on failure.
3329  
3330         * cs-parser.jay: Parsing: we now keep track of types that are
3331         entered into global variables and queue those in case the parsing
3332         or resolution fail.
3333  
3334         This happens in a few situations: during partial-input, we invoke
3335         the parser repeatedly for example with the string "class X", this
3336         would cause X to be registed, and we need to remove this
3337         registration so that another parse attempt later with say "class X {"
3338         would actually work.
3339  
3340         Additionally, if there is an error in the resolution phase, for
3341         example: "class X : NonExistant {}" th
3342         
3343         * cs-parser.jay: Be more precise with the errors being raised,
3344         instead of flagging all exceptions during parsing to be attributed
3345         to the parsing process, distinguish those from errors happening in
3346         the actions and hint that using -v would produce the actual
3347         exception. 
3348
3349         * repl.cs: Do not load all compiler references on each reset,
3350         doing the partial reset takes care of this.
3351         
3352 2008-08-28  Miguel de Icaza  <miguel@novell.com>
3353
3354         * repl.cs: Add support for loading all the files from
3355         ~/.config/csharp/*cs as startup scripts and ~/.config/csharp/*.dll
3356         as shell libraries.
3357
3358         Introduce a micro-parser that is able to deambiguate on its input
3359         whether we are dealing with a compilation unit (namespace, class,
3360         interface, struct, delegate) declaration or a statement.   This
3361         allows both declarations and statements to be entered. 
3362
3363         Set history size by default to 300 lines.
3364
3365         Instead of distinguishing based on the parser.InteractiveResult,
3366         have only two cases: statements were parsed, or a compilation unit
3367         was.   Always pull the Using statement additions from the
3368         compilation unit parse.
3369         
3370         * cs-tokenizer.cs: Rename tokens to better describe their intent
3371         (EvalStatementParserCharacter and EvalCompilationUnitParserCharacter).
3372         
3373         * rootcontext.cs: Split EvalMode into EvalMode and StatementMode.
3374         EvalMode is used to trigger the lookup of global variables while
3375         StatementMode is used turn variable declarations into static
3376         fields.
3377
3378         * getline.cs: Allow history size to be set.
3379         
3380 2008-08-29  Marek Safar  <marek.safar@gmail.com>
3381
3382         A fix for bug #360755
3383         * ecore.cs (SimpleName): Exclude indexers from simple name resolve.
3384
3385 2008-08-29  Marek Safar  <marek.safar@gmail.com>
3386
3387         * generic.cs, iterators.cs, codegen.cs: Removed unused variable.
3388         
3389         * typemanager.cs, statement.cs, ecore.cs, enum.cs: Don't reconstruct enum
3390         member name, it is too confusing
3391         
3392         * decl.cs, class.cs: Don't report unused fields with attached attribute.
3393         
3394         * rootcontext.cs: Finally default to warning level 4.
3395
3396 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3397
3398         * class.cs (CheckBase): Ignore overloaded operators.
3399
3400 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3401
3402         A fix for bug #420830
3403         * expression.cs, cs-parser.jay: Put back InvocationOrCast expression.
3404
3405 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3406
3407         A fix for bug #420832
3408         * anonymous.cs, iterators.cs: Also clone hoisted this iterator variable.
3409
3410 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3411
3412         A fix for bug #420386
3413         * nullables.cs: Fixed logic of nullable user comparison operators involving
3414         null values.
3415
3416 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3417         
3418         * attribute (IsClsCompliant): Use FALSE value for pointer types.
3419
3420 2008-08-27  Miguel de Icaza  <miguel@novell.com>
3421
3422         * repl.cs: Add support for aborting the running code with C-c. 
3423
3424 2008-08-27  Raja R Harinath  <harinath@hurrynot.org>
3425
3426         * cs-parser.jay (CS1002): Dump 'yyToken' with Report.ExtraInformation.
3427
3428 2008-08-27  Miguel de Icaza  <miguel@novell.com>
3429
3430         * cs-parser.jay (interactive_statement_list): A new set of rules
3431         for hosting statements that uses the "interactive_" prefix.   
3432
3433         * repl.cs: Add support for parsing `using' as a statement or as a
3434         directive.  Deambiguating before passing this to the parser.
3435
3436         We need to distinguish statement_expressions that occur at the
3437         toplevel vs those that occur embedded into expressions.
3438
3439         * getline.cs: Applied patch from Stuart Carnie <stuart.carnie@gmail.com> 
3440         that fixes the cursor key handling, and a history bug.
3441         
3442 2008-08-26  Miguel de Icaza  <miguel@novell.com>
3443
3444         * Makefile: Drop BOOTSTRAP_COMPILER as that was masking the
3445         limitations in Console, instead the 2.0 bootstrap libraries now
3446         include the Console bits.
3447
3448         Also, remove the use of Nullables from getline.cs
3449
3450         ------------
3451         
3452         Interactive support for the C# compiler.   Use gmcs --shell to
3453         enter a read-eval-print loop shell.
3454
3455         Docs: http://www.mono-project.com/CsharpRepl
3456         
3457         * sources: include repl.cs here and getline.cs for gmcs.exe,
3458         everything else is getline.cs impaired.
3459
3460         * Makefile: when bootstrapping pass a special flag
3461         BOOTSTRAP_COMPILER which we use to prevent failures in compilation
3462         as we use NET_2_0 define to pull 2.0 APIs from System.Console.
3463         This distinguishes those two cases.
3464
3465         * repl.cs: Support for a read-eval-print loop.   Will be soon
3466         refactored into eval support and then REPL on top of it.
3467
3468         * ecore.cs: If a simplename lookup fails, before erroring out,
3469         if we are in EvalMode to resolve the name to a declaration in the
3470         Eval-land.    
3471
3472         This means that variable declarations that happened in previous
3473         classes (as repl puts every statement in a separate class) are
3474         made visible in this way.
3475
3476         * cs-parser.jay: UnexpectedEOF, a new flag that is set if we
3477         triggered an error due to the end of file being reached.   This is
3478         used to do multi-line input, and notify the caller that the user
3479         needs to provide more text before a successful parse.
3480
3481         Add new grammar rules after the INTERACTIVE_PARSER token is seen
3482         to drive the evaluation with a custom wrapper. 
3483
3484         * driver.cs: Add support for --shell, and refactor some code to be
3485         reused from repl.cs
3486         
3487         * namespace.cs: Add support for serializing the contents of the
3488         namespaces and reloading them.  
3489
3490         * getline.cs: A managed implementation of ReadLine under
3491         X11/Apache2 license terms.  Easy to embed in other applications as
3492         well.
3493
3494         * namespace.cs: Add some functions to save and restore the
3495         namespace state.
3496
3497         * rootcontext.cs: New public field.
3498
3499         * cs-tokenizer.cs: Add support for one of the possible characters
3500         we introduce into the token stream.  
3501
3502         This patch does not affect the regular tokenization process, the
3503         only performance hit would happen if there is an invalid character
3504         on the input string.
3505
3506         * support.cs: Move isatty helper routine here.
3507
3508         * codegen.cs: Small cleanup, and add a mechanism to initialize the
3509         code generator for in-memory assemblies.
3510
3511 2008-08-26  Marek Safar  <marek.safar@gmail.com>
3512
3513         * generic.cs, ecore.cs, delegate.cs, cs-parser.jay, expression.cs: A type
3514         parameter cannot be always used as a type.
3515
3516 2008-08-21  Marek Safar  <marek.safar@gmail.com>
3517
3518         * convert.cs, expression.cs: Use single ExplicitReferenceConversion routine.
3519
3520 2008-08-21  Marek Safar  <marek.safar@gmail.com>
3521
3522         * convert.cs: Implement explicit array to IList<T> conversion.
3523
3524 2008-08-20  Marek Safar  <marek.safar@gmail.com>
3525
3526         A fix for bug #362740
3527         * cs-tokenizer.cs: Handle UTF-16 surrogates.
3528
3529 2008-08-20  Marek Safar  <marek.safar@gmail.com>
3530         
3531         * generic.cs, support.cs, typemanager.cs, lambda.cs, parameter.cs,
3532         pending.cs, ecore.cs, linq.cs, class.cs, decl.cs, delegate.cs,
3533         flowanalysis.cs, iterators.cs, cs-parser.jay, convert.cs, anonymous.cs,
3534         expression.cs, attribute.cs, statement.cs, doc.cs: Refactored parameters
3535         handling to use just one type of infrastructure and deal with generics
3536         more effectivelly.
3537
3538 2008-07-23  Martin Baulig  <martin@ximian.com>
3539
3540         *** Merged this from trunk revision 108527 ***
3541
3542         * statement.cs
3543         (ExplicitBlock.EmitSymbolInfo): Moved to `ToplevelBlock'.
3544         (ToplevelBlock.EmitSymbolInfo): Tell the symbol writer about the
3545         scope variable.
3546
3547 2008-08-15  Marek Safar  <marek.safar@gmail.com>
3548         
3549         * ecore.cs, linq.cs, const.cs, expression.cs, statement.cs: More robust
3550         error checks.
3551
3552 2008-08-15  Marek Safar  <marek.safar@gmail.com>
3553         
3554         * delegate.cs: Fixed compiler crash when creating delegate using partial
3555         method.
3556         
3557         * typemanager.cs: MulticastDelegate is not a delegate.
3558
3559 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3560         
3561         * expression.cs, ecore.cs, anonymous.cs, class.cs: Fixed missing error
3562         checks.
3563
3564 2008-08-14  Raja R Harinath  <harinath@hurrynot.org>
3565
3566         * cs-parser.jay (type): Allow 'var' in mcs too.
3567         (local_variable_type): Likewise.
3568
3569 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3570         
3571         * driver.cs: Removed broken -noconfig variants.
3572
3573 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3574         
3575         A fix for bug #417078
3576         * expression.cs: Emit correctly left side pointer operators.
3577
3578 2008-08-13  Marek Safar  <marek.safar@gmail.com>
3579
3580         * generic.cs, lambda.cs: Inflate method generic arguments only.
3581
3582 2008-08-12  Marek Safar  <marek.safar@gmail.com>
3583
3584         * class.cs: Fixed struct layout check regression.
3585
3586 2008-08-12  Marek Safar  <marek.safar@gmail.com>
3587
3588         * cs-parser.jay, enum.cs: Simplified enum parsing.
3589         
3590         * decl.cs: Check all type parameters conflicts.
3591         
3592         * expression.cs, statement.cs, attribute.cs: More expression checks.
3593
3594 2008-08-11  Marek Safar  <marek.safar@gmail.com>
3595
3596         * generic.cs: Add type inference types restriction.
3597         
3598         * parameter.cs, class.cs, delegate.cs, iterators.cs, cs-parser.jay,
3599         anonymous.cs, expression.cs: Allocate less accessor parameters.
3600
3601 2008-08-08  Marek Safar  <marek.safar@gmail.com>
3602
3603         * typemanager.cs, ecore.cs: Ambiguous operators can come from different
3604         classes.
3605
3606 2008-08-08  Marek Safar  <marek.safar@gmail.com>
3607
3608         * convert.cs, delegate.cs: Fixed delegate compatibility conversion. 
3609
3610 2008-08-07  Marek Safar  <marek.safar@gmail.com>
3611
3612         * class.cs, decl.cs, iterator.cs, ecore.cs: Refactor base type resolving.
3613         Also fixes #362146 and #381592.
3614
3615 2008-08-07  Marek Safar  <marek.safar@gmail.com>
3616
3617         * ecore.cs: Reduced constant cannot be used as an attribute value.
3618         
3619         * cs-parser.jay: Base expression has to be a type.
3620         
3621         * expression.cs (Conditional): Uses ReducedExpression.
3622
3623 2008-08-06  Marek Safar  <marek.safar@gmail.com>
3624
3625         A fix for bug #376826
3626         * parameter.cs, ecore.cs, anonymous.cs, expression.cs, statement.cs: An
3627         address of hoisted local variable or parameter cannot be taken.
3628
3629 2008-08-05  Marek Safar  <marek.safar@gmail.com>
3630
3631         * ecore.cs, constant.cs, expression.cs, statement.cs: Resolve correctly 
3632         anonymous method inside checked/unchecked expression.
3633
3634 2008-08-05  Marek Safar  <marek.safar@gmail.com>
3635
3636         * typemanager.cs (IsEqual): Guard against null.
3637         
3638         * ecore.cs, class.cs, convert.cs, const.cs, constant.cs, expression.cs,
3639         attribute.cs, enum.cs, statement.cs: Pass EmitContext to constant conversion
3640         routine. Fixed few misleading conversion errors.
3641
3642 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3643
3644         * class.cs: Consider generics when checking cycles in struct layout.
3645
3646 2008-08-04  Raja R Harinath  <harinath@hurrynot.org>
3647
3648         * cs-tokenizer.cs (get_cmd_arg): Simplify.  Don't be too pedantic.
3649
3650 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3651
3652         A fix for bug #414165
3653         * anonymous.cs: Use same anonymous implementation method for all anonymous
3654         method emits.
3655
3656 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3657
3658         * generic.cs, anonymous.cs, statement.cs: Emit inherited anonymous method
3659         constraints.
3660
3661 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3662
3663         * cs-parser.jay: Typeof argument has to be a type expression.
3664         
3665         * namespace.cs: Check alias and namespace definitions collisions.
3666         
3667         * class.cs, pending.cs: Moved explicit interface accessor implementation
3668         check.
3669         
3670         * delegate.cs, expression.cs: Verify special name invocations.
3671         
3672 2008-08-01  Marek Safar  <marek.safar@gmail.com>
3673
3674         * cs-parser.jay: Don't choke on empty generic type arguments.
3675         
3676         * cs-tokenizer.cs: Handle escaped preprocessor directives.
3677         
3678         * expression.cs, ecore.cs: Minor expressions bugs.
3679
3680 2008-08-01  Marek Safar  <marek.safar@gmail.com>
3681
3682         * cs-parser.jay: Removed duplicate interface declaration (fixes 2 conflicts)
3683         and added more error handling.
3684         
3685         * class.cs, iterators.cs, anonymous.cs: Removed useless interface parameter.
3686         
3687         *  modifiers.cs, enum.cs: Fixed.
3688
3689 2008-07-31  Jb Evain  <jbevain@novell.com>
3690
3691         * driver.cs: remove -pkg ability of smcs.
3692
3693 2008-07-30  Marek Safar  <marek.safar@gmail.com>
3694
3695         * statement.cs (Switch): Correctly set empty default target for single
3696         blocks.
3697
3698 2008-07-30  Marek Safar  <marek.safar@gmail.com>
3699
3700         * typemanager.cs, assign.cs, driver.cs, expression.cs, statement.cs: Rewrote
3701         string switch statement implementation to use string dictionary which
3702         significantly (2-8x) improves performance of generated code.
3703
3704 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3705
3706         A fix for bug #412880 by Atsushi Enomoto <atsushi@ximian.com>
3707         * modifiers.cs (GetDescription): Fixed FamANDAssem case.
3708         
3709 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3710
3711         A fix for bug #412595
3712         * typemanager.cs, convert.cs, expression.cs: Some types are never
3713         convertible to each other.
3714
3715 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3716
3717         * nullable.cs (CreateNullConstant): An error messages update.
3718
3719 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3720
3721         A fix for bug #412595
3722         * cfold.cs: Don't cast undefined bool constant.
3723
3724 2008-07-29  Martin Baulig  <martin@ximian.com>
3725
3726         * symbolwriter.cs
3727         (SymbolWriter.Reset): New public static method.
3728
3729         * driver.cs
3730         (CompilerCallableEntryPoint.Reset): Call SymbolWriter.Reset().
3731
3732 2008-07-28  Marek Safar  <marek.safar@gmail.com>
3733
3734         * cs-tokenizer.cs (IsLambdaOpenParens): Optimized using more stop tokens.
3735         
3736         * expression.cs (ElementAccess): Exact size allocation.
3737
3738 2008-07-26  Marek Safar  <marek.safar@gmail.com>
3739
3740         * driver.cs: Replaced outdated UnixParseOption with CSCParseOption.
3741
3742 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3743
3744         * flowanalysis.cs (StructInfo): Fixed detection of dynamic types.
3745         
3746         * class.cs: Removed $PRIVATE$ field hack which caused problems during
3747         flow analysis.
3748
3749 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3750
3751         A fix for bug #412217
3752         * assign.cs: Mutate also assignment type.
3753
3754 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3755
3756         A fix for bug #323644
3757         * typemanager.cs (IsValidProperty): Verify DefaultMemberName when checking
3758         indexers.
3759
3760 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3761
3762         A fix for bug #412134
3763         * expression.cs (ResolveOperatorEnum): Do implicit conversion of
3764         non-enumerable operands when overloading equality or bitwise operators.
3765
3766 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3767
3768         * anonymous.cs: Cache closed generic anonymous method delegates.
3769
3770 2008-07-24  Marek Safar  <marek.safar@gmail.com>
3771
3772         * lambda.cs, linq.cs, class.cs, iterators.cs, cs-parser.jay, assign.cs, 
3773         anonymous.cs, statement.cs: Always emit anonymous method as static method
3774         when is instance free. Use nesting for nested anynomous methods blocks.
3775         
3776 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3777
3778         * anonymous.cs (MutateGenericMethod): Added extra code path for imported
3779         types.
3780
3781 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3782
3783         * expression.cs: Removed MakeSimpleCall.
3784
3785 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3786
3787         A fix for bug #323012
3788         * class.cs, pending.cs: Emit proxy for indexers when they differ in name.
3789         Base method implementing interface has to be public.
3790
3791 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3792
3793         * cs-parser.jay: Don't break on missing argument.
3794
3795 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3796
3797         A fix for bug #320993
3798         * report.cs, parameter.cs, class.cs, decl.cs, delegate.cs, attribute.cs,
3799           enum.cs, codegen.cs: Report CLS compliance errors as warnings.
3800
3801 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3802
3803         A fix for bug #320748
3804         * convert.cs: Implicit user operators cannot convert to interfaces
3805
3806 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3807
3808         A fix for bug #312686
3809         * driver.cs: Ignore empty assembly references.
3810
3811 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3812
3813         A fix for bug #387040
3814         * ecore.cs: Skip constrains check for an explicit implementation.
3815
3816 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3817
3818         A fix for bug #409045
3819         * cs-tokenizer.cs, rootcontext.cs, class.cs, location.cs, delegate.cs,
3820           cs-parser.jay, driver.cs, expression.cs, attribute.cs: Conditional
3821           identifiers are file specific unless passed as input arguments.
3822
3823 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3824
3825          * typemanager.cs, parameter.cs, class.cs, attribute.cs: Use an attribute
3826          to emit UnmanagedMarshal data under 2.0 profile.
3827
3828 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3829
3830         A fix for bug #410369
3831         * parameter.cs: Clone correctly ParamsParameter.
3832
3833 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3834
3835         * expression.cs (Argument): Always report type for type based expressions
3836         errors.
3837
3838 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3839
3840         A fix for bug #410666
3841         * anonymous.cs: Correctly initialize generic storey reference.
3842
3843 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3844
3845         * convert.cs: Don't box same type arguments.
3846
3847 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3848
3849         * ecore.cs, linq.cs, delegate.cs, constant.cs, nullable.cs, expression.cs:
3850         Finished missing generic type mutators.
3851
3852 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3853
3854         * iterators.cs, statement.cs: Finished statements CloneTo.
3855
3856 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3857
3858         * anonymous.cs: ExpressionTreeProxy is of Value type expression.
3859         
3860         * expression.cs: Emit optimized default value expressions in expression tree
3861         array initializer.
3862
3863 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3864
3865         * ecore.cs, cs-parser.jay, statement.cs: Error reporting fixes.
3866
3867 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3868
3869         A fix for bug #367536
3870         * cs-parser.jay: Check static constructor of generic types for an access
3871         modifier.
3872
3873 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3874
3875         A fix for bug #353800
3876         * lambda.cs: Emit ret for contextual statements.
3877         
3878         * codegen.cs: Keep both resolved and unreachable flags, otherwise we end
3879         up emitting redundant ret for all anonymous methods with return.
3880
3881 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3882
3883         A fix for bug #365188
3884         * ecore.cs, anonymous.cs, expression.cs, codegen.cs, statement.cs: Don't
3885         create anonymous method storey in unreachable block.
3886
3887 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3888
3889         * generic.cs, typemanager.cs, cs-tokenizer.cs, parameter.cs, namespace.cs,
3890         class.cs, delegate.cs, flowanalysis.cs, iterators.cs, anonymous.cs,
3891         driver.cs, nullable.cs, expression.cs, attribute.cs, codegen.cs,
3892         statement.cs: Fixed relevant defects found by Gendarme.
3893
3894 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3895
3896         A fix for bug #325291
3897         * modifiers.cs, class.cs, cs-parser.jay, anonymous.cs, codegen.cs, 
3898         statement.cs: Replaced IAnonymousHost with top level block flag.
3899
3900 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3901
3902         * cs-parser.jay: Clean up unused open_parens.
3903
3904 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3905
3906         * ecore.cs: Custom error message for a range variable assignment.
3907
3908 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3909
3910         * constant.cs, typemanager.cs: Emit empty string ("") as string.Empty field
3911         load.
3912
3913 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3914
3915         * literal.cs: Null literal is of object type.
3916
3917 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3918
3919         * nullable.cs (LiftedBinaryOperator): Always lift unwrapped nullable
3920         expression of nullable equality comparison.
3921
3922 2008-07-15  Marek Safar  <marek.safar@gmail.com>
3923
3924         * expression.cs(PointerArithmetic): Removed redundant assignment.
3925
3926 2008-07-15  Marek Safar  <marek.safar@gmail.com>
3927
3928         * decl.cs (GetSignatureForError): Report full namespace name for containers.
3929
3930 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3931
3932         A fix for bug #408361
3933         * anonymous.cs (MutateGenericMethod): Store generic type arguments before
3934         they are replaced by GetMethod.
3935
3936 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3937
3938         A fix for bug #408721 by jeremie.laval@gmail.com
3939         * expression.cs (Indirection): Implemented CloneTo.
3940
3941 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3942
3943         * statement.cs (AssignableSlots): Temporary disabled variable initialization
3944         assert check.
3945
3946 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3947
3948         * report.cs (EnableReporting): Don't reinitialize 0-based values.
3949
3950 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3951
3952         * linq.cs: Reset tranparent parameter counter in probing mode.
3953
3954 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3955
3956         * anonymous.cs: Mutate anonymous method type.
3957
3958 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3959
3960         * ecore.cs, anonymous.cs: Mutate field expressions.
3961
3962 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3963
3964         A fix for bug #369670
3965         * linq.cs, statement.cs: Use explicit block for query expressions variables.
3966
3967 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3968
3969         * report.cs, ecore.cs: Flush recorder only when silent mode is off.
3970
3971 2008-07-10  Raja R Harinath  <harinath@hurrynot.org>
3972
3973         Fix bug #314902
3974         * cs-tokenizer.cs (is_punct): If a generic lookahead is looking
3975         only one '>', and finds a '>>', abort the generic lookahead.
3976
3977 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3978
3979         A fix for bug #319902
3980         * cs-tokenizer.cs: Always look-ahed for `>='  when tokenizing `>'.
3981
3982 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3983
3984         A fix for bug #406371
3985         * statement.cs: Moved EmitSymbolInfo to Block.
3986
3987 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3988
3989         * ecore.cs: Report better error for extension method overload failures.
3990
3991 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3992
3993         * expression.cs (Is): No need to box reference values.
3994
3995 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3996
3997         * class.cs: Use event resolve context when initializing CreateEmitContext.
3998
3999 2008-07-09  Marek Safar  <marek.safar@gmail.com>
4000
4001         A fix for bug #394436
4002         * anonymous.cs, class.cs, expression.cs, lambda.cs: Emit correctly extension
4003         method used inside expression trees. Added more LINQ to expression tree
4004         conversions.
4005
4006 2008-07-08  Marek Safar  <marek.safar@gmail.com>
4007
4008         A fix for bug #378189, #370577
4009         * lambda.cs, ecore.cs: Implemented 3.0 enhancement to better conversion
4010         from expression.
4011
4012 2008-07-08  Marek Safar  <marek.safar@gmail.com>
4013
4014         * anonymous.cs, class.cs, decl.cs: Emit CompilerGenerated attribute
4015         hierarchically.
4016
4017 2008-07-08  Marek Safar  <marek.safar@gmail.com>
4018
4019         A fix for bug #406702
4020         * anonymous.cs: Always park anonymous method in the nearest parent storey.
4021
4022 2008-07-07  Marek Safar  <marek.safar@gmail.com>
4023
4024         A fix for bug #406648
4025         * cs-parser.jay: Report nullable use in mcs for some cases.
4026
4027 2008-07-07  Marek Safar  <marek.safar@gmail.com>
4028
4029         * ecore.cs: Improved argument mismatch error messages.
4030
4031 2008-07-07  Marek Safar  <marek.safar@gmail.com>
4032
4033         * anonymous.cs: Don't cache generic delegates when reference MVAR argument.
4034
4035 2008-07-07  Marek Safar  <marek.safar@gmail.com>
4036
4037         * expression.cs (TypeOf): Mutate type argument.
4038
4039 2008-07-04  Marek Safar  <marek.safar@gmail.com>
4040
4041         * class.cs: Report missing partial modifier for correct type.
4042
4043 2008-07-04  Marek Safar  <marek.safar@gmail.com>
4044
4045         * ecore.cs, expression.cs (VariableReference): Variable property is 
4046         protected.
4047
4048 2008-07-04  Marek Safar  <marek.safar@gmail.com>
4049
4050         * ecore.cs, convert.cs: Made OpcodeCast more memory efficient.
4051         
4052 2008-07-04  Marek Safar  <marek.safar@gmail.com>
4053
4054         * anonymous.cs, class.cs, lambda.cs, iterator.cs: Cache static anonymous
4055         method delegates.
4056
4057 2008-07-04  Marek Safar  <marek.safar@gmail.com>
4058
4059         * anonymous.cs, class.cs, expression.cs, iterator.cs, statement.cs: Reduce
4060         anonymous method storey to an instance method when only "this" is hoisted.
4061
4062 2008-07-03  Marek Safar  <marek.safar@gmail.com>
4063
4064         A fix for bug #321615
4065         * expression.cs: Pointer comparisons use unsigned operator.
4066
4067 2008-07-03  Marek Safar  <marek.safar@gmail.com>
4068
4069         * expression.cs: Fixed native pointer conversions. Also fixes #321615.
4070
4071 2008-07-02  Marek Safar  <marek.safar@gmail.com>
4072
4073         A fix for bug #404905
4074         * class.cs: Always initialize local unsafe variables.
4075
4076 2008-06-30  Marek Safar  <marek.safar@gmail.com>
4077
4078         A fix for bug #396987
4079         * expression.cs (NewInitialize): Clear local temporary variable for next run
4080
4081 2008-06-27  Marek Safar  <marek.safar@gmail.com>
4082
4083         A fix for bug #401020
4084         * ecore.cs: Both types and modifiers have to match for ref and out arguments
4085
4086 2008-06-27  Marek Safar  <marek.safar@gmail.com>
4087
4088         A fix for bug #398319
4089         * cs-parser.jay: Implemented undocumented base access expression inside
4090         anonymous types.
4091
4092 2008-06-26  Marek Safar  <marek.safar@gmail.com>
4093
4094         A fix for bug #404227
4095         * cs-parser.jay: Parse namespace declaration using qualified identifier.
4096
4097 2008-06-26  Marek Safar  <marek.safar@gmail.com>
4098
4099         A fix for bug #404227
4100         * convert.cs: Fixed explicit array to interface cast.
4101
4102 2008-06-26  Marek Safar  <marek.safar@gmail.com>
4103
4104         A fix for bug #403894
4105         * delegate.cs: Mutate DelegateInvocation type.
4106
4107 2008-06-26  Marek Safar  <marek.safar@gmail.com>
4108
4109         A fix for bug #379348
4110         * delegate.cs: Box a load of generic parameters.
4111
4112 2008-06-26  Marek Safar  <marek.safar@gmail.com>
4113
4114         * expression.cs: Add an array creation arguments mutate.
4115
4116 2008-06-26  Marek Safar  <marek.safar@gmail.com>
4117
4118         A fix for bug #386068
4119         * anonymous.cs, expression.cs: Emit correctly hoisted expression tree
4120         parameter.
4121
4122 2008-06-25  Marek Safar  <marek.safar@gmail.com>
4123
4124         * ecore.cs, expression.cs: Fixed broken TypeCast clone, implemented few more
4125         CloneTo.
4126
4127 2008-06-25  Marek Safar  <marek.safar@gmail.com>
4128
4129         A fix for bug #403518
4130         * delegate.cs: Type correctly anonymous method new invocation.
4131
4132 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4133
4134         A fix for bug #394826
4135         * anonymous.cs: Fully qualify members when resolving anonymous type internal
4136         calls.
4137
4138 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4139
4140         A fix for bug #394826
4141         * anonymous.cs, iterators.cs: Construct generic storey only when is really
4142         needed.
4143
4144 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4145
4146         * class.cs: Clone indexer parameters for localized capturing.
4147
4148 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4149
4150         A fix for bug #402379
4151         * expression.cs: Don't crash when an object initializer resolve fails.
4152
4153 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4154
4155         A fix for bug #402888
4156         * expression.cs: Mutate conditional expression.
4157
4158 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4159
4160         A fix for bug #401012
4161         * class.cs: Keep StructLayout in shared container.
4162
4163 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4164
4165         A fix for bug #400438
4166         * decl.cs, class.cs: Only properties can be automatically implemented.
4167
4168 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4169
4170         * statement.cs (ChangeToIterator): Copy also labels.
4171
4172 2008-06-23  Marek Safar  <marek.safar@gmail.com>
4173
4174         * ecore.cs: Pass type argument details to parent extension method.
4175
4176 2008-06-23  Marek Safar  <marek.safar@gmail.com>
4177
4178         A fix for bug #375966
4179         * delegate.cs: Fixed IsTypeCovariant generic type conversions.
4180
4181 2008-06-23  Raja R Harinath  <harinath@hurrynot.org>
4182
4183         * Makefile (bootstrap-libs): Pass NO_DIR_CHECK to sub-make.
4184
4185 2008-06-22  Marek Safar  <marek.safar@gmail.com>
4186
4187         A fix for bug #394347
4188         * anonymous.cs: Cache compatible delegates as compatibility check produces
4189         a new method every time.
4190
4191 2008-06-20  Marek Safar  <marek.safar@gmail.com>
4192
4193         * anonymous.cs: Propagate storey reference for single references.
4194
4195 2008-06-20  Marek Safar  <marek.safar@gmail.com>
4196
4197         A fix for bug #387615
4198         * assign.cs, expression.cs: Correctly clone compound assignment.
4199
4200 2008-06-19  Marek Safar  <marek.safar@gmail.com>
4201
4202         A fix for bug #359611, #359604
4203         * anonymous.cs: Mutate all types of hoisted parameters.
4204
4205 2008-06-19  Marek Safar  <marek.safar@gmail.com>
4206
4207         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, linq.cs, class.cs
4208         delegate.cs, iterators.cs, cs-parser.jay, assign.cs, anonymous.cs, driver.cs
4209         expression.cs, codegen.cs, statement.cs
4210         
4211         Fixes bugs: #318652, #323223, #234779, #325069, #325476, #332532, #334465,
4212         #345907, #349190, #353276, #355256, #359617, #378542, #384584, #396530
4213         
4214         ** Anonymous methods, lambda expressions rewrite **
4215         
4216         Anonymous expressions are now resolved when an explicit block is resolved 
4217         and they don't require any registration procedure anymore. Further,
4218         anonymous methods are defined when explicit block is emitted which allows
4219         better control of whole process and opens possibilities for more
4220         optimizations as well as alternative to reverse whole process.
4221         
4222         A concept of `MutateHoistedGenericType' was introduced to keep the resolve
4223         process consistent and to correctly emit hoisted generic methods when they
4224         have at least 1 hoisted variable.
4225         
4226 2008-06-17  Martin Baulig  <martin@ximian.com>
4227
4228         * class.cs: Also emit the `[DebuggerHidden]' attribute on the main
4229         iterator method.
4230         (AbstractPropertyEventMethod.IsDebuggerHidden): New protected
4231         virtual property; check it in Emit().
4232         (PropertyMethod.IsDebuggerHidden): Override, check whether we're
4233         an iterator.
4234         (MethodOrOperator.ResolveMethods): Set `DEBUGGER_HIDDEN' if we're
4235         an iterator.
4236         (Indexer.Define): Likewise.
4237
4238 2008-06-17  Marek Safar  <marek.safar@gmail.com>
4239
4240         * convert.cs: Don't use IsInterface on type arguments.
4241         
4242         * delegate.cs: DelegateInvocation uses MethodInfo.
4243         
4244         * parameter.cs: Removed IsTypeParameter.
4245         
4246         * generic-mcs.cs: More missing stuff.
4247
4248 2008-06-16  Martin Baulig  <martin@ximian.com>
4249
4250         * modifiers.cs
4251         (Modifiers.DEBUGGER_HIDDEN): New public const.
4252
4253         * typemanager.cs
4254         (TypeManager.GetDebuggerHiddenAttribute): New public static method.
4255
4256         * class.cs
4257         (MethodOrOperator.Emit): Check `Modifiers.DEBUGGER_HIDDEN'.
4258         (AbstractPropertyEventMethod): Likewise.
4259         (Constructor.Emit): Likewise.
4260         (SourceMethod.SetCompilerGenerated): Removed.
4261
4262         * iterator.cs: Set `Modifiers.DEBUGGER_HIDDEN' everywhere except
4263         on MoveNext().
4264
4265         * anonymous.cs
4266         (RootScopeInfo.DoDefineMembers): Set `Modifiers.DEBUGGER_HIDDEN'
4267         if we're an `IteratorHost'.
4268         (AnonymousMethodMethod..ctor): Don't set
4269         `Modifiers.COMPILER_GENERATED'; csc only sets this on the class,
4270         not on the method.
4271
4272 2008-06-16  Marek Safar  <marek.safar@gmail.com>
4273
4274         * statement.cs: Clean-up foreach statements.
4275
4276 2008-06-12  Marek Safar  <marek.safar@gmail.com>
4277
4278         * class.cs: Stop using public method which should not exist
4279         (MethodBuilder.SetGenericMethodSignature).
4280
4281 2008-06-11  Martin Baulig  <martin@ximian.com>
4282
4283         * location.cs
4284         (Location.LookupFile): Add `CompilationUnit' argument; when given
4285         a relative file name, make it relative to the directory the .cs
4286         file is located in instead of using the current directory.
4287
4288 2008-06-11  Martin Baulig  <martin@ximian.com>
4289
4290         * class.cs
4291         (IMethodData.EmitExtraSymbolInfo): Added `SourceMethod' argument.
4292         (MethodOrOperator.EmitExtraSymbolInfo): Likewise.
4293         (SourceMethod.SetRealMethodName): Moved here from the symbol writer.
4294         (SourceMethod.SetCompilerGenerated): Likewise.
4295
4296 2008-06-11  Marek Safar  <marek.safar@gmail.com>
4297
4298         * codegen.cs, driver: Only write symbol file when it's asked for.
4299
4300 2008-06-11  Marek Safar  <marek.safar@gmail.com>
4301
4302         * codegen.cs: Don't use assembly writer error handling for symbol writer.
4303
4304 2008-06-10  Martin Baulig  <martin@ximian.com>
4305
4306         * symbolwriter.cs: Reflect latest MarkSequencePoint() API changes.
4307
4308 2008-06-09  Marek Safar  <marek.safar@gmail.com>
4309
4310         A fix for bug #316290
4311         * expression.cs: Include decimal operators in predefined table.
4312         
4313         * parameters.cs: More readonlyness.
4314
4315 2008-06-09  Marek Safar  <marek.safar@gmail.com>
4316
4317         A fix for bug #397213
4318         * cs-parser.jay: One more missing current_local_parameters reset.
4319
4320 2008-06-09  Marek Safar  <marek.safar@gmail.com>
4321
4322         A fix for bug #396633
4323         * class.cs: Host backing field in partial container.
4324
4325 2008-06-09  Marek Safar  <marek.safar@gmail.com>
4326
4327         A fix for bug #397068
4328         * expression.cs: Check both operand types when predefined operator is used.
4329
4330 2008-06-05  Martin Baulig  <martin@ximian.com>
4331
4332         Merged the `debugger-kahalo' branch.
4333
4334         * class.cs
4335         (MethodData.Emit): Call SymbolWriter.SetCompilerGenerated() if
4336         we're an iterator method.
4337         (SourceMethod): Reflect latest symbol writer changes;
4338         SymbolWriter.OpenMethod() now takes a `ICompileUnit' argument and
4339         now `start_row' and `end_row'.
4340         (Constructor.Emit): Fix the logic whether to emit symbol information.
4341
4342         * iterator.cs: Call SymbolWriter.SetCompilerGenerated() on all the
4343         generated methods.
4344
4345         * location.cs
4346         (CompilationUnit): New public class; derives from `SourceFile'.
4347         (SourceFileEntry.DefineSymbolInfo): New public method.
4348         (SourceFileEntry.SetChecksum): New public method.
4349         (Location): Encode hidden line numbers by using `column == 255';
4350         the .ctor now accepts `column == -1' to mark a hidden line number.
4351         (Location.Hidden): New public property.
4352         (Location.CheckPoint): Add `CompilationUnit'.
4353         (Location.SourceFiles): Change return type to `CompilationUnit[]'.
4354         (Location.Push): Add `CompilationUnit compile_unit' argument.
4355         (Location.CompilationUnit): New public property.
4356
4357         * statement.cs
4358         (ToplevelBlock.Emit): Add `ec.Mark (EndLocation)'.
4359
4360         * cs-parser.jay: `SourceFile' -> `CompilationUnit'.
4361
4362         * driver.cs: `SourceFile' -> `CompilationUnit'.
4363
4364         * cs-tokenizer.cs: `SourceFile' -> `CompilationUnit'.
4365
4366         * namespace.cs: `SourceFile' -> `CompilationUnit'.
4367
4368         * cs-tokenizer.cs: Add support for `#pragma checksum' and
4369         `#line hidden'.
4370
4371         * symbolwriter.cs
4372         (SymbolWriter.MarkSequencePoint): Take a `Location' and use the
4373         new symbol writer API to also pass the file.
4374
4375 2008-06-05  Marek Safar  <marek.safar@gmail.com>
4376
4377         * statement.cs: Emit catch variable assignment using variable expression.
4378         
4379 2008-06-05  Marek Safar  <marek.safar@gmail.com>
4380
4381         * ecore.cs, expression.cs, statement.cs: Make TemporaryVariable compatible
4382         with other variable types.
4383
4384 2008-06-04  Marek Safar  <marek.safar@gmail.com>
4385
4386         * ecore.cs, expression.cs, statement.cs, typemanager.cs: Removed custom
4387         GetLength method emit, it breaks resolve rules.
4388         
4389 2008-06-02  Atsushi Enomoto  <atsushi@ximian.com>
4390             Marek Safar  <marek.safar@gmail.com>
4391                         
4392         A fix for bug #395542
4393         * cs-parser.jay: The trailing comma is allowed in anonymous type member
4394         declaration.
4395         
4396 2008-06-02  Marek Safar  <marek.safar@gmail.com>
4397
4398         A fix for bug #395287
4399         * class.cs, modifiers.cs: Automatic properties method base modifiers checks.
4400
4401 2008-05-31  Marek Safar  <marek.safar@gmail.com>
4402
4403         A fix for bug #395845
4404         * class.cs, nullable.cs: User unary operator is allowed to have nullable and
4405         non-nullable parameter type.
4406         
4407 2008-05-31  Marek Safar  <marek.safar@gmail.com>
4408
4409         * class.cs: Handle contructor initializer as a statement in top-level block.
4410
4411 2008-05-30  Marek Safar  <marek.safar@gmail.com>
4412
4413         * attribute.cs: Don't mix old and new corlib types when emitting corlib
4414         security attributes.
4415
4416 2008-05-24  Marek Safar  <marek.safar@gmail.com>
4417
4418         * ecore.cs, expression.cs: Small IVariable refactoring.
4419
4420 2008-05-22  Marek Safar  <marek.safar@gmail.com>
4421
4422         * assign.cs (LocalTemporary): Implemented CreateExpressionTree.
4423
4424 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4425
4426         * cs-parser.jay: Removed redundant catch type check.
4427
4428 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4429
4430         A fix for bug #390372
4431         * nullable.cs: Set correct return type.
4432
4433 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4434
4435         A fix for bug #391062
4436         * typemanager.cs: Fixed crash when comparing null types.
4437
4438 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4439
4440         A fix for bug #391871
4441         * cs-parser.jay: Better error handling for invalid catch type.
4442
4443 2008-05-20  Marek Safar  <marek.safar@gmail.com>
4444
4445         A fix for bug #392155
4446         * cs-tokenizer.cs: Fixed casting of byte and decimal expression.
4447
4448 2008-05-15  Marek Safar  <marek.safar@gmail.com>
4449
4450         A fix for bug #390666
4451         * ecore.cs (BetterExpressionConversion): Unwrap each Expression<T>
4452         expressions.
4453
4454 2008-05-15  Marek Safar  <marek.safar@gmail.com>
4455
4456         * class.cs, expression.cs, statement.cs: Removed a hack, setting block flag
4457         in getter.
4458
4459 2008-05-13  Marek Safar  <marek.safar@gmail.com>
4460
4461         A fix for bug #389625
4462         * delegate.cs, generic.cs: Some progress on method group return type
4463         inference.
4464
4465 2008-05-13  Marek Safar  <marek.safar@gmail.com>
4466
4467         A fix for bug #378419
4468         * namespace.cs: Inspect also parent namespaces not only namespace entries.
4469
4470 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4471
4472         * class.cs (Constructor): Added IsCompilerGenerated.
4473
4474 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4475
4476         * expression.cs: Enum binary operators can accept non-enum operand only when
4477         is implicitly convertible to underlying type.
4478
4479 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4480
4481         A fix for bug #389272
4482         * support.cs: Workaround System.InvalidOperationException for enums.
4483
4484 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4485
4486         A fix for bug #389073
4487         * convert.cs: More undocumented explicit IntPtr/UIntPtr conversions.
4488
4489 2008-05-10  Marek Safar  <marek.safar@gmail.com>
4490
4491         * driver.cs: Split Parse.
4492         
4493         * location.cs (LookupFile): Uses string.Empty.
4494
4495 2008-05-07  Marek Safar  <marek.safar@gmail.com>
4496
4497         * expression.cs, parameter.cs: Small ParameterReference clean up.
4498
4499 2008-05-07  Marek Safar  <marek.safar@gmail.com>
4500
4501         * anonymous.cs, codegen.cs, convert.cs, ecore.cs: Removed uber ugly TempEc
4502         hack. Fixes #387502.
4503
4504 2008-05-06  Martin Baulig  <martin@ximian.com>
4505
4506         * class.cs (Constructor.Emit): Fix the logic whether to emit
4507         symbol information.
4508
4509 2008-05-06  Raja R Harinath  <harinath@hurrynot.org>
4510
4511         Fix #385503
4512         * iterators.cs (Iterator.CurrentBlock.DoEmit): Don't emit
4513         InvalidOperationException when the iterator is before the start or
4514         after the end.
4515
4516 2008-05-06  Marek Safar  <marek.safar@gmail.com>
4517
4518         * nullable.cs (NullCoalescingOperator): Result is underlying type of left,
4519         when left is nullable type.
4520
4521 2008-05-06  Marek Safar  <marek.safar@gmail.com>
4522
4523         A fix for bug #386628
4524         * expression.cs (LocalVariableReference): Continue in resolving when
4525         variable is not assigned.
4526
4527 2008-05-05  Marek Safar  <marek.safar@gmail.com>
4528
4529         * nullable.cs, statement.cs (Unwrap): Store non-variable expression in all
4530         nullable operations.
4531
4532 2008-05-04  Marek Safar  <marek.safar@gmail.com>
4533
4534         * nullable.cs, statement.cs (Unwrap): Don't duplicate variable expressions,
4535         it saves many redundant temporary variables for nullable operations.
4536
4537 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4538
4539         * assign.cs: EventAddOrRemove is a statement and cannot have a type.
4540         
4541         * cfold.cs, constant.cs, expression.cs: Share Error_OperatorCannotBeApplied
4542         method.
4543         
4544         * nullable.cs: Constant coalescing operator optimizations.
4545
4546 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4547
4548         * constant.cs: Use unsigned conversion for values which are unsigned only.
4549
4550 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4551
4552         * convert.cs, literal.cs, nullabel.cs, typemanager.cs: Implemeted null 
4553         coalescing operator as it should be.
4554
4555 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4556
4557         A fix for bug #371016
4558         * expression.cs: All predefined delegate operators require implicit method
4559         group conversion.
4560         
4561 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4562
4563         * constant.cs: Emit long constant as uint when fits the range.
4564         
4565         * convert.cs, expression.cs: Fixed few unsafe conversions.
4566
4567 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4568
4569         * convert.cs, literal.cs: Don't wrap implicit reference conversion to object
4570
4571 2008-05-02  Raja R Harinath  <harinath@hurrynot.org>
4572
4573         Fix #385758
4574         * convert.cs (ImplicitNumericConversion): Don't modify the type of
4575         'expr'.
4576         * ecore.cs (EmptyCast.Create): Flatten nested EmptyCasts.
4577
4578 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4579
4580         * constant.cs, literal.cs: IsLiteral property for error reporting.
4581         
4582         * ecore.cs, expression.cs: Implemented Property expression.
4583
4584 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4585
4586         * class.cs, modifiers.cs, flowanalysis.cs: New BACKING_FIELD flag.
4587         
4588         * nullable.cs: Implemented nullable coalescing null operator.
4589
4590         * ecore.cs, expression.cs: Expression trees work.
4591
4592 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4593
4594         * ecore.cs: CreateExpressionTree is finally abstract.
4595
4596         * expression.cs, linq.cs: Updated.
4597
4598 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4599
4600         * expression.cs, ecore.cs: Block base access expression inside expression
4601         tree.
4602
4603 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4604
4605         A fix for bug #385058
4606         * expression.cs: User-defined operator implementations always take
4607         precedence over predefined operator implementations.
4608
4609 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4610
4611         * assign.cs, anonymous.cs, lambda.cs, nullable.cs, ecore.cs, linq.cs,
4612         class.cs, iterators.cs, expression.cs, attribute.cs: Filled a few more
4613         expression tree conversions.
4614         
4615 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4616
4617         * typemanager.cs, ecore.cs, class.cs, expression.cs, doc.cs: Merged all
4618         operators method details to Operator class.
4619
4620 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4621
4622         * anonymous.cs: Pass unsafe flags to anonymous container.
4623         
4624         * ecore.cs, expression.cs, statement.cs: Block unsafe pointer operations
4625         inside expression tree.
4626
4627 2008-04-29  Martin Baulig  <martin@ximian.com>
4628
4629         * cs-tokenizer.cs (Tokenizer.Position): Added `line'.
4630         (Tokenizer.PopPosition): Also restore the `line'.
4631
4632 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4633
4634         * delegate.cs: Implemented Invoke expression.
4635
4636 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4637
4638         * expression.cs: Fixed equality reference comparison regression.
4639
4640 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4641
4642         * ecore.cs: Clean up EmptyCast hack.
4643         
4644         * expression.cs, nullable.cs: Implemented enum binary and unary operations
4645         using correct conversion rules. Also fixes #383993.
4646
4647 2008-04-28  Martin Baulig  <martin@ximian.com>
4648
4649         * class.cs (Constructor.Emit): Don't emit debugging information
4650         for generated default .ctor's.
4651
4652 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4653
4654         * convert.cs: Empty-cast ushort to int conversion.
4655
4656 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4657
4658         A fix for bug #384191
4659         * ecore.cs, expression.cs: Fixed expression cloning.
4660
4661 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4662
4663         * ecore.cs, delegate.cs, assign.cs: Few tweaks for recent changes.
4664
4665 2008-04-28  Raja R Harinath  <harinath@hurrynot.org>
4666
4667         Fix #381559, test-638.cs, test-639.cs
4668         * assign.cs (CompoundAssign.Helper): New wrapper.
4669         (CompoundAssign.DoResolve): Use it to wrap the nested 'target'
4670         access.
4671         * ecore.cs (MethodGroupExpr.VerifyArgumentsCompat) <params arguments>:
4672         Pass unconverted expressions to the params array creation expression.
4673         (FieldExpr.EmitAssign): Don't special-case StringConcat.
4674         (PropertyExpr.EmitAssign): Likewise.
4675         * expression.cs (ArrayCreation.ResolveArrayElement): Keep track of the
4676         element if it is of kind CompoundAssign.Helper.
4677         (ArrayCreation.Emit): If we saw a CompoundAssign.Helper, emit it
4678         first before anything else.
4679         (ArrayAccess.EmitAssign): Don't special-case StringConcat.
4680         (ArrayAccess.LoadArrayAndArguments): Simplify.
4681
4682 2008-04-27  Marek Safar  <marek.safar@gmail.com>
4683
4684         * expression.cs: Fixed cloning of typeof(void).
4685
4686 2008-04-27  Raja R Harinath  <harinath@hurrynot.org>
4687
4688         * assign.cs (Assign.DoResolve): Remove support for EventExprs.
4689         (Assign.Emit): Likewise.  Move it to ...
4690         (CompoundAssign.DoResolve): ... here and ...
4691         (CompoundAssign.Emit): ... here.
4692         (EventAddOrRemove): New helper to handle += and -= on events, and
4693         avoid the use of BinaryDelegates.
4694         * ecore.cs (EventExpr.DoResolveLValue): Emit CS0070 unconditionally.
4695         (EventExpr.EmitAddOrRemove): Improve.
4696         * delegate.cs (DelegateInvocation.DoResolve): Simplify slightly.
4697
4698         * cs-parser.jay (type) <namespace_or_type_name variant>: Don't
4699         create VarExprs for 'foo.bar.var'.
4700         * ecore.cs (VarExpr.InferType): Rename from DoResolveLValue, which
4701         is a highly inappropriate name for its functionality.
4702
4703 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
4704
4705         Simplify handling of multiple assignments
4706         * assign.cs (Assign): Clear out all 'embedded assign' gunk.  Make
4707         inheritable-only.
4708         (SimpleAssign): New.  Class to be used for normal assignments.
4709         * anonymous.cs, class.cs, cs-parser.jay: Update to changes.
4710         * expression.cs, parameter.cs, statement.cs: Likewise.
4711
4712 2008-04-25  Marek Safar  <marek.safar@gmail.com>
4713
4714         * ecore.cs, expression.cs, nullable.cs: Implemeted enum binary add operation
4715         for incompatible underlying types, more to come, uff.
4716
4717 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
4718
4719         Fix gtest-388.cs
4720         * expression.cs (VariableReference.EmitAssign) <source is NewInstance>:
4721         Handle 'leave_copy'.
4722
4723 2008-04-25  Marek Safar  <marek.safar@gmail.com>
4724
4725         * expression.cs, nullable.cs: Implemented UnaryPlus expression.
4726
4727 2008-04-24  Raja R Harinath  <harinath@hurrynot.org>
4728
4729         Fix test-636.cs.  Sprinkle a few more 'EmitSideEffect's around
4730         * expression.cs (Unary.TryReduceConstant): Unwrap SideEffectConstant.
4731         * statement.cs (While, Do, For): Allow test to have side effects.
4732         (For.DoEmit): Always emit InitStatement.
4733
4734         Fix test-635.cs
4735         * expression.cs (Binary.DoResolve) <BitwiseAnd with zero constant>:
4736         Always create SideEffectConstant.
4737         (Binary.EnumLiftUp): Don't assume that the enumeration constant is
4738         of type EnumConstant.
4739
4740         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
4741         Handle 'right' being SideEffectConstant of type 'bool'.
4742
4743         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
4744         Use left.EmitBranchable instead of open coding it, so as to
4745         improve optimization opportunities.
4746
4747         * constant.cs (SideEffectConstant.EmitSideEffect): Simplify slightly.
4748
4749         * ecore.cs (Expression.EmitBranchable): Document some non-obvious
4750         assumptions.
4751         (Expression.EmitSideEffect): Document.
4752
4753 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4754
4755         * expression.cs: Implemented NewArrayBounds, TypeIs, and TypeAs expressions.
4756
4757 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4758
4759         * constant.cs, statement.cs: Use EmitSideEffect for constant if statement.
4760
4761 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4762
4763         * ecore.cs, expression.cs, delegate.cs: Implemeted delegate instantiation
4764         conversion to expression tree.
4765
4766 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4767
4768         * ecore.cs: Removed unused expression.
4769
4770 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4771
4772         * expression.cs: Implemented NegateChecked and New expressions.
4773
4774 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4775
4776         * convert.cs, nullable.cs, expression.cs: Implemented Negate expression.
4777
4778 2008-04-22  Raja R Harinath  <harinath@hurrynot.org>
4779
4780         Fix #351102
4781         * anonymous.cs (AnonymousMethodExpression.DoResolve): Mark as
4782         needing final 'ret' instruction.
4783
4784 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4785
4786         * expression.cs: Disabled lifted binary conversion on ISO-1 profiles.
4787
4788 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4789
4790         * expression.cs: Emit ldnull and not null expression as an instance argument
4791          of static method expression calls.
4792
4793 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4794
4795         A fix for bug #378200
4796         * expression.cs: Fixed crash when creating parameterless expression tree
4797         method call.
4798
4799 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4800
4801         A fix for bug #375297
4802         * anonymous.cs: Fixed crash when inferring from null argument anonymous
4803         method.
4804
4805 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4806
4807         A fix for bug #377596
4808         * decl.cs, class.cs: Emit delegate type argument attributes.
4809
4810 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4811
4812         A fix for bug #365314
4813         * generic.cs, ecore.cs: Type parameter declaration cannot be of generic type
4814         
4815 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4816
4817         * cs-parser.jay, expression.cs: ComposedCast can work with type expressions
4818         only.
4819
4820 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4821
4822         * generic.cs (TypeParameter): Removed redundant location.
4823
4824 2008-04-19  Marek Safar  <marek.safar@gmail.com>
4825
4826         * generic.cs, parameter.cs, namespace.cs, ecore.cs, class.cs, decl.cs,
4827         delegate.cs, iterators.cs, cs-parser.jay, const.cs, enum.cs: Use
4828         FullNamedExpression in all declaration type expression, statements will come
4829         later.
4830
4831 2008-04-18  Marek Safar  <marek.safar@gmail.com>
4832
4833         * generic.cs, namespace.cs, ecore.cs, class.cs, decl.cs, generic-mcs.cs,
4834         nullable.cs, expression.cs, enum.cs, doc.cs: Cleaning up type expressions.
4835
4836 2008-04-18  Marek Safar  <marek.safar@gmail.com>
4837
4838         * parameter.cs, delegate.cs, cs-parser.jay, expression.cs: Removed unused
4839         code.
4840
4841 2008-04-17  Marek Safar  <marek.safar@gmail.com>
4842
4843         * decl.cs, class.cs, generic.cs: Verify partial parts type parameters and
4844         constraints.
4845
4846 2008-04-17  Marek Safar  <marek.safar@gmail.com>
4847
4848         * decl.cs, class.cs, cs-parser.jay, ecore.cs, expression.cs: Unify all type
4849         name expressions.
4850         Also fixes #340463.
4851
4852 2008-04-17  Raja R Harinath  <harinath@hurrynot.org>
4853
4854         Hook up 'EmitSideEffect'
4855         * constant.cs (Constant.EmitSideEffect): New.
4856         (SideEffectConstant.Emit): Simplify.  Use EmitSideEffect.
4857         (SideEffectConstant.EmitSideEffect): New.
4858         * ecore.cs (BoxedCast.EmitBranchable): Remove.  We can't use an
4859         unconditional branch in EmitBranchable.
4860         (FieldExpr.EmitBranchable): New.
4861         * expression.cs (Unary.EmitSideEffect): New.
4862         (Binary.EmitSideEffect): New.
4863         (VariableReference.EmitSideEffect): New.  Do nothing.
4864
4865 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
4866
4867         Introduce 'EmitSideEffect'
4868         * ecore.cs (Expression.EmitSideEffect): New.
4869         (TypeCast): Rename from EmptyCast.
4870         (EmptyCast): New.
4871         (EmptyCast.EmitBranchable, EmptyCast.EmitSideEffect): Implement.
4872         (BoxedCast.EmitBranchable, BoxedCast.EmitSideEffect): Implement.
4873         * convert.cs, nullable.cs: Update to changes.
4874
4875 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4876
4877         * class.cs, cs-parser.jay: Early check for base types expression.
4878
4879 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4880
4881         * decl.cs (MemberName): Declare PrettyName as obsolete.
4882
4883 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4884
4885         * namespace.cs: Use MemberName comparison.
4886
4887 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
4888
4889         Fix build break
4890         * decl.cs (MemberName.PrettyName): New.  Replaces the misnamed
4891         FullName.
4892         (MemberName.MethodName, MemberName.GetSignatureForError): Improve.
4893         (MemberName.FullyQualifiedName): New.  Provides the functionality
4894         that users assume FullName would have.
4895         * ecore.cs, namespace.cs: Update to changes.
4896
4897         * statement.cs (Using.assign): Make into ExpressionStatement.
4898         (Using.EmitPreTryBody): Simplify.
4899
4900 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4901
4902         * report.cs: ColorFormat is protected.
4903         
4904         * rootcontext.cs: Unused fields clean-up.
4905         
4906         * namespace.cs: Made UsingEntry name private.
4907
4908 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4909
4910         * cs-tokenizer.cs, location.cs: Removed unused field.
4911
4912 2008-04-16  Jan Oravec <jan.oravec@6com.sk>
4913             Raja R Harinath  <harinath@hurrynot.org>
4914
4915         Fix #379822
4916         * constant.cs (SideEffectConstant.value): Rename from 'left'.
4917         (SideEffectConstant.side_effect): Rename from 'right'.
4918         (SideEffectConstant..ctor): Normalize 'side_effect'.
4919         (SideEffectConstant.Emit): Emit 'value', not 'side_effect' as the
4920         value of this constant.
4921         * cfold.cs: Update to changes.
4922
4923 2008-04-15  Marek Safar  <marek.safar@gmail.com>
4924
4925         * cs-paser.jay: Removed unused variable.
4926         
4927         * driver.cs: Made Compile instance method.
4928
4929 2008-04-15  Raja R Harinath  <harinath@hurrynot.org>
4930
4931         * flowanalysis.cs (FlowBranching.MergeChild): Simplify.
4932
4933 2008-04-15  Marek Safar  <marek.safar@gmail.com>
4934
4935         * cs-paser.jay, namespace.cs: Simplified handling of namespace imports. 
4936
4937 2008-04-13  Jb Evain  <jbevain@novell.com>
4938
4939         * namespace.cs: update the System.Core fullname for 2.1
4940         * driver.cs: update the list of required assemblies for 2.1.
4941         Merged from the Moonlight 2 branch.
4942
4943 2008-04-11  Marek Safar  <marek.safar@gmail.com>
4944
4945         * assign.cs, ecore.cs, expression.cs, nullable.cs: More work on nullable
4946         types and user defined operators. User operators arguments has to be checked
4947         for null value before invocation, which also means no operator is called
4948         when any argument is not convertible to unwrapped nullable type.
4949         
4950 2008-04-09  Marek Safar  <marek.safar@gmail.com>
4951
4952         * convert.cs, ecore.cs, expression.cs, nullable.cs: Initial refactoring
4953         of Unary expressions to follow operator overloading rules precisely.
4954         Also fixes #321794, #323794
4955         
4956 2008-04-08  Marek Safar  <marek.safar@gmail.com>
4957
4958         * cs-parser.jay, expression.cs: Don't wrap Indirection expression in Unary
4959         expression.
4960         
4961 2008-04-08  Marek Safar  <marek.safar@gmail.com>
4962
4963         * expression.cs, ecore.cs: Implemented MemberInit expression.
4964         
4965 2008-04-08  Raja R Harinath  <harinath@hurrynot.org>
4966
4967         Fix mono/tests/exception4.cs
4968         * statement.cs (ExceptionStatement, TryCatch): Revert to using
4969         ec.NeedReturnLabel () rather emitting a 'nop'.
4970
4971         * statement.cs (ExceptionStatement.SomeCodeFollows): A hook for a
4972         simple heuristic.
4973         (TryCatch.SomeCodeFollows): Likewise.
4974         * flowanalysis.cs (FlowBranchingException): Call 'SomeCodeFollows'
4975         for 'break', 'continue' and 'return' statements inside a try.
4976         We're fairly sure that the generated IL stream will have more
4977         instructions textually following the try.
4978         (FlowBranchingTryCatch): Likewise.
4979
4980         * statement.cs (Throw.Resolve): Move CS0156 and CS0724 testing ...
4981         * flowanalysis.cs (FlowBranching.CheckRethrow): ... here and to its
4982         overrides.
4983
4984         * statement.cs (CollectionForeach.DisposableWrapper): Make a true
4985         wrapper -- forward everything to CollectionForeach.
4986         (CollectionForeach.NonDisposableWrapper): New.
4987         (CollectionForeach.EmitFinallyBody): Use 'endfinally' instruction
4988         instead of a pop + branch to end.
4989
4990 2008-04-07  Marek Safar  <marek.safar@gmail.com>
4991
4992         A fix for bug #377485
4993         * assign.cs, expression.cs, decl.cs, class.cs, ecore.cs, namespace.cs: 
4994         Propagate location for extension method groups. Report conversion failure at
4995         right place.
4996
4997 2008-04-07  Marek Safar  <marek.safar@gmail.com>
4998
4999         * anonymous.cs, expression.cs, ecore.cs, typemanager.cs: Implemented
5000         ListInit and Field expressions.
5001
5002 2008-04-06  Raja R Harinath  <harinath@hurrynot.org>
5003
5004         * iterators.cs (Iterator.EmitMoveNext): Remove try/fault wrapper.
5005         Since $PC is always -1 inside the body of MoveNext, the fault
5006         handler is a no-op.
5007         * flowanalysis.cs (FlowBranchingException.EmitFinally): Kill.
5008         * statement.cs (ExceptionStatement.emit_finally): Likewise.
5009         (ExceptionStatement.ResolveFinally): Drop 'branching' argument.
5010
5011         The denouement!  Fix #324708
5012         * iterators.cs (Iterator.EmitMoveNext): Reset $PC to -1 on entry.
5013         (Iterator.EmitYieldBreak): We no longer need to reset $PC.
5014         * statement.cs (ExceptionStatement.DoEmit): Actually emit the
5015         'finally' inside the finally clause.
5016
5017         * statement.cs (ExceptionStatement.DoEmit): Emit try/finally block
5018         inside an iterator.  Don't emit the body of the 'finally' inside
5019         the finally clause yet.
5020
5021         Use the ResumableStatement infrastructure for MoveNext ()
5022         * iterators.cs (Iterator.EmitMoveNext_NoResumePoints): New.
5023         (Iterator.EmitMoveNext): Use 'resume_points'.  Get rid of
5024         'old_resume_points'.  Move dispatcher upfront.
5025         (Iterator.MarkYield): Mark the 'resume_point' of a Yield.
5026         * statement.cs (ExceptionStatement.DoEmit): Emit a dispatcher if
5027         in an enumerator.  This encodes the main fix in this patch series
5028         -- we can only jump into the first instruction of a try from the
5029         outside, but we want to emit try/finally regions in iterators and
5030         resume in the middle of them.
5031
5032 2008-04-05  Raja R Harinath  <harinath@hurrynot.org>
5033
5034         * statement.cs (ExceptionStatement.ResolveFinally): Move setting
5035         of NeedReturnLabel here.
5036
5037         Introduce a common point for emitting try/finally to IL
5038         * statement.cs (ExceptionStatement.DoEmit): New.  Combines all the
5039         features of the various subclasses, which are now driven by ...
5040         (ExceptionStatement.EmitPreTryBody): ... this and ...
5041         (ExceptionStatement.EmitTryBody): ... this and the original
5042         EmitFinallyBody.
5043         (TryFinally, Lock, Using, UsingTemporary, DisposableWrapper):
5044         Remove DoEmit and update to follow above protocol.
5045
5046         * statement.cs (ExceptionStatement.EmitForDispose): If all labels
5047         of the dispatcher are the same, skip emitting the 'switch'.
5048         * iterator.cs (Iterator.EmitDispose): Update to changes.
5049
5050         Clean up handling of 'using' statement
5051         * statement.cs (UsingTemporary): New.  Carved out of ...
5052         (Using): ... this.  Simplify drastically.  Handle exactly
5053         one variable.
5054         * cs-parser.jay (using_statement): Split.  Create UsingTemporary
5055         or Using as appropriate.  If there are multiple variable declared,
5056         create nested Using statements.
5057         (resource_acquisition): Kill.
5058
5059         * statement.cs (ExceptionStatement.EmitForDispose): Use
5060         EmitFinallyBody, not EmitFinally.
5061
5062         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Remove.
5063         * iterator.cs: Update to changes.
5064
5065         Start using the ResumableStatement infrastructure
5066         * statement.cs (ResumeableStatement.PrepareForDispose): New.
5067         (ResumableStatement.EmitForDispose): New.
5068         (ExceptionStatement): Override them.
5069         * iterators.cs (Iterator.EmitDispose): Use PrepareForDispose and
5070         EmitForDispose to create the body of the Dispose method.  Don't
5071         use OldResumePoint.
5072
5073         * iterator.cs (Iterator.AddResumePoint): Move here from ...
5074         * statement.cs (Toplevel.AddResumePoint): ... here.
5075         (Toplevel.MoveNextStatement.Resolve): Create FlowBranchingIterator.
5076         * flowanalysis.cs (FlowBranchingIterator): New.
5077         * codegen.cs (EmitContext): Update to changes.
5078
5079         * iterators.cs (Iterator.OldResumePoint): Rename from ResumePoint.
5080         (Iterator.old_resume_points): Rename from 'resume_points'.
5081         (Iterator.MoveNextStatement): Remove unused class.
5082
5083         New infrastructure for try/finally in iterators (still unused)
5084         * flowanalysis.cs (FlowBranching.AddResumePoint): New.
5085         (FlowBranchingToplevel.AddResumePoint): Hook into
5086         ToplevelBlock.AddResumePoint.
5087         (FlowBranchingTryCatch): Move CS01626 and CS01631 checks here.
5088         (FlowBranchingException): Hook into ExceptionBlock.AddResumePoint.
5089         * statement.cs (ToplevelBlock.AddResumePoint): New.  Collect
5090         resume points and assign program-counter values.
5091         (ExceptionBlock.AddResumePoint): Collect resume points for
5092         de-muxer at the top of try block.
5093         * iterators.cs (Yield.CheckContext): Simplify.
5094         (Yield.Resolve): Use FlowBranching.AddResumePoint.
5095
5096 2008-04-04  Raja R Harinath  <harinath@hurrynot.org>
5097
5098         * flowanalysis.cs (FlowBranching.AddReturnOrigin): Change Location
5099         argument to an ExitStatement.
5100         (FlowBranchingException): Refactor saved origins code.
5101         * statement.cs (ExitStatement): Update to cahges.
5102         * iterator.cs (YieldBreak): Likewise.
5103
5104         * statement.cs (ResumableStatement): New.  Common base class for
5105         YieldReturn and ExceptionStatement.
5106         (ExitStatement): New.  Common base class for Return and YieldBreak.
5107         (Return): Update to changes.
5108         * iterator.cs (YieldBreak): Likewise.
5109         * lambda.cs (ContextualReturn): Likewise.
5110
5111         Fix #377028
5112         * ecore.cs (Expression.ResolveAsTypeStep): If '!silent' attempt to
5113         emit a meaningful error message.
5114
5115         Fix #324765, #319508
5116         * flowanalysis.cs (VariableInfo.IsEverAssigned): New.
5117         (VariableInfo.SetAssigned): Set it.
5118         * statement.cs (Block.UsageWarning): Use 'IsEverAssigned' to
5119         determine if CS0219 or CS0168 is appropriate.  Don't use
5120         flow-analysis information.
5121         (Block.Resolve): Use ec.EndFlowBranching, not ec.DoEndFlowBranching.
5122         * codegen.cs (EmitContext.DoEndFlowBranching): Kill.  Inline into ...
5123         (EmitContext.EndFlowBranching): ... this.
5124
5125 2008-04-03  Marek Safar  <marek.safar@gmail.com>
5126
5127         * class.cs, typemanager.cs: Emit volatile field with IsVolatile modifier.
5128
5129 2008-04-03  Marek Safar  <marek.safar@gmail.com>
5130
5131         A fix for bug #376508
5132         * convert.cs, expression.cs: Fixed difference between ImplicitConversion and
5133         ImplicitConversionExists.
5134
5135 2008-04-03  Marek Safar  <marek.safar@gmail.com>
5136
5137         * expression.cs (Binary): Added remaining binary operators to expression
5138         tree builder.
5139
5140         * nullable.cs: Optimize shift with null argument.
5141
5142 2008-04-03  Raja R Harinath  <harinath@hurrynot.org>
5143
5144         Fix minor IL regression
5145         * statement.cs (TryCatch..ctor): Add 'inside_try_finally' argument.
5146         (TryCatch.DoEmit): Use it to avoid creating another ExceptionBlock.
5147         * cs-parser.jay (try_statement): Update to changes.
5148
5149         * statement.cs (TryFinally.need_exc_block): Delete.
5150         (TryFinally): Update to changes.
5151
5152         Now all ExceptionStatements are unconditional
5153         * statement.cs (CollectionForeach.DisposableWrapper): New.
5154         Extract out the try/finally code into a new wrapper.
5155         (CollectionForeach.Resolve): Use it to simplify the code.
5156
5157 2008-04-02  Raja R Harinath  <harinath@hurrynot.org>
5158
5159         Start at simplifying ExceptionStatement semantics a bit
5160         * statement.cs (TryCatch, TryFinally): Split 'Try' into two pieces.
5161         * cs-parser.jay (try_statement): Update to changes.
5162         (opt_catch_clauses): Remove.
5163         * flowanalysis.cs: Update to changes.
5164         (FlowBranching.BranchingType.TryCatch): New.
5165         (FlowBranchingTryCatch): New.
5166
5167         * flowanalysis.cs (FlowBranching.BranchingType.SwitchSection): Kill.
5168         (FlowBranching.CreateBranching): Update to changes.
5169         (FlowBranchingBlock.AddSibling): Add sanity check.
5170         * codegen.cs (EmitContext.StartFlowBranching) <Block variant>:
5171         Update to changes.
5172
5173         * iterators.cs (Iterator.MarkFinally): Remove.
5174         * statement.cs (ExceptionStatement): Update to changes.
5175
5176         Add support for skipping over finally blocks at runtime.  First
5177         in a series to fix #324708
5178         * iterators.cs (Iterator.SkipFinally): New LocalBuilder.
5179         (Iterator.EmitMoveNext): Initialize it.
5180         * statement.cs (ExceptionStatement.EmitFinally): Use it to emit a
5181         branch over the body of the 'finally' clause.
5182
5183 2008-03-31  Raja R Harinath  <harinath@hurrynot.org>
5184
5185         Avoid lopsided use of Foo/DoFoo names
5186         * statement.cs (ExpressionStatement.EmitFinallyBody):
5187         Rename from EmitFinally.
5188         (ExpressionStatement.EmitFinally): Rename from DoEmitFinally.
5189         * iterator.cs: Update to changes.
5190
5191 2008-04-02  Marek Safar  <marek.safar@gmail.com>
5192
5193         * ecore.cs, expression.cs, nullable.cs: ConditionalLogicalOperator is now
5194         based on UserOperatorCall. More binary nullable operators clean up.
5195
5196 2008-04-02  Martin Baulig  <martin@ximian.com>
5197
5198         * symbolwriter.cs: Remove the `#if !DISABLE_TERRANIA_CHANGES' conditionals.
5199
5200 2008-04-02  Marek Safar  <marek.safar@gmail.com>
5201
5202         * nullable.cs: Merge user and empty conversions when lifting expression
5203         trees.
5204         
5205         * expression.cs (StringConcat): Implemented expression tree representation.
5206
5207 2008-04-01  Marek Safar  <marek.safar@gmail.com>
5208
5209         * nullable.cs: When lifting null literal and a user operator exists, no call 
5210         is made.
5211         
5212 2008-04-01  Marek Safar  <marek.safar@gmail.com>
5213
5214         * nullable.cs, ecore.cs, expression.cs: Convert null arithmetic to lifted
5215         null.
5216
5217 2008-04-01  Marek Safar  <marek.safar@gmail.com>
5218
5219         * nullable.cs, expression.cs: Use namespace instead heavily nested
5220         monster abstract class.
5221
5222 2008-04-01  Marek Safar  <marek.safar@gmail.com>
5223
5224         * ecore.cs, convert.cs, constant.cs, nullable.cs, expression.cs: Implemented
5225         lifting of null literal and user operators. Clean up of some temporary
5226         nullable hacks.
5227
5228 2008-03-30  Raja R Harinath  <harinath@hurrynot.org>
5229
5230         Fix #368224, test-629.cs
5231         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Return true
5232         if it crossed an unwind-protect boundary.
5233         * iterators.cs (Yield.CheckContext): Relax check for 'yield break'.
5234         (Yield.Resolve, Yield.DoEmit): Track whether the yield occurs
5235         inside an unwind-protected region.
5236         (YieldBreak.Resolve, YieldBreak.DoEmit): Likewise.
5237         (Iterator.MarkYield): Add 'unwind_protect' parameter.  Emit a
5238         'leave' instead of a 'br' if unwind-protected.
5239         (Iterator.EmitYieldBreak): Likewise.
5240
5241 2008-03-29  Gert Driesen  <drieseng@users.sourceforge.net>
5242
5243         * driver.cs: Only define versioninfo resources if no win32 resource
5244         file was specified.
5245
5246 2008-03-28  Marek Safar  <marek.safar@gmail.com>
5247
5248         A fix for bug #372375
5249         * convert.cs: Fixed boxing of nullable types.
5250
5251 2008-03-28  Marek Safar  <marek.safar@gmail.com>
5252
5253         * typemanager.cs: Initialize InternalsVisibleTo as the very first optional
5254         type.
5255
5256 2008-03-28  Marek Safar  <marek.safar@gmail.com>
5257
5258         A fix for bug #374619
5259         * nullable.cs: Fixed guarding of EmitBitwiseBoolean.
5260         
5261 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5262
5263         * lambda.cs: Check return type only for invocation.
5264         
5265 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5266
5267         A fix for bug #374214
5268         * ecore.cs: Correctly report argument type mismatch.
5269
5270 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5271
5272         * convert.cs (ImplicitReferenceConversionCore): Correctly compare enum type
5273         and not rely on broken IsEnum.
5274
5275 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5276
5277         * nullable.cs: New file, extracted from generic.cs.
5278         
5279         * generic.cs, generic-mcs.cs, *.csproj, *.sources: Updated.
5280
5281 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5282
5283         * generic.cs, convert.cs, generic-mcs.cs, expression.cs: Added lifting of
5284         predefined comparison operators and null literals.
5285         
5286         * report.cs: New warning ID.
5287         
5288 2008-03-25  Marek Safar  <marek.safar@gmail.com>
5289
5290         A fix for bug #370577
5291         * lambda.cs: Check return type too.
5292
5293 2008-03-25  Marek Safar  <marek.safar@gmail.com>
5294
5295         A fix for bug #372846
5296         * class.cs: Automatic properties can be declared as unsafe.
5297
5298 2008-03-20  Marek Safar  <marek.safar@gmail.com>
5299
5300         * location.cs: Use string based concatenation.
5301         
5302         * expression.cs: LiftedBinaryOperator is gmcs only.
5303         
5304 2008-03-20  Marek Safar  <marek.safar@gmail.com>
5305
5306         * generic.cs, literal.cs, ecore.cs, expression.cs: Ongoing work on nullable
5307         conversions rules and expression trees.
5308
5309 2008-03-19  Marek Safar  <marek.safar@gmail.com>
5310
5311         * delegate.cs: Use extension method source as delegate target.
5312
5313 2008-03-19  Marek Safar  <marek.safar@gmail.com>
5314
5315         * generic.cs, generic-mcs.cs, expression.cs, ecore.cs: Rewrote nullable
5316         binary operations to be purely based on binary operations and optimized
5317         emitted code (30% less in some cases). Introduced ReducedExpression for ETs
5318         and other ET refactoring.
5319         
5320         * typemanager.cs: Fixed warning.
5321         
5322 2008-03-17  Marek Safar  <marek.safar@gmail.com>
5323
5324         * class.cs, decl.cs, delegate.cs: Do protected modifier check on each member
5325         
5326         * symbolwriter.cs: Fixed.
5327
5328 2008-03-17  Marek Safar  <marek.safar@gmail.com>
5329
5330         * anonymous.cs, driver.cs: Reset anonymous types counters.
5331
5332 2008-03-17  Marek Safar  <marek.safar@gmail.com>
5333
5334         * ecore.cs (MethodGroupExpr): Skip first candidate, it's already the best.
5335         
5336         * class.cs: Use fullname for all type member definitions.
5337         
5338 2008-02-19  Martin Baulig  <martin@ximian.com>
5339
5340         * class.cs
5341         (IMethodData.EmitExtraSymbolInfo): New interface method.
5342         (MethodData.Emit): Call method.EmitExtraSymbolInfo().
5343         (MethodOrOperator.EmitExtraSymbolInfo): Implement this new
5344         interface method here as an empty public virtual method.
5345
5346         * anonymous.cs
5347         (AnonymousMethodMethod.ctor): Added `string real_name' argument.
5348         (AnonymousMethodMethod.EmitExtraSymbolInfo): Override and call
5349         CodeGen.SymbolWriter.SetRealMethodName().       
5350
5351 2008-02-18  Martin Baulig  <martin@ximian.com>
5352
5353         * anonymous.cs
5354         (ScopeInfo.EmitType): Override this and emit debugging
5355         information for captured variables.
5356         (RootScopeInfo.EmitType): Override this and emit symbol
5357         information for a captured `this'.
5358
5359 2008-02-15  Martin Baulig  <martin@ximian.com>
5360
5361         * iterators.cs: Emit debugging info.
5362
5363         * codegen.cs
5364         (EmitContext.Flags): Add `OmitDebuggingInfo'.
5365         (EmitContext.OmitDebuggingInfo): New public property.
5366
5367         * statement.cs
5368         (While): Override Emit() and don't emit symbol info there; do it
5369         inside DoEmit() instead.
5370         (Block.Emit): Omit symbol information while emitting the scope
5371         initializers; don't ec.Mark() the `EndLocation'.  Fix the lexical
5372         block logic.
5373         (ExplicitBlock.IsIterator): Moved here from `ToplevelBlock'.
5374         (ToplevelBlock.MakeIterator): Pass the `flags' to `ExplicitBlock's
5375         .ctor to make `IsIterator' work.
5376
5377 2008-03-14  Martin Baulig  <martin@ximian.com>
5378
5379         * symbolwriter.cs: Added the new symbol writer function from the
5380         debugger's `terrania' branch; temporarily enclose them inside
5381         `#if !DISABLE_TERRANIA_CHANGES' conditionals until I'm back from
5382         my vacations.
5383
5384 2008-03-14  Martin Baulig  <martin@ximian.com>
5385
5386         * symbolwriter.cs
5387         (SymbolWriter): Make this a public static class.
5388
5389         * codegen.cs
5390         (CodeGen.SymbolWriter): Removed; use the new static `SymbolWriter'
5391         class instead of using `if (CodeGen.SymbolWriter != null)' everywhere.
5392
5393 2008-03-14  Marek Safar  <marek.safar@gmail.com>
5394
5395         A fix for bug #370577
5396         * statement.cs, lambda.cs: Added extra limitations when dealing with void
5397         return type.
5398         
5399 2008-03-14  Marek Safar  <marek.safar@gmail.com>
5400
5401         * typemanager.cs (CSharpName): Made 250 times faster.
5402
5403 2008-03-13  Marek Safar  <marek.safar@gmail.com>
5404
5405         * ecore.cs, expression.cs: Emit conversion for ET shift argument.
5406         
5407 2008-03-12  Marek Safar  <marek.safar@gmail.com>
5408
5409         * generic.cs, typemanager.cs, enum.cs, codegen.cs, statement.cs: Try not to
5410         crash when predefined field does not exist.
5411         
5412 2008-03-12  Marek Safar  <marek.safar@gmail.com>
5413
5414         * ecore.cs (PropertyExpr): Fixed IsSingleDimensionalArrayLength regression.
5415         
5416 2008-03-12  Marek Safar  <marek.safar@gmail.com>
5417
5418         * class.cs (FixedField): Don't crash when contructors are missing.
5419
5420 2008-03-11  Marek Safar  <marek.safar@gmail.com>
5421
5422         * typemanager.cs, namespace.cs, literal.cs, ecore.cs, class.cs, decl.cs,
5423         convert.cs, constant.cs, expression.cs, statement.cs: Use same method to
5424         check internal types accessibility for internal and external types.
5425         Replaced EnumToUnderlying by GetEnumUnderlyingType.
5426
5427 2008-03-11  Marek Safar  <marek.safar@gmail.com>
5428
5429         * support.cs, typemanager.cs, pending.cs, ecore.cs, class.cs, delegate.cs
5430         convert.cs, const.cs, anonymous.cs, constant.cs, expression.cs,
5431         attribute.cs, statement: Use corect instance of predefined types (work
5432         related to #364674).
5433
5434 2008-03-07  Marek Safar  <marek.safar@gmail.com>
5435
5436         * expression.cs (TypeOfVoid): Fixed predefined method initialization.
5437         
5438 2008-03-07  Marek Safar  <marek.safar@gmail.com>
5439
5440         * generic.cs, typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, 
5441         class.cs, delegate.cs, iterators.cs, const.cs, constant.cs, driver.cs,
5442         expression.cs, attribute.cs, codegen.cs, statement.cs: TypeManager optional
5443         predefined types clean up, delayed predefined types members initialization
5444         (work related to #364674).
5445
5446 2008-03-05  Marek Safar  <marek.safar@gmail.com>
5447
5448         * typemanager.cs (IsFriendAssembly): InternalsVisibleTo is not mandatory.
5449         
5450 2008-03-05  Marek Safar  <marek.safar@gmail.com>
5451
5452         * typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, class.cs, decl.cs,
5453         delegate.cs, convert.cs, driver.cs, attribute.cs, codegen.cs: TypeManager
5454         predefined types clean up (work related to #364674).
5455
5456 2008-03-04  Marek Safar  <marek.safar@gmail.com>
5457
5458         * ecore.cs: Print an error message instead of throwing exception.
5459         
5460 2008-03-04  Marek Safar  <marek.safar@gmail.com>
5461
5462         * generic.cs, typemanager.cs, literal.cs, convert.cs, cfold.cs, constant.cs,
5463         expression.cs, statement.cs: Unififed null literal representation.
5464
5465 2008-03-03  Marek Safar  <marek.safar@gmail.com>
5466
5467         * anonymous.cs, cfold.cs, convert.cs, delegate.cs, doc.cs, ecore.cs,
5468         expression.cs: Refactored binary operators resolve phase and improved speed.
5469         The nullable code is still missing and won't work correctly, more fixes
5470         required.
5471
5472         It also fixes #323726, #324312, #324248, and many other unreported issues.
5473
5474 2008-02-29  Zoltan Varga  <vargaz@gmail.com>
5475
5476         * report.cs (FeatureIsNotAvailable): Use 'mcs1' instead of 'mcs', and 'mcs' 
5477         instead of 'gmcs'.
5478
5479 2008-02-27  Marek Safar  <marek.safar@gmail.com>
5480
5481         * ecore.cs: Clean-up and split BetterConversion.
5482         
5483 2008-02-25  Raja R Harinath  <harinath@hurrynot.org>
5484
5485         Fix #363791
5486         * enum.cs (EnumMember.Value): Only access 'value' if
5487         ResolveValue says it's ok.
5488         (EnumMember.DoResolveValue): Don't set prev_member.value.
5489         (Enum.GetDefinition): Reverse arguments of Equals --
5490         EnumMember.Value can return 'null'.
5491
5492         * statement.cs (Switch.Error_AlreadyOccurs): Fix typo in name.
5493
5494 2008-02-22  Marek Safar  <marek.safar@gmail.com>
5495
5496         * generic.cs, expression.cs: More ongoing work on expression trees.
5497         
5498 2008-02-21  Marek Safar  <marek.safar@gmail.com>
5499
5500         * class.cs, typemanager.cs: Rewrote operator matching logic to correctly
5501         handle missing matches when mutiple operators exist.
5502         
5503 2008-02-20  Marek Safar  <marek.safar@gmail.com>
5504
5505         A fix for bug #363218
5506         * expression.cs (ArrayCreation.Clone): Deal with multi-dimensional
5507         initializers.
5508         
5509 2008-02-20  Marek Safar  <marek.safar@gmail.com>
5510
5511         * expression.cs, constant.cs, cfold.cs: Yet another side-effect constant
5512         update. This time to deal correctly with SideEffectConstant expression used
5513         as an argument for another constant folding.
5514
5515 2008-02-20  Raja R Harinath  <harinath@hurrynot.org>
5516
5517         * typemanager.cs (DropGenericMethodArguments): Ensure we get an underlying
5518         MethodBuilder.
5519
5520 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5521
5522         * constant.cs, cfold.cs: SideEffectConstant results can apply for folding.
5523
5524 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5525
5526         A fix for bug #328136
5527         * expression.cs: Do not fold immediately LogicalAnd operators when the left
5528         side is a false constant, because we still need to evaluate the right-hand
5529         side.
5530
5531         * statement.cs (If): Emit two types of boolean constants (simple constant,
5532         side-effect constant).
5533
5534 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5535
5536         * constant.cs (SideEffectConstant): Don't emit boolean constant.
5537
5538         * expression.cs: Fold immediately LogicalAnd operators when both sides are
5539         constants.
5540
5541 2008-02-18  Marek Safar  <marek.safar@gmail.com>
5542
5543         A fix for bug #361457
5544         * ecore.cs (IsApplicable): Params methods have lower priority.
5545
5546         * support.cs: Return correct parameter modifier for params types.
5547
5548 2008-02-18  Marek Safar  <marek.safar@gmail.com>
5549
5550         * generic.cs (TypeParameter): Cache attribute target name.
5551
5552         * support.cs: Removed unused variable.
5553
5554         * typemanager.cs: Removed debugging leftover.
5555
5556         * ecore.cs: Use local type instead of a property;
5557
5558         * class.cs (VerifyMembers): Consider also parent to test whether type member
5559         is local or public.
5560
5561         * expression.cs (FullMethodDesc): Removed.
5562
5563         * attribute.cs (IsValidArgumentType): Made static.
5564
5565 2008-02-17  Raja R Harinath  <harinath@hurrynot.org>
5566
5567         Cleanup to be more readable.
5568         * Makefile (GMCS_PROFILE): Remove.
5569         (COMPILER_NAME): New helper.
5570
5571 2008-02-15  Miguel de Icaza  <miguel@novell.com>
5572
5573         * cs-tokenizer.cs: if a conditional expression happens inside a
5574         (...) this also means that we do not need to de-ambiguate between
5575         an parenthesized expression and a cast.
5576
5577         Fixes 346484.
5578
5579         * constant.cs (SideEffectConstant): a constant value that happens
5580         to have a side effect.
5581
5582         Fixes the build regressions introduced by the fix for #359789
5583
5584 2008-02-14  Rodrigo Kumpera  <rkumpera@novell.com>
5585
5586         * expression.cs (Conditional.Emit): when emitting the ternary
5587         operator, use local variables to generate code verifiable code.
5588
5589         The verifier cannot infer that the type on stack before the
5590         stloc.0 is executed is of type ParentB. This happens because the
5591         stack merge algorithm uses only parent types when deciding which
5592         is the common type.  This is described in Part III 1.8.1.3 of ECMA
5593         335.
5594
5595         This code compiled with mcs is not verifiable under MS. The MS
5596         verifier picks the first common interface of Foo and Bar, which is
5597         wrong, but doesn't use a full join type of the 2 interfaces.
5598
5599         CSC uses a clever hack to compile such code in a verifiable
5600         way. It stores the intermediate values in a local variable with
5601         the expected type.
5602
5603         Fixes: #358102
5604
5605 2008-02-14  Miguel de Icaza  <miguel@novell.com>
5606
5607         * expression.cs: Do not fold BitwiseAnd operators when the left
5608         side is a false constant, because we still need to evaluate the
5609         right-hand side.
5610
5611         Fixes #359789
5612
5613         * support.cs: Instead of throwing an InternalErrorException when
5614         the position of the stream is outside the boundary of our buffer,
5615         reset the state of the reader, and restart the reading from the
5616         beginning of the file.
5617
5618 2008-02-14  Marek Safar  <marek.safar@gmail.com>
5619
5620         * generic.cs (TypeParameter.GetMembers): Is not supported operation.
5621
5622 2008-02-14  Marek Safar  <marek.safar@gmail.com>
5623
5624         A fix for bug #361686
5625         * decl.cs: A protected types used inside a private class which parents
5626         derives from the protected class are accessible.
5627
5628 2008-02-13  Marek Safar  <marek.safar@gmail.com>
5629
5630         * generic.cs (ConstraintChecker): Use cached member lookup when looking for
5631         the parameterless constructor.
5632
5633 2008-02-13  Marek Safar  <marek.safar@gmail.com>
5634
5635         * generic.cs, typemanager.cs, iterators.cs, codegen.cs: Refactored core
5636         lookup methods to use standard member cache when doing member lookup.
5637
5638 2008-02-12  Marek Safar  <marek.safar@gmail.com>
5639
5640         * driver.cs: Don't report full path for referenced module as assembly error.
5641
5642 2008-02-12  Marek Safar  <marek.safar@gmail.com>
5643
5644         * Makefile: Fixed `qh' target to work on all machines.
5645
5646         * report.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs, anonymous.cs,
5647         expression.cs, codegen.cs, statement.cs, doc.cs: Replaced type IsSubclassOf
5648         and HasElementType with TypeManager implementation.
5649
5650 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5651
5652         A fix for bugs #325134, #359749
5653         * expression.cs, ecore.cs: Try to resolve an extension method even if the
5654         first binds point to non-method member expression.
5655
5656 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5657
5658         * cs-parser.jay: Null coalescing operator is not part of ISO-1.
5659
5660 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5661
5662         A fix for bugs #321394, #323028
5663         * generic.cs, parameter.cs, ecore.cs, class.cs, decl.cs, delegate.cs:
5664         Reworked naive IsAccessibleAs implementation to handle nested types.
5665
5666 2008-02-05  Jb Evain  <jbevain@novell.com>
5667
5668         * class.cs: use generic type comparison for parameters
5669         as well.
5670
5671 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5672
5673         A fix for bug #325372
5674         * class.cs: Use generic type comparison when testing method signatures.
5675
5676 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5677
5678         A fix for bug #357047
5679         * ecore.cs: Applied C# 3.0 changes to better conversion.
5680
5681 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5682
5683         A fix for bug #358374
5684         * cs-parser.jay: Correctly set modifiers for all constructor types.
5685
5686 2008-02-04  Marek Safar  <marek.safar@gmail.com>
5687
5688         A fix for bug #355251
5689         * generic.cs: Added base class constraint based type inference.
5690
5691 2008-02-01  Marek Safar  <marek.safar@gmail.com>
5692
5693         A fix for bug #357255
5694         * decl.cs: One more missing visibility check.
5695
5696 2008-02-01  Marek Safar  <marek.safar@gmail.com>
5697
5698         * support.cs: Fixed broken return.
5699
5700 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5701
5702         * report.cs: Correctly reset warnings count after probing.
5703
5704 2008-01-25  Martin Baulig  <martin@ximian.com>
5705
5706         * namespace.cs
5707         (NamespaceEntry.SymbolFileID): Make this work again after
5708         MemberName.ToString() is gone.
5709
5710 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5711
5712         * expression.cs: Implemented Divide, Equal, ExclusiveOr, GreaterThanOrEqual
5713         expressions.
5714
5715 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5716
5717         * generic.cs: Use full implicit conversion for type inference fixing.
5718
5719 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5720
5721         * ecore.cs, expression.cs, generic.cs: Implemented Convert, ConvertChecked.
5722         Fixed user operator conversions.
5723
5724 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5725
5726         * generic.cs: Do nullable type to null comparison optimization during
5727         resolve phase.
5728
5729 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5730
5731         A fix for bug #355163
5732         * generic.cs: Enabled l-value resolve on nullable expressions.
5733
5734 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5735
5736         A fix for bug #353986
5737         * class.cs: Ingore static ctors with parameters for any further checks.
5738
5739 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5740
5741         A fix for bug #354310
5742         * namespace.cs: Removed redundant check.
5743
5744 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5745
5746         A fix for bug #354928
5747         * expression.cs: ElementInitializers can be resolved only once.
5748
5749 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5750
5751         * convert.cs, ecore.cs, expression.cs, generic.cs: Implemented Coalesce and
5752         Condition expressions.
5753
5754 2008-01-23  Marek Safar  <marek.safar@gmail.com>
5755
5756         * codegen.cs: Fixed AssemblyBuilder initialization on other platforms.
5757
5758 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5759
5760         * ecore.cs, expression.cs, generic.cs: Implicit bool? to bool conversion is
5761         not allowed.
5762
5763         * generic.cs: Implemented coalesce expression.
5764
5765 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5766
5767         A fix for bug #355145
5768         * anonymous.cs, convert.cs, ecore.cs, generic.cs, lambda.cs: Implemented
5769         expression tree type inference.
5770
5771 2008-01-22  Raja R Harinath  <harinath@hurrynot.org>
5772
5773         Fix #354663
5774         * expression.cs (Binary.IsUnsignedType): Fix typo.
5775
5776 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5777
5778         * ecore.cs, expression.cs, generic.cs: Implemented NewArrayInit expression.
5779
5780 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5781
5782         A fix for bug #355161
5783         * ecore.cs, expression.cs: Wider range of extension method supported
5784         expressions.
5785
5786 2008-01-22  Gert Driesen  <drieseng@users.sourceforge.net>
5787
5788         * codegen.cs: Use magic value for AssemblyBuilderAccess to instruct
5789         AssemblyBuilder to operate in compiler context. Fixes mcs part of
5790         bug #354970.
5791
5792 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5793
5794         A fix for bug #355148
5795         * ecore.cs, expression.cs: Correctly report misused ref and out modifiers.
5796
5797 2008-01-22  Miguel de Icaza  <miguel@novell.com>
5798
5799         * expression.cs (CreateExpressionTree): Add support for or and
5800         logical or, and indent following the coding conventions.
5801
5802         * typemanager.cs (LinqExpression): renamed from
5803         ExpressionTreeManager, for a shorter name.
5804
5805         Use TypeManager.CoreLookupType to lookup types from our core
5806         assemblies and turn those into "Type" variables.
5807
5808         Consumers that previously used "Namespace" and "Type" from this
5809         class should instead use the TypeExpression which is a type that
5810         is fully resolved (without involving the regular C# resolution
5811         rules). 
5812
5813         This typically looks like this:
5814
5815         TypeExpression texpr = new TypeExpression (LinqExpression.expression_type, loc);
5816         new MemberAccess (texpr, name, type_arguments, loc)
5817
5818         This avoids the problem in: #355178
5819
5820 2008-01-21  Marek Safar  <marek.safar@gmail.com>
5821
5822         * cs-parser.jay, expression.cs: Check `namespace alias qualifier' language
5823         feature in parser only as we do in other cases.
5824         
5825 2008-01-21  Marek Safar  <marek.safar@gmail.com>
5826
5827         * attribute.cs, ecore.cs, class.cs, delegate.cs, expression.cs, linq.cs,
5828         typemanager.cs: A refactoring of params arguments to reuse existing
5829         expressions (params -> array initializer) to emit params argument instead
5830         of specialized handling.
5831         It was required by expression tree implementation and it has other benefits
5832         as well, we now apply same optimization for params arguments as we do for
5833         array initializers.
5834         
5835 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5836
5837         A fix for bug #353526
5838         * generic.cs: A type inference of params arguments may not required any
5839         temporary array creation.
5840         
5841 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5842
5843         A fix for bug #353534
5844         * generic.cs, ecore.cs, expression.cs: A method group type inference is
5845         supported for delegates only.
5846         
5847 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5848
5849         * generic.cs: Fixed 3.0 type inference fixing phase to determine a unique
5850         type for more than 1 candidates.
5851         
5852 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5853
5854         * typemanager.cs, ecore.cs, expression.cs: Implemented ArrayLength and Call
5855         expressions.
5856         
5857 2008-01-16  Marek Safar  <marek.safar@gmail.com>
5858
5859         * generic.cs, typemanager.cs, lambda.cs, parameter.cs, ecore.cs, constant.cs,
5860         expression.cs: Implemented Add, And, AndAlso, and ArrayIndex (without unary
5861         operator) expressions. 
5862                 
5863 2008-01-16  Zoltan Varga  <vargaz@gmail.com>
5864
5865         * statement.cs: Avoid declaring an IL variable for this_variable since it is
5866         not accessed from the generated IL.
5867
5868 2008-01-14  Marek Safar  <marek.safar@gmail.com>
5869
5870         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, class.cs, delegate.cs,
5871         iterators.cs, convert.cs, assign.cs, anonymous.cs, expression.cs,
5872         statement.cs: The first expression tree implementation drop, mostly
5873         infrastructure work.
5874
5875 2008-01-14  Marek Safar  <marek.safar@gmail.com>
5876
5877         * ecore.cs (IsNestedChild): Refactored.
5878
5879 2008-01-11  Marek Safar  <marek.safar@gmail.com>
5880
5881         * lambda.cs: Don't use a cast on unknown expression statement.
5882
5883 2008-01-10  Geoff Norton  <gnorton@novell.com>
5884
5885         * cs-tokenizer.cs: One more token to distinguish between method and lambda
5886         arguments
5887
5888 2008-01-09  Marek Safar  <marek.safar@gmail.com>
5889
5890         * doc.cs: Report better /doc crash details.
5891         
5892 2008-01-09  Marek Safar  <marek.safar@gmail.com>
5893
5894         A fix for bug #352536
5895         * ecore.cs, assign.cs, codegen.cs: Check event assignments.
5896
5897 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5898
5899         A fix for bug #352287
5900         * ecore.cs, expression.cs: Do `this' access checking in all member access
5901         expressions.
5902         
5903 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5904
5905         * rootcontext.cs, driver.cs: Switch to linq mode by default.
5906         
5907         * report.cs: Reset message stacks.
5908         
5909 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5910
5911         * generic.cs (InferInPhases): Correctly calculate params position.
5912         
5913 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5914
5915         * cs-tokenizer.cs: No need to parse full string when parsing lambda
5916         arguments.
5917
5918 2008-01-07  Marek Safar  <marek.safar@gmail.com>
5919
5920         * cs-tokenizer.cs: Enabled lambda arguments micro-parser for all profiles.
5921         
5922         * decl.cs (LookupNamespaceOrType): Don't cache names which caused an error.
5923         
5924         * driver.cs: Updated --help option.
5925         
5926 2008-01-07  Marek Safar  <marek.safar@gmail.com>
5927
5928         * generic.cs (InferParamsTypeArguments): Removed.
5929         (InferInPhases): Add params type inference.
5930         (LowerBoundInference): Fixed scoring mechanism.
5931         
5932         * cs-tokenizer.cs (PreProcessPragma): Use Location instead of line.
5933         
5934 2008-01-06  Gert Driesen  <drieseng@users.sourceforge.net>
5935
5936         * typemanager.cs: On 2.0 profile, GetPublicKeyToken returns an empty
5937         byte array for unsigned "baked" assemblies.
5938
5939 2008-01-05  Gert Driesen  <drieseng@users.sourceforge.net>
5940
5941         * codegen.cs: AssemblyName.GetPublicKey returns a zero-length byte
5942         array for assemblies that are not strongnamed.
5943
5944 2008-01-04  Marek Safar  <marek.safar@gmail.com>
5945
5946         A fix for bug #351481
5947         * expression.cs (MemberAccess.ResolveNamespaceOrType): Use correct
5948         declaring type for nested generic types.
5949         
5950 2008-01-04  Marek Safar  <marek.safar@gmail.com>
5951
5952         * namespace.cs, class.cs, decl.cs, cs-parser.jay: Use GetSignatureForError
5953         instead of ToString.
5954         
5955 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5956
5957         A fix for bug #351047
5958         * expression.cs (Binary.ResolveOperator): Allow equality operators between
5959         null and structs only when equality and inequality operators are defined
5960         either as an user-operators or predefined operators.
5961         
5962 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5963
5964         A fix for bug #351047
5965         * generic.cs, typemanager.cs, class.cs: New IsReferenceType helper method.
5966         
5967 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5968
5969         A fix for bug #351257
5970         * cs-tokenizer.cs: Advance line number for '\r' correctly.
5971         
5972 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5973
5974         A fix for bug #351157
5975         * class.cs (Using): Fixed yet another broken cloning.
5976         
5977         (Block): Put back more sensible default value for statements.
5978         
5979 2008-01-01  Gert Driesen  <drieseng@users.sourceforge.net>
5980
5981         * codegen.cs: Allow AssemblyVersion with only major version component.
5982         Fixes bug #351055.
5983
5984 2007-12-29  Marek Safar  <marek.safar@gmail.com>
5985
5986         A fix for bug #324654
5987         * class.cs: Use FullName property as member name.
5988
5989 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5990
5991         A fix for bug #342117
5992         * generic.cs (ConstraintChecker): Struct constraint also satisfies default
5993         constructor constraint.
5994
5995 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5996
5997         A fix for bug #338273
5998         * class.cs (ProbertyBase): Access modifier checks are required for overrides
5999         only.
6000
6001 2007-12-28  Marek Safar  <marek.safar@gmail.com>
6002
6003         A fix for bug #350839
6004         * ecore.cs (MethodroupExpr): Probing hacks are no longer required.
6005
6006 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
6007
6008         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
6009         GHOP:
6010         
6011         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
6012
6013         * statement.cs: Changed some Hashtables to use HybridDictionaries
6014         instead. It was observed that some HashTables only contained a few
6015         items in the vast majority of cases. Since HybridDictionary is
6016         more efficient on small sets (<10 elements), "known_variables"
6017         from class ExplicitBlock as well as "labels" and "constants " from
6018         class Block were changed to HybridDictionaries. 
6019
6020         Atsai results: (56216kb->54987kb)
6021
6022         Miguel results (bootstrap of mcs): 59819kb -> 59290kb
6023
6024
6025 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
6026
6027         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
6028         GHOP:
6029         
6030         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
6031         
6032         * expression.cs: foreach loop to for loop, saved on allocation of
6033         enumerator (59333kb->59141kb)
6034
6035         * statement.cs. Changed foreach loops to for loops, saved on
6036         allocation of enumerator (59141kb->59006kb)
6037
6038         * decl.cs: ArrayLists in .NET 1.1 allocate 16 elements by default
6039         when constructed with no specified capacity. This was causing a
6040         few ArrayLists to allocate more memory than they would potentially
6041         need in the Block class and MemberCache class. Setting the
6042         ArrayLists to construct with a capacity of 1 saves some
6043         memory. (56216kb->55585kb)
6044
6045 2007-12-27  Marek Safar  <marek.safar@gmail.com>
6046
6047         A fix for bug #347189 (2nd issue)
6048         * expression.cs (MemberAccess): Nested type can be found in base non-generic
6049         type.
6050
6051 2007-12-27  Miguel de Icaza  <miguel@novell.com>
6052         
6053         * report.cs: Do not use colors if stdout and stderr are not a
6054         terminal.
6055
6056 2007-12-27  Marek Safar  <marek.safar@gmail.com>
6057
6058         A fix for bug #346998
6059         * ecore.cs (MethodGroupExpr): Implemented override filter for generic
6060         overloads.
6061
6062 2007-12-27  Marek Safar  <marek.safar@gmail.com>
6063
6064         A fix for bug #343465
6065         * class.cs: Explicit method name for nested types uses dots only.
6066
6067 2007-12-27  Marek Safar  <marek.safar@gmail.com>
6068
6069         A fix for bug #343707
6070         * cs-tokenizer.cs: Advance line number for mixed CR/LF files correctly.
6071
6072 2007-12-27  Marek Safar  <marek.safar@gmail.com>
6073
6074         * ecore.cs: Report type inference errors only when arguments count matches
6075         parameter count.
6076         
6077         * generic.cs (NullCoalescingOperator): Cannot be applied to null.
6078         
6079         * expression.cs, report.cs: New warning.
6080         
6081         * typemanager.cs: Catch anonymous method type too.
6082
6083 2007-12-23  Marek Safar  <marek.safar@gmail.com>
6084
6085         A fix for bug #346379
6086         * expression.cs (UnaryMutator): Emit size of type for pointer mutator.
6087
6088 2007-12-23  Marek Safar  <marek.safar@gmail.com>
6089
6090         A fix for bug #347359
6091         * expression.cs (Invocation): Don't resolve already resolved expression.
6092
6093 2007-12-23  Marek Safar  <marek.safar@gmail.com>
6094
6095         A fix for bug #347189
6096         * class.cs (FixedField): Use non-dependent code only in the define phase.
6097
6098 2007-12-23  Marek Safar  <marek.safar@gmail.com>
6099
6100         A fix for bug #348076
6101         * ecore.cs (FieldExpr.DoResolve): Allow any variable based expression.
6102
6103 2007-12-22  Marek Safar  <marek.safar@gmail.com>
6104
6105         * ecore.cs (MethodGroupExpr.OverloadResolve): Set type arguments for
6106         discovered extension methods.
6107
6108 2007-12-22  Marek Safar  <marek.safar@gmail.com>
6109
6110         * ecore.cs, namespace.cs, expression.cs: Removed broken ResolveGeneric
6111         method.
6112
6113 2007-12-21  Miguel de Icaza  <miguel@novell.com>
6114
6115         * report.cs (ErrorMessage): Add support for using colors on
6116         terminals that support it. 
6117
6118 2007-12-21  Marek Safar  <marek.safar@gmail.com>
6119
6120         * ecore.cs: Use information about expanded params for error reporting.
6121
6122 2007-12-21  Marek Safar  <marek.safar@gmail.com>
6123
6124         * ecore.cs, generic.cs, delegate.cs: Refactoring of method overloading code
6125         and logic for params overloads.
6126         
6127 2007-12-15  Miguel de Icaza  <miguel@novell.com>
6128
6129         * generic.cs (NullCoalescingOperator.CloneTo): implement this one,
6130         as this is also created from the parser.  Fixes #349034
6131
6132 2007-12-12  Miguel de Icaza  <miguel@novell.com>
6133
6134         * statement.cs (Throw.CloneTo): it is valid to have empty
6135         expressions for throw. 
6136
6137 2007-12-03  Marek Safar  <marek.safar@gmail.com>
6138
6139         * cs-parser.jay: Set delegate constraint parsing region correctly.
6140
6141 2007-12-03  Marek Safar  <marek.safar@gmail.com>
6142
6143         A fix for bug #345467
6144         * typemanager.cs (IsEqual): Compare generic parameters position only.
6145         
6146 2007-11-28  Marek Safar  <marek.safar@gmail.com>
6147
6148         * expression.cs (BaseAccess): Type arguments can be null.
6149
6150 2007-11-27  Raja R Harinath  <harinath@gmail.com>
6151
6152         * statement.cs (Block.Resolve): Ensure flow-branching tree is
6153         consistent even when an error has occured.
6154         (Switch.Resolve): Likewise.
6155
6156 2007-11-22  Marek Safar  <marek.safar@gmail.com>
6157
6158         A fix for bug #334505
6159         * class.cs: Don't ignore InternalsVisibleTo attribute for internal
6160         overrides.
6161         
6162 2007-11-22  Marek Safar  <marek.safar@gmail.com>
6163
6164         * ecore.cs, typemanager.cs, delegate.cs, expression.cs: The first of 
6165         refactorings required to resolve extension methods correctly when mixing
6166         generics and non-generics members.
6167         
6168 2007-11-20  Marek Safar  <marek.safar@gmail.com>
6169
6170         A fix for bug #342584
6171         * convert.cs: Added not documented explicit IntPtr/UIntPtr to enum
6172         conversion.
6173         
6174 2007-11-19  Marek Safar  <marek.safar@gmail.com>
6175
6176         A fix for bug #342512
6177         * delegate.cs: Use delegate argument expression when is available. Don't
6178         emit virtual call when class is sealed.
6179         
6180 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6181
6182         A fix for bug #325423
6183         * assign.cs (FieldInitializer): Use resolved expression for emit.
6184         
6185         * class.cs: Print less confusing error message.
6186         
6187 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6188
6189         * cs-tokenizer.cs: Removed GMCS ifdefs.
6190         
6191         * rootcontext.cs, report.cs: Report unavailable gmcs features used by
6192         mcs.
6193         
6194         * cs-parser.jay: Disabled nullable check.
6195         
6196         * generic-mcs: Copied more generic stuff.
6197                 
6198 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6199
6200         * gcs-parser.jay: Merged to cs-parser.jay.
6201         
6202         * generic.cs, typemanager.cs, cs-tokenizer.cs, linq.cs, Makefile
6203         * *.csproj, *.sources: Updated to use only jay parser file.
6204
6205 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6206
6207         * gcs-parser.jay: Added nullable and default expression feature checks.
6208         
6209 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6210
6211         * gcs-parser.jay, cs-parser.jay, class.cs: Unified parameters parsing, 
6212         it fixes many TODOs and hidden bugs.
6213         
6214         * expression: Removed duplicate error check.
6215
6216 2007-11-15  Marek Safar  <marek.safar@gmail.com>
6217
6218         * gcs-parser.jay, statement.cs, decl.cs, ecore.cs: Try to resolve an
6219         implicitly type local variable only when it is used in a declaration.
6220
6221 2007-11-15  Marek Safar  <marek.safar@gmail.com>
6222
6223         * attribute.cs: Use CS0612 for empty strings.
6224
6225 2007-11-14  Marek Safar  <marek.safar@gmail.com>
6226
6227         * lambda.cs, statement.cs: Contextual return may act as a statement.
6228
6229 2007-11-14  Marek Safar  <marek.safar@gmail.com>
6230
6231         A fix for a regression cause by #324222
6232         * class.cs: Don't report unused even when it implements an interface.
6233         
6234 2007-11-13  Marek Safar  <marek.safar@gmail.com>
6235
6236         A fix for bug #341205
6237         * ecore.cs, expression.cs: Method group expression cannot do static
6238         method access with an instance reference check before overloading takes
6239         a place.
6240         
6241 2007-11-13  Marek Safar  <marek.safar@gmail.com>
6242
6243         A fix for bug #325359
6244         * class.cs: Use predictable name for automatically generated property.
6245         
6246 2007-11-12  Marek Safar  <marek.safar@gmail.com>
6247
6248         A fix for bug #324996
6249         * expression.cs (Is): Handle case where D is nullable and T is not
6250         correctly.
6251         
6252         * generics.cs (Nullable.HasValue): Nullable HasValue expression.
6253         
6254 2007-11-12  Marek Safar  <marek.safar@gmail.com>
6255
6256         * generic.cs, literal.cs, ecore.cs, class.cs, delegate.cs, const.cs,
6257         anonymous.cs, expression.cs, attribute.cs, codegen.cs, statement.cs:
6258         Flush small error reporting changes.
6259         
6260 2007-11-09  Marek Safar  <marek.safar@gmail.com>
6261
6262         A fix for bug #324996
6263         * expression.cs: Rewrote Is expression implementation to work with
6264         generics, nullable types, anonymous method. A const result expression 
6265         uses existing infrastructure instead of custom not fully-featured one.
6266         
6267 2007-11-08  Marek Safar  <marek.safar@gmail.com>
6268
6269         A fix for bug #340202
6270         * class.cs: Consider generics for volatile field.
6271
6272 2007-11-08  Marek Safar  <marek.safar@gmail.com>
6273
6274         A fix for bug #335594
6275         * expression.cs: Use conversion rules when handling string addition.
6276         
6277 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6278
6279         A fix for bug #336651
6280         * expression.cs: Fixed a crash when probing is on.
6281         
6282 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6283
6284         A fix for bug #324242
6285         * covert.cs: Added a conversion from any nullable-type with an 
6286         underlying enum-type to the type System.Enum.
6287         
6288 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6289
6290         A fix for bug #324222
6291         * class.cs: Report all non-used event fields.
6292         
6293 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6294
6295         A fix for bug #325161
6296         * cs-parser.jay, gcs-parser.jay, decl.cs: Implemented namespace alias
6297         qualifier for generic types.
6298         
6299 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6300
6301         A fix for bug #322971
6302         * expression.cs, ecore.cs: Added intermediate result value check for
6303         indexers. 
6304         
6305 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6306
6307         A fix for bug #324754
6308         * cs-parser.jay, gcs-parser.jay, class.cs: Try to create an interator
6309         when it was requested.
6310
6311 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6312
6313         A fix for bug #325101
6314         * expression.cs: Do type not value comparison for `is' expression.
6315
6316 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6317
6318         A fix for bug #320236
6319         * convert.cs: Don't apply user conversion on underlying target type.
6320
6321 2007-11-06  Marek Safar  <marek.safar@gmail.com>
6322
6323         * expression.cs: Don't use unresolved expression for error reporting.
6324  
6325 2007-11-06  Marek Safar  <marek.safar@gmail.com>
6326
6327         A fix for bugs #337712, #324490
6328         * ecore.cs (MethodGroupExpr): Refactored to handle delegate method
6329         overloading resolution too.
6330         
6331         * delegate.cs: Uses MethodGroupExpr for overloading resolution. It makes
6332         the process consistent and more robust.
6333         
6334         * expression.cs, linq.cs, report.cs: Update.
6335
6336 2007-11-02  Marek Safar  <marek.safar@gmail.com>
6337
6338         A fix for bug #332909
6339         * attribute.cs: Resolve attributes in correct context using error
6340         handling procedure.
6341         
6342         * rootcontext.cs: Define Obsolete attribute members as core members.
6343         
6344 2007-11-02  Marek Safar  <marek.safar@gmail.com>
6345
6346         * statement.cs: Removed unused methods.
6347         
6348 2007-10-31  Wade Berrier  <wberrier@novell.com>
6349
6350         * Makefile:  reenable copy of gmcs.exe.config, but include it in EXTRA
6351         DIST (it doesn't get included because PROGRAM isn't defined to be gmcs
6352         during 'make dist')
6353
6354 2007-10-31  Marek Safar  <marek.safar@gmail.com>
6355
6356         A fix for bug #338102
6357         * decl.cs (CheckExistingMembersOverloads): Workaround issue with generic
6358         methods registered as non-generics.
6359         
6360 2007-10-31  Marek Safar  <marek.safar@gmail.com>
6361
6362         A fix for bugs #337712, #324490
6363         * delegate.cs: Delegate covariance and contravariance is not allowed for
6364         value types.
6365         
6366 2007-10-31  Marek Safar  <marek.safar@gmail.com>
6367
6368         A fix for bug #337719 
6369         * cs-tokenizer.cs: Restore identifier buffer when parsing contextual
6370         `from' keyword.
6371         
6372 2007-10-30  Marek Safar  <marek.safar@gmail.com>
6373  
6374         * Makefile (net_2_0_bootstrap/mcs.exe.config): Reverted copy gmcs.exe.config.
6375
6376 2007-10-29  Marek Safar  <marek.safar@gmail.com>
6377  
6378         * cs-tokenizer.cs, gcs-parser.jay, driver.cs: Fixed parsing of nested
6379         query expressions.
6380
6381 2007-10-29  Raja R Harinath  <rharinath@novell.com>
6382
6383         * Makefile (net_2_0_bootstrap/mcs.exe.config): Copy gmcs.exe.config.
6384
6385 2007-10-29  Marek Safar  <marek.safar@gmail.com>
6386  
6387         A fix for bug #334652
6388         * ecore.cs (MethodGroupExpr.OverloadResolve): Do also lookup for
6389         extension methods when we have not found the best candidate in normal
6390         container.
6391
6392 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6393
6394         * AssemblyInfo.cs: Keep up-to-date.
6395
6396 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6397
6398         * Makefile: Fixed generics compiler name.
6399         
6400 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6401
6402         * lambda.test: removed, lambda parsing is done differently.
6403         
6404         * gen-il.cs, gen-treedump.cs, old-code.cs : Obsolete.
6405
6406 2007-10-27  Gert Driesen  <drieseng@users.sourceforge.net>
6407
6408         * Makefile: Removed dependency on gmcs.exe.config. Fixes build.
6409
6410 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6411
6412         * Makefile, *.sources : All C# compilers are in mcs folder.
6413         
6414         * *.cs: Use existing 2_1 define for smcs.
6415
6416 2007-10-26  Marek Safar  <marek.safar@gmail.com>
6417
6418         A fix for bug #335847
6419         * assign.cs, expression.cs: Couple of changes to avoid creating a
6420         temporary variable for each object initializer assignment statement. It
6421         simplifies struct initialization too, otherwise two temporary variables
6422         would be required.
6423         Implemented optimization of redundant default element initializers.
6424         
6425 2007-10-25  Marek Safar  <marek.safar@gmail.com>
6426
6427         A fix for bug #336766
6428         * expression.cs (Class.CheckBase): Use generic name when method is
6429         generic.
6430         
6431 2007-10-25  Marek Safar  <marek.safar@gmail.com>
6432
6433         A fix for bug #334737
6434         * expression.cs (IndexerAccess.EmitAssign): Emit local temporary
6435         variable and not variable argument for prepared copies.
6436
6437 2007-10-24  Marek Safar  <marek.safar@gmail.com>
6438
6439         A fix for bug #325110
6440         * class.cs, expression.cs, attribute.cs: Use open generic method when
6441         checking conditional attribute.
6442         
6443 2007-10-24  Marek Safar  <marek.safar@gmail.com>
6444
6445         * report.cs, cs-tokenizer.cs, class.cs, cs-parser.jay, anonymous.cs, 
6446         expression.cs, statement.cs: Renamed method FeatureIsNotISO to
6447         FeatureIsNotAvailable.
6448
6449 2007-10-24  Marek Safar  <marek.safar@gmail.com>
6450
6451         ** C# 3.0 Partial methods
6452         
6453         * cs-tokenizer.cs, support.cs, class.cs, decl.cs: Implemented partial
6454         methods support. Because of member cache issue with generics only
6455         non-generics partial methods are fully supported.
6456         
6457 2007-10-23  Marek Safar  <marek.safar@gmail.com>
6458         
6459         * class.cs, decl.cs: Rewrote member overloads check to cope with 
6460         generics and to use member cache for member checking. It also improves
6461         performance and fixes remaining overloads issues.
6462         
6463 2007-10-20  Marek Safar  <marek.safar@gmail.com>
6464         
6465         * class.cs, const.cs, decl.cs, delegate.cs, enum.cs, generic.cs,
6466         roottypes.cs, typemanager.cs:
6467                 
6468         A member cache creation logic changed to add members immediately and
6469         not rely on fallback. The member cache is now only prefered way
6470         how to access and find type declaration members. It saves 5 MB of memory
6471         during MWF compilation and makes code ready for more optimizations and
6472         clean-ups, it's also a pre-requirement for partial methods.
6473         
6474 2007-10-18  Raja R Harinath  <harinath@gmail.com>
6475
6476         * ecore.cs (Expression.Error_ValueCannotBeConverted): Add special
6477         handling for generic parameters.
6478
6479 2007-10-15  Marek Safar  <marek.safar@gmail.com>
6480         
6481         * class.cs (FixedField): Removed redundant volatile check.
6482         
6483 2007-10-15  Marek Safar  <marek.safar@gmail.com>
6484         
6485         * class.cs, decl.cs: Fixed overload members verification to do only one
6486         check per possible collision.
6487         
6488 2007-10-13  Marek Safar  <marek.safar@gmail.com>
6489         
6490         A fix for bug #325478
6491         * anonymous.cs (AnonymousContainer.Compatible): Merge are flags together
6492         and create only one disposable flags container.
6493         
6494 2007-10-12  Marek Safar  <marek.safar@gmail.com>
6495         
6496         A fix for bug #332442 by Alexandre Gomes <alexmipego@gmail.com>
6497         * statement.cs (Fixed): Fixed variables cloning.
6498         
6499 2007-10-12  Marek Safar  <marek.safar@gmail.com>
6500         
6501         A fix for bug #333342
6502         * class.cs (EventField): Don't mark value type event as synchronized. 
6503         
6504 2007-10-12  Marek Safar  <marek.safar@gmail.com>
6505         
6506         * ecore.cs, anonymous.cs (MethodGroupExpr): Use score from type
6507         inference to identify best candidate method correctly.
6508         (ProperyExpr): A range variable is read only and cannot be modified.
6509         
6510 2007-10-11  Marek Safar  <marek.safar@gmail.com>
6511         
6512         * ecore.cs, delegate.cs (MethodGroupExpr): Refactored best candidate
6513         logic to identify best candidate method correctly.
6514         
6515 2007-10-11  Marek Safar  <marek.safar@gmail.com>
6516         
6517         * location.cs (Equals, GetHashCode): Removed.
6518         
6519 2007-10-11  Marek Safar  <marek.safar@gmail.com>
6520         
6521         * report.cs: Implemented message recorder. It is used mainly for lambda
6522         expressions to capture otherwise swallowed error messages.
6523         
6524         * anonymous.cs, lambda.cs.cs: Do full parameters check.
6525
6526         * ecore.cs (ExtensionMethodGroup): Report binding failure at the botton
6527         and not at the top.
6528         (MethodGroupExpr.DoResolve): Use message recorder for error handling.
6529                 
6530         * expression.cs (MemberAccess): Always report lookup failure.
6531         
6532         * location.cs: Implemented Equals, GetHashCode.
6533         
6534         * statement.cs (Return.DoResolve): Fixed hardcoded error argument.
6535         
6536 2007-10-10  Jb Evain  <jbevain@novell.com>
6537
6538         * codegen.cs: re-enable assembly version check.
6539
6540 2007-10-09  Marek Safar  <marek.safar@gmail.com>
6541         
6542         * report.cs, anonymous.cs, driver.cs, expression.cs: Added few ISO-2
6543         checks.
6544         
6545         * namespace.cs (UsingAlias): Do correct version check.
6546         
6547 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6548         
6549         * expresison.cs, ecore.cs: Issue extension method error message when
6550         appropriate.
6551         
6552         * rootcontext.cs: Added ISO_2 compiler mode option.
6553
6554 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6555         
6556         * expresison.cs (UnaryMutator.ResolveOperator): Print more useful error
6557          message.
6558         
6559 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6560         
6561         * attribute.cs (GetString, GetBoolean): Work with both literal and
6562         constant.
6563         
6564         * ecore.cs, expresison.cs, delegate.cs (Invocation, MethodGroupExpr):
6565         Moved method overload specific methods to MethodGroupExpr.
6566         
6567         (IndexerAccess): Re-wrote resolving mechanism, fixed many issues and
6568         it should be less memory consuming.
6569         
6570 Mon Oct 8 09:29:15 CEST 2007 Paolo Molaro <lupus@ximian.com>
6571
6572         * codegen.cs: remove the assembly version check until the buildbot is
6573         fixed.
6574
6575 2007-10-07  Jb Evain  <jbevain@novell.com>
6576
6577         * attribute.cs (Attribute.GetString): if the value
6578         expression is a StringConstant, return its string value.
6579
6580 2007-10-07  Jb Evain  <jbevain@novell.com>
6581
6582         * typemanager.cs: add `assembly_version_attribute_type`.
6583         * codegen.cs: on attribute emission, check that the
6584         AssemblyVersionAttribute doesn't overflow.
6585
6586 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6587         
6588         A fix for bug #324677
6589         * anonymous.cs, decl.cs: Yes another anonymous container hack. Overwrite
6590         parent container of a scope container with currently resolved one. 
6591         
6592 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6593         
6594         A fix for bug #325534
6595         * class.cs (Invocation.DoResolve): Check invocation of object finalizer
6596         only.
6597         
6598 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6599         
6600         A fix for bug #327504
6601         * class.cs (Operator.Define): Refactored implicit and explicit user
6602         operator conversion rules.
6603         
6604 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6605         
6606         A fix for bug #327520
6607         * ecore.cs (ExtensionMethodGroupExpr): Emit resolved extension argument.
6608         
6609 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6610         
6611         A fix for bug #328022
6612         * class.cs (MethodData.Define): Use correct method to check whether
6613         a method implementents an accessor.
6614         
6615 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6616         
6617         A fix for bug #330069
6618         * statement.cs (Fixed.Resolve): Read the first array element only when
6619         an array is instantiated. 
6620         
6621 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6622         
6623         * expression.cs, assign.cs, generics.cs: Print correct operator when
6624         compound assignment is used.
6625         
6626 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6627         
6628         A fix for bug #325841
6629         * expression.cs (ArrayAccess): Use full argument cloning only for
6630         string compound concatenation.
6631         
6632 2007-10-03  Marek Safar  <marek.safar@gmail.com>
6633         
6634         A fix for bug #328774
6635         * ecore.cs (FieldExpr.EmitAssign): Fixed string concatenation compound
6636         assignment.
6637         (PropertyExpr.EmitAssign): Fixed string concatenation compound
6638         assignment.
6639
6640 2007-10-03  Raja R Harinath  <rharinath@novell.com>
6641
6642         Fix #328490
6643         * ecore.cs (SimpleName.DoSimpleNameResolve): Handle Property and
6644         Event accessibility checks here.  Remove some bogus code that
6645         accidently made GenericMethods work.
6646         (PropertyExpr.IsAccessibleFrom, EventExpr.IsAccessibleFrom): New.
6647
6648 2007-09-25  Marek Safar  <marek.safar@gmail.com>
6649         
6650         * expression.cs (ArrayCreation): Fixed cloning of an implicit types.
6651         
6652         * statement.cs (Block): Refactored AddVariable to allow error handling
6653         customization.
6654         
6655         * generic.cs: New stub.
6656         
6657 2007-09-23  Marek Safar  <marek.safar@gmail.com>
6658         
6659         * anonymous.cs, codegen.cs: Changed InferReturnType to be EmitContext
6660         flag.
6661         
6662 2007-09-17  Marek Safar  <marek.safar@gmail.com>
6663
6664         * class.cs: Use partial container to record whether any partial part
6665         contains static field initializer and therefore default contructor has
6666         to be defined.
6667         
6668 2007-09-14  Marek Safar  <marek.safar@gmail.com>
6669
6670         * class.cs (TypeContainer.AddPartial): Fixed an issue reported on
6671         mono-list when only one of two partial parts has defined accessibility
6672         modifier.
6673         
6674 2007-09-14  Marek Safar  <marek.safar@gmail.com>
6675
6676         A fix for bug #82845
6677         
6678         * class.cs (TypeContainer): Set correct resolve context for all field
6679         initializers.
6680         
6681 2007-09-13  Marek Safar  <marek.safar@gmail.com>
6682
6683         * assign.cs: Fixed a crash when field is resolved twice with an error.
6684         
6685         * codegen.cs: Changed InFieldInitializer to be flag.
6686         
6687         * anonymous.cs, ecore.cs, expression.cs: Update after
6688         IsInFieldInitializer rename.
6689         
6690         * const.cs: Removed unused parameter.
6691         
6692         * class.cs: Changed the way how we resolve and emit field initializers.
6693         The field initilizers have to have access to contructor block to emit
6694         compiler generated code.
6695
6696 2007-09-13  Marek Safar  <marek.safar@gmail.com>
6697
6698         * expression.cs (MemberAccess.DoResolve): DeclSpace is broken by
6699         generics use TypeContainer instead.
6700         
6701 2007-09-12  Marek Safar  <marek.safar@gmail.com>
6702         
6703         * generic.cs (TypeInferenceContext.InflateGenericArgument): Stub.
6704
6705         * lambda.cs (ResolveParameters): Use more powerful
6706         InflateGenericArgument.
6707         
6708         * parameters.cs: Better exception message.
6709                 
6710 2007-09-10  Marek Safar  <marek.safar@gmail.com>
6711
6712         * anonymous.cs (AnonymousMethodExpression.CompatibleChecks): Report
6713         correct expression block type. 
6714         
6715         * ecore.cs (Expression.Error_MemberLookupFailed): Made virtual.
6716         
6717         * expression.cs (Invocation): Extracted method group resolve to
6718         DoResolveOverload.
6719         
6720 2007-09-07  Marek Safar  <marek.safar@gmail.com>
6721
6722         * ecore.cs (Expression.MemberLookupFinal): Removed unused loc parameter.
6723         (MethodGroupExpr.ResolveGeneric): Use existing method group instance.
6724         
6725         * expression.cs (MemberAccess.DoResolve): Uses generic resolver for
6726         generic extension methods.
6727
6728 2007-09-06  Marek Safar  <marek.safar@gmail.com>
6729
6730         A fix for bug #82676 (Do I get it right now?)
6731         * convert.cs (Binary.ResolveOperator): An interface is converted to the
6732         object before a standard conversion is applied.
6733         
6734 2007-09-06  Marek Safar  <marek.safar@gmail.com>
6735
6736         * convert.cs (ImplicitReferenceConversionCore): Reverted wrong fix of
6737         #82676.
6738         
6739 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6740
6741         A fix for bug #82676
6742         * convert.cs (ImplicitReferenceConversionCore): Check both sides for
6743         non-generic interface types.
6744         
6745 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6746
6747         A fix for bug #82690
6748         * ecore.cs (PropertyExpr.EmitAssign): Leave a copy does just that.
6749         
6750 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6751
6752         A fix for bug #82571
6753         * anonymous.cs (AnonymousMethod.DoCreateMethodHost): Use internal 
6754         modifier for container based methods.
6755         
6756 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6757
6758         A fix for bug #82676
6759         * convert.cs (ImplicitReferenceConversionCore): From any class-type S to
6760         any interface-type T means to any of interface type T.
6761
6762 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6763
6764         * namespace.cs: We have 2 versions of System.Core assembly.
6765
6766 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6767
6768         A fix for bug #82652
6769         * class.cs (Class.GetClassBases): Compare types and not expressions.
6770
6771 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6772
6773         A fix for bug #82620
6774         * expression.cs (Invocation.EmitArguments): Duplicate params arguments
6775         actually never worked before.
6776         (IndexerAccess): Emit prepared arguments before they are modified.
6777         
6778 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6779
6780         A fix for bug #82563
6781         * assign.cs: Revert wrong fix.
6782         
6783         * expression.cs (VariableReference.EmitAssign): Handle ref reference
6784         correctly.
6785         (ArrayAccess): Changed the way we emit compound (prepared) assignments.
6786         Instead of ldelema/stdind we have to use temporary variables to handle
6787         cases like String.Concat (params string[]).
6788         
6789 2007-08-31  Marek Safar  <marek.safar@gmail.com>
6790
6791         * class.cs: EmitAttributes to Emit rename.
6792         
6793         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Parent can be
6794         null.
6795         (MemberCore.HasClsCompliantAttribute): Don't depend on 
6796         GetClsCompliantAttributeValue execution.
6797         
6798 2007-08-31  Marek Safar  <marek.safar@gmail.com>
6799
6800         * anonymous.cs: Use shorter type prefix.
6801         
6802         * ecore.cs (SimpleName.DoSimpleNameResolve): Use transparent identifiers
6803         when exist.
6804         
6805         * expression.cs (LocalVariableReference.DoResolveBase): Don't capture
6806         variables when probing is on.
6807         
6808         * statement.cs (LocaLInfo.Clone): Clone correctly resolved and 
6809         unresolved variables.
6810         (TopLevelBlock.GetTransparentIdentifier): Default implementation doesn't
6811         handle transparent identifiers.
6812         
6813 2007-08-26  Marek Safar  <marek.safar@gmail.com>
6814
6815         * attribute.cs (IsClsCompliant): Add nullable types test.
6816         
6817 2007-08-24  Atsushi Enomoto  <atsushi@ximian.com>
6818
6819         * doc.cs : catch other types of exception than XmlException to
6820           report CS1570. Fixed bug #82565.
6821
6822 2007-08-23  Marek Safar  <marek.safar@gmail.com>
6823
6824         * anonymous.cs (AnonymousMethodExpressin.ExplicitTypeInference): 
6825         The number of delegate parameters has to match.
6826         (AnonymousMethodExpressin.VerifyParameterCompatibility): Handles generic
6827         arrays.
6828
6829 2007-08-21  Marek Safar  <marek.safar@gmail.com>
6830
6831         * anonymous.cs (AnonymousMethod): Generate private anonymous method
6832         to fix problem with private arguments.
6833
6834 2007-08-20  Marek Safar  <marek.safar@gmail.com>
6835
6836         * anonymous.cs (AnonymousTypeClass): An anonymous type can be empty.
6837         
6838         * decl.cs (MemberName): Ignore generic type with no generic arguments. 
6839         
6840         * expression.cs (AnonymousTypeDeclaration): An anonymous type can be
6841         empty. Add cloning suport.
6842         
6843         * roottypes.cs (GetAnonymousType): Fixed argument comparison logic.
6844
6845 2007-08-20  Marek Safar  <marek.safar@gmail.com>
6846
6847         * convert.cs, ecore.cs, expression.cs, literal.cs: Use factory method 
6848         to create EmptyCast. It handles EmptyConstantCast specialization for
6849         constants.
6850         
6851 2007-08-18  Marek Safar  <marek.safar@gmail.com>
6852
6853         * expression.cs (Binary.is_unsigned): Handle unsafe types too.
6854         (EmitArrayArgument): One routine for array arguments.
6855         (ArrayCreation.MakeByteBlob): Fixed an array alignment. 
6856         
6857 2007-08-17  Marek Safar  <marek.safar@gmail.com>
6858
6859         * cs-tokenizer.cs (GetKeyword): Handle from keyword in a different way.
6860
6861 2007-08-17  Marek Safar  <marek.safar@gmail.com>
6862
6863         * anonymous.cs: MemberLookupFinal update.
6864
6865         * class.cs (ConstructorInitializer): Is expression based.
6866         
6867         * delegate.cs: MethodGroupExpr update.
6868         
6869         * ecore.cs  (Error_MemberLookupFailed): Improved to report better error
6870         messages.
6871         (Error_MemberLookupFailed): Customizable error override.
6872         (MethodGroupExpr): Keep queried type for later usage.
6873         (MethodGroupExpr.OverloadResolve): Catch errors related to overload
6874         resolve.
6875         
6876         * expression.cs: Error_MemberLookupFailed refactoring.
6877         (New.DoResolve): Resolve as much as possible.
6878         (ElementInitializer.Error_MemberLookupFailed): Object initializer
6879         customization for invalid member types.
6880
6881         * statement.cs: MethodGroupExpr update.
6882         
6883 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6884
6885         * modifier.cs (Check): Check all modifiers and not only accessibility
6886         ones.
6887
6888 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6889
6890         * ecore.cs (Expression.Error_ValueCannotBeConverted): Report always a
6891         type and not an expression.
6892
6893 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6894
6895         * statement.cs (Catch.Clone): Type and variable can be null.
6896
6897 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6898
6899         A fix for bug #81979
6900         * assign.cs (Assign.Emit): Prepare arguments for string concatenation.
6901         I am really not sure whether this is the best fix.
6902         
6903         * expression.cs (VariableReference.EmitAssign): Do prepare_load test
6904         only once.
6905         
6906 2007-08-14  Marek Safar  <marek.safar@gmail.com>
6907
6908         ** C# 3.0 Object and collection initializers (major re-write)
6909         
6910         * assign.cs (DoResolve): Initializers are not assign related.
6911         
6912         * codegen.cs (EmitContext.CurrentInitializerVariable): Holds a varible
6913         used during collection or object initialization.
6914         
6915         * expression.cs (Error_InvalidArguments): Add initializers specific
6916         messages. More will come later because it requires some general
6917         refactoring.
6918         (New.DoResolve): Better error handling for unsafe types.
6919         (EmptyExpressionStatement): New class.
6920         (ElementInitializer): An object initializer expression.
6921         (CollectionElementInitializer): A collection initializer expression.
6922         (CollectionOrObjectInitializers): A block of object or collection
6923         initializers.
6924         (NewInitialize): New expression with element/object initializers.
6925         
6926         * statement.cs: Reverted object/collection initializer hacks.
6927         
6928         * typemanager.cs (CSharpName): Filter __arglist type.
6929         
6930 2007-08-09  Marek Safar  <marek.safar@gmail.com>
6931
6932         ** C# 3.0 Anonymous Types (update to the latest standard)
6933         
6934         * expression.cs (Binary.ResolveOperator): Threat all null based types
6935         same.
6936         (AnonymousTypeDeclaration): Renamed from AnonymousType and simplified.
6937         (AnonymousTypeParameter): Updated.
6938         
6939         * anonymous.cs (CompilerGeneratedClass): Add custom name overload.
6940         (AnonymousTypeClass): New anonymous type container.
6941         
6942         * class.cs (AddField): Return operation result.
6943         
6944         * generic.cs: Another empty TypeArguments overload.
6945         
6946         * roottypes.cs (AddAnonymousType, GetAnonymousType): Anonymous types
6947         are stored at top of normal hierarchy.
6948         
6949         * typemanager.cs (CSharpName): Filter anonymous types.
6950         
6951 2007-08-09  Marek Safar  <marek.safar@gmail.com>
6952
6953         * expression.cs (StringConcat.Append): Handle 3 and more concatenation
6954         as single Concat call. How could we miss that :-(
6955         
6956 2007-08-08  Marek Safar  <marek.safar@gmail.com>
6957
6958         * expression.cs (ArrayCreation.CloneTo): Allocate exact size.
6959         
6960 2007-08-07  Miguel de Icaza  <miguel@novell.com>
6961
6962         * expression.cs: Fix the previous commit, the creation of the
6963         arguments array list needs also to be conditional on the arguments
6964         not being null.
6965
6966         * class.cs: Add a little bit of help to help narrow down problems.
6967
6968         * expression.cs (ArrayCreation.CloneTo): Argument can be null, do
6969         not try to copy in that case. 
6970
6971         * driver.cs: When building SMCS, include a new different set of
6972         default assemblies here.   Do this here so we can control whether
6973         to include the default assemblies with /noconfig.
6974
6975 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6976
6977         A fix for bug #81979
6978         * expression.cs (TypeOf.GetAttributableValue): Check for type arguments
6979         only.
6980
6981 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6982
6983         A fix for bug #82300
6984
6985         * anonymous.cs (AnonymousContainer.Define): Don't define anything when
6986         we are in probing scope.
6987
6988 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6989
6990         A fix for bug #82301
6991
6992         * statement.cs (Catch.CloneTo): Clone blocks in the right order.
6993         (Statement.CloneTo): Clone and not map children blocks.
6994
6995 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6996
6997         A fix for bug #82299
6998
6999         * expression.cs (LocalVariableReference.CloneTo): Remap local info
7000         variable too.
7001         
7002         * statement.cs (Statement.CloneTo): Clone variables before statements
7003         to allow remaping of local variables.
7004
7005 2007-08-03  Marek Safar  <marek.safar@gmail.com>
7006
7007         A fix for bug #82296
7008
7009         * anonymous.cs,
7010         * report.cs: Log crash details for future clone problems.
7011         
7012         * statement.cs (Return.Clone): Don't clone non-existent expression.
7013
7014 2007-08-03  Raja R Harinath  <harinath@gmail.com>
7015
7016         * class.cs (TypeContainer.AddBasesForPart): Make virtual.
7017         (Class.AddBasesForPart): Move CS0537 check here from ...
7018         * cs-parser.jay (class_declaration): ... here.  Move calling of
7019         'AddBasesForPart' to ...
7020         (class_bases): ... here.
7021         (struct_declaration, interface_declaration): Update to changes.
7022
7023 2007-08-02  Marek Safar  <marek.safar@gmail.com>
7024
7025         A fix for bug #81923
7026
7027         * statement.cs (Using.ResolveLocalVariableDecls): Only non-user implicit
7028         conversion is allowed.
7029
7030 2007-08-02  Marek Safar  <marek.safar@gmail.com>
7031
7032         A fix for bug #81564
7033
7034         * ecore.cs (EventExpr): Add IsBase handling.
7035
7036         * expression.cs (BaseAccess.CommonResolve): Events can use base accessor
7037         too.    
7038         
7039 2007-08-02  Raja R Harinath  <harinath@gmail.com>
7040
7041         Reduce some differences between cs-parser.jay in mcs/ and gmcs/.
7042         * cs-parser.jay: Some whitespace cleanups.
7043         (current_delegate): New.
7044         (type_name): New.
7045         (struct_declaration): Make similar to gmcs/cs-parser.jay -- add
7046         a dummy code block, and use 'type_name' instead of 'member_name'.
7047         (interface_declaration, class_declaration): Likewise.
7048         (delegate_declaration): Likewise.  Rearrange slightly and use
7049         'current_delegate'.
7050         * cs-tokenizer.cs (handle_where): Rename from handle_constraints.
7051         (GetKeyword): Update to change.  Use '!foo' instead of 'foo == false'.
7052
7053 2007-08-02  Marek Safar  <marek.safar@gmail.com>
7054
7055         A fix for bug #82039
7056
7057         * ecore.cs (TypeLookup.GetSignatureForError): Use name when type is not
7058         available.
7059
7060         * typemanager.cs (CSharpName): Split to string overload.
7061
7062 2007-08-02  Marek Safar  <marek.safar@gmail.com>
7063
7064         * expression.cs,
7065         * report.cs: Updated warning CS0472.
7066
7067 2007-08-01  Marek Safar  <marek.safar@gmail.com>
7068
7069         A fix for bug #82181
7070         * cs-parser.jay,
7071         * cs-tokenizer.cs: Ignore partial keyword inside block expression.
7072
7073 2007-08-01  Marek Safar  <marek.safar@gmail.com>
7074
7075         A fix for bug #82277
7076         * statememnt.cs (Block.Clone): Don't clone explicit blocks twice.
7077
7078 2007-08-01  Marek Safar  <marek.safar@gmail.com>
7079
7080         ** C# 3.0 Type Inference (major bits are working)
7081         
7082         * anonymous.cs (AnonymousMethodExpression): Removed refactored fields.
7083         (.ImplicitStandardConversionExists): Uses compatible.
7084         (.ExplicitTypeInference): Infers type arguments based on explicit arguments
7085         (.InferReturnType): New method.
7086         (.Compatible): Refactored.
7087         (.ResolveParameters): Uses factory to create resolved parameters.
7088         (.CompatibleMethod): Add probing mode support.
7089         (AnonymousContainer): Removed unused fields. Split Define and Resolve to
7090         clearly distinguish between 2 different operations.
7091         (LambdaMethod): Moved to lambda.cs.
7092         (AnonymousMethod): Removed unused fields and methods.
7093         (AnonymousDelegate): Simplified.
7094         
7095         * codegen.cs (ResolveTopBlock): Updated renamed Resolve to Define.
7096         
7097         * convert. cs (ImplicitConversionStandard): Compatible works differently.
7098         
7099         * delegate.cs (Delegate): New mehods to reduce code duplication.
7100         (.GetConstructor): New method.
7101         (.GetInvokeMethod): New method.
7102         (DelegateCreation): Updated.
7103         
7104         * ecore.cs (ResolveOverloadExtensions): Don't crash when extension method
7105         does not exist.
7106         (OverloadResolve): Made probing little bit faster.
7107         
7108         * expression.cs (ParameterReference.DoResolveLValue): Reference can be null
7109         when probing is on.
7110         
7111         * generic.cs (TypeInferenceContext): Dummy implementation.
7112         
7113         * iterators.cs: Updated after Resolve/Define rename.
7114         
7115         * lambda.cs (LambdaExpression)
7116         (.ResolveParameters): Handles both type of arguments and type inference too.
7117         
7118         * parameter.cs (ImplicitLambdaParameter.Resolve): Sanity check.
7119         (InflateTypes): Updated.
7120         
7121         * support.cs (InflateTypes): Changed signature and updated.
7122         
7123         * typemanager.cs (LookupMemberCache): Better dynamic type check.
7124         (MemberLookup_FindMembers): More MS tricks.
7125         (GetParameterData): Ditto.
7126         (GetDelegateParameters): Uses quick path for dynamic types.
7127         
7128 2007-08-01  Marek Safar  <marek.safar@gmail.com>
7129
7130         * class.cs (MethodData.Define): EmitContext is required for generic stuff
7131         only.
7132
7133 2007-07-31  Marek Safar  <marek.safar@gmail.com>
7134
7135         * statement.cs (ProcessParameters): Don't crash when parameters have wrong
7136         syntax.
7137         
7138 2007-07-26  Jb Evain  <jbevain@novell.com>
7139
7140         * typemanager.cs (TypeManager.GetConstructor): Add a method overload
7141         which takes a boolean 'report_errors', similar to the GetMethod.
7142         (InitCodeHelpers): StructLayoutAttribute.ctor(int16) is not visible
7143         in .net 2.1, do not report errors here.
7144
7145         * typemanager.cs (TypeManager.InitCoreTypes): System.ArgIterator,
7146         System.Runtime.CompilerServices.RequiredAttributeAttribute and
7147         System.Runtime.CompilerServices.TypeForwardedToAttribute are internal
7148         in .net 2.1.
7149
7150         * typemanager.cs (TypeManager.InitCoreTypes): Move the resolution
7151         of the type InternalsVisibleToAttribute before the first call
7152         to CoreLookupType which is allowed to fail (third boolean parameter
7153         to true). Because, during the resolution for a type that is not
7154         immediately found, we try to check if the type is not defined in
7155         a friend assembly, and to do so, we need the
7156         InternalVisibleToAttribute.
7157
7158 2007-07-23  Miguel de Icaza  <miguel@novell.com>
7159
7160         * expression.cs (Binary): Add support for the brain-dead CSC 2.x
7161         feature that allows structs to be compared against null and inline
7162         the result as true or false.
7163
7164         Notice that the same code is not permitted inside a generic block
7165         of code that would do:
7166
7167         class Foo<T> where T : struct {
7168             bool Eval (T x)
7169             {
7170                  return x == null;
7171             }
7172         }
7173
7174         It is only allowed if the type of T is not bound (no where
7175         clause).   In my opinion, this CSC 2 behavior is broken but people
7176         seem to be using it (IronRuby does, a few bug reports on bugzilla
7177         have it and some people have complained about it).
7178
7179         All of the users that depend on this behavior have code that is
7180         very likely broken. 
7181         
7182         * report.cs (Warning, Error): make these take object arguments,
7183         not strings, as that allows us to take advantage of Format.
7184
7185 2007-07-20  William Holmes  <billholmes54@gmail.com>
7186
7187         * decl.cs: Changed MemberName.CountTypeArguments to also check the 
7188           Left member variable for the Count.
7189         * doc.cs: Changed DocUtil.GetMethodDocCommentName to call 
7190           MemberName.CountTypeArguments to avoid a NRE. 
7191
7192         This code is contributed under the MIT X11 license
7193
7194 2007-07-18  Marek Safar  <marek.safar@gmail.com>
7195
7196         * cs-tokenizer.cs: Improved lambda parsing and removed old code.
7197
7198 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
7199
7200         * doc.cs : generic method arguments are written as ``x while generic
7201           type arguments are `x. Combined with the previous change, fixed bug
7202           #79706.
7203
7204 2007-07-18  Raja R Harinath  <rharinath@novell.com>
7205
7206         Fix #82120
7207         * expression.cs (Binary.ResolveOperator): When converting
7208         'a + (- b)' to 'a - b', ensure that the unary '-' is discarded.
7209
7210 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
7211
7212         * doc.cs : when T: or whatever x: is specified, it does not really
7213           check the doc comment's syntax correctness. Fixed bug #82006.
7214
7215 2007-07-18  Marek Safar  <marek.safar@gmail.com>
7216
7217         * anonymous.cs (AnonymouseMethodExpression): Refactored to work with
7218         LambdaExpression better.
7219         
7220         * cs-tokenizer.cs: Changed a way how we detect lambda parameters.
7221         
7222         * driver.cs (LambdaTypeParseTest): Removed, tested method is gone.
7223         
7224         * ecore.cs (Expression.MemberLookupFailed): Don't show currect context
7225         as it can be generated.
7226         
7227         * expression.cs (Invocation.Error_InvalidArguments): Show correct
7228         modifiers.
7229         
7230         * lambda.cs (LambdaExpression): Refactored to share same code with
7231         AnonymousMethodExpression.
7232         
7233 2007-07-17  Marek Safar  <marek.safar@gmail.com>
7234
7235         * anonymous.cs (MakeName): Include host name for easier debugging.
7236         (LambdaMethod): New class for lambda spcecific stuff.
7237         
7238         * attribute.cs: Set EmitContext return type.
7239
7240         * class.cs: Set EmitContext return type.
7241         
7242         * codegen.cs (EmitContext): Return type cannot be null to stop messing
7243         with null/void meaning.
7244         
7245         * iterators.cs (ContainerType): Implemented.
7246         
7247         * rootcontext.cs: Set value of TypeManager.bool_type at early stage.
7248         
7249         * statement.cs (Return): Updated to lambda expressions.
7250         (Block.CloneTo): Parent can be null.
7251                 
7252 2007-07-13  Marek Safar  <marek.safar@gmail.com>
7253
7254         A fix for bug #81917
7255         * attribute.cs (AttributeTester.GetFixedBuffer): More robust testing.
7256         
7257         * class.cs (FixedField): Check whether field is in unsafe scope.
7258
7259         * ecore.cs (FieldExpr.DoResolve): Create fixed buffer expression here.
7260         (FieldExpr.Emit): Fixed buffers cannot be volatile.
7261
7262         * expression.cs (ElementAccess.Resolve): Move fixed buffers resolve to
7263         FieldExpr.
7264         
7265         * statement.cs (Fixed.Resolve): Simplified fixed buffers.
7266                 
7267 2007-07-13  Marek Safar  <marek.safar@gmail.com>
7268
7269         * cs-tokenizer.cs, class.cs, decl.cs, driver.cs, namespace.cs,
7270         rootcontext.cs, expression.cs, statement.cs: Updated to use WarningLevel
7271         from Report class.
7272
7273 2007-07-13  Marek Safar  <marek.safar@gmail.com>
7274
7275         * ecore.cs (FieldExpr.AddressOf): Less confusing warning message.
7276         
7277 2007-07-13  Marek Safar  <marek.safar@gmail.com>
7278
7279         * anonymous.cs (AnonymousMethodExpression): Parameters are r/o.
7280         (AnonymousContainer.ResolveNoDefine): Another ec to aec flag conversion.
7281         
7282         * codegen.cs(EmitContext): Add ProbingMode flag.
7283         
7284         * delegate.cs (DelegateInvocation): Set few instance variables as r/o.
7285         
7286         * driver.cs: For now set both warning values.
7287         
7288         * ecore.cs (SimpleName): Name is readonly.
7289         (MethodGroup.OverloadResolve): One quick path for probing.
7290         
7291         * expression.cs (Unary): Set Oper r/o.
7292         (Binary): Set Oper r/o.
7293         (ParameterReference): Set few instance variables as r/o.
7294         (ParameterReference.DoResolveBase): Don't capture aruments when 
7295         the probing is on.
7296         (Invocation.CloneTo): Fixed typo, looks easy, yeah.
7297         (Arglist): arguments are private.
7298         (SizeOf): type is private and r/o.
7299         (MemberAccess): arguments are private.
7300
7301         * report.cs: Enhanced reporting on/off capabilities.
7302         
7303         * lambda.cs: Uses ec.IsInProbingMode.
7304         (ContextualReturn): Derives from return.
7305         
7306         * rootcontext.cs: For now set both warning values.
7307         
7308         * statement.cs (CloneContext.RemapBlockCopy): Remaps block to cloned
7309         copy if one exists.
7310         (Return.Resolve): Don't die immediately.
7311         (Block.Resolve): Speed-up probing.
7312         (Block.CloneTo): Clone only child blocks.
7313
7314 Fri Jul 13 11:19:28 CEST 2007 Paolo Molaro <lupus@ximian.com>
7315
7316         * iterators.cs: reverted Miguel's latest change (r81925) as it
7317         breaks the build in System.
7318
7319 2007-07-13  Miguel de Icaza  <miguel@novell.com>
7320
7321         * iterators.cs (Yield.CheckContext): Check for the iterator type
7322         also here as we can call into Yield even in codepaths that are not
7323         directly checked by
7324         (MethodOrOperator is the only path that was checked).
7325
7326         In addition to the standard check, use a more specific check for
7327         constructors to report a more verbose error. 
7328
7329 2007-07-12  Miguel de Icaza  <miguel@novell.com>
7330
7331         * ecore.cs (FieldExpr.AddressOf): Do not stop processing here,
7332         report the warning and continue 
7333
7334         * statement.cs (Using.EmitLocalVariableDecls): We were leaving
7335         values on the stack on the call to Emit.   Use EmitStatement if
7336         possible, or using Emit + Pop if not possible.   Fixes #82064
7337
7338 2007-07-12  Raja R Harinath  <rharinath@novell.com>
7339
7340         * expression.cs (Invocation.IsApplicable): Reorganize slightly to
7341         avoid try...finally in some cases.
7342
7343 2007-07-10  Marek Safar  <marek.safar@gmail.com>
7344
7345         * attribute.cs (Attribute.ResolveConstructor): Uses method group.
7346         
7347         * class.cs (ConstructorInitializer.Resolve): Use and keep method group
7348         instead of method. Re-use standard error handling.
7349         (ConstructorInitializer.Emit): Simplified.
7350         
7351         * delegate.cs: Updated after Invocation.EmitCall change.
7352         
7353         * ecore.cs (GetOperatorTrueOrFalse): Uses MethodGroupExpr only.
7354         (SimpleName.SimpleNameResolve): Set and reset in_transit flag correctly.
7355         (ExtensionMethodGroupExpr): Refactored to use same OverloadResolve
7356         method and don't permanently changing input arguments.
7357         (MethodGroupExpr): Introduced resolved best_candidate, when method group
7358         is resolved it has one of the candidates is the best one which is later
7359         used to emit. Removed a few unused method.
7360         (MethodGroupExpr.MakeUnionSet): Moved from Invocation, it belongs here.
7361
7362         * expression.cs (StaticCallExpr.MakeSimpleCall): Uses method group.
7363         (Binary.ResolveOperator): Ditto.
7364         (ConditionalLogicalOperator.DoResolve): Ditto.
7365         (Invocation): Uses method group.
7366         (Invocation.DoResolve): Simplified.
7367         (Invocation.EmitCall): Removed useless is_static.
7368         (Invocation.Emit): Delegate to method group.
7369         (Invocation.EmitStatement): Simplified.
7370         (New): Uses method group.
7371         (MemberAccess.DoResolve): Don't destroy original expression.
7372         
7373         * statement.cs (ForEach.Resolve): Use null for no method arguments.
7374         
7375 2007-07-04  Marek Safar  <marek.safar@gmail.com>
7376
7377         * ecore.cs (VarExpr.DoResolveLValue): More restriction checks.
7378         
7379         * anonymous.cs,
7380         * lambda.cs: Add custom error message type.
7381
7382 2007-07-03  Marek Safar  <marek.safar@gmail.com>
7383
7384         * lambda.cs: Simplified little bit.
7385         
7386         * parameter.cs: Introduced ImplicitLambdaParameter.
7387         (Parameters.CreateFullyResolved): New factory instead of ctor.
7388         
7389         * anonymous.cs,
7390         * class.cs,
7391         * delegate.cs: Updated parameter creation.
7392         
7393 2007-07-03  Marek Safar  <marek.safar@gmail.com>
7394
7395         *  ecore.cs (SimpleName.GetSignatureForError): Display correctly generic
7396         arguments.
7397         
7398         * generic.cs: Synchronized with gmcs.
7399         
7400 2007-07-03  Marek Safar  <marek.safar@gmail.com>
7401
7402         * class.cs (Indexer): Check return type as soon as possible.
7403         
7404         * cs-parser.jay: Initialize implicit_value_parameter_type for interface
7405         members too.
7406         
7407         * ecore.cs (VarExpr.DoResolveLValue): Set eclass value.
7408         
7409         * expression.cs (Invocation.Error_InvalidArguments): Show type only.
7410         
7411         * parameter.cs (Parameter): Use expression type when it is available.
7412         
7413         * support.cs (ReflectionParameters.ParameterDesc): Show an extension
7414         method modifier for the first parameter only.
7415
7416 2007-06-24  Marek Safar  <marek.safar@gmail.com>
7417
7418         A fix for bug #81938
7419         * typemanager.cs (ChangeType): Fixed couple of char conversions.
7420         
7421         * constant.cs: Tide up an exception message.
7422
7423 2007-06-22  Marek Safar  <marek.safar@gmail.com>
7424
7425         * ecore.cs (SimpleName.DoSimpleNameResolve): Better error reporting when
7426         an uninitialized variable is used.
7427         
7428         * expression.cs (LocalVariableReference.DoResolve): Ditto.
7429
7430 2007-06-22  Marek Safar  <marek.safar@gmail.com>
7431
7432         * ecore.cs (SimpleName.TypeOrNamespaceNotFound): Allow to override type
7433         not found error handling.
7434
7435         * expression.cs (ArrayCreation): Removed redundant fields and little bit
7436         simplified.
7437         (ArrayCreation.ResolveArrayElement): To be ready to customization.
7438         (ArrayCreation.DoResolve): Simplified.
7439         (ImplicitlyTypedArrayCreation.DoResolve): Implicitly typed arrays have
7440         its own resolve process.
7441         (ImplicitlyTypedArrayCreation.ResolveArrayElement): Conversion magic.
7442
7443 2007-06-20  Marek Safar  <marek.safar@gmail.com>
7444
7445         * namespace.cs (NamespaceEntry.Error_AmbiguousTypeReference): Print
7446         more error details.
7447         
7448 2007-06-20  Marek Safar  <marek.safar@gmail.com>
7449
7450         * cs-tokenizer.cs: Removed var related stuff.
7451         
7452         * ecore.cs (Expression.ResolveAsContextualType): Introduced new method.
7453         (VarExpr): Changed to derive from SimpleName. VarExpr now behaves as
7454         a type and a keyword at same time.
7455         
7456         * decl.cs (MembeName.GetTypeExpression): Create VarExpr when type name
7457         matches to "var".
7458         
7459         * expression.cs (ImplicitlyTypedArrayCreation): New empty class for
7460         implicitly typed arrays, more changes will follow.
7461         
7462         * statement.cs (LocalInfo.Resolve): Resolve type as contextual type.
7463         
7464 2007-06-19  Marek Safar  <marek.safar@gmail.com>
7465
7466         * ecore.cs (VarExpr): Removed Handled field.
7467         
7468         * statement.cs (Using.ResolveLocalVariableDecls): Refactored to use
7469         build-in assign functionality.
7470         (ForEach.Resolve): Removed all implicitly typed local variable code and
7471         simplified.
7472         (ArrayForeach.Resolve): Infer implicitly typed local variable here.
7473         (CollectionForeach.Resolve): Infer implicitly typed local variable here.
7474
7475 2007-06-18  Marek Safar  <marek.safar@gmail.com>
7476
7477         * assign.cs: Removed implicitly typed local variable check.
7478         
7479         * expression.cs (LocalVariableReference.DoResolve): Add check for self
7480         referencing implicitly typed local variable.
7481         (LocalVariableReference.DoResolveLValue): Infer implicitly typed local
7482         variable here.
7483         
7484         * statement.cs (Fixed): Removed unsupported implicitly typed local
7485         variable code.
7486
7487 2007-06-15  Marek Safar  <marek.safar@gmail.com>
7488
7489         * decl.cs (MemberName): Moved all Unbound stuff to parser.
7490
7491 2007-06-14  Marek Safar  <marek.safar@gmail.com>
7492
7493         A fix for bugs #81855 and #76274
7494         * attribute.cs (AttachTo): Always set owner for global attributes to
7495         prefined owner.
7496         
7497         * ecore.cs (Error_TypeDoesNotContainDefinition): A type location can be
7498         usefull too.
7499         
7500         * cs-parser.jay: Assembly and module attributes must precede all other
7501         elements except using clauses and extern alias declarations.
7502
7503 2007-06-13  Marek Safar  <marek.safar@gmail.com>
7504
7505         A fix for bug #81748
7506         * cs-tokenizer.cs,
7507         * expression.cs: More checks for non ISO-1 features.
7508
7509 2007-06-12  Marek Safar  <marek.safar@gmail.com>
7510
7511         A fix for bug #81807
7512         * statement.cs(Switch.TableSwitchEmit): Define null label when it's not
7513         present inside switch statement and it is required by nullable check.
7514
7515 2007-06-12  Marek Safar  <marek.safar@gmail.com>
7516
7517         A fix for bug #81840
7518         * ecore.cs (SimpleName.ResolveAsTypeStep): Look for non-generic type
7519         when type matching fails.
7520         
7521         * namespace.cs: Tiny error message change.
7522
7523 2007-06-12  Marek Safar  <marek.safar@gmail.com>
7524
7525         * decl.cs (CheckAbstractAndExtern): Moved to MemberCore for easier error
7526         reporting. Added automatic property check.
7527         
7528         * class.cs: Updated after CheckAbstractAndExtern relocation.
7529         (AEventPropertyAccessor.GetSignatureForError): Customized.
7530         
7531 2007-06-11  Marek Safar  <marek.safar@gmail.com>
7532
7533         * class.cs (DefineBaseTypes): Base type can be undefined.
7534         
7535         * ecore.cs (TypeLookup): Minor refactoring.
7536         (DoResolveAsTypeStep): Removed redundant check.
7537
7538         * namespace.cs (Lookup): Removed redundant check.
7539                 
7540         * rootcontext.cs (BootstrapCorlib_ResolveType): Uses normal 
7541         ResolveAsTypeTerminal step.
7542         (BootstrapCorlib_*): Simplified.
7543         (PopulateCoreType): Core types can be now external.
7544
7545 2007-06-07  Marek Safar  <marek.safar@gmail.com>
7546
7547         * anonymous.cs (VerifyExplicitParameterCompatibility): Add flag to do
7548          verification only.
7549          (InferTypeArguments): Infers anonymous expression type arguments.
7550          (Compatible): Split to Compatible and InferTypeArguments. 
7551         
7552         * lambda.cs: Updated.
7553
7554 2007-06-08  Marek Safar  <marek.safar@gmail.com>
7555
7556         * anonymous.cs (AnonymousContainer): Marked as compiler generated.
7557
7558 2007-06-07  Raja R Harinath  <harinath@gmail.com>
7559
7560         Fix #80477, cs0135-2.cs, cs0135-3.cs
7561         * statement.cs (ToplevelBlock.ProcessParameters): Add parameter
7562         names to the "known" variables list.
7563         (Block.CheckInvariantMeaningInBlock): Handle the fact the
7564         parameter names are also "known".
7565         (Block.CheckError136): Remove.
7566         (ExplicitBlock.CloneTo): New.  Set 'known_variables' in target to
7567         null.
7568
7569 2007-06-07  Marek Safar  <marek.safar@gmail.com>
7570
7571         * ecore.cs (MethodGroupExpr.OverloadResolve): Print full method definition.
7572
7573 2007-06-06  Marek Safar  <marek.safar@gmail.com>
7574
7575         * ecore.cs (SimpleName.Emit): Emitting unresolved simple name is
7576         internal error not an user error.
7577          
7578         * expression.cs (IsApplicable): Refactored to make debugging easier.
7579
7580         * support.cs: More tricks for non-mono runtimes.
7581         
7582         * typemanager.cs (CoreLookupType): Made public.
7583         (InitSystemCore): All linq specific stuff moved to linq.cs
7584
7585 2007-06-05  Marek Safar  <marek.safar@gmail.com>
7586
7587         * typemanager.cs (CSharpSignature): One more missing build-in types
7588         replacement.
7589         More tricks for non-mono runtime.
7590
7591 2007-06-05  Raja R Harinath  <harinath@gmail.com>
7592
7593         * statement.cs (Block.CheckError136_InParents): Remove.
7594         (Block.AddVariable): Use GetParameterInfo instead.
7595         (ToplevelBlock.ProcessArguments): Likewise.
7596
7597 2007-06-04  Raja R Harinath  <rharinath@novell.com>
7598
7599         * statement.cs (ToplevelBlock.CloneTo): New.  Copy over parameter
7600         information too.
7601         (ToplevelBlock.GetParameterInfo): Split out of ...
7602         (ToplevelBlock.GetParameterRefernce): ... this.
7603         (ToplevelBlock.ParameterMap): Remove.
7604         * expression.cs (ParameterReference): Update to use
7605         ToplevelParameterInfo.
7606
7607         * statement.cs (ToplevelBlock.ProcessParameters): Workaround some
7608         regression.
7609
7610         * flowanalysis.cs (FlowBranching.CheckOutParameters): Move ...
7611         * statement.cs (ToplevelBlock.CheckOutParameters): ... here.
7612
7613         * statement.cs (ToplevelBlock.ResolveMeta): Move CS0136 checks ...
7614         (ToplevelBlock.ProcessParameters) ... here.
7615         (ToplevelBlock..ctor): Invoke it.
7616
7617         * statement.cs (ToplevelBlock.ResolveMeta): Add sanity checks for
7618         new parameters.
7619
7620         * statement.cs (IKnownVariable): New interface.
7621         (LocalInfo): Implement it.
7622         (ToplevelParameterInfo): New class.
7623         (ExplicitBlock.AddKnownVariable): Use IKnownVariable.
7624         (ExplicitBlock.GetKnownVariable): Likewise.  Rename from
7625         GetKnownVariableInfo.
7626
7627 2007-06-03  Raja R Harinath  <harinath@gmail.com>
7628
7629         Partly speed up CS0136 error checks.
7630         * statement.cs (ExplicitBlock.GetKnownVariableInfo): Remove
7631         'recurse' parameter.
7632         (Block.DoCheckError136): Only check errors in parameters.  Move
7633         local variable checks ...
7634         (Block.AddVariable): ... here, and ...
7635         (ToplevelBlock.ResolveMeta): ... here.
7636
7637 2007-06-02  Raja R Harinath  <harinath@gmail.com>
7638
7639         * statement.cs (Block.IsChildOf): Remove.
7640
7641         * statement.cs (Statement.Clone): Move special case code ...
7642         (Block.CloneTo): ... here.
7643
7644 2007-05-29  Raja R Harinath  <rharinath@novell.com>
7645
7646         * statement.cs (ToplevelBlock.container): Remove field.  It's
7647         redundant with 'Parent'.
7648         (ToplevelBlock.ContainerBlock): Remove accessor.
7649         (ToplevelBlock..ctor): Update to changes.  Register anonymous
7650         child with parent here, ...
7651         * cs-parser.jay (end_anonymous): ... not here.  Don't modify
7652         current_block.
7653         (start_anonymous): Don't save current_block.
7654         (top_current_block): Remove.
7655
7656         * statement.cs (Block.Flags): Remove IsExplicit and IsToplevel flags.
7657         (Block.Resolve): Update to changes.
7658         (Block..ctor): Move setting of "correct" 'Toplevel'
7659         and 'Explicit' fields to ...
7660         (ExplicitBlock..ctor, ToplevelBlock..ctor): ... here.
7661
7662 2007-05-27  Raja R Harinath  <harinath@gmail.com>
7663
7664         Kill Block.Implicit
7665         * statement.cs (Block.Implicit): Remove.
7666         (Block): Update to changes.
7667         * flowanalysis.cs: Likewise.
7668
7669         Mildly speed up CheckInvariantMeaningInBlock
7670         * statement.cs (ExplicitBlock.AddKnownVariable): Move here from Block.
7671         Recursively call AddKnownVariable to all enclosing blocks.
7672         (ExplicitBlock.GetKnownVariableInfo): Move here from Block.
7673         Remove recursive calls.
7674         (Block): Update to changes.
7675
7676         New ExplicitBlock invariants
7677         * statement.cs (Block.Explicit): New field.  It points to the
7678         immediately enclosing non-implicit block.
7679         (Block..ctor): Maintain the invariant.
7680         * cs-parser.jay: Take advantage of invariant.
7681
7682         Introduce ExplicitBlock
7683         * statement.cs (ExplicitBlock): New.
7684         (ToplevelBlock): Derive from it.
7685         (Block.Flags.IsExplicit): Rename from '...Implicit' and invert
7686         sense of flag.
7687         (Block.Implicit): Update to changes.
7688         * cs-parser.jay: Update to changes.
7689
7690         Remove unused field
7691         * codegen.cs (EmitContext.IsLastStatement): Remove.
7692         * statement.cs (Block.DoEmit): Update to changes.
7693
7694 2007-05-25  Raja R Harinath  <rharinath@novell.com>
7695
7696         * cs-parser.jay: Use 'start_block' and 'end_block' rather than
7697         modifying current_block directly.
7698
7699 2007-05-23  Scott Peterson  <lunchtimemama@gmail.com>
7700         
7701         * class.cs: Implemented automatic properties (C# 3.0)
7702           Thanks to Marek for the help.
7703
7704 2007-05-23  Raja R Harinath  <rharinath@novell.com>
7705
7706         * flowanalysis.cs (VariableInfo.SetAssigned): When noting a
7707         variable as assigned, note also that all its components are
7708         assigned too.
7709         (MyBitVector.SetRange): New.  Function to set multiple bits to true.
7710
7711 2007-05-19  Marek Safar  <marek.safar@gmail.com>
7712
7713         * anonymous.cs, class.cs: Emit Compiler generated attribute when
7714         member is marked as compiler generated.
7715         
7716         * decl.cs (MemberCore): Refactored ModFlags into property.
7717
7718         * modifiers.cs: Add new modifier (COMPILER_GENERATED).
7719         (Check): Check only accessibility modifiers.
7720
7721 2007-05-18  Raja R Harinath  <rharinath@novell.com>
7722
7723         Track all assignable slots in one bit array
7724         * statement.cs (ToplevelBlock.ParameterMap): Convert into array.
7725         (ToplevelBlock.ResolveMeta): Don't create a VariableMap.  Move
7726         logic from VariableMap constructor here.  Use the same 'offset'
7727         variable that's later used for computing offsets of local
7728         variables.
7729         * flowanalysis.cs (UsageVector.parameters): Remove.
7730         (UsageVector): Update to changes.
7731         (VariableMap): Remove.
7732
7733         Avoid creating ParameterMap in every block
7734         * statement.cs (Block.ParameterMap): Move ...
7735         (ToplevelBlock.ParameterMap): ... here.
7736         (ToplevelBlock.ResolveMeta): Create VariableMap for parameters
7737         only once.
7738         * flowanalysis.cs (FlowBranching.param_map): Remove.
7739         (FlowBranching.UsageVector): Update to changes.
7740         (FlowBranchingToplevel.CheckOutParameters): Likewise.
7741
7742         * statement.cs (Block.CloneTo): Clone Toplevel field too.
7743
7744         * expression.cs (ParameterReference): Distinguish between block
7745         where parameter was referenced and declared.
7746
7747 2007-05-18  Marek Safar  <marek.safar@gmail.com>
7748
7749         * flowanalysis.cs, statement.cs: Put back improved error handling.
7750
7751 2007-05-15  Scott Peterson  <lunchtimemama@gmail.com>
7752         
7753         * assign.cs:
7754         * expression.cs:
7755           Imporved object and collection initialization (C# 3.0).
7756
7757 2007-05-15  Marek Safar  <marek.safar@gmail.com>
7758
7759         A fix for bug #81380
7760         * expression.cs (Is.DoResolve): Only value types have constant `is'
7761         behaviour.
7762
7763 2007-05-15  Raja R Harinath  <rharinath@novell.com>
7764
7765         * statement.cs (ToplevelBlock.child): Remove.
7766
7767 2007-05-15  Raja R Harinath  <harinath@gmail.com>
7768
7769         Rationalize ResolveMeta: refactoring
7770         (Block.ResolveMeta): Remove wrong or superfluous comments.  Carve
7771         out constant handling code into ...
7772         (Block.DoResolveConstants): ... this.
7773
7774         Rationalize ResolveMeta: kill local_map
7775         * statement.cs (Block.local_map, Block.LocalMap): Remove.
7776         (Block.AssignableSlots): New.
7777         (Block.ResolveMeta): Make protected.  Don't create a VariableMap
7778         for locals -- move code from VariableMap here.  Avoid unnecessary
7779         allocations.
7780         * flowanalysis.cs (FlowBranching.local_map): Remove.
7781         (FlowBranching..ctor): Use Block.AssignableSlots.
7782         (VariableMap): Remove unused constructors.
7783
7784 2007-05-11  Raja R Harinath  <rharinath@novell.com>
7785
7786         * Makefile [PROFILE=net_2_0_bootstrap]: Add special-case rules.
7787
7788 2007-05-11  Marek Safar  <marek.safar@gmail.com>
7789
7790         * typemanager.cs (IsFriendAssembly): Should not be called for building
7791         assembly.
7792
7793 2007-05-09  Marek Safar  <marek.safar@gmail.com>
7794
7795         * literal.cs (NullConstant): Print null in all cases.
7796         
7797         * expression.cs (Binary.ResolveOperator): Implemented delegate
7798          comparison based on C# 2.0 changes.
7799
7800 2007-04-28  Scott Peterson  <lunchtimemama@gmail.com>
7801
7802         This code is contributed under the MIT X11 license
7803         
7804         The following enables support for several C# 3.0 language features:
7805         
7806         * cs-tokenizer.cs: Added support for the "var" keyword.
7807         
7808         * ecore.cs: Refactored TypeLookupExpression.DoResolveAsTypeStep().
7809           Added VarExpr class to facilitate type inferencing.
7810         
7811         * class.cs: Added IDictionary field AnonymousTypes to TypeContainer
7812           to support anonymous types.
7813         
7814         * assign.cs: Added support for type inferencing and initialization.
7815         
7816         * anonymous.cs: Added AnonymousClass class to enable anonymous types.
7817         
7818         * expression.cs: Added implicit array support to ArrayCreation.
7819           Added 5 types and 1 interface:
7820           
7821           IInitializable                Implementing classes can inject initializing
7822                                         statements after object instantiation.
7823           
7824           Initializer                   Stores data for object initialization.
7825           
7826           AnonymousType                 An expression for anonymous types.
7827           
7828           AnonymousTypeParameter        Stores data about an anonymous type's field.
7829           
7830           NewInitialize                 An expression for object initialization.
7831           
7832           CollectionInitialize          An expression for collection initialization.
7833         
7834         * statement.cs: Added "var" keyword support to the foreach, using, and fixed
7835           statements.
7836
7837 2007-05-06  Marek Safar  <marek.safar@gmail.com>
7838
7839         A fix for bug #81500
7840         * cs-tokenizer.cs: Add special handling for coalescing operator.
7841
7842 2007-05-06  Marek Safar  <marek.safar@gmail.com>
7843
7844         A fix for bug #81529
7845         * attribute.cs (GetAttributeUsage): AttributeUsage attribute inherits
7846         its value from base class until it is redefined.
7847
7848 2007-05-02  Raja R Harinath  <rharinath@novell.com>
7849
7850         Fix regression in cs0631-3.cs
7851         * cs-parser.jay (operator_declarator): Add opt_attributes to error
7852         fallback.  Make error fallback catch more cases.
7853
7854 2007-05-01  Miguel de Icaza  <miguel@novell.com>
7855
7856         * cs-parser.jay: Allow parameters in operator declarations to have
7857         attributes. 
7858
7859 2007-04-27  Miguel de Icaza  <miguel@novell.com>
7860
7861         * statement.cs (If.CloneTo): Only clone the FalseStatement if it
7862         exists. 
7863
7864         * lambda.cs (ContextualReturn.Resolve): An expression is valid
7865         inside the ContextualReturn, it does not have to be an
7866         ExpressionStatement. 
7867
7868 2007-04-24  Miguel de Icaza  <miguel@novell.com>
7869
7870         * lambda.cs (ContextualReturn.Resolve): if the return type is not
7871         set, set it.
7872
7873 2007-04-23  Miguel de Icaza  <miguel@novell.com>
7874
7875         * anonymous.cs (AnonymousContainer): split the virtual Resolve
7876         method in two methods: ResolveNoDefine and Resolve.
7877
7878         ResolveNoDefine will stop just after ResolveTopBlock has been
7879         called.   
7880
7881         Resolve will then continue by creating a method and issuing the
7882         call to method.Define ().
7883
7884         (AnonymousMethod): Split and implement the new Resolve and
7885         ResolveNoDefine as well.
7886
7887         * lambda.cs (LambdaExpression): Split the anonymous method
7888         resolution code into a separate routine (CoreCompatibilityTest)
7889         from DoCompatibleTest.
7890
7891         (LambdaExpression.TryBuild): New method, this method tries to
7892         build the LambdaExpression with the given set of types to be used
7893         as the types for the various parameters of the lambda expression. 
7894
7895         If the compilation succeed with the given types, the infered type
7896         of the Anonymous method is returned, otherwise null is returned.
7897
7898 2007-04-23  Marek Safar  <marek.safar@gmail.com>
7899
7900         A fix for bug #81414
7901         * delegate.cs: Better fix, moved ApplyAttributes from Define to Emit.
7902
7903 2007-04-22  Miguel de Icaza  <miguel@novell.com>
7904
7905         * cs-tokenizer.cs: Change various identifiers here from the
7906         camelCasing to the recommended Linux-like style for instance
7907         variables from the Coding Guidelines. 
7908
7909 2007-04-19  Martin Baulig  <martin@ximian.com>
7910
7911         * convert.cs
7912         (Convert.ImplicitReferenceConversionCore): Allow conversions from
7913         System.Enum to System.ValueType.
7914
7915 2007-04-13  Martin Baulig  <martin@ximian.com>
7916
7917         Rewrote implicit reference conversions.  We need to distinguish
7918         between implicit reference conversions (13.1.4) and implicit
7919         boxing conversions (13.1.5).
7920
7921         According to the spec, there's an an implicit conversion
7922         "From a one-dimensional array-type S[] to IList<T> and base
7923         interfaces of this interface, provided there is an implicit
7924         reference conversion from S to T."  Note that this does not
7925         include boxing conversions.
7926
7927         * convert.cs
7928         (Convert.ImplicitTypeParameterBoxingConversion): New method.
7929         (Convert.ImplicitReferenceConversion): Split into
7930         ImplicitReferenceConversionCore() and
7931         ImplicitBoxingConversionExist().
7932         (Convert.ImplicitReferenceConversionExists): Use the new
7933         ImplicitReferenceConversionCore() and ImplicitBoxingConversionExists().
7934
7935 2007-04-12  Martin Baulig  <martin@ximian.com>
7936
7937         * convert.cs (Convert.ImplicitReferenceConversion): Move the
7938         `TypeManager.null_type' checks up to the top of the method.
7939
7940 2007-04-11  Marek Safar  <marek.safar@gmail.com>
7941
7942         A fix for bug #81350
7943         * class.cs, decl.cs, ecore.cs, namespace.cs: The optimization for private
7944         extension methods.
7945
7946 2007-04-11  Martin Baulig  <martin@ximian.com>
7947
7948         * statement.cs (Foreach.CollectionForeach.ProbeCollectionType):
7949         Use `TypeManager.GetInterfaces(t)' rather than `t.GetInterfaces()'
7950         to make this work for generic classes; fixes #79561.
7951
7952 2007-04-11  Martin Baulig  <martin@ximian.com>
7953
7954         * expression.cs (As): Add support for nullable types; fixes #79371.
7955
7956 2007-04-11  Martin Baulig  <martin@ximian.com>
7957
7958         * doc.cs (DocUtil.GetSignatureForDoc): Don't crash if
7959         `type.FullName' is null; fixes #80243.
7960
7961 2007-04-11  Martin Baulig  <martin@ximian.com>
7962
7963         * expression.cs (Invocation.IsApplicable): Don't modify the method
7964         if type inference succeeded, but the method was not applicable.
7965         Fixes #81250.
7966
7967 2007-04-10  Marek Safar  <marek.safar@gmail.com>
7968
7969         A fix for bug #81324
7970         * namespace.cs (Namespace.LookupExtensionMethod): Always inspect both
7971         internal and external namespaces containers.
7972
7973 2007-04-10  Martin Baulig  <martin@ximian.com>
7974
7975         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Use
7976         TypeManager.DropGenericMethodArguments() so we also call
7977         IMethodData.SetMemberIsUsed() for generic methods.  Fixes #80357.
7978
7979 2007-04-10  Martin Baulig  <martin@ximian.com>
7980
7981         * iterators.cs (Iterator.CreateIterator): Don't crash if
7982         `method.ReturnType' is null.  This happens if something went wrong
7983         while resolving that typ (we already reported an error in this case).
7984
7985 2007-04-10  Martin Baulig  <martin@ximian.com>
7986
7987         * expression.cs (New.DoResolve): Don't call CheckComImport() on
7988         generic interfaces; report the CS0144 directly.
7989
7990 2007-04-10  Martin Baulig  <martin@ximian.com>
7991
7992         * ecore.cs (MemberExpr.ResolveMemberExpr): If `left' is a
7993         `TypeExpr', call ResolveAsTypeTerminal() on it; fixes #81180.
7994
7995 2007-04-10  Martin Baulig  <martin@ximian.com>
7996
7997         * expression.cs (New.DoEmitTypeParameter): Fix #81109.
7998
7999 2007-04-09  Raja R Harinath  <rharinath@novell.com>
8000
8001         A better fix
8002         * flowanalysis.cs (UsageVector.MergeChild): Handle child.Block == null.
8003         * statement.cs: Use KillFlowBranching only in ResolveUnreachable.
8004
8005         Fix #81338
8006         * statement.cs (For.Resolve): If resolution fails, use
8007         KillFlowBranching.
8008
8009 2007-04-08  Marek Safar  <marek.safar@gmail.com>
8010
8011         * anonymous.cs (MakeName): Make faster and zero-based.
8012         (VerifyExplicitParameterCompatibility): Back to mode where generic
8013         parameter is ignored.
8014         (AnonymousMethodMethod.Emit): Decorate method as compiler generated.
8015
8016         * class.cs (EmitType): Method can emit another new method.
8017
8018         * cs-tokenizer.cs (IsLinqEnabled): Fixes static cctor race.
8019
8020         * driver.cs: Updated.
8021
8022         * lambda.cs: Reuse predefined empty parameters.
8023
8024         * parameter.cs: Updated
8025
8026         * support.cs: Implemented InflateTypes.
8027
8028         * typemanager.cs (GetFullName): Don't use FullName as it can be null.
8029         (InitSystemCore): Introduced to isolate 3.0 dependencies.
8030
8031 2007-04-03  Martin Baulig  <martin@ximian.com>
8032
8033         Fix #80632.
8034
8035         * statement.cs (Foreach.CollectionForeach.TryType): Use a custom
8036         version of TypeManager.IsOverride() which also works with generic
8037         types.  
8038
8039 2007-04-03  Martin Baulig  <martin@ximian.com>
8040
8041         Fix #81044.
8042
8043         * convert.cs
8044         (Convert.ExplicitReferenceConversion): We need to cast when
8045         converting from IList<T> to S[].
8046
8047 2007-04-01  Marek Safar  <marek.safar@gmail.com>
8048
8049         * decl.cs (FindExtensionMethods): Consider all candidates with same name
8050         at this level.
8051         
8052         * expression.cs (MemberAccess.DoResolve): Cache resolved expression.
8053
8054 2007-03-31  Marek Safar  <marek.safar@gmail.com>
8055
8056         * anonymous.cs (AnonymousMethodExpression.Compatible): Handles both
8057         argument and return type inferring.
8058
8059         * codegen.cs (InferReturnType): Flag whether return can be inferred.
8060         (ReturnType): Turned to property.
8061
8062         * statement.cs (Return): Implemented return type inferring.
8063
8064         * support.cs (ReflectionParameters): Use local types if possible.
8065
8066 2007-03-30  Raja R Harinath  <rharinath@novell.com>
8067
8068         * flowanalysis.cs (FlowBranching.Reachability): Remove.
8069         (FlowBranching.UsageVector): Update to changes.
8070
8071         Prepare to kill 'Reachability'
8072         * flowanalysis.cs (UsageVector): Remove 'Reachability' from
8073         argument of constructor.
8074
8075 2007-03-29  Raja R Harinath  <rharinath@novell.com>
8076
8077         Prepare to kill 'Reachability'
8078         * flowanalysis.cs (UsageVector.is_unreachable): New.
8079         (UsageVector): Update to maintain 'is_unreachable' in parallel to
8080         'reachability', and verify they're consistent.
8081
8082         Fix #81121
8083         * expression.cs (New.EmitStatement): Handle type parameters here too.
8084
8085 2007-03-29  Martin Baulig  <martin@ximian.com>
8086
8087         Fix #79148.
8088
8089         * anonymous.cs
8090         (ScopeInfo.ctor): Use `Modifiers.PUBLIC' if we're a nested
8091         CompilerGeneratedClass.
8092         (ScopeInfo.EmitScopeInstance): Make this protected.
8093         (CapturedVariable.EmitInstance): Use `Ldarg_0' if
8094         `ec.CurrentAnonymousMethod.Scope == Scope'.
8095
8096         * statement.cs (Block.ScopeInfo): Make this a property.
8097
8098 2007-03-27  Raja R Harinath  <harinath@gmail.com>
8099
8100         Prepare to kill 'Reachability'
8101         * flowanalysis.cs (FlowBranching.Reachability): Make class private.
8102         (FlowBranching.UsageVector.Reachability): Remove property.
8103         (FlowBranching.UsageVector.IsUnreachable): New property.
8104         (FlowBranching.UsageVector.ResetBarrier): New.
8105         (FlowBranching.UsageVector, FlowBranchingLabeled): Update to changes.
8106         * codegen.cs, statement.cs: Update to changes.
8107
8108 2007-03-27  Martin Baulig  <martin@ximian.com>
8109
8110         Fix #81209.
8111
8112         * decl.cs
8113         (DeclSpace.LookupNestedTypeInHierarchy): Correctly handle nested
8114         generic types.
8115
8116 2007-03-26  Raja R Harinath  <rharinath@novell.com>
8117
8118         * flowanalysis.cs (FlowBranching.Reachability): Use a boolean
8119         instead of TriState.  Remove all mention of TriState.
8120
8121         * flowanalysis.cs (FlowBranching.Reachability): Prepare to be
8122         replaced by a boolean.  Add boolean 'is_unreachable' field, check
8123         and maintain invariants.
8124
8125 2007-03-25  Marek Safar  <marek.safar@gmail.com>
8126
8127         * anonymous.cs: Restored checks disabled for uninflated anonymous methods.
8128
8129 2007-03-25  Marek Safar  <marek.safar@gmail.com>
8130
8131         * expression.cs: Stop using obsolete 2.0 opcodes.
8132
8133 2007-03-25  Marek Safar  <marek.safar@gmail.com>
8134
8135         * enum.cs (EnumMember.Define): Fixed regression and slowdown caused by
8136         one of the latests Martin's fixes.
8137
8138 2007-03-23  Miguel de Icaza  <miguel@novell.com>
8139
8140         * expression.cs: On BigEndian systems, swap the bytes, temporary
8141         solution until we get a new bitconverter class.
8142
8143 2007-03-23  Martin Baulig  <martin@ximian.com>
8144
8145         Fix #81158.
8146
8147         * decl.cs (MemberCache.AddMembers): Add generic methods both as
8148         "Method" and "Method`1".  Normally, a cache lookup is done on the
8149         "Method" form (ie. without the generic arity), but this one makes
8150         lookups on the full form work as well.
8151
8152 2007-03-22  Raja R Harinath  <rharinath@novell.com>
8153
8154         * flowanalysis.cs (Reachability): Reorganize slightly, and remove
8155         unused properties.
8156
8157 2007-03-20  Bill Holmes  <billholmes54@gmail.com>
8158         * class.cs: 
8159         Added 2 MemberCoreArrayList objects, ordered_explicit_member_list and
8160         ordered_member_list, to TypeBuilder to store members to be defined
8161         in the order they were parsed in.
8162         - ordered_explicit_member_list contains all properties indexers
8163           and methods that are defined as explicit implementation of an
8164           interface or base class.
8165         - ordered_member_list contains all properties indexers and methods
8166           that are not defined as explicit implementation of an interface
8167           or base class.
8168
8169         Removed MethodArrayList and IndexerArrayList from TypeBuilder.  The 
8170         functionality in these removed classes has been replaced with 
8171         ComputeIndexerName, EmitIndexerName, HasEqualss, HasGetHashCode, and 
8172         CheckEqualsAndGetHashCode members defined and called in the TypeBuilderClass.
8173
8174         Adding CheckForDuplications to PropertyBase.PropertyMethod and calls
8175         to CheckForDuplications inside GetMethod and SetMethod Define Method
8176         to handle method property and indexer name conflicts.
8177
8178         Fixes #79434
8179
8180         All code is contributed under the MIT/X11 license.
8181
8182 2007-03-20  Martin Baulig  <martin@ximian.com>
8183
8184         * class.cs (TypeContainer.Interfaces): Removed; they're now
8185         included in `TypeContainer.Types'.
8186
8187 2007-03-20  Martin Baulig  <martin@ximian.com>
8188
8189         Fix #77963, #80314 and #81019.  Added gtest-317, ..., gtest-320.
8190
8191         * class.cs (TypeContainer.CreateType): New public method.  This is
8192         now called before DefineType() to create the TypeBuilders.
8193         (TypeContainer.DefineType): Don't create the TypeBuilder here; it
8194         has already been created by CreateType().
8195         (TypeContainer.DefineTypeBuilder): Renamed into CreateTypeBuilder();
8196         don't resolve our base classes here; this has been moved into
8197         DefineBaseTypes().  We're now called from CreateType().
8198         (TypeContainer.DefineBaseTypes): New private method; resolve our
8199         base classes here.  We're now called from DefineType().
8200
8201         * rootcontext.cs
8202         (RootContext.ResolveTree): Call TypeContainer.CreateType() on all
8203         our types first to create all the TypeBuilders.  After that, call
8204         TypeContainer.DefineType() on all the types which'll resolve their
8205         base classes and setup the resolve order.
8206
8207 2007-03-20  Martin Baulig  <martin@ximian.com>
8208
8209         * class.cs (TypeContainer.Enums): Removed; they're now included in
8210         `TypeContainer.Types'.  
8211
8212 2007-03-20  Martin Baulig  <martin@ximian.com>
8213
8214         * class.cs
8215         (TypeContainer.DefineType): Don't call ResolveMembers() here.
8216         (TypeContainer.DoResolveMembers): Call DefineType() on our
8217         `compiler_generated' classes; moved here from DefineNestedTypes().
8218
8219         * rootcontext.cs
8220         (RootContext.ResolveTree): Call ResolveMembers() on all
8221         TypeContainer's in the `type_container_resolve_order'.
8222
8223 2007-03-19  Marek Safar  <marek.safar@gmail.com>
8224
8225         * class.cs: Use corlib to handle InternalMethodImplAttribute.
8226
8227 2007-03-17  Marek Safar  <marek.safar@gmail.com>
8228
8229         * class.cs (EventFieldAccessor.EmitMethod): Don't override existing
8230         implementation flags.
8231
8232 2007-03-17  Marek Safar  <marek.safar@gmail.com>
8233
8234         * class.cs: More optimizations for type parameters.
8235
8236 2007-03-15  Marek Safar  <marek.safar@gmail.com>
8237
8238         * anonymous.cs (AnomymousMethod): Can be now hosted in generic container.
8239
8240         * ecore.cs, parameter.cs: More common code for both corlibs.
8241
8242         * typemanager.cs (IsGenericMethod): Simplified.
8243
8244 2007-03-15  Raja R Harinath  <rharinath@novell.com>
8245
8246         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
8247         'returns'.
8248         * statement.cs, iterators.cs, lambda.cs: Update to changes.
8249
8250         * statement.cs (Lock.Resolve): Invoke 'ec.NeedReturnLabel'
8251         unconditionally.  Simplify explanation.
8252         (Try.Resolve, Using.Resolve): Likewise.
8253
8254 2007-03-15  Martin Baulig  <martin@ximian.com>
8255
8256         Fix #80731.
8257
8258         * decl.cs (DeclSpace): If we're a partial class, use our
8259         `PartialContainer's `TypeParameters' and `CurrentTypeParameters'.
8260
8261 2007-03-15  Raja R Harinath  <rharinath@novell.com>
8262
8263         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
8264         'throws'.
8265         (FlowBranching.UsageVector): Update to changes.
8266         (FlowBranching.MergeSiblings): Likewise.
8267         * statement.cs: Likewise.
8268
8269 2007-03-15  Martin Baulig  <martin@ximian.com>
8270
8271         Fix #79302.
8272
8273         * decl.cs
8274         (MemberCache): Added a special .ctor for type parameters.
8275
8276         * typemanager.cs
8277         (TypeManager.MemberLookup_FindMembers): `TypeParameter' now has a
8278         `MemberCache'.  
8279
8280 2007-03-09  Martin Baulig  <martin@ximian.com>
8281
8282         * enum.cs (Enum): Make this a TypeContainer.
8283         (EnumMember): Derive from `Const'.
8284
8285         * const.cs
8286         (Const.DoResolveValue): New protected virtual method; move most of
8287         the functionality of ResolveValue() here so we can override it in
8288         `EnumMember'.
8289         (Const.CreateConstantReference): Make this virtual.
8290
8291         * class.cs (Kind): Add `Kind.Enum'.
8292         (TypeContainer.Emit): Don't emit the enums here; they're already
8293         in the `RootContext.typecontainer_resolve_order'.
8294
8295         * rootcontext.cs (RootContext.EmitCode): Don't emit the enums
8296         here; they're already in the `typecontainer_resolve_order'.
8297
8298         * ecore.cs (EnumConstant.ConvertImplicitly): Add
8299         TypeManager.DropGenericTypeArguments().
8300
8301         * typemanager.cs
8302         (TypeManager.CSharpEnumValue): Add DropGenericTypeArguments().
8303         (TypeManager.IsEnumType): Likewise.
8304         (TypeManager.EnumToUnderlying): Likewise.
8305         (TypeManager.IsEqual): Add support for enums.
8306
8307 2007-03-12  Raja R Harinath  <rharinath@novell.com>
8308
8309         * typemanager.cs (InitCoreTypes) [NET_2_0]: Allow
8310         DefaultParameterValueAttribute to be undefined, say if System.dll
8311         is not referenced.
8312
8313 2007-03-11  Marek Safar  <marek.safar@gmail.com>
8314
8315         * ecore.cs, parameter.cs, typemanager.cs: Another gmcs fix to work with
8316         any mscorlib.
8317
8318 2007-03-10  Marek Safar  <marek.safar@gmail.com>
8319
8320         * class.cs, parameter.cs: Unified parameters verification.
8321
8322 2007-03-08  Martin Baulig  <martin@ximian.com>
8323
8324         * cs-parser.jay (constructor_header): Pass the location to the
8325         newly created TopLevelBlock.
8326
8327 2007-03-07  Martin Baulig  <martin@ximian.com>
8328
8329         * statement.cs (Block.Resolve): Don't crash on error; bug #80715.
8330
8331 2007-03-06  Miguel de Icaza  <miguel@novell.com>
8332
8333         * convert.cs (ExplicitReferenceConversionExists): Sync this method
8334         with the changes from David, fixes the build.
8335
8336 2007-03-05  David Mitchell  <dmitchell@logos.com>
8337
8338         * convert.cs: Implement From System.Collecitons.Generic.IList<T>
8339         and its base interfaces to a one-dimensional array type S[],
8340         provided there is an implicit or explicit reference conversion
8341         from S to T.
8342
8343 2007-03-03  Marek Safar  <marek.safar@gmail.com>
8344
8345         * cs-tokenizer.cs: Implemented basic linq grammar.
8346
8347         * driver.cs: Set linq lang version on demand.
8348
8349 2007-02-26  Marek Safar  <marek.safar@gmail.com>
8350
8351         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
8352
8353 2007-02-25  Marek Safar  <marek.safar@gmail.com>
8354
8355         * attribute.cs: Replaced DefinePInvoke in favor of S.R.E implementation
8356         (Fixes #80455)
8357
8358         * class.cs (InterfaceMemberBase): Share common `extern' modifier checks
8359         here.
8360         Check property and event extern attributes.
8361
8362         * codegen.cs (ModuleClass): HasDefaultCharSet when module defined global
8363         charset.
8364
8365 2007-02-24  Marek Safar  <marek.safar@gmail.com>
8366
8367         A fix for bug #80407
8368         * ecore.cs: Don't report ambiguity error when methods have same parent.
8369
8370 2007-02-23  Marek Safar  <marek.safar@gmail.com>
8371
8372         A fix for bug #80878
8373         * class.cs, cs-parser.jay: Event property can host anonymous methods.
8374
8375 2007-02-22  Marek Safar  <marek.safar@gmail.com>
8376
8377         * attribute.cs: Enable ExtensionAttribute presence test.
8378
8379 2007-02-22  Marek Safar  <marek.safar@gmail.com>
8380
8381         * class.cs: Warn about missing GetHashCode only when Equals is override.
8382
8383         * decl.cs: Check accessibility of type arguments.
8384
8385         * typemanager.cs: Correctly report nullable array.
8386
8387 2007-02-20  Marek Safar  <marek.safar@gmail.com>
8388
8389         * class.cs, report.cs: Capture more details when things go wrong.
8390
8391 2007-02-20  Marek Safar  <marek.safar@gmail.com>
8392
8393         A fix for bug #80650
8394         * cs-parser.jay: Anonymous container starts at constructor declaration
8395         and not at block beginning because it has to be usable in constructor
8396         initializer.
8397
8398         * statement.cs: Use context location and not block one for error reporting.
8399
8400 2007-02-18  Marek Safar  <marek.safar@gmail.com>
8401
8402         A fix for bug #78712
8403         * class.cs.cs, decl.cs, ecore.cs: LookupAnyGeneric inspects nested types
8404         too.
8405
8406 2007-02-18  Marek Safar  <marek.safar@gmail.com>
8407
8408         A fix for bug #80493 by Atsushi Enomoto
8409         * cs-parser.jay: Ignore invalid attribute target.
8410
8411 2007-02-18  Marek Safar  <marek.safar@gmail.com>
8412  
8413         * cs-tokenizer.cs: Ignore '\0' as white space character.
8414
8415 2007-02-17  Miguel de Icaza  <miguel@novell.com>
8416
8417         * cs-parser.jay: Add support for lambda expressions to the mcs
8418         compiler as well.
8419
8420         * lambda.cs: Only clone when we are probing, not on the final call
8421         (Compatible is the final call). 
8422
8423         * statement.cs (CloneContext): Introduce class to provide block
8424         remapping during clone.
8425
8426         All statements Clone themselves now.
8427
8428         (Clone): special handling for blocks, when we clone a block, we
8429         register the block inside this routine, as children of the block
8430         might trigger a lookup. 
8431         
8432         * expression.cs: Add support for CloneContext in all expressions. 
8433         
8434 2007-02-17  Marek Safar  <marek.safar@gmail.com>
8435  
8436         A fix for bug #80493
8437         * statement.cs: Report ambiguous warning when interfaces are not related.
8438
8439 2007-02-15  Marek Safar  <marek.safar@gmail.com>
8440
8441         C# 3.0 extension methods.
8442
8443         * attribute.cs (Error_MisusedExtensionAttribute): Extension attribute
8444         cannot be used directly.
8445
8446         * class.cs (Class.Emit): Emit extension attribute if any class method
8447         is extension method.
8448         (Method.Define): Add basic extension method validation conditions.
8449         (Method.Emit): Emit extension attribute for method.
8450
8451         * codegen.cs (AssemblyClass): Emit extension attribute if at least one
8452         extension method exists. Currently we follow same approach as Microsoft
8453         does, emit even if a method or a class are private but this can change
8454         later.
8455
8456         * cs-parser.jay: Add handling of `this' keyword in method parameters
8457         context.
8458
8459         * decl.cs (DeclSpace.IsStaticClass): New property.
8460         (MemberCache.FindExtensionMethods): Looks for extension methods with
8461         defined name and extension type.
8462
8463         * doc.cs: Updated after OverloadResolve changes.
8464
8465         * driver.cs: Add new soft reference to System.Core.dll.
8466
8467         * ecore.cs (MethodLookup): Can return only MethodGroupExpr.
8468         (ExtensionMethodGroupExpr): Represents group of extension methods.
8469
8470         * expression.cs (Invocation): Moved methods BetterConversion, MoreSpecific,
8471         BetterFunction, IsOverride, IsAncestralType, OverloadResolve
8472         to MethodGroupExpr and made non-static for easier customization.
8473         (Invocation.DoResolve): Add extension method lookup when no standard
8474         method was found.
8475         (MemberAccess.DoResolve): Try extension methods if no member exists.
8476
8477         * modifiers.cs: Add METHOD_EXTENSION modifier.
8478
8479         * namespace.cs (RegisterExtensionMethodClass): Register class namespace
8480         as well as candidate extension type.
8481         (ComputeNamespaces): When assembly constains extension methods registers
8482         them.
8483         (Namespace.RegisterExternalExtensionMethodClass): Register type for later
8484         extension method lookup.
8485         (Namespace.LookupExtensionMethod): Looks for extension method in this
8486         namespace.
8487         (NamespaceEntry.LookupExtensionMethod): Does extension methods lookup to
8488         find a method which matches name and extensionType.
8489
8490         * parameter.cs (Parameter): Add This modifer.
8491         (HasExtensionMethodModifier): New property.
8492         (Resolve): Add extension parameter check.
8493         (ModFlags): turned to property to exclude this modifier as it is not real
8494         parameter modifier.
8495         (Parameters): Implemented ExtensionMethodType and HasExtensionMethodType.
8496
8497         * support.cs (ParameterData): Add ExtensionMethodType.
8498         (ReflectionParameters): Implemented ExtensionMethodType interface property.
8499
8500         * typemanager.cs: Add type and ctor extension attribute type.
8501
8502 2007-02-15  Miguel de Icaza  <miguel@novell.com>
8503
8504         * report.cs (DisableErrors, EnableErrors): used to prevent error
8505         output when we are "trying" to compile various methods with
8506         different types. 
8507
8508         * ecore.cs (Expression): Add Clone method that calls the virtual
8509         CloneTo method.  The current CloneTo method in Expression throws
8510         an exception so we can track down all the places where this must
8511         be implemented (not using abstract, because that would be a lot of
8512         up-front-work before we can start testing the implementation
8513         idea). 
8514
8515         Important: we only need Clone capabilities for expressions created
8516         by the parser, as the expressions we will be cloning are
8517         expressions in the pre-resolved state.   This vastly simplifies
8518         the work required. 
8519         
8520         (SimpleName): Add CloneTo that does nothing.
8521         (EmptyCast): Add CloneTo.
8522         
8523         * expression.cs (Binary): Implement CloneTo.
8524         (Invocation.IsApplicable): Store the current ec in
8525         EmitContext.TempEc and restore it on return.  This is used so we
8526         do not have to sprinkle hundres of methods with an extra
8527         EmitContext, we know that the only user is the lambda expression
8528         ImplicitConversionExists code. 
8529         
8530         (Argument): Add Cloning capabilities.
8531         (LocalVariableReference, ParenthesizedExpression, Unary, Probe,
8532         Cast, Conditional, ArrayCreation, InvocationOrCast, Invocation,
8533         ArglistAccess, ArgList, TypeOf, SizeOf, CheckedExpr,
8534         UnCheckedExpr, ElementAccess, BaseAccess, BaseIndexerAccess,
8535         IndexerAccess): Add Clone capability.
8536
8537         (LocalVariableReference, This): TODO: needs cloned Block mapping.
8538
8539         (Argument): Add cloning capability.
8540
8541         * assign.cs (Assign): Implement CloneTo.
8542
8543         * anonymous.cs (ImplicitStandardConversionExists): Make virtual.
8544         
8545         * lambda.cs (ImplicitStandardConversionExists): Implement lambda
8546         version by calling Convert with the EmitContext (that we are
8547         currently storing in ec, this is not great, but will do for now,
8548         to avoid passing EmitContext parameters to hundreds of functions
8549         that do not need them now).
8550
8551         (SetExpression): Remove, it is not needed.
8552         
8553         (ContextualReturn): Implement CloneTo.
8554
8555         * statement.cs (Statement): Implement cloning infrastructure,
8556         similar to expressions.
8557
8558         (Block): Partial implementation of Clone for statements.
8559
8560         (Return): Implement clone.
8561         
8562         * constant.cs (Constant.CloneTo): New method, does nothing.
8563
8564         * codegen.cs (TempEc): Add a static EmitContext as a temporary
8565         solution, until we decide how to exactly do this.  
8566         
8567 2007-02-14  Marek Safar  <marek.safar@gmail.com>
8568  
8569         A fix for bug #80493
8570         * class.cs (FindOutBaseMethod): When the base accessor does not exist and
8571         a property is override we need to use second accessor.
8572
8573 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8574  
8575         A fix for bug #80418
8576         * attribute.cs, class.cs: Use correct calling conventions for pinvoke
8577         methods.
8578
8579 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8580
8581         Another fix for bug #80749
8582         * pending.cs: Abstract class has priority over interfaces.
8583
8584 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8585
8586         Another fix for bug #80749
8587         * pending.cs: Abstract class has priority over interfaces.
8588
8589 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8590
8591         Another fix for bug #80749
8592         * pending.cs: Abstract class has priority over interfaces.
8593
8594 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8595
8596         Another fix for bug #80749
8597         * pending.cs: Abstract class has priority over interfaces.
8598
8599 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8600
8601         * class.cs Better error message.
8602
8603         * driver.cs: Add shorter versions of -optimize option.
8604
8605 2007-02-13  Martin Baulig  <martin@ximian.com>
8606
8607         * class.cs (Constructor.Emit): Check the return value of
8608         ec.ResolveTopBlock() and return on error.
8609
8610 2007-02-13  Raja R Harinath  <rharinath@novell.com>
8611
8612         * ecore.cs (Error_InvalidExpressionStatement): Add a comma to error
8613         message to fix error message regression.
8614
8615 2007-02-12  Marek Safar  <marek.safar@gmail.com>
8616
8617         * delegate.cs: Delegate creation expression cannot be of Nullable type.
8618
8619 2007-02-12  Marek Safar  <marek.safar@gmail.com>
8620
8621         A fix for bug #80749
8622         * assign.cs (FieldInitializer): FieldInitializer has to keep track of
8623         its parent container.
8624
8625         * class.cs (DefineFieldInitializers): Each initializer can has different
8626         resolve context.
8627
8628         * const.cs: Updated.
8629
8630 2007-02-11  Miguel de Icaza  <miguel@novell.com>
8631
8632         * lambda.cs (LambdaExpression.Compatible): Remove some early code,
8633         now all the heavy lifting to check that embedded statements or
8634         expressions have the right form is done in the ContextualReturn.
8635
8636         (ContextualReturn): New class.  
8637
8638         * ecore.cs (Error_InvalidExpressionStatement): Make a helper
8639         method that can be invoked to report 201, so we do not replicate
8640         this everywhere.
8641
8642         * cs-parser.jay: Reuse Error_InvalidExpressionStatement.
8643         
8644         * cs-tokenizer.cs (xtoken): Correctly compute the column, it was
8645         treating tabs as spaces. 
8646
8647 2007-02-09  Marek Safar  <marek.safar@gmail.com>
8648
8649         A fix for bug #80315 by martin.voelkle@gmail.com (Martin Voelkle)
8650         * assign.cs: Use full implicit conversion for right side check.
8651
8652 2007-02-09  Marek Safar  <marek.safar@gmail.com>
8653
8654         * statement.cs (Switch): Switch over boolean type is not standardized.
8655
8656 2007-02-08  Marek Safar  <marek.safar@gmail.com>
8657
8658         A fix for bug #80755
8659         * decl.cs (FindBaseEvent): Don't use method cache for events.
8660
8661 2007-02-07  Marek Safar  <marek.safar@gmail.com>
8662
8663         * cs-parser.jay: Better syntax error handling.
8664
8665         * ecore.cs, enum.cs, statement.cs, typemanager.cs: Print enum member name
8666         instead of underlying type value.
8667
8668 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8669
8670         * driver.cs: Check define identifier before is registered.
8671
8672         * namespace.cs: Use existing error message.
8673
8674         * report.cs: New warning.
8675
8676 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8677
8678         A fix for bug #80742
8679         * expression.cs: Delegate Invoke method can be called directly.
8680
8681 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8682
8683         A fix for bug #80676
8684         * class.cs (IsEntryPoint): The Main method can have params modifier.
8685
8686 2007-02-04  Miguel de Icaza  <miguel@novell.com>
8687
8688         * parameter.cs (Parameter, Parameters): Add Clone method.
8689
8690         * anonymous.cs (Compatible): Turn method into virtual method, so
8691         LambdaExpression can implement a different behavior.
8692
8693         (CompatibleChecks, VerifyExplicitParameterCompatibility): Factor
8694         out the basic checking here, so it can be used by
8695         LambdaExpressions.
8696         
8697         * lambda.cs: Introduce "Compatible" function that will do the
8698         heavy lifting.
8699
8700 2007-02-02  Marek Safar  <marek.safar@gmail.com>
8701
8702         * attribute.cs: Unified one error message.
8703
8704         * class.cs (Class): Use type attributes and not properties to test static
8705         class.
8706         (IsEntryPoint): Don's pass local variable.
8707
8708         * convert.cs: Removed duplicate check.
8709
8710         * decl.cs, doc.cs, ecore.cs (LookupType): Renamed to LookupNamespaceOrType.
8711
8712         * driver.cs: Don't crash when soft reference does not exist.
8713
8714         * namespace.cs (EnsureNamespace): Renamed to RegisterNamespace.
8715         (UsingEntry): Removed redundant allocation.
8716
8717         * parameter.cs: Add fast path for type parameters.
8718
8719         * support.cs: Don't allocate attribute when it's not used.
8720
8721 2007-01-30  Miguel de Icaza  <miguel@novell.com>
8722
8723         * anonymous.cs
8724         (AnonymousMethodExpression.ImplicitStandardConversionExists): turn
8725         this into a virtual method, so we can override it in LambdaExpression.
8726
8727         * driver.cs: Improve diagnostics in case of failure. 
8728
8729         * cs-tokenizer.cs: Instead of trying to parse a type and a name,
8730         write a function that is slightly more complex and that parses:
8731
8732         type identifier [, type identifier]* )
8733
8734         The old function would return incorrectly a OPEN_PARENS_LAMBDA for
8735         this expression:
8736
8737                 (canEmpty ? i >= 0 : i > 0)
8738
8739 2007-01-30  Raja R Harinath  <rharinath@novell.com>
8740
8741         * cs-tokenizer.cs (parse_namespace_or_typename): Don't throw an
8742         exception on possibly valid code.
8743
8744 2007-01-29  Raja R Harinath  <rharinath@novell.com>
8745
8746         * cs-tokenizer.cs (is_punct) ['<']: Update to changes in
8747         Push/PopPosition.
8748         (parse_opt_type_arguments): Remove.  It's almost the same as
8749         parse_less_than.
8750         (parse_namespace_or_typename): Use parse_less_than.
8751
8752 2007-01-28  Miguel de Icaza  <miguel@novell.com>
8753
8754         * cs-tokenizer.cs: Typo fix, its not GMCS_SOURCES but GMCS_SOURCE,
8755         this bug took a few hours to find, because the state saved and
8756         restored by PushPosition and PopPosition was ignoring the state of
8757         parse_generic_less_than.
8758
8759         I can also now remove the handling of OP_LT and OP_GT, this solves
8760         the big mistery.
8761         
8762         * cs-tokenizer.cs: store the location for the ARROW token, we use
8763         that in the parser.
8764
8765         (PushPosition, PopPosition): save/restore also `current_token',
8766         restore `parse_generic_less_than' (was missing).
8767
8768         (parse_opt_type_arguments): use parse_type, not
8769         parse_namespace_or_typename to parse types.
8770
8771         * lambda.cs: Empty new file, will eventually have the lambda
8772         expression implementation.
8773
8774         * lambda.test: used to test the internal tokenizer. 
8775
8776         * report.cs (FeatureIsNotISO1): Rename from
8777         FeatureIsNotStandardized, because it was about the language level
8778         (1 vs 2) it was not about standarization.
8779
8780         (FeatureRequiresLINQ): New.
8781
8782         * support.cs (SeekableStreamReader): Only require that the reader
8783         is a TextReader, not a StreamReader, so we can plug StringReader. 
8784
8785         * cs-tokenizer.cs (parse_type_and_parameter): Returns true if at a
8786         given position in the input stream the following tokens can be
8787         parsed as a type followed by an identifier.
8788
8789         (is_punct): after a '(' if parse_type_and_parameter returns true,
8790         then return a special token OPEN_PARENS_LAMBDA which is used to
8791         avoid reduce/reduce errors in the grammar for the
8792         lambda_expression rules.
8793
8794         (parse_type): implement a type parser inside the
8795         tokenizer, the parser only returns true or false depending on
8796         whether the input at a given position can be parsed as a type.
8797
8798         (peek_token): new method used during type parsing.
8799
8800 2007-01-28  Raja R Harinath  <rharinath@novell.com>
8801
8802         Fix #80531
8803         * anonymous.cs (ScopeInfo.InflateParameters): New.
8804         (AnonymousContainer.Resolve): Use it to redirect types of
8805         delegate parameters.
8806
8807 2007-01-27  Raja R Harinath  <rharinath@novell.com>
8808
8809         Fix #80530
8810         * expression.cs (Error_InvalidArguments): Don't use two different
8811         messages for CS1503.  Use ExtraInformation and
8812         SymbolRelatedToPreviousError instead.
8813
8814         Fix #80358
8815         * decl.cs (DeclSpace.initialize_type_params): Don't access
8816         'type_params' of a partial class directly.
8817
8818 2007-01-26  Miguel de Icaza  <miguel@novell.com>
8819
8820         * constant.cs: Removed a handful of out-of-range checks that were
8821         not necessary. 
8822
8823 2007-01-25  Marek Safar  <marek.safar@gmail.com>
8824
8825         * expression.cs (CheckUselessComparison): Add additional check for char
8826         constants.
8827
8828         * namespace.cs: Fixed typo.
8829
8830 2007-01-23  Miguel de Icaza  <miguel@novell.com>
8831
8832         * constant.cs: Bloat removal, CheckRange and CheckUnsigned are
8833         gone, instead we inline the test, preventing the needless casts to
8834         longs, ulongs and doubles for the parameters, avoiding calls to
8835         methods that overchecked stuff, and instead inlined things
8836         nicely. 
8837
8838 2007-01-20  Marek Safar  <marek.safar@gmail.com>
8839
8840         * cs-parser.jay: Better parameter error handling.
8841
8842 2007-01-17  Marek Safar  <marek.safar@gmail.com>
8843
8844         A fix for bug #80368, #80522
8845         * expression.cs (ArrayCreation.only_constant_initializers): Indicates
8846         whether array initializer contains constants only.
8847         (ArrayCreation.Emit): Use better formula to decide when
8848         are array initializers for static initialization.
8849         (ArrayCreation.EmitDynamicInitializers): When the array is small enough we
8850         have to emit even constants otherwise they are pre-initialized.
8851
8852 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
8853             Raja R Harinath  <rharinath@novell.com>
8854
8855         Fix emit order of 'get' vs. 'set'.
8856         * support.cs (Accessors): New.
8857         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
8858         Note the order in which accessors are declared in the source.
8859         * class.cs (PropertyBase.DefineGet, PropertyBase.DefineSet): New.
8860         Refactored from Property.Define and Indexer.Define.
8861         (PropertyBase.DefineAccessors): New helper that calls the above in
8862         appropriate order as noted by the parser.
8863         (Property.Define, Indexer.Define): Update to changes.
8864         (PropertyBase.SetMethod.PropertyInfo): Don't return a null.
8865
8866 2007-01-17  Raja R Harinath  <rharinath@novell.com>
8867
8868         Fix cs0029-6.cs and gcs0029-2.cs (regression)
8869         * ecore.cs (EmptyConstantCast.ConvertImplicitly): Check that
8870         there's an implicit conversion from the current type to the target
8871         type before converting the underlying constant.
8872
8873 2007-01-16  Marek Safar  <marek.safar@gmail.com>
8874
8875         * const.cs (ResolveValue): Updated after constant conversion was made more
8876         generic.
8877
8878         * constant.cs (GetAttributableValue): constant to object conversion is
8879         used for attributes only.
8880         (IntConstant.ConvertImplicitly): Moved from convert to be used in all
8881         constant conversions.
8882         (LongConstant.ConvertImplicitly): Ditto.
8883
8884         * convert.cs (ImplicitNumericConversion): Extracted constant bussiness.
8885         (ImplicitConversionStandard): Handle constant conversion as extra step.
8886         It solves the issue when constant conversion was called indirectly like
8887         inside array initializer and constant folding was skipped.
8888
8889         * literal.cs (NullLiteral.ConvertImplicitly): Fixed an issue exposed by
8890         this change.
8891
8892         * statement.cs(ImplicitConversionStandard): Updated after constant
8893         conversion was made more generic.
8894
8895 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
8896
8897         * expression.cs (As.DoResolve): Use GenericConstraints instead of
8898         Constraints, solves the problem where the compiler incorrectly
8899         reported that a type parameter was not constrained to a class (Bug
8900         80518)
8901
8902 2007-01-14  Marek Habersack  <grendello@gmail.com>
8903
8904         * doc-bootstrap.cs: Fix a compilation problem in the bootstrap phase.
8905
8906 2007-01-14  Marek Safar  <marek.safar@gmail.com>
8907
8908         A fix for bug #80368
8909         * assign.cs (FieldInitializer): New class implements field
8910         initializer statement.
8911
8912         * attribute.cs: Update after FieldMember rename.
8913
8914         * class.cs (PropertyBasedMember): New common class for property based
8915         types.
8916         (InterfaceMemberBase): New base class for all members which can be used as
8917         an interface members.
8918         (MethodCore): Moved really common code to InterfaceMemberBase.
8919         (Method.Define): Equal and GetHasCode detection is relevant for methods
8920         only.
8921         (MethodData.Define): Don't assume that public event implements an
8922         interface automatically.
8923         (MethodData.DefineMethodBuilder): Issue an error even if only extern
8924         modifier is used.
8925         (MemberBase): Moved all interface speficic code to InterfaceMemberBase.
8926         (FieldMember): Merged with FieldBase.
8927         (EventProperty.AEventPropertyAccessor): New specialization to check whether
8928         event extern modifier can be used.
8929         (EventField.EventFieldAccessor): Moved event field specific code here.
8930         (Event.AllowedModifiers): Even event can be extern.
8931         (Event.FindOutBaseMethod): New override specific to events.
8932         (Indexer.parameters): Reintroduce parameters because base class holds
8933         only properties common data.
8934         (Indexer.CheckForDuplications): Indexers are threated as methods so we
8935         need do extra parameters check.
8936
8937         * const.cs: Update after FieldMember rename.
8938
8939         * decl.cs (MemberCache.FindBaseEvent): New method.
8940
8941         * doc.cs (GetMethodDocCommentName): Accept parameters as extra argument
8942         to reflect that indexer is now derived from PropertyBased.
8943
8944         * ecore.cs (GetMemberType): Made public.
8945         (EventExpr.ResolveMemberAccess): Use right event cache and checks for
8946         obsolete event.
8947
8948         * flowanalysis.cs, statement.cs: Update after FieldMember rename.
8949         
8950         * typemanager.cs (CSharpSignature): Correctly print event accessors.
8951         (RegisterEvent): Removed.
8952         (RegisterPrivateFieldOfEvent): Renamed to RegisterEventField.
8953         (GetPrivateFieldOfEvent): Renamed to GetEventField.
8954
8955 2007-01-11  Raja R Harinath  <rharinath@novell.com>
8956
8957         Fix #80249
8958         * statement.cs (CollectionForeach.TryType): Prefer generic
8959         GetEnumerator over non-generic variant.  Fix code to follow comments.
8960
8961 2007-01-09  Raja R Harinath  <rharinath@novell.com>
8962
8963         Fix #80446
8964         * support.cs (ReflectionParameter): Don't use an invalid index on
8965         the generic parameter data.
8966
8967 2007-01-08  Miguel de Icaza  <miguel@novell.com>
8968
8969         * driver.cs: Just add a tiny bit of infrastructure.
8970
8971 2007-01-02  Marek Safar  <marek.safar@gmail.com>
8972
8973         * class.cs (VerifyMembers): Fixed an crash reported on mono mailing list
8974         where field type is struct from current assembly.
8975         
8976         * ecore.cs (EnumConstant.AsString): Report an enum member name whenever
8977         it is possible.
8978
8979 2007-01-02  Marek Safar  <marek.safar@gmail.com>
8980
8981         A fix for bug #80381
8982         * attribute.cs (AttributeTester.RegisterNonObsoleteType): Registers
8983         the core types.
8984
8985         * namespace.cs (GlobalRootNamespace.LookupTypeReflection): Better error
8986         messages.
8987         (Namespace.LookupType): Always use core types from corlib when speficied.
8988
8989         * report.cs: A new warning.
8990
8991         * rootcontext.cs (BootstrapCorlib_ResolveInterface,
8992         BootstrapCorlib_ResolveClass): Register type as non-obsolete type.
8993         (ResolveCore): Add missing System.Runtime.InteropServices._Attribute.
8994
8995         * typemanager.cs (CoreLookupType): Register type as non-obsolete type.
8996         (InitCoreTypes): Set expression type of object_type and value_type
8997         immediately after lookup.
8998
8999 2007-01-01  Miguel de Icaza  <miguel@novell.com>
9000
9001         * cs-tokenizer.cs: Accept Pc class characters (Connector
9002         Punctuation) as valid identifiers.  Fixes #78259
9003
9004         * expression.cs (Invocation.DoResolve): Moved the check for the
9005         use of `this' for doing method calls to the Invocation resolution
9006         step, after overload resolution has taken place instead of doing
9007         the check at the low-level `This.DoResolve' level.
9008
9009         The `This.DoResolve'(appens before overload resolution, so it has
9010         no way of knowing if the method that will be called will be
9011         instace or static, triggering an erroneous report for cs0188 (Bug
9012         78113).
9013
9014         We now do the check for instance method invocations after we know
9015         what method will be called.
9016
9017         (This.CheckThisUsage): Move the actual use of this structure
9018         checking into its own method and expose it. 
9019
9020         * Everywhere that called Error_ValueCannotBeConverted: pass a new
9021         EmitContext.
9022
9023         Exceptions: Null.ConvertImplicitly,
9024         Constant.ImplicitConversionRequired as there are too many call
9025         sites for passing the ec. 
9026
9027         * ecore.cs (Expression.Error_ValueCannotBeConverted): Take an
9028         EmitContext, if the value is null, then we do not try to provide
9029         the extra information from the error (If a userdefined conversion
9030         exists, as UserDefinedConversion requires a non null-EmitContext).
9031
9032         Fixes: #80347
9033
9034 2006-12-30  Raja R Harinath  <rharinath@novell.com>
9035
9036         * flowanalysis.cs (MyBitVector): Document some invariants.
9037         (MyBitVector.Or, MyBitVector.And): Reimplement the optimizations
9038         introduced below, and add a couple of others, 
9039
9040 2006-12-30  Marek Safar  <marek.safar@gmail.com>
9041
9042         * attribute.cs (GetMethodObsoleteAttribute): Uses new
9043         GetPropertyFromAccessor and GetEventFromAccessor.
9044         
9045         * class.cs (MethodCore.CheckBase): A new warning when obsolete member
9046         overrides non-obsolete one.
9047         (Indexer.Define): Error message has been moved to the parser.
9048
9049         * cs-parser.jay: Better syntax errors handling.
9050
9051         * delegate.cs (NewDelegate.DoResolve): Issue less confusing error message
9052         when an invocation has no arguments.
9053
9054         * ecore.cs: Removed not used caching.
9055
9056         * expression.cs (IsSpecialMethodInvocation): Reuses TypeManager
9057         implementation.
9058
9059         * report.cs: Add a new warning.
9060
9061         * support.cs (ReflectionParameters): Implements Equals, GetHashCode.
9062
9063         * typemanager.cs (enumeration_type): Removed.
9064         (CSharpSignature): Reuses IsSpecialMethod.
9065         (IsEqual): Hack for MS BCL.
9066         (GetPropertyFromAccessor): New method.
9067         (GetEventFromAccessor): New method.
9068         (IsSpecialMethod): Fixed to handle more cases.
9069
9070 2006-12-30  Marek Safar  <marek.safar@gmail.com>
9071
9072         * cs-tokenizer.cs (PreProcessDefinition, handle_preprocessing_directive):
9073         Made white spaces array static.
9074
9075         * ecore.cs (RemoveGenericArity): Optimized.
9076
9077         * flowanalysis.cs (MyBitVector.Or, MyBitVector.And): Optimized (up to
9078         10 times faster).
9079         (MyBitVector.initialize_vector): Simplified.
9080
9081 2006-12-22  Miguel de Icaza  <miguel@novell.com>
9082
9083         * ecore.cs: Am not entirely happy with this hack, but it seems to
9084         address the issue in 80257 (a small test case for
9085         CreativeDocs.NET). 
9086
9087         I set the MethodGroupExpr.Type to an internal compiler type
9088         (itself in this case) to force the resolution to take place.   Why
9089         it does not take place with a null is beyond me.
9090
9091 2006-12-20  Marek Safar  <marek.safar@gmail.com>
9092
9093         A fix for bug #80288
9094         * expression.cs (ResolveOperator): Consider user defined conversion for
9095         logical and operator too.
9096         (EmitBranchable): Optimization for logical and when full constant folding
9097         could not be applied but one operand is constant.
9098
9099 2006-12-19  Marek Safar  <marek.safar@gmail.com>
9100
9101         * class.cs (GetClassBases): Write 5 times every day, will never use
9102         FullName for error reporting.
9103
9104         * decl.cs (AsAccessible, CheckAccessLevel): Always unpack arrays first.
9105
9106 2006-12-19  Martin Baulig  <martin@ximian.com>
9107
9108         * statement.cs (LocalInfo.EmitSymbolInfo): New public method; emit
9109         the symbol file info here.
9110
9111 2006-12-18  Marek Safar  <marek.safar@gmail.com>
9112
9113         * cs-tokenizer.cs (handle_preprocessing_directive): When previous section
9114         of `elseif' is taking then following sections are not taking.
9115         Fixes an issue reported on mono mailing list.
9116
9117 2006-12-18  Marek Safar  <marek.safar@gmail.com>
9118
9119         A fix for bug #80300
9120         * cs-tokenizer.cs (PreProcessDefinition): Do no define/undefine when
9121         a caller is not taking.
9122
9123 2006-12-18  Raja R Harinath  <rharinath@novell.com>
9124
9125         * anonymous.cs: Change several TypeContainer declarations to DeclSpace.
9126         (CompilerGeneratedClass): Use parent.PartialContainer unconditionally.
9127         (RootScopeInfo, AnonymousMethodMethod): Update to changes.
9128         * iterator.cs: Change several TypeContainer declarations to DeclSpace.
9129         * class.cs: Update to changes.
9130
9131 2006-12-17  Marek Safar  <marek.safar@gmail.com>
9132
9133         A fix for bug #79934
9134         * anonymous.cs (CompilerGeneratedClass): Register class in a shared
9135         partial container.
9136
9137         * class.cs (ResolveMembers): Register an iterator in current container and
9138         not in shared one.
9139
9140 2006-12-16  Raja R Harinath  <rharinath@novell.com>
9141
9142         Fix test-543.cs
9143         * expression.cs (VerifyArgumentsCompat): Allow zero arguments to
9144         satisfy a params annotated parameter.
9145
9146 2006-12-16  Marek Safar  <marek.safar@gmail.com>
9147
9148         A fix for bug #77014
9149         * expression.cs (Invocation.BetterFunction): Fixed to cope with dynamic
9150         paramters correctly and not rely on hacks in Parameters class.
9151         (Invocation.IsParamsMethodApplicable): Changed to accept params parameter
9152         at any possition.
9153         (Invocation.VerifyArgumentsCompat): Ditto.
9154         (Invocation.EmitArguments): Changed to correctly emit params arguments at
9155         any possition.
9156
9157         * parameter.cs (HasParams): Don't assume that params is the last one.
9158
9159         * support.cs (ReflectionParameters.ctor): Look for params attribute
9160         correctly.
9161         (ReflectionParameters.ParameterType): Removed hack when we returned last
9162         parameter for out of range parameters.
9163         (ParameterName, ParameterModifier): Ditto.
9164
9165 2006-12-14  Marek Safar  <marek.safar@gmail.com>
9166
9167         A fix for bug #79987
9168         * decl.cs (DeclSpace.VerifyClsCompliance): External names cache is null
9169         when assembly is not CLS compliant but type is. I have no idea why is this
9170         allowed.
9171
9172         * typemanager.cs (Reset): Invalidate AllClsTopLevelTypes cache.
9173
9174 2006-12-13  Miguel de Icaza  <miguel@novell.com>
9175
9176         * class.cs (ConstructorInitializer.Resolve): Allow for ":this()"
9177         in struct constructors, they are basically no-ops.
9178
9179 2006-12-12  Marek Safar  <marek.safar@gmail.com>
9180
9181         * cs-tokenizer.cs (Position): Save preprocessor status too.
9182
9183 2006-12-12  Marek Safar  <marek.safar@gmail.com>
9184
9185         A fix for bug #77794
9186         * cs-tokenizer.cs (consume_identifier): Check for correct partial context.
9187
9188 2006-12-12  Marek Safar  <marek.safar@gmail.com>
9189
9190         * cs-tokenizer.cs (get_cmd_arg): Support CR as the line terminator.
9191         Fixes #69299.
9192         (pp_expr): Report error for an invalid expression.
9193         (handle_preprocessing_directive): Simplified; add more error checking.
9194
9195 2006-12-11  Marek Safar  <marek.safar@gmail.com>
9196
9197         A fix for bug #74939
9198         * cs-tokenizer.cs (is_punct): We cannot simply disable preprocessor
9199         directives handling.
9200
9201 2006-12-10  Marek Safar  <marek.safar@gmail.com>
9202
9203         A fix for bugs #80093, and #75984
9204         * cs-tokenizer.cs (handle_preprocessing_directive): Fixed #if/#else/#endif
9205         logic, it seems to me as it worked before "by coincidence".
9206         (xtoken): Simplified to use reworked handle_preprocessing_directive.
9207         (cleanup): Enabled endif check.
9208
9209 2006-12-09  Marek Safar  <marek.safar@gmail.com>
9210
9211         A fix for bug #80162
9212         * statement.cs (CollectionForeach.TryType): Generics and non-generics
9213         enumerators are never ambiguous.
9214
9215 2006-12-08  Raja R Harinath  <rharinath@novell.com>
9216
9217         Fix #80060
9218         * cs-tokenizer.cs (parse_less_than): Recognize double-colons too.
9219
9220 2006-12-06  Marek Safar  <marek.safar@gmail.com>
9221
9222         A fix for bug #80144
9223         * class.cs (EventProperty.Define): Explicit implementation means
9224         that an even is used.
9225
9226 2006-12-06  Marek Safar  <marek.safar@gmail.com>
9227
9228         Fixes the operators implementation (part II)
9229
9230         * cfold.cs (DoConstantNumericPromotions): Renamed to
9231         DoBinaryNumericPromotions and simplified.
9232         (BinaryFold): Couple of conversion fixes; simplified.
9233
9234         * constant.cs, ecore.cs, literal.cs
9235         (ToType): Renamed to ConvertImplicitly.
9236         (Reduce): Renamed to ConvertExplicitly.
9237
9238         * class.cs, convert.cs: Updated.
9239
9240         * expression.cs: TryReduce doesn't throw an exception.
9241
9242 2006-12-01  Marek Safar  <marek.safar@gmail.com>
9243
9244         A fix for bug #80108
9245         * ecore.cs (EventExpr.EmitAddOrRemove): Don't crash when right side is not
9246         compatible.
9247
9248 2006-11-30  Marek Safar  <marek.safar@gmail.com>
9249
9250         Fixes unary operators implementation (part I)
9251         Also fixes #80026
9252
9253         * cfold.cs (Error_CompileTimeOverflow): Made internal
9254
9255         * const.cs (IConstant): Changed to use reference to constant and
9256         not constant itself.
9257         Updated IConstant implementations.
9258
9259         * constant.cs (CreateConstant): New factory method.
9260         Updated IConstant implementation.
9261
9262         * convert.cs (ImplicitStandardConversionExists): Uses compiler Equals.
9263
9264         * ecore.cs: Updated to use CreateConstantReference.
9265
9266         * enum.cs: Reflects IConstant changes.
9267
9268         * expression.cs (Unary): Reimplemented +,-,~ to conform C# standard.
9269
9270         * literal.cs (NullConstant): Change to be independently usable.
9271
9272 2006-11-29  Martin Baulig  <martin@ximian.com>
9273
9274         * class.cs (Constructor.Emit): Correctly handle anonymous methods;
9275         we need to emit the scope initializer before calling the base .ctor.
9276
9277         * anonymous.cs: Merged back from the new anonymous methods branch.
9278         (AnonymousMethodHost): Renamed to `RootScopeInfo'.
9279
9280         * expression.cs (ParameterReference.DoResolveBase): Create a
9281         "normal" ScopeInfo when capturing parameters rather than using the
9282         root scope; this makes things work with anonymous methods having
9283         parameters.
9284
9285         * statement.cs
9286         (ToplevelBlock.AnonymousMethodHost): Renamed into `RootScope'.
9287
9288 2006-11-22  Marek Safar  <marek.safar@gmail.com>
9289
9290         A fix for bug #79987
9291         * class.cs (VerifyClsCompliance): Move redundant CLS compliance attribute
9292         check to a base class.
9293         * decl.cs (VerifyClsCompliance): Warn that CLS compliance cannot be tested
9294         only when assembly has missing attribute.
9295         * report.cs: Update.
9296
9297 2006-11-21  Marek Safar  <marek.safar@gmail.com>
9298
9299         * cs-tokenizer.cs: Merged with gmcs version.
9300
9301 2006-11-20  Marek Safar  <marek.safar@gmail.com>
9302
9303         * cs-tokenizer.cs,
9304         * cs-parser.jay: Better error message when partial keyword is misplaced.
9305
9306 2006-11-19  Gert Driesen  <drieseng@users.sourceforge.net>
9307
9308         A fix for bug #79810
9309         report.cs: CS1058 only applies to 2.0 profile (gmcs).
9310         codegen.cs: on 2.0 profile, non-exception throwables are wrapped in
9311         a RuntimeWrappedException by default.
9312
9313 2006-11-18  Marek Safar  <marek.safar@gmail.com>
9314
9315         A fix for bug #79843
9316         * delegate.cs (Delegate.VerifyMethod): Fixed covariance and contravariance
9317         implementation.
9318         (DelegateCreation.Error_NoMatchingMethodForDelegate): Ditto.
9319
9320 2006-11-18  Marek Safar  <marek.safar@gmail.com>
9321
9322         * driver.cs, namespace.cs: Uses faster IndexOf version.
9323
9324 2006-11-17  Marek Safar  <marek.safar@gmail.com>
9325
9326         A fix for bug #79941
9327         * class.cs (MemberCore.IsDuplicateImplementation): Add more tricks for
9328         operators.
9329         (Operator.Define): Implicit/Explicit operator of same type is duplicate
9330         even if internal name is different.
9331         * convert.cs (GetConversionOperator): Replaced EmitContext with parentType.
9332         (UserDefinedConversion): Simplified as the operators cannot be internal.
9333         * ecore.cs (Error_ValueCannotBeConverted): Take account of user
9334         conversions.
9335         (MethodLookup): Replaced EmitContext with parentType.
9336         * expression.cs: Updated.
9337
9338 2006-11-09  Raja R Harinath  <rharinath@novell.com>
9339
9340         * driver.cs (BadAssembly): Handle all the ugliness of
9341         DefineDynamicAssembly.
9342
9343 2006-11-08  Raja R Harinath  <rharinath@novell.com>
9344
9345         Address parts of #58244 -- most of what's left is in the runtime
9346         * driver.cs (LoadAssembly): Simplify slightly.  Add CS0009 and
9347         CS1509 error checks, and handle them for all assembly loads, not
9348         just the first invocation.
9349         (LoadModule): Likewise.  Move handling of 'adder_method' ...
9350         * codegen.cs (AssemblyClass.AddModule): ... here.
9351
9352 2006-11-02  Marek Safar  <marek.safar@gmail.com>
9353
9354         * statement.cs.cs (CollectionForeach.TryType): Issue a error when
9355         IEnumerable<T> is ambiguous.
9356
9357 2006-10-31  Marek Safar  <marek.safar@gmail.com>
9358
9359         A fix for bug #67689
9360         * statement.cs.cs (CollectionForeach.TryType): Issue a warning when
9361         GetEnumerator is ambiguous.
9362
9363         * report.cs: Add new warning.
9364
9365 2006-10-29  Marek Safar  <marek.safar@gmail.com>
9366
9367         A fix for bug #78602
9368         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
9369         to protected member can be nested type.
9370
9371 2006-10-28  Marek Safar  <marek.safar@gmail.com>
9372
9373         A fix for bug #78965
9374         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
9375         to protected member must derive from current type.
9376
9377 2006-10-27  Marek Safar  <marek.safar@gmail.com>
9378
9379         assign.cs: Reuses error method.
9380
9381         ecore.cs (Expression.Error_ValueCannotBeConverted): Report a value
9382         instead of type for constants.
9383         (Expression.Error_ValueAssignment): Common error method.
9384
9385         * expression.cs (UnaryMutator.ResolveOperator): Value cannot be used
9386         for any assignment.
9387
9388 2006-10-27  Marek Safar  <marek.safar@gmail.com>
9389
9390         A fix for bug #79081
9391         * expression.cs (MemberAccess.DoResolve): Check nested type
9392         accessibility.
9393
9394 2006-10-27  Atsushi Enomoto  <atsushi@ximian.com>
9395
9396         * doc.cs : nested delegates were not handled. Fixed bug #79754.
9397
9398 2006-10-26  Marek Safar  <marek.safar@gmail.com>
9399
9400         A fix for bug #76591
9401         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous method.
9402
9403 2006-10-26  Marek Safar  <marek.safar@gmail.com>
9404
9405         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Don't allow to have
9406         type forwarder of the same type multiple times.
9407
9408 2006-10-26  Raja R Harinath  <rharinath@novell.com>
9409
9410         Fix #78820
9411         * ecore.cs (PropertyExpr.InstanceResolve): Always resolve the
9412         instance as an rvalue, even when we later resolve as an lvalue.
9413
9414 2006-10-25  Martin Baulig  <martin@ximian.com>
9415
9416         * anonymous.cs: Fix #79673.
9417
9418 2006-10-24  Marek Safar  <marek.safar@seznam.cz>
9419
9420         A fix for bug #79666
9421         expression.cs (ArrayCreation.GetAttributableValue): An initializer can be
9422         ignored when is optimized (= default value) as its value is already set.
9423
9424 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
9425
9426         A fix for bug #79724
9427         * report.cs (SymbolRelatedToPreviousError): Uses DeclSpace instead of
9428         TypeContainer for type lookup.
9429
9430 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
9431
9432         A fix for bug #79231
9433         * ecore.cs (ResolveAsBaseTerminal): Removed redundant error test.
9434         * expression.cs (OverloadResolve): Always convert type name for
9435         an error message.
9436         (ResolveNamespaceOrType): Don't confuse a nested type with any 
9437         other member.
9438
9439 2006-10-18  Martin Baulig <martin@ximian.com>
9440
9441         * anonymous.cs: Propagate the IsStatic state, fixes the crasher in banshee.
9442
9443 2006-10-17  Miguel de Icaza  <miguel@novell.com>
9444
9445         * convert.cs: Fix typo, fixes the test-535.cs, we were casting to
9446         an int32, but requesting an int64 from the conversion
9447
9448 2006-10-12  Martin Baulig  <martin@ximian.com>
9449
9450         * anonymous.cs
9451         (AnonymousContainer.Resolve): Inflate the `ReturnType'.  Fixes #79592.
9452         
9453 2006-10-12  Martin Baulig  <martin@ximian.com>
9454
9455         * statement.cs
9456         (Using.EmitLocalVariableDeclFinally): Small fix for iterators.
9457
9458 2006-10-11  Miguel de Icaza  <miguel@novell.com>
9459
9460         * convert.cs: Remove broken code: I was doing the "Existance"
9461         tests for Implicit conversions.
9462
9463 2006-10-10  Miguel de Icaza  <miguel@novell.com>
9464
9465         * convert.cs: Added one missing case in
9466         ImplicitStandardConversionExists uint64 to intptr.
9467
9468         Fixes #59800
9469         
9470         * typemanager.cs (uintptr_type): another core known type.   
9471
9472         * ecore.cs (OperatorCast): routine used to do cast operations that
9473         depend on op_Explicit.  We could change some of the Decimal
9474         conversions to use this.
9475
9476         This one has a probe mechanism that checks both types for an op_
9477         which it coudl be used to eliminate two classes: CastToDecimal
9478         and CastFromDecimal.
9479
9480         * convert.cs: Implement the conversions documented in #59800
9481         
9482 2006-10-10  Martin Baulig  <martin@ximian.com>
9483
9484         * iterators.cs (Iterator.Resolve): Call RootScope.ResolveType()
9485         before RootScope.ResolveMembers().
9486
9487         * anonymous.cs (ScopeInfo.CapturedScope.ctor): Use the child's
9488         `CurrentType' if appropriate.
9489
9490 2006-10-09  Marek Safar  <marek.safar@seznam.cz>
9491
9492         A fix for bug #78568
9493         * cs-tokenizer.cs (Deambiguate_CloseParens): Expression cannot be cast
9494         when contains binary operators.
9495         * cs-parser.jay: Updated.
9496
9497 2006-10-09  Martin Baulig  <martin@ximian.com>
9498
9499         * delegate.cs
9500         (Delegate.DefineType): Don't call TypeParameter.Resolve() here;
9501         moved that into Define() and also do the other type parameter
9502         checks there.  Fixes #79094.  Added gtest-292.cs.
9503
9504         * expression.cs
9505         (ArrayCreation.EmitDynamicInitializers): Use `etype.IsValueType'
9506         since that doesn't include type parameters; don't use `Ldelema'
9507         for type parameters.  Fixes #78980.  Added gtest-293.cs.
9508
9509 2006-10-08  Marek Safar  <marek.safar@seznam.cz>
9510
9511         A fix for #77796
9512         * convert.cs (ExplicitReferenceConversion): Only enum to enum value
9513         conversion is allowed.
9514
9515 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
9516
9517         * ecore.cs (Expression.MemberLookup): Don't register any symbol for
9518         error reporting when no error occurs.
9519
9520 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
9521
9522         * cfold.cs (ConstantFold.BinaryFold): Report an error when the conversion
9523         does not exist.
9524
9525 2006-10-06  Raja R Harinath  <rharinath@novell.com>
9526
9527         Fix #79584
9528         * class.cs (DefineTypeBuilder): Check circular dependencies before
9529         setting the parent of the TypeBuilder.
9530         (CheckRecursiveDefinition): Don't use 'BaseType', since
9531         it may not be valid until after DefineTypeBuilder.  Use
9532         'base_type' instead.
9533
9534 2006-10-04  Martin Baulig  <martin@ximian.com>
9535
9536         Merged the Anonymous Methods patch.
9537
9538         * anonymous.cs, iterators.cs: The new anonymous methods code.
9539
9540         * statement.cs (Variable): New public abstract class.
9541         (LocalInfo.Variable): New public property.
9542         (LocalInfo.ResolveVariable): New public method.
9543         (Block.Flags): Add `IsIterator'.
9544         (Block.AddVariable): Improved the CS0136 check.
9545         (Block.AnonymousChildren): New public property.
9546         (Block.AddAnonymousChild): New public method.
9547         (ToplevelBlock): Update to use the new anonymous method framework.
9548         (ToplevelBlock.ctor): `container' is now a `Block' and not a
9549         `ToplevelBlock'; this is required to correctly implement the
9550         CS0136 check.
9551         (Fixed, Using): Use `TemporaryVariable' instead of directly
9552         creating the `LocalBuilder'.
9553
9554         * parameter.cs (Parameter.ResolveVariable): New public method.
9555         (Parameters.ResolveVariable): Likewise.
9556
9557         * ecore.cs (TemporaryVariable): Use the new `Variable' framework.
9558
9559         * class.cs (TypeContainer): Replaced the `iterators' list and
9560         corresponding methods with a list of `CompilerGeneratedClass'es.
9561         (TypeContainer.ResolveMembers): New public method.
9562         (Method): `IIteratorContainer' has been replaced by
9563         `IAnonymousHost'.
9564
9565         * expression.cs (VariableReference): New public abstract base
9566         class for `LocalVariableReference', `ParameterReference' and
9567         `This'.
9568
9569         * codegen.cs (EmitContext): Removed `capture_context',
9570         `HaveCaptureInfo', `EmitScopeInitFromBlock()' and `Capture*()'.
9571         (EmitContext.EmitThis): Removed.
9572
9573         * cs-parser.jay: Replace `iterator_container' with
9574         `anonymous_host'.       
9575
9576 2006-10-04  Martin Baulig  <martin@ximian.com>
9577
9578         * generic.cs (GenericMethod): Don't make this abstract.
9579         (Constraints.Clone): Added dummy implementation.
9580
9581 2006-10-04  Raja R Harinath  <harinath@gmail.com>
9582
9583         Fix #79577
9584         * namespace.cs (LookForAnyGenericType): Avoid nullref on
9585         'declspaces'.  Avoid allocating arrays willy-nilly.
9586
9587         Fix #79553
9588         * cfold.cs (BinaryFold): Move boolean Equality and Inequality
9589         cases out of the switch.
9590
9591 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
9592
9593         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Better error
9594         message when non-generic type is used with the type arguments.
9595         * expression.cs: Updated.
9596
9597 2006-09-28  Raja R Harinath  <rharinath@novell.com>
9598
9599         Fix #79013
9600         * convert.cs (Convert.ImplicitStandardConversionExists): Avoid infloop.
9601         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
9602         Change semantics slightly.  Don't insist on having only one
9603         temporary EmptyExpression -- just throttle the creation of new ones.
9604
9605         Fix #79451
9606         * ecore.cs (Expression.MemberLookup): Enable CS0229 errors for
9607         non-interfaces too.  If no methods are found, don't try to create
9608         a MethodGroupExpr.
9609
9610 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
9611
9612         * ecore.cs (ResolveAsTypeStep): Print better error when type can be
9613         generic type.
9614
9615         * namespace.cs (Namespace.LookForAnyGenericType): New method to help
9616         us produce better error message.
9617
9618 2006-09-27  Marek Safar  <marek.safar@seznam.cz>
9619
9620         * expression.cs (Binary.ResolveOperator): Warn about a side effect
9621         of the `|' operator.
9622
9623         * report.cs: A new warning added.
9624
9625 2006-09-27  Martin Baulig  <martin@ximian.com>
9626
9627         * generic.cs (GenericMethod): Don't make this abstract.
9628
9629 2006-09-27  Martin Baulig  <martin@ximian.com>
9630
9631         * report.cs
9632         (InternalErrorException): Added overloaded ctor taking a params array.
9633
9634 2006-09-26  Marek Safar  <marek.safar@seznam.cz>
9635
9636         * class.cs, codegen.cs, const.cs, cs-tokenizer.cs, driver.cs, ecore.cs:
9637         Fixed the cases when same error was reported twice.
9638
9639         * report.cs (SymbolRelatedToPreviousError): Simplified as all our messages
9640         now report symbol information.
9641
9642 2006-09-25  Martin Baulig  <martin@ximian.com>
9643
9644         * class.cs: Completely unified with the gmcs version.
9645
9646 2006-09-25  Martin Baulig  <martin@ximian.com>
9647
9648         * typemanager.cs (TypeManager.IsNullableType): New public function.
9649         (TypeManager.IsNullableTypeOf): Likewise.
9650         (TypeManager.IsNullableValueType): Likewise.
9651
9652         * class.cs (MethodCore): Added the `GenericMethod' argument from
9653         gmcs and also unified all classes derived from `MethodCore' with gmcs.
9654
9655 2006-09-24  Raja R Harinath  <harinath@gmail.com>
9656
9657         * convert.cs: Unify with gmcs version.
9658
9659 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9660
9661         * decl.cs (DeclSpace.VerifyClsCompliance): When type has type parameters
9662         verify them as well.
9663
9664         * report.cs: New warning.
9665
9666 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9667
9668         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
9669         for anonymous block with out argument.
9670
9671 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9672
9673         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
9674         not used private events only.
9675
9676 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
9677
9678         * cfold.cs (BinaryFold): On the guest to unify empty constant cast.
9679
9680         * const.cs (Const.Define): Check for constant type.
9681         (Const.IsConstantTypeValid): Looks for valid constant types.
9682
9683         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
9684
9685         * ecore.cs (EmptyConstantCast): New common class for all constant based
9686         EmptyCast(s).
9687
9688         * expression.cs (Is.DoResolve): Handle null constant especially.
9689         (New.DoResolve): Check for new void().
9690         (MemberAccess.DoResolve): Cope with all kind of nulls.
9691
9692         * literal.cs (NullConstant): Uses EmptyConstantCast.
9693         (NullDefault): Based on EmptyConstantCast.
9694         (NullLiteral): Uses EmptyConstantCast.
9695
9696         * statement.cs (Block.ResolveMeta): Check for constant type.
9697
9698 2006-09-22  Martin Baulig  <martin@ximian.com>
9699
9700         * delegate.cs, attribute.cs: Merged with the gmcs versions.
9701
9702 2006-09-22  Raja R Harinath  <rharinath@novell.com>
9703
9704         * literal.cs (NullDefault): The type of default(IFoo) is 'IFoo',
9705         not the null type.
9706
9707         Fix part of #79451
9708         * typemanager.cs (Closure.Filter): Consider PrivateScope attributes.
9709         * decl.cs (DeclSpace.FindMemberToOverride): Likewise.  Reorganize
9710         code slightly.
9711
9712 2006-09-22  Martin Baulig  <martin@ximian.com>
9713
9714         * ecore.cs: Merged with the gmcs version.
9715
9716         * generic.cs (ConstructedType): New dummy class.
9717         (TypeArguments): Don't make this abstract.
9718
9719         * typemanager.cs
9720         (TypeManager.IsGenericTypeDefinition): New method.
9721         (TypeManager.GetGenericFieldDefinition): Moved here from gmcs.
9722
9723 2006-09-22  Raja R Harinath  <rharinath@novell.com>
9724
9725         * expression.cs (ComposedCast): Check for arrays of TypedReference
9726         before creating the type, not after.
9727
9728 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
9729
9730         * cfold.cs, const.cs, enum.cs, statement.cs: Updated
9731         after ToType change.
9732
9733         * constant.cs (Constant.ImplicitConversionRequired): Designed to used
9734         when constant must be implicitly convertible.
9735
9736         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
9737
9738         * ecore.cs (NullCast): Derives from NullConstant.
9739
9740         * expression.cs (Is.DoResolve): Removed useless variables.
9741         (Conditional.DoResolve): Quick hack for `Foo () ? null : null'.
9742         (New.Constantify): Add enum support.
9743         (MemberAccess.DoResolve): Add warning when accessing null constant or
9744         variable.
9745
9746         * generic.cs (GenericConstraints.IsReferenceType): Another dummy
9747         property.
9748
9749         * literal.cs (NullConstant): New abstract class with common
9750         functionality for all null specializations.
9751         (NullDefault): Represents default(X) when result can be
9752         reduced to null.
9753         (NullLiteral): Updated.
9754
9755         * report.cs: Add new warning.
9756
9757 2006-09-21  Martin Baulig  <martin@ximian.com>
9758
9759         * generic.cs (GenericTypeParameterBuilder): Removed this ugly hack.
9760
9761 2006-09-21  Martin Baulig  <martin@ximian.com>
9762
9763         * generic.cs (GenericConstraints): New dummy class.
9764         (Constraints): Likewise.
9765         (TypeParameter): Likewise.
9766         (TypeParameterName): Likewise.
9767         (GenericMethod): Likewise.
9768
9769         * typemanager.cs (TypeManager.GetGenericArguments): New method.
9770
9771         * decl.cs: Merged with the gmcs version.
9772
9773 2006-09-21  Raja R Harinath  <rharinath@novell.com>
9774
9775         * generic.cs (TypeParameter): Implement IMemberContainer.
9776         (GenericTypeParameterBuilder): New.  An abominable repugnant hack.
9777
9778         * rootcontext.cs: Unify with gmcs version.
9779
9780         * report.cs: Unify with gmcs version.
9781         * typemanager.cs (AddTypeParameter, LookupTypeParameter): Move
9782         from gmcs/generics.cs.
9783         * generics.cs (TypeParameter): New dummy class.
9784
9785         * support.cs: Unify with gmcs version.
9786
9787 2006-09-20  Raja R Harinath  <rharinath@novell.com>
9788
9789         * ecore.cs (MethodGroupExpr.ResolveGeneric): New dummy method.
9790         * expression.cs (MemberAccess, BaseAccess): Remove GMCS_SOURCE #ifdef.
9791
9792         * decl.cs (MemberName): Unify with gmcs, except for GetTypeExpression.
9793         * generic.cs (TypeArguments): New dummy class to help avoid #ifdefs.
9794         * mcs.exe.sources: Add generic.cs.
9795
9796         * codegen.cs: Unify with gmcs version.
9797
9798         * codegen.cs (IResolveContent.GenericDeclContainer): Copy from gmcs.
9799         (EmitContext): Add GenericDeclContainer implementation.
9800         * decl.cs (MemberCore, DeclSpace): Likewise.
9801         * namespace.cs: Remove #ifdef GMCS_SOURCE.
9802
9803         * namespace.cs (GetTypeInAssembly): Remove #ifdef GMCS_SOURCE.
9804         MCS TypeManager has a corresponding dummy method.
9805
9806 2006-09-19  Martin Baulig  <martin@ximian.com>
9807
9808         * expression.cs: Completely merged with the gmcs version.
9809
9810 2006-09-19  Martin Baulig  <martin@ximian.com>
9811
9812         * expression.cs (Invocation): Merged with the gmcs version.
9813         (ArrayAccess.GetStoreOpcode): Likewise.
9814
9815 2006-09-19  Martin Baulig  <martin@ximian.com>
9816
9817         * typemanager.cs
9818         (TypeManager.IsGenericMethod): Moved here from ../gmcs/generic.cs.
9819         (TypeManager.IsGenericMethodDefinition): Likewise.
9820
9821 2006-09-19  Martin Baulig  <martin@ximian.com>
9822
9823         * typemanager.cs
9824         (TypeManager.IsEqual): Moved the gmcs implementation here.
9825         (TypeManager.DropGenericTypeArguments): Likewise.
9826         (TypeManager.DropGenericMethodArguments): Likewise.
9827         (TypeManager.GetTypeArguments): Moved here from gmcs.
9828         (TypeManager.HasGenericArguments): Likewise.
9829
9830 2006-09-19  Martin Baulig  <martin@ximian.com>
9831
9832         * expression.cs (Binary): Merged with the gmcs version.
9833
9834 2006-09-19  Martin Baulig  <martin@ximian.com>
9835
9836         * expression.cs (Probe, As, Is): Merged with the gmcs version.
9837
9838 2006-09-19  Martin Baulig  <martin@ximian.com>
9839
9840         * typemanager.cs: Merged with the gmcs version.
9841
9842 2006-09-16  Raja R Harinath  <rharinath@novell.com>
9843
9844         * AssemblyInfo.cs [GMCS_SOURCE]: Unify with gmcs source.
9845         * driver.cs: Likewise.
9846
9847 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
9848
9849         A fix for #79401
9850         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
9851         only if parent type is class.
9852         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
9853         update.
9854
9855 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
9856
9857         * cs-parser.jay,
9858         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
9859         keywords are used.
9860         * typemanager.cs(CSharpName): Converts NullType to null.
9861
9862 2006-09-15  Martin Baulig  <martin@ximian.com>
9863
9864         * typemanager.cs
9865         (TypeManager.GetMethodName): Added mcs implementation.
9866         (TypeManager.IsEqual): Likewise.
9867
9868         * ecore.cs
9869         (SimpleName.RemoveGenericArity): Added dummy implementation.
9870
9871         * pending.cs: Merged with the gmcs version.     
9872
9873 2006-09-15  Martin Baulig  <martin@ximian.com>
9874
9875         * statement.cs: Merge with the gmcs version.
9876
9877 2006-09-15  Martin Baulig  <martin@ximian.com>
9878
9879         * statement.cs (Switch): Merge with the gmcs implementation
9880         (without nullables), which is newer.
9881
9882 2006-09-15  Martin Baulig  <martin@ximian.com>
9883
9884         * statement.cs (Block.Variables): Make this public.
9885         (ToplevelBlock.Parameters): Make this a property.
9886         (Throw.Resolve): Use `TypeManager.IsSubclassOf ()'.
9887
9888 2006-09-15  Martin Baulig  <martin@ximian.com>
9889
9890         * namespace.cs: Merge with the gmcs version.
9891
9892 2006-09-15  Martin Baulig  <martin@ximian.com>
9893
9894         * decl.cs (MemberName): Minor code cleanups.
9895
9896 2006-09-15  Martin Baulig  <martin@ximian.com>
9897
9898         * parameter.cs: Merge with the gmcs version.
9899
9900 2006-09-15  Martin Baulig  <martin@ximian.com>
9901
9902         * enum.cs: Merge with the gmcs version: 3005 is a warning in gmcs
9903         and an error in mcs.
9904
9905 2006-09-15  Martin Baulig  <martin@ximian.com>
9906
9907         * flowanalysis.cs: Merged from GMCS; added the generics code into
9908         a `GMCS_SOURCE' conditional so we can share this file.
9909
9910 2006-09-08  Martin Baulig  <martin@ximian.com>
9911
9912         * typemanager.cs (TypeManager.interlocked_type): New public field.
9913         (TypeManager.int_interlocked_compare-exchange): New public field.
9914         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
9915         enumerator types here and call InitGenericCoreTypes().
9916         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
9917         after calling InitEnumUnderlyingTypes().
9918
9919         * rootcontext.cs
9920         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
9921         `classes_second_stage'. 
9922
9923 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
9924
9925         * assign.cs, ecore.cs, expression.cs: Share error message text.
9926         * class.cs (FieldMember.Define): Check for varible of static type.
9927         * driver.cs (LoadAssembly): Uses error output for errors.
9928         * statement.cs: Updated.
9929
9930 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
9931
9932         * expression.cs (Error_OperatorCannotBeApplied): Report type instead of
9933         type instance.
9934
9935 2006-09-07  Martin Baulig  <martin@ximian.com>
9936
9937         * driver.cs
9938         (MainDriver): Revert r62663 from Marek; see #70506 for details.
9939
9940 2006-08-29  Miguel de Icaza  <miguel@novell.com>
9941
9942         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
9943         
9944 2006-08-17  Miguel de Icaza  <miguel@novell.com>
9945
9946         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
9947         #52019 and #79064, the use of the \uXXXX sequence in source code
9948         to represent unicode characters.
9949
9950 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
9951
9952         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
9953         support.
9954         * class.cs, ecore.cs, statement.cs: Merged to one error message.
9955
9956 2006-08-13  Miguel de Icaza  <miguel@novell.com>
9957
9958         * assign.cs: Catch attempts to assign to a method groups in += and
9959         report as 1656
9960
9961 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
9962
9963         A fix for #79056
9964         * cs-parser.jay: Don't destroy current array type by typeof of array's.
9965
9966 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
9967
9968         * class.cs (Method.Define): Issue a warning when generic method looks like
9969         an entry point.
9970         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
9971         as well.
9972
9973 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
9974  
9975         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
9976         looking for ctor.
9977         * decl.cs (MemberCache.FindMembers): When container is interface we need to
9978         search all base interfaces as a member can be ambiguous.
9979         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
9980         Constructor member type filter. 
9981         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
9982         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
9983         reporting for returned memberinfos.
9984         * report.cs: Updated.
9985         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
9986         version to work on all runtimes.
9987         (TypeManager.RealMemberLookup): Removed members filtering.
9988
9989 2006-08-08  Raja R Harinath  <rharinath@novell.com>
9990
9991         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
9992         (PropertyExpr.EmitAssign): Likewise.
9993         * expression.cs (Indirection.EmitAssign): Likewise.
9994         (LocalVariableReference.EmitAssign): Likewise.
9995         (ParameterReference.EmitAssign): Likewise.
9996         (Invocation.EmitArguments): Likewise.
9997         (ArrayAccess.EmitAssign): Likewise.
9998         (IndexerAccess.EmitAssign): Likewise.
9999         (This.EmitAssign): Likewise.
10000         (ConditionalLogicalOperator.Emit): Likewise.
10001
10002         Fix #79026
10003         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
10004         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
10005         leave it in after returning it.
10006         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
10007
10008 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
10009
10010         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
10011         message.
10012
10013 2006-08-03  Raja R Harinath  <rharinath@novell.com>
10014
10015         Fix cs0146-3.cs and cs0146-4.cs.
10016         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
10017         enclosing types don't depend on the current type.
10018
10019 2006-08-02  Raja R Harinath  <rharinath@novell.com>
10020
10021         Fix #77963
10022         * class.cs (TypeContainer.DoDefineMembers): Use
10023         FindBaseMemberWithSameName on Parent, since we're interested in
10024         whether we hide inherited members or not.
10025         (FindBaseMemberWithSameName): Make slightly more robust.
10026
10027         Fix the non-generic testcase from #77396
10028         * decl.cs (DeclSpace.DeclContainer): Remove override.
10029
10030         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
10031         declspaces for doppelgangers too.
10032         (UsingEntry): Implement IResolveContext.
10033         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
10034         'this' as the resolve context.
10035         (LocalAliasEntry): Likewise.
10036
10037         Implement parts of #77403
10038         * roottypes.cs (RootDeclSpace): New.  Used to represent the
10039         toplevel declaration space.  Each namespace declaration introduces
10040         a "partial" root declaretion space.
10041         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
10042         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
10043         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
10044         from 'current_namespace.SlaveDeclSpace'.
10045         (namespace_declaration): Likewise.
10046         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
10047         check.  It can't happen now.
10048         * decl.cs (DeclSpace.LookupType): Likewise.
10049         * driver.cs (MainDriver): Sanity check.
10050
10051 2006-08-01  Raja R Harinath  <rharinath@novell.com>
10052
10053         * decl.cs (DeclSpace.FindNestedType): Remove.
10054         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
10055         LookupTypeContainer to get the container of the nested type.
10056         * class.cs (TypeContainer.FindNestedType): Make non-override.
10057
10058 2006-07-31  Raja R Harinath  <rharinath@novell.com>
10059
10060         * decl.cs (DeclSpace.PartialContainer): Move field from ...
10061         * class.cs (TypeContainer.PartialContainer): ... here.
10062         (TypeContainer.AddBasesForPart): New helper.
10063         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
10064         instead.
10065         * cs-parser.jay (current_class): Convert to DeclSpace.
10066         (struct_declaration, interface_declaration, class_declaration):
10067         Use AddBasesForPart instead of .Bases directly.
10068         * const.cs, iterators.cs: Update to changes.
10069
10070 2006-07-28  Raja R Harinath  <rharinath@novell.com>
10071
10072         * class.cs (TypeContainer.AddMemberType): Rename from
10073         AddToTypeContainer.
10074         (TypeContainer.AddMember): Rename from AddToMemberContainer.
10075         (AddTypeContainer): New.  Combine AddClassOrStruct and
10076         AddInterface.
10077         (AddPartial): Update.  Add 'is_partial' argument.
10078         * roottypes.cs: Update to changes.
10079         * cs-parser.jay (push_current_class): New helper for handling
10080         current_container and current_class.
10081         (struct_declaration, interface_declaration, class_declaration):
10082         Use it.
10083
10084 2006-07-26  Raja R Harinath  <rharinath@novell.com>
10085
10086         * roottypes.cs: Rename from tree.cs.
10087
10088         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
10089         * tree.cs (Tree, ITreeDump): Remove types.
10090         * rootcontext.cs (tree, Tree): Remove fields.
10091         (root, ToplevelTypes): New.
10092         * *.cs: Update to rename.
10093
10094         * tree.cs (Tree.RecordDecl): Remove.
10095         (RootTypes.AddToTypeContainer): Record the toplevel type in its
10096         namespace here.
10097         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
10098
10099 2006-07-23  Raja R Harinath  <harinath@gmail.com>
10100
10101         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
10102         DoFlowAnalysis and OmitStructFlowAnalysis here.
10103         (ec.With): Rename from WithUnsafe and generalize.
10104         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
10105         (ec.WithFlowAnalyis): New.
10106         * ecore.cs, expression.cs, statement.cs: Update.
10107
10108 2006-07-22  Raja R Harinath  <harinath@gmail.com>
10109
10110         * statement.cs (Block.ResolveMeta): Simplify slightly.
10111
10112         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
10113         multiple boolean fields.  Convert InUnsafe, constant_check_state,
10114         check_state to flags.
10115         (CheckState, ConstantCheckState): Update.
10116         (InUnsafe): New read-only property.
10117         (FlagsHandle): Rename from CheckStateHandle and convert to handle
10118         arbitrary flags.
10119         (WithUnsafe): New helper similar to WithCheckState.
10120         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
10121         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
10122
10123 2006-07-21  Raja R Harinath  <rharinath@novell.com>
10124
10125         Make comparisons use the same IL irrespective of whether they're
10126         in a 'checked' or 'unchecked' context: one of the issues in #78899
10127         * codegen.cs (EmitContext.CheckState): Make read-only property.
10128         (EmitContext.ConstantCheckState): Likewise.
10129         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
10130         helper that implement a save/restore stack for CheckState
10131         values.  This is the only way to change check-state.
10132         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
10133         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
10134         (CheckedExpr.EmitBranchable): New forwarding method.
10135         (UnCheckedExpr): Likewise.
10136         * statement.cs (Block.ResolveMeta): Use WithCheckState.
10137         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
10138         (Checked.Resolve, checked.DoEmit): Likewise.
10139
10140 2006-07-20  Miguel de Icaza  <miguel@novell.com>
10141
10142         * anonymous.cs: Cache the resolved anonymous delegate, and return
10143         this so that the ResolveTopBlock is only triggered once, not
10144         twice.
10145
10146         Currently we trigger ResolvetopBlock twice due to a first pass of
10147         argument check compatibility, and a second pass that does the
10148         actual resolution.   
10149         
10150 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
10151
10152         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
10153         modifiers.
10154         * rootcontext.cs (Reset): Add helper_classes.
10155
10156 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
10157
10158         A fix for #78860
10159         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
10160         correctly.
10161
10162 2006-07-13  Miguel de Icaza  <miguel@novell.com>
10163
10164         * statement.cs (Lock): Handle expressions of type
10165         TypeManager.null_type specially.  Fixes #78770
10166
10167 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
10168
10169         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
10170         to an event.
10171
10172 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
10173
10174         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
10175         for accessors as well.
10176         * ecore.cs (EventExpr): Add AccessorTable.
10177
10178 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
10179
10180         A fix for #78738
10181         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
10182         for CS0122 where appropriate.
10183         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
10184         level attributes.
10185         (Filter): Assembly can be null in the case of top level attributes.
10186
10187 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
10188
10189         A fix for #78690
10190
10191         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
10192         is done at global level.
10193
10194 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
10195
10196         A fix for #77002, Implemented TypeForwarder support.
10197
10198         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
10199         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
10200         * typemanager.cs (): Add type_forwarder_attr_type.
10201
10202 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
10203
10204         * report.cs: Add CS0469 warning.
10205
10206 2006-06-21  Martin Baulig  <martin@ximian.com>
10207
10208         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
10209         the `try'-block, so we also report CS0016 etc. there.
10210
10211 2006-06-21  Martin Baulig  <martin@ximian.com>
10212
10213         * delegate.cs
10214         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
10215
10216 2006-06-21  Martin Baulig  <martin@ximian.com>
10217
10218         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
10219         also report CS1686 for parameters.
10220
10221 2006-06-21  Martin Baulig  <martin@ximian.com>
10222
10223         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
10224         instead of an error if the value is not implicitly convertible to
10225         the switch types; fixes #77964.
10226
10227 2006-06-21  Raja R Harinath  <rharinath@novell.com>
10228
10229         Fix #78673
10230         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
10231         FieldBuilder is null.
10232
10233         Fix #78662
10234         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
10235         'left' and 'right' before error-checking.
10236
10237 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
10238
10239         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
10240         Fixed bug #78601.
10241         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
10242         (FieldExpr.DoResolve): likewise.
10243         (PropertyExpr.InstanceResolve): likewise.
10244         (EventExpr.InstanceResolve): likewise. 
10245
10246 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
10247
10248         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
10249         attribute applicable tests for attribute argument.
10250
10251 2006-06-02  Raja R Harinath  <rharinath@novell.com>
10252
10253         Fix #78079
10254         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
10255         (Binary.OverloadResolve_PredefinedIntegral): New.
10256         (Binary.OverloadResolve_PredefinedFloating): New.
10257         (Binary.OverloadResolve_PredefinedString): New.
10258         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
10259         Follow the standard more closely, and treat numeric promotions in
10260         terms of overload resolution.
10261         (Binary.CheckShiftArguments): Simplify.
10262
10263 2006-06-01  Raja R Harinath  <rharinath@novell.com>
10264
10265         * flowanalysis.cs (MyBitVector): Simplify representation.
10266         (MyBitVector.Clone): Avoid allocating BitArray.
10267         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
10268         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
10269         (*): Update.  Change all references to MyBitVector.And and
10270         MyBitVector.Or to &= and |=.
10271
10272 2006-05-29  Raja R Harinath  <rharinath@novell.com>
10273
10274         Fix cs0231-[34].cs.
10275         * cs-parser.jay (formal_parameter_list): Extend the pattern below
10276         to param arguments too.
10277
10278 2006-05-26  Miguel de Icaza  <miguel@novell.com>
10279
10280         * cs-parser.jay: Catch another parsing form for arglist being
10281         followed by other arguments.  Fixes #78313.
10282
10283 2006-05-24  Raja R Harinath  <rharinath@novell.com>
10284
10285         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
10286         checking of out parameters to ...
10287         (FlowBranchingToplevel.Merge): ... here.
10288         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
10289         set, propagate the origin upward, and only complain if there was
10290         no other error.
10291         (FlowBranchingException.AddContinueOrigin): Likewise.
10292         (FlowBranchingException.AddReturnOrigin): Likewise.
10293         (FlowBranchingException.AddGotoOrigin): Likewise.       
10294
10295 2006-05-23  Raja R Harinath  <rharinath@novell.com>
10296
10297         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
10298         unreachable, skip it.
10299         (FlowBranchingException.Merge): Always propagate jumps, even if
10300         the finally block renders subsequent code unreachable.
10301
10302 2006-05-18  Raja R Harinath  <rharinath@novell.com>
10303
10304         Fix #77601
10305         * statement.cs (Goto.Resolve): Move responsibility for resolving
10306         'goto' to FlowBranching.AddGotoOrigin.
10307         (Goto.SetResolvedTarget): New.  Callback to set the
10308         LabeledStatement that's the target of the goto.
10309         (Goto.DoEmit): Use Leave instead of Br when crossing an
10310         unwind-protect boundary.
10311         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
10312         LookupLabel and adjust to new semantics.
10313         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
10314         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
10315         Goto.SetResolvedTarget to update target.
10316         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
10317         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
10318         AddBreakOrigin & co.  Delay propagation until ...
10319         (FlowBranchingException.Merge): ... this.
10320
10321         * statement.cs (Block.Resolve): Always depend on flow-branching to
10322         determine unreachability.  Kill workaround that originally emitted
10323         only one statement after an "unreachable" label (see infloop in
10324         test-515.cs).
10325
10326         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
10327         This is still "wrong", but anything better would probably need a
10328         multi-pass algorithm.
10329         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
10330         usage vector.  Force current usage vector to be reachable, to
10331         optimistically signify backward jumps.
10332         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
10333         detected.
10334         (FlowBranchingLabeled.Merge): New.  If no backward jump was
10335         detected, return the original salted-away usage vector instead,
10336         updated with appropriate changes.  Print unreachable warning if
10337         necessary.
10338         * statement.cs (Block.Resolve): Don't print unreachable warning on
10339         a labeled statement.
10340
10341 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
10342
10343         * driver.cs: Pass filename without path to AssemblyBuilder's 
10344         AddResourceFile. Fixes bug #78407.
10345
10346 2006-05-17  Raja R Harinath  <rharinath@novell.com>
10347
10348         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
10349         * flowanalysis.cs (FlowBranchingLabeled): ... here.
10350         (FlowBranching.MergeChild): Overwrite
10351         reachability information from Labeled branchings too.
10352
10353 2006-05-16  Raja R Harinath  <rharinath@novell.com>
10354
10355         * statement.cs (Goto.Resolve): Merge jump origins here ...
10356         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
10357
10358         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
10359         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
10360         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
10361         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
10362         here, ...
10363         * statement.cs (Goto.Resolve): ... not here.
10364         (Goto.Emit): Remove CS1632 check.
10365
10366 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
10367
10368         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
10369         error message.
10370
10371 2006-05-11  Raja R Harinath  <rharinath@novell.com>
10372
10373         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
10374         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
10375         (FlowBranchingException.Label): Likewise.
10376
10377         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
10378         given value.
10379         (MyBitVector.Or): Use it to avoid losing information (Count).
10380         (FlowBranching.MergeOrigins): Likewise.
10381
10382         * flowanalysis.cs (UsageVector.IsDirty): Remove.
10383         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
10384         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
10385         (UsageVector.ToString): Simplify.
10386         (UsageVector.MergeSiblings): Move here from ...
10387         (FlowBranching.Merge): ... here.
10388         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
10389         not a MyBitVector.
10390
10391 2006-05-10  Raja R Harinath  <rharinath@novell.com>
10392
10393         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
10394         null bitvector is treated as all-true.
10395
10396         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
10397         (MyBitVector): Rationalize invariants.  'vector != null' implies
10398         that we have our own copy of the bitvector.  Otherwise,
10399         'InheritsFrom == null' implies all inherited bits are true.
10400
10401 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
10402
10403         * statement.cs (LocalInfo): Add IsConstant.
10404         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
10405         local variable for constants.
10406
10407 2006-05-09  Raja R Harinath  <rharinath@novell.com>
10408
10409         * flowanalysis.cs (MyBitVector.Empty): New.
10410         (MyBitVector): Don't allow InheritedFrom to be null.
10411         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
10412         (UsageVector, FlowBranching): Update to changes.
10413
10414         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
10415         recursion.  The 'Parent == null' condition isn't sufficient for
10416         anonymous methods.
10417         (FlowBranching.AddBreakOrigin): Likewise.
10418         (FlowBranching.AddContinueOrigin): Likewise.
10419         (FlowBranching.AddReturnOrigin): Likewise.
10420         (FlowBranching.StealFinallyClauses): Likewise.
10421         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
10422         (FlowBranching.CheckOutParameters): Likewise.
10423         (FlowBranchingToplevel): Terminate all the above recursions here.
10424         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
10425         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
10426
10427         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
10428         toplevel block.
10429         (FlowBranchingToplevel): New.  Empty for now.
10430         (FlowBranching.MergeTopBlock): Update.
10431         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
10432         branching for the anonymous delegate.
10433         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
10434
10435         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
10436         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
10437         information at the start of the merge.  Reorganize.
10438
10439 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
10440
10441         * class.cs (MethodData.Define): Method cannot implement interface accessor.
10442
10443 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
10444
10445         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
10446         to newly introduced ctor.
10447
10448         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
10449         message to one place.
10450         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
10451         global namespace.
10452
10453 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
10454
10455         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
10456
10457         * ecore.cs (Expression.ResolveAsConstant): Updated.
10458
10459         * statement.cs (ResolveMeta): Updated.
10460
10461 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
10462
10463         * cs-parser.jay: __arglist cannot be used in initializer.
10464
10465 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
10466
10467         A fix for #77879
10468         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
10469         private types.
10470
10471 2006-05-05  Raja R Harinath  <rharinath@novell.com>
10472
10473         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
10474         (LabeledStatement): Add 'name' parameter.
10475         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
10476         (Block.AddLabel): Update to changes.
10477         * cs-parser.jay (labeled_statement): Likewise.
10478
10479         * flowanalysis.cs (BranchingType.Labeled): New.
10480         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
10481         (FlowBranchingLabeled): New.  Does nothing for now, but will
10482         eventually handle 'goto' flows.
10483         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
10484         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
10485         that's terminated ...
10486         (Block.Resolve): ... here.
10487
10488         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
10489         (UsageVector.MergeFinallyOrigins): Likewise.
10490         (FlowBranching.InTryOrCatch): Likewise.
10491         (FlowBranching.AddFinallyVector): Likewise.
10492         (FlowBranchingException): Update to changes.
10493
10494         Fix #78290
10495         * statement.cs (Return.Resolve): Move error checking to ...
10496         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
10497         (FlowBranchingException): Handle return origins like break and
10498         continue origins.
10499         (FlowBranching.UsageVector.CheckOutParameters): Remove.
10500
10501 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
10502
10503         A fix for #76122
10504         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
10505         filter.
10506
10507 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
10508
10509         A fix for #77543
10510         * class.cs (MethodData.Define): Do public accessor check only when method
10511         implements an interface.
10512
10513 2006-05-04  Raja R Harinath  <rharinath@novell.com>
10514
10515         Remove special handling of 'break'
10516         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
10517         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
10518         (UsageVector.Break): Remove.
10519         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
10520         reachability.
10521         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
10522
10523         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
10524         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
10525
10526 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
10527
10528         A fix for #75726
10529         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
10530         be the interface member.
10531
10532 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
10533
10534         A fix for #60069
10535         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
10536         for emitting small (int) values.
10537
10538 2006-05-03  Raja R Harinath  <rharinath@novell.com>
10539
10540         Fix #59427
10541         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
10542         control-flow passes through the 'finally' after merging-in all the
10543         control-flows from 'try' and the 'catch' clauses.
10544
10545         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
10546         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
10547         always true at the only non-recursive entry point.
10548         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
10549         FlowBranchingBreakable.
10550         (FlowBranchingLoop): Remove.
10551         * statement.cs (Return.DoResolve): Update to changes.
10552
10553         Fix #76471, #76665
10554         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
10555         (FlowBranching.CreateBranching): Handle it: create a
10556         FlowBranchingContinuable.
10557         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
10558         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
10559         except that it handles the 'continue' command.
10560         (FlowBranching.UsageVector.MergeOrigins): Rename from
10561         MergeBreakOrigins.
10562         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
10563         except that it overrides AddContinueOrigin.
10564         (FlowBranchingException): Override AddContinueOrigin, similar to
10565         AddBreakOrigin.
10566         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
10567         Create a new branching around the embedded statement.
10568         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
10569         control flow after the embedded statement.
10570         (Continue.Resolve): Move all error checking to AddContinueOrigin.
10571
10572         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
10573         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
10574         FlowBranchingBreakable.
10575         (FlowBranchingSwitch): Remove.
10576
10577         Fix test-503.cs
10578         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
10579         error reporting to ...
10580         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
10581         Rename from 'AddBreakVector'.  Add new location argument.  Return
10582         a bool indicating whether the 'break' crosses an unwind-protect.
10583         (FlowBranchingException.AddBreakOrigin): Add.
10584         (FlowBranchingException.Merge): Propagate 'break's to surrounding
10585         flowbranching after updating with the effects of the 'finally'
10586         clause.
10587         (FlowBranchingBreakable): New common base class for
10588         FlowBranchingLoop and FlowBranchingSwitch.
10589
10590         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
10591         embedded statement.
10592         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
10593
10594 2006-05-02  Raja R Harinath  <rharinath@novell.com>
10595
10596         * statement.cs (Do.Resolve): If the loop is infinite, set the
10597         barrier.
10598         (While.Resolve, For.Resolve): Set a barrier after the embedded
10599         statement.  There's no direct control flow that goes from the end
10600         of the embedded statement to the end of the loop.
10601         * flowanalysis.cs (FlowBranching.Infinite): Remove.
10602         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
10603         above ensure that the reachability is correctly computed.
10604
10605         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
10606         (UsageVector.MergeBreakOrigins): If the current path is
10607         unreachable, treat it as if all parameters/locals are initialized.
10608         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
10609         infinite loops before merging-in break origins.
10610
10611         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
10612         (Reachability.Reachable): Split part into ...
10613         (Reachability.Unreachable): ... this.  Simplify.
10614         (Reachability.IsUnreachable): Use 'Unreachable' instead.
10615
10616         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
10617         (Reachability.SetThrowsSometimes): Likewise.
10618         (FlowBranchingBlock.MergeTopBlock): Don't compare against
10619         TriState.Always, use corresponding property.
10620         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
10621         (Block.Resolve): Likewise.  Remove some redundant checks.
10622
10623 2006-05-02  Raja R Harinath  <harinath@gmail.com>
10624
10625         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
10626         (Reachability.Meet): Don't bother checking AlwaysThrows --
10627         barrier is always set.
10628         (FlowBranchingBlock.Merge): Likewise.
10629
10630 2006-05-01  Raja R Harinath  <harinath@gmail.com>
10631
10632         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
10633         checks for unreachable.
10634
10635 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
10636
10637         A fix for #77980
10638         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
10639
10640         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
10641         whether field is really assigned.
10642
10643 2006-04-30  Raja R Harinath  <harinath@gmail.com>
10644
10645         * flowanalysis.cs (Reachability): Make 4-argument constructor
10646         private.
10647         (Reachability.Meet): Rename from 'And'.  Remove static variant.
10648         (Reachability.Always): Rename from the highly misleading
10649         'Reachability.Never'.
10650         (FlowBranching.Merge): Update to changes.  Mark an impossible
10651         situation with a 'throw'.
10652         (*): Update to changes.
10653
10654 2006-04-29  Raja R Harinath  <harinath@gmail.com>
10655
10656         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
10657         Remove 'Undefined'.
10658         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
10659         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
10660         (*): Update to changes.
10661         * statement.cs: Update to changes.
10662
10663 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
10664
10665         A fix for #78049
10666         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
10667
10668 2006-04-28  Raja R Harinath  <harinath@gmail.com>
10669
10670         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
10671         dummy UsageVector.
10672
10673         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
10674         argument to two arguments: an usage-vector and a bool.  Move call
10675         to FlowBranching.Merge () ...
10676         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
10677
10678         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
10679         handling of loop and switch reachability to ...
10680         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
10681
10682 2006-04-27  Raja R Harinath  <harinath@gmail.com>
10683
10684         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
10685         handling to FlowBranchingLoop.InLoop.
10686         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
10687
10688 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
10689
10690         A fix for #78115
10691         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
10692         anonymous method is allowed from AnonymousContainer here.
10693
10694         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
10695
10696 2006-04-24  Raja R Harinath  <rharinath@novell.com>
10697
10698         Fix #78156
10699         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
10700
10701 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
10702
10703         A fix for #49011.
10704         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
10705         (DoubleConstant.Reduce): Ditto.
10706
10707 2006-04-23  Raja R Harinath  <rharinath@novell.com>
10708
10709         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
10710         Remove 'lvalue_right_side' argument.  Move parts to ...
10711         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
10712         (LocalVariable.DoResolveLValue): ... these.
10713
10714 2006-04-21  Raja R Harinath  <rharinath@novell.com>
10715
10716         Fix cs1655.cs
10717         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
10718         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
10719         (LocalVariableReference.DoResolveBase): Use it to implement new
10720         CS1655 check.
10721         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
10722         (Argument.Resolve): Simplify.  Move CS1510 check ...
10723         * ecore.cs (Expression.ResolveLValue): ... here.
10724         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
10725         (PropertyExpr.DoResolveLValue): Likewise.
10726         (FieldExpr.Report_AssignToReadonly): Likewise.
10727         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
10728         LValueMemberAccess or LValueMemberOutAccess on instance depending
10729         on it.
10730         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
10731         DoResolve as appropriate.
10732
10733 2006-04-20  Raja R Harinath  <rharinath@novell.com>
10734
10735         Fix #75800
10736         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
10737         implicit conversions on 'out' and 'ref' arguments.
10738
10739         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
10740         improve clarity.  Remove dead code.
10741
10742         Fix #66031
10743         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
10744         (Catch.Resolve): Resolve VarBlock if it exists.
10745
10746 2006-04-19  Miguel de Icaza  <miguel@novell.com>
10747
10748         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
10749         twice, this was some residual code, the enumerator was emitted
10750         properly in the two branche of if later.
10751
10752 2006-04-19  Raja R Harinath  <rharinath@novell.com>
10753
10754         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
10755         cast is never an lvalue.
10756         (Cast.DoResolve, Cast.ResolveRest): Combine.
10757         (Argument.Emit): Simplify slightly.  Move 'Expr is
10758         IMemoryLocation' check ...
10759         (Argument.Resolve): ... here.
10760         (Argument.Error_LValueRequired): Remove.  Inline into only user.
10761
10762         Simplifications.  Fix cs0191-2.cs
10763         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
10764         CS1649 and CS1651 to ...
10765         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
10766         the actual selection of the error code and message to a lookup
10767         table.  Add a dummy return value to simplify callsites.
10768         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
10769         readonly fields of other instances of the same type.  Move CS0197
10770         warning from ...
10771         * expression.cs (Argument.Resolve): ... here.  Simplify code.
10772         Ensure that ec.InRefOutArgumentResolving is only set during LValue
10773         resolution of an out or ref argument.  The code simplification
10774         above uses this invariant.
10775
10776 2006-04-18  Raja R Harinath  <rharinath@novell.com>
10777
10778         Possibly fix #77752.  Fix cs1690-[4-7].cs.
10779         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
10780         CheckMarshallByRefAccess.  Drop parameter.
10781         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
10782         warning.
10783         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
10784         InstanceExpression.
10785         * report.cs (AllWarnings): Add CS1690.
10786         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
10787         for ref access too.
10788         (LocalVariableReference.DoResolveBase): Update.
10789
10790 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10791
10792         * class.cs (MethodOrOperator): Moved common parts from method class.
10793         detect obsolete attributes.
10794         (Method.Define): Simplified as it reuses code from base.
10795         (Constructor.ValidAttributeTargets): Fixed issue found during
10796         refactoring.
10797         (Destructor.ValidAttributeTargets): Fixed issue found during
10798         refactoring.
10799         (Operator): Finished refactoring set off by #78020. Operator class is now
10800         ordinary method class.
10801
10802         * anonymous.cs: Updated.
10803
10804         * decl.cs (DeclSpace): Add IsGeneric
10805
10806 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10807
10808         * class.cs (Constructor.Emit): Don't emit the attributes twice.
10809
10810 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10811
10812         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
10813         detect obsolete attributes.
10814         (Method.CreateEmitContext): Moved to MethodOrOperator.
10815
10816 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10817
10818         A fix for #78048.
10819         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
10820         customized exception to make crash detection easier.
10821         (MethodOrOperator): Started to work on new base class for methods and
10822         operators.
10823         (Method): Derives from MethodOrOperator.
10824         (Constructor.Emit): Emits its own attributes.
10825         (AbstractPropertyEventMethod.Emit): Ditto.
10826         (Operator): Derives from MethodOrOperator, will refactor fully in extra
10827         patch.
10828         (Operator.Emit): It's temporary more tricky than should be.
10829         
10830         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
10831
10832         * report.cs (InternalErrorException): Add ctor with inner exception.
10833
10834 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
10835
10836         A fix for #76744.
10837         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
10838         only not visible.
10839
10840 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
10841
10842         A fix for #77916.
10843         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
10844         array.
10845
10846 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
10847
10848         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
10849         attribute is present and Guid not.
10850         (Interface.ApplyAttributeBuilder): Ditto.
10851
10852         * attribute.cs: Add error message.
10853
10854 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
10855
10856         A fix for #78020.
10857
10858         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
10859         sources (it's composite) so hold them in extra array as they are used in
10860         Emit phase only. It worked in the previous versions by mistake.
10861         (Attribute.Emit): Emit attribute for more owners when exist.
10862
10863         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
10864         it has now different behaviour.
10865
10866 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
10867
10868         * constant.cs (Constant.IsDefaultInitializer): New method.
10869
10870         * class.cs: Updated.
10871
10872         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
10873         re-initialize default values. It saves KBs almost for every assembly.
10874         Thanks Zoltan for the idea.
10875         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
10876         (ArrayCreation.DoResolve): Resolve only once.
10877         (ArrayCreation.Emit): Emit static initializer only when it is faster.
10878         (ArrayCreation.GetAttributableValue): Cope with optimized values.
10879
10880 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
10881
10882         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
10883         From #77961.
10884
10885 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
10886
10887         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
10888         in an embedded statement too.
10889
10890 2006-04-01  Raja R Harinath  <rharinath@novell.com>
10891
10892         Fix #77958
10893         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
10894
10895 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
10896
10897         A fix for #77966.
10898
10899         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
10900         was not specified.
10901
10902         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
10903
10904 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
10905
10906         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
10907         phase.
10908
10909         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
10910         LocalTemporary change.
10911
10912         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
10913         TypeContainer.
10914         (ClassOrStruct.DefineFieldInitializers): Implemented static field
10915         initializers optimization.
10916         (ClassOrStruct.TypeAttr): Moved from modifiers.
10917         (Constructor.CheckBase): Don't crash when static ctor has parameters.
10918         (FieldBase.ResolveInitializer): Resolves initializer.
10919         (FieldBase.HasDefaultInitializer): New property.
10920
10921         * cs-parser.jay: Removed message.
10922
10923         * expression.cs (CompilerGeneratedThis): New specialization.
10924
10925         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
10926
10927 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
10928
10929         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
10930
10931 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
10932
10933         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
10934         be now EnumConstants only.
10935
10936 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
10937
10938         * attribute.cs, driver.cs: Reset more caches.
10939
10940 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10941
10942         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
10943
10944 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10945
10946         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
10947         for easier reuse. Updated all overrides.
10948         (IntegralConstant): New base class for all integral constants.
10949         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
10950         of the constant range, report custom error.
10951         (UIntConstant.Reduce): Fixed uint conversion.
10952
10953         * ecore.cs, literal.cs: Reduce updates.
10954
10955 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10956
10957         A fix for #75813.
10958
10959         * class.cs (Constructor.Define): Removed extra if for default ctors.
10960         A patch from Atsushi Enomoto.
10961
10962 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10963
10964         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
10965         GetAttributableValue.
10966
10967         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
10968         when required.
10969
10970         * convert.cs (ImplicitConversionRequired): Error message moved to
10971         DoubleLiteral.
10972
10973         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
10974         automatic implicit conversion of an output value.
10975         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
10976
10977         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
10978         conversion.
10979         (TypeOf.GetAttributableValue): Add extra handling for object type.
10980
10981         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
10982         special error message.
10983
10984 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
10985
10986         * class.cs (Constructor.Emit): Don't crash when struct ctor is
10987         InternalCall.
10988         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
10989         compatible with MS runtime.
10990
10991 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
10992
10993         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
10994         attribute arguments here.
10995
10996         * class.cs (Indexer.Define): The check was moved to attribute class.
10997
10998 2006-03-22  Marek Safar  <marek.safar@seznam.cz>
10999
11000         * assign.cs, class.cs, codegen.cs, convert.cs, decl.cs, ecore.cs,
11001         expression.cs, typemanager.cs: Minor changes from gmcs to make merging
11002         easier.
11003
11004 2006-03-22  Raja R Harinath  <rharinath@novell.com>
11005
11006         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
11007         mcs to keep code differences small.
11008         * attribute.cs (Attribute.GetParameterDefaultValue): New.
11009         * typemanager.cs (parameter_default_value_attribute_type): New.
11010         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
11011         CS1908 check.
11012
11013 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
11014
11015         * expression.cs (StringConcat.Append): Reverted back to no warning state.
11016
11017 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
11018
11019         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
11020
11021         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
11022         the blocks too.
11023
11024 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
11025
11026         * doc-bootstrap.cs : fix build.
11027
11028 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
11029
11030         * expression.cs (StringConcat.Append): Issue a warning when empty string
11031         is going to append.
11032
11033 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
11034
11035         * assign.cs (CompoundAssign.ResolveSource): Removed.
11036
11037         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
11038         clean up.
11039
11040         * class.cs (TypeContainer.FindMethods): Removed.
11041         (TypeContainer.CheckMemberUsage): Made static.
11042
11043         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
11044
11045         * constant.cs (CheckRange): Removed unused type argument.
11046         (CheckUnsigned): Removed unused type argument.
11047
11048         * cs-parser.jay: Updated after MemberAccess clean up.
11049         Uses Length for empty string test.
11050
11051         * cs-tokenizer.cs: Uses Length for empty string test.
11052         (IsCastToken): Made static.
11053         (is_hex): Made static.
11054         (real_type_suffix): Made static.
11055
11056         * decl.cs (SetupCache): Made static.
11057         (OnGenerateDocComment): Removed unused ds argument.
11058
11059         * delegate.cs (VerifyDelegate): Removed unused argument.
11060
11061         * doc.cs: Uses Length for empty string test.
11062
11063         * driver.cs: Uses Length for empty string test.
11064
11065         * enum.cs (IsValidEnumType): Made static
11066
11067         * expression.cs (EnumLiftUp): Removed unused argument.
11068         (ResolveMethodGroup): Ditto.
11069         (BetterConversion): Ditto.
11070         (GetVarargsTypes): Ditto.
11071         (UpdateIndices): Ditto.
11072         (ValidateInitializers): Ditto.
11073         (MemberAccess.ctor): Ditto.
11074         (GetIndexersForType): Ditto.
11075
11076         * flowanalysis.cs: (MergeFinally): Removed unused argument.
11077
11078         * iterators.cs: Updated after MemberAccess clean up.
11079
11080         * location.cs: Uses Length for empty string test.
11081
11082         * namespace.cs: Uses Length for empty string test.
11083
11084          * report.cs (CheckWarningCode): Made static.
11085
11086         * statement.cs (LabeledStatement): Removed unused argument.
11087
11088         * typemanager.cs (FilterNone): Removed.
11089
11090 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
11091
11092         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
11093         obsolete.
11094
11095         * class.cs: Updated.
11096
11097 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
11098
11099         * cs-parser.jay.cs: __arglist is not allowed for delegates.
11100
11101 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
11102
11103         A fix for #77822.
11104
11105         * expression.cs (VerifyArgumentsCompat): Reverted to double error
11106         reporting, it's more tricky than I thought.
11107
11108 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
11109
11110         A fix for #77816.
11111
11112         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
11113         host container.
11114         (AnonymousMethod.ImplicitStandardConversionExists): New method.
11115         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
11116         Add more error reporting; Fixed issue with params.
11117
11118         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
11119
11120         * cs-parser.jay: AnonymousMethod requires host container.
11121
11122         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
11123
11124 2006-03-18  Raja R Harinath  <harinath@gmail.com>
11125
11126         * class.cs: Change 'TypeContainer ds' constructor argument to
11127         'DeclSpace parent'.  Some classes were missed below due to
11128         different naming convention.
11129
11130         * class.cs (MemberCore.Parent): Delete.  This makes the
11131         ParentContainer changes below enforceable by the compiler.
11132
11133         Treat pointers to enclosing declaration space as 'DeclSpace', not
11134         'TypeContainer'.
11135         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
11136         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
11137
11138         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
11139         of TypeContainer.
11140         (Block.AddThisVariable): Likewise.
11141         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
11142         (AbstractPropertyEventMethod.Emit): Likewise.
11143         (AbstractPropertyEventMethod.EmitMethod): Likewise.
11144         (GetMethod.Define, SetMethod.Define): Likewise.
11145         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
11146         (DelegateMethod.EmitMethod): Likewise.
11147
11148         Fix regression test-partial-13.cs.
11149         Rationalize use of PartialContainer.  Ensure that the partial
11150         class semantics can be tied to type-correctness, i.e., any
11151         violation will cause a compile error.
11152         * class.cs, const.cs: Access all fields that belong to class
11153         TypeContainer via ParentContainer.  Arguments of EmitContexts and
11154         Resolve()-like functions still use 'Parent'.
11155
11156         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
11157         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
11158         (PropertyMethod.CheckModifiers): Remove unused argument.
11159         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
11160         DeclSpace.
11161
11162 2006-03-17  Raja R Harinath  <harinath@gmail.com>
11163
11164         Make semantics of PartialContainer simpler.
11165         * decl.cs (DeclSpace.IsPartial): Remove.
11166         * class.cs (TypeContainer.IsPartial): Likewise.
11167         (TypeContainer..ctor): Set PartialContainer to point to self.
11168         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
11169         (TypeContainer.FindNestedType): Likewise.
11170         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
11171
11172 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
11173
11174         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
11175
11176 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
11177
11178         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
11179         classes.
11180
11181 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
11182
11183         * class.cs (Operator.Define): An error for base conversion was not
11184         reported correctly.
11185
11186 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
11187
11188         * iterator.cs : yield break is allowed in try statement which has
11189           catch clauses. Fixed bug #77767.
11190
11191 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
11192
11193         A fix for #77593, #77574.
11194
11195         * class.cs (MethodCore.CheckBase): Another if for operator.
11196
11197 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
11198
11199         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
11200         were not resolved
11201
11202         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
11203         (DelegateCreation.ImplicitStandardConversionExists): New method for just
11204         conversion test.
11205         
11206         *ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
11207         not needed.
11208
11209         * assign.cs, constant.cs, convert.cs, delegate.cs, expression.cs:
11210         Updated after another emitcontext usage was clean up. It should help us to
11211         synchronize with gmcs easier.
11212
11213 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
11214
11215         A fix for #77353.
11216
11217         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
11218         (Event.Define): ditto
11219         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
11220
11221         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
11222         Removed redundant code and set NewSlot for Invoke method too.
11223
11224         * parameter.cs (Parameters.ctor): Add custom, type ctor.
11225         (Parameters.MergeGenerated): New method. Use this method when you merge
11226         compiler generated argument with user arguments.
11227
11228 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
11229
11230         * attribute.cs (ResolveAsTypeTerminal): Removed.
11231
11232         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
11233         specialization for predefined types; 30% speed up.
11234         Finally placed obsolete check to right place.
11235         (Expression.ResolveType): Removed.
11236
11237         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
11238         Updated after ResolveType was removed.
11239
11240         * expression.cs (Cast.ctor): Check void cast.
11241         (Binary.ResolveAsTypeTerminal): Is never type.
11242         (Conditional.ResolveAsTypeTerminal): Is never type.
11243
11244         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
11245
11246 2006-03-01  Raja R Harinath  <rharinath@novell.com>
11247
11248         Fix #77679.
11249         * expression.cs (ParameterReference.DoResolveBase): Change return
11250         type to bool.
11251         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
11252         Update.
11253
11254         Fix #77628.
11255         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
11256
11257         Fix #77642.
11258         * typemanager.cs (GetFullNameSignature): Don't nullref on
11259         protected accessors.
11260
11261 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
11262
11263         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
11264         these two separated members to simplify the code.
11265         (Attribute.Resolve): Refactored to use new fields and methods.
11266         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
11267         implemented obsolete attribute checking.
11268         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
11269         implemented obsolete checking again. It look line never ending quest ;-)
11270         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
11271
11272         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
11273
11274         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
11275
11276         *class.cs (Property.Define): Add RegisterProperty call.
11277
11278         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
11279         argument groups (only 2).
11280
11281         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
11282         encoding expression to arguments.
11283         (Expression.ExprClassToResolveFlags): Just turned to property.
11284
11285         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
11286         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
11287         optimized as well as implemented support for zero-length attributes.
11288
11289         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
11290         Add caching of PropertyInfo's.
11291
11292 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
11293
11294         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
11295         error multiple times.
11296
11297 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
11298
11299         New partial class implementation.
11300         A fix for #77027, #77029, #77403
11301
11302         * attribute.cs (Attributable): Made attributes protected.
11303
11304         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
11305         the replacements of ClassPart and PartialContainer.
11306         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
11307         (TypeContainer.AddInterface): Ditto.
11308         (TypeContainer.AddPartial): The main method for partial classes. It checks
11309         for errors and merges ModFlags and attributes. At the end class is added to
11310         partial_parts list.
11311         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
11312         required here.
11313         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
11314         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
11315         from the rest of partial classes.
11316         (TypeContainer.GetClassBases): Simplified.
11317         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
11318         DefineType.
11319         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
11320         (TypeContainer.HasExplicitLayout): Uses Flags now.
11321         (PartialContainer): Removed.
11322         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
11323         (StaticClass): Was merged with Class.
11324         (Class.GetClassBases): class and static class bases are verified here.
11325         (Class.TypeAttr): Added static attributes when class is static.
11326         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
11327         (MemberBase): In some cases we need to call parent container for partial
11328         class. It should be eliminated but it's not easy now.
11329
11330         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
11331
11332         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
11333         partial classed to accumulate class comments.
11334         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
11335
11336         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
11337
11338         * driver.cs (MainDriver): Tree.GetDecl was removed.
11339
11340         * modifiers.cs (Modifiers): Add partial modifier.
11341
11342         * tree.cs (Tree.decl): Removed.
11343         (RootTypes): Started to use this class more often for root types
11344         specializations.
11345
11346 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
11347
11348         A fix for #77615
11349
11350         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
11351         external interface does not have an attribute.
11352
11353 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
11354
11355         Another prerequisites for new partial classs implementation.
11356         
11357         * attribute.cs (Attribute.Equal): Implemented.
11358         (Attribute.Emit): Changed as attributes can be applied more than twice.
11359         (Attributes.Emit): Check for duplicate attributes here.
11360
11361         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
11362         as a parameter, clean-up.
11363
11364 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
11365
11366         A fix for #77485
11367
11368         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
11369         contains obsolete attribute check which can in some cases look for base
11370         type of current class which is not initialized yet.
11371         (TypeContainer.BaseType): Replacement of ptype.
11372
11373         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
11374
11375 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
11376
11377         First of prerequisites for new partial classs implemention.
11378         
11379         * attribute.cs (Attributable): Extended by ResolveContext;
11380         Attributes finally have correct context for resolving in all cases.
11381         (AttachTo): Attribute owner is assigned here.
11382
11383         * codegen.cs (IResolveContext): Introduce new interface to hold
11384         all information needed in resolving phase.
11385         (EmitContext): Implements IResolveContext; more clean-up needed here.
11386         
11387         * decl.cs (MemberCore): Implemented IResolveContext.
11388
11389         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
11390         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
11391         parameter.cs, statement.cs, tree.cs, typemanager.cs:
11392         Refactored to use new IResolveContext instead of EmitContext; cleanup
11393
11394 2006-02-06  Miguel de Icaza  <miguel@novell.com>
11395
11396         * codegen.cs (EmitScopeInitFromBlock): check here the
11397         capture_context, there is no need to make two calls to the
11398         EmitContext. 
11399
11400         * anonymous.cs: Add some debugging messages that might help me
11401         track other instances of this problem in the future (the
11402         regression of test 467).
11403
11404         * cs-parser.jay: track the variable block, as we need to initalize
11405         any captured variables declared in this block for the "catch"
11406         portion of the "Try" statement.
11407
11408         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
11409         scope initialization for captured variables. 
11410
11411         Also, move the emit for the variables after the block location has
11412         been marked.
11413
11414 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
11415
11416         * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
11417
11418 2006-02-02  Miguel de Icaza  <miguel@novell.com>
11419
11420         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
11421         commit yesterday, the initialization for the roots is necessary.
11422         What is not necessary is the scope activation.
11423
11424 2006-02-02  Raja R Harinath  <rharinath@novell.com>
11425
11426         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
11427         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
11428         CS0206 checks.
11429         (Argument.Resolve): Remove CS0206 checks.
11430
11431 2006-02-01  Miguel de Icaza  <miguel@novell.com>
11432
11433         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
11434         scopes for all the roots, the scopes will now be emitted when the
11435         Blocks are entered.   [This change was wrong, fixed on 2006-02-02]
11436
11437         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
11438         code.  This reduces a lot of existing cruft.
11439         
11440         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
11441         that the ScopeInfo is generated as we enter the scope, not at the
11442         time of use, which is what we used to do before.
11443
11444         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
11445         every time a Block is about to be emitted if we have a
11446         CaptureContext. 
11447
11448 2006-02-01  Raja R Harinath  <rharinath@novell.com>
11449
11450         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
11451         (Reset): Update.
11452         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
11453
11454         * typemanager.cs (cons_param_array_attribute): Make private.
11455         (Reset): Set it to null.
11456         (InitCoreHelpers): Don't initialize it.
11457         (ConsParamArrayAttribute): New.  Initialize it as needed.
11458         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
11459
11460 2006-01-31  Miguel de Icaza  <miguel@novell.com>
11461
11462         * expression.cs: There might be errors reported during the
11463         selection of applicable methods.  If there are errors, do not
11464         continue execution as it will lead the compiler to crash.
11465
11466 2006-01-30  Miguel de Icaza  <miguel@novell.com>
11467
11468         * expression.cs: Member access is not allowed on anonymous
11469         methods.  Fixes #77402.
11470
11471 2006-01-30  Raja R Harinath  <rharinath@novell.com>
11472
11473         Fix #77401
11474         * cs-parser.jay (VariableDeclaration): Don't set
11475         current_array_type to null.
11476         (field_declaration, event_declaration, declaration_statement):
11477         Set it to null here.
11478
11479 2006-01-28  Raja R Harinath  <harinath@gmail.com>
11480
11481         * typemanager.cs (GenericParameterPosition): New.
11482         * doc.cs: Use it.
11483
11484 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
11485
11486         * doc.cs : To process "include" elements, first we should create
11487           another list than XmlNodeList, because it could result in node
11488           removal, which could result in that the XmlNodeList gives up
11489           yielding next node.
11490
11491           (Also made code identical to gmcs again.)
11492
11493 2006-01-25  Miguel de Icaza  <miguel@novell.com>
11494
11495         * ecore.cs: Introduce an error report that we were not catching
11496         before, if not silent, we must report the error.  Gonzalo ran into
11497         it.
11498
11499 2006-01-23  Miguel de Icaza  <miguel@novell.com>
11500
11501         A fix for bug: #76957
11502         
11503         * iterators.cs (MoveNextMethod.CreateMethodHost): call
11504         ComputeMethodHost before creating the method, this is a new
11505         requirement. 
11506
11507         * anonymous.cs (AnonymousContainer): Now we track all the scopes
11508         that this method references (RegisterScope).  The actual scope
11509         where the method is hosted is computed with the ComputeMethodHost
11510         before we create the method.
11511
11512         Moved the Deepest routine here.
11513
11514         (AnonymousContainer.ComputeMethodHost): New routine used to
11515         compute the proper ScopeInfo that will host the anonymous method.
11516
11517         (ScopeInfo): Deal with multiple roots.  The problem was that we
11518         did not have a unique root where all ScopeInfos could be hanged
11519         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
11520         of roots.  
11521
11522         Remove AdjustMethodScope which is now computed at the end.  Remove
11523         LinkScope which did a partial link, instead link all ScopeInfos
11524         before code generation from the new "LinkScopes" routine. 
11525
11526         Simplify all the Add* routines as they no longer need to maintain
11527         the tree, they just need to record that they are using variables
11528         from a ScopeInfo.
11529
11530         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
11531         routines to produce the forest of ScopeInfo trees.
11532
11533         * class.cs (TypeContainer.AppendMethod): This is just like
11534         AddMethod, but ensures that an interface implementation method
11535         (IEnumerable.XXX) is not inserted at the beginning of the queue of
11536         methods, but at the end.
11537
11538         We use this functionality to ensure that the generated MoveNext
11539         method in the iterator class is resolved/emitted before the
11540         enumerator methods created.   
11541
11542         This is required because the MoveNext method computes the right
11543         ScopeInfo for the method.  And the other methods will eventually
11544         need to resolve and fetch information computed from the anonymous
11545         method. 
11546
11547 2006-01-21  Raja R Harinath  <harinath@gmail.com>
11548             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
11549
11550         Fix rest of #76995.
11551         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
11552         the 'aliases' hash.
11553         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
11554         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
11555
11556 2006-01-18  Raja R Harinath  <rharinath@novell.com>
11557
11558         Fix #76656, cs0231-2.cs.
11559         * cs-parser.jay (formal_parameter_list): Make error case catch
11560         more issues.
11561         (parenthesized_expression_0): Add CS1026 check.
11562         (invocation_expression): Remove unused { $$ = lexer.Location }.
11563
11564 2006-01-17  Raja R Harinath  <rharinath@novell.com>
11565
11566         Fix #76824.
11567         * cs-parser.jay (statement_expression): Don't list out the
11568         individual statement-expressions.  Convert syntax error into
11569         CS0201 check.
11570
11571 2006-01-16  Raja R Harinath  <rharinath@novell.com>
11572
11573         Fix #76874.
11574         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
11575         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
11576         CheckIntermediateModification.
11577         (FieldExpr.DoResolve): Add new two-argument version that
11578         allows us to resolve the InstanceExpression as an lvalue.
11579         The one-argument variant is now just a wrapper.
11580         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
11581         Resolve the lhs as an lvalue if the it has a value type.
11582         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
11583         from Assign.DoResolve.
11584         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
11585         resolved as an lvalue.
11586         (PropertyExpr.DoResolve): Update.
11587         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
11588         has a value type.  Move CS1612 check here from
11589         CheckIntermediateModification.
11590         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
11591         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
11592         'right_side' of a ResolveLValue on an 'out' argument.
11593         (EmptyExpression.LValueMemberAccess): New.  Used as the
11594         'right_side' of a propagated ResolveLValue on a value type.
11595         (LocalVariableReference.DoResolveBase): Recognize
11596         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
11597         Add CS1654 check.
11598         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
11599         EmptyExpression.Null.
11600
11601 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
11602
11603         * typemanager.cs : added IsGenericParameter(). In mcs it always
11604           return false.
11605         * doc.cs : for generic parameters, use GenericParameterPosition,
11606           not FullName.
11607
11608 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
11609
11610         * expression.cs: Fix Console.WriteLine ((this = x).foo);
11611
11612 2006-01-12  Miguel de Icaza  <miguel@novell.com>
11613
11614         This fixes the problem where we used ldfld instead of ldflda to
11615         load the "THIS" pointer on captured parameters, when THIS is a
11616         value type.  See bug #77205.
11617         
11618         * iterators.cs (CapturedThisReference.Emit): Pass false to
11619         EmitThis (we do not need the address).
11620
11621         * codegen.cs (EmitThis): it needs to know whether we need the
11622         address of `this' or not.  This is used by value types.  
11623
11624         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
11625         every other call passes false.
11626
11627 2006-01-12  Raja R Harinath  <rharinath@novell.com>
11628
11629         Fix #77221.
11630         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
11631         GetOverride.
11632         * expression.cs (Invocation.OverloadResolve): Update.
11633         (Invocation.DoResolve): Avoid double resolution of invocation.
11634
11635 2006-01-11  Raja R Harinath  <rharinath@novell.com>
11636
11637         Fix #77180.
11638         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
11639         unary negation of floating point types as 0-expr; negation cannot
11640         overflow in floating point types.
11641
11642         Fix #77204.
11643         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
11644         on operands of 'void' type.
11645
11646         Fix #77200.
11647         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
11648         and ExclusiveOr for boolean constants too.
11649
11650 2006-01-09  Raja R Harinath  <rharinath@novell.com>
11651
11652         Fix #75636.
11653         * expression.cs (Invocation.OverloadResolve): Replace reflected
11654         override methods with their base virtual methods, rather than
11655         skipping over them.
11656         * typemanager.cs (TypeManager.GetOverride): New.
11657
11658 2006-01-05  Jb Evain  <jbevain@gmail.com>
11659
11660         * class.cs (Property.Define, Indexer.Define): do not tag the
11661         properties as SpecialName | RTSpecialName.
11662
11663 2006-01-04  Miguel de Icaza  <miguel@novell.com>
11664
11665         * class.cs (MethodCore.IsDuplicateImplementation): This method was
11666         doing a low-level comparission of parameter types.  It was lacking
11667         a check for __argslist. 
11668
11669 2005-12-30  Miguel de Icaza  <miguel@novell.com>
11670
11671         * expression.cs (ParameterReference.DoResolveBase): Allow
11672         reference parameters if they are local to this block. 
11673
11674         This allows the ref and out parameters of a delegate to be used in
11675         an anonymous method, for example:
11676
11677         delegate void set (out int x);
11678
11679         set s = delegate (out int x){
11680                 x = 0;
11681         };
11682
11683         This is used by functionality introduced late in the C# language.
11684         
11685         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
11686         method that take ref and out parameters. 
11687
11688         Fixes #77119 which was a late change in the spec.
11689
11690 2005-12-23  Miguel de Icaza  <miguel@novell.com>
11691
11692         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
11693         parent if its the same scope.  Fixes #77060.
11694
11695 2005-12-21  Miguel de Icaza  <miguel@novell.com>
11696
11697         * driver.cs: Report the case of no source files and no -out:
11698         argument provided.
11699
11700 2005-12-20  Raja R Harinath  <rharinath@novell.com>
11701
11702         Fix #77035.
11703         * expression.cs (ComposedCast.GetSignatureForError): Define.
11704
11705 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
11706
11707         Fix #76995
11708
11709         * namespace.cs (NamespaceEntry): Add extern_aliases as a
11710         ListDictionary, to contain the ExternAliasEntry entries (in
11711         addition to the NamespaceEntry.aliases hashtable). This field is
11712         shared between the original entry and its doppelganger (bodyless 
11713         copy of it).
11714         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
11715         extern_aliases field.
11716         (NamespaceEntry.Lookup): Move the IsImplicit check after the
11717         lookup in extern_aliases.
11718
11719 2005-12-16  Raja R Harinath  <rharinath@novell.com>
11720
11721         Fix #77006.
11722         * class.cs (TypeContainer.Mark_HasEquals): New.
11723         (TypeContainer.Mark_HasGetHashCode): New.
11724         (ClassPart): Override them.
11725         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
11726
11727         Fix #77008.
11728         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
11729         'parent' argument to the base constructor.
11730
11731         Remove all mention of TypeContainer from decl.cs.
11732         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
11733         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
11734         (DeclSpace.DeclSpace): Likewise.
11735         (DeclSpace.DefineMembers): Remove unused argument.
11736         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
11737         debugging check -- we don't care if the debug code throws an
11738         InvalidCastException instead of an InternalErrorException.
11739         * class.cs (TypeContainer.DefineMembers): Update to changes.
11740         (TypeContainer.DoDefineMembers): Likewise.
11741         (TypeContainer.GetMethods): Likewise.
11742         (PropertyMember.Define): Likewise.
11743         (MemberBase.Parent): New property that forwards to
11744         MemberCore.Parent, but ensures that we get a TypeContainer.
11745         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
11746         (RootContext.PopulateTypes): Likewise.  Remove special case code
11747         for !RootContext.StdLib: DefineMembers is idempotent.
11748
11749 2005-12-14  Miguel de Icaza  <miguel@novell.com>
11750
11751         * convert.cs (ExplicitConversionCore): Check the return value from
11752         ExplicitConversionCore which can return null on failure.  Fixes #76914
11753
11754 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
11755
11756         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
11757
11758 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
11759
11760         * doc.cs : The search for referenced namespace was insufficient to
11761           get global one as it used to do. Fixed bug #76965.
11762
11763 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
11764
11765         * doc.cs : check name in cref in the last phase that whether it is
11766           namespace or not.
11767
11768 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11769
11770         * cs-tokenizer.cs : reverted the latest change: it somehow broke
11771           Mono.C5.
11772
11773 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11774
11775         * doc.cs : so it turned out that we cannot skip override check for 
11776           interface members. Fixed bug #76954.
11777
11778 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11779
11780         * cs-tokenizer.cs : fixed bug #75984:
11781           - #warning and #error should not be handled when the source line
11782             is disabled.
11783           - #line is not checked strictly when the source line is disabled.
11784           - #define and #undef is on the other hand checked strictly at any
11785             state.
11786
11787 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
11788
11789         * cs-tokenizer.cs : missing Location (actually, filename) in one of
11790           CS1027 report.
11791
11792 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11793
11794         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
11795
11796         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
11797         event initializers.
11798         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
11799         (FieldBase.Initializer): Initializer is now optional.
11800         (EventField.Define): Only event field can have initializer.
11801
11802         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
11803
11804         * const.cs (Const): Reuse initializer.
11805
11806         * cs-parser.jay: Updated after FieldBase changes.
11807         Added current_array_type to simplify array initializers.
11808
11809         * ecore.cs (NullCast.IsDefaultValue): Implemented.
11810
11811         * expression.cs, iterators.cs: Updated.
11812
11813         * namespace.cs (NamespaceEntry): Made UsingFound private.
11814
11815 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11816
11817         * parameterCollection.cs: Obsolete, removed.
11818         * parser.cs: Obsolete, removed.
11819
11820 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11821
11822         Fix #76849.
11823         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
11824
11825         * enum.cs (Enum.Define): Set obsolete context here.
11826
11827 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
11828
11829         * doc.cs :
11830           - FindDocumentedMember() now expects 1) paramList as null
11831             when "we don't have to check the number of parameters" and
11832             2) Type.EmptyTypes when "there is no arguments".
11833           - Introduced FoundMember struct to hold the exact type which was
11834             used to find the documented member (the above change broke
11835             test-xml-044; it might be better just to use DeclaringType than
11836             what MS does, like this change does, but it depends on usage.)
11837
11838 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
11839
11840         * doc.cs : documented member might be from DeclaringType for nested
11841           types. Fixed bug #76782.
11842
11843 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
11844
11845         * anonymous.cs: Have the param code handle leaving copies on the
11846         stack etc. Allows anonymous params to take part in the assignment
11847         code (++, +=, etc). Fixes bug #76550
11848
11849         * expression.cs: Handle the prepare_for_load/leave_copy by passing
11850         it down to the anon code.
11851
11852         * iterators.cs: Use dummy var here
11853
11854         * codegen.cs: Handle new vars
11855
11856 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
11857
11858         Fix #76849.
11859         * class.cs (MethodData.Define): Set proper Obsolete context.
11860
11861         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
11862         obsolete context.
11863         (FieldExpr.DoResolve): Ditto.
11864
11865 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
11866
11867         Fix #76849.
11868         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
11869         parent is not obsolete.
11870
11871 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
11872
11873         * doc.cs : (FindDocumentedMember) find parameterless members first
11874           and get CS0419 in the early stage. Fixed first case of bug #76727.
11875
11876 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
11877
11878         Fix #76859.
11879         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
11880         no error was reported.
11881
11882         *expression.cs (Binary.DoResolve): left can be null.
11883
11884 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
11885
11886         Fix #76783.
11887         * class.cs (MethodData.Emit): Parameters should be labeled first.
11888
11889 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
11890
11891         Fix #76761.
11892         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
11893
11894 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
11895
11896         * attribute.cs (AreParametersCompliant): Moved to Parameter.
11897
11898         * class.cs (MethodCore): Parameter clean up.
11899         (IMethodData): Added ParameterInfo.
11900         (MethodData): Parameter clean up.
11901         (Indexer.Define): Parameter clean up.
11902
11903         * anonymous.cs,
11904         * codegen.cs,
11905         * cs-parser.jay,
11906         * decl.cs,
11907         * doc.cs,
11908         * ecore.cs,
11909         * flowanalysis.cs,
11910         * iterators.cs,
11911         * pending.cs,
11912         * statement.cs,
11913         * typemanager.cs: Parameter clean up.
11914
11915         * delegate.cs (Define): Get rid of duplicated code.
11916
11917         * expression.cs (ParameterReference): Removed useless parameters
11918         and simplified.
11919         (Invocation): Ditto.
11920
11921         * parameter.cs (ParamsParameter): New class, params specialization.
11922         (ArglistParameter): Attemp to separate arglist.
11923         (Parameter): Refactored to be reusable and faster.
11924         (Parameter.Modifier): Made understandable.
11925         (Parameters): Changed to be used as a class for `this' assembly
11926         parameters. Refactored to use new specialized classes.
11927
11928         * support.cs (ParameterData): Added Types property.
11929         (InternalParameters): Deleted.
11930
11931 2005-08-20  Martin Baulig  <martin@ximian.com>
11932
11933         Merging this patch from GMCS to fix #75867.
11934
11935         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
11936         scope if we don't already have it.
11937
11938 2005-11-17  Martin Baulig  <martin@ximian.com>
11939
11940         * anonymous.cs
11941         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
11942         inherit the scope from our parent.  Fixes #76653.
11943
11944 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11945
11946         * doc.cs : the previous patch does not actually fix the bug.
11947           PropertyInfo override check is now implemented and really fixed it.
11948         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
11949
11950 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11951
11952         * doc.cs : apply "override filter" also to properties.
11953           Fixed bug #76730.
11954
11955 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11956
11957         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
11958           no need to check overrides. For classes, omit those results from 
11959           interfaces since they must exist in the class. Fixed bug #76726.
11960
11961 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11962
11963         * typemanager.cs : (GetFullNameSignature) differentiate indexers
11964           with different parameters. Fixed the second problem in #76685.
11965
11966 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11967
11968         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
11969           get expected 'protected' access in CheckValidFamilyAccess()).
11970           Fixed bug #76692.
11971
11972 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11973
11974         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
11975           Fixed bug #76705.  CS1569 was incorrectly commented out.
11976
11977 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
11978
11979         * doc.cs : use Invocation.IsOverride() to do real override check.
11980         * expression.cs : made Invocation.IsOverride() internal.
11981
11982 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
11983
11984         * doc.cs : use TypeManager.FindMembers() instead of (possible)
11985           TypeBuilder.FindMembers() and filter overriden base members out.
11986           Fixed bug #76990.
11987
11988 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11989
11990         * doc.cs : ref/out parameters are represented as '@' (instead of
11991           '&' in type FullName). Fixed bug #76630 (additionally crefs).
11992
11993 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11994
11995         * doc.cs : when there was no '.' in cref to methods in doc comment,
11996           then parameters were missing in the output. Fixed bug #76691.
11997
11998 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11999
12000         * driver.cs : don't output docs when there is an error.
12001           Fixed bug #76693.
12002
12003 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
12004
12005         * doc.cs :
12006           Now it should detect indexers. Fixed primary concern in bug #76685.
12007           Fixed CS0419 message to not show the identical member signature in
12008           the message.
12009
12010 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
12011
12012         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
12013           instead of Type.FindMembers() since it does not handle events.
12014           Fixed bug #71604.
12015
12016 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
12017
12018         * codegen.cs: Fixed typo (speficied -> specified).
12019
12020 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
12021
12022         Fix #76369.
12023         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
12024
12025 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
12026
12027         * attribute.cs: Changed error message.
12028
12029         * cs-tokenizer.cs: One more check.
12030
12031 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
12032
12033         * statement.cs (Block.Resolve): Ignore empty statement.
12034
12035 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
12036
12037         * report.cs: Made error/warning methods more strict to avoid
12038         their misuse.
12039
12040         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
12041         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
12042         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
12043         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
12044
12045 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
12046
12047         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
12048         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
12049
12050         * class.cs (TypeContainer.IsComImport): New property.
12051         (Constructor.Define): Create proper ctor for ComImport types.
12052
12053         * expression.cs (New.CheckComImport): Fixed.
12054
12055 2005-11-07  Miguel de Icaza  <miguel@novell.com>
12056
12057         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
12058         that a parameter has been captured does not mean that we do not
12059         have to do the rest of the processing.  This fixes the second part
12060         of #76592.  If there was another anonymous method capturing
12061         values in the past, the Scope would never be set for the second
12062         method that captured the same parameter.
12063
12064         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
12065         properly manipulate the stack.   Second part of fix for #76592.
12066
12067         * expression.cs (New): Add support for invoking "new" on
12068         interfaces that have been flagged with the ComImport attribute and
12069         the CoClass.  Fixes #76637 
12070
12071         * statement.cs (Try.DoEmit): When a variable is captured, do not
12072         try to emit the vi.LocalBuilder variable as it has been captured.
12073         Create a temporary variable and store the results on the
12074         FieldBuilder.  Fixes #76642
12075
12076 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
12077
12078         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
12079
12080         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
12081
12082         * expression.cs (Binary.DoResolve): Added && optimalization.
12083     
12084         * typemanager.cs (AddUserType): Removed useless argument.
12085
12086 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
12087
12088         * statement.cs (Block.variables): Uses ListDictionary.
12089
12090 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
12091
12092         Fix #75969.
12093         * class.cs (PartialContainer.EmitType): Customized to emit
12094         security attributes.
12095         (ClassPart.ApplyAttributeBuilder): Transform security attribute
12096         for partial classes.
12097
12098 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
12099
12100         Fix #76599.
12101         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
12102         access has to be fixed.
12103         
12104         * typemanager.cs (IsUnmanagedType): Wrong common field type.
12105
12106 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
12107
12108         Fix #76590.
12109         * ecore.cs (NullCast.Reduce): Implemented.
12110
12111         * expression.cs (ArrayCreation.CheckIndices): Correcly check
12112         constant type.
12113         
12114         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
12115         properly.
12116         (Foreach.Resolve): Catch null properly.
12117
12118 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
12119  
12120         * cs-tokenizer.cs: Warning text fix.
12121
12122         * driver.cs: AllWarningNumbers exposed on public interface.
12123
12124         * report.cs (): Reviewed warning numbers.
12125         (IsValidWarning): Use binary search.
12126
12127 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
12128  
12129         * driver.cs: Implemeted resource visibility.
12130         (Resources): New class for code sharing between /res: and
12131         /linkres:
12132  
12133 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
12134
12135         Fix #76568.
12136         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
12137         folding.
12138         
12139         * convert (Convert.ImplicitReferenceConversion): NullCast holds
12140         contants only.
12141         
12142         * ecore.cs (NullCast): Child is contant only.
12143         
12144         * literal.cs (NullLiteral.Reduce): null can be converted to any
12145         reference type.
12146
12147 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
12148
12149         * driver.cs: Use Encoding.Default as default code page instead
12150           of ISO-28591.
12151
12152 2005-10-27  Raja R Harinath  <rharinath@novell.com>
12153
12154         Fix #76085.
12155         * expression.cs (Invocation.Error_InvalidArguments): Handle
12156         __arglist parameters.
12157         (Invocation.VerifyArgumentsCompat): Likewise.
12158         * support.cs (ReflectionParameters.GetSignatureForError): Print
12159         __arglist parameters.
12160         (InternalParamters.GetSignatureForError): Likewise.
12161         * parameter.cs (Parameters.GetSignatureForError): Likewise.
12162
12163 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
12164
12165         * attribute.cs (GetPropertyValue): Made public.
12166
12167         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
12168         Resolve.
12169         Add new property WrapNonExceptionThrows to handle 2.0 assembly
12170         attribute.
12171         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
12172         is not defined.
12173         
12174         * driver.cs: Reflect method name change.
12175         
12176         * statement.cs (Try.Resolve): Warn when try has both general
12177         exception handlers.
12178         
12179         * typemanager.cs: runtime_compatibility_attr_type new predefined
12180         type.
12181
12182 2005-10-26  Raja R Harinath  <harinath@gmail.com>
12183
12184         Fix #76419.
12185         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
12186         treat it as an empty parameter list.
12187
12188 2005-10-26  Raja R Harinath  <rharinath@novell.com>
12189
12190         Fix #76271.     
12191         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
12192         ResolveAsTypeStep silent.
12193         * statement.cs (Block.AddConstant): Mark block as used.
12194         (Block.ResolveMeta): Avoid piling on error messages
12195         if a constant initializer resolution fails.
12196
12197 2005-10-25  Raja R Harinath  <rharinath@novell.com>
12198
12199         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
12200         Remove.
12201         (NamespaceEntry.VerifyAllUsing): New.
12202         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
12203         behaviour.  Delegates actual resolution of alias to ...
12204         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
12205         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
12206         Update.
12207         * driver.cs (Driver.MainDriver): Update.
12208         
12209         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
12210         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
12211         property.
12212         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
12213         Remove.
12214         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
12215         RootNamespace.DefineNamespacesForAll.
12216
12217 2005-10-24  Raja R Harinath  <harinath@gmail.com>
12218
12219         * typemanager.cs (assemblies, external_aliases, modules)
12220         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
12221         (ComputeNamespaces, GetRootNamespace): Remove extra staging
12222         overhead.  Move resposibility ...
12223         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
12224         * driver.cs, attribute.cs, codegen.cs: Update to changes.
12225
12226 2005-10-23  Raja R Harinath  <harinath@gmail.com>
12227
12228         * namespace.cs (RootNamespace.all_namespaces): Renamed from
12229         cached_namespaces.  Improve usage.
12230         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
12231         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
12232         Move from GlobalRootNamespace and simplify.
12233         (RootNamespace.Global): Make instance variable.
12234         (RootNamespace.RootNamespace): Add "alias name" parameter.
12235         (GlobalRootNamespace): Simplify drastically.
12236         (Namespace.Lookup): Don't use GetNamespace.
12237         * typemanager.cs (GetRootNamespace): Rename from
12238         ComputeNamespaceForAlias.
12239         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
12240
12241 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
12242
12243         * anonymous.cs (AnonymousContainer): Don't crash when container
12244         doesn't exist.
12245
12246 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
12247
12248         * expression.cs (Binary.DoResolve): Warn when comparing same
12249         values.
12250
12251 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
12252
12253         Fix #76486.
12254         * expression.cs (Binary.DoResolve): It looks like there are no
12255         convetsion rules in enum context.
12256
12257 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
12258
12259         Add support for extern alias qualifiers.
12260         * typemanager.cs: Move some LookupTypeReflection code
12261         to namespace.cs, to have cleaner code. Added some methods
12262         to help us keep track of the extern aliased references.
12263         * driver.cs: Add suport for extern alias assemblies on command
12264         line and check for their warnings/errors. Also keep track of the
12265         extern aliased assemblies.
12266         * namespace.cs: Move the global functionality of Namespace
12267         to GlobalRootNamespace/RootNamespace. Now the global namespace
12268         is GlobalRootNamespace.Globa. Also the code moved from 
12269         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
12270         Finally added LocalAliasEntry (AliasEntry before) and
12271         ExternAliasEntry, to handle alias statements.
12272         * cs-parser.jay: Add support in the grammar for extern alias
12273         statement.
12274         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
12275         Update callings to Namespace (now in GlobalRootNamespace).
12276
12277 2005-10-18  Raja R Harinath  <rharinath@novell.com>
12278
12279         Fix #76371.
12280         * class.cs (TypeContainer.DefineType): Move updating of
12281         topological sort earlier in the code.
12282         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
12283
12284 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
12285
12286         Fix #76273.
12287         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
12288         
12289         * constant.cs (Constant.TryReduce): Moved from Cast class.
12290         (Reduce): Made little bit more OO and fixed missing conversions.
12291         
12292         * ecore.cs (Reduce): Implemented.
12293         (Binary.EnumLiftUp): New method to upgrade values to enum values.
12294         
12295         * literal.cs (Reduce): Implemented.
12296         
12297         * class.cs: Reverted Miguel's wrong commit.
12298
12299 2005-10-14  Miguel de Icaza  <miguel@novell.com>
12300
12301         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
12302
12303 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
12304
12305         * cs-parser.jay, expression.cs : CS0214 was missing error location
12306           for constants. Fixed bug #76404.
12307
12308 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
12309
12310         Fix #76370.
12311         * convert.cs (ExplicitConversionCore): Fixed object->enum
12312         conversion.
12313
12314 2005-10-10  Raja R Harinath  <rharinath@novell.com>
12315
12316         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
12317         InstanceExpression.
12318         (PropertyExpr.EmitCall): Likewise.
12319         * expression.cs (Invocation.EmitArguments): Handle case where
12320         arguments == null.
12321         (Invocation.EmitCall): Avoid allocating temporary variable if
12322         there are no arguments.
12323
12324 2005-10-07  Raja R Harinath  <rharinath@novell.com>
12325
12326         Fix #76323.
12327         * convert.cs (ImplicitConversionStandard): Move conversion of
12328         void* to arbitrary pointer types ...
12329         (ExplicitConversionStandard): .. here.
12330         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
12331         error to always print typenames.
12332
12333 2005-10-07  Raja R Harinath  <rharinath@novell.com>
12334
12335         * convert.cs (GetConversionOperator): Rename from
12336         GetConversionOperators.  Move operator selection code from ...
12337         (UserDefinedConversion): ... here.
12338
12339 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
12340
12341         * convert.cs (ExplicitConversionCore): Removed duplicate enum
12342         conversion.
12343
12344 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
12345
12346         * assign.cs (Assign.DoResolve): Error method changed.
12347
12348         * cfold.cs (DoConstantNumericPromotions): Error method changed.
12349         
12350         * const.cs (ResolveValue): Reset in_transit immediately.
12351         
12352         * constant.cs: Error method changed.
12353         
12354         * convert.cs: Removed useless location parameter.
12355         (ExplicitNumericConversion): Don't do double enum check.
12356         (ExplicitConversionCore): Renamed from ExplicitConversion.
12357         (ExplicitUnsafe): Extracted from ExplicitConversion.
12358         (ExplicitConversion): Uses for error reporting.
12359         
12360         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
12361         error messages.
12362         (ResolveBoolean): Uses common error method.
12363         (CastToDecimal): Get rid of ec.
12364         (CastFromDecimal): Optimized.
12365         (ConvCast): Get rid of ec.
12366         
12367         * enum.cs (ResolveValue): Reset in_transit immediately.
12368         (Emit): Return after first error.
12369         
12370         * expression.cs: Convert changes.
12371         
12372         * literal.cs: Error method changed.
12373         
12374         * statement.cs: Error method changed.
12375
12376 2005-10-03  Raja R Harinath  <rharinath@novell.com>
12377
12378         * support.cs (SeekableStreamReader.Position): Don't error out when
12379         the requested position is just beyond the end of the current
12380         buffered data.
12381
12382 2005-09-28  Raja R Harinath  <rharinath@novell.com>
12383
12384         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
12385         try to keep in sync with the byte count of the underlying Stream.
12386         However, this limits us to a window size of 2048 characters: i.e.,
12387         the maximum lookahead of our lexer/parser can be 2048 characters.
12388
12389 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
12390
12391         Fix #76255.
12392         * driver.cs: Fix compilation files with full root path.
12393
12394 2005-09-25  Miguel de Icaza  <miguel@novell.com>
12395
12396         * report.cs (SymbolRelatedToPreviousError): Format the output so
12397         it does not use an open parenthesis that is never closed. 
12398
12399         * driver.cs: Follow coding guidelines
12400
12401 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
12402
12403         Fix #72930.
12404         * const.cs (Const.ResolveValue): Check for assigning non-null
12405         value to reference type.
12406
12407 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
12408
12409         * anonymous.cs: Implemented ExprClassName.
12410         
12411         * assign.cs (Assign.DoResolve): Don't chrash when type is not
12412         delegate.
12413         
12414         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
12415         check.
12416         
12417         * class.cs (StaticClass.DefineContainerMembers): Report protected
12418         members as error.
12419         
12420         * codegen.cs: if(ed) PRODUCTION.
12421         
12422         * convert.cs (Error_CannotImplicitConversion): Better error
12423         distinction.
12424         
12425         * cs-parser.jay: More error checks.
12426         
12427         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
12428         
12429         * driver.cs (CSCParseOption): Enabled wrong option check.
12430         
12431         * ecore.cs (Expression.ExprClassName): Turned to property.
12432         (MemberExpr.CheckIntermediateModification): For checking boxed
12433         value types     modification.
12434         
12435         * statement.cs (Fixed.Resolve): Expression type must be
12436         convertible to fixed type.
12437         (CollectionForeach.GetEnumeratorFilter,TryType):
12438         Small refactoring for easier error checking.
12439
12440 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
12441
12442         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
12443         attributes.
12444         
12445         * class.cs (GeneratedBaseInitializer): New class for customization
12446         compiler generated initializers.
12447         (MemberBase.DoDefine): Check Obsolete attribute here.
12448         (FieldMember.DoDefine): Ditto.
12449         
12450         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
12451         constants.
12452         
12453         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
12454         (MemberCore.GetObsoleteAttribute): Removed argument.
12455         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
12456         (MemberCore.CheckObsoleteType): New helper.
12457         
12458         * delegate.cs,
12459         * enum.cs,
12460         * statement.cs: Updates after MemberCore changes.
12461         
12462         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
12463         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
12464         
12465         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
12466         obsolete attribute for compiler construct.
12467         (As.DoResolve): Cache result.
12468         
12469         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
12470
12471 2005-09-26  Raja R Harinath  <rharinath@novell.com>
12472
12473         Fix #76133.
12474         * expression.cs (This.VerifyFixed): In a value type T, the type of
12475         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
12476         value type R, 'this' is treated as a value parameter.
12477
12478 2005-09-22  Miguel de Icaza  <miguel@novell.com>
12479
12480         * statement.cs (Lock): Use the TemporaryVariable class instead of
12481         manually using local variables as those do not work when variables
12482         are captured.
12483
12484         * ecore.cs: Moved the TemporaryVariable class from being a nested
12485         class inside Foreach to be a public class that can be employed in
12486         other places. 
12487
12488 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
12489
12490         * cs-parser.jay: interface_accessors replaced by
12491         accessor_declarations.
12492
12493         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
12494         location.
12495         
12496         * statement.cs (GotoCase.Resolve): Convert null constant to
12497         null case.
12498         (SwitchLabel.ResolveAndReduce): Ditto.
12499         (SwitchLabel.NullStringCase): Custom null stamp.
12500         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
12501         
12502         typemanager.cs (CSharpSignature): Don't skip first argument
12503         for full names.
12504
12505 2005-09-18  Miguel de Icaza  <miguel@novell.com>
12506
12507         * driver.cs: Set InEmacs based on the environment variable EMACS. 
12508
12509         * location.cs (InEmacs): in this mode, do not report column
12510         location as it confuses Emacs.
12511
12512 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
12513
12514         * cfold.cs, constant.cs, convert.cs, ecore.cs,
12515         expression.cs, iterators.cs, literal.cs: Store constants and
12516         literals location.
12517         
12518         * class.cs (MemberBase.ShortName): Pass location.
12519         
12520         * cs-parser.jay: Some location fixes.
12521         
12522         * ecore.cs (Expression.Location): Made virtual.
12523
12524 2005-09-05  Miguel de Icaza  <miguel@novell.com>
12525
12526         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
12527         if the underlying types are the same, otherwise we need to produce
12528         code that will do the proper cast.
12529
12530         This was exposed by Marek's constant rewrite which produced
12531         invalid code for the call site:
12532
12533         enum X : long { a }
12534         void Method (X v) {}
12535
12536         Method ((X) 5)
12537
12538         This fixes test-49.cs
12539
12540 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
12541
12542         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
12543           Type/Object should be allowed as well. Fixed bug #75968.
12544
12545 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
12546
12547         * expression.cs : (Binary.DoResolve): when one is enum constant and
12548           another is constant 0, then return enum one *as enum type*.
12549           Fixed bug 74846.
12550
12551 2005-09-02  Raja R Harinath  <rharinath@novell.com>
12552
12553         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
12554         internal.
12555
12556         Fix #75941.
12557         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
12558         flow-branching for LocalVariableReferences in case we were invoked
12559         from a MemberAccess.
12560         * expression.cs (LocalVariableReference.VerifyAssigned): New.
12561         Carved out of ...
12562         (LocalVariableReference.DoResolveBase): ... this.
12563         (MemberAccess.Resolve): Do the check that was disabled during
12564         SimpleNameResolve.
12565
12566 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
12567
12568         * class.cs :
12569           (PartialContainer.Create): check abstract/sealed/static strictly
12570           but abstract/sealed can exist only at one side. Fixed bug #75883.
12571
12572 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
12573
12574         Fix #75945.
12575         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
12576         specified, don't default to UnmanagedType.I4.
12577
12578 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
12579
12580         * expression.cs : conditional operator should check possibly
12581           incorrect assign expression. Fixed bug #75946.
12582
12583 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
12584
12585         * cs-tokenizer.cs, cs-parser.jay, driver.cs, support.cs :
12586           Reverting the change. gmcs is much complex than mcs on this matter.
12587
12588 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
12589
12590         * cs-tokenizer.cs : To read another token ahead of the actual 
12591           consumption, use new SavedToken and cache token instead of moving
12592           back the stream with SeekableStreamReader (it seemed problematic).
12593         * cs-parser.jay,
12594           driver.cs : Thus use StreamReader directly.
12595         * support.cs : Thus removed SeekableStreamReader.
12596
12597 2005-08-30  Raja R Harinath  <rharinath@novell.com>
12598
12599         Fix #75934.
12600         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
12601         (ScopeInfo.EmitScopeType): Use it to construct field names from
12602         names of captured locals.
12603
12604         Fix #75929.
12605         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
12606         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
12607         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
12608         (ExplicitConversion): Remove enum cases already handled by
12609         implicit conversion.  Move implicit conversion check to the beginning.
12610         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
12611         * expression.cs (ArrayCreation.EmitDynamicInitializers):
12612         Don't treat System.Enum as a struct.
12613
12614 2005-08-30  Jb Evain  <jbevain@gmail.com>
12615
12616         * attribute.cs: handles as expression in parameters.
12617
12618 2005-08-30  Raja R Harinath  <rharinath@novell.com>
12619
12620         Fix #75802.
12621         * class.cs (TypeContainer.VerifyClsName): Don't use a
12622         PartialContainer when verifying CLS compliance.
12623         (AbstractPropertyEventMethod): Set Parent here, ...
12624         (PropertyMethod): ... not here.
12625
12626 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
12627
12628         * attribute.cs : escaped attribute name should not be allowed to be
12629           resolved (e.g. @class as classAttribute). Fixed bug #75930.
12630
12631 2005-08-29  Raja R Harinath  <rharinath@novell.com>
12632
12633         Fix #75927.
12634         * convert.cs (ImplicitStandardConversionExists): Allow zero also
12635         when converting a long constant to unsigned long.
12636         * expression.cs (Invocation.OverloadResolve): Add sanity check to
12637         detect where IsApplicable and VerifyArgumentsCompat disagree.
12638
12639 2005-08-29  Raja R Harinath  <rharinath@novell.com>
12640         and Carlos Alberto Cortez  <carlos@unixmexico.org>
12641
12642         Fix #75848.
12643         * class.cs (TypeContainer.CanElideInitializer): New helper.
12644         (TypeContainer.EmitFieldInitializers): Use it to determine if we
12645         can safely emitting the initializer of a field.
12646
12647 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12648
12649         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
12650           allowed inside a switch (without loop). Fixed bug #75433.
12651
12652 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
12653
12654         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
12655         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
12656
12657 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12658
12659         * driver.cs : kinda reverting the default encoding changes (not exact 
12660           revert since I noticed that "codepage:reset" might not work fine).
12661
12662 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12663
12664         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
12665           Location. Now getter and setter store location correctly.
12666           (errors/cs0111-12.cs now reports the expected location.)
12667
12668 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12669
12670         * driver.cs : Use default encoding on the environment.
12671           Removed (now that) extra parameter for SeekableStreamReader.
12672         * support.cs : (SeekableStreamReader) third .ctor() argument for
12673           StreamReader is not required (always true). preamble size could
12674           be acquired in simpler and safe way.
12675
12676 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
12677
12678         * cs-parser.jay: report CS0642 at warning level 3
12679           and report CS0642 for an if else statement also
12680           fixes bug #74745. Patch by John Luke (and a bit
12681           modified by me).
12682           Removed extra CS0642 warning check for "while",
12683           "for" and "fixed".
12684         * statement.cs: In Block.Resolve(), CS0642 check
12685           is reimplemented to check a sequence of an empty
12686           statement and a block.
12687
12688           Both fix bug #66777.
12689
12690 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
12691
12692         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
12693         detection until I fix it.
12694         
12695         * cs-tokenizer.cs: Changed error message.
12696         
12697         * cs-parser.jay: Fixed 2 error locations.
12698         
12699         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
12700         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
12701         properties.
12702         
12703         * enum.cs (GetSignatureForError): Fixed.
12704         
12705         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
12706         method detection.
12707         
12708         * class.cs,
12709         * typemanager.cs (RegisterProperty): Removed.
12710         
12711         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
12712
12713 2005-08-24  Raja R Harinath  <rharinath@novell.com>
12714
12715         Fix #75874.
12716         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
12717         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
12718
12719 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12720
12721         * expression.cs : tiny fix is required for not warning positive ulong.
12722           See test-441.cs.
12723
12724 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12725
12726         * expression.cs : add CS0652 check for constant and integral
12727           expression. Fixed bug #53974.
12728
12729 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12730
12731         * expression.cs : in DoNumericPromotions(), check if there is implicit
12732           conversion overload for string (to check CS0034). Fixed bug #52492.
12733
12734 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12735
12736         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
12737
12738 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12739
12740         * ecore.cs : report location when it is *not* Null.
12741
12742 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12743
12744         * codegen.cs,
12745           ecore.cs,
12746           flowanalysis.cs,
12747           expression.cs:
12748           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
12749           correctly. Fixed bug #75721.
12750
12751 2005-08-23  Raja R Harinath  <rharinath@novell.com>
12752
12753         * support.cs (SeekableStreamReader.Position): Avoid an expensive
12754         loop that performs 'min (pos, char_count)'.
12755
12756         Fix #75862.
12757         * expression.cs (Unary.ResolveOperator): Don't discard implicit
12758         converted value in Operator.OnesComplement.
12759
12760 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
12761
12762         * anonymous.cs: If the anon method is pulled into a helper class,
12763         it needs to be `internal' not `private'. Fixes runtime behavior on
12764         msft. bug #75704
12765
12766 2005-08-20  Martin Baulig  <martin@ximian.com>
12767
12768         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
12769         scope if we don't already have it.
12770
12771         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
12772         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
12773         fixes #75867.
12774
12775 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
12776
12777         Fix #75803
12778         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
12779         is a partial class.
12780
12781 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
12782
12783         The big constants rewrite
12784         Fix #75746, #75685 and more
12785         As a side effect saved 1MB for MWF ;-)
12786         
12787         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
12788         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
12789         enum based for corlib compilation.
12790         
12791         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
12792         subtractions.
12793         
12794         * class.cs (FixedField.Define): Use ResolveAsConstant.
12795         
12796         * const.cs (IConstant): Interface constants and enums.
12797         (Const.ResolveValue): New method for constant resolvning.
12798         (ExternalConstant): Constants from imported assemblies.
12799         
12800         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
12801         conversion; like enums.
12802         (Constant.ToType): Converts this constant to different type.
12803         (Constant.Increment): Adds 1.
12804         
12805         * convert.cs (ImplicitConversionRequired): Simplified.
12806         
12807         * cs-parser.jay: Create EnumMember directly.
12808         
12809         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
12810         
12811         * doc.cs (GenerateEnumDocComment): Removed.
12812         
12813         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
12814         (ConvertIntLiteral): Removed.
12815         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
12816         
12817         * enum.cs (EnumMember): Implement IConstant.
12818         (Enum.IsValidEnumConstant): Removed.
12819         (Enum.GetNextDefaultValue): Removed.
12820         (Enum.FindMembers): Updated.
12821         (Enum.GenerateDocComment): Iterate enum members.
12822         
12823         * expression.cs (Cast.TryReduce): Handle enums correctly.
12824         (New.Constantify): Made public.
12825         (MemberAccess.DoResolve): Removed contant specific if(s).
12826         
12827         * literal.cs (NullLiteral): Implement new abstract methods.
12828         
12829         * statement.cs (GotoCase.Resolve): Use new constant methods.
12830         (SwitchLabel.ResolveAndReduce): Use new constant methods.
12831         
12832         * typemanager.cs (LookupEnum): Removed.
12833         (IsEnumType): Fixed to work with corlib.
12834         (RegisterConstant): Removed.
12835         (LookupConstant): Removed.
12836         (GetConstant): Changed to work with IConstant.
12837
12838 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
12839
12840         * location.cs : Fixed overflown (>255) column number.
12841
12842 2005-08-03  Raja R Harinath  <rharinath@novell.com>
12843
12844         First cut of the qualified-alias-member feature.
12845         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
12846         token.
12847         * cs-parser.jay (DOUBLE_COLON): New token.
12848         (namespace_or_type_name): Add rule for recognizing
12849         qualified-alias-members.
12850         (primary_expression): Likewise.
12851         (element_access): Allow QualifiedAliasMember as a possible
12852         type-bearing expression.
12853         (local_variable_type, local_variable_pointer_type): Likewise.
12854         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
12855         aliases in the current and enclosing namespace declarations.
12856         (NamespaceEntry.UsingAlias): Add CS0440 warning.
12857         * decl.cs (MemberName.is_double_colon): New.
12858         (MemberName.MemberName): Add new constructor for alias-member.
12859         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
12860         * expression.cs (QualifiedAliasMember): New expression type.
12861
12862 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12863
12864         * location.cs : it borked when no argument was specified.
12865
12866 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12867
12868         * location.cs : tiny ToString() format fix.
12869
12870 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12871
12872         * statement.cs : oops, it was missing.
12873
12874 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12875
12876         A set of fixes for precise line/column location.
12877
12878         * location.cs :
12879           "token" field now holds a file/line "delta", a line number offset 
12880           from the segment, and a column number. See also:
12881           http://lists.ximian.com/pipermail/mono-devel-list/2004-
12882           December/009508.html
12883           Removed static IsNull. Use instance IsNull property instead.
12884         * cs-tokenizer.cs :
12885           For some tokens it stores Location. For Identifier it stores
12886           LocatedToken which is a pair of string name and location.
12887           Column numbers are adjusted only at getChar().
12888         * report.cs :
12889           Use Location.ToString() for reporting (it now contains column).
12890         * cs-parser.jay :
12891           Largely modified to use LocatedToken instead of
12892           string (IDENTIFIER), and to acquire Location from some tokens.
12893         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
12894           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
12895           codegen.cs :
12896           Now MemberName holds Location. DeclSpace.ctor() receives Location
12897           as a parameter. Removed extra parameters to all derived classes.
12898           Replaced Location.IsNull() with instance property.
12899         * assign.cs, expression.cs :
12900           Added .ctor() overload that omits Location.
12901         * attribute.cs :
12902           Added "nameEscaped" flag that indicates the identifier was escaped
12903           in the source file. This fixes bug #57047.
12904
12905 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
12906
12907         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
12908         New method, looking for lo-case imported cls type.
12909
12910         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
12911         here.
12912
12913         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
12914
12915         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
12916
12917         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
12918         all_imported_types.
12919         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
12920
12921         Optimized to save 3.5 MB for SWF compilation.
12922
12923 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
12924
12925         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
12926         (PartialContainer.Create): Moved logic AddToContainer.
12927         (PartialContainer.MarkForDuplicationCheck): Shares name.
12928         
12929         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
12930         place.
12931         
12932         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
12933         initialization.
12934         (Namespace.GetSignatureForError): New method.
12935         
12936         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
12937         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
12938
12939 2005-08-01  Raja R Harinath  <rharinath@novell.com>
12940
12941         Fix #75669.
12942         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
12943         member lookup rather than qualifier_type, since qualifier_type can
12944         be null.
12945
12946 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
12947
12948         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
12949         enum member.
12950
12951 2005-07-31  Miguel de Icaza  <miguel@novell.com>
12952
12953         * statement.cs: Copy the local exception into the exception
12954         captured local.  Fixes 75674
12955
12956 2005-07-31  Raja R Harinath  <harinath@gmail.com>
12957
12958         Fix #75658.
12959         * expression.cs (Invocation.OverloadResolve): Don't report error
12960         CS1501 if error CS1502 has been reported.
12961         (New.DoResolve): Delegate CS1501 reporting to
12962         Invocation.OverloadResolve.
12963
12964         Fix #75656.
12965         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
12966         invariant-meaning-in-block property in an enclosing block if
12967         necessary.
12968
12969 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
12970
12971         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
12972         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
12973         (Switch.CheckSwitch): Just save 50kb for SWF.
12974
12975 2005-07-27  Martin Baulig  <martin@ximian.com>
12976
12977         * anonymous.cs (CaptureContext.AddField): Added
12978         `AnonymousContainer am' argument; compute its toplevel scope if
12979         it's not already computed.  Fixes #75649.
12980
12981 2005-07-26  Raja R Harinath  <rharinath@novell.com>
12982
12983         Fix #75628.
12984         * class.cs (Constructor.Emit): Reset block to null if the block
12985         resolve fails.
12986
12987 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
12988
12989         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
12990
12991 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
12992
12993         * class.cs (MethodData.Define): Check whether accessor implementing
12994         interface is public.
12995
12996         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
12997
12998 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
12999
13000         Fix #57245
13001         * namespace.cs (LookupType): Moved same type check to...
13002         
13003         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
13004         with the same name.
13005
13006 2005-07-21  Raja R Harinath  <rharinath@novell.com>
13007
13008         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
13009         already found a typebuilder.
13010         * class.cs (MethodCore.IsDuplicateImplementation): Compare
13011         MemberNames, not strings.
13012
13013         * const.cs (Error_ExpressionMustBeConst): 
13014         Rename from Error_EpressionMustBeConst.
13015         * const.cs, class.cs, statement.cd: Update.
13016
13017 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
13018
13019         Fix #65573
13020
13021         * const.cs (Const.LookupConstantValue): Report missing contant expression
13022         everytime.
13023         (Error_EpressionMustBeConstant): Only one error method.
13024
13025         * class.cs, statement.c: Updated.
13026
13027 2005-07-20  Raja R Harinath  <rharinath@novell.com>
13028
13029         * statement.cs (Block.Flags): Add back HasVarargs.
13030         (Block.flags): Make protected.
13031         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
13032
13033         * typemanager.cs (types, typecontainers, user_types): Remove.
13034         (UserTypes, TypeContainers): Likewise.
13035         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
13036         (CleanUp, Reset): Update.
13037         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
13038         (GetNestedType): Use Type.GetNestedType.
13039         (CoreLookupType): Take two arguments, the namespace and the
13040         basename of the type.  Update to use the Namespace.Lookup
13041         mechanism.
13042         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
13043         (RealMemberLookup): Use IsNestedChildOf instead of playing with
13044         string concatenation and substring matches.
13045         * class.cs, enum.cs, delegate.cs: Update to changes.
13046
13047 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
13048
13049         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
13050         Expression and made virtual.
13051
13052         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
13053         (ImplicitStandardConversionExists): Fixed `byte' typo ?
13054
13055         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
13056
13057         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
13058         error message.
13059
13060         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
13061         change.
13062
13063 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
13064
13065         Fix #57707
13066         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
13067         AssemblyCultureAttribute is not used on executable.
13068
13069         * rootcontext.cs,
13070         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
13071
13072 2005-07-16  Raja R Harinath  <rharinath@novell.com>
13073
13074         Fix #60638.
13075         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
13076         New.  Reports CS0252/CS0253.
13077         Mostly taken from preliminary patch by Duncak Mak.
13078         (Binary.DoResolveOperator): Store results of operator lookup.
13079         Use them to detect if we need to warn about unintended reference
13080         comparisons.
13081
13082 2005-07-15  Raja R Harinath  <rharinath@novell.com>
13083
13084         Fix #72969.
13085         * namespace.cs (Namespace.Lookup): Add back location parameter.
13086         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
13087         * delegate.cs, ecore.cs, expression.cs: Update to changes.
13088
13089         * codegen.cs (EmitContext.DeclSpace): Make readonly.
13090         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
13091         (Namespace.LookupType): ... this.
13092         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
13093         of namespaces.
13094         * typemanager.cs (LookupTypeReflection): Remove buggy code that
13095         purported to handle pointers.
13096         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
13097         CoreLookupType.
13098
13099 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
13100
13101         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
13102         type as namespace.
13103
13104 2005-07-15  Raja R Harinath  <rharinath@novell.com>
13105
13106         * namespace.cs (Namespace.Lookup): Drop location parameter.
13107         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
13108         (NamespaceEntry.Lookup): ... this.
13109         (NamespaceEntry.Error_AmbiguousTypeReference):
13110         Move here from DeclSpace.
13111         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
13112         names ...
13113         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
13114         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
13115         Move to NamespaceEntry.
13116         * delegate.cs, expression.cs: Update to changes.
13117
13118 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
13119
13120         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
13121         CheckAttributeType and refactored.
13122         (Attribute.ResolvePossibleAttributeType): Changed to reuse
13123         ResolveAsTypeTerminal error handling.
13124         (ResolveAsTypeTerminal): Introduced because of global attributes extra
13125         handling.
13126         (GetSignatureForError): Print errors in same way.
13127
13128         * class.cs,
13129         * codegen.cs: Reflect attribute GetSignatureForError change.
13130
13131         * ecore.cs,
13132         * expression.cs: Add silent parameter to ResolveAsTypeStep.
13133
13134         * namespace.cs (UsingEntry): Refactored to make fields private.
13135
13136         * assign.cs,
13137         statement.cs: Error_UnexpectedKind has extra parameter.
13138
13139 2005-07-14  Raja R Harinath  <rharinath@novell.com>
13140
13141         * ecore.cs (IAlias): Remove.
13142         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
13143         that implement the interface.
13144         * namespace.cs (Namespace): Likewise.
13145         (Namespace.declspaces): Renamed from 'defined_names'.
13146         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
13147         DeclSpace instead of an IAlias.
13148         * tree.cs (Tree.AddDecl): Update.
13149
13150 2005-07-12  Raja R Harinath  <rharinath@novell.com>
13151
13152         * statement.cs (Block.Flags); Remove HasVarargs.
13153         (Block.HasVarargs): Move to ToplevelBlock.
13154         (Block.ThisVariable, Block.AddThisVariable): Likewise.
13155         (Block.Variables): Make protected.  Initialize variable hashtable
13156         if necessary.
13157         (Block.AddVariable): Update.
13158         (Block.Resolve): Update to changes.
13159         (ToplevelBlock.HasVarargs): New boolean.
13160         (ToplevelBlock.ThisVariable): Move here from Block.
13161         (ToplevelBlock.AddThisVariable): Likewise.
13162         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
13163         * expression.cs (This.ResolveBase): Update to changes.
13164         (ArglistAccess.DoResolve): Likewise.
13165
13166 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
13167
13168         Fix #75321
13169         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
13170
13171         * class.cs (TypeContainer.VerifyMembers): Distinguish between
13172         not used and not used & assigned.
13173         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
13174
13175 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
13176
13177         Fix #75053
13178         * expression.cs (Is.DoResolve): null is never provided type.
13179
13180 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
13181
13182         Fix #52496
13183         * cs-parser.jay: Less strict event error rule to catch more errors.
13184
13185 2005-07-08  Martin Baulig  <martin@ximian.com>
13186
13187         Fix test-iter-10.cs - distinguish whether we `yield' in a property
13188         gettter (allowed) or setter (not allowed).
13189
13190         * class.cs (Accessor): Implement IIteratorContainer.
13191         (Accessor.Yields): New public field.
13192         (PropertyBase.PropertyMethod.Define): Handle iterators on a
13193         per-accessor basis.
13194
13195         * cs-parser.jay
13196         (get_accessor_declaration, set_accessor_declaration): Set the
13197         `yields' flag on the accessor, not the property.
13198         (property_declaration): Do the iterators check on a per-accessor
13199         basis and not for the whole property.
13200
13201 2005-07-08  Martin Baulig  <martin@ximian.com>
13202
13203         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
13204         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
13205
13206 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
13207
13208         Fix #74975
13209         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
13210         (ExtractSecurityPermissionSet): Cope with self referencing security
13211         attributes properly.
13212
13213         * driver.cs (SetOutputFile): Made public property OutputFile.
13214
13215 2005-07-07  Raja R Harinath  <rharinath@novell.com>
13216
13217         Fix #75486.
13218         * class.cs (TypeContainer.first_nonstatic_field): Rename from
13219         has_nonstatic_fields.  Make into a FieldBase pointer.
13220         (TypeContainer.AddField): Add CS0282 check.
13221         (TypeContainer.EmitType): Update.
13222
13223 2005-07-06  Miguel de Icaza  <miguel@novell.com>
13224
13225         * cs-tokenizer.cs (consume_identifier): Do not create strings to
13226         compare if they start with __.
13227
13228 2005-07-06  Raja R Harinath  <rharinath@novell.com>
13229
13230         * statement.cs (Switch.SwitchGoverningType): Only look at
13231         UserCasts that don't need implicit standard conversions to one of
13232         the allowed switch types (Fixes test-322.cs).
13233         (LocalInfo.Resolve): Re-enable sanity-test.
13234
13235 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
13236
13237         * cs-tokenizer.cs (consume_identifier): Detect double undescores
13238         
13239         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
13240         
13241         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
13242
13243 2005-07-06  Raja R Harinath  <rharinath@novell.com>
13244
13245         Fix #75472.
13246         * ecore.cs (SimpleName.GetSignatureForError): Add.
13247         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
13248         (MemberAccess.GetSignatureForError): Add.
13249
13250 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
13251  
13252         The big error and warning messages review.
13253         
13254         * anonymous.cs,
13255         * assign.cs,
13256         * attribute.cs,
13257         * class.cs,
13258         * codegen.cs,
13259         * convert.cs,
13260         * cs-parser.jay,
13261         * cs-tokenizer.cs,
13262         * decl.cs,
13263         * delegate.cs,
13264         * doc.cs,
13265         * driver.cs,
13266         * ecore.cs,
13267         * enum.cs,
13268         * expression.cs,
13269         * flowanalysis.cs,
13270         * iterators.cs,
13271         * literal.cs,
13272         * location.cs,
13273         * modifiers.cs,
13274         * namespace.cs,
13275         * parameter.cs,
13276         * pending.cs,
13277         * report.cs,
13278         * rootcontext.cs,
13279         * statement.cs,
13280         * support.cs,
13281         * tree.cs,
13282         * typemanager.cs: Updated.
13283         
13284         * class.cs: (MethodCore.SetYields): Moved here to share.
13285         (PropertyMethod.Define): Moved iterator setup here.
13286         
13287         * iterators.cs: Add orig_method to have full access to parent
13288         container.
13289
13290 2005-07-05  Raja R Harinath  <rharinath@novell.com>
13291
13292         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
13293         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
13294         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
13295         variable of struct type.
13296         * expression.cs (Unary.ResolveOperator): Update to change.
13297         (Indirection.VerifyFixed): Likewise.
13298         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
13299         (ParameterReference.VerifyFixed): Value parameters are fixed.
13300         (This.VerifyFixed): Treat 'this' as a value parameter.
13301         * statement.cs (LocalInfo.IsFixed): Remove.
13302
13303 2005-07-01  Martin Baulig  <martin@ximian.com>
13304
13305         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
13306         `ec.EmitThis ()' to get the correct scope.
13307
13308 2005-07-01  Martin Baulig  <martin@ximian.com>
13309
13310         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
13311         instance is a ParameterReference; fixes #75299.
13312
13313 2005-07-01  Martin Baulig  <martin@ximian.com>
13314
13315         Reverted Marek's latest patch (r46725):
13316         - it contains structural changes which are neither mentioned in
13317           the ChangeLog nor explained anywhere; for example the additional
13318           argument of EmitContext's and Iterator's .ctor's and the
13319           TypeContainer.DefineMembers() change.
13320         - structural changes like this should go in in seperate patches
13321           and not be hidden in a huge patch which just seems to affect
13322           warnings and errors.
13323           a big and hard to understand patch.
13324         - it breaks iterators and causes regressions, for instance in
13325           test-iter-03.cs.      
13326
13327 2005-06-30  Raja R Harinath  <rharinath@novell.com>
13328
13329         Fix #75412.
13330         * expression.cs (Indexers.map): Remove.
13331         (Indexers.Append): Filter out inaccessible setters and getters.
13332         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
13333
13334         Fix #75283.
13335         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
13336         Refactored from ...
13337         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
13338         (FieldExpr.Emit, PropertyExpr.Emit): Update.
13339         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
13340         * expression.cs (Invocation.EmitCall): Add CS0120 check.
13341
13342 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
13343
13344         Fix #75322
13345         * class.cs (FieldBase.GetInitializerExpression): One more field
13346         for backup.
13347
13348 2005-06-28  Miguel de Icaza  <miguel@novell.com>
13349
13350         * pending.cs: Do not define a proxy if the base method is virtual,
13351         it will be picked up by the runtime (bug 75270).
13352
13353 2005-06-08  Martin Baulig  <martin@ximian.com>
13354
13355         The big Iterators rewrite :-)
13356
13357         * iterators.cs: Rewrite this to use the anonymous methods framework.
13358
13359         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
13360         before the TypeContainers; see 2test-21.cs.
13361
13362         * class.cs
13363         (TypeContainer.DefineType): Don't create a new EmitContext if we
13364         already have one (this only happens if we're an Iterator).
13365         (TypeContainer.Define): Also call Define() on all our iterators.
13366         (Method.CreateEmitContext): Added support for iterators.
13367
13368         * anonymous.cs
13369         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
13370         (AnonymousContainer.CreateMethodHost): Moved here from
13371         AnonymousMethod and made abstract.
13372         (AnonymousContainer.CreateScopeType): New abstract method.
13373         (AnonymousContainer.IsIterator): New public property.
13374         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
13375         get the ScopeTypeBuilder rather than manually defining it here. 
13376         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
13377         iterators here.
13378
13379         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
13380         before RootContext.DefineTypes().
13381
13382         * codegen.cs (EmitContext.RemapToProxy): Removed.
13383         (EmitContext.CurrentAnonymousMethod): Changed type from
13384         AnonymousMethod -> AnonymousContainer.
13385         (EmitContext.ResolveTopBlock): Protect from being called twice.
13386         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
13387         (EmitContext.EmitThis): Removed the iterators hacks; use the
13388         anonymous methods framework for that.
13389
13390         * statement.cs
13391         (ToplevelBlock.Container): Make this a property, not a field.
13392         (ToplevelBlock.ReParent): New public method; move the
13393         ToplevelBlock into a new container.
13394         (Foreach.TemporaryVariable): Simplify.
13395
13396 2005-06-05  Martin Baulig  <martin@ximian.com>
13397
13398         * statement.cs (LocalInfo.CompilerGenerated): New flag.
13399         (Block.AddTemporaryVariable): New public method; creates a new
13400         `LocalInfo' for a temporary variable.
13401         (Block.EmitMeta): Create the LocalBuilders for all the temporary
13402         variables here.
13403         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
13404         non-iterator variables.
13405
13406 2005-06-05  Martin Baulig  <martin@ximian.com>
13407
13408         * statement.cs (Foreach.TemporaryVariable): Create the
13409         LocalBuilder in the Emit phase and not in Resolve since in some
13410         situations, we don't have an ILGenerator during Resolve; see
13411         2test-19.cs for an example.
13412
13413 2005-06-04  Martin Baulig  <martin@ximian.com>
13414
13415         **** Merged r45395 from GCS ****
13416
13417         The big Foreach rewrite - Part II.
13418
13419         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
13420         with `PropertyInfo ienumerator_getcurrent'.
13421
13422         * codegen.cs (VariableStorage): Removed.
13423
13424         * statement.cs
13425         (Foreach): Derive from Statement, not ExceptionStatement.
13426         (Foreach.CollectionForeach): New nested class.  Moved all the code
13427         dealing with collection foreach here.
13428         (Foreach.ForeachHelperMethods): Removed.
13429         (Foreach.TemporaryVariable): Implement IMemoryLocation.
13430
13431 2005-05-23  Martin Baulig  <martin@ximian.com>
13432
13433         * statement.cs (Try.DoResolve): Don't create a `finally' if we
13434         don't need to.  Fix #75014.
13435
13436 2005-05-20  Martin Baulig  <martin@ximian.com>
13437
13438         Merged r44808 from GMCS.
13439
13440         * class.cs (TypeContainer.CircularDepException): Removed.
13441         (TypeContainer.DefineType): Removed the `InTransit' stuff.
13442         (TypeContainer.CheckRecursiveDefinition): Check for circular class
13443         (CS0146) and interface (CS0529) dependencies here.
13444
13445 2005-06-21  Raja R Harinath  <rharinath@novell.com>
13446
13447         * expression.cs (Invocation.EmitCall): Fix initialization
13448         'this_call' to reflect current behaviour.  Fix indentation.
13449
13450         * convert.cs (FindMostEncompassedType): Add two trivial special
13451         cases (number_of_types == 0 || number_of_types == 1).
13452         (FindMostEncompasingType): Likewise.
13453
13454 2005-06-17  Raja R Harinath  <rharinath@novell.com>
13455
13456         Some cleanups preparing for the fix of #75283.
13457         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
13458         error testing.
13459         (EventExpr.InstanceResolve): Likewise.
13460         (EventExpr.DoResolve): Remove redundant checks.
13461
13462 2005-06-10  Duncan Mak  <duncan@novell.com>
13463
13464         * cs-tokenizer.cs (process_directives): New flag for controlling
13465         the processing of preprocessor directives.
13466         (x_token): After seeing a '#', return Token.NONE instead of going
13467         to handle_preprocessing_directive() when not processing
13468         directives. This avoids unnecessary processing during the token peek in
13469         is_punct().
13470
13471         This fixes #74939.
13472
13473         * cs-tokenizer.cs (handle_preprocessing_directive, xtoken): Use
13474         the existing error reporting methods instead of Report.Error.
13475
13476         * convert.cs (priv_fmt_expr): Remove. It's not needed anymore
13477         after Raja's rewrite.
13478
13479 2005-06-08  Miguel de Icaza  <miguel@novell.com>
13480
13481         * class.cs: Small fix.
13482
13483 2005-06-08  Raja R Harinath  <rharinath@novell.com>
13484
13485         Fix #75160.
13486         * class.cs (GetPartialBases): Fix return value check of
13487         part.GetClassBases.
13488
13489 2005-06-07  Raja R Harinath  <rharinath@novell.com>
13490
13491         Ensure that partial classes are registered in their enclosing
13492         namespace.  Initial part of fix of #75160.
13493         * tree.cs (Tree.RecordDecl): Add new namespace argument.
13494         Register declspace with namespace here, not in
13495         DeclSpace.RecordDecl.
13496         * cs-parser.jay: Pass namespace to RecordDecl.
13497         * class.cs (PartialContainer.Create): Likewise.
13498         (ClassPart.DefineType): New sanity-check.  Throws an exception if
13499         called.
13500         * decl.cs (Declspace.RecordDecl): Remove.
13501         * namespace.cs (NamespaceEntry.DefineName): Remove.
13502
13503 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
13504
13505         * rootcontext.cs: Reset TargetExt as well.
13506
13507 2005-06-03  Raja R Harinath  <rharinath@novell.com>
13508
13509         * ecore.cs (Expression.Resolve): Emit CS0654 error when
13510         -langversion:ISO-1.
13511
13512 2005-06-02  Raja R Harinath  <rharinath@novell.com>
13513
13514         Fix #75080, cs0119.cs.
13515         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
13516         of ...
13517         (Expression.Resolve): ... this.  Use it.  Remove bogus code
13518         allowing ExprClass.Type and ExprClass.Namespace for
13519         ResolveFlags.VariableOrValue.
13520         (Expression.Resolve) [1-argument variant]: Change default resolve
13521         flags based on language version.
13522         (Expression.Error_UnexpectedKind): Use a simple string array
13523         rather than an ArrayList.
13524         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
13525         not ExprClass.Type.
13526         (TypeOfVoid.DoResolve): Likewise.
13527         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
13528         flags argument -- it always has the same value.
13529
13530 2005-05-31  Raja R Harinath  <rharinath@novell.com>
13531
13532         Fix #75081.
13533         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
13534         Use it in the error message.
13535         * assign.cs, expression.cs, statement.cs: Update.
13536
13537 2005-05-30  Raja R Harinath  <rharinath@novell.com>
13538
13539         Fix #75088.
13540         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
13541         the "almostMatchedMember" case too.
13542         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
13543         that failed the accessibility checks to 'almost_match'.
13544
13545 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
13546
13547         * attribute.cs: Use internal MethodBuilder methods to set
13548         ExactSpelling and SetLastError on PInvoke methods, instead
13549         of passing them via charset.  Fixes #75060.
13550
13551 2005-05-27  Raja R Harinath  <rharinath@novell.com>
13552
13553         * parameter.cs (Parameter): Remove TODO comment.
13554         (Parameter.DefineParameter): Remove Location parameter.
13555         (Parameters.LabelParameters): Likewise.
13556         * class.cs (Constructor.Emit): Update to change.
13557         (MethodData.Emit): Likewise.
13558         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
13559         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
13560
13561 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
13562
13563         * parameter.cs,
13564           Removed Parameters.Location and added Parameter.Location instead.
13565           Removed Location parameter from Emit() and GetSignature().
13566         * anonymous.cs,
13567           class.cs,
13568           cs-parser.jay,
13569           delegate.cs,
13570           iterators.cs,
13571           statement.cs :
13572           Modified all related calls.
13573
13574 2005-05-26  Raja R Harinath  <rharinath@novell.com>
13575
13576         Improve user-defined conversion handling.
13577         * convert.cs (GetConversionOperators): Rewrite.  Return only the
13578         applicable operators.
13579         (AddConversionOperators): New.  Helper for GetConversionOperators.
13580         (FindMostEncompassedType, FindMostEncompassingType): Verify that
13581         there is only one most encompassed/encompassing type.
13582         (FindMostSpecificSource, FindMostSpecificTarget): Remove
13583         "applicable operator" handling.
13584         (UserConversion): Move cache here from GetConversionOperators.
13585         Directly cache the chosen operator, rather than the whole
13586         MethodGroup.
13587         (ExplicitNumericConversion): Fix buggy implementation of Decimal
13588         case.  Allow conversion of decimal to sbyte and byte too.
13589         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
13590         New static methods.  Used to avoid allocating EmptyExpressions in
13591         convert.cs.
13592
13593 2005-05-24  Duncan Mak  <duncan@novell.com>
13594
13595         * ecore.cs (CastFromDecimal): New class for casting a decimal to
13596         another class, used in Convert.ExplicitNumericConversion.
13597         (CastToDecimal): New class, similar to above, but casts to
13598         System.Decimal, used in Convert.ImplicitNumericConversion and also
13599         in explicit convesion from double/float to decimal.
13600
13601         * convert.cs (ImplicitNumericConversion): Handle implicit
13602         conversions to System.Decimal.
13603         (ExplicitNumericConversion): handle explicit conversions to
13604         System.Decimal.
13605
13606         This fixes #68711.
13607         
13608 2005-05-20  Miguel de Icaza  <miguel@novell.com>
13609
13610         * typemanager.cs (EnumToUnderlying): Do not throw if we do not
13611         know the type at this stage, just break through.   Fixes #75008 
13612
13613 2005-05-19  Martin Baulig  <martin@ximian.com>
13614
13615         * delegate.cs
13616         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
13617         to disable error reporting.
13618
13619         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
13620         here since we don't want to report an error; see the new test-336.cs.
13621
13622 2005-05-19  Raja R Harinath  <rharinath@novell.com>
13623
13624         * statement.cs (ToplevelBlock.GetParameterReference)
13625         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
13626         Move here from class Block.
13627         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
13628         * expression.cs (ParameterReference.DoResolveBase): Likewise.
13629
13630 2005-05-18  Martin Baulig  <martin@ximian.com>
13631
13632         Fix #74978.
13633
13634         * flowanalysis.cs
13635         (FlowBranching.Reachability): Add non-static public And() and Or()
13636         methods.
13637         (FlowBranchingSwitch): New class; do the `break_origins' thing
13638         like in FlowBranchingLoop.
13639         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
13640         reachability, not just locals and parameters.
13641         (FlowBranching.MergeChild): Remove some of the hacks for loop and
13642         switch; MergeBreakOrigins() now takes care of that.
13643
13644 2005-05-18  Martin Baulig  <martin@ximian.com>
13645
13646         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
13647         a loop and may leave it, reset the barrier; fixes #74974.
13648
13649 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
13650         
13651         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
13652         is back.
13653         
13654         * cs-parser.jay: Catch more lexical errors.
13655         
13656         * report.cs: Add one more Error method.
13657         
13658         * rootcontext.cs,
13659         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
13660
13661 2005-05-17  Martin Baulig  <martin@ximian.com>
13662
13663         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
13664         #70970. 
13665
13666 2005-05-16  Raja R Harinath  <rharinath@novell.com>
13667
13668         Fix test-382.cs.  Emit values of decimal constants.
13669         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
13670         Carved out of ...
13671         (TypeContainer.AddField): ... this.
13672         (TypeContainer.EmitFieldInitializers): Allow the list of fields
13673         with initializers to include 'Const's.
13674         (ClassPart.RegisterFieldForInitialization): Forward to
13675         PartialContainer.
13676         * const.cs (Const.Const): Pass initializer to base class.
13677         (Const.Define): In case of decimal constants, register them for
13678         initialization in a static constructor.
13679
13680 2005-05-14  Martin Baulig  <martin@ximian.com>
13681
13682         * statement.cs (Block.Resolve): Correctly handle unreachable code;
13683         do not call ResolveUnreachable() on unreachable statements in
13684         here, see the comment in the source code.
13685
13686 2005-05-13  Raja R Harinath  <rharinath@novell.com>
13687
13688         Fix #74934.
13689         * expression.cs (BinaryResolveOperator): If one of the operands of
13690         an equality comparison is 'null' and the other is a pointer type,
13691         convert the null to a NullPointer.
13692         * convert.cs (ImplicitReferenceConversion): If the expression is a
13693         NullLiteral and the target type is a pointer type, return a
13694         NullPointer instead.
13695         (ImplicitConversionStandard): Likewise.
13696
13697 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
13698         
13699         * cs-parser.jay: Set readonly context based on special constructs.
13700         
13701         * expression.cs (LocalVariableReference.DoResolveBase): Improved
13702         readonly variable error handling.
13703         
13704         * rootcontext.cs (EmitCode): Don't verify members when error
13705         occurred.
13706         
13707         * statement.cs (LocalInfo): Add reaodnly context information.
13708         (SetReadOnlyContext, GetReadOnlyContext): New methods.
13709
13710 2005-05-13  Raja R Harinath  <rharinath@novell.com>
13711
13712         * statement.cs (Block.Resolve): Revert change below.  Modify fix
13713         for #74041 to initialize 'resolved' to false only for explicit
13714         blocks.  Fixes #74873.
13715
13716 2005-05-12  Raja R Harinath  <harinath@gmail.com>
13717
13718         Fix #74920.
13719         * typemanager.cs (unmanaged_enclosing_types): New.
13720         (IsUnmanagedType): Avoid infloops by using
13721         'unmanaged_enclosing_types' to talk with recursive invocations.
13722
13723 2005-05-13  Martin Baulig  <martin@ximian.com>
13724
13725         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
13726         instance variable, not a local.  Fix #74873.
13727         (Block.ResolveUnreachable): Set it to true here.
13728
13729 2005-05-11  Duncan Mak  <duncan@novell.com>
13730
13731         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
13732         continuing to process for 'arg'.
13733         (handle_preprocessing_directive): Check the argument of the #endif
13734         directive and report error CS1025 if there are any trailing
13735         characters.
13736
13737         According to the C# spec, having even whitespace after the #endif
13738         directive is illegal; however, because we call arg.TrimEnd ()
13739         beforehand, we have the same behavior as csc, allowing whitespace
13740         after the directive.
13741
13742         Fixes #74892.
13743
13744 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
13745
13746         Fix #74863.
13747         
13748         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
13749         (Constructor.GetObsoleteAttribute): Implemented correctly.
13750
13751 2005-05-10  Martin Baulig  <martin@ximian.com>
13752
13753         * support.cs (ReflectionParameters.ParameterModifier): Use
13754         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
13755         and `ParameterAttributes.In'.  Fixes #74884.
13756
13757 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
13758
13759         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
13760         
13761         * expression.cs (Argument.GetParameterModifier): Turned to property.
13762         (Invocation.Error_InvalidArguments): Add more descriptive errors.
13763         
13764         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
13765         its C# equivalent.
13766         
13767 2005-05-09  Raja R Harinath  <rharinath@novell.com>
13768
13769         Fix #74852.
13770         * decl.cs (MemberCache.AddMethods): Register override methods,
13771         rather than non-override methods.
13772         * typemanager.cs (RegisterOverride): New.
13773         (IsOverride): Update.
13774
13775 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
13776
13777         Fix #73105.
13778         
13779         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
13780         recursive declaration.
13781         
13782         * statement.cs (Block.ResolveMeta): Report any error in resolving.
13783         
13784 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
13785
13786         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
13787         
13788         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
13789
13790 2005-05-05  Raja R Harinath  <rharinath@novell.com>
13791
13792         Fix #74797.
13793         * decl.cs (DeclSpace.FamilyAccessible): 
13794         Use TypeManager.IsNestedFamilyAccessible.
13795
13796         Fix reopened #64812.
13797         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
13798         internal'.
13799
13800 2005-05-04  Raja R Harinath  <rharinath@novell.com>
13801             Abin Thomas  <projectmonokochi@rediffmail.com>
13802             Anoob V E  <projectmonokochi@rediffmail.com>
13803             Harilal P R  <projectmonokochi@rediffmail.com>
13804
13805         Fix #64812.
13806         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
13807         allow access to all static members.
13808
13809 2005-05-04  Martin Baulig  <martin@ximian.com>
13810
13811         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
13812
13813 2005-05-04  Martin Baulig  <martin@ximian.com>
13814
13815         Fix #74655.
13816
13817         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
13818         section at the end; make things work if `default' is not the last
13819         section.        
13820
13821 2005-05-04  Martin Baulig  <martin@ximian.com>
13822
13823         Fix #70400.
13824
13825         * statement.cs (Switch): Replaced the `got_default' field with a
13826         `default_section' one.
13827         (Switch.CheckSwitch): Set `default_section' here.
13828         (Switch.Resolve): If we're a constant switch and the constant is
13829         not found, use the default section.
13830
13831 2005-05-03  Martin Baulig  <martin@ximian.com>
13832
13833         * expression.cs (ArrayAccess.EmitGetLength): New public method.
13834
13835         * statement.cs (Foreach.ArrayForeach): New nested class.
13836         (Foreach.TemporaryVariable): New nested class.
13837         (Foreach.EmitArrayForeach): Removed; this is now in the new
13838         ArrayForeach class.
13839
13840 2005-05-03  Raja R Harinath  <rharinath@novell.com>
13841
13842         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
13843         more conservative.
13844         (VerifyPendingMethods): Revert change below.
13845
13846         * typemanager.cs (IsOverride, RegisterNonOverride): New.
13847         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
13848         that used to trigger warning -28.  Remove warning -28.
13849         * expression.cs (Invocation.OverloadResolve): Use
13850         TypeManager.IsOverride to distinguish override methods.
13851
13852         Fix #74773.
13853         * pending.cs (VerifyPendingMethods): If a base type implements the
13854         requested interface, don't bother checking individual methods of
13855         the base type.  As a side-effect, this prevents the creation of
13856         unnecessary proxies.
13857
13858 2005-05-02  Martin Baulig  <martin@ximian.com>
13859
13860         Fix #70182.
13861
13862         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
13863         Also `And' the locals if the old vector is null.
13864         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
13865         null; in this case we basically reset all the variables.        
13866
13867 2005-05-02  Martin Baulig  <martin@ximian.com>
13868
13869         Fix #74529.
13870
13871         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
13872         Added `FlowBranching branching' argument; always `and' the
13873         variables instead of `or'ing them unless we're an infinite loop.
13874
13875         * statement.cs (While.Resolve): Create a new sibling unless we're
13876         infinite.       
13877
13878 2005-05-02  Martin Baulig  <martin@ximian.com>
13879
13880         Fix #70140.
13881
13882         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
13883         arguments; use it instead of creating a new TopLevelBlock.
13884         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
13885         our ConstructorInitializer.
13886
13887         * statement.cs
13888         (TopLevelBlock.TopLevelBranching): New public property.
13889         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
13890         and create our `TopLevelBranching'.
13891
13892         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
13893         anonymous method host, use `block.TopLevelBranching' rather than
13894         creating a new branching.
13895
13896 2005-04-20  Miguel de Icaza  <miguel@novell.com>
13897
13898         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
13899         a ScopeInfo, if any of the current children is a child of the new
13900         entry, move those children there.
13901
13902 2005-04-30  Martin Baulig  <martin@ximian.com>
13903
13904         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
13905         at the beginning of a SwitchSection.  Fix #73335.
13906
13907 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
13908
13909         Fix #74378
13910         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
13911         
13912         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
13913         (FieldExpr.DoResolve): Obsolete members are ignored for field
13914         initializers.
13915         
13916 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
13917
13918         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
13919         of arrays detection.
13920
13921         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
13922         verification.
13923         (Field.VerifyClsCompliance): Volatile fields are not compliant.
13924
13925         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
13926         arrays report.
13927
13928 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
13929
13930         * cs-parser.jay: Use the prefered version of -unsafe in error
13931         message.
13932
13933 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
13934
13935         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
13936         circumstances.
13937
13938 2005-04-20  John Luke  <john.luke@gmail.com>
13939
13940         * driver.cs: fix typo in error message, --outout to --output
13941
13942 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
13943
13944         * codegen.cs (InRefOutArgumentResolving): New field.
13945         
13946         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
13947         fields outside contructor.
13948         
13949         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
13950         
13951 2005-04-19  Miguel de Icaza  <miguel@novell.com>
13952
13953         * anonymous.cs (CaptureContext.EmitParameterInstance): The
13954         parameter code was not completed ever, so it was not as up-to-date
13955         as local variables.  Must finish it.
13956
13957         The bug fix was to compare the Toplevel of the block, not the
13958         current block.  Thanks for Ben for pointing this out. 
13959
13960 2005-04-19  Raja R Harinath  <rharinath@novell.com>
13961
13962         * decl.cs (AddMethods): Use the declaring type of the problem
13963         method to determine if we want to squash a warning.
13964
13965 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
13966
13967         * attribute.cs: Removed debug output.
13968
13969         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
13970         
13971         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
13972         Report.Stderr.
13973         
13974 2005-04-18  Raja R Harinath  <rharinath@novell.com>
13975
13976         Fix #74481.
13977         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
13978         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
13979         all null comparisons against reference types.
13980
13981 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
13982
13983         Fix# 74565
13984         * class.cs (TypeContainer.CircularDepException) New nested
13985         exception class.
13986         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
13987         (TypeContainer.DefineType): Removed error, reset InTransit before
13988         exit.
13989         (Class.DefineType): Throw exception when is in Transit.
13990         Catch exception and report error.
13991         (Struct.DefineType): Throw exception when is in Transit.
13992         Catch exception and report error.
13993         (Interface.DefineType): Throw exception when is in Transit.
13994         Catch exception and report error.
13995
13996         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
13997         handle nested exception handlers.
13998
13999         * flowanalysis.cs (InTryWithCatch): New method, search for try with
14000         a catch.
14001
14002         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
14003         InFinally and InCatch storage.
14004
14005         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
14006         (Catch.Resolve): Set and Restore ec.InCatch.
14007         (Try.Resolve): Set and Restore ec.InFinally.
14008         (Try.HasCatch): True when try has catch.
14009
14010 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
14011
14012         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
14013           for the same event member, so exclude such cases from warning 419.
14014           Fixed bug #74633.
14015
14016 2005-04-16  Miguel de Icaza  <miguel@novell.com>
14017
14018         * expression.cs (Binary.ResolveOperator): Apply patch from John
14019         Luke to fix bug 59864: operators &, | and ^ on enumerations
14020         require that the same enum type on both sides.
14021
14022         * driver.cs: Add warnings to old flag usage, this is to assist
14023         people who produce Makefiles and hope that the Makefiles will be
14024         used on Windows.
14025
14026         * class.cs (TypeContainer.EmitType): Moved the definition of the
14027         special $PRIVATE$ field from the resolve phase to the Emit phase.
14028         During resolve we do not know if we are a struct with
14029         HasExplicitLayout, we know this only after the attributes for the
14030         type are emitted.
14031
14032         Set the FieldOffset to zero on the dummy field that we create for
14033         the class.   Fixes 74590.
14034
14035 2005-04-16  Raja R Harinath  <rharinath@novell.com>
14036
14037         Fix #73834.
14038         * ecore.cs (PropertyExpr.resolved): New.
14039         (DoResolve): Use it to handle a case of double resolution here.
14040         Handle a case of identical-name-and-type-name.
14041         * expression.cs (ArrayCreation.CheckIndices): Avoid double
14042         resolution by storing the results of expression resolution back
14043         into the "probes" array.
14044
14045 2005-04-15  Raja R Harinath  <rharinath@novell.com>
14046
14047         Fix cs0208-7.cs and cs0208-8.cs.
14048         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
14049         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
14050         error reporting to point out the reason a struct is not unmanaged.
14051
14052 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
14053
14054         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
14055           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
14056
14057 2005-04-13  Raja R Harinath  <rharinath@novell.com>
14058
14059         Fix #74528.
14060         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
14061         IdenticalNameAndTypeName here.
14062         (EventExpr.InstanceResolve): Likewise.
14063
14064 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
14065
14066         C# 2.0 DefaultCharSetAttribute implementation
14067         
14068         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
14069         which allows us to set GlobalNamespace for every resolve.
14070         (Attribute.ResolveArguments): Cut from Resolve.
14071         (Attribute.GetCharSetValue): Returns CharSet named argument.
14072         (Attribute.DefinePInvokeMethod): Gets default charset from
14073         module settings.
14074         (GlobalAttribute.ResolveAsTypeStep): Override.
14075         (GlobalAttribute.ResolveArguments): Override.
14076         
14077         * class.cs (TypeAttr): Is protected.
14078         
14079         * codegen.cs (ModuleClass.DefaultCharSet): New member.
14080         (ModuleClass.DefaultCharSetType): New memeber.
14081         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
14082         
14083         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
14084         charset from module.
14085         
14086         * delegate.cs (TypeAttr): Override.
14087         (Delegate.DefineType): Use this TypeAttr.
14088         
14089         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
14090         at very early stage (before types are defined) to resolve model
14091         module attributes. It will probably not work with corlib but it
14092         should be ok.
14093         
14094         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
14095         charset from module.
14096         
14097         * typemanager.cs (default_charset_type): New type.
14098
14099 2005-04-13  Raja R Harinath  <rharinath@novell.com>
14100
14101         * decl.cs (MemberCache.AddMethods): Don't warn if
14102         System.Object.Finalize has buggy MethodAttributes.
14103
14104         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
14105         removed below.
14106
14107 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
14108
14109         * doc.cs : detect ambiguous reference to overloaded members.
14110           Fixed bug #71603. MS 1.1 csc does not detect it.
14111
14112 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
14113
14114         * doc.cs : delegates must not be referenced with parameters.
14115           Fixed bug #71605.
14116
14117 2005-04-12  Miguel de Icaza  <miguel@novell.com>
14118
14119         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
14120
14121 2005-04-10  Miguel de Icaza  <miguel@novell.com>
14122
14123         * driver.cs (MainDriver): Stop processing if the CLS stage found
14124         errors. 
14125
14126         (CompilerCallableEntryPoint.InvokeCompiler): Always
14127         reset after execution;   Take a TextWriter argument for the
14128         output.
14129
14130         * report.cs: Use the error stream instead of hardcoding stderr. 
14131
14132 2005-04-09  Miguel de Icaza  <miguel@novell.com>
14133
14134         * class.cs: Reduce code paths to test, too small of an
14135         optimization to make it worth the extra testing.  Always perform
14136         it. 
14137
14138 2005-04-08  Raja R Harinath  <rharinath@novell.com>
14139
14140         Fix #74510.
14141         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
14142         operators that had errors reported on them.
14143
14144 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
14145
14146         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
14147         argument types.
14148         (Attribute.Resolve): Add named argument type checking.
14149         
14150         * class.cs (FixedField.Define): Use IsPrimitiveType
14151         
14152         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
14153         
14154         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
14155         unsafe parameter types.
14156         
14157         * statement.cs (Using.ResolveExpression): Add better error description.
14158         
14159         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
14160         
14161 2005-04-08  Raja R Harinath  <rharinath@novell.com>
14162
14163         Fix #74484.
14164         * attribute.cs (Attribute.GetAttributeUsage): Resolve
14165         AttributeUsageAttribute in the emitcontext of the attribute class,
14166         not in the emitcontext of the attributable entity it was attached to.
14167         * cs-parser.jay: Use 'current_class', not 'current_container',
14168         when creating a GlobalAttribute.
14169
14170 2005-04-08  Alp Toker  <alp@atoker.com>
14171
14172         * pending.cs: The fix to #58413 failed to compile methods implementing
14173         interfaces with/without params modifiers and vice versa, even though
14174         params modifiers aren't part of the signature. Make the modifier check
14175         less strict as in csc.
14176
14177 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
14178             Anoob V E  <projectmonokochi@rediffmail.com>
14179             Harilal P R  <projectmonokochi@rediffmail.com>
14180
14181         Fix #58413.
14182         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
14183         modifiers of pending methods.
14184         (PendingImplementation.PendingImplementation): Initialize it.
14185         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
14186         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
14187         with ParameterData.  Add check for modifiers.
14188         * class.cs (MethodData.Define): Update to changes.
14189
14190 2005-04-07  Raja R Harinath  <rharinath@novell.com>
14191
14192         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
14193
14194 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
14195
14196         * class.cs (PropertyMethod.Define): Check private accessor in abstract
14197         property.
14198         
14199         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
14200         
14201         * rootcontext.cs,
14202         * typemanager.cs: Registered RequiredAttributeAttribute.
14203         
14204 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
14205
14206         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
14207         Warning CS0169 is back at level 3.
14208         (IMethodData.SetMemberIsUsed): New method.
14209         
14210         * decl.cs (IsUsed): New value; moved from FieldBase.Status
14211         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
14212         
14213         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
14214
14215         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
14216         contants.
14217         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
14218         is used.
14219         
14220         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
14221         is used.
14222         
14223         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
14224         to avoid the problems with nested types.
14225
14226 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
14227             Anoob V.E  <projectmonokochi@rediffmail.com>
14228             Harilal P.R  <projectmonokochi@rediffmail.com>
14229             Raja R Harinath  <rharinath@novell.com>
14230
14231         Fix #73820.
14232         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
14233         attribute.
14234         * typemanager (GetConstructor): Make public.
14235
14236 2005-04-05  John Luke  <john.luke@gmail.com>
14237             Raja R Harinath  <rharinath@novell.com>
14238
14239         Fix #62232.
14240         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
14241         struct too.  Return false quicker in a few cases.
14242         (VerifyUnManaged): Use it.
14243
14244 2005-04-05  Raja R Harinath  <rharinath@novell.com>
14245
14246         Fix #74041.
14247         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
14248         not 'unreachable_seen'.
14249
14250 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
14251
14252         * attribute.cs (Attribute.GetValue): Removed unused.
14253         
14254         * codegen.cs (CodeGen.TrimExt): Removed unused.
14255         
14256         * cs-parser.jay (output): Removed unused.
14257         
14258         * cs-tokenizer.cs (hex_digits): Removed unused.
14259         
14260         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
14261         
14262         * expression.cs (Indirection.LoadExprValue): Removed unused.
14263         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
14264         
14265         * iterators.cs (Iterator.param_types): Removed unused.
14266         
14267         * statement.cs (Goto.block): Removed unused.
14268         (ToplevelBlock.did): Removed unused.
14269         (Switch.ResolveConstantSwitch): Removed unused.
14270
14271 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
14272
14273         * rootcontext.cs: Allow mcs to bootstrap with the compilation
14274         resetting thingy.
14275
14276 2005-04-01  Raja R Harinath  <rharinath@novell.com>
14277
14278         Fix #74232 and cs0208-3.cs.
14279         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
14280         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
14281         unmanaged type.  Don't use FieldBuilders when 't' is a
14282         TypeBuilder.  Use ModFlags and MemberType fields.
14283         * class.cs (MemberBase.member_type): Rename from MemberType.
14284         (MemberBase.MemberType): New property.  Determines member_type on
14285         demand.
14286         (MemberBase.DoDefine): Don't initialize MemberType here.
14287         (FieldMember.Define): Likewise.
14288
14289 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
14290
14291         Fix #74241
14292         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
14293         Attributes are emitted there.
14294         
14295 2005-04-01  Raja R Harinath  <rharinath@novell.com>
14296
14297         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
14298         keyword in 'partial enum' too.
14299         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
14300         is not allowed).
14301         Report from Kamil Skalski <nazgul@omega.pl>.
14302
14303         Fix #74309.
14304         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
14305         have partial containers too.
14306
14307         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
14308         in block' checks to Block.CheckInvariantMeaningInBlock.
14309         * statement.cs (Block.GetKnownVariableInfo): Make private.
14310         (Block.IsVariableUsedInChildBlock): Remove.
14311         (Block.IsVariableUsedInBlock): Likewise.
14312         (Block.CheckInvariantMeaningInBlock): New.  Show location of
14313         conflicting declaration.
14314         (Block.AddVariable): Make error messages less long-winded and more
14315         specific.  Show location of conflicting declaration.
14316         * parameter.cs (Parameters.Location): New readonly property.
14317
14318 2005-03-31  Raja R Harinath  <rharinath@novell.com>
14319
14320         Clean up semantics of invoking ResolveMemberAccess.
14321         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
14322         can have an instance, ensure that we pass in a non-TypeExpression
14323         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
14324         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
14325         argument.  Update to changes and simplify.
14326         (FieldExpr.Emitinstance): Remove CS0120 check.
14327         (PropertyExpr.EmitInstance): Likewise.
14328         * expression.cs (Argument.Resolve): Likewise.
14329         (Invocation.DoResolve): Update to changes in semantics of
14330         InstanceExpression.
14331
14332 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
14333
14334         Fix #74241
14335         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
14336         customization.
14337         
14338         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
14339
14340 2005-03-31  Raja R Harinath  <rharinath@novell.com>
14341
14342         Fix difference in behaviour with commandline invocation.
14343         * driver.cs (Driver.Reset): New.
14344         (CompilerCallableEntryPoint): Call it.
14345
14346         * statement.cs (If.Resolve): Avoid spurious "uninitialized
14347         variable" warnings if the boolean expression failed to resolve.
14348
14349 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
14350
14351         * attribute.cs: Fix the union of several permissions when some of them
14352         are unrestricted (so the result isn't an unrestricted permission set).
14353         Fix #74036.
14354
14355 2005-03-30  Raja R Harinath  <rharinath@novell.com>
14356
14357         * ecore.cs (MemberExpr): New class.  Convert from interface
14358         IMemberExpr.
14359         (MemberExpr.ResolveMemberAccess): Refactor and move here from
14360         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
14361         error checks.
14362         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
14363         (MethodGroupExpr.IsExplicitImpl): Remove.
14364         (Expression.GetFieldFromEvent): Remove.
14365         (SimpleName.MemberStaticCheck): Remove.
14366         (SimpleName.DoSimpleNameResolve): Update to changes.
14367         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
14368         (MemberAccess.IdenticalNameAndTypeName): Remove.
14369         (MemberAccess.error176): Move to MemberExpr.
14370         (MemberAccess.DoResolve): Update to changes.
14371         (BaseAccess.DoResolve): Likewise.
14372
14373 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
14374
14375         C# 2.0 Conditional attribute class implementation
14376         
14377         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
14378         Analyzes class whether it has attribute which has ConditionalAttribute
14379         and its condition is not defined.
14380         
14381         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
14382         (Class.IsExcluded): New method. Search for at least one defined
14383         condition in ConditionalAttribute of attribute class.
14384
14385 2005-03-30  Raja R Harinath  <rharinath@novell.com>
14386
14387         * ecore.cs (PropertyExpr): Derive from Expression, not
14388         ExpressionStatement.
14389         (PropertyExpr.EmitStatement): Remove.
14390
14391 2005-03-29  Raja R Harinath  <rharinath@novell.com>
14392
14393         Fix #74060.
14394         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
14395         internal field "value__" of an enum be private.  The examples for
14396         "value__" that I found on MSDN all used FieldAttributes.Private.
14397
14398         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
14399         Don't mention IL method attribute names.
14400
14401         Fix #47991.  Remove a TODO.
14402         * statement.cs (Block.Toplevel): Make into a field.
14403         (Block.Parameters): Move into ToplevelBlock.
14404         (Block.known_variables): Rename from child_variable_names.
14405         (Block.Block): Remove variants that take Parameters.  Initialize
14406         'Toplevel' with the immediately surrounding toplevel block.
14407         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
14408         LocalInfo parameter.
14409         (Block.GetKnownVariableInfo): New.
14410         (Block.IsVariableNameUsedInChildBlock): Update.
14411         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
14412         the block, even though it may not be in scope.
14413         (Block.AddVariable): Remove Parameters parameter.  Use
14414         Toplevel.Parameters instead.
14415         (Block.AddConstant): Remove Parameters parameter.
14416         (Block.GetParameterReference): Update to use Toplevel.Parameters.
14417         (Block.IsParamaterReference): Likewise.
14418         (Block.IsLocalParameter): Likewise.  Simplify a lot.
14419         (ToplevelBlock.Parameters): New.  Moved from Block.
14420         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
14421         initialize Parameters to a non-null value.
14422         * cs-parser.jay: Update to changes.
14423         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
14424         simple names that mean different things in the same block.  Use
14425         Block.IsVariableNameUsedInBlock.
14426
14427 2005-03-28  Raja R Harinath  <rharinath@novell.com>
14428
14429         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
14430         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
14431         GetTypeHandle.  It is possible for a reflected type to derive from
14432         a TypeBuilder (e.g., int[] derives from the TypeBuilder
14433         System.Array during mscorlib compilation).
14434         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
14435         contain a method_hash, don't create one either.  Don't create a
14436         deep copy of the base cache's method_hash.
14437         (MemberCache.SetupCache): Rename back from DeepCopy.
14438         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
14439         already initialized.  If we see an override function, add its
14440         underlying base virtual function to the member_hash too.
14441
14442         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
14443
14444 2005-03-26  Raja R Harinath  <harinath@acm.org>
14445
14446         Fix #73038.
14447         * assign.cs (Assign.DoResolve): When the RHS of an assignment
14448         fails to resolve, ensure that the LHS is still resolved as an
14449         lvalue.
14450
14451 2005-03-25  Raja R Harinath  <harinath@acm.org>
14452
14453         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
14454         ec.ContainerType.
14455         (Enum.current_ec): Remove.
14456         (Enum.LookupEnumValue): Remove EmitContext argument.
14457         Just uses the one created during DefineType.
14458         (Enum.FindMembers): Update.
14459         * expression.cs (MemberAccess.DoResolve): Update.
14460
14461 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
14462
14463         * assign.cs (Assign.DoResolve): Check for CS1717 when
14464         source and target are same (uses Equals).
14465
14466         * expression.cs (LocalVariableReference, ParameterReference,
14467         This): Implemented Equals, GetHashCode.
14468
14469         * statement.cs (Block.GetParameterReference): Removed useless
14470         local variable.
14471
14472 2005-03-22  Raja R Harinath  <rharinath@novell.com>
14473
14474         Fix cs0128.cs
14475         * statement.cs (Block.AddVariable): Ensure that we skip implicit
14476         blocks before deciding whether the error is cs0136 or cs0128.
14477
14478         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
14479         (using_alias_directive, using_namespace_directive): Pass
14480         MemberName, not an expression to Namespace.UsingAlias and
14481         Namespace.Using.
14482         (MakeName): Use the MemberName of the namespace.
14483         * namespace.cs (Namespace.MemberName): New.
14484         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
14485         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
14486         Likewise.
14487         * decl.cs (MemberName.Name): Make readonly.
14488         (MemberName.FromDotted): New "constructor".
14489         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
14490         (MemberCore.Name): Compute from MemberName on demand.
14491         (MemberCore.SetMemberName): Provide a way to change the
14492         MemberName.
14493         (MemberCore.AddToContainer): Don't take a fullname parameter.
14494         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
14495         fully qualified name of the container to the member name.
14496         (TypeContainer.AddToTypeContainer): Use a fully qualified name
14497         only if the type is a member of the root container.
14498         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
14499         MemberName.Left rather than searching for an embedded ".".
14500         (PartialContainer.CreatePart): Update to changes in RootContext.
14501         (MemberBase.ShortName): Turn into a property.  Use
14502         MemberCore.SetMemberName.
14503         (MemberBase.ExplicitInterfaceName): Remove.
14504         (MemberBase.UpdateMemberName): Remove.
14505         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
14506         (PropertyBase.SetMemberName): New override.
14507         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
14508         (Tree.GetDecl): New.
14509         (Tree.AllDecls): Rename from Decls.
14510         * attribute.cs, enum.cs, report.cs: Update to changes.
14511         * driver.cs (MainDriver): Use MemberName.FromDotted on
14512         RootContext.MainClass.
14513
14514 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
14515
14516         * class.cs (FixedField.Define): Check for CS1664 and more sanity
14517         checks.
14518
14519         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
14520
14521 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
14522
14523         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
14524         property accessor modifiers.
14525
14526         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
14527         fixed buffer attribute (CS1716).
14528         (PropertyMethod.HasCustomAccessModifier): When property accessor
14529         has custom modifier.
14530
14531         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
14532         modifiers.
14533         (PropertyExpr.DoResolveLValue): Add CS0272.
14534
14535 2005-03-17  Miguel de Icaza  <miguel@novell.com>
14536
14537         * convert.cs: When converting to a pointer, use the proper Conv.U
14538         or Conv.I depending on the source data type.
14539
14540         * cs-tokenizer.cs: Make the size for large decimal constants,
14541         fixes #72957.
14542
14543 2005-03-17  Martin Baulig  <martin@ximian.com>
14544
14545         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
14546         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
14547
14548 2005-03-17  Martin Baulig  <martin@ximian.com>
14549
14550         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
14551         to bool so we can return an error condition.
14552         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
14553         returned an error.
14554
14555 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
14556
14557         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
14558         attributes.
14559
14560 2005-03-16  Raja R Harinath  <rharinath@novell.com>
14561
14562         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
14563         Refactor to avoid traversing the list of assemblies, and to avoid
14564         string concatenation.
14565         * typemanager.cs (guid_attr_type): Remove.
14566         (negative_hits, pointers, references): Remove hashes.
14567         (type_hash): New.
14568         (GetConstructedType): New.  Uses type_hash to handle constructed
14569         types (arrays, references, pointers).
14570         (GetReferenceType, GetPointerType): Use it.
14571         (GetNestedType): New.  Uses type_hash to handle nested types of
14572         reflected types.
14573         (LookupType, LookupTypeDirect): Remove.
14574         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
14575         'types' hash and LookupTypeReflection directly.
14576         (params_string, params_object): Use GetConstructedType.
14577         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
14578         top-level types.
14579         (Namespace.Lookup): Use cached_types.
14580         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
14581         provided by old TypeManager.LookupType.
14582         * rootcontext.cs (MakeFQN): Remove.
14583         * decl.cs (DeclSpace.MakeFQN): Likewise.
14584         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
14585         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
14586         TypeManager.GetConstructedType.
14587         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
14588
14589 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
14590
14591         * class.cs (MethodCore.CheckBase): Report CS1715 for properties and
14592         indexers.
14593
14594         * cs-parser.jay: Reports CS1527 for any namespace element.
14595
14596         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
14597         Added CS0407.
14598
14599         * expression.cs (ParameterReference.IsAssigned): Changed error to
14600         CS0269.
14601         (Error_WrongNumArguments): Moved CS0245 detection here.
14602
14603         * statement.cs (Return.Resolve): Add CS1622 report.
14604
14605 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
14606
14607         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
14608
14609 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
14610
14611         * attribute.cs expression.cs: Get rid of some allocations.
14612
14613 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
14614
14615         * doc.cs : just eliminate the latest change.
14616
14617 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14618
14619         * doc.cs : commented out the latest change. It breaks xml-030.cs
14620
14621 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14622
14623         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
14624           fail. So invoke CreateType() in FindDocumentedType().
14625
14626 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14627
14628         * cs-tokenizer.cs : added IsKeyword().
14629         * doc.cs : Detect keyword incorrectly used as identifier.
14630           Allow identifiers prefixed by @.
14631
14632 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
14633
14634         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
14635         It caused exception in namespace resolving (again!).
14636         
14637         * class.cs (Class.ctor): Removed exit.
14638         (PropertyMethod.ctor): ditto.
14639         
14640         * codegen.cs (Codegen.Reset): Reset static data.
14641         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
14642         
14643         * cs-tokenizer.cs (Cleanup): Removed.
14644         
14645         * driver.cs (GetSystemDir): Rewrote to one line command.
14646         It caused problem with unloaded dynamic modules.
14647         (UnixParseOption): Removed Exit.
14648         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
14649         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
14650         Now can be mcs used as library.
14651         
14652         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
14653         empty location.
14654         
14655         * location.cs (Reset): Reset static data.
14656         
14657         * namespace.cs (Reset): Reset static data.
14658         
14659         * report.cs (Report.Reset): Reset static data.
14660         
14661         * rootcontext.cs (RootContext.Reset): Reset static data.
14662         
14663         * tree.cs (RootTypes.ctor): Use Location.Null
14664         
14665         * typemanager.cs (TypeManager.Reset): Reset static data.
14666         (CoreLookupType): Removed Exit.
14667         (TypeHandle.Reset): Reset static data.
14668         
14669 2005-03-10  Raja R Harinath  <rharinath@novell.com>
14670
14671         Fix #73516.
14672         * typemanager.cs (ComputeNamespaces): Import namespaces from
14673         referenced modules too.
14674
14675 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14676
14677         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
14678         than '.'.
14679
14680 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14681
14682         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
14683         enclosing DeclSpace.  This ensures that a name-lookup populates
14684         more caches and there are fewer 'TypeExpression's.  Carve out
14685         nested type lookup into ...
14686         (LookupNestedTypeInHierarchy): ... this.
14687
14688 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14689
14690         Clean up a few partial-class semantics.  
14691         Fixes test-357.cs and cs1618-2.cs.
14692         * cs-parser.jay (struct_declaration): Use 'current_class' as
14693         parent of newly-created struct.  Remove call to Register ().
14694         Use 'pop_current_class' to complete handing the current struct.
14695         (interface_declaration): Likewise.
14696         (class_declaration): Likewise.
14697         (enum_declaration): Use 'current_class' as parent of newly created
14698         enum.
14699         (delegate_declaration): Likewise.
14700         (pop_current_class): New function.  This is used to handle closing
14701         up the 'current_class' and 'current_container', and pointing them
14702         to the enclosing class/container.
14703         (CSharpParser): Initialize 'current_class' too.
14704         * decl.cs (MemberCore): Add check for invariant: a partial
14705         container is not a parsed entity, and thus does not enclose any
14706         parsed members.
14707         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
14708         (DeclSpace.BaseTypeExpr): Use it.
14709         (DeclSpace.LookupType): Add check for invariant.
14710         * class.cs (TypeContainer): Add check for invariant: a nested
14711         class should have the same NamespaceEntry as its enclosing class.
14712         (TypeContainer.EmitFieldInitializers): Make virtual.
14713         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
14714         MemberCore.
14715         (TypeContainer.Register): Remove.
14716         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
14717         null.  Use TypeResolveEmitContext for resolving base types and
14718         interfaces.  Move initialization of Parts.TypeBuilder here from
14719         ...
14720         (TypeContainer.DefineNestedTypes): ... here.
14721         (PartialContainer): Take a Namespace not a NamespaceEntry.
14722         (PartialContainer.Create): Don't use Register.  Call the
14723         appropriate Add... function directly.
14724         (ClassPart): Take both the PartialContainer and the enclosing
14725         class as constructor arguments.
14726         (ClassPart.EmitFieldInitializers): Override.
14727         (ClassPart.PartFindNestedTypes): Remove.
14728         (FieldBase.GetInitializerExpression): Resolve the initializer
14729         expression in the emit context of the enclosing class.
14730         * tree.cs (RootTypes): Remove Register ().
14731         
14732 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
14733
14734         * cs-parser.jay: Removed CS0134.
14735         
14736         * driver.cs: Removed CS1901.
14737         
14738         * expression.cs (SizeOf.DoResolve): Don't report CS0233
14739         for predefined types.
14740
14741 2005-03-07  Duncan Mak  <duncan@novell.com>
14742
14743         * codegen.cs (Save):  Catch UnauthorizedAccessException as
14744         well. Fixes bug #73454.
14745
14746 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
14747
14748         * cs-tokenizer.cs (xtoken): Add CS1035.
14749         
14750         * class.cs (MethodData.Define): Add CS0683.
14751         (FieldMember.ctor): Add CS0681.
14752
14753 2005-03-07  Raja R Harinath  <rharinath@novell.com>
14754
14755         * ecore.cs (SimpleName.DoResolve): Rename from
14756         SimpleName.DoResolveAllowStatic.
14757         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
14758         Pass 'intermediate' flag to MemberStaticCheck.
14759         (SimpleName.MemberStaticCheck): Skip "static check" only in case
14760         of "intermediate" lookups via MemberAccess.
14761         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
14762         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
14763
14764 2005-03-07  Raja R Harinath  <rharinath@novell.com>
14765
14766         Fix #73394.
14767         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
14768         slipped in because of variable names that are identical to a
14769         builtin type's BCL equivalent ('string String;', 'int Int32;').
14770         (PropertyExpr.EmitInstance): Likewise.
14771
14772 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
14773
14774         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
14775         
14776         * report.cs (warning_ignore_table): Made public.
14777
14778 2005-03-04  Raja R Harinath  <rharinath@novell.com>
14779
14780         Fix #73282.
14781         * class.cs (MethodData.Emit): Pass 'container' to
14782         container.GetObsoleteAttribute instead of 'container.Parent'.
14783
14784 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
14785
14786         * cs-parser.jay: Add 1534 error test.
14787
14788         * iterators.cs (Yield.CheckContext): Add error 1629.
14789         (Iterator.ctor): Save unsafe modifier.
14790         (MoveNextMethod.DoEmit): Restore unsafe context.
14791
14792         * namespace.cs (UsingAlias): Better error message.
14793
14794 2005-03-03  Dan Winship  <danw@novell.com>
14795
14796         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
14797         the warning message [#73219]
14798
14799 2005-03-03  Raja R Harinath  <rharinath@novell.com>
14800
14801         Fix compile with MCS 1.0.0.0.
14802         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
14803         w_restore to not depend on string constant folding.
14804
14805 2005-03-03  Raja R Harinath  <rharinath@novell.com>
14806
14807         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
14808         CS0246 check to users who passed 'silent = false'.
14809         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
14810         check.
14811         (SimpleName.SimpleNameResolve): Update.
14812         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
14813         (MemberAccess.IdenticalNameAndTypeName): Update.
14814         * doc.cs (FindDocumentedTypeNonArray): Update.
14815
14816 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
14817
14818         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
14819         * parameters.cs (ComputeAndDefineParameters): Remove.
14820         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
14821         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
14822         Use GetParameterInfo.
14823
14824 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
14825
14826         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
14827
14828 2005-03-02  Raja R Harinath  <rharinath@novell.com>
14829
14830         Unify DeclSpace.LookupType and DeclSpace.FindType.
14831         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
14832         is in charge of defining nested types on demand.
14833         (DeclSpace.LookupType): Use it when the current_type is a
14834         TypeBuilder.  Use LookupTypeDirect for reflected types.
14835         (DeclSpace.FindType): Remove.
14836         (DeclSpace.LookupInterfaceOrClass): Likewise.
14837         (DeclSpace.DefineTypeAndParents): Likewise.
14838         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
14839         DeclSpace.LookupType.
14840         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
14841         * typemanager.cs (LookupType): Simplify.
14842         (AddUserType): Remove type from negative_hits.
14843         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
14844         * class.cs (TypeContainer.FindMembers): Move handling of nested
14845         types ...
14846         (TypeContainer.FindMembers_NestedTypes): ... here.
14847         (TypeContainer.FindNestedType): Implement override.
14848         (ClassPart.FindNestedType): Delegate to PartialContainer.
14849         (ClassPart.PartFindNestedType): Looks up the nested types of the
14850         part alone.
14851
14852 2005-03-02  Martin Baulig  <martin@ximian.com>
14853
14854         * class.cs (TypeContainer.DoDefineMembers): We also need a default
14855         static constructor in static classes.
14856
14857 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
14858
14859         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
14860         sizeParamIndex is not specified.
14861
14862 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
14863
14864         Fix #73117
14865         * report.cs (WarningMessage.IsEnabled): Missing null check.
14866
14867 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14868
14869         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
14870         in the fields and not in the properties.
14871
14872 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
14873
14874         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
14875         fields as well.
14876
14877 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14878
14879         * attribute.cs: Small refactoring (improved robustness).
14880         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
14881         (ValidateGuid): Removed.
14882         (Resolve): Removed referenced to above mentioned.
14883         (GetAttributeUsage): Made private and changed to work without
14884         class assistance.
14885         (GetIndexerAttributeValue): Don't crash.
14886         (GetConditionalAttributeValue): Ditto.
14887         (GetClsCompliantAttributeValue): Ditto.
14888         (ExtractSecurityPermissionSet): All attributes exceptions are
14889         error 648.
14890         (GetPropertyValue): New helper.
14891         (GetMethodImplOptions): New method.
14892         (DefinePInvokeMethod): Reuse common code. Implemented handling of
14893         some missing properties.
14894         
14895         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
14896         (Method.ApplyAttributeBuilder): Updated.
14897         
14898         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
14899         exception.
14900
14901 2005-02-28  Raja R Harinath  <rharinath@novell.com>
14902
14903         Fix #73052.
14904         * report.cs (Report.SymbolRelatedToPreviousError): Handle
14905         non-simple types (array, pointer, reference).
14906
14907 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14908
14909         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
14910
14911         * class.cs (MethodCore.IsDuplicateImplementation): Special error
14912         for operators.
14913         (Method.CheckBase): Catch wrong destructor here.
14914         (MethodData.Define): Add errors 550, 668.
14915
14916         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
14917
14918         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
14919
14920         * pending.cs (VerifyPendingMethods): Add error 551.
14921
14922         * typemanager.cs (CSharpName): Next error report helper.
14923
14924 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
14925
14926         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
14927         attributes. Removed useless attribute double check.
14928         It saves almost 2MBs for corlib.
14929
14930 2005-02-25  Raja R Harinath  <rharinath@novell.com>
14931
14932         Fix #72924.
14933         * statement.cs (ExpressionStatement.Resolve): Make robust to being
14934         called twice in case of error.
14935
14936 2005-02-23  Chris Toshok  <toshok@ximian.com>
14937
14938         Fix compiler portions of #72827.
14939         * statement.cs (Block.Emit): call Begin/EndScope on the
14940         EmitContext instead of the ILGenerator.
14941
14942         * codegen.cs (EmitContext.BeginScope): new method, call
14943         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
14944         we have one.)
14945         (EmitContext.BeginScope): same, but EndScope and CloseScope
14946
14947         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
14948         offset and call the superclass's OpenScope(int) with it.
14949         (SymbolWriter.CloseScope): get the current il
14950         offset and call superclass's CloseScope(int) with it.
14951
14952 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
14953
14954         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
14955         CS1677 for out and ref as well.
14956
14957         * class.cs (Method.Define): Add error CS1599 detection.
14958         
14959         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
14960         
14961         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
14962         
14963         * delegate.cs (Delegate.Define): Add error CS1599 detection.
14964         
14965         * support.cs.cs (ModifierDesc): New helper method.
14966
14967 2005-02-23  Raja R Harinath  <rharinath@novell.com>
14968             Abin Thomas  <projectmonokochi@rediffmail.com>
14969             Anoob V E  <projectmonokochi@rediffmail.com>
14970             Harilal P R  <projectmonokochi@rediffmail.com>
14971
14972         Fix #57851, #72718.
14973         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
14974         MemberLookup (used for error reporting) actually returns a result.
14975         Fix error report number (122, not 112).
14976
14977 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
14978             Anoob V E  <projectmonokochi@rediffmail.com>
14979             Harilal P R  <projectmonokochi@rediffmail.com>
14980
14981         Fix #71134.
14982         * pending.cs (PendingImplementation.GetAbstractMethods):
14983         Find NonPublic members too.
14984
14985 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
14986
14987         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
14988         Fixed error 217.
14989         
14990         * class.cs (MethodCore.CheckMethodAgainstBase):
14991         Add error 239 report.
14992
14993 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14994
14995         Fix #68955.
14996         * expression.cs (Invocation.IsApplicable): Make public.
14997         (Invocation.IsParamsMethodApplicable): Likewise.
14998         * delegate.cs (Delegate.VerifyApplicability): Don't use
14999         Invocation.VerifyArgumentCompat for parameter applicability
15000         testing.  Use Invocation.IsApplicable and
15001         Invocation.IsParamsMethodApplicable.
15002
15003 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
15004
15005         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
15006         
15007         * class.cs (Operator.Define): Add error 217 report.
15008         
15009 2005-02-21  Raja R Harinath  <rharinath@novell.com>
15010
15011         * namespace.cs (UsingEntry.Resolve): Undo change below.
15012
15013 2005-02-21  Raja R Harinath  <rharinath@novell.com>
15014
15015         Fix #72756.
15016         * ecore.cs (Expression.MemberLookupFailed): Add argument to
15017         disable the error message when the extended MemberLookup also
15018         fails.
15019         (Expression.MemberLookupFinal): Update.
15020         (SimpleName.DoSimpleNameResolve): Update.
15021         * expression.cs (MemberAccess.ResolveNamespaceOrType):
15022         Don't use MemberLookupFinal.
15023         (New.DoResolve): Update.
15024         (BaseAccess.CommonResolve): Update.
15025
15026 2005-02-21  Raja R Harinath  <rharinath@novell.com>
15027
15028         Fix #72732.
15029         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
15030         occured previously, don't resolve again.
15031
15032 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
15033
15034         Fix #69949
15035         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
15036         argument. Call ResolveAttributeUsage for unresolved.
15037         when types doesn't match ctor arguments.
15038         
15039         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
15040         for nested attribute classes.
15041         (Class.attribute_usage): Removed.
15042         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
15043         for attribute class.
15044         
15045         * ecore.cs (IsAttribute): Removed.
15046         
15047         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
15048         
15049         * rootcontext.cs (RegisterAttribute): Removed, attributes are
15050         now normal types.
15051         (attribute_types): Removed.
15052         (EmitCode): Global attributes are emited as the latest.
15053
15054 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
15055
15056         * class.cs (EmitFieldInitializers): Don't emit field initializer
15057         for default values when optimilization is on.
15058         
15059         * constant.cs (Constant.IsDefaultValue): New property.
15060         
15061         * driver.cs: Add /optimize handling.
15062         
15063         * constant.cs,
15064         * ecore.cs,
15065         * literal.cs: Implement new IsDefaultValue property.
15066         
15067         * rootcontext.cs (Optimize): New field, holds /optimize option.
15068
15069 2005-02-18  Raja R Harinath  <rharinath@novell.com>
15070
15071         Fix crasher in re-opened #72347.
15072         * namespace.cs (Namespace.Lookup): Return null if
15073         DeclSpace.DefineType returns null.
15074
15075         Fix #72678.
15076         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
15077
15078 2005-02-18  Raja R Harinath  <rharinath@novell.com>
15079
15080         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
15081         now returns null if it cannot resolve to an lvalue.
15082         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
15083         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
15084         returned null.  Remove check for SimpleName.
15085         (EventExpr.DoResolveLValue): New.
15086         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
15087         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
15088         error from ...
15089         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
15090         avoid CS0131 error.
15091         (Unary.ResolveOperator): Move CS0211 check ...
15092         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
15093         CS0131 error.
15094         (Unary.DoResolveLValue): Simplify.
15095         (AddressOf.DoResolveLValue): New.
15096         (ArrayAccess.DoResolveLValue): New.
15097
15098 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
15099
15100         * attribute.cs (Attribute.Resolve): Add arguments casting for
15101         when types doesn't match ctor arguments.
15102
15103 2005-02-16  Raja R Harinath  <rharinath@novell.com>
15104
15105         Fix parts of #63202.
15106         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
15107         lookup of operator in base type.  Ensure that all checks happen
15108         when the operator resolves to an "op_..." method.
15109
15110 2005-02-15  Raja R Harinath  <rharinath@novell.com>
15111
15112         Fix #71992.
15113         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
15114         'ignore_cs0104' parameter.  Pass it to ...
15115         (NamespaceEntry.Lookup): ... this.
15116         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
15117         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
15118         (TypeLookupExpression.DoResolveAsTypeStep): Update.
15119         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
15120         Update.  Request that cs0104 errors be ignored.
15121         (ComposedCast.ResolveAsTypeStep): Update.
15122
15123 2005-02-14  Raja R Harinath  <rharinath@novell.com>
15124
15125         Fix #59209.
15126         * expression.cs (Invocation.BetterFunction): Remove support for
15127         comparing virtual functions and their overrides.
15128         (Invocation.IsOverride): New.
15129         (Invocation.OverloadResolve): Don't consider 'override' functions
15130         during candidate selection.  Store them in a lookaside list.
15131         If the selected method is a 'virtual' function, use the list to
15132         find any overrides that are closer to the LHS type.
15133
15134 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
15135
15136         * expression.cs (New.DoResolve): Add complex core type reduction.
15137         (New.Constantify): Converts complex core type syntax like 'new int ()'
15138         to simple constant.
15139         
15140 2005-02-14  Raja R Harinath  <rharinath@novell.com>
15141
15142         * decl.cs (EntryType.EntryType): New constructor to create an
15143         updated copy of a cache entry.
15144         (MemberCache.AddMethods): Use it.
15145         (MemberCache.ClearDeclaredOnly): Remove.
15146         (MemberCache.MemberCache): Update.
15147
15148 2005-02-11  Miguel de Icaza  <miguel@novell.com>
15149
15150         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
15151         variable.  This one is represents the actual low-level declaration
15152         of the method, as opposed to the semantic level `IsStatic'.   
15153
15154         An anonymous method which is hosted into a static method might be
15155         actually an instance method.  IsStatic would reflect the
15156         container, while MethodIsStatic represents the actual code
15157         generated.
15158
15159         * expression.cs (ParameterReference): Use the new MethodIsStatic
15160         instead of IsStatic.
15161
15162         * anonymous.cs (AnonymousMethod.Compatible): Pass the
15163         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
15164         set on the current EmitContext. 
15165
15166         * expression.cs (Cast): Overload DoResolveLValue so we can pass
15167         resolve our casted expression as an LValue.  This triggers the
15168         proper LValue processing that is later required by Assign.
15169
15170         This fixes 72347.
15171
15172         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
15173
15174 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
15175
15176         C# 2.0 Fixed buffer implementation
15177
15178         * anonymous.cs: Update after RegisterHelperClass renaming.
15179
15180         * attribute.cs (AttributeTester.fixed_buffer_cache):
15181         Cache of external fixed buffers.
15182         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
15183         implementation if field is fixed buffer else null.
15184
15185         * class.cs
15186         (TypeContainer.AddField): Accept FieldMember instead of Field.
15187         (FieldBase.IsFieldClsCompliant): Extracted code from
15188         VerifyClsCompliance descendant customization.
15189         (FixedField): New class handles fixed buffer fields.
15190         (FixedFieldExternal): Keeps information about imported fixed
15191         buffer.
15192         (IFixedField): Make access to internal or external fixed buffer
15193         same.
15194
15195         * cs-parser.jay: Add fixed buffer parsing.
15196
15197         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
15198         buffer.
15199
15200         * expression.cs (Indirection): Extended implementation to accept
15201         fixed buffer field.
15202         (PointerArithmetic.Emit): Get element from fixed buffer as well.
15203         (ElementAccess.MakePointerAccess): Get type as parameter.
15204         (DoResolve): Add fixed buffer field expression conversion.
15205         (DoResolveLValue): Ditto.
15206         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
15207         (ArrayPtr): Derives from FixedBufferPtr.
15208         (ArrayPtr.Emit): Add extra emit for array elements.
15209
15210         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
15211
15212         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
15213         for compiler generated types.
15214         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
15215
15216         * statement.cs (Fixed): Refactored to be easier add fixed buffer
15217         and consume less memory.
15218         (Fixed.Resolve): Add fixed buffer case.
15219
15220         * typemanager.cs (compiler_generated_attr_ctor,
15221         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
15222         (HasElementType): Add our own implementation to work on every
15223         runtime.
15224
15225 2005-02-11  Miguel de Icaza  <miguel@novell.com>
15226
15227         * anonymous.cs (CaptureContext): Track whether `this' has been
15228         referenced.   
15229
15230         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
15231         only captured `this' if it was implicitly done (instance
15232         methods/variables were used). 
15233
15234         * codegen.cs (EmitContext.CaptureThis): New method to flag that
15235         `this' must be captured.
15236
15237 2005-01-30  Miguel de Icaza  <miguel@novell.com>
15238  
15239         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
15240         is null it means that there has been no need to capture anything,
15241         so we just create a sibling.
15242
15243         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
15244
15245         Just a partial fix.  The other half is fairly elusive.
15246         
15247 2005-02-10  Raja R Harinath  <rharinath@novell.com>
15248
15249         Fix #52586, cs0121-4.cs.
15250         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
15251         and return a hashtable.
15252         (MemberCache.ClearDeclaredOnly): New.
15253         (MemberCache.MemberCache): Update to change.  Make a deep copy of
15254         the method_hash of a base type too.
15255         (MemberCache.AddMethods): Adapt to having a deep copy of the base
15256         type methods.  Overwrite entries with the same MethodHandle so
15257         that the ReflectedType is correct.  The process leaves in base
15258         virtual functions and their overrides as distinct entries.
15259         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
15260         matters since it was boxed in a ArrayList before.
15261         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
15262         modifier.
15263         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
15264         case of a virtual function and its override (choose the overload
15265         as better).
15266         (Invocation.OverloadResolve): Avoid 'override' members during
15267         'applicable_type' calculation.
15268
15269 2005-02-09  Raja R Harinath  <rharinath@novell.com>
15270
15271         Combine two near-redundant caches.
15272         * typemanager.cs (method_params): Rename from method_internal_params.
15273         (TypeManager.GetParameterData): New.  Replace
15274         Invocation.GetParameterData.
15275         (TypeManager.LookupParametersByBuilder): Remove.
15276         * expression.cs (Invocation.method_parameter_cache): Remove.
15277         (Invocation.GetParameterData): Remove.
15278         Update to changes.
15279         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
15280         Update to changes.
15281
15282 2005-02-08  Raja R Harinath  <rharinath@novell.com>
15283
15284         Fix #72015.
15285         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
15286         TypeManager.multicast_delegate_type is null, resolve it by looking
15287         up "System.MulticastDelegate".
15288         * rootcontext.cs (RootContext.ResolveCore): Simplify.
15289
15290 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
15291             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
15292             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
15293
15294         Fix cs0164.cs.
15295         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
15296         (LabeledStatement.AddReference): New.  Set 'referenced'.
15297         (Goto.Resolve): Use it.
15298
15299 2005-02-05  John Luke  <john.luke@gmail.com>
15300
15301         * driver.cs: remove duplicate -doc line in Usage ()
15302
15303 2005-02-04  Raja R Harinath  <rharinath@novell.com>
15304
15305         * location.cs (Location.AddFile): Fix CS2002 error report.
15306
15307 2005-02-02  Martin Baulig  <martin@ximian.com>
15308
15309         * delegate.cs (Delegate.DefineType): Report an internal error if
15310         TypeManager.multicast_delegate_type is null.  See bug #72015 for
15311         details.        
15312
15313 2005-02-02  Raja R Harinath  <rharinath@novell.com>
15314
15315         Fix a crasher in a variant of #31984.
15316         * const.cs (Constant.CheckBase): New override that defers the
15317         new-or-override check in case the base type hasn't been populated
15318         yet.
15319         (Constant.Define): Ensure the new-or-override check is performed.
15320
15321 2005-02-01  Duncan Mak  <duncan@ximian.com>
15322
15323         * const.cs (LookupConstantValue): Check that `ce' is not null
15324         before calling GetValue ().
15325
15326 2005-02-01  Raja R Harinath  <rharinath@novell.com>
15327
15328         Fix test-334.cs (#69519).
15329         * cs-parser.jay (using_alias_directive): Pass in an expression to
15330         NamespaceEntry.UsingAlias.
15331         (using_namespace_directive): Pass in an expression to
15332         NamespaceEntry.Using.
15333         (namespace_name): Don't flatten to a string.
15334         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
15335         (NamespaceEntry.AliasEntry.Resolve): Lookup using
15336         ResolveAsTypeStep.
15337         (NamespaceEntry.UsingEntry): Likewise.
15338         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
15339         changes.
15340         (NamespaceEntry.LookupForUsing): Remove.
15341         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
15342         names.
15343         (NamespaceEntry.Lookup): Remove support for dotted names.
15344
15345 2005-02-01  Raja R Harinath  <rharinath@novell.com>
15346
15347         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
15348         split into two.
15349         (NamespaceEntry.ImplicitParent): Compute on demand.
15350         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
15351         parallels the current.
15352         (NamespaceEntry.LookupForUsing): Use it.
15353         (NamespaceEntry.Lookup): If the current namespace-entry is
15354         implicit, don't search aliases and using tables.
15355
15356 2005-02-01  Raja R Harinath  <rharinath@novell.com>
15357
15358         Fix #31984.
15359         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
15360         BaseCache here.
15361         (TypeContainer.BaseCache): Compute on demand.
15362         (TypeContainer.FindMembers): Define constants and types if they're
15363         not already created.
15364         (FieldMember.Define): Move resetting of ec.InUnsafe before error
15365         check.
15366         * const.cs (Constant.Define): Make idempotent.
15367
15368 2005-01-29  Miguel de Icaza  <miguel@novell.com>
15369
15370         * pending.cs: Produce better code (no nops produced by using Ldarg
15371         + value).
15372         
15373         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
15374         i - 1' it should be arg + 1.
15375
15376         Fixes bug #71819.
15377
15378 2005-01-28  Raja R Harinath  <rharinath@novell.com>
15379
15380         * attribute.cs (Attribute.CheckAttributeType): Make private
15381         non-virtual.
15382         (Attribute.ResolveType): Make virtual.
15383         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
15384         handling of RootContext.Tree.Types.
15385
15386 2005-01-27  Raja R Harinath  <rharinath@novell.com>
15387
15388         Update attribute-handling to use the SimpleName/MemberAccess
15389         mechanisms.
15390         * cs-parser.jay (attribute): Pass in an expression to the
15391         constructors of Attribute and GlobalAttribute.
15392         * attribute.cs (Attribute): Take an expression for the name.
15393         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
15394         passed in attribute name expression.
15395         (Attribute.CheckAttributeType): Use it.
15396         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
15397         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
15398         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
15399         argument to prevent error messages if the lookup fails.
15400
15401 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
15402
15403         * expression.cs (Indirection): Implemented IVariable interface
15404         to support indirection in AddressOf operator.
15405         (PointerArithmetic.Emit): Add optimalization for case where
15406         result can be precomputed.
15407
15408 2005-01-26  Martin Baulig  <martin@ximian.com>
15409
15410         * class.cs (TypeContainer.AttributeTargets): Return the correct
15411         AttributeTargets depending on our `Kind' instead of throwing an
15412         exception; fixes #71632.
15413
15414 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
15415
15416         Fix #71257
15417         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
15418         constant members.
15419
15420 2005-01-25  Raja R Harinath  <rharinath@novell.com>
15421
15422         Fix #71602.
15423         * expression.cs (MemberAccess.DoResolve): Don't complain with
15424         cs0572 when the LHS of a member access has identical name and type
15425         name.
15426
15427 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
15428
15429         Fix #71651, #71675
15430         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
15431         CreatePermission.
15432         Create custom PermissionSet only for PermissionSetAttribute.
15433
15434 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
15435
15436         Fix #71649
15437         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
15438         delegates in static class.
15439
15440 2005-01-24  Martin Baulig  <martin@ximian.com>
15441
15442         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
15443         merging an implicit block, just use its reachability.
15444
15445         * statement.cs (Block.Resolve): Make the unreachable code check
15446         work wrt. implicit blocks; see test-337 from #63842.
15447
15448 2005-01-21  Alp Toker  <alp@atoker.com>
15449  
15450         * cs-parser.jay: destructor_declaration's container is PartialContainer
15451         not Class when partial types are used, so use Kind prop instead of
15452         'is'.
15453         
15454 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
15455
15456         * cs-parser.jay: Improve error reporting when an interface
15457         declares new types.
15458
15459 2005-01-20  Dick Porter  <dick@ximian.com>
15460
15461         * support.cs: SeekableStreamReader fix from Sandor Dobos
15462         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
15463         chars are read.  Fixes bug 70369.
15464
15465 2005-01-20  Raja R Harinath  <rharinath@novell.com>
15466
15467         * cs-parser.jay (catch_clause): Simplify current_block handling
15468         somewhat.
15469
15470 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
15471
15472         * convert.cs (ImplicitStandardConversionExists): Synchronize the
15473         code with ImplicitStandardConversion to handle the implicit
15474         conversion of method groups into valid delegate invocations. 
15475
15476         The problem is that in parameter handling we were using this code
15477         path.  Fixes bug #64698
15478
15479 2005-01-19  Raja R Harinath  <rharinath@novell.com>
15480
15481         * cs-parser.jay: Fix several infelicities.
15482         - Avoid assigning to the parser value stack.  Code like 
15483           '$3 = null' is unclean.  Synthesize a value for the code block
15484           instead. 
15485         - Avoid using oob_stack for storing location information.  Use ...
15486         (_mark_): ... this.  New (empty) rule.  Saves the current location
15487         in $$.
15488         (foreach_statement): Avoid using oob_stack for current_block
15489         handling.  Use technique used in for_statement and
15490         using_statement.  Synthesize a value for the code block to store
15491         additional intermediate information.
15492
15493 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
15494
15495         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
15496         of a different type is only allowed to private fields of a
15497         containing type, not on fields of a base class.
15498
15499         See test-174.cs and error cs0122-9.cs
15500
15501 2005-01-13  Raja R Harinath  <rharinath@novell.com>
15502
15503         Fix test-335.cs (bug #58126).
15504         * cs-parser.jay (argument): Split out non-expression parts of the
15505         rule into 'non_simple_argument'.
15506         (invocation_expression): Support parenthesized invocations with
15507         multiple arguments, and with single non-simple arguments.
15508
15509 2005-01-13  Raja R Harinath  <rharinath@novell.com>
15510
15511         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
15512         places.
15513
15514 2005-01-12  Raja R Harinath  <rharinath@novell.com>
15515
15516         Fix cs0038-1.cs, cs1640-6.cs.
15517         * ecore.cs (Expression.Resolve): Remove special-case for
15518         SimpleName in error-handling.
15519         (Expression.almostMatchedMembers): Relax access permission to
15520         protected.
15521         (Expression.MemberLookupFailed): Handle duplicates in
15522         almostMatchedMembers list.
15523         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
15524         * expression.cs (New.DoResolve): Report CS1540 for more cases.
15525         * typemanager.cs (GetFullNameSignature): Use the MethodBase
15526         overload if the passed in MemberInfo is a MethodBase.
15527
15528 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
15529
15530         Fix #70749
15531         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
15532         for non-CAS & merge permission sets properly.
15533
15534 2005-01-11  Raja R Harinath  <rharinath@novell.com>
15535
15536         Improve standard-compliance of simple name and member access 
15537         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
15538         * ecore.cs (FullNamedExpression): New abstract base class 
15539         for Namespaces and TypeExpressions.
15540         (ResolveFlags.SimpleName): Remove.
15541         (SimpleName): Remove support for dotted names.
15542         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
15543         DeclSpace.FindType and DeclSpace.LookupType.
15544         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
15545         (Expression.ExprClassName): Make member function.
15546         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
15547         a namespace.  Remove creation of dotted "SimpleName"s.
15548         (MemberAccess.DoResolve): Likewise.
15549         * decl.cs (DeclSpace.Cache): Make private.
15550         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
15551         (DeclSpace.FindType): Update.
15552         (DeclSpace.LookupType): Move here from RootContext.  Return a 
15553         FullNamedExpression.
15554         * namespace.cs (Namespace): Derive from FullNamedExpression
15555         so that it can be part of expression resolution.
15556         (Namespace.Lookup): Return an FullNamedExpression.
15557         (NamespaceEntry.LookupAlias): Lookup aliases only in current
15558         namespace.
15559         * rootcontext.cs (NamespaceLookup): Remove.
15560         (LookupType): Move to DeclSpace.
15561         * attribute.cs (CheckAttributeType): Update.
15562         * doc.cs (FindDocumentedType): Remove allowAlias argument.
15563         (FindDocumentedTypeNonArray): Likewise.
15564
15565 2005-01-11  Raja R Harinath  <rharinath@novell.com>
15566
15567         Fix cs0509.cs, cs1632.cs.
15568         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
15569         is the same as IsInterface.
15570         (TypeContainer.GetClassBases): Likewise.
15571         * statement.cs (LabeledStatement.ig): New field.
15572         (LabeledStatement.LabelTarget): Save ILGenerator which created the
15573         label.
15574         (LabeledStatement.DoEmit): Check that the label was created with
15575         the same ILGenerator.
15576
15577 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
15578
15579         Fix #71058
15580         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
15581         accessors to its properties.
15582
15583         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
15584         from accessors to property.
15585         
15586 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
15587
15588         Fix #70722
15589         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
15590         only for overrides.
15591         
15592 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
15593
15594         * attribute.cs: Check for null and empty strings.  
15595
15596         I have lost another battle to Paolo.
15597
15598 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
15599
15600         Fix #70942
15601         * class.cs (PropertyMethod): Set Parent field in ctors.
15602         (SetMethod.InternalParameters): Add unsafe switch hack.
15603         Override MarkForDuplicationCheck where it is appropriate.
15604
15605         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
15606         It says whether container allows members with the same name.
15607         Base default is no.
15608         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
15609         Removed is_method parameter.
15610
15611 2005-01-06  Duncan Mak  <duncan@ximian.com>
15612
15613         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
15614         because the previous change led to incorrect reporting of CS1032
15615         ("Cannot define/undefine preprocessor symbols after first token in
15616         file"). Instead of using `tokens_seen' as the only flag that
15617         triggers CS1040, introduce `comments_seen'. This new flag is used
15618         to signify having seen comments on the current line, so it is
15619         unset after a newline.
15620
15621 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
15622
15623         * doc.cs : When searching for a type, find nested type too.
15624           This fixes bug #71040.
15625
15626 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
15627
15628         * doc.cs :
15629           - Warn missing member comment on those classes which also does not
15630             have doc comments. Fixed bug #71041.
15631           - Don't warn missing doc comment on default constructor.
15632             Fixed bug #71042.
15633
15634 2005-01-06  Duncan Mak  <duncan@ximian.com>
15635
15636         * cs-tokenizer.cs (xtoken): After handling traditional C-style
15637         comments, set `tokens_seen' to true. This allows us to detect
15638         misplaced preprocessor directives (i.e. not at the beginning of
15639         the a line, nor after whitespaces). In that case, report error
15640         CS1040. This fixes bug #56460.
15641
15642         * cs-parser.jay (interface_member_declaration): Add checks for
15643         IsExplicitImpl, and report CS0541 error if an interface member is
15644         defined as an explicit interface declaration.
15645
15646 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
15647
15648         Fix #70817
15649         * class.cs (PropertyMethod): Set Parent field in ctors.
15650         (SetMethod.InternalParameters): Add unsafe switch hack.
15651         
15652         * decl.cs (MemberCore.Parent): Cannot be readonly.
15653
15654 2005-01-06  Raja R Harinath  <rharinath@novell.com>
15655
15656         * decl.cs (DeclSpace.ResolveType): Remove.
15657         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
15658         Merge in code from ...
15659         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
15660         * class.cs, enum.cs: Update to changes.
15661
15662 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
15663
15664         * anonymous.cs: Ensure that we init the scope of our parent if it
15665         has not been initialized yet.
15666
15667 2004-12-30  Duncan Mak  <duncan@ximian.com>
15668
15669         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
15670         if field.FieldBuilder is null. Fixes #70758.
15671
15672         * convert.cs: Fixed some typos and updated some of the comments.
15673         (ImplicitStandardConversionExists):
15674         (TryImplicitIntConversion): If `target_type' is an interface and
15675         the type of `ic' implements this interface, return true or a new
15676         BoxedCast instead of null. This fixes #70468.
15677
15678 2004-12-29  Duncan Mak  <duncan@ximian.com>
15679
15680         * expression.cs (Argument.Emit): Check that Expr is
15681         IMemoryLocation before casting to it, and report CS1510 otherwise.
15682
15683         This fixes #70402.
15684
15685 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
15686
15687         * statement.cs (Block.ThisVariable): remove the recursion here, to
15688         make the --profile more sane.
15689
15690 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
15691
15692         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
15693         assembly, by JB Evain.
15694
15695 2004-12-17  Raja R Harinath  <rharinath@novell.com>
15696
15697         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
15698           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
15699         "parent" refers to enclosing type/class.  "base" refers to superclass.
15700
15701 2004-12-17  Raja R Harinath  <rharinath@novell.com>
15702
15703         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
15704         Ensure that we only have GlobalAttributes.
15705         * attribute.cs (Attribute.Emit): Make non-virtual.
15706         (GlobalAttribute.Emit): Remove.
15707         (Attribute.Resolve): Make virtual.
15708         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
15709         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
15710         the argument. Don't create one.
15711         (Attribute.GetObsoleteAttribute): Likewise.
15712         (Attribute.GetClsCompliantAttributeValue): Likewise.
15713         * class.cs, decl.cs: Update to changes.
15714
15715 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
15716
15717         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
15718         
15719         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
15720         
15721         * statement.cs (Foreach.Resolve): Add error 186 report.
15722
15723 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
15724
15725         * expression.cs (Conditional.DoResolve): Add warning 429.
15726         
15727         * statement.cs (If.Resolve): Add warning 665.
15728
15729 2004-12-16  Raja R Harinath  <rharinath@novell.com>
15730
15731         New invariant: RootContext.Tree.Types.NamespaceEntry == null
15732         except when in the parser, and in GlobalAttribute.
15733         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
15734         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
15735         RootContext.Tree.Types.NamespaceEntry once work is done.
15736         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
15737         and resets RootContext.Tree.Types.NamespaceEntry.
15738
15739 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
15740
15741         * cs-parser.jay: Don't create a block for every variable.
15742
15743 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
15744
15745         * location.cs: Provide extra information.
15746
15747         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
15748         variables from the captured environment, it is the ldarg_0.
15749
15750 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
15751
15752         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
15753         find a conclusion.
15754         
15755         * class.cs: Changed warning level for 169 to avoid developer
15756         displeasure from warning flooding. It will be changed back when they
15757         fix most of current BCL warnings.
15758         
15759         * RootContext.cs: Pushed default WarningLevel to 3.
15760         
15761         * statement.cs: Removed unused variable.
15762
15763 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
15764
15765         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
15766         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
15767         Add error 502 report.
15768         (StaticClass.DefineType): Add error 441 report.
15769         (Class.AllowedModifiersProp): New virtual property as temporary
15770         extension to AllowedModifiers.
15771         (Class.DefineType): Add error 418 report. Moved ModFlags check here
15772         to share implementation with StaticClass and don't call virtual
15773         methods from ctor.
15774         
15775         * driver.cs (MainDriver): Add error 1558 test.
15776
15777         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
15778         report. Moved error 36 test here.
15779
15780         * statement.cs (Throw.Resolve): Add error 724 report.
15781
15782         * typemanager.cs: Add out_attribute_type core type.
15783         
15784 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
15785
15786         * class.cs (TypeContainer.VerifyClsCompliance): Add error
15787         3018 report.
15788         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
15789
15790         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
15791         3017 report.
15792         
15793         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
15794
15795         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
15796         Add error 3023 report.
15797         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
15798
15799         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
15800         implementation.
15801
15802 2004-12-12  John Luke  <john.luke@gmail.com>
15803
15804         * driver.cs (AddArgs): take -- into account when
15805         adding arguments, fixes bug 65710 
15806
15807 2004-12-12  Martin Baulig  <martin@ximian.com>
15808
15809         * expression.cs (Unary.TryReduceNegative): Added support for
15810         SByteConstant and ByteConstant.
15811         (Unary.Reduce): Check error values from TryReduceNegative().
15812
15813 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
15814
15815         * attributes.cs (Attribute.Resolve): Avoid multiple error report
15816         and report exception as error 182.
15817
15818 2004-12-10  Raja R Harinath  <rharinath@novell.com>
15819
15820         * driver.cs (Main): Fix message when there are warnings.
15821
15822 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
15823
15824         * delegate.cs: Fixed my fix from yesterday, sorry about that.
15825
15826 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
15827
15828         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
15829         Reduced number of warnings.
15830         
15831         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
15832
15833 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
15834
15835         * driver.cs: Removed message.
15836
15837         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
15838
15839 2004-12-08    <vargaz@freemail.hu>
15840
15841         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
15842
15843 2004-12-08  Martin Baulig  <martin@ximian.com>
15844
15845         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
15846         instead of a CS3002 for properties and indexer.
15847
15848 2004-12-08  Martin Baulig  <martin@ximian.com>
15849
15850         * decl.cs (MemberName.ToString): Make this work again.
15851
15852 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
15853
15854         * attribute.cs (Resolve): Add error 591 detection.
15855
15856         * class.cs (FieldMember.Define): Add error 1547 detection.
15857         (Indexer.Define): Add error 620 detection.
15858         (Operator.Define): Add error 590 detection.
15859
15860         * ecore.cs: Missing argument for error 79.
15861
15862         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
15863         detection.
15864
15865 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
15866
15867         Fix #70106
15868         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
15869         only.
15870
15871 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
15872
15873         * cs-parser.jay : handle doc comments on implicit/explicit operators.
15874           Some operator comments were suppressed.
15875         * doc.cs : Implicit/explicit operator name in doc comments are like
15876           "op_Explicit(type)~returnType", so added suffix handling.
15877
15878 2004-12-07  Martin Baulig  <martin@ximian.com>
15879
15880         * decl.cs
15881         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
15882         (MemberCore.GetClsCompliantAttributeValue): Likewise.
15883         (DeclSpace.ec): New protected field; store the EmitContext here.
15884         (DeclSpace.EmitContext): New public property; moved here from
15885         `TypeContainer'.
15886         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
15887         EmitContext.
15888
15889         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
15890         (Enum.Emit): Don't create a new EmitContext.
15891
15892         * delegate.cs (Delegate.DefineType): Always create the
15893         EmitContext.
15894
15895         * iterators.cs (Iterators.DefineIterator): Create a new
15896         EmitContext and store it in `ec'.
15897
15898 2004-08-24  Martin Baulig  <martin@ximian.com>
15899
15900         * typemanager.cs
15901         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
15902         this for accessibility checks.
15903         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
15904         IsNestedFamilyAccessible.
15905         (TypeManager.IsSubclassOf): New method, do what the name actually
15906         says.   
15907
15908 2004-12-06  Raja R Harinath  <rharinath@novell.com>
15909
15910         Fix crash on cs0657-17.cs.
15911         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
15912         Use RootContext.Tree.Types, not 'new RootTypes ()'.
15913         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
15914         the case where the NamespaceEntry gets overwritten.
15915
15916 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
15917
15918         Fixed #69195, #56821
15919         * ecore.cs (ResolveBoolean): Tiny refactoring.
15920
15921         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
15922         of right expression resolving when left is false constant and
15923         operator is LogicalAnd OR true constant and operator is LogicalOr.
15924
15925         * statement.cs (ResolveUnreachable): Always reports warning.
15926
15927 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
15928
15929         * class.cs: Distinguish between 1721 and 1722 (just a little help
15930         for the programmer).
15931
15932 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
15933
15934         * delegate.cs: Only allow this on new versions of the language. 
15935
15936 2004-12-02  Duncan Mak  <duncan@ximian.com>
15937
15938         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
15939         Expression class.
15940         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
15941         here as a static method. Take an additional bool out parameter
15942         `must_do_cs1540_check' for signaling to InstanceResolve.
15943         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
15944         member field from PropertyExpr class and made it an argument of
15945         the method instead.
15946         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
15947         check for MarshalByRefObject, and report CS0122 instead of CS1540.
15948         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
15949         and `remove_accessor' as well as InstanceResolve: report CS0122
15950         where applicable.
15951
15952         Fixes #70129.
15953
15954 2004-12-03  Raja R Harinath  <rharinath@novell.com>
15955
15956         Fix test-327.cs, test-328.cs, and put in early infrastructure
15957         for eventually fixing #52697.
15958         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
15959         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
15960         from other methods.
15961         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
15962         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
15963         (VerifyUsing, error246): Update.
15964         * rootcontext.cs (RootContext.NamespaceLookup): Just use
15965         'NamespaceEntry.LookupNamespaceOrType'.
15966
15967 2004-12-03  Martin Baulig  <martin@ximian.com>
15968
15969         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
15970         method as our child, call AnonymousMethod.Compatible() on it.
15971
15972 2004-12-03  Raja R Harinath  <rharinath@novell.com>
15973
15974         Disable XML documentation support in 'basic' profile.
15975         * decl.cs, class.cs [BOOTSTRAP_WITH_OLDLIB]: Don't import System.Xml.
15976         Redirect XmlElement to System.Object.
15977         * driver.cs, enum.cs, rootcontext.cs: Don't reference System.Xml.
15978         * doc.cs [BOOTSTRAP_WITH_OLDLIB]: Disable compile.
15979         * mcs.exe.sources: Add doc-bootstrap.cs.
15980         * doc-bootstrap.cs: New file.  Contains empty stub implementation
15981         of doc.cs.
15982
15983 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
15984
15985         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
15986           comments are allowed.
15987
15988 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
15989
15990         * delegate.cs: Add checks for subtypes in paramaters and return values
15991         in VerifyMethod () to add support for Covariance/Contravariance
15992         in delegates.
15993         
15994 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
15995
15996         * report.cs: Remove extra closing parenthesis.
15997
15998         * convert.cs (Error_CannotImplicitConversion): If the name of the
15999         types are the same, provide some extra information.
16000
16001         * class.cs (FieldBase): Use an unused bit field from the field to
16002         encode the `has_offset' property from the FieldMember.  This saves
16003         a couple of Ks on bootstrap compilation.
16004
16005         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
16006         method as our child, return the AnonymousMethod resolved
16007         expression.
16008
16009         * expression.cs (New.DoResolve): Allow return values from
16010         NewDelegate to also include AnonymousMethods.
16011
16012         Fixes #70150.
16013
16014 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
16015
16016         Fix bug #70102
16017         * attribute.cs (Resolve): Improved implementation of params
16018         attribute arguments.
16019
16020         * support.cs (ParameterData): Add HasParams to be faster.
16021
16022 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
16023
16024         all things are for /doc support:
16025
16026         * doc.cs: new file that supports XML documentation generation.
16027         * mcs.exe.sources: added doc.cs.
16028         * driver.cs:
16029           Handle /doc command line option.
16030           Report error 2006 instead of 5 for missing file name for /doc.
16031           Generate XML documentation when required, after type resolution.
16032         * cs-tokenizer.cs:
16033           Added support for picking up documentation (/// and /** ... */),
16034           including a new XmlCommentState enumeration.
16035         * cs-parser.jay:
16036           Added lines to fill Documentation element for field, constant,
16037           property, indexer, method, constructor, destructor, operator, event
16038           and class, struct, interface, delegate, enum.
16039           Added lines to warn incorrect comment.
16040         * rootcontext.cs :
16041           Added Documentation field (passed only when /doc was specified).
16042         * decl.cs:
16043           Added DocComment, DocCommentHeader, GenerateDocComment() and
16044           OnGenerateDocComment() and some supporting private members for
16045           /doc feature to MemberCore.
16046         * class.cs:
16047           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
16048         * delegate.cs:
16049           Added overriden DocCommentHeader.
16050         * enum.cs:
16051           Added overriden DocCommentHeader and GenerateDocComment().
16052
16053 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
16054
16055         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
16056         unwrapping the enumeration values, chain to
16057         DoConstantNumericPromotions again, so we can promote things to the
16058         fundamental types (takes care of enums that are bytes, sbytes).
16059
16060         Fixes bug #62054.
16061
16062 2004-12-01  Raja R Harinath  <rharinath@novell.com>
16063
16064         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
16065         Fix long-standing bug in type-lookup.  Use FindType instead of
16066         LookupType when ec.ResolvingTypeTree.
16067         (Attribute.ResolveType, Attribute.Resolve)
16068         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
16069         Update to changes.
16070         (Attributes.Search): Remove internal version.  Update.
16071         (Attributes.SearchMulti): Update.
16072         (Attributes.GetClsCompliantAttribute): Remove.
16073         (Attributes.GetIndexerNameAttribute): Remove.
16074         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
16075         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
16076         * class.cs (Indexer.Define): Likewise.
16077
16078 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
16079
16080         Fix bug #68790
16081         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
16082         MarshallByReference members access.
16083
16084         * expression.cs: Use CheckMarshallByRefAccess;
16085         Better error CS0197 message.
16086
16087         * report.cs: Print whole related error message.
16088
16089 2004-11-30  Raja R Harinath  <rharinath@novell.com>
16090
16091         * Makefile (mcs.exe) [PROFILE=default]: Keep a copy of mcs.exe in
16092         the current directory to help debugging.
16093
16094 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
16095
16096         * class (GetClassBases): Better error 60 report.
16097         (EventProperty): Disabled warning 67 detection.
16098
16099 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
16100
16101         Fix bug #60324
16102         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
16103
16104         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
16105         precise values.
16106
16107 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
16108
16109         Fix bug #49488
16110         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
16111
16112         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
16113
16114 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
16115
16116         * attribute.cs (Attribute.Resolve): Refine error reporting and
16117         report a cs0117 if the identifier does not exist, to distinguish
16118         from 0617 which is a miss-use of the actual identifier.
16119
16120         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
16121         between cs0070 and cs0079.
16122
16123         * class.cs (MemberBase.DoDefine): When reporting a wrong
16124         accessibility level, we use MethodCore to compare instead of
16125         Method (this was a regression in some refactoring effort).
16126
16127         So now we correctly report cs0056 again.
16128
16129         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
16130         testing the target_type (which was known to be object_type) and
16131         not the source type (which is anonymous_method).
16132
16133         Fixed reporting of error cs1660.
16134
16135         * expression.cs (UserCast.Source): Expose the underlying cast.
16136
16137         * statement.cs (Switch.SwitchGoverningType): Sort the list of
16138         allowed types to find a match to int32 first (most common).
16139
16140         In addition, it ignores any ImplicitUserConversions that did an
16141         internal implicit conversion (as the switch statement allows only
16142         one integral conversion to exist).
16143
16144         * class.cs (PartialContainer.Create): rename `name' to
16145         `member_name' for clarity.  Then replace the string calls with a
16146         call to MemberName.GetPartialName, as now using
16147         MemberName.ToString is an error (this is due to the side effects
16148         it had, that were fixed in the past).
16149
16150         This will restore the error reporting on a number of partial class
16151         errors that were missusing this (and getting an exception as a
16152         results, which is now just a plain textual warning, because
16153         yyparse debug output would crash otherwise).
16154
16155 2004-11-26  Raja R Harinath  <rharinath@novell.com>
16156
16157         * Makefile (PROGRAM_INSTALL_DIR): Remove.
16158
16159 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
16160
16161         * rootcontext.cs (LookupType): Make sure to cache lookups that
16162         don't give us a negative result. This saves about 5% of corlib
16163         compilation time.
16164
16165 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
16166
16167         * report.cs (AbstractMessage.Print): messages are sent to stderr
16168
16169         * class.cs (TypeContainer.GetClassBases): It is an error to have a
16170         non-interface in the list of interfaces (at this point, either
16171         parent was properly set, or a base class is being listed in the
16172         interfaces section).
16173
16174         This flags error 1722, and resolves the crash from bug 69259.
16175
16176 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
16177
16178         * statement.cs (Using.EmitExpressionFinally): make this work right
16179         for valuetypes. Fixes 69926.
16180
16181 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
16182
16183         * const.cs (Const.ChangeType): Cope with the "0 literal can be
16184         converted to an enum" here, before we try to change the underlying
16185         type.  This code exists, but it is a different code path than the
16186         one used while encoding constants.
16187
16188         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
16189         old bug: when converting from the null literal to a pointer,
16190         return an EmptyCast, not the NullLiteral.
16191
16192         This fixes #69921, the recent null_type changes probably made this
16193         bug more prominent.
16194
16195         (ImplicitReferenceConversionExists): In addition, resynchronized
16196         the code here, so it matches the same code in
16197         ImplicitReferenceConversionExists for the `from any class-type S
16198         to any interface-type T'.
16199         
16200
16201 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
16202
16203         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
16204
16205 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
16206
16207         * cs-parser.jay: Use verbosity accordingly. 
16208
16209 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
16210
16211         * expression.cs (Unary.ResolveOperator): Do not report warning;
16212         AddressOf reads from variable.
16213         
16214         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
16215
16216 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
16217
16218         Fix bug #69462
16219
16220         * attribute.cs (Attributable): Removed CheckTargets.
16221         (Attributes.Emit): Explicit attribute targets are tested here.
16222
16223         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
16224         not enabled for interfaces.
16225
16226         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
16227         (GetAssemblyName): Ouch next bug there.
16228
16229 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
16230
16231         * expression.cs: Error 275 added.
16232         
16233 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
16234
16235         Fix bug #69177 (Implemented decimal constant support)
16236
16237         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
16238         (BinaryFold): Add DecimalConstant.
16239
16240         * const.cs (Define): Decimal constant 
16241         (is not constant.
16242         (ChangeType): Add decimal type handling.
16243         (LookupConstantValue): Don't set value for decimal type but
16244         emit DecimalConstantAttribute. Needed for constant optimization.
16245
16246         * constant.cs (ToDecimal): New method.
16247         (ConvertToDecimal): New method.
16248         (IntConstant): Implemented ConvertToDecimal.
16249         (DecimalConstant.Emit): Emit optimized version for decimals in
16250         int range.
16251
16252         * expression.cs (ResolveOperator): Changed order of constant
16253         reduction to work correctly with native types which have
16254         overloaded operators.
16255         (ResolveMemberAccess): Extract constant value from attribute
16256         for decimal type.
16257
16258         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
16259
16260         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
16261         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
16262         (ChangeType): Decimal is special.
16263         (TypeToCoreType): Add decimal type.
16264
16265 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
16266
16267         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
16268         decimal types.
16269
16270 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
16271
16272         * class.cs (EventField.ApplyAttributeBuilder): Fix error
16273         test cs1667-5.cs.
16274
16275 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
16276
16277         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
16278
16279         * pending.cs (PendingImplementation): Grab only interfaces.
16280
16281 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
16282
16283         * statement.cs (ForeachHelperMethods): Add location member and
16284         error 202 detection.
16285
16286 2004-11-19  Raja R Harinath  <rharinath@novell.com>
16287
16288         * Makefile (EXTRA_DISTFILES): Remove mcs.exe.config.  It's
16289         automatically handled by executable.make.
16290         (PROGRAM): Make profile-specific.
16291
16292 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
16293
16294         * expression.cs (DoResolveBase): Fixed wrong warning for out
16295         variables.
16296
16297 2004-11-18  Martin Baulig  <martin@ximian.com>
16298
16299         Merged latest changes into gmcs.  Please keep this comment in
16300         here, it makes it easier for me to see what changed in MCS since
16301         the last time I merged.
16302
16303 2004-11-17  Raja R Harinath  <rharinath@novell.com>
16304
16305         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
16306         (TypeHandle.GetMemberCache): New.
16307         (TypeHandle.TypeHandle): Update.
16308         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
16309         (TypeManager.LookupParentInterfacesCache):
16310         Rename from LookupInterfaceCache.  Optimize slightly.
16311         (TypeManager.MemberLookup_FindMembers): Update.
16312         * decl.cs (MemberCache.MemberCache): Set Container to null in the
16313         multi-type variant.
16314         (AddCacheContents): Rename from AddHashtable.
16315         * class.cs (TypeContainer.parent_container): Remove.
16316         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
16317         (TypeContainer.DoDefineMembers): Don't initialize it.
16318         Update to name changes.
16319         
16320 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
16321
16322         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
16323         that factors the code to check access modifiers on override.  
16324
16325         (PropertyBase): Use the code here.
16326
16327         Patch from Lluis S'anchez, fixes bug #69361.
16328
16329 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
16330
16331         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
16332         routine that is used to report the use of a captured variable
16333         whose address has been taken.
16334
16335         There are two checks: one when variables are being captured and
16336         the other check is when the address of a variable is taken. 
16337         
16338         (because an anonymous methods might be resolved before *or* after
16339         the address has been taken) and 
16340
16341         * expression.cs (Conditional.DoResolve): Remove the special
16342         casing that Martin added to trueExpr and falseExpr being both
16343         NullLiteral.  We get the right behavior now just by introducing
16344         the null_type into the compiler. 
16345
16346         * convert.cs (ExplicitConversion): Change the code to use
16347         null_type instead of testing `expr is NullLiteral'.
16348         (ImplicitConversionStandard): use null_type too.
16349         (ImplicitReferenceConversionExists): use null_type too.
16350         (ImplicitReferenceConversion): use null_type too.
16351
16352         * literal.cs: The type of `NullLiteral' is now null_type instead
16353         of object_type. 
16354         (Resolve): Set the type here.
16355
16356         * typemanager.cs: Introduce null_type.
16357
16358 2004-11-17  Martin Baulig  <martin@ximian.com>
16359
16360         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
16361         direction, like FindMembers() does.  Fixes #69546, testcase is in
16362         test-315.cs.    
16363
16364 2004-11-16  Martin Baulig  <martin@ximian.com>
16365
16366         This is based on a patch from Marek Safar, see bug #69082.
16367         Fixes bugs #63705 and #67130.
16368
16369         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
16370         method; create a MemberCache for an interface type and cache the
16371         result.
16372
16373         * decl.cs (IMemberContainer.ParentContainer): Removed.
16374         (IMemberContainer.ParentCache): New property.
16375         (MemberCache.SetupCacheForInterface): Removed.
16376         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
16377         to create a cache for an interface's "parent".
16378
16379         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
16380         interfaces too.
16381
16382 2004-11-16  Martin Baulig  <martin@ximian.com>
16383
16384         Merged back from gmcs; these changes already went into gmcs a
16385         couple of weeks ago.
16386
16387         * typemanager.cs
16388         (TypeManager.AddUserType): Removed the `ifaces' argument.
16389         (TypeManager.RegisterBuilder): Take a `Type []' instead of a
16390         `TypeExpr []'.
16391         (TypeManager.AddUserInterface): Removed.
16392         (TypeManager.ExpandInterfaces): Return a `Type []' instead of a
16393         `TypeExpr []'.
16394         (TypeManager.GetInterfaces): Likewise.
16395         (TypeManager.GetExplicitInterfaces): Likewise.
16396
16397         * ecore.cs (TypeExpr.GetInterfaces): Removed.
16398
16399         * class.cs (TypeContainer.base_class_type): Replaced with `ptype'.
16400         (TypeContainer.base_inteface_types): Replaced with `ifaces'.
16401
16402 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
16403
16404         * statement.cs: Avoid adding bools to a hashtable.
16405
16406 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
16407
16408         * expression.cs (Invocation.OverloadResolve): Flag error if we are
16409         calling an unsafe method from a safe location.
16410
16411 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
16412
16413         Fix #69167
16414         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
16415
16416 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
16417
16418         * namespace.cs (VerifyUsing): use GetPartialName instead of
16419         ToString. 
16420
16421 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
16422
16423         * statement.cs (Return.Resolve): Fix regression in typo: if
16424         `in_exc', we have to request a NeedReturnLabel, this was a typo
16425         introduced in the anonymous method check-in.  Fixes #69131.
16426
16427         * Indexers were using the ShortName when defining themselves,
16428         causing a regression in the compiler bootstrap when applying the
16429         patch from 2004-11-02 (first part), now they use their full name
16430         and the bug is gone.
16431
16432 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
16433
16434         * driver.cs: Strip the path from the names of embedded resources. Fixes
16435         #68519.
16436
16437 2004-11-04  Raja R Harinath  <rharinath@novell.com>
16438
16439         Fix error message regression: cs0104-2.cs.
16440         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
16441         (AliasEntry.Resolve): Update.
16442         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
16443         'silent' flag.
16444         (RootContext.LookupType): Update.
16445
16446 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
16447
16448         * cs-parser.jay: Add support for handling accessor modifiers
16449         * class: Add support port accessor modifiers and error checking,
16450         define PropertyMethod.Define as virtual (not abstract anymore)
16451         * ecore.cs: Add checking for proeprties access with access modifiers
16452         * iterators.cs: Modify Accessor constructor call based in the modified
16453         constructor
16454 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
16455
16456         * expression.cs (StringConcat): Handle being called twice,
16457         as when we have a concat in a field init with more than two
16458         ctors in the class
16459
16460 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
16461
16462         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
16463         special case explicit implementations, we should always produce
16464         the .property or .event declaration.
16465         
16466         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
16467         since it will not return correct data if people use this
16468         unresolved in the presence of using statements (see test-313).
16469
16470         * class.cs (MethodData.Define): If we are an explicit interface
16471         implementation, set the method name to the full name of the
16472         interface plus the name of the method.  
16473
16474         Notice that using the method.MethodName.GetFullName() does not
16475         work, as it will only contain the name as declared on the source
16476         file (it can be a shorthand in the presence of using statements)
16477         and not the fully qualifed type name, for example:
16478
16479         using System;
16480
16481         class D : ICloneable {
16482                 object ICloneable.Clone ()  {
16483                 }
16484         }
16485
16486         Would produce a method called `ICloneable.Clone' instead of
16487         `System.ICloneable.Clone'.
16488
16489         * namespace.cs (Alias.Resolve): Use GetPartialName.
16490         
16491 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
16492
16493         * cs-parser.jay: Add error 1055 report.
16494
16495 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
16496
16497         * assign.cs (Assign.DoResolve): Only do the transform of
16498         assignment into a New if the types are compatible, if not, fall
16499         through and let the implicit code deal with the errors and with
16500         the necessary conversions. 
16501
16502 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
16503
16504         * cs-parser.jay: Add error 1031 report.
16505
16506         * cs-tokenizer.cs: Add location for error 1038.
16507
16508 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16509
16510         * cs-parser.jay: Add error 1016 report.
16511
16512 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16513
16514         * cs-parser.jay: Add errors 1575,1611 report.
16515
16516 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16517
16518         * cs-parser.jay: Add error 1001 report.
16519
16520 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16521
16522         Fix #68850
16523         * attribute.cs (GetMarshal): Add method argument for
16524         caller identification.
16525
16526         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
16527         agument for GetMarshal and RuntimeMissingSupport.
16528
16529 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16530
16531         * attribute.cs (ExtractSecurityPermissionSet): Removed
16532         TypeManager.code_access_permission_type.
16533
16534         * typemanager.cs: Removed TypeManager.code_access_permission_type.
16535
16536 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
16537
16538         * expression.cs (LocalVariableReference.DoResolveLValue): Check
16539         for obsolete use of a variable here.   Fixes regression on errors
16540         cs0619-25 and cs0619-26.
16541
16542 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
16543
16544         Fix #62358, implemented security attribute encoding.
16545
16546         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
16547         Tests permitted SecurityAction for assembly or other types.
16548         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
16549         data from SecurityPermissionAttribute to PermisionSet class.
16550
16551         * class.cs (ApplyAttributeBuilder): Added special handling
16552         for System.Security.Permissions.SecurityAttribute based types.
16553
16554         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
16555         special handling for System.Security.Permissions.SecurityAttribute
16556         based types.
16557
16558         * enum.cs (ApplyAttributeBuilder): Added special handling
16559         for System.Security.Permissions.SecurityAttribute based types.
16560
16561         * parameter.cs (ApplyAttributeBuilder): Added special handling
16562         for System.Security.Permissions.SecurityAttribute based types.
16563
16564         * rootcontext.cs: Next 2 core types.
16565
16566         * typemanager.cs (TypeManager.security_permission_attr_type):
16567         Built in type for the SecurityPermission Attribute.
16568         (code_access_permission_type): Build in type.
16569
16570 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
16571
16572         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
16573         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
16574         all of this information into
16575         EmitContext.EmitCapturedVariableInstance.
16576         
16577         * codegen.cs (EmitCapturedVariableInstance): move here the
16578         funcionality of emitting an ldarg.0 in the presence of a
16579         remapping.   This centralizes the instance emit code.
16580
16581         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
16582         then emit a load of this: it means that we have reached the
16583         topmost ScopeInfo: the one that contains the pointer to the
16584         instance of the class hosting the anonymous method.
16585
16586         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
16587         captures to the topmost CaptureContext.
16588
16589 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
16590
16591         * expression.cs (LocalVariableReference): Move the knowledge about
16592         the iterators into codegen's EmitCapturedVariableInstance.
16593
16594 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
16595
16596         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
16597         all code paths return a value from an anonymous method (it is the
16598         same as the 161 error, but for anonymous methods).
16599
16600 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
16601
16602         The introduction of anonymous methods in the compiler changed
16603         various ways of doing things in the compiler.  The most
16604         significant one is the hard split between the resolution phase
16605         and the emission phases of the compiler.
16606
16607         For instance, routines that referenced local variables no
16608         longer can safely create temporary variables during the
16609         resolution phase: they must do so from the emission phase,
16610         since the variable might have been "captured", hence access to
16611         it can not be done with the local-variable operations from the runtime.
16612         
16613         * statement.cs 
16614
16615         (Block.Flags): New flag `IsTopLevel' to indicate that this block
16616         is a toplevel block.
16617
16618         (ToplevelBlock): A new kind of Block, these are the blocks that
16619         are created by the parser for all toplevel method bodies.  These
16620         include methods, accessors and anonymous methods.
16621
16622         These contain some extra information not found in regular blocks:
16623         A pointer to an optional CaptureContext (for tracking captured
16624         local variables and parameters).  A pointer to the parent
16625         ToplevelBlock.
16626         
16627         (Return.Resolve): Catch missmatches when returning a value from an
16628         anonymous method (error 1662).
16629         Invoke NeedReturnLabel from the Resolve phase instead of the emit
16630         phase.
16631
16632         (Break.Resolve): ditto.
16633
16634         (SwitchLabel): instead of defining the labels during the
16635         resolution phase, we now turned the public ILLabel and ILLabelCode
16636         labels into methods called GetILLabelCode() and GetILLabel() that
16637         only define the label during the Emit phase.
16638
16639         (GotoCase): Track the SwitchLabel instead of the computed label
16640         (its contained therein).  Emit the code by using
16641         SwitchLabel.GetILLabelCode ().
16642
16643         (LocalInfo.Flags.Captured): A new flag has been introduce to track
16644         whether the Local has been captured or not.
16645
16646         (LocalInfo.IsCaptured): New property, used to tell whether the
16647         local has been captured.
16648         
16649         * anonymous.cs: Vastly updated to contain the anonymous method
16650         support.
16651
16652         The main classes here are: CaptureContext which tracks any
16653         captured information for a toplevel block and ScopeInfo used to
16654         track the activation frames for various local variables.   
16655
16656         Each toplevel block has an optional capture context associated
16657         with it.  When a method contains an anonymous method both the
16658         toplevel method and the anonymous method will create a capture
16659         context.   When variables or parameters are captured, they are
16660         recorded on the CaptureContext that owns them, for example:
16661
16662         void Demo () {
16663              int a;
16664              MyDelegate d = delegate {
16665                  a = 1;
16666              }
16667         }
16668
16669         Here `a' will be recorded as captured on the toplevel
16670         CapturedContext, the inner captured context will not have anything
16671         (it will only have data if local variables or parameters from it
16672         are captured in a nested anonymous method.
16673
16674         The ScopeInfo is used to track the activation frames for local
16675         variables, for example:
16676
16677         for (int i = 0; i < 10; i++)
16678                 for (int j = 0; j < 10; j++){
16679                    MyDelegate d = delegate {
16680                         call (i, j);
16681                    }
16682                 }
16683
16684         At runtime this captures a single captured variable `i', but it
16685         captures 10 different versions of the variable `j'.  The variable
16686         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
16687         recorded on a child.  
16688
16689         The toplevel ScopeInfo will also track information like the `this'
16690         pointer if instance variables were referenced (this is necessary
16691         as the anonymous method lives inside a nested class in the host
16692         type of the method). 
16693
16694         (AnonymousMethod): Expanded to track the Toplevel, implement
16695         `AnonymousMethod.Compatible' to tell whether an anonymous method
16696         can be converted to a target delegate type. 
16697
16698         The routine now also produces the anonymous method content
16699
16700         (AnonymousDelegate): A helper class that derives from
16701         DelegateCreation, this is used to generate the code necessary to
16702         produce the delegate for the anonymous method that was created. 
16703
16704         * assign.cs: API adjustments for new changes in
16705         Convert.ImplicitStandardConversionExists.
16706
16707         * class.cs: Adjustments to cope with the fact that now toplevel
16708         blocks are of type `ToplevelBlock'. 
16709
16710         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
16711         insteda of standard blocks.
16712
16713         Flag errors if params arguments are passed to anonymous methods.
16714
16715         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
16716         `CurrentAnonymousMethod' which points to the current Anonymous
16717         Method.  The variable points to the AnonymousMethod class that
16718         holds the code being compiled.  It is set in the new EmitContext
16719         created for the anonymous method.
16720
16721         (EmitContext.Phase): Introduce a variable and an enumeration to
16722         assist in enforcing some rules about when and where we are allowed
16723         to invoke certain methods (EmitContext.NeedsReturnLabel is the
16724         only one that enfonces this right now).
16725
16726         (EmitContext.HaveCaptureInfo): new helper method that returns
16727         whether we have a CapturedContext initialized.
16728
16729         (EmitContext.CaptureVariable): New method used to register that a
16730         LocalInfo must be flagged for capturing. 
16731
16732         (EmitContext.CapturedParameter): New method used to register that a
16733         parameters must be flagged for capturing. 
16734         
16735         (EmitContext.CapturedField): New method used to register that a
16736         field must be flagged for capturing. 
16737
16738         (EmitContext.HaveCapturedVariables,
16739         EmitContext.HaveCapturedFields): Return whether there are captured
16740         variables or fields. 
16741
16742         (EmitContext.EmitMethodHostInstance): This is used to emit the
16743         instance for the anonymous method.  The instance might be null
16744         (static methods), this (for anonymous methods that capture nothing
16745         and happen to live side-by-side with the current method body) or a
16746         more complicated expression if the method has a CaptureContext.
16747
16748         (EmitContext.EmitTopBlock): Routine that drives the emission of
16749         code: it will first resolve the top block, then emit any metadata
16750         and then emit the code.  The split is done so that we can extract
16751         any anonymous methods and flag any captured variables/parameters.
16752         
16753         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
16754         during this phase, the ILGenerator should not be used as labels
16755         and local variables declared here might not be accessible to any
16756         code that is part of an anonymous method.  
16757
16758         Exceptions to this include the temporary variables that are
16759         created by some statements internally for holding temporary
16760         variables. 
16761         
16762         (EmitContext.EmitMeta): New routine, in charge of emitting all the
16763         metadata for a cb
16764
16765         (EmitContext.TemporaryReturn): This method is typically called
16766         from the Emit phase, and its the only place where we allow the
16767         ReturnLabel to be defined other than the EmitMeta.  The reason is
16768         that otherwise we would have to duplicate a lot of logic in the
16769         Resolve phases of various methods that today is on the Emit
16770         phase. 
16771
16772         (EmitContext.NeedReturnLabel): This no longer creates the label,
16773         as the ILGenerator is not valid during the resolve phase.
16774
16775         (EmitContext.EmitThis): Extended the knowledge in this class to
16776         work in anonymous methods in addition to iterators. 
16777
16778         (EmitContext.EmitCapturedVariableInstance): This emits whatever
16779         code is necessary on the stack to access the instance to a local
16780         variable (the variable will be accessed as a field).
16781
16782         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
16783         EmitContext.EmitAddressOfParameter): Routines to support
16784         parameters (not completed at this point). 
16785         
16786         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
16787         will also remove the parameters.
16788
16789         * convert.cs (Convert): Define a `ConstantEC' which points to a
16790         null.  This is just to prefity some code that uses
16791         ImplicitStandardConversion code and do not have an EmitContext
16792         handy.
16793
16794         The idea is to flag explicitly that at that point in time, it is
16795         known that the conversion will not trigger the delegate checking
16796         code in implicit conversions (which requires a valid
16797         EmitContext). 
16798
16799         Everywhere: pass new EmitContext parameter since
16800         ImplicitStandardConversionExists now requires it to check for
16801         anonymous method conversions. 
16802
16803         (Convert.ImplicitStandardConversionExists): If the type of an
16804         expression is the anonymous_method_type, and the type is a
16805         delegate, we invoke the AnonymousMethod.Compatible method to check
16806         whether an implicit conversion is possible. 
16807
16808         (Convert.ImplicitConversionStandard): Only do implicit method
16809         group conversions if the language level is not ISO_1.
16810
16811         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
16812         MethodInfo for the Invoke method.  used by Delegate and
16813         AnonymousDelegate.
16814
16815         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
16816         method conversions if the target type is a delegate.
16817
16818         Removed extra debugging nops.
16819
16820         (LocalVariableReference): Turn the `local_info' into a public
16821         field. 
16822
16823         Add `prepared' field, the same hack used for FieldExprs to cope
16824         with composed assignments, as Local variables do not necessarily
16825         operate purely on the stack as they used to: they can be captured
16826         fields. 
16827
16828         Add `temp' for a temporary result, like fields.
16829
16830         Refactor DoResolve and DoResolveLValue into DoResolveBase.
16831
16832         It now copes with Local variables that are captured and emits the
16833         proper instance variable to load it from a field in the captured
16834         case. 
16835
16836         (ParameterReference.DoResolveBase): During the resolve phase,
16837         capture parameters if we are in an anonymous method.
16838
16839         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
16840         anonymous method, use the EmitContext helper routines to emit the
16841         parameter reference.
16842
16843         * iterators.cs: Set RemapToProxy to true/false during the
16844         EmitDispose class.
16845
16846         * parameters.cs (GetParameterByName): New helper method. 
16847
16848         * typemanager.cs (anonymous_method_type) a new type that
16849         represents an anonyous method.  This is always an internal type,
16850         used as a fencepost to test against the anonymous-methodness of an
16851         expression. 
16852         
16853 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
16854
16855         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
16856         561 report.
16857         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
16858
16859 2004-10-18  Martin Baulig  <martin@ximian.com>
16860
16861         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
16862         `Type' directly, but call ResolveType() on it.
16863         (Catch.Resolve): Likewise.
16864         (Foreach.Resolve): Likewise.
16865
16866 2004-10-18  Martin Baulig  <martin@ximian.com>
16867
16868         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
16869         `Type' directly, but call ResolveType() on it.
16870         (Probe.DoResolve): Likewise.
16871         (ArrayCreation.LookupType): Likewise.
16872         (TypeOf.DoResolve): Likewise.
16873         (SizeOf.DoResolve): Likewise.
16874
16875 2004-10-18  Martin Baulig  <martin@ximian.com>
16876
16877         * expression.cs (Invocation.BetterFunction): Put back
16878         TypeManager.TypeToCoreType().
16879
16880 2004-10-18  Raja R Harinath  <rharinath@novell.com>
16881
16882         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
16883         the ResolveType.
16884
16885 2004-10-18  Martin Baulig  <martin@ximian.com>
16886
16887         * parameter.cs (Parameter.Resolve):  Don't access the TypeExpr's
16888         `Type' directly, but call ResolveType() on it.
16889
16890 2004-10-18  Martin Baulig  <martin@ximian.com>
16891
16892         * class.cs (FieldMember.Define): Don't access the TypeExpr's
16893         `Type' directly, but call ResolveType() on it.
16894         (MemberBase.DoDefine): Likewise.
16895
16896         * expression.cs (New.DoResolve): Don't access the TypeExpr's
16897         `Type' directly, but call ResolveType() on it.
16898         (ComposedCast.DoResolveAsTypeStep): Likewise.
16899
16900         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
16901         `Type' directly, but call ResolveType() on it.
16902
16903 2004-10-17  John Luke  <john.luke@gmail.com>
16904
16905         * class.cs (Operator.GetSignatureForError): use CSharpName
16906
16907         * parameter.cs (Parameter.GetSignatureForError): Returns
16908         correct name even if was not defined.
16909
16910 2004-10-13  Raja R Harinath  <rharinath@novell.com>
16911
16912         Fix #65816.
16913         * class.cs (TypeContainer.EmitContext): New property.
16914         (DefineNestedTypes): Create an emitcontext for each part.
16915         (MethodCore.DoDefineParameters): Use container's emitcontext.
16916         Pass type array to InternalParameters.
16917         (MemberBase.DoDefine): Use container's emitcontext.
16918         (FieldMember.Define): Likewise.
16919         (Event.Define): Likewise.
16920         (SetMethod.GetParameterInfo): Change argument to EmitContext.
16921         Pass type array to InternalParameters.
16922         (SetIndexerMethod.GetParameterInfo): Likewise.
16923         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
16924         * delegate.cs (Define): Pass emitcontext to
16925         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
16926         array to InternalParameters.
16927         * expression.cs (ParameterReference.DoResolveBase): Pass
16928         emitcontext to GetParameterInfo.
16929         (ComposedCast.DoResolveAsTypeStep): Remove check on
16930         ec.ResolvingTypeTree.
16931         * parameter.cs (Parameter.Resolve): Change argument to
16932         EmitContext.  Use ResolveAsTypeTerminal.
16933         (Parameter.GetSignature): Change argument to EmitContext.
16934         (Parameters.ComputeSignature): Likewise.
16935         (Parameters.ComputeParameterTypes): Likewise.
16936         (Parameters.GetParameterInfo): Likewise.
16937         (Parameters.ComputeAndDefineParameterTypes): Likewise.
16938         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
16939         * support.cs (InternalParameters..ctor): Remove variant that takes
16940         a DeclSpace.
16941         * typemanager.cs (system_intptr_expr): New.
16942         (InitExpressionTypes): Initialize it.
16943
16944 2004-10-12  Chris Toshok  <toshok@ximian.com>
16945
16946         * cs-parser.jay: fix location for try_statement and catch_clause.
16947
16948 2004-10-11  Martin Baulig  <martin@ximian.com>
16949
16950         * report.cs: Don't make --fatal abort on warnings, we have
16951         -warnaserror for that.
16952
16953 2004-10-07  Raja R Harinath  <rharinath@novell.com>
16954
16955         More DeclSpace.ResolveType avoidance.
16956         * decl.cs (MemberCore.InUnsafe): New property.
16957         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
16958         with newly created EmitContext.
16959         (FieldMember.Define): Likewise.
16960         * delegate.cs (Delegate.Define): Likewise.
16961         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
16962         only if normal name-lookup fails.
16963         (TypeExpr.DoResolve): Enable error-checking.
16964         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
16965         (SizeOf.DoResolve): Likewise.
16966         (ComposedCast.DoResolveAsTypeStep): Likewise.
16967         (StackAlloc.DoResolve): Likewise.
16968         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
16969         (Block.Unsafe): New property.
16970         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
16971         (Unsafe): Set 'unsafe' flag of contained block.
16972         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
16973         (Fixed.Resolve): Likewise.
16974         (Catch.Resolve): Likewise.
16975         (Using.ResolveLocalVariableDecls): Likewise.
16976         (Foreach.Resolve): Likewise.
16977
16978 2004-10-05  John Luke <john.luke@gmail.com>
16979
16980         * cs-parser.jay: add location to error CS0175
16981
16982 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
16983
16984         * ecore.cs (Expression.Constantity): Add support for turning null
16985         into a constant.
16986
16987         * const.cs (Const.Define): Allow constants to be reference types
16988         as long as the value is Null.
16989
16990 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
16991
16992         * namespace.cs (NamespaceEntry.Using): No matter which warning
16993         level is set, check if this namespace name has already been added.
16994
16995 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
16996
16997         * expression.cs: reftype [!=]= null should always use br[true,false].
16998         # 67410
16999
17000 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
17001
17002         Fix #67108
17003         * attribute.cs: Enum conversion moved to 
17004         GetAttributeArgumentExpression to be applied to the all
17005         expressions.
17006
17007 2004-10-01  Raja R Harinath  <rharinath@novell.com>
17008
17009         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
17010         * class.c (TypeContainer.DefineType): Flag error if
17011         base types aren't accessible due to access permissions.
17012         * decl.cs (DeclSpace.ResolveType): Move logic to
17013         Expression.ResolveAsTypeTerminal.
17014         (DeclSpace.ResolveTypeExpr): Thin layer over
17015         Expression.ResolveAsTypeTerminal.
17016         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
17017         Refactor code into NestedAccess.  Use it.
17018         (DeclSpace.NestedAccess): New.
17019         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
17020         argument to silence errors.  Check access permissions.
17021         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
17022         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
17023         (Cast.DoResolve): Likewise.
17024         (New.DoResolve): Likewise.
17025         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
17026         (TypeOf.DoResolve): Likewise.
17027
17028         * expression.cs (Invocation.BetterConversion): Return the Type of
17029         the better conversion.  Implement section 14.4.2.3 more faithfully.
17030         (Invocation.BetterFunction): Make boolean.  Make correspondence to
17031         section 14.4.2.2 explicit.
17032         (Invocation.OverloadResolve): Update.
17033         (Invocation): Remove is_base field.
17034         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
17035         (Invocation.Emit): Likewise.
17036
17037 2004-09-27  Raja R Harinath  <rharinath@novell.com>
17038
17039         * README: Update to changes.
17040
17041 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
17042
17043         * cs-parser.jay: Reverted 642 warning fix.
17044
17045 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
17046
17047         Fix bug #66615
17048         * decl.cs (FindMemberWithSameName): Indexer can have more than
17049         1 argument.
17050
17051 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
17052
17053         * expression.cs (LocalVariableReference.DoResolveLValue):
17054         Do not report warning 219 for out values.
17055         (EmptyExpression.Null): New member to avoid extra allocations.
17056
17057 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
17058
17059         * cs-parser.jay: Fix wrong warning 642 report.
17060
17061         * cs-tokenizer.cs (CheckNextToken): New helper;
17062         Inspect next character if is same as expected.
17063
17064 2004-09-23  Martin Baulig  <martin@ximian.com>
17065
17066         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
17067         (Convert.ImplicitReferenceConversionExists): Likewise.
17068
17069 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
17070
17071         * class.cs (Operator.Define): Add error 448 and 559 report.
17072
17073 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
17074
17075         * class.cs (MemberBase.IsTypePermitted): New protected
17076         method for checking error CS0610.
17077
17078 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
17079
17080         * class.cs (TypeContainer.HasExplicitLayout): New property
17081         Returns whether container has StructLayout attribute set Explicit.
17082         (FieldMember): New abstract class for consts and fields.
17083         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
17084         (Field): Reuse FieldMember.
17085
17086         * const.cs (Const): Reuse FieldMember.
17087
17088         * rootcontext.cs: EmitConstants call moved to class.
17089
17090 2004-09-22  Martin Baulig  <martin@ximian.com>
17091
17092         Thanks to Peter Sestoft for this bug report.
17093
17094         * expression.cs (Conditional): If both the `trueExpr' and the
17095         `falseExpr' is a NullLiteral, return a NullLiteral.
17096
17097 2004-09-22  Martin Baulig  <martin@ximian.com>
17098
17099         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
17100         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
17101         for the "get_Current" call.
17102
17103 2004-09-22  Martin Baulig  <martin@ximian.com>
17104
17105         Marek and me just fixed one of our oldest bugs: #28562 :-)
17106
17107         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
17108
17109         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
17110         we're an EnumConstant, just return that.
17111         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
17112         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
17113         to get the value which'll actually be written into the attribute.
17114         However, we have to use GetValue() to access the attribute's value
17115         in the compiler.        
17116
17117 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
17118
17119         * constant.cs (Constant.IsNegative): New abstract property
17120         IsNegative.
17121
17122         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
17123         (StackAlloc.DoResolve): Reused IsNegative.
17124
17125 2004-09-21  Martin Baulig  <martin@ximian.com>
17126
17127         * codegen.cs (VariableStorage): Don't store the ILGenerator here;
17128         if we're used in an iterator, we may be called from different
17129         methods.
17130
17131         * statement.cs (Foreach.EmitFinally): Only emit an `Endfinally' if
17132         we actually have an exception block.
17133
17134 2004-09-20  John Luke <jluke@cfl.rr.com>
17135
17136         * class.cs, cs-parser.jay: Improve the error report for 1520:
17137         report the actual line where the error happens, not where the
17138         class was declared.
17139
17140         * assign.cs, delegate.cs, ecore.cs, expression.cs, statement.cs:
17141         Pass location information that was available elsewhere.
17142
17143 2004-09-19  Sebastien Pouliot  <sebastien@ximian.com>
17144
17145         * codegen.cs: Fix bug #56621. It is now possible to use MCS on the MS
17146         runtime to delay sign assemblies.
17147
17148 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
17149
17150         * cs-parser.jay: Do not report the stack trace, this is barely
17151         used nowadays.
17152
17153 2004-08-22  John Luke  <john.luke@gmail.com>
17154  
17155         * driver.cs : check that a resource id is not already used
17156         before adding it, report CS1508 if it is, bug #63637
17157
17158 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
17159
17160         * ecore.cs: Removed dead code.
17161
17162 2004-09-18  Marek Safar  <marek.safar@seznam.cz>
17163
17164         * class.cs: Do not report warning CS0067 on the interfaces.
17165
17166 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
17167
17168         * cs-parser.jay: Add error 504 report.
17169
17170 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
17171
17172         * rootcontext.cs: WarningLevel is 4 by default now.
17173
17174         * statement.cs (Fixed.Resolve): Do not null
17175         VariableInfo.
17176
17177 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
17178
17179         Fixed bug #55780
17180         * ecore.cs (PropertyExpr.FindAccessors): Do not perform
17181         deep search when property is not virtual.
17182         (PropertyExpr.ResolveAccessors): Make one call for both
17183         accessors.
17184
17185 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
17186
17187         Fixed bug #65766
17188         * statement.cs: Error 152 report constains also location.
17189
17190 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
17191
17192         Fixed bug #65766
17193         * const.cs: Explicitly set constant as static.
17194
17195 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
17196
17197         Fixed bug #64226
17198         * cs-parser.jay: Add error 1017 report.
17199
17200 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
17201
17202         Fixed bug #59980, #64224
17203         * expression.cs (Invocation.DoResolve): Fixed error CS0571 test.
17204
17205         * typemanager.cs (IsSpecialMethod): Simplified
17206
17207 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
17208
17209         * decl.cs (MemberCore.Emit): Resuscitated VerifyObsoleteAttribute
17210         condition with better params.
17211
17212 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
17213
17214         Fixed bug #65238
17215         * attribute.cs (Resolve): Property has to have both
17216         accessors.
17217
17218 2004-09-14  Martin Baulig  <martin@ximian.com>
17219
17220         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
17221
17222 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
17223
17224         Fixed bug #61902
17225         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
17226         called and is obsolete then this member suppress message
17227         when call is inside next [Obsolete] method or type.
17228
17229         * expression.cs: Use TestObsoleteMethodUsage member.
17230
17231 2004-09-14  Martin Baulig  <martin@ximian.com>
17232
17233         * cs-parser.jay: Sync a bit with the GMCS version.
17234
17235 2004-09-14  Martin Baulig  <martin@ximian.com>
17236
17237         * cs-parser.jay (CSharpParser): Don't derive from GenericsParser.
17238         (CSharpParser.yacc_verbose_flag): New public field.
17239
17240         * genericparser.cs: Removed.
17241
17242 2004-09-14  Raja R Harinath  <rharinath@novell.com>
17243
17244         * cs-parser.jay (event_declaration): Re-enable cs0071 error.
17245
17246 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
17247
17248         * class.cs (MethodCore.CheckBase): Fix bug #65757.
17249
17250 2004-09-10  Martin Baulig  <martin@ximian.com>
17251
17252         Backported my MemberName changes from GMCS into MCS.
17253
17254         - we are now using a special `MemberName' class instead of using
17255         strings; in GMCS, the `MemberName' also contains the type
17256         arguments.
17257
17258         - changed the grammar rules a bit:
17259           * the old `member_name' is now a `namespace_or_type_name':
17260             The rule is that we use `namespace_or_type_name' everywhere
17261             where we expect either a "member name" (GetEnumerator) or a
17262             "member name" with an explicit interface name
17263             (IEnumerable.GetEnumerator).
17264             In GMCS, the explicit interface name may include type arguments
17265             (IEnumerable<T>.GetEnumerator).
17266           * we use `member_name' instead of just `IDENTIFIER' for
17267             "member names":
17268             The rule is that we use `member_name' wherever a member may
17269             have type parameters in GMCS.       
17270
17271         * decl.cs (MemberName): New public class.
17272         (MemberCore.MemberName): New public readonly field.
17273         (MemberCore.ctor): Take a `MemberName' argument, not a string.
17274         (DeclSpace): Likewise.
17275
17276         * delegate.cs (Delegate.ctor): Take a MemberName, not a string.
17277         * enum.cs (Enum.ctor): Likewise.
17278
17279         * namespace.cs (AliasEntry.Alias): Changed type from Expression to
17280         MemberName.     
17281         (AliasEntry.ctor): Take a MemberName, not an Expression.
17282         (AliasEntry.UsingAlias): Likewise.
17283
17284         * class.cs (TypeContainer.ctor): Take a MemberName, not a string.
17285         (IMethodData.MemberName): Changed type from string to MemberName.
17286         (MemberBase.ExplicitInterfaceName): Likewise.
17287         (AbstractPropertyEventMethod.SetupName): Make this private.
17288         (AbstractPropertyEventMethod.ctor): Added `string prefix'
17289         argument; compute the member name here.
17290         (AbstractPropertyEventMethod.UpdateName): Recompute the name based
17291         on the `member.MemberName' and the `prefix'.
17292
17293         * cs-parser.jay (attribute_name): Use `namespace_or_type_name',
17294         not `type_name'.
17295         (struct_declaration): Use `member_name' instead of `IDENTIFIER';
17296         thus, we get a `MemberName' instead of a `string'.  These
17297         declarations may have type parameters in GMCS.
17298         (interface_method_declaration, delegate_declaration): Likewise.
17299         (class_declaration, interface_declaration): Likewise.
17300         (method_header): Use `namespace_or_type_name' instead of
17301         `member_name'.  We may be an explicit interface implementation.
17302         (property_declaration, event_declaration): Likewise.
17303         (member_name): This is now just an `IDENTIFIER', not a
17304         `namespace_or_type_name'.
17305         (type_name, interface_type): Removed.
17306         (namespace_or_type_name): Return a MemberName, not an Expression.
17307         (primary_expression): Use `member_name' instead of `IDENTIFIER';
17308         call GetTypeExpression() on the MemberName to get an expression.
17309         (IndexerDeclaration.interface_type): Changed type from string to
17310         MemberName.
17311         (MakeName): Operate on MemberName's instead of string's.
17312
17313 2004-09-13  Raja R Harinath  <rharinath@novell.com>
17314
17315         Fix bug #55770.
17316         * namespace.cs (AliasEntry.Resolve): Implement section 16.3.1.
17317         (NamespaceEntry.Lookup): Add new argument to flag if we want the
17318         lookup to avoid symbols introduced by 'using'.
17319         * rootcontext.cs (NamespaceLookup): Update.
17320
17321 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
17322
17323         * class.cs (TypeContainer.DoDefineMembers): Do not call
17324         DefineDefaultConstructor for static classes.
17325
17326 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
17327
17328         * attribute.cs (Attribute.Resolve): Add error 653 report.
17329
17330         * class.cs (Class.ApplyAttributeBuilder): Add error 641
17331         report.
17332         (Method.ApplyAttributeBuilder): Add error 685 report.
17333         (Operator.Define): Add error 564 report.
17334
17335         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
17336
17337         * expression.cs (Invocation.DoResolve): Add error
17338         245 and 250 report.
17339
17340         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
17341         error 674 report.
17342
17343 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
17344
17345         * class.cs (ConstructorInitializer.Resolve):
17346         Wrong error number (515->516).
17347
17348 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
17349
17350         * class.cs (Indexer.Define): Add error 631 report.
17351
17352 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
17353
17354         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
17355
17356 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
17357
17358         * expression.cs (Probe.DoResolve): Add error CS0241 report.
17359
17360 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
17361
17362         * cs-parser.jay: Added error CS0241 report.
17363
17364 2004-09-10  Raja R Harinath  <rharinath@novell.com>
17365
17366         * cs-parser.jay (fixed_statement): Introduce a scope for the
17367         declaration in the 'fixed' statement.
17368
17369 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17370
17371         * cs-parser.jay: Added CS0230 error report.
17372
17373 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17374
17375         * cs-parser.jay: Added errors CS0231 and CS0257 report.
17376
17377 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17378
17379         * expression.cs (Argument.Resolve): Added error CS0192 and
17380         CS0199 report.
17381
17382 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17383
17384         C# 2.0 #pragma warning feature
17385
17386         * cs-tokenizer.cs (PreProcessPragma): New method; 
17387         Handles #pragma directive.
17388
17389         * report.cs (WarningRegions): New class; Support
17390         class for #pragma warning directive. It tests whether
17391         warning is enabled for a given line.
17392
17393 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
17394
17395         * const.cs: Add more descriptive error report, tahnks to
17396         Sebastien. 
17397
17398 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
17399
17400         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
17401
17402 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
17403
17404         * expression.cs: Apply patch from Ben: Remove dead code from
17405         ArrayCreation, and remove the TurnintoConstant call in const.cs,
17406         as that code just threw an exception anwyays.
17407
17408         * const.cs: Remove the call to the turnintoconstant, for details
17409         see bug: #63144
17410         
17411         * literal.cs: The type of the null-literal is the null type;  So
17412         we use a placeholder type (literal.cs:System.Null, defined here)
17413         for it.
17414
17415         * expression.cs (Conditional.DoResolve): Remove some old code that
17416         is no longer needed, conversions have been fixed.
17417
17418         (ArrayCreationExpression.DoResolve): Return false if we fail to
17419         resolve the inner expression.
17420
17421 2004-09-07  Raja R Harinath  <rharinath@novell.com>
17422
17423         Fix test-290.cs.
17424         * cs-parser.jay (delegate_declaration): Record a delegate
17425         declaration as a type declaration.
17426         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
17427
17428 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
17429
17430         * parameter.cs: Do not crash if the type can not be resolved. 
17431
17432         * expression.cs: Report errors with unsafe pointers, fixes #64896
17433
17434 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
17435
17436         * expression.cs: Pointer arith always needs to do a conv.i
17437         if the operand is a long. fix 65320
17438
17439 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
17440
17441         Fixed cs0619-37.cs, cs0619-38.cs
17442
17443         * enum.cs (GetObsoleteAttribute): Removed.
17444
17445         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
17446         on Enum member is double staged. The first is tested member
17447         and then enum.
17448
17449 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
17450
17451         Fixed #56986, #63631, #65231
17452
17453         * class.cs: (TypeContainer.AddToMemberContainer): New method,
17454         adds member to name container.
17455         (TypeContainer.AddToTypeContainer): New method, adds type to
17456         name container.
17457         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
17458         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
17459         AddOperator): Simplified by reusing AddToMemberContainer.
17460         (TypeContainer.UserDefinedStaticConstructor): Changed to property
17461         instead of field.
17462         (Method.CheckForDuplications): Fixed implementation to test all
17463         possibilities.
17464         (MemberBase): Detection whether member is explicit interface
17465         implementation is now in constructor.
17466         (MemberBase.UpdateMemberName): Handles IndexerName.
17467         (Accessor): Changed to keep also location information.
17468         (AbstractPropertyEventMethod): Is derived from MemberCore.
17469         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
17470         will be emited or not.
17471         (PropertyBase.AreAccessorsDuplicateImplementation):
17472         Tests whether accessors are not in collision with some method.
17473         (Operator): Is derived from MethodCore to simplify common
17474         operations.
17475
17476         * decl.cs (Flags.TestMethodDuplication): Test for duplication
17477         must be performed.
17478         (DeclSpace.AddToContainer): Adds the member to defined_names
17479         table. It tests for duplications and enclosing name conflicts.
17480
17481         * enum.cs (EnumMember): Clean up to reuse the base structures
17482
17483 2004-09-03  Martin Baulig  <martin@ximian.com>
17484
17485         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
17486         into TypeContainer, to make partial classes work again.
17487
17488 2004-09-03  Martin Baulig  <martin@ximian.com>
17489
17490         * rootcontext.cs (RootContext.V2): Removed.
17491
17492 2004-03-23  Martin Baulig  <martin@ximian.com>
17493
17494         * expression.cs (Invocation.OverloadResolve): Added `bool
17495         may_fail' argument and use it instead of the Location.IsNull() hack.
17496
17497 2004-09-03  Martin Baulig  <martin@ximian.com>
17498
17499         Merged latest changes into gmcs.  Please keep this comment in
17500         here, it makes it easier for me to see what changed in MCS since
17501         the last time I merged.
17502
17503 2004-09-03  Raja R Harinath  <rharinath@novell.com>
17504
17505         Fix #61128.
17506         * expression.cs (BetterConversion): Don't allow either conversion 
17507         to be null.  Remove redundant implicit conversion test when 'q ==
17508         null' -- when this function is invoked, we already know that the
17509         implicit conversion exists.
17510         (BetterFunction): Assume that 'best' is non-null.  Remove
17511         redundant reimplementation of IsApplicable when 'best' is null.
17512         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
17513         number of arguments.
17514         (IsAncestralType): Extract from OverloadResolve.
17515         (OverloadResolve): Make robust to the MethodGroupExpr being
17516         unsorted.  Implement all the logic of Section 14.5.5.1, and
17517         support overloading of methods from multiple applicable types.
17518         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
17519
17520         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
17521         (RealError, Warning): Append type of report to related symbol.
17522
17523 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
17524
17525         * enum.cs: Fixed CLS-Compliance checks for enum members.
17526         Error tests cs3008-8.cs, cs3014-8.cs
17527
17528 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
17529
17530         Fixed bug #62342, #63102
17531         * class.cs: ImplementIndexer uses member.IsExplicitImpl
17532         like ImplementMethod.
17533
17534 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
17535
17536         * attribute.cs (Attribute.GetAttributeArgumentExpression):
17537         Fixed bug #65170.
17538
17539 2004-09-02  Martin Baulig  <martin@ximian.com>
17540
17541         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
17542         TypeManager.GetArgumentTypes() rather than calling GetParameters()
17543         on the MethodBase.
17544
17545 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
17546
17547         C# 2.0 Static classes implemented
17548
17549         * class.cs (TypeContainer): instance_constructors,
17550         initialized_fields, initialized_static_fields,
17551         default_constructor, base_inteface_types are protected to be
17552         accessible from StaticClass.
17553         (TypeContainer.DefineDefaultConstructor): New virtual method
17554         for custom default constructor generating
17555         (StaticClass): New class to handle "Static classes" feature.
17556
17557         * cs-parser.jay: Handle static keyword on class like instance
17558         of StaticClass.
17559
17560         * driver.cs: Added "/langversion" command line switch with two
17561         options (iso-1, default).
17562
17563 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
17564
17565         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
17566
17567 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
17568
17569         * delegate.cs: Style.
17570
17571 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
17572
17573         * delegate.cs: Add seperate instance expr field for miguel.
17574
17575 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
17576
17577         * PointerArithmetic (Resolve): make sure we are not doing
17578         pointer arith on void*. Also, make sure we are resolved
17579         by not setting eclass until resolve.
17580
17581         All callers: Make sure that PointerArithmetic gets resolved.
17582
17583 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
17584
17585         * ArrayCreation (LookupType): If the type does not resolve 
17586         to an array, give an error.
17587
17588 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
17589
17590         * statement.cs (Try.Resolve): Fixed bug #64222
17591
17592 2004-08-27  Martin Baulig  <martin@ximian.com>
17593
17594         * class.cs
17595         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
17596         crash here.     
17597
17598 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
17599
17600         * ecore.cs (Constantify): Get underlying type via
17601         System.Enum.GetUnderlyingType to avoid StackOverflow on the
17602         Windows in special cases.
17603
17604 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
17605
17606         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
17607         for obtaining also private methods.
17608         (GetRemoveMethod): Used GetRemoveMethod (true)
17609         for obtaining also private methods.
17610
17611 2004-08-24  Martin Baulig  <martin@ximian.com>
17612
17613         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
17614         MethodAttributes.HideBySig for operators.
17615
17616 2004-08-23  Martin Baulig  <martin@ximian.com>
17617
17618         Back to the old error reporting system :-)
17619
17620         * report.cs (Message): Removed.
17621         (Report.MessageData, ErrorData, WarningData): Removed.
17622         (Report.Error, Warning): Back to the old system.
17623
17624 2004-08-23  Martin Baulig  <martin@ximian.com>
17625
17626         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
17627
17628         * class.cs (TypeContainer.ParentContainer): New public virtual
17629         method; replaces the explicit interface implementation.
17630         (ClassPart.ParentContainer): Override.
17631
17632 2004-08-23  Martin Baulig  <martin@ximian.com>
17633
17634         * statement.cs (Switch): Added support for constant switches; see
17635         #59428 or test-285.cs.
17636
17637 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
17638
17639         Fixed bug #62740.
17640         * statement.cs (GetEnumeratorFilter): Removed useless
17641         logic because C# specs is strict. GetEnumerator must be
17642         public.
17643
17644 2004-08-22  Martin Baulig  <martin@ximian.com>
17645
17646         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
17647         a switch and may break, reset the barrier.  Fixes #59867.
17648
17649 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
17650
17651         CLS-Compliance speed up (~5% for corlib)
17652
17653         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
17654         New method. Tests container for CLS-Compliant names
17655
17656         * class.cs (TypeContainer.VerifyClsName): New method.
17657         Checks whether container name is CLS Compliant.
17658         (Constructor): Implements IMethodData.
17659
17660         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
17661         low-case table for CLS Compliance test.
17662         (MemberCache.VerifyClsParameterConflict): New method.
17663         Checks method parameters for CS3006 error.
17664
17665         * enum.cs (EnumMember): Is derived from MemberCore.
17666         (Enum.VerifyClsName): Optimized for better performance.
17667
17668 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
17669
17670         * report.cs: Renamed Error_T to Error and changed all
17671         references.
17672
17673 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
17674
17675         * class.cs (TypeContainer.IndexerArrayList): New inner class
17676         container for indexers.
17677         (TypeContainer.DefaultIndexerName): New constant for default
17678         indexer name. Replaced all "Item" with this constant.
17679         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
17680
17681         * typemanager.cs (TypeManager.default_member_ctor): Cache here
17682         DefaultMemberAttribute constructor.
17683
17684 2004-08-05  Martin Baulig  <martin@ximian.com>
17685
17686         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
17687         Fix bug #59429.
17688
17689 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
17690
17691         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
17692         multi platforms problem.
17693
17694         * compiler.csproj: Included shared files.
17695
17696 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17697
17698         Fix bug 60333, 55971 in the more general way
17699         * attribute.cs (Attribute.GetAttributeArgumentExpression):
17700         Added arg_type argument for constant conversion.
17701         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
17702
17703 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17704
17705         Fix bug #59760
17706         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
17707         OperatorArrayList, MethodCoreArrayList for typecontainer
17708         containers. Changed class member types to these new types.
17709         (MethodArrayList.DefineMembers): Added test for CS0659.
17710
17711 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
17712
17713         * cfold.cs: Synchronize the folding with the code in expression.cs
17714         Binary.DoNumericPromotions for uint operands.
17715
17716         * attribute.cs: Revert patch from Raja, it introduced a regression
17717         while building Blam-1.2.1 (hard to isolate a test case).
17718
17719 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17720
17721         Fix for #55382
17722         * class.cs:
17723         (TypeContainer.Define): Renamed to DefineContainerMembers because of
17724         name collision.
17725         (MethodCore.parent_method): New member. The method we're overriding
17726         if this is an override method.
17727         (MethodCore.CheckBase): Moved from Method class and made common.
17728         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
17729         private.
17730         (MethodCore.CheckForDuplications): New abstract method. For custom
17731         member duplication search in a container
17732         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
17733         method and its return type.
17734         (Event.conflict_symbol): New member. Symbol with same name in the
17735         parent class.
17736
17737         * decl.cs:
17738         (MemberCache.FindMemberWithSameName): New method. The method
17739         is looking for conflict with inherited symbols.
17740
17741 2004-08-04  Martin Baulig  <martin@ximian.com>
17742
17743         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
17744
17745         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
17746
17747 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17748
17749         * report.cs (Message): New enum for better error, warning reference in
17750         the code.
17751         (MessageData): New inner abstract class. It generally handles printing of
17752         error and warning messages.
17753         Removed unused Error, Warning, Message methods.
17754
17755 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17756
17757         Fix for cs0592-8.cs test
17758         * attribute.cs
17759         (Attributable.ValidAttributeTargets): Made public.
17760         (Attribute.ExplicitTarget): New member for explicit target value.
17761         (Attribute.CheckTargets): Now we translate explicit attribute
17762         target to Target here.
17763
17764 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
17765
17766         * ecore.cs (MethodGroupExpr): new IsBase property.
17767
17768         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
17769
17770         * delegate.cs (DelegateCreation): store a MethodGroupExpr
17771         rather than an instance expr.
17772
17773         (DelegateCreation.Emit): Use the method group rather than
17774         the instance expression. Also, if you have base.Foo as the
17775         method for a delegate, make sure to emit ldftn, not ldftnvirt.
17776
17777         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
17778
17779         (NewDelegate.DoResolve): Only check for the existance of Invoke
17780         if the method is going to be needed. Use MethodGroupExpr.
17781
17782         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
17783
17784         * expression.cs: For pointer arith., make sure to use
17785         the size of the type, not the size of the pointer to
17786         the type.
17787
17788 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17789
17790         Fix for #60722
17791         * class.cs (Class): Added error CS0502 test.
17792
17793 2004-08-03  John Luke  <jluke@cfl.rr.com>
17794             Raja R Harinath  <rharinath@novell.com>
17795
17796         Fix for #60997.
17797         * attribute.cs (Attribute.complained_before): New flag.
17798         (Attribute.ResolveType, Attribute.Resolve),
17799         (Attribute.DefinePInvokeMethod): Set it.
17800         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
17801         
17802 2004-08-03  Martin Baulig  <martin@ximian.com>
17803
17804         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
17805         use a user-defined operator; we still need to do numeric
17806         promotions in case one argument is a builtin type and the other
17807         one has an implicit conversion to that type.  Fixes #62322.
17808
17809 2004-08-02  Martin Baulig  <martin@ximian.com>
17810
17811         * statement.cs (LocalInfo.Flags): Added `IsThis'.
17812         (LocalInfo.IsThis): New public property.
17813         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
17814
17815 2004-08-01  Martin Baulig  <martin@ximian.com>
17816
17817         * class.cs (TypeContainer.GetClassBases): Don't set the default
17818         here since we may get called from GetPartialBases().
17819         (TypeContainer.DefineType): If GetClassBases() didn't return a
17820         parent, use the default one.
17821
17822 2004-07-30  Duncan Mak  <duncan@ximian.com>
17823
17824         * Makefile (mcs2.exe, mcs3.exe): add $(EXTRA_SOURCES).
17825
17826 2004-07-30  Martin Baulig  <martin@ximian.com>
17827
17828         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
17829
17830         * class.cs (SourceMethod): New public class, derive from the
17831         symbol writer's ISourceMethod.
17832         (Method): Use the new symbol writer API.
17833
17834         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
17835         as argument and use the new symbol writer.
17836
17837         * location.cs
17838         (SourceFile): Implement the symbol writer's ISourceFile.
17839         (Location.SymbolDocument): Removed.
17840         (Location.SourceFile): New public property.
17841
17842         * symbolwriter.cs: Use the new symbol writer API.
17843
17844 2004-07-30  Raja R Harinath  <rharinath@novell.com>
17845
17846         * Makefile (install-local): Remove.  Functionality moved to
17847         executable.make.
17848
17849 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
17850
17851         * Makefile: Install mcs.exe.config file together with mcs.exe.
17852         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
17853         correct runtime version.
17854         
17855 2004-07-25  Martin Baulig  <martin@ximian.com>
17856
17857         * class.cs
17858         (TypeContainer.RegisterOrder): Removed, this was unused.
17859         (TypeContainer, interface_order): Removed.
17860         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
17861         TypeContainer as argument since we can also be called with a
17862         `PartialContainer' for a partial class/struct/interface.
17863         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
17864         of checking whether we're an `Interface' - we could be a
17865         `PartialContainer'.
17866         (PartialContainer.Register): Override; call
17867         AddClass()/AddStruct()/AddInterface() on our parent.
17868
17869         * cs-parser.jay (interface_member_declaration): Add things to the
17870         `current_container', not the `current_class'.
17871
17872         * rootcontext.cs (RegisterOrder): The overloaded version which
17873         takes an `Interface' was unused, removed.
17874
17875         * typemanager.cs (TypeManager.LookupInterface): Return a
17876         `TypeContainer', not an `Interface'.
17877         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
17878         contain a `PartialContainer' for an interface, so check it's
17879         `Kind' to figure out what it is.
17880
17881 2004-07-25  Martin Baulig  <martin@ximian.com>
17882
17883         * class.cs (Class.DefaultTypeAttributes): New public constant.
17884         (Struct.DefaultTypeAttributes): Likewise.
17885         (Interface.DefaultTypeAttributes): Likewise.
17886         (PartialContainer.TypeAttr): Override this and add the
17887         DefaultTypeAttributes.
17888
17889 2004-07-25  Martin Baulig  <martin@ximian.com>
17890
17891         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
17892         we can just use the `Parent' field instead.
17893
17894 2004-07-25  Martin Baulig  <martin@ximian.com>
17895
17896         * class.cs (TypeContainer.Emit): Renamed to EmitType().
17897
17898 2004-07-25  Martin Baulig  <martin@ximian.com>
17899
17900         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
17901         our parts before defining any methods.
17902         (TypeContainer.VerifyImplements): Make this virtual.
17903         (ClassPart.VerifyImplements): Override and call VerifyImplements()
17904         on our PartialContainer.
17905
17906 2004-07-25  Martin Baulig  <martin@ximian.com>
17907
17908         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
17909
17910         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
17911         argument, we can just use the `Parent' field instead.
17912
17913         * class.cs
17914         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
17915         (MemberBase.DoDefine): Likewise.
17916
17917 2004-07-24  Martin Baulig  <martin@ximian.com>
17918
17919         * decl.cs (MemberCore.Parent): New public field.
17920         (DeclSpace.Parent): Moved to MemberCore.
17921
17922         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
17923         (MemberBase.ctor): Added TypeContainer argument, pass it to our
17924         parent's .ctor.
17925         (FieldBase, Field, Operator): Likewise.
17926         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
17927         (EventField, Event): Likewise.
17928
17929 2004-07-23  Martin Baulig  <martin@ximian.com>
17930
17931         * class.cs (PartialContainer): New public class.
17932         (ClassPart): New public class.
17933         (TypeContainer): Added support for partial classes.
17934         (TypeContainer.GetClassBases): Splitted some of the functionality
17935         out into GetNormalBases() and GetPartialBases().
17936
17937         * cs-tokenizer.cs (Token.PARTIAL): New token.
17938         (Tokenizer.consume_identifier): Added some hacks to recognize
17939         `partial', but only if it's immediately followed by `class',
17940         `struct' or `interface'.
17941
17942         * cs-parser.jay: Added support for partial clases.
17943
17944 2004-07-23  Martin Baulig  <martin@ximian.com>
17945
17946         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
17947         a `DeclSpace' and also made it readonly.
17948         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
17949         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
17950         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
17951
17952         * cs-parser.jay: Pass the `current_class', not the
17953         `current_container' (at the moment, this is still the same thing)
17954         to a new Method, Property, Event, Indexer or Constructor.
17955
17956 2004-07-23  Martin Baulig  <martin@ximian.com>
17957
17958         * cs-parser.jay (CSharpParser): Added a new `current_class' field
17959         and removed the `current_interface' one.
17960         (struct_declaration, class_declaration, interface_declaration):
17961         Set `current_class' to the newly created class/struct/interface;
17962         set their `Bases' and call Register() before parsing their body.
17963
17964 2004-07-23  Martin Baulig  <martin@ximian.com>
17965
17966         * class.cs (Kind): New public enum.
17967         (TypeContainer): Made this class abstract.
17968         (TypeContainer.Kind): New public readonly field.
17969         (TypeContainer.CheckDef): New public method; moved here from
17970         cs-parser.jay.
17971         (TypeContainer.Register): New public abstract method.
17972         (TypeContainer.GetPendingImplementations): New public abstract
17973         method.
17974         (TypeContainer.GetClassBases): Removed the `is_class' and
17975         `is_iface' parameters.
17976         (TypeContainer.DefineNestedTypes): Formerly known as
17977         DoDefineType().
17978         (ClassOrStruct): Made this class abstract.
17979
17980         * tree.cs (RootTypes): New public type. 
17981
17982 2004-07-20  Martin Baulig  <martin@ximian.com>
17983
17984         * tree.cs (Tree.RecordNamespace): Removed.
17985         (Tree.Namespaces): Removed.
17986
17987         * rootcontext.cs (RootContext.IsNamespace): Removed.
17988
17989         * cs-parser.jay (namespace_declaration): Just create a new
17990         NamespaceEntry here.
17991
17992 2004-07-20  Martin Baulig  <martin@ximian.com>
17993
17994         * statement.cs (ExceptionStatement): New abstract class.  This is
17995         now used as a base class for everyone who's using `finally'.
17996         (Using.ResolveLocalVariableDecls): Actually ResolveLValue() all
17997         our local variables before using them.
17998
17999         * flowanalysis.cs (FlowBranching.StealFinallyClauses): New public
18000         virtual method.  This is used by Yield.Resolve() to "steal" an
18001         outer block's `finally' clauses.
18002         (FlowBranchingException): The .ctor now takes an ExceptionStatement
18003         argument.
18004
18005         * codegen.cs (EmitContext.StartFlowBranching): Added overloaded
18006         version which takes an ExceptionStatement.  This version must be
18007         used to create exception branchings.
18008
18009         * iterator.cs
18010         (Yield.Resolve): "Steal" all `finally' clauses from containing blocks.
18011         (Iterator.EmitMoveNext): Added exception support; protect the
18012         block with a `fault' clause, properly handle 'finally' clauses.
18013         (Iterator.EmitDispose): Run all the `finally' clauses here.
18014
18015 2004-07-20  Martin Baulig  <martin@ximian.com>
18016
18017         * iterator.cs: This is the first of a set of changes in the
18018         iterator code.  Match the spec more closely: if we're an
18019         IEnumerable, then GetEnumerator() must be called.  The first time
18020         GetEnumerator() is called, it returns the current instance; all
18021         subsequent invocations (if any) must create a copy.
18022
18023 2004-07-19  Miguel de Icaza  <miguel@ximian.com>
18024
18025         * expression.cs: Resolve the constant expression before returning
18026         it. 
18027
18028 2004-07-19  Martin Baulig  <martin@ximian.com>
18029
18030         * iterators.cs (Iterator.MapVariable): Don't define fields twice.
18031         (Iterator.MoveNextMethod.DoEmit): Use `TypeManager.int32_type' as
18032         the return type of the new EmitContext.
18033
18034 2004-07-18  Martin Baulig  <martin@ximian.com>
18035
18036         * class.cs (Property.Define): Fix iterators.
18037
18038         * iterators.cs (Iterator.Define): Moved the
18039         `container.AddInterator (this)' call here from the .ctor; only do
18040         it if we resolved successfully.
18041
18042 2004-07-17  Miguel de Icaza  <miguel@ximian.com>
18043
18044         * cs-tokenizer.cs (handle_preprocessing_directive): Do not return
18045         `true' for preprocessing directives that we parse.  The return
18046         value indicates whether we should return to regular tokenizing or
18047         not, not whether it was parsed successfully.
18048
18049         In the past if we were in: #if false ... #line #endif, we would
18050         resume parsing after `#line'.  See bug 61604.
18051
18052         * typemanager.cs: Removed an old hack from Gonzalo to get corlib
18053         building: IsEnumType should return true only for enums, not for
18054         enums or System.Enum itself.  This fixes #61593.
18055
18056         Likely what happened is that corlib was wrong: mcs depended on
18057         this bug in some places.  The bug got fixed, we had to add the
18058         hack, which caused bug 61593.
18059
18060         * expression.cs (ArrayAccess.GetStoreOpCode): Remove an old hack
18061         that was a workaround for the older conditions.
18062
18063 2004-07-16  Ben Maurer  <bmaurer@ximian.com>
18064
18065         * assign.cs: IAssignMethod has a new interface, as documented
18066         inline. All assignment code now uses this new api.
18067
18068         * ecore.cs, expression.cs: All classes which implement
18069         IAssignMethod now use the new interface.
18070
18071         * expression.cs (Invocation): add a hack to EmitCall so that
18072         IndexerAccess can be the target of a compound assignment without
18073         evaluating its arguments twice.
18074
18075         * statement.cs: Handle changes in Invocation api.
18076
18077 2004-07-16  Martin Baulig  <martin@ximian.com>
18078
18079         * iterators.cs: Rewrote this.  We're now using one single Proxy
18080         class for both the IEnumerable and the IEnumerator interface and
18081         `Iterator' derives from Class so we can use the high-level API.
18082
18083         * class.cs (TypeContainer.AddIterator): New method.
18084         (TypeContainer.DoDefineType): New protected virtual method, which
18085         is called from DefineType().
18086         (TypeContainer.DoDefineMembers): Call DefineType() and
18087         DefineMembers() on all our iterators.
18088         (TypeContainer.Emit): Call Emit() on all our iterators.
18089         (TypeContainer.CloseType): Call CloseType() on all our iterators.
18090
18091         * codegen.cs (EmitContext.CurrentIterator): New public field.
18092
18093 2004-07-15  Martin Baulig  <martin@ximian.com>
18094
18095         * typemanager.cs
18096         (TypeManager.not_supported_exception_type): New type.   
18097
18098 2004-07-14  Martin Baulig  <martin@ximian.com>
18099
18100         * iterators.cs: Use real error numbers.
18101
18102 2004-07-14  Martin Baulig  <martin@ximian.com>
18103
18104         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
18105         requires this to be a System.Collection.IEnumerable and not a
18106         class implementing that interface.
18107         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
18108
18109 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
18110
18111         * class.cs: Fixed previous fix, it broke some error tests.
18112
18113 2004-07-12  Martin Baulig  <martin@ximian.com>
18114
18115         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
18116         Fixes #61293.
18117
18118 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
18119
18120         * assign.cs (LocalTemporary): Add new argument: is_address,If
18121         `is_address' is true, then the value that we store is the address
18122         to the real value, and not the value itself.
18123         
18124         * ecore.cs (PropertyExpr): use the new local temporary
18125         stuff to allow us to handle X.Y += z (where X is a struct)
18126
18127 2004-07-08  Martin Baulig  <martin@ximian.com>
18128
18129         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
18130         not always return, just like we're doing in Using.Resolve().
18131
18132 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
18133
18134         * cs-parser.jay (fixed_statement): flag this as Pinned.
18135
18136 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
18137
18138         * typemanager.cs (TypeManager): Removed MakePinned method, this
18139         mechanism is replaced with the .NET 2.x compatible mechanism of
18140         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
18141
18142         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
18143         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
18144         `IsFixed' property which has a different meaning.
18145
18146 2004-07-02  Raja R Harinath  <rharinath@novell.com>
18147
18148         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
18149         visible from inside a nested class, not just the names of the
18150         immediately enclosing class.
18151         Fix for bug #60730.
18152
18153 2004-06-24  Raja R Harinath  <rharinath@novell.com>
18154
18155         * expression.cs (BetterConversion): Remove buggy special-case
18156         handling of "implicit constant expression conversions".  At this
18157         point, we already know that the conversion is possible -- we're
18158         only checking to see which is better.
18159
18160 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
18161
18162         * cs-parser.jay: Added error CS0210 test.
18163
18164 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
18165
18166         * cs-parser.jay: Added error CS0134 test.
18167
18168 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
18169
18170         Fix bug #52507
18171         * cs-parser.jay: Added error CS0145 test.
18172
18173 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
18174
18175         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
18176
18177 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
18178         
18179         * expression.cs (StackAlloc.Resolve): The argument may not
18180         be a constant; deal with this case.
18181         
18182 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
18183
18184         * attribute.cs (IndexerName_GetIndexerName): Renamed to
18185         GetIndexerAttributeValue.
18186         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
18187
18188         * class.cs (Indexer.Define): Added error tests for CS0415,
18189         CS0609.
18190
18191 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
18192
18193         * attribute.cs (Attribute.Resolve): Keep field code in sync with
18194         property code.
18195
18196 2004-06-23  Martin Baulig  <martin@ximian.com>
18197
18198         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
18199         neither return nor throw, reset the barrier as well.  Fixes #60457.
18200
18201 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
18202
18203         * class.cs : EventAttributes is now set to None by default.
18204           This fixes bug #60459.
18205
18206 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
18207
18208         Fix bug #60219
18209         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
18210         Don't throw exception but return null (it's sufficient now).
18211
18212 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
18213
18214         * typemanager.cs (GetArgumentTypes): Faster implementation.
18215
18216 2004-06-18  Martin Baulig  <martin@ximian.com>
18217
18218         * attribute.cs (Attribute.Resolve): Check whether we're an
18219         EmptyCast which a Constant child.  Fixes #60333.
18220
18221 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
18222
18223         * statement.cs (EmitCollectionForeach): Account for the fact that
18224         not all valuetypes are in areas which we can take the address of.
18225         For these variables, we store to a temporary variable. Also, make
18226         sure that we dont emit a `callvirt' on a valuetype method.
18227
18228 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
18229
18230         * expression.cs (StackAlloc.DoReSolve): Added test for
18231         negative parameter (CS0247).
18232
18233 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
18234
18235         Fix bug #59792
18236         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
18237
18238 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
18239
18240         Fix bug #59781
18241         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
18242         ulong.
18243
18244 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
18245
18246         Fix bug #58254 & cs1555.cs, cs1556.cs
18247         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
18248
18249 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
18250
18251         * cs-parser.jay: Added error CS1669 test for indexers.
18252
18253 2004-06-11  Martin Baulig  <martin@ximian.com>
18254
18255         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
18256         call this twice: for params and varargs methods.
18257
18258 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18259
18260         * class.cs:
18261         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
18262
18263 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18264
18265         * attribute.cs (Attribute.GetValidTargets): Made public.
18266
18267         * class.cs: 
18268         (AbstractPropertyEventMethod): New class for better code sharing.
18269         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
18270         CS1667 report.
18271         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
18272
18273 2004-06-11  Raja R Harinath  <rharinath@novell.com>
18274
18275         Fix bug #59477.
18276         * ecore.cs (ResolveFlags): Add new 'Intermediate' flag to tell
18277         that the call to Resolve is part of a MemberAccess.
18278         (Expression.Resolve): Use it for SimpleName resolution.
18279         (SimpleName.SimpleNameResolve, SimpleName.DoResolveAllowStatic):
18280         Add 'intermediate' boolean argument.
18281         (SimpleName.DoSimpleNameResolve): Likewise.  Use it to disable an
18282         error message when the SimpleName can be resolved ambiguously
18283         between an expression and a type.
18284         * expression.cs (MemberAccess.IdenticalNameAndTypeName): Make
18285         public.
18286         (MemberAccess.Resolve): Pass 'Intermediate' flag to the Resolve()
18287         call on the left-side.
18288
18289 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18290
18291         * class.cs:
18292         (MethodCore.VerifyClsCompliance): Added test for error CS3000.
18293
18294 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18295
18296         * attribute.cs (Attribute.Emit): Fixed error CS0579 reporting.
18297
18298 2004-06-11  Martin Baulig  <martin@ximian.com>
18299
18300         * expression.cs (Invocation.EmitCall): Use OpCodes.Callvirt for
18301         varargs methods if applicable.
18302
18303 2004-06-11  Martin Baulig  <martin@ximian.com>
18304
18305         * expression.cs (Invocation.EmitCall): Don't use
18306         `method.CallingConvention == CallingConventions.VarArgs' since the
18307         method could also have `CallingConventions.HasThis'.
18308
18309 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18310
18311         * class.cs (Event.GetSignatureForError): Implemented.
18312         Fixed crash in error test cs3010.cs
18313
18314 2004-06-10  Miguel de Icaza  <miguel@ximian.com>
18315
18316         * cs-tokenizer.cs: Change the way we track __arglist to be
18317         consistent with the other keywords.
18318
18319 2004-06-09  Miguel de Icaza  <miguel@ximian.com>
18320
18321         * codegen.cs: FAQ avoider: turn 1577 into a warning for now until
18322         tomorrow.
18323
18324 2004-06-09  Sebastien Pouliot  <sebastien@ximian.com>
18325
18326         * codegen.cs: Check that all referenced assemblies have a strongname
18327         before strongnaming the compiled assembly. If not report error CS1577.
18328         Fix bug #56563. Patch by Jackson Harper.
18329         * typemanager.cs: Added a method to return all referenced assemblies.
18330         Fix bug #56563. Patch by Jackson Harper.
18331
18332 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
18333
18334         * class.cs:
18335         (Method.ApplyAttributeBuilder): Moved and added conditional
18336         attribute error tests (CS0577, CS0578, CS0243, CS0582, CS0629).
18337
18338         * delegate.cs:
18339         (DelegateCreation.ResolveMethodGroupExpr): Added error CS1618 test.
18340
18341 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
18342
18343         Fixed #59640
18344         * class.cs: (EventField.attribute_targets): Changed default target.
18345
18346 2004-06-08  Martin Baulig  <martin@ximian.com>
18347
18348         * expression.cs (Invocation.EmitCall): Enable varargs methods.
18349
18350 2004-06-08  Martin Baulig  <martin@ximian.com>
18351
18352         * rootcontext.cs (ResolveCore): Added "System.RuntimeArgumentHandle".
18353
18354 2004-06-07  Martin Baulig  <martin@ximian.com>
18355
18356         Added support for varargs methods.
18357
18358         * cs-tokenizer.cs (Token.ARGLIST): New token for the `__arglist'
18359         keyword.
18360
18361         * cs-parser.jay: Added support for `__arglist'.
18362
18363         * decl.cs (MemberCache.AddMethods): Don't ignore varargs methods.
18364
18365         * expression.cs (Argument.AType): Added `ArgList'.
18366         (Invocation): Added support for varargs methods.
18367         (ArglistAccess): New public class.
18368         (Arglist): New public class.
18369
18370         * parameter.cs (Parameter.Modifier): Added `ARGLIST'.
18371
18372         * statement.cs (Block.Flags): Added `HasVarargs'.  We set this on
18373         a method's top-level block if the method has varargs.
18374
18375         * support.cs (ReflectionParameters, InternalParameters): Added
18376         support for varargs methods.    
18377
18378 2004-06-07  Miguel de Icaza  <miguel@ximian.com>
18379
18380         * class.cs: Provide location in indexer error report.
18381
18382         * driver.cs: Use standard names.
18383
18384         * namespace.cs: Catch the use of using after a namespace has been
18385         declared also on using aliases.
18386
18387 2004-06-03  Raja R Harinath  <rharinath@novell.com>
18388
18389         Bug #50820.
18390         * typemanager.cs (closure_private_ok, closure_invocation_type)
18391         (closure_qualifier_type, closure_invocation_assembly)
18392         (FilterWithClosure): Move to ...
18393         (Closure): New internal nested class.
18394         (Closure.CheckValidFamilyAccess): Split out from Closure.Filter.
18395         (MemberLookup, RealMemberLookup): Add new almost_match parameter.
18396         * ecore.cs (almostMatchedMembers): New variable to help report CS1540.
18397         (MemberLookup, MemberLookupFailed): Use it.
18398         * expression.cs (New.DoResolve): Treat the lookup for the
18399         constructor as being qualified by the 'new'ed type.
18400         (Indexers.GetIndexersForTypeOrInterface): Update.
18401
18402 2004-06-03  Marek Safar  <marek.safar@seznam.cz>
18403
18404         * attribute.cs
18405         (GetConditionalAttributeValue): New method. Returns
18406         condition of ConditionalAttribute.
18407         (SearchMulti): New method.  Returns all attributes of type 't'.
18408         Use it when attribute is AllowMultiple = true.
18409         (IsConditionalMethodExcluded): New method.
18410
18411         * class.cs
18412         (Method.IsExcluded): Implemented. Returns true if method has conditional
18413         attribute and the conditions is not defined (method is excluded).
18414         (IMethodData): Extended interface for ConditionalAttribute support.
18415         (PropertyMethod.IsExcluded): Implemented.
18416
18417         * decl.cs
18418         (MemberCore.Flags): Excluded_Undetected, Excluded new caching flags.
18419
18420         * expression.cs
18421         (Invocation.IsMethodExcluded): Checks the ConditionalAttribute
18422         on the method.
18423
18424 2004-06-02 Ben Maurer  <bmaurer@users.sourceforge.net>
18425
18426         * expression.cs (ArrayCreationExpression): Make this just an
18427         `expression'. It can't be a statement, so the code here was
18428         dead.
18429
18430 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
18431
18432         Fixed #59072
18433         * typemanager.cs (GetFullNameSignature): New method for
18434         MethodBase types.
18435
18436 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
18437
18438         Fixed #56452
18439         * class.cs (MemberBase.GetSignatureForError): New virtual method.
18440         Use this method when MethodBuilder is null.
18441         (MethodData.DefineMethodBuilder): Encapsulated code to the new method.
18442         Added test for error CS0626 (MONO reports error for this situation).
18443         (IMethodData.GetSignatureForError): Extended interface.
18444
18445 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
18446
18447         * attribute.cs
18448         (AttributeTester.GetObsoleteAttribute): Returns instance of
18449         ObsoleteAttribute when type is obsolete.
18450
18451         * class.cs
18452         (TypeContainer.VerifyObsoleteAttribute): Override.
18453         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
18454         (MethodCode.VerifyObsoleteAttribute): Override.
18455         (MemberBase.VerifyObsoleteAttribute): Override.
18456
18457         * decl.cs
18458         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
18459         and report proper error.
18460
18461         *delegate.cs
18462         Delegate.VerifyObsoleteAttribute): Override.
18463
18464         * ecore.cs
18465         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
18466         and report proper error.
18467         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
18468
18469         * enum.cs
18470         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
18471         and enum member.
18472
18473         * expression.cs
18474         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
18475         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
18476         Added test for ObsoleteAttribute.
18477
18478         * statement.cs
18479         (Catch): Derived from Statement.
18480
18481 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
18482  
18483         Fixed bug #59071 & cs0160.cs
18484  
18485         * statement.cs (Try.Resolve): Check here whether order of catch
18486         clauses matches their dependencies.
18487
18488 2004-05-31  Miguel de Icaza  <miguel@ximian.com>
18489
18490         * Reverted patch to namespace.cs (Use lookuptypedirect).  This
18491         caused a regression: #59343.  Referencing nested classes from an
18492         assembly stopped working.
18493
18494 2004-05-31  Martin Baulig  <martin@ximian.com>
18495
18496         MCS is now frozen for beta 2.
18497
18498 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18499
18500         * convert.cs: add a trivial cache for overload operator resolution.
18501
18502 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18503
18504         * decl.cs: If possible, use lookuptypedirect here. We can only do
18505         this if there is no `.' after the namespace. Avoids using
18506         LookupType, which does lots of slow processing.
18507         (FindNestedType) New method, does what it says :-).
18508         * namespace.cs: use LookupTypeDirect.
18509         * rootcontext.cs: use membercache, if possible.
18510         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
18511
18512 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18513
18514         * expression.cs:
18515         According to the spec, 
18516
18517         In a member access of the form E.I, if E is a single identifier,
18518         and if the meaning of E as a simple-name (§7.5.2) is a constant,
18519         field, property, localvariable, or parameter with the same type as
18520         the meaning of E as a type-name (§3.8), then both possible
18521         meanings of E are permitted.
18522
18523         We did not check that E as a simple-name had the same type as E as
18524         a type name.
18525
18526         This trivial check gives us 5-7% on bootstrap time.
18527
18528 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18529
18530         * expression.cs (Invocation.OverloadResolve): Avoid the
18531         use of hashtables and boxing here by allocating on demand.
18532
18533 2004-05-30  Martin Baulig  <martin@ximian.com>
18534
18535         * rootcontext.cs (RootContext.LookupType): Don't cache things if
18536         we're doing a silent lookup.  Don't try to lookup nested types in
18537         TypeManager.object_type (thanks to Ben Maurer).
18538
18539 2004-05-30  Martin Baulig  <martin@ximian.com>
18540
18541         Committing a patch from Ben Maurer.
18542
18543         * rootcontext.cs (RootContext.LookupType): Cache negative results.
18544
18545 2004-05-29  Martin Baulig  <martin@ximian.com>
18546
18547         * class.cs (IMethodData.ShouldIgnore): New method.
18548
18549         * typemanager.cs (TypeManager.MethodFlags): Don't take a
18550         `Location' argument, we don't need it anywhere.  Use
18551         `IMethodData.ShouldIgnore ()' instead of
18552         `MethodData.GetMethodFlags ()'.
18553         (TypeManager.AddMethod): Removed.
18554         (TypeManager.AddMethod2): Renamed to AddMethod.
18555
18556 2004-05-29  Martin Baulig  <martin@ximian.com>
18557
18558         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
18559
18560         * convert.cs (Convert.ImplicitReferenceConversion): If we're
18561         converting from a class type S to an interface type and we already
18562         have an object on the stack, don't box it again.  Fixes #52578.
18563
18564 2004-05-29  Martin Baulig  <martin@ximian.com>
18565
18566         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
18567         Added support for `params' parameters.  Fixes #59267.
18568
18569 2004-05-29  Martin Baulig  <martin@ximian.com>
18570
18571         * literal.cs (NullPointer): Provide a private .ctor which sets
18572         `type' to TypeManager.object_type.  Fixes #59048.
18573
18574 2004-05-29  Martin Baulig  <martin@ximian.com>
18575
18576         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
18577         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
18578
18579         * ecore.cs (EventExpr.instance_expr): Make the field private.
18580
18581 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
18582
18583         Fixed bug #50080 & cs0214-2.cs
18584         * expression.cs (Cast.DoResolve): Check unsafe context here.
18585         
18586         * statement.cs (Resolve.DoResolve): Likewise.
18587
18588 2004-05-26  Martin Baulig  <martin@ximian.com>
18589
18590         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
18591
18592         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
18593         (RootContext.LookupType): Pass down the `silent' flag.
18594
18595 2004-05-25  Martin Baulig  <martin@ximian.com>
18596
18597         * expression.cs
18598         (MethodGroupExpr.IdenticalTypeName): New public property.
18599         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
18600         expression actually refers to a type.
18601
18602 2004-05-25  Martin Baulig  <martin@ximian.com>
18603
18604         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
18605         for #56176 and made it actually work.
18606
18607 2004-05-25  Martin Baulig  <martin@ximian.com>
18608
18609         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
18610         (FieldExpr, PropertyExpr): Override and implement
18611         CacheTemporaries.  Fixes #52279.
18612
18613 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
18614
18615         * location.cs: In the new compiler listing a file twice is a
18616         warning, not an error.
18617
18618 2004-05-24  Martin Baulig  <martin@ximian.com>
18619
18620         * enum.cs (Enum.DefineType): For the `BaseType' to be a
18621         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
18622
18623 2004-05-24  Martin Baulig  <martin@ximian.com>
18624
18625         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
18626         walking the `using' list.  Fixes #53921.
18627
18628 2004-05-24  Martin Baulig  <martin@ximian.com>
18629
18630         * const.cs (Const.LookupConstantValue): Added support for
18631         EmptyCast's; fixes #55251.
18632
18633 2004-05-24  Martin Baulig  <martin@ximian.com>
18634
18635         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
18636         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
18637         which does the CS0135 check.  The reason is that we first need to
18638         check whether the variable actually exists.
18639
18640 2004-05-24  Martin Baulig  <martin@ximian.com>
18641
18642         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
18643         than RootContext.LookupType() to find the explicit interface
18644         type.  Fixes #58584.
18645
18646 2004-05-24  Raja R Harinath  <rharinath@novell.com>
18647
18648         * Makefile: Simplify.  Use executable.make.
18649         * mcs.exe.sources: New file.  List of sources of mcs.exe.
18650
18651 2004-05-24  Anders Carlsson  <andersca@gnome.org>
18652
18653         * decl.cs:
18654         * enum.cs:
18655         Use the invariant culture when doing String.Compare for CLS case
18656         sensitivity.
18657         
18658 2004-05-23  Martin Baulig  <martin@ximian.com>
18659
18660         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
18661         don't have any dots.  Fixes #52622, added cs0246-8.cs.
18662
18663         * namespace.cs (NamespaceEntry.Lookup): Likewise.
18664         
18665 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
18666
18667         * class.cs (MemberBase.Define): Reuse MemberType member for 
18668         resolved type. Other methods can use it too.
18669
18670 2004-05-23  Martin Baulig  <martin@ximian.com>
18671
18672         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
18673         the variable also exists in the current block (otherwise, we need
18674         to report a CS0103).  Fixes #58670.
18675
18676 2004-05-23  Martin Baulig  <martin@ximian.com>
18677
18678         * flowanalysis.cs (Reachability.Reachable): Compute this
18679         on-the-fly rather than storing it as a field.
18680
18681 2004-05-23  Martin Baulig  <martin@ximian.com>
18682
18683         * flowanalysis.cs (Reachability.And): Manually compute the
18684         resulting `barrier' from the reachability.      
18685        
18686 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
18687
18688         Fix bug #57835
18689         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
18690         instance of ObsoleteAttribute when symbol is obsolete.
18691
18692         * class.cs
18693         (IMethodData): Extended interface for ObsoleteAttribute support.
18694
18695 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
18696
18697         * attribute.cs: Fix bug #55970
18698
18699 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
18700
18701         Fix bug #52705
18702         * attribute.cs
18703         (GetObsoleteAttribute): New method. Creates the instance of
18704         ObsoleteAttribute.
18705         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
18706         ObsoleteAttribute when member is obsolete.
18707         (AttributeTester.Report_ObsoleteMessage): Common method for
18708         Obsolete error/warning reporting.
18709
18710         * class.cs
18711         (TypeContainer.base_classs_type): New member for storing parent type.
18712
18713         * decl.cs
18714         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
18715         for this MemberCore.
18716
18717 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18718
18719         * attribute.cs, const.cs: Fix bug #58590
18720
18721 2004-05-21  Martin Baulig  <martin@ximian.com>
18722
18723         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
18724         out parameters if the end of the method is unreachable.  Fixes
18725         #58098. 
18726
18727 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18728
18729         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
18730         Hari was right, why extra method.
18731
18732 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18733
18734         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
18735
18736 2004-05-20  Martin Baulig  <martin@ximian.com>
18737
18738         Merged this back from gmcs to keep the differences to a minumum.
18739
18740         * attribute.cs (Attribute.CheckAttributeType): Take an EmitContext
18741         instead of a Declspace.
18742         (Attribute.ResolveType): Likewise.
18743         (Attributes.Search): Likewise.
18744         (Attributes.Contains): Likewise.
18745         (Attributes.GetClsCompliantAttribute): Likewise.
18746
18747         * class.cs (TypeContainer.VerifyMembers): Added EmitContext
18748         argument.
18749         (MethodData.ApplyAttributes): Take an EmitContext instead of a
18750         DeclSpace.
18751
18752 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
18753
18754         Fix bug #58688 (MCS does not report error when the same attribute
18755         is assigned twice)
18756
18757         * attribute.cs (Attribute.Emit): Distinction between null and default.
18758
18759 2004-05-19  Raja R Harinath  <rharinath@novell.com>
18760
18761         * cs-parser.jay (attribute): Create a GlobalAttribute for the case
18762         of a top-level attribute without an attribute target.
18763         * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
18764         Make non-static.
18765         (Attribute.Conditional_GetConditionName), 
18766         (Attribute.Obsolete_GetObsoleteMessage): Update.
18767         (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
18768         part of ScanForIndexerName.
18769         (Attribute.CanIgnoreInvalidAttribute): New function.
18770         (Attribute.ScanForIndexerName): Move to ...
18771         (Attributes.ScanForIndexerName): ... here.
18772         (Attributes.Attrs): Rename from now-misnamed AttributeSections.
18773         (Attributes.Search): New internal variant that can choose not to
18774         complain if types aren't resolved.  The original signature now
18775         complains.
18776         (Attributes.GetClsCompliantAttribute): Use internal variant, with
18777         complaints suppressed.
18778         (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
18779         only if it not useful.
18780         (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
18781         top-level for attributes that are shared between the assembly
18782         and a top-level class.
18783         * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
18784         * class.cs: Update to reflect changes.
18785         (DefineIndexers): Fuse loops.
18786         * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
18787         a couple more variants of attribute names.
18788
18789 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
18790
18791         Fix bug #52585 (Implemented explicit attribute declaration)
18792
18793         * attribute.cs:
18794         (Attributable.ValidAttributeTargets): New abstract method. It gets
18795         list of valid attribute targets for explicit target declaration.
18796         (Attribute.Target): It holds target itself.
18797         (AttributeSection): Removed.
18798         (Attribute.CheckTargets): New method. It checks whether attribute
18799         target is valid for the current element.
18800
18801         * class.cs:
18802         (EventProperty): New class. For events that are declared like
18803         property (with add and remove accessors).
18804         (EventField): New class. For events that are declared like field.
18805         class.cs
18806
18807         * cs-parser.jay: Implemented explicit attribute target declaration.
18808
18809         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
18810         Override ValidAttributeTargets.
18811
18812         * parameter.cs:
18813         (ReturnParameter): Class for applying custom attributes on 
18814         the return type.
18815         (ParameterAtribute): New class. Class for applying custom
18816         attributes on the parameter type.
18817
18818 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
18819
18820         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
18821         definitions. 
18822
18823         (Method): Allow UNSAFE here.
18824
18825         * modifiers.cs: Support unsafe reporting.
18826
18827 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
18828
18829         * decl.cs: Fix bug #58478.
18830
18831 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18832
18833         * statement.cs: When checking for unreachable code on an EmptyStatement,
18834         set the location. Fixes bug #58488.
18835
18836 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
18837
18838         * driver.cs: Add -pkg handling.
18839
18840         From Gonzalo: UseShelLExecute=false
18841
18842 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
18843
18844         * attribute.cs:
18845         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
18846         for attribute.
18847         (Attribute.IsClsCompliaceRequired): Moved to base for better
18848         accesibility.
18849         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
18850         when attribute is AttributeUsageAttribute.
18851         (Attribute.GetValidTargets): Simplified.
18852         (Attribute.GetAttributeUsage): New method returns AttributeUsage
18853         attribute for this type.
18854         (Attribute.ApplyAttributes): Method renamed to Emit and make
18855         non-static.
18856         (GlobalAttributeSection): New class for special handling of global
18857         attributes (assembly, module).
18858         (AttributeSection.Emit): New method.
18859
18860         * class.cs: Implemented Attributable abstract methods.
18861         (MethodCore.LabelParameters): Moved to Parameter class.
18862         (Accessor): Is back simple class.
18863         (PropertyMethod): Implemented Attributable abstract class.
18864         (DelegateMethod): Implemented Attributable abstract class.
18865         (Event): New constructor for disctintion between normal Event
18866         and Event with accessors.
18867
18868         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
18869
18870         * codegen.cs, const.cs, decl.cs, delegate.cs:
18871         (CommonAssemblyModulClass): Implemented Attributable abstract class
18872         and simplified.
18873
18874         * enum.cs: Implement IAttributeSupport interface.
18875         (EnumMember): New class for emum members. Implemented Attributable
18876         abstract class
18877
18878         * parameter.cs:
18879         (ParameterBase): Is abstract.
18880         (ReturnParameter): New class for easier [return:] attribute handling.
18881
18882         * typemanager.cs: Removed builder_to_attr.
18883
18884 2004-05-11  Raja R Harinath  <rharinath@novell.com>
18885
18886         Fix bug #57151.
18887         * attribute.cs (Attribute.GetPositionalValue): New function.
18888         * class.cs (TypeContainer.VerifyMembers): New function.
18889         (TypeContainer.Emit): Use it.
18890         (ClassOrStruct): New base class for Class and Struct.
18891         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
18892         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
18893         class.
18894         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
18895         then each non-static field should have a FieldOffset attribute.
18896         Otherwise, none of the fields should have a FieldOffset attribute.
18897         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
18898         and FieldOffset attributes.
18899         * typemanager.cs (TypeManager.struct_layout_attribute_type)
18900         (TypeManager.field_offset_attribute_type): New core types.
18901         (TypeManager.InitCoreTypes): Initialize them.
18902
18903 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
18904
18905         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
18906         Return correct type.
18907         From bug #58270.
18908
18909 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
18910
18911         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
18912         be implicitly converted to ulong.
18913         
18914         * expression.cs: The logic for allowing operator &, | and ^ worked
18915         was wrong, it worked before because we did not report an error in
18916         an else branch.  Fixes 57895.
18917
18918         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
18919         allow volatile fields to be reference types.
18920
18921 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
18922
18923         * driver.cs: Add support for /debug-
18924
18925 2004-05-07  Raja R Harinath  <rharinath@novell.com>
18926
18927         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
18928         Add a 'complain' parameter to silence errors.
18929         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
18930         silently overlooked type-resolutions.
18931         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
18932         to reflect changes.
18933         (Attributes.Search): New function.
18934         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
18935         (Attributes.GetAttributeFullName): Remove hack.
18936         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
18937         Update to reflect changes.
18938         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
18939         Use Attributes.Search instead of nested loops.
18940
18941 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
18942
18943         * decl.cs:
18944         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
18945         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
18946         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
18947
18948         * report.cs: (Report.Warning): Renamed to Warning_T because of
18949         parameter collision.
18950
18951 2004-05-05  Raja R Harinath  <rharinath@novell.com>
18952
18953         * expression.cs (MemberAccess.ResolveMemberAccess):
18954         Exit with non-zero status after Report.Error.
18955         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
18956         Likewise.
18957         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
18958
18959 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
18960
18961         * support.cs: Don't hang when the file is empty.
18962
18963 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
18964
18965         * support.cs: In SeekableStreamReader, compute the preamble size of the
18966           underlying stream. Position changes should take into account that initial
18967           count of bytes.
18968
18969 2004-05-03  Todd Berman  <tberman@sevenl.net>
18970
18971         * driver.cs: remove unused GetSysVersion function.
18972
18973 2004-05-03  Todd Berman  <tberman@sevenl.net>
18974
18975         * driver.cs: Remove the hack from saturday, as well as the hack
18976         from jackson (LoadAssemblyFromGac), also adds the CWD to the
18977         link_paths to get that bit proper.
18978
18979 2004-05-01  Todd Berman  <tberman@sevenl.net>
18980
18981         * driver.cs: Try a LoadFrom before a Load, this checks the current
18982         path. This is currently a bug in mono that is be fixed, however, this
18983         provides a workaround for now. This will be removed when the bug
18984         is fixed.
18985
18986 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
18987
18988         * CryptoConvert.cs: Updated to latest version. Fix issue with 
18989         incomplete key pairs (#57941).
18990
18991 2004-05-01  Todd Berman  <tberman@sevenl.net>
18992
18993         * driver.cs: Remove '.' from path_chars, now System.* loads properly
18994         from the GAC
18995
18996 2004-04-30  Jackson Harper  <jackson@ximian.com>
18997
18998         * codegen.cs: Open keys readonly.
18999         
19000 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19001
19002         * typemanager.cs: don't report cyclic struct layout when a struct
19003         contains 2 or more fields of the same type. Failed for Pango.AttrShape
19004         which has 2 Pango.Rectangle fields.
19005
19006 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19007
19008         * expression.cs: Handle IntPtr comparisons with IL code
19009         rather than a method call.
19010
19011 2004-04-29  Martin Baulig  <martin@ximian.com>
19012
19013         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
19014         the list of PropertyInfo's in class hierarchy and find the
19015         accessor.  Fixes #56013.
19016
19017 2004-04-29  Martin Baulig  <martin@ximian.com>
19018
19019         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
19020
19021 2004-04-29  Martin Baulig  <martin@ximian.com>
19022
19023         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
19024
19025         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
19026
19027 2004-04-29  Martin Baulig  <martin@ximian.com>
19028
19029         * class.cs (ConstructorInitializer.Resolve): Check whether the
19030         parent .ctor is accessible.  Fixes #52146.
19031
19032 2004-04-29  Martin Baulig  <martin@ximian.com>
19033
19034         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
19035
19036         * statement.cs (Using.EmitLocalVariableDecls): Use
19037         TypeManager.idisposable_type, not typeof (IDisposable).
19038         (Foreach.EmitCollectionForeach): Added support for valuetypes.
19039
19040 2004-04-29  Martin Baulig  <martin@ximian.com>
19041
19042         * class.cs (Event.Define): Don't emit the field and don't set
19043         RTSpecialName and SpecialName for events on interfaces.  Fixes
19044         #57703. 
19045
19046 2004-04-29  Raja R Harinath  <rharinath@novell.com>
19047
19048         Refactor Attribute.ApplyAttributes.
19049         * attribute.cs (Attributable): New base class for objects that can
19050         have Attributes applied on them.
19051         (Attribute): Make AttributeUsage fields public.
19052         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
19053         (Attribute.IsInternalCall): New property.
19054         (Attribute.UsageAttr): Convert to a public read-only property.
19055         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
19056         (Attribute.ResolveType, Attribute.Resolve)
19057         (Attribute.ScanForIndexerName): Update to reflect changes.
19058         (Attribute.CheckAttributeTarget): Re-format.
19059         (Attribute.ApplyAttributes): Refactor, to various
19060         Attributable.ApplyAttributeBuilder methods.
19061         * decl.cs (MemberCore): Make Attributable.
19062         * class.cs (Accessor): Make Attributable.
19063         (MethodData.ApplyAttributes): Use proper attribute types, not
19064         attribute names.
19065         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
19066         (TypeContainer.ApplyAttributeBuilder)
19067         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
19068         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
19069         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
19070         (Operator.ApplyAttributeBuilder): New factored-out methods.
19071         * const.cs (Const.ApplyAttributeBuilder): Likewise.
19072         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
19073         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
19074         * parameter.cs (ParameterBase): New Attributable base class
19075         that can also represent Return types.
19076         (Parameter): Update to the changes.
19077
19078 2004-04-29  Jackson Harper  <jackson@ximian.com>
19079
19080         * driver.cs: Prefer the corlib system version when looking for
19081         assemblies in the GAC. This is still a hack, but its a better hack
19082         now.
19083         
19084 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
19085
19086         * decl.cs, enum.cs: Improved error 3005 reporting.
19087   
19088         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
19089         (related_symbols): New private member for list of symbols
19090         related to reported error/warning.
19091         
19092         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
19093
19094 2004-04-29  Martin Baulig  <martin@ximian.com>
19095
19096         * ecore.cs (Expression.Constantify): If we're an enum and
19097         TypeManager.TypeToCoreType() doesn't give us another type, use
19098         t.UnderlyingSystemType.  Fixes #56178.  
19099
19100 2004-04-29  Martin Baulig  <martin@ximian.com>
19101
19102         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
19103         interfaces and for each interface, only add members directly
19104         declared in that interface.  Fixes #53255.
19105
19106 2004-04-28  Martin Baulig  <martin@ximian.com>
19107
19108         * expression.cs (ConditionalLogicalOperator): Use a temporary
19109         variable for `left' to avoid that we evaluate it more than once;
19110         bug #52588.
19111
19112 2004-04-28  Martin Baulig  <martin@ximian.com>
19113
19114         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
19115         `void[]' (CS1547).
19116
19117 2004-04-28  Martin Baulig  <martin@ximian.com>
19118
19119         * statement.cs (LocalInfo.Resolve): Check whether the type is not
19120         void (CS1547).
19121
19122         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
19123         whether the type is not void (CS1547).
19124
19125 2004-04-28  Martin Baulig  <martin@ximian.com>
19126
19127         * expression.cs (Unary.DoResolveLValue): Override this and report
19128         CS0131 for anything but Operator.Indirection.
19129
19130 2004-04-28  Martin Baulig  <martin@ximian.com>
19131
19132         Committing a patch from Ben Maurer; see bug #50820.
19133
19134         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
19135         check for classes.
19136
19137         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
19138         classes.        
19139
19140 2004-04-28  Martin Baulig  <martin@ximian.com>
19141
19142         Committing a patch from Ben Maurer; see bug #50820.
19143
19144         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
19145         check for classes.
19146
19147         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
19148         classes.        
19149
19150 2004-04-28  Martin Baulig  <martin@ximian.com>
19151
19152         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
19153         (Block.AddLabel): Call DoLookupLabel() to only search in the
19154         current block.
19155
19156 2004-04-28  Martin Baulig  <martin@ximian.com>
19157
19158         * cfold.cs (ConstantFold.BinaryFold): Added special support for
19159         comparing StringConstants and NullLiterals in Equality and Inequality.
19160
19161 2004-04-28  Jackson Harper  <jackson@ximian.com>
19162
19163         * driver.cs: Attempt to load referenced assemblies from the
19164         GAC. This is the quick and dirty version of this method that
19165         doesnt take into account versions and just takes the first
19166         canidate found. Will be good enough for now as we will not have more
19167         then one version installed into the GAC until I update this method.
19168
19169 2004-04-28  Martin Baulig  <martin@ximian.com>
19170
19171         * typemanager.cs (TypeManager.CheckStructCycles): New public
19172         static method to check for cycles in the struct layout.
19173
19174         * rootcontext.cs (RootContext.PopulateTypes): Call
19175         TypeManager.CheckStructCycles() for each TypeContainer.
19176         [Note: We only need to visit each type once.]
19177
19178 2004-04-28  Martin Baulig  <martin@ximian.com>
19179
19180         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
19181
19182         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
19183         success and added `out object value'.  Use a `bool resolved' field
19184         to check whether we've already been called rather than
19185         `ConstantValue != null' since this breaks for NullLiterals.
19186
19187 2004-04-28  Raja R Harinath  <rharinath@novell.com>
19188
19189         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
19190         setting of this flag, since the 'set' method may be non-public.
19191
19192 2004-04-28  Raja R Harinath  <rharinath@novell.com>
19193
19194         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
19195         check on current_vector.Block.
19196
19197 2004-04-27  Martin Baulig  <martin@ximian.com>
19198
19199         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
19200         a field initializer.  Fixes #56459.
19201
19202 2004-04-27  Martin Baulig  <martin@ximian.com>
19203
19204         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
19205         we're not attempting to use an indexer.  Fixes #52154.
19206
19207 2004-04-27  Martin Baulig  <martin@ximian.com>
19208
19209         * statement.cs (Return): Don't create a return label if we don't
19210         need it; reverts my change from January 20th.  Thanks to Ben
19211         Maurer for this.
19212
19213 2004-04-27  Martin Baulig  <martin@ximian.com>
19214
19215         According to the spec, `goto' can only leave a nested scope, but
19216         never enter it.
19217
19218         * statement.cs (Block.LookupLabel): Only lookup in the current
19219         block, don't recurse into parent or child blocks.
19220         (Block.AddLabel): Check in parent and child blocks, report
19221         CS0140/CS0158 if we find a duplicate.
19222         (Block): Removed this indexer for label lookups.
19223         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
19224         this already does the error reporting for us.
19225
19226         * flowanalysis.cs
19227         (FlowBranching.UsageVector.Block): New public variable; may be null.
19228         (FlowBranching.CreateSibling): Added `Block' argument.
19229         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
19230         label for the target of a `goto' and check whether we're not
19231         leaving a `finally'.
19232
19233 2004-04-27  Martin Baulig  <martin@ximian.com>
19234
19235         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
19236         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
19237         just for returns).
19238
19239 2004-04-27  Martin Baulig  <martin@ximian.com>
19240
19241         * statement.cs (Block.AddLabel): Also check for implicit blocks
19242         and added a CS0158 check.
19243
19244 2004-04-27  Martin Baulig  <martin@ximian.com>
19245
19246         * flowanalysis.cs (FlowBranchingLoop): New class.
19247         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
19248         UsageVector's instead of an ArrayList.
19249         (FlowBranching.Label): Likewise.
19250         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
19251         (FlowBranching.AddBreakVector): New method.
19252
19253 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
19254
19255         * attribute.cs: Small regression fix: only convert the type if we
19256         the type is different, fixes System.Drawing build.
19257
19258 2004-04-27  Martin Baulig  <martin@ximian.com>
19259
19260         * attribute.cs (Attribute.Resolve): If we have a constant value
19261         for a named field or property, implicity convert it to the correct
19262         type.
19263
19264 2004-04-27  Raja R Harinath  <rharinath@novell.com>
19265
19266         * statement.cs (Block.Block): Implicit blocks share
19267         'child_variable_names' fields with parent blocks.
19268         (Block.AddChildVariableNames): Remove.
19269         (Block.AddVariable): Mark variable as "used by a child block" in
19270         every surrounding block.
19271         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
19272         been used in a child block, complain about violation of "Invariant
19273         meaning in blocks" rule.
19274         * cs-parser.jay (declare_local_variables): Don't use
19275         AddChildVariableNames.
19276         (foreach_statement): Don't create an implicit block: 'foreach'
19277         introduces a scope.
19278
19279 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
19280
19281         * convert.cs (ImplicitNumericConversion): 0 is also positive when
19282         converting from 0L to ulong.  Fixes 57522.
19283
19284 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
19285
19286         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
19287         derived class hides via 'new' keyword field from base class (test-242.cs).
19288         TODO: Handle this in the more general way.
19289         
19290         * class.cs (CheckBase): Ditto.
19291
19292 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
19293
19294         * decl.cs (caching_flags): New member for storing cached values
19295         as bit flags.
19296         (MemberCore.Flags): New enum where bit flags for caching_flags
19297         are defined.
19298         (MemberCore.cls_compliance): Moved to caching_flags.
19299         (DeclSpace.Created): Moved to caching_flags.
19300
19301         * class.cs: Use caching_flags instead of DeclSpace.Created
19302         
19303 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
19304
19305         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
19306         if we are only a derived class, not a nested class.
19307
19308         * typemanager.cs: Same as above, but do this at the MemberLookup
19309         level (used by field and methods, properties are handled in
19310         PropertyExpr).   Allow for the qualified access if we are a nested
19311         method. 
19312
19313 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
19314
19315         * class.cs: Refactoring.
19316         (IMethodData): New inteface; Holds links to parent members
19317         to avoid member duplication (reduced memory allocation).
19318         (Method): Implemented IMethodData interface.
19319         (PropertyBase): New inner classes for get/set methods.
19320         (PropertyBase.PropertyMethod): Implemented IMethodData interface
19321         (Event): New inner classes for add/remove methods.
19322         (Event.DelegateMethod): Implemented IMethodData interface.
19323
19324         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
19325         EmitContext (related to class.cs refactoring).
19326
19327 2004-04-21  Raja R Harinath  <rharinath@novell.com>
19328
19329         * delegate.cs (Delegate.VerifyApplicability): If the number of
19330         arguments are the same as the number of parameters, first try to
19331         verify applicability ignoring  any 'params' modifier on the last
19332         parameter.
19333         Fixes #56442.
19334
19335 2004-04-16  Raja R Harinath  <rharinath@novell.com>
19336
19337         * class.cs (TypeContainer.AddIndexer): Use
19338         'ExplicitInterfaceName' to determine if interface name was
19339         explicitly specified.  'InterfaceType' is not initialized at this time.
19340         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
19341         Indexers array is already in the required order.  Initialize
19342         'IndexerName' only if there are normal indexers.
19343         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
19344         (TypeContainer.Emit): Emit DefaultMember attribute only if
19345         IndexerName is initialized.
19346         Fixes #56300.
19347
19348 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
19349
19350         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
19351         Fixes #57007
19352
19353 2004-04-15  Raja R Harinath  <rharinath@novell.com>
19354
19355         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
19356         attributes.
19357         Fix for #56456.
19358
19359         * attribute.cs (Attribute.Resolve): Check for duplicate named
19360         attributes.
19361         Fix for #56463.
19362
19363 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
19364
19365         * iterators.cs (MarkYield): track whether we are in an exception,
19366         and generate code accordingly.  Use a temporary value to store the
19367         result for our state.
19368
19369         I had ignored a bit the interaction of try/catch with iterators
19370         since their behavior was not entirely obvious, but now it is
19371         possible to verify that our behavior is the same as MS .NET 2.0
19372
19373         Fixes 54814
19374
19375 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
19376
19377         * iterators.cs: Avoid creating temporaries if there is no work to
19378         do. 
19379
19380         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
19381         Enumerations, use TypeManager.EnumToUnderlying and call
19382         recursively. 
19383
19384         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
19385         bug #57013
19386
19387         (This.Emit): Use EmitContext.EmitThis to emit our
19388         instance variable.
19389
19390         (This.EmitAssign): Ditto.
19391
19392         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
19393         codepaths, we will move all the functionality into
19394         Mono.CSharp.This 
19395
19396         (FieldExpr.EmitAssign): Ditto.
19397
19398         This fixes several hidden bugs that I uncovered while doing a code
19399         review of this today.
19400
19401         * codegen.cs (EmitThis): reworked so the semantics are more clear
19402         and also support value types "this" instances.
19403
19404         * iterators.cs: Changed so that for iterators in value types, we
19405         do not pass the value type as a parameter.  
19406
19407         Initialization of the enumerator helpers is now done in the caller
19408         instead of passing the parameters to the constructors and having
19409         the constructor set the fields.
19410
19411         The fields have now `assembly' visibility instead of private.
19412
19413 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
19414
19415         * expression.cs (Argument.Resolve): Check if fields passed as ref
19416         or out are contained in a MarshalByRefObject.
19417
19418         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
19419         another compiler type.
19420
19421 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
19422
19423         * class.cs (Indexer.Define): use the new name checking method.
19424         Also, return false on an error.
19425         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
19426         (is_identifier_[start/part]_character): make static.
19427
19428 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
19429
19430         * expression.cs (Binary.ResolveOperator): Do no append strings
19431         twice: since we can be invoked more than once (array evaluation)
19432         on the same concatenation, take care of this here.  Based on a fix
19433         from Ben (bug #56454)
19434
19435 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
19436
19437         * codegen.cs: Fix another case where CS1548 must be reported (when 
19438         delay-sign isn't specified and no private is available #56564). Fix
19439         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
19440         error when MCS is used on the MS runtime and we need to delay-sign 
19441         (which seems unsupported by AssemblyBuilder - see #56621).
19442
19443 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
19444
19445         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
19446         (TypeManager.ComputeNamespaces): Faster implementation for
19447         Microsoft runtime.
19448
19449         * compiler.csproj: Updated AssemblyName to mcs.
19450
19451 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
19452
19453         * rootcontext.cs: Add new types to the boot resolution.
19454
19455         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
19456         MulticastDelegate is not allowed.
19457
19458         * typemanager.cs: Add new types to lookup: System.TypedReference
19459         and ArgIterator.
19460
19461         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
19462         check for TypedReference or ArgIterator, they are not allowed. 
19463
19464         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
19465         makes us properly catch 1510 in some conditions (see bug 56016 for
19466         details). 
19467
19468 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
19469
19470         * CryptoConvert.cs: update from corlib version
19471         with endian fixes.
19472
19473 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
19474
19475         * class.cs (Indexer.Define): Check indexername declaration
19476
19477 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
19478
19479         * attribute.cs (IsClsCompliant): Fixed problem with handling
19480         all three states (compliant, not-compliant, undetected).
19481
19482 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
19483
19484         * attribute.cs (Attribute): Location is now public.
19485         (Resolve): Store resolved arguments (pos_values) in attribute class.
19486         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
19487         (GetClsCompliantAttributeValue): New method that gets
19488         CLSCompliantAttribute value.
19489         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
19490         if exists else null.
19491         (AttributeTester): New class for CLS-Compliant verification routines.
19492
19493         * class.cs (Emit): Add CLS-Compliant verification.
19494         (Method.GetSignatureForError): Implemented.
19495         (Constructor.GetSignatureForError): Implemented
19496         (Constructor.HasCompliantArgs): Returns if constructor has
19497         CLS-Compliant arguments.
19498         (Constructor.Emit): Override.
19499         (Construcor.IsIdentifierClsCompliant): New method; For constructors
19500         is needed to test only parameters.
19501         (FieldBase.GetSignatureForError): Implemented.
19502         (TypeContainer): New member for storing base interfaces.
19503         (TypeContainer.FindMembers): Search in base interfaces too.
19504
19505         * codegen.cs (GetClsComplianceAttribute): New method that gets
19506         assembly or module CLSCompliantAttribute value.
19507         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
19508         for assembly.
19509         (ModuleClass.Emit): Add error 3012 test.
19510
19511         * const.cs (Emit): Override and call base for CLS-Compliant tests.
19512
19513         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
19514         state for all decl types.
19515         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
19516         if CLS-Compliant tests are required.
19517         (IsClsCompliaceRequired): New method. Analyze whether code
19518         must be CLS-Compliant.
19519         (IsExposedFromAssembly): New method. Returns true when MemberCore
19520         is exposed from assembly.
19521         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
19522         value or gets cached value.
19523         (HasClsCompliantAttribute): New method. Returns true if MemberCore
19524         is explicitly marked with CLSCompliantAttribute.
19525         (IsIdentifierClsCompliant): New abstract method. This method is
19526         used to testing error 3005.
19527         (IsIdentifierAndParamClsCompliant): New method. Common helper method
19528         for identifier and parameters CLS-Compliant testing.
19529         (VerifyClsCompliance): New method. The main virtual method for
19530         CLS-Compliant verifications.
19531         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
19532         null. I don't know why is null (too many public members !).
19533         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
19534         and get value of first CLSCompliantAttribute that found.
19535
19536         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
19537         (VerifyClsCompliance): Override and add extra tests.
19538
19539         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
19540         clscheck- disable CLS-Compliant verification event if assembly is has
19541         CLSCompliantAttribute(true).
19542
19543         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
19544         ApllyAttribute is now called in emit section as in the other cases.
19545         Possible future Emit integration.
19546         (IsIdentifierClsCompliant): New override.
19547         (VerifyClsCompliance): New override.
19548         (GetEnumeratorName): Returns full enum name.
19549
19550         * parameter.cs (GetSignatureForError): Implemented.
19551
19552         * report.cs (WarningData): New struct for Warning message information.
19553         (LocationOfPreviousError): New method.
19554         (Warning): New method. Reports warning based on the warning table.
19555         (Error_T): New method. Reports error based on the error table.
19556
19557         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
19558         verifications are done here.
19559
19560         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
19561
19562         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
19563         CLSCompliantAttribute.
19564         (all_imported_types): New member holds all imported types from other
19565         assemblies.
19566         (LoadAllImportedTypes): New method fills static table with exported types
19567         from all referenced assemblies.
19568         (Modules): New property returns all assembly modules.
19569
19570 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
19571
19572         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
19573         throwing a parser error.
19574
19575         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
19576         which removes the hardcoded get_/set_ prefixes for properties, as
19577         IL allows for the properties to be named something else.  
19578
19579         Bug #56013
19580
19581         * expression.cs: Do not override operand before we know if it is
19582         non-null.  Fix 56207
19583
19584 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19585
19586         * typemanager.cs: support for pinned variables.
19587
19588 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19589
19590         * decl.cs, typemanager.cs: Avoid using an arraylist
19591         as a buffer if there is only one result set.
19592
19593 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19594
19595         * expression.cs: Make sure you cant call a static method
19596         with an instance expression, bug #56174.
19597
19598 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
19599
19600         * class.cs (IsDuplicateImplementation): Improve error reporting to
19601         flag 663 (method only differs in parameter modifier).
19602
19603         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
19604         in preprocessor directives.
19605
19606         * location.cs (LookupFile): Allow for the empty path.
19607
19608         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
19609         better approach for some of that patch, but its failing with the
19610         CharSet enumeration.  For now try/catch will do.
19611
19612         * typemanager.cs: Do not crash if a struct does not have fields.
19613         Fixes 56150.
19614
19615 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19616
19617         * expression.cs: cs0213, cant fix a fixed expression.
19618         fixes 50231.
19619
19620 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19621
19622         * cs-parser.jay: detect invalid embeded statements gracefully.
19623         bug #51113.
19624
19625 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19626
19627         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
19628         As a regex:
19629         s/
19630         the invocation type may not be a subclass of the tye of the item/
19631         The type of the item must be a subclass of the invocation item.
19632         /g
19633
19634         Fixes bug #50820.
19635
19636 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
19637
19638         * attribute.cs: Added methods to get a string and a bool from an
19639         attribute. Required to information from AssemblyKeyFileAttribute,
19640         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
19641         * codegen.cs: Modified AssemblyName creation to include support for
19642         strongnames. Catch additional exceptions to report them as CS1548.
19643         * compiler.csproj: Updated include CryptoConvert.cs.
19644         * compiler.csproj.user: Removed file - user specific configuration.
19645         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
19646         Mono.Security assembly. The original class is maintained and tested in
19647         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
19648         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
19649         like CSC 8.0 (C# v2) supports.
19650         * Makefile: Added CryptoConvert.cs to mcs sources.
19651         * rootcontext.cs: Added new options for strongnames.
19652
19653 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
19654
19655         * driver.cs: For --expect-error, report error code `2'
19656         if the program compiled with no errors, error code `1' if
19657         it compiled with an error other than the one expected.
19658
19659 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
19660
19661         * compiler.csproj: Updated for Visual Studio .NET 2003.
19662         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
19663         * compiler.sln: Updated for Visual Studio .NET 2003.
19664
19665 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
19666
19667         * expression.cs: Fix bug #47234. We basically need to apply the
19668         rule that we prefer the conversion of null to a reference type
19669         when faced with a conversion to 'object' (csc behaviour).
19670
19671 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19672
19673         * statement.cs: Shorter form for foreach, eliminates
19674         a local variable. r=Martin.
19675
19676 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19677
19678         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
19679         checks if we can use brtrue/brfalse to test for 0.
19680         * expression.cs: use the above in the test for using brtrue/brfalse.
19681         cleanup code a bit.
19682
19683 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19684
19685         * expression.cs: Rewrite string concat stuff. Benefits:
19686
19687         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
19688         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
19689         rather than a concat chain.
19690
19691         * typemanager.cs: Add lookups for more concat overloads.
19692
19693 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19694
19695         * expression.cs: Emit shorter il code for array init.
19696
19697         newarr
19698         dup
19699         // set 1
19700
19701         // set 2
19702
19703         newarr
19704         stloc.x
19705
19706         ldloc.x
19707         // set 1
19708
19709         ldloc.x
19710         // set 2
19711
19712 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
19713
19714         * statement.cs: Before, two switch blocks would be merged if the
19715         total size of the blocks (end_item - begin_item + 1) was less than
19716         two times the combined sizes of the blocks.
19717
19718         Now, it will only merge if after the merge at least half of the
19719         slots are filled.
19720
19721         fixes 55885.
19722
19723 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
19724
19725         * class.cs : csc build fix for GetMethods(). See bug #52503.
19726
19727 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
19728
19729         * expression.cs: Make sure fp comparisons work with NaN.
19730         This fixes bug #54303. Mig approved this patch a long
19731         time ago, but we were not able to test b/c the runtime
19732         had a related bug.
19733
19734 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
19735
19736         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
19737
19738 2004-03-19  Martin Baulig  <martin@ximian.com>
19739
19740         * class.cs (MemberCore.IsDuplicateImplementation): Report the
19741         error here and not in our caller.
19742
19743 2004-03-19  Martin Baulig  <martin@ximian.com>
19744
19745         * interface.cs: Completely killed this file.
19746         (Interface): We're now a TypeContainer and live in class.cs.
19747
19748         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
19749         argument; we're now also called for interfaces.
19750         (TypeContainer.DefineMembers): Allow this method being called
19751         multiple times.
19752         (TypeContainer.GetMethods): New public method; formerly known as
19753         Interface.GetMethod().  This is used by PendingImplementation.
19754         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
19755         it's now private and non-static.
19756         (Interface): Moved this here; it's now implemented similar to
19757         Class and Struct.
19758         (Method, Property, Event, Indexer): Added `bool is_interface'
19759         argument to their .ctor's.
19760         (MemberBase.IsInterface): New public field.
19761
19762         * cs-parser.jay: Create normal Method, Property, Event, Indexer
19763         instances instead of InterfaceMethod, InterfaceProperty, etc.
19764         (opt_interface_base): Removed; we now use `opt_class_base' instead.
19765         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
19766
19767 2004-03-19  Martin Baulig  <martin@ximian.com>
19768
19769         * class.cs (MethodCore.IsDuplicateImplementation): New private
19770         method which does the CS0111 checking.
19771         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
19772         Use IsDuplicateImplementation().
19773
19774 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
19775
19776         * decl.cs (FindMemberToOverride): New method to find the correct
19777         method or property to override in the base class.
19778         * class.cs
19779             - Make Method/Property use the above method to find the
19780               version in the base class.
19781             - Remove the InheritableMemberSignatureCompare as it is now
19782               dead code.
19783
19784         This patch makes large code bases much faster to compile, as it is
19785         O(n) rather than O(n^2) to do this validation.
19786
19787         Also, it fixes bug 52458 which is that nested classes are not
19788         taken into account when finding the base class member.
19789
19790         Reviewed/Approved by Martin.
19791
19792 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
19793
19794         * interface.cs: In all interface classes removed redundant
19795         member initialization.
19796
19797 2004-03-16  Martin Baulig  <martin@ximian.com>
19798
19799         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
19800
19801 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
19802
19803         * decl.cs (DefineTypeAndParents): New helper method to define a
19804         type's containers before the type itself is defined;  This is a
19805         bug exposed by the recent changes to Windows.Forms when an
19806         implemented interface was defined inside a class that had not been
19807         built yet.   
19808
19809         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
19810
19811         (Check): Loop correctly to report errors modifiers
19812         (UNSAFE was not in the loop, since it was the same as TOP).
19813
19814         * interface.cs: Every interface member now takes a ModFlags,
19815         instead of a "is_new" bool, which we set on the base MemberCore. 
19816
19817         Every place where we called "UnsafeOk" in the interface, now we
19818         call the proper member (InterfaceMethod.UnsafeOK) instead to get
19819         the unsafe settings from the member declaration instead of the
19820         container interface. 
19821
19822         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
19823
19824         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
19825         `set_indexer_name' to the pending bits (one per type).
19826
19827         We fixed a bug today that was picking the wrong method to
19828         override, since for properties the existing InterfaceMethod code
19829         basically ignored the method name.  Now we make sure that the
19830         method name is one of the valid indexer names.
19831
19832 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
19833  
19834         * support.cs (SeekableStreamReader): Keep track of stream byte
19835         positions and don't mix them with character offsets to the buffer.
19836
19837         Patch from Gustavo Giráldez
19838
19839 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
19840
19841         * interface.cs (InterfaceSetGetBase): Removed double member
19842         initialization, base class does it as well.
19843
19844 2004-03-13  Martin Baulig  <martin@ximian.com>
19845
19846         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
19847         when compiling corlib.
19848
19849 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
19850
19851         * convert.cs (ExplicitConversion): We were reporting an error on
19852         certain conversions (object_type source to a value type, when the
19853         expression was `null') before we had a chance to pass it through
19854         the user defined conversions.
19855
19856         * driver.cs: Replace / and \ in resource specifications to dots.
19857         Fixes 50752
19858
19859         * class.cs: Add check for duplicate operators.  Fixes 52477
19860
19861 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
19862
19863         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
19864         that are in the middle of the statements, not only at the end.
19865         Fixes #54987
19866
19867         * class.cs (TypeContainer.AddField): No longer set the
19868         `HaveStaticConstructor' flag, now we call it
19869         `UserDefineStaticConstructor' to diferentiate the slightly
19870         semantic difference.
19871
19872         The situation is that we were not adding BeforeFieldInit (from
19873         Modifiers.TypeAttr) to classes that could have it.
19874         BeforeFieldInit should be set to classes that have no static
19875         constructor. 
19876
19877         See:
19878
19879         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
19880
19881         And most importantly Zoltan's comment:
19882
19883         http://bugzilla.ximian.com/show_bug.cgi?id=44229
19884
19885         "I think beforefieldinit means 'it's ok to initialize the type sometime 
19886          before its static fields are used', i.e. initialization does not need
19887          to be triggered by the first access to the type. Setting this flag
19888          helps the JIT to compile better code, since it can run the static
19889          constructor at JIT time, and does not need to generate code to call it
19890          (possibly lots of times) at runtime. Unfortunately, mcs does not set
19891          this flag for lots of classes like String. 
19892          
19893          csc sets this flag if the type does not have an explicit static 
19894          constructor. The reasoning seems to be that if there are only static
19895          initalizers for a type, and no static constructor, then the programmer
19896          does not care when this initialization happens, so beforefieldinit
19897          can be used.
19898          
19899          This bug prevents the AOT compiler from being usable, since it 
19900          generates so many calls to mono_runtime_class_init that the AOT code
19901          is much slower than the JITted code. The JITted code is faster, 
19902          because it does not generate these calls if the vtable is type is
19903          already initialized, which is true in the majority of cases. But the
19904          AOT compiler can't do this."
19905
19906 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
19907
19908         * class.cs (MethodData.Emit): Refactor the code so symbolic
19909         information is generated for destructors;  For some reasons we
19910         were taking a code path that did not generate symbolic information
19911         before. 
19912
19913 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
19914
19915         * class.cs: Create a Constructor.CheckBase method that
19916         takes care of all validation type code. The method
19917         contains some code that was moved from Define.
19918
19919         It also includes new code that checks for duplicate ctors.
19920         This fixes bug #55148.
19921
19922 2004-03-09  Joshua Tauberer <tauberer@for.net>
19923
19924         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
19925         a { ... }-style array creation invokes EmitStaticInitializers
19926         which is not good for reference-type arrays.  String, decimal
19927         and now null constants (NullCast) are not counted toward
19928         static initializers.
19929
19930 2004-03-05  Martin Baulig  <martin@ximian.com>
19931
19932         * location.cs (SourceFile.HasLineDirective): New public field;
19933         specifies whether the file contains or is referenced by a "#line"
19934         directive.
19935         (Location.DefineSymbolDocuments): Ignore source files which
19936         either contain or are referenced by a "#line" directive.        
19937
19938 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
19939
19940         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
19941         direct access to our parent, so check the method inline there.
19942
19943 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
19944
19945         * expression.cs (Invocation.EmitCall): Miguel's last commit
19946         caused a regression. If you had:
19947
19948             T t = null;
19949             t.Foo ();
19950
19951         In Foo the implict this would be null.
19952
19953 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
19954
19955         * expression.cs (Invocation.EmitCall): If the method is not
19956         virtual, do not emit a CallVirt to it, use Call.
19957
19958         * typemanager.cs (GetFullNameSignature): Improve the method to
19959         cope with ".ctor" and replace it with the type name.
19960
19961         * class.cs (ConstructorInitializer.Resolve): Now the method takes
19962         as an argument the ConstructorBuilder where it is being defined,
19963         to catch the recursive constructor invocations.
19964
19965 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
19966
19967         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
19968         routines to check if a type is an enumerable/enumerator allow
19969         classes that implement the IEnumerable or IEnumerator interfaces.
19970
19971         * class.cs (Property, Operator): Implement IIteratorContainer, and
19972         implement SetYields.
19973
19974         (Property.Define): Do the block swapping for get_methods in the
19975         context of iterators.   We need to check if Properties also
19976         include indexers or not.
19977
19978         (Operator): Assign the Block before invoking the
19979         OperatorMethod.Define, so we can trigger the Iterator code
19980         replacement. 
19981
19982         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
19983         Property and Operator classes are not created when we parse the
19984         declarator but until we have the block completed, so we use a
19985         singleton SimpleIteratorContainer.Simple to flag whether the
19986         SetYields has been invoked.
19987
19988         We propagate this setting then to the Property or the Operator to
19989         allow the `yield' to function.
19990
19991 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
19992
19993         * codegen.cs: Implemented attribute support for modules.
19994         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
19995         Assembly/Module functionality.
19996
19997         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
19998         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
19999         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
20000
20001 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
20002
20003         * interface.cs (FindMembers): The operation is performed on all base
20004         interfaces and not only on the first. It is required for future CLS Compliance patch.
20005
20006 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
20007
20008         * statement.cs, codegen.cs:
20009         This patch deals with patterns such as:
20010
20011         public class List : IEnumerable {
20012
20013                 public MyEnumerator GetEnumerator () {
20014                         return new MyEnumerator(this);
20015                 }
20016
20017                 IEnumerator IEnumerable.GetEnumerator () {
20018                         ...
20019                 }
20020                 
20021                 public struct MyEnumerator : IEnumerator {
20022                         ...
20023                 }
20024         }
20025
20026         Before, there were a few things we did wrong:
20027         1) we would emit callvirt on a struct, which is illegal
20028         2) we emited ldarg when we needed to emit ldarga
20029         3) we would mistakenly call the interface methods on an enumerator
20030         type that derived from IEnumerator and was in another assembly. For example:
20031
20032         public class MyEnumerator : IEnumerator
20033
20034         Would have the interface methods called, even if there were public impls of the
20035         method. In a struct, this lead to invalid IL code.
20036
20037 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
20038
20039         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
20040           renamed to Emit.
20041
20042         * delegate.cs (Define): Fixed crash when delegate type is undefined.
20043
20044 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
20045
20046         * cs-parser.jay: Fix small regression: we were not testing V2
20047         compiler features correctly.
20048
20049         * interface.cs: If the emit context is null, then create one
20050
20051 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
20052
20053         * decl.cs (GetSignatureForError): New virtual method to get full name
20054           for error messages.
20055
20056         * attribute.cs (IAttributeSupport): New interface for attribute setting.
20057           Now it is possible to rewrite ApplyAttributes method to be less if/else.
20058
20059         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
20060           Duplicated members and code in these classes has been removed.
20061           Better encapsulation in these classes.
20062
20063 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
20064
20065         * assign.cs (Assign.DoResolve): When dealing with compound
20066         assignments, there is a new rule in ECMA C# 2.4 (might have been
20067         there before, but it is documented here) that states that in:
20068
20069         a op= b;
20070
20071         If b is of type int, and the `op' is a shift-operator, then the
20072         above is evaluated as:
20073
20074         a = (int) a op b 
20075
20076         * expression.cs (Binary.ResolveOperator): Instead of testing for
20077         int/uint/long/ulong, try to implicitly convert to any of those
20078         types and use that in pointer arithmetic.
20079
20080         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
20081         method to print information for from the type, not from the
20082         null-method we were given.
20083
20084 2004-02-01  Duncan Mak  <duncan@ximian.com>
20085
20086         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
20087         parsing for cmd, fixes bug #53694.
20088
20089 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
20090
20091         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
20092         in the member name duplication tests. Property and operator name duplication
20093         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
20094
20095 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
20096
20097         * interface.cs (PopulateMethod): Fixed crash when interface method
20098         returns not existing type (error test cs0246-3.cs).
20099
20100 2004-02-02  Ravi Pratap M <ravi@ximian.com>
20101
20102         * cs-parser.jay (interface_accessors): Re-write actions to also
20103         store attributes attached to get and set methods. Fix spelling
20104         while at it.
20105
20106         (inteface_property_declaration): Modify accordingly.
20107
20108         (InterfaceAccessorInfo): New helper class to store information to pass
20109         around between rules that use interface_accessors.
20110
20111         * interface.cs (Emit): Apply attributes on the get and set
20112         accessors of properties and indexers too.
20113
20114         * attribute.cs (ApplyAttributes): Modify accordingly to use the
20115         right MethodBuilder when applying attributes to the get and set accessors.
20116
20117 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
20118
20119         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
20120
20121 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
20122
20123         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
20124
20125 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
20126
20127         * cs-parser.jay: Remove YIELD token, instead use the new grammar
20128         changes that treat `yield' specially when present before `break'
20129         or `return' tokens.
20130
20131         * cs-tokenizer.cs: yield is no longer a keyword.
20132
20133 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
20134
20135         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
20136         setting for default constructors.
20137         For default constructors are almost every time set wrong Modifier. The
20138         generated IL code has been alright. But inside mcs this values was
20139         wrong and this was reason why several of my CLS Compliance tests
20140         failed.
20141
20142 2004-01-22  Martin Baulig  <martin@ximian.com>
20143
20144         * cs-parser.jay (namespace_or_type_name): Return an Expression,
20145         not a QualifiedIdentifier.  This is what `type_name_expression'
20146         was previously doing.
20147         (type_name_expression): Removed; the code is now in
20148         `namespace_or_type_name'.
20149         (qualified_identifier): Removed, use `namespace_or_type_name'
20150         instead.
20151         (QualifiedIdentifier): Removed this class.      
20152
20153 2004-01-22  Martin Baulig  <martin@ximian.com>
20154
20155         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
20156         not a string as alias name.
20157
20158 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
20159
20160         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
20161         #52730 bug, and instead compute correctly the need to use a
20162         temporary variable when requesting an address based on the
20163         static/instace modified of the field and the constructor.
20164  
20165 2004-01-21  Martin Baulig  <martin@ximian.com>
20166
20167         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
20168         class and namespace before looking up aliases.  Fixes #52517.
20169
20170 2004-01-21  Martin Baulig  <martin@ximian.com>
20171
20172         * flowanalysis.cs (UsageVector.Merge): Allow variables being
20173         assinged in a 'try'; fixes exception4.cs.
20174
20175 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20176         * class.cs : Implemented parameter-less constructor for TypeContainer
20177
20178         * decl.cs: Attributes are now stored here. New property OptAttributes
20179
20180         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
20181
20182         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
20183
20184 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20185
20186         * typemanager.cs (CSharpSignature): Now reports also inner class name.
20187           (CSharpSignature): New method for indexer and property signature.
20188
20189 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20190
20191         * pending.cs (IsVirtualFilter): Faster implementation.
20192
20193 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20194
20195         * typemanager.cs: Avoid inclusion of same assembly more than once.
20196
20197 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20198
20199         * cs-parser.jay: Fixed problem where the last assembly attribute
20200           has been applied also to following declaration (class, struct, etc.)
20201           
20202 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20203
20204         * class.cs: Added error CS0538, CS0539 reporting.
20205         Fixed crash on Microsoft runtime when field type is void.
20206
20207         * cs-parser.jay: Added error CS0537 reporting.
20208
20209         * pending.cs: Added error CS0535 reporting.
20210         Improved error report for errors CS0536, CS0534.
20211
20212 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
20213
20214         Merge a few bits from the Anonymous Method MCS tree.
20215
20216         * statement.cs (ToplevelBlock): New class for toplevel methods,
20217         will hold anonymous methods, lifted variables.
20218
20219         * cs-parser.jay: Create toplevel blocks for delegates and for
20220         regular blocks of code. 
20221
20222 2004-01-20  Martin Baulig  <martin@ximian.com>
20223
20224         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
20225         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
20226         and `NeedExplicitReturn'; added `IsLastStatement'.
20227         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
20228         have a `ReturnLabel' or we're not unreachable.
20229
20230         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
20231         child's reachability; don't just override ours with it.  Fixes
20232         #58058 (lluis's example).
20233         (FlowBranching): Added public InTryOrCatch(), InCatch(),
20234         InFinally(), InLoop(), InSwitch() and
20235         BreakCrossesTryCatchBoundary() methods.
20236
20237         * statement.cs (Return): Do all error checking in Resolve().
20238         Unless we are the last statement in a top-level block, always
20239         create a return label and jump to it.
20240         (Break, Continue): Do all error checking in Resolve(); also make
20241         sure we aren't leaving a `finally'.
20242         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
20243         statement in a top-level block.
20244         (Block.Flags): Added `IsDestructor'.
20245         (Block.IsDestructor): New public property.
20246
20247 2004-01-20  Martin Baulig  <martin@ximian.com>
20248
20249         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
20250
20251 2004-01-20  Martin Baulig  <martin@ximian.com>
20252
20253         * statement.cs (Statement.ResolveUnreachable): New public method.
20254         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
20255         (Block.Resolve): Resolve unreachable statements.
20256
20257 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
20258
20259         * expression.cs: We need to fix the case where we do
20260         not have a temp variable here.
20261
20262         * assign.cs: Only expression compound assignments need
20263         temporary variables.
20264
20265 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
20266
20267         * flowanalysis.cs: Reduce memory allocation in a few ways:
20268           - A block with no variables should not allocate a bit
20269             vector for itself.
20270           - A method with no out parameters does not need any tracking
20271             for assignment of the parameters, so we need not allocate
20272             any data for it.
20273           - The arrays:
20274                 public readonly Type[] VariableTypes;
20275                 public readonly string[] VariableNames;
20276             Are redundant. The data is already stored in the variable
20277             map, so we need not allocate another array for it.
20278           - We need to add alot of checks for if (params | locals) == null
20279             due to the first two changes.
20280
20281 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
20282
20283         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
20284         implement IMemoryLocation, we store a copy on a local variable and
20285         take the address of it.  Patch from Benjamin Jemlich
20286
20287         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
20288         to use a special "type_name_expression" rule which reduces the
20289         number of "QualifiedIdentifier" classes created, and instead
20290         directly creates MemberAccess expressions.
20291
20292 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
20293
20294         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
20295         that fixes #52853.  Null literal assignment to ValueType
20296
20297         * class.cs (MethodData.Emit): Instead of checking the name of the
20298         method to determine if its a destructor, create a new derived
20299         class from Method called Destructor, and test for that.  
20300
20301         * cs-parser.jay: Create a Destructor object instead of a Method.  
20302
20303         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
20304
20305         Fixes: 52933
20306
20307 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
20308
20309         * expression.cs (Binary.ResolveOperator): Perform an implicit
20310         conversion from MethodGroups to their delegate types on the
20311         Addition operation.
20312
20313         * delegate.cs: Introduce a new class DelegateCreation that is the
20314         base class for `NewDelegate' and `ImplicitDelegateCreation',
20315         factor some code in here.
20316
20317         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
20318         conversion from MethodGroups to compatible delegate types. 
20319
20320         * ecore.cs (Expression.Resolve): Do not flag error 654
20321         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
20322         we allow conversions from MethodGroups to delegate types now.
20323
20324         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
20325         assignments in v2 either.
20326
20327 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
20328
20329         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
20330         static read-only fields in ctors.
20331
20332         Applied patch from Benjamin Jemlich 
20333
20334         * expression.cs (UnaryMutator): Avoid leaking local variables. 
20335
20336 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
20337
20338         * cs-tokenizer.cs (IsCastToken): Allow the various native types
20339         here to return true, as they can be used like this:
20340
20341                 (XXX) int.MEMBER ()
20342
20343         Fixed 49836 and all the other dups
20344
20345 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
20346
20347         * driver.cs: Implement /win32res and /win32icon.
20348
20349 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
20350
20351         * cs-parser.jay: Add a rule to improve error handling for the
20352         common mistake of placing modifiers after the type.
20353
20354 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
20355
20356         * cs-parser.jay (interface_event_declaration): Catch
20357         initialization of events on interfaces, and report cs0068
20358
20359         * cs-parser.jay (interface_event_declaration): Catch
20360         initialization of events. 
20361
20362         * ecore.cs: Better report missing constructors.
20363
20364         * expression.cs (Binary.ResolveOperator): My previous bug fix had
20365         the error reporting done in the wrong place.  Fix.
20366
20367         * expression.cs (Binary.ResolveOperator): Catch the 
20368         operator + (E x, E y) error earlier, and later allow for implicit
20369         conversions in operator +/- (E e, U x) from U to the underlying
20370         type of E.
20371
20372         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
20373         52596, if the container class is abstract, the default constructor
20374         is protected otherwise its public (before, we were always public).
20375
20376         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
20377         fixed statement.
20378
20379         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
20380         Jemlich that fixes bug #52597, MCS was generating invalid code for
20381         idisposable structs.   Thanks to Ben for following up with this
20382         bug as well.
20383
20384 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
20385
20386         * driver.cs: Allow assemblies without code to be generated, fixes
20387         52230.
20388
20389 2004-01-07  Nick Drochak <ndrochak@gol.com>
20390
20391         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
20392
20393 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
20394
20395         * cs-parser.jay: Add rules to improve error reporting if fields or
20396         methods are declared at the namespace level (error 116)
20397
20398         * Add rules to catch event add/remove
20399
20400 2004-01-04  David Sheldon <dave-mono@earth.li>
20401
20402   * expression.cs: Added matching ")" to error message for 
20403   CS0077
20404
20405 2004-01-03 Todd Berman <tberman@gentoo.org>
20406
20407         * ecore.cs, attribute.cs:
20408         Applying fix from #52429.
20409
20410 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20411
20412         * ecore.cs, expression.cs, statement.cs:
20413         Total rewrite of how we handle branching. We
20414         now handle complex boolean expressions with fewer
20415         jumps. As well if (x == 0) no longer emits a ceq.
20416
20417         if (x is Foo) is much faster now, because we generate
20418         better code.
20419
20420         Overall, we get a pretty big improvement on our benchmark
20421         tests. The code we generate is smaller and more readable.
20422
20423         I did a full two-stage bootstrap. The patch was reviewed
20424         by Martin and Miguel.
20425
20426 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20427
20428         * cs-parser.jay: Make primary_expression not take a QI.
20429         we dont need this because the member_access rule covers
20430         us here. So we replace the rule with just IDENTIFIER.
20431
20432         This has two good effects. First, we remove a s/r conflict.
20433         Second, we allocate many fewer QualifiedIdentifier objects.
20434
20435 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20436
20437         * attribute.cs: Handle MarshalAs attributes as pseudo, and
20438         set the correct information via SRE. This prevents
20439         hanging on the MS runtime. Fixes #29374.
20440
20441 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20442
20443         * convert.cs: correctly handle conversions to value types
20444         from Enum and ValueType as unboxing conversions.
20445
20446         Fixes bug #52569. Patch by Benjamin Jemlich.
20447
20448 2004-01-02  Ravi Pratap  <ravi@ximian.com>
20449
20450         * expression.cs (BetterConversion): Prefer int -> uint
20451         over int -> ulong (csc's behaviour). This fixed bug #52046.
20452
20453 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
20454
20455         * decl.cs (MemberCache.FindMembers): now returns a
20456         MemberInfo [].
20457
20458         * typemanager.cs: In general, go with with ^^.
20459         (CopyNewMethods): take an IList.
20460         (RealMemberLookup): Only allocate an arraylist
20461         if we copy from two sets of methods.
20462
20463         This change basically does two things:
20464         1) Fewer array lists allocated due to CopyNewMethods.
20465         2) the explicit cast in MemberList costed ALOT.
20466
20467 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
20468
20469         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
20470         a hashtable to avoid needless string allocations when an identifier is
20471         used more than once (the common case).
20472
20473 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
20474
20475         * pending.cs: MS's TypeBuilder.GetInterfaces ()
20476         is broken, it will not return anything. So, we
20477         have to use the information we have in mcs to
20478         do the task.
20479
20480         * typemanager.cs: Add a cache for GetInterfaces,
20481         since this will now be used more often (due to ^^)
20482
20483         (GetExplicitInterfaces) New method that gets the
20484         declared, not effective, interfaces on a type
20485         builder (eg, if you have interface IFoo, interface
20486         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
20487         { IBar }.
20488
20489         This patch makes MCS able to bootstrap itself on
20490         Windows again.
20491
20492 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
20493
20494         * expression.cs: Remove the Nop's that Miguel put
20495         in by mistake.
20496
20497 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
20498
20499         * report.cs, codegen.cs: Give the real stack trace to
20500         the error when an exception is thrown.
20501
20502 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
20503
20504         * decl.cs: only allocate hashtables for ifaces if 
20505         it is an iface!
20506
20507 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
20508
20509         * expression.cs: fix the error from cs0121-2.cs
20510         (a parent interface has two child interfaces that
20511         have a function with the same name and 0 params
20512         and the function is called through the parent).
20513
20514 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
20515
20516         * class.cs, rootcontext.cs, typmanager.cs: do not
20517         leak pointers.
20518
20519 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
20520
20521         * codegen.cs: remove stack for the ec flow branching.
20522         It is already a linked list, so no need.
20523
20524 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
20525
20526         * Makefile: Allow custom profiler here.
20527
20528 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
20529
20530         * typemanager.cs (LookupType):
20531           - Use a static char [], because split takes
20532             a param array for args, so it was allocating
20533             every time.
20534           - Do not store true in a hashtable, it boxes.
20535
20536 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
20537
20538         * flowanalysis.cs: bytify common enums.
20539
20540 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20541
20542         * modifiers.cs: Add a new set of flags for the
20543         flags allowed on explicit interface impls.
20544         * cs-parser.jay: catch the use of modifiers in
20545         interfaces correctly.
20546         * class.cs: catch private void IFoo.Blah ().
20547
20548         All related to bug #50572.
20549
20550 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20551
20552         * decl.cs: Rewrite the consistant accessability checking.
20553         Accessability is not linear, it must be implemented in
20554         a tableish way. Fixes #49704.
20555
20556 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20557
20558         * expression.cs: Handle negation in a checked context.
20559         We must use subtraction from zero. Fixes #38674.
20560
20561 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
20562
20563         * class.cs: Ignore static void main in DLLs.
20564         * rootcontext.cs: Handle the target type here,
20565         since we are have to access it from class.cs
20566         * driver.cs: account for the above.
20567
20568 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
20569
20570         * report.cs: Give line numbers and files if available.
20571
20572 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
20573
20574         * driver.cs: Implement /addmodule.
20575
20576         * typemanager.cs:  Change 'modules' field so it now contains Modules not
20577         ModuleBuilders.
20578
20579 2003-12-20  Martin Baulig  <martin@ximian.com>
20580
20581         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
20582         (FieldBase.IsAssigned): Removed this field.
20583         (FieldBase.SetAssigned): New public method.
20584         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
20585
20586 2003-12-20  Martin Baulig  <martin@ximian.com>
20587
20588         * expression.cs (LocalVariableReference.DoResolve): Don't set
20589         `vi.Used' if we're called from DoResolveLValue().
20590
20591         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
20592         returns the usage vector it just merged into the current one -
20593         pass this one to UsageWarning().
20594         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
20595         of the `EmitContext', don't call this recursively on our children.
20596
20597 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
20598
20599         * driver.cs: Implement /target:module.
20600
20601 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
20602
20603         * support.cs (CharArrayHashtable): New helper class.
20604
20605         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
20606         char arrays, not strings, so we can avoid creating a string in
20607         consume_identifier if the identifier is a keyword.
20608
20609 2003-12-16  Martin Baulig  <martin@ximian.com>
20610
20611         * statement.cs (LocalInfo.Assigned): Removed this property.
20612         (LocalInfo.Flags): Removed `Assigned'.
20613         (LocalInfo.IsAssigned): New public method; takes the EmitContext
20614         and uses flow analysis.
20615         (Block.UsageWarning): Made this method private.
20616         (Block.Resolve): Call UsageWarning() if appropriate.
20617
20618         * expression.cs (LocalVariableReference.DoResolve): Always set
20619         LocalInfo.Used here.
20620
20621 2003-12-13  Martin Baulig  <martin@ximian.com>
20622
20623         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
20624         any value here; we're now using flow analysis to figure out
20625         whether a statement/block returns a value.
20626
20627 2003-12-13  Martin Baulig  <martin@ximian.com>
20628
20629         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
20630         working again.
20631         (FlowBranching.MergeFinally): Don't call
20632         `branching.CheckOutParameters()' here, this is called in
20633         MergeTopBlock().
20634         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
20635         when adding the `finally' vector.       
20636
20637 2003-12-13  Martin Baulig  <martin@ximian.com>
20638
20639         * flowanalysis.cs
20640         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
20641         actually work and also fix #48962.
20642
20643 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
20644
20645         * decl.cs: Do not check System.Object for nested types,
20646         since we know it does not have any. Big bang for buck:
20647
20648         BEFORE:
20649            Run 1:   8.35 seconds
20650            Run 2:   8.32 seconds
20651            corlib:  17.99 seconds
20652         AFTER:
20653            Run 1:   8.17 seconds
20654            Run 2:   8.17 seconds
20655            corlib:  17.39 seconds
20656
20657 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
20658
20659         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
20660         time we are returning 0 members, so we save alot here.
20661
20662 2003-12-11  Martin Baulig  <martin@ximian.com>
20663
20664         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
20665         `MergeChild()', also just take the `FlowBranching' as argument;
20666         call Merge() on it and return the result.
20667         (FlowBranching.Merge): We don't need to do anything if we just
20668         have one sibling.
20669
20670 2003-12-11  Martin Baulig  <martin@ximian.com>
20671
20672         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
20673         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
20674         Maurer for this idea.
20675
20676 2003-12-11  Martin Baulig  <martin@ximian.com>
20677
20678         * flowanalysis.cs (MergeResult): This class is now gone; we now
20679         use the `UsageVector' for this.  The reason for this is that if a
20680         branching just has one sibling, we don't need to "merge" them at
20681         all - that's the next step to do.
20682         (FlowBranching.Merge): We now return a `UsageVector' instead of a
20683         `MergeResult'.
20684
20685 2003-12-11  Martin Baulig  <martin@ximian.com>
20686
20687         Reworked flow analyis and made it more precise and bug-free.  The
20688         most important change is that we're now using a special `Reachability'
20689         class instead of having "magic" meanings of `FlowReturns'.  I'll
20690         do some more cleanups and optimizations and also add some more
20691         documentation this week.
20692
20693         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
20694         largely reworked this class.
20695         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
20696         the new `Reachability' class instead of having "magic" values here.
20697         (FlowBranching): We're now using an instance of `Reachability'
20698         instead of having separate `Returns', `Breaks' etc. fields.
20699
20700         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
20701         based on flow analysis; ignore the return value of block.Emit ().
20702
20703 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
20704
20705         * driver.cs typemanager.cs: Find the mono extensions to corlib even
20706         if they are private.
20707
20708 2003-12-09  Martin Baulig  <martin@ximian.com>
20709
20710         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
20711         call them directly on the UsageVector.
20712
20713 2003-12-09  Martin Baulig  <martin@ximian.com>
20714
20715         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
20716         Changed return type from `FlowReturns' to `Reachability'.
20717
20718 2003-12-09  Martin Baulig  <martin@ximian.com>
20719
20720         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
20721         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
20722         `Reachable' fields with a single `Reachability' one.
20723
20724 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20725
20726         * class.cs (FindMembers): Remove foreach's.
20727
20728         Bootstrap times:
20729
20730         BEFORE
20731                 Run 1:   8.74 seconds
20732                 Run 2:   8.71 seconds
20733
20734         AFTER
20735                 Run 1:   8.64 seconds
20736                 Run 2:   8.58 seconds
20737
20738
20739 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20740
20741         * cs-parser.jay:
20742         * gen-treedump.cs:
20743         * statement.cs:
20744         This patch does a few things:
20745                 1. EmptyStatement is now a singleton, so it is never reallocated.
20746                 2. All blah is EmptyStatement constructs have been changed to
20747                    blah == EmptyStatement.Value, which is much faster and valid
20748                    now that EmptyStatement is a singleton.
20749                 3. When resolving a block, rather than allocating a new array for
20750                    the non-empty statements, empty statements are replaced with
20751                    EmptyStatement.Value
20752                 4. Some recursive functions have been made non-recursive.
20753         Mainly the performance impact is from (3), however (1) and (2) are needed for
20754         this to work. (4) does not make a big difference in normal situations, however
20755         it makes the profile look saner.
20756
20757         Bootstrap times:
20758
20759         BEFORE
20760         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
20761         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
20762         Total memory allocated: 56397 KB
20763
20764         AFTER
20765         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
20766         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
20767         Total memory allocated: 55666 KB
20768
20769 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20770
20771         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
20772         than the hashtable in a hashtable version
20773
20774         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
20775         we always end up concating a string. This results in a huge perf
20776         loss, because many strings have to be tracked by the GC. In this
20777         patch, we first use a hashtable that works with two keys, so that
20778         the strings do not need to be concat'ed.
20779
20780         Bootstrap times:
20781         BEFORE
20782                 Run 1:   8.74 seconds
20783                 Run 2:   8.71 seconds
20784
20785         AFTER
20786                 Run 1:   8.65 seconds
20787                 Run 2:   8.56 seconds
20788
20789 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20790
20791         * Makefile: Add a new target `do-time' that does a quick and simple
20792         profile, leaving easy to parse output.
20793
20794 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
20795
20796         * codegen.cs (Init): Create the dynamic assembly with 
20797         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
20798
20799 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
20800
20801         * support.cs: Make the PtrHashtable use only one
20802         instance of its comparer.
20803
20804 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
20805
20806         * typemanager.cs: Fix lookup of GetNamespaces.
20807
20808 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
20809
20810         * expression.cs: Removed redundant line.
20811
20812         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
20813         ArrayLists, use for loops with bounds.  
20814
20815         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
20816         arraylist.
20817
20818         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
20819         arraylists, use for loop with bounds.
20820
20821         The above three changes give us a 0.071 second performance
20822         improvement out of 3.294 seconds down to 3.223.  On my machine
20823         the above changes reduced the memory usage by 1,387 KB during
20824         compiler bootstrap.
20825
20826         * cs-parser.jay (QualifiedIdentifier): New class used to represent
20827         QualifiedIdentifiers.  Before we created a new string through
20828         concatenation, and mostly later on, the result would be
20829         manipulated by DecomposeQI through string manipulation.
20830
20831         This reduced the compiler memory usage for bootstrapping from
20832         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
20833         compile times in 0.05 seconds.
20834
20835 2003-11-28  Dick Porter  <dick@ximian.com>
20836
20837         * support.cs: Do string compares with the Invariant culture.
20838
20839         * rootcontext.cs: 
20840         * gen-treedump.cs: 
20841         * expression.cs: 
20842         * driver.cs: 
20843         * decl.cs: 
20844         * codegen.cs: 
20845         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
20846         the comparison is done with the Invariant culture.
20847
20848 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
20849
20850         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
20851         GetEnumerator method.
20852
20853         (ProbeCollectionType): Iterate starting at the most specific type
20854         upwards looking for a GetEnumerator
20855
20856         * expression.cs: Shift count can be up to 31 for int/uint and 63
20857         for long/ulong.
20858
20859 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
20860
20861         * statement.cs (Block.LookupLabel): Also look for the label on the
20862         children blocks.  Use a hash table to keep track of visited
20863         nodes. 
20864
20865         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
20866         we actually did transform the other operand, otherwise fall back
20867         to the common codepath that casts to long.
20868
20869         * cs-tokenizer.cs: Use the same code pattern as the int case.
20870         Maybe I should do the parsing myself, and avoid depending on the
20871         Parse routines to get this done.
20872
20873 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
20874
20875         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
20876         which fixes bug 51347.  This time test it.
20877
20878         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
20879         attributes for example can not tell the difference between these.
20880         The difference was only a syntax feature of the language. 
20881
20882         * attribute.cs: Apply attributes to delegates.
20883
20884         * delegate.cs: Call the apply attributes method.
20885
20886 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
20887
20888         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
20889         comparing 0 vs Byte.MinValue, not the value
20890
20891         (ImplicitConversionRequired): When reporting a conversion error,
20892         use error 31 to print out the constant error instead of the
20893         simpler 29.
20894
20895         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
20896         which fixes bug 51347.
20897
20898 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
20899
20900         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
20901         which fixes the -warnaserror command line option.
20902
20903 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
20904
20905         * cfold.cs (DoNumericPromotions): During constant folding of
20906         additions on UIntConstant, special case intconstants with
20907         IntConstants like we do on the expression binary operator. 
20908
20909 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
20910
20911         * convert.cs (ImplicitReferenceConversion): We were missing a case
20912         (System.Enum are not value types or class types, so we need to
20913         classify them separatedly).
20914
20915         * driver.cs: We do not support error 2007.
20916
20917 2003-11-12 Jackson Harper <jackson@ximian.com>
20918
20919         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
20920         system directory. Also use the full file name so users can
20921         libraries names mscorlib-o-tron.dll in a non system dir.
20922
20923 2003-11-10  Martin Baulig  <martin@ximian.com>
20924
20925         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
20926         (TypeManager.InitCoreTypes): Initialize them here, but instead of
20927         calling `ResolveType()' on them, directly assign their `Type'.
20928
20929 2003-11-08  Martin Baulig  <martin@ximian.com>
20930
20931         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
20932         return value and the `out parent' parameter.
20933         (TypeContainer.DefineType): Moved the CS0644 check into
20934         GetClassBases().  Don't pass the interface types to the
20935         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
20936         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
20937
20938         * ecore.cs (TypeExpr.IsAttribute): New property.
20939         (TypeExpr.GetInterfaces): New method.
20940
20941         * interface.cs (Interface.GetInterfaceTypeByName): Return a
20942         TypeExpr instead of a Type.
20943         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
20944         (Interface.DefineType): Don't pass the interface types to the
20945         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
20946         them later and then call `TypeBulider.AddInterfaceImplementation()'.
20947
20948         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
20949         instead of a `Type[]'.
20950         (TypeManager.RegisterBuilder): Likewise.
20951         (TypeManager.AddUserInterface): Likewise.
20952         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
20953         `Type[]' and also return a `TypeExpr[]'.
20954         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
20955
20956 2003-11-08  Martin Baulig  <martin@ximian.com>
20957
20958         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
20959         Expression.     
20960
20961 2003-11-08  Martin Baulig  <martin@ximian.com>
20962
20963         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
20964         TypeManager.ResolveExpressionTypes().
20965
20966         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
20967         instead of an Expression.
20968         (TypeExpr): This is now an abstract base class for `TypeExpression'.
20969         (TypeExpression): New public class; formerly known as `TypeExpr'.
20970
20971         * expression.cs (ComposedCast): Derive from TypeExpr.
20972
20973         * typemanager.cs (TypeManager.system_*_expr): These are now
20974         TypExpr's instead of Expression's.
20975         (TypeManager.ResolveExpressionTypes): New public static function;
20976         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
20977         of them.        
20978
20979 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
20980
20981         * expression.cs (New.DoResolve): Do not dereference value that
20982         might be a null return.
20983
20984         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
20985         sure that the constant value has the right type.  Fixes an
20986         unreported bug, similar to 50425.
20987
20988         * const.cs (Const.LookupConstantValue): Call
20989         ImplicitStandardConversionExists before doing a conversion to
20990         avoid havng the TypeManager.ChangeType do conversions.
20991
20992         Reduced the number of casts used
20993
20994         (Const.ChangeType): New routine to enable reuse of the constant
20995         type changing code from statement.
20996
20997         * typemanager.cs (ChangeType): Move common initialization to
20998         static global variables.
20999
21000         Fixes #50425.
21001
21002         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
21003         every value type to go through, even if it was void.  Fix that. 
21004
21005         * cs-tokenizer.cs: Use is_identifier_start_character on the start
21006         character of the define, and the is_identifier_part_character for
21007         the rest of the string.
21008
21009 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
21010
21011         * expression.cs (UnaryMutator.EmitCode): When I updated
21012         LocalVariableReference.DoResolve, I overdid it, and dropped an
21013         optimization done on local variable references.
21014
21015 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
21016
21017         * ecore.cs: Convert the return from Ldlen into an int.
21018
21019 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
21020
21021         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
21022         the accessibility, this is a special case for toplevel non-public
21023         classes (internal for instance).
21024
21025 2003-10-20  Nick Drochak <ndrochak@gol.com>
21026
21027         * ecore.cs: Fix typo and build.  Needed another right paren.
21028
21029 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
21030
21031         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
21032         `internal' case regular and protected, but not allowing protected
21033         to be evaluated later.  Bug 49840
21034
21035 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
21036
21037         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
21038         to kb.Nlast, and not the kb.nFirst to isolate the switch
21039         statement.
21040
21041         Extract the underlying type, so enumerations of long/ulong are
21042         treated like long/ulong.
21043
21044 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
21045
21046         * expression.cs (New): Overload the meaning of RequestedType to
21047         track the possible creation of the NewDelegate type, since
21048         DoResolve is invoked more than once for new constructors on field
21049         initialization.
21050
21051         See bugs: #48800 and #37014
21052
21053         * cs-parser.jay (declare_local_constants): Take an arraylist
21054         instead of a single constant.
21055
21056         (local_constant_declaration): It should take a
21057         constant_declarators, not a constant_declarator.  Fixes 49487
21058
21059         * convert.cs: Fix error report.
21060
21061 2003-10-13 Jackson Harper <jackson@ximian.com>
21062
21063         * typemanager.cs (TypeToCoreType): Add float and double this fixes
21064         bug #49611
21065
21066 2003-10-09  Martin Baulig  <martin@ximian.com>
21067
21068         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
21069         to the .ctor.
21070         (MethodCore.DoDefineParameters): Removed the TypeContainer
21071         argument; use the DeclSpace which was passed to the .ctor instead.
21072         (MethodCore.CheckParameter): Take a DeclSpace instead of a
21073         TypeContainer; we only need a DeclSpace here.
21074
21075 2003-10-09  Martin Baulig  <martin@ximian.com>
21076
21077         * class.cs (MethodData): Added additional `DeclSpace ds' argument
21078         to the .ctor.
21079         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
21080         EmitContext's .ctor.    
21081
21082 2003-10-09  Martin Baulig  <martin@ximian.com>
21083
21084         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
21085         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
21086         AsAccessible(), moved them as well.
21087
21088         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
21089
21090 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
21091
21092         * cs-parser.jay : Renamed yyName to yyNames related to jay.
21093
21094 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
21095
21096         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
21097         generation for >=, as spotted by Paolo, bug 48679.  
21098         Patch from David Waite.
21099
21100         * cs-tokenizer.cs: Add handling for #pragma.
21101
21102         * cs-parser.jay: Allow for both yield and yield return in the
21103         syntax.  The anti-cobolization of C# fight will go on!
21104
21105         * class.cs (TypeBuilder.DefineType): Catch error condition here
21106         (Parent.DefineType erroring out and returning null).
21107
21108         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
21109         coping with enumerations variables, we were mistakenly processing
21110         them as a regular value type instead of built-in types.  Fixes the
21111         bug #48063
21112
21113         * typemanager.cs (IsBuiltinOrEnum): New method.
21114
21115 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
21116
21117         * cs-parser.jay: Upgrade: yield now needs the return clause.
21118
21119 2003-09-19  Martin Baulig  <martin@ximian.com>
21120
21121         * decl.cs (MemberCache.SetupCacheForInterface): Take a
21122         `MemberCache parent' argument.  Normally, an interface doesn't
21123         have a parent type except System.Object, but we use this in gmcs
21124         for generic type parameters.
21125
21126 2003-09-18  Martin Baulig  <martin@ximian.com>
21127
21128         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
21129         on `type.IsInterface'; don't check whether the type has a parent
21130         to determine whether it's an interface.
21131
21132 2003-09-15  Martin Baulig  <martin@ximian.com>
21133
21134         * class.cs (TypeContainer.DefineType): Added an error flag to
21135         avoid reporting duplicate CS0146's ("class definition is
21136         circular.").
21137
21138         * driver.cs (Driver.MainDriver): Abort if
21139         RootContext.ResolveTree() reported any errors.
21140
21141 2003-09-07  Martin Baulig  <martin@ximian.com>
21142
21143         * report.cs (Error, Warning): Added overloaded versions which take
21144         a `params object[] args' and call String.Format().
21145
21146 2003-09-07  Martin Baulig  <martin@ximian.com>
21147
21148         * decl.cs (DeclSpace..ctor): Don't call
21149         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
21150         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
21151         (DeclSpace.RecordDecl): New method.
21152
21153         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
21154
21155 2003-09-02  Ravi Pratap  <ravi@ximian.com>
21156
21157         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
21158         value attributes to be applied to ParameterBuilders.
21159
21160         * class.cs (MethodCore.LabelParameters): Make static and more
21161         generic so that it can be used from other places - like interface
21162         methods, for instance.
21163
21164         * interface.cs (Interface.Emit): Call LabelParameters before
21165         emitting attributes on the InterfaceMethod.
21166
21167 2003-08-26  Martin Baulig  <martin@ximian.com>
21168
21169         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
21170         resolving aliases; fixes #47927.
21171
21172 2003-08-26  Martin Baulig  <martin@ximian.com>
21173
21174         * statement.cs (Using.DoResolve): This is internally emitting a
21175         try/finally clause, so we need to set ec.NeedExplicitReturn if we
21176         do not always return.  Fixes #47681.
21177
21178 2003-08-26  Martin Baulig  <martin@ximian.com>
21179
21180         * decl.cs (MemberCore): Moved WarningNotHiding(),
21181         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
21182         into MemberBase.
21183         (AdditionResult): Make this nested in DeclSpace.
21184         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
21185         argument; call NamespaceEntry.Define() unless we're nested in a
21186         class or struct.
21187
21188         * namespace.cs (Namespace.DefineName): New public function.  This
21189         is called from DeclSpace's .ctor to add 
21190         (Namespace.Lookup): Include DeclSpaces in the lookup.
21191
21192         * class.cs (Operator): Derive from MemberBase, not MemberCore.
21193
21194         * const.cs (Const): Derive from MemberBase, not MemberCore.     
21195
21196 2003-08-25  Martin Baulig  <martin@ximian.com>
21197
21198         * convert.cs (Convert.ExplicitReferenceConversion): When
21199         converting from an interface type to a class, unbox if the target
21200         type is a struct type.  Fixes #47822.
21201
21202 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21203
21204         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
21205         #47854.
21206
21207 2003-08-22  Martin Baulig  <martin@ximian.com>
21208
21209         * class.cs (TypeManager.DefineType): When defining a nested type,
21210         call DefineType() on our parent; fixes #47801.
21211
21212 2003-08-22  Martin Baulig  <martin@ximian.com>
21213
21214         * class.cs (MethodData.Define): While checking if a method is an
21215         interface implementation, improve the test a bit more to fix #47654.
21216
21217 2003-08-22  Martin Baulig  <martin@ximian.com>
21218
21219         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
21220         correctly; fixes #47722.
21221
21222 2003-08-22  Martin Baulig  <martin@ximian.com>
21223
21224         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
21225         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
21226
21227         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
21228
21229 2003-08-22  Martin Baulig  <martin@ximian.com>
21230
21231         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
21232         can only be assigned in static constructors.  Fixes #47161.
21233
21234 2003-08-22  Martin Baulig  <martin@ximian.com>
21235
21236         Rewrote and improved the flow analysis code.
21237
21238         * flowbranching.cs (FlowBranching): Make this class abstract.
21239         (FlowBranching.CreateBranching): New static function to create a
21240         new flow branching.
21241         (FlowBranchingBlock, FlowBranchingException): New classes.
21242         (FlowBranching.UsageVector.Type): New public readonly field.
21243         (FlowBranching.UsageVector.Breaks): Removed the setter.
21244         (FlowBranching.UsageVector.Returns): Removed the setter.
21245         (FlowBranching.UsageVector): Added Break(), Return(),
21246         NeverReachable() and Throw() methods to modify the reachability.
21247         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
21248         done by FlowBranching.Merge().
21249         (FlowBranching.UsageVector.MergeChild): New method; merges the
21250         merge result into the current vector.
21251         (FlowBranching.Merge): New abstract method to merge a branching.
21252
21253 2003-08-12  Martin Baulig  <martin@ximian.com>
21254
21255         * expression.cs (Indirection.CacheTemporaries): Create the
21256         LocalTemporary with the pointer type, not its element type.
21257
21258 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
21259
21260         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
21261         token was a keyword or not.
21262
21263         Add `error' options where an IDENTIFIER was expected;  Provide
21264         CheckToken and CheckIdentifierToken convenience error reporting
21265         functions. 
21266
21267         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
21268
21269         * decl.cs: Rename `NamespaceEntry Namespace' public field into
21270         NameSpaceEntry NameSpaceEntry.
21271
21272         (LookupInterfaceOrClass): Avoid creating a full qualified name
21273         from namespace and name: avoid doing lookups when we know the
21274         namespace is non-existant.   Use new Tree.LookupByNamespace which
21275         looks up DeclSpaces based on their namespace, name pair.
21276
21277         * driver.cs: Provide a new `parser verbose' to display the
21278         exception thrown during parsing.  This is turned off by default
21279         now, so the output of a failure from mcs is more graceful.
21280
21281         * namespace.cs: Track all the namespaces defined in a hashtable
21282         for quick lookup.
21283
21284         (IsNamespace): New method
21285
21286 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
21287
21288         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
21289         we know that we need to concatenate (full typename can never be
21290         null). 
21291
21292         * class.cs: ditto.
21293
21294         * statement.cs: Use a bitfield;  Do not initialize to null things
21295         which are done by the constructor by default.
21296
21297         * cs-parser.jay: bug fix, parameter was 4, not 3.
21298
21299         * expression.cs: Just use the property;
21300
21301         * statement.cs: No need for GetVariableInfo method.
21302
21303 2003-08-08  Martin Baulig  <martin@ximian.com>
21304
21305         * flowanalysis.cs (FlowReturns): This is now nested in the
21306         `FlowBranching' class.
21307         (MyBitVector): Moved this here from statement.cs.
21308         (FlowBranching.SiblingType): New enum type.
21309         (FlowBranching.CreateSibling): Added `SiblingType' argument.
21310
21311 2003-08-07  Martin Baulig  <martin@ximian.com>
21312
21313         * flowanalysis.cs (FlowBranchingType): This is now nested in the
21314         `FlowBranching' class and called `BranchingType'.
21315
21316 2003-08-07  Martin Baulig  <martin@ximian.com>
21317
21318         * flowanalysis.cs: Moved all the control flow analysis code into
21319         its own file.
21320
21321 2003-08-07  Martin Baulig  <martin@ximian.com>
21322
21323         * assign.cs (Assign.DoResolve): `target' must either be an
21324         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
21325         #37319.
21326
21327 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
21328
21329         * expression.cs (BinaryMethod): This kind of expression is created by the
21330         Binary class if it determines that the operator has to be handled
21331         by a method.
21332
21333         (BinaryDelegate): This kind of expression is created if we are
21334         dealing with a + or - operator on delegates.
21335
21336         (Binary): remove method, argumetns, and DelegateOperator: when
21337         dealing with methods, 
21338
21339         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
21340
21341         * statement.cs (Block): use bitfields for the three extra booleans
21342         we had in use.   Remove unused topblock parameter.
21343
21344         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
21345
21346         * assign.cs: Drop extra unneeded tests.
21347
21348 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
21349
21350         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
21351
21352         * statement.cs (Foreach): Use VariableStorage instead of
21353         LocalBuilders.   
21354
21355         * codegen.cs (VariableStorage): New class used by clients that
21356         require a variable stored: locals or fields for variables that
21357         need to live across yield.
21358
21359         Maybe provide a convenience api for EmitThis+EmitLoad?
21360
21361         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
21362         these bad boys.
21363
21364 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
21365
21366         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
21367         RemapParameterLValue): New methods that are used to turn a
21368         precomputed FieldInfo into an expression like this:
21369
21370                 instance.FieldInfo
21371
21372         The idea is to use this instead of making LocalVariableReference
21373         have more than one meaning.
21374
21375         * cs-parser.jay: Add error production to BASE.
21376
21377         * ecore.cs: Deal with TypeManager.GetField returning null, which
21378         is now a valid return value.
21379
21380         (FieldExprNoAddress): New expression for Fields whose address can
21381         not be taken.
21382
21383         * expression.cs (LocalVariableReference): During the resolve
21384         phases, create new expressions if we are in a remapping context.
21385         Remove code that dealt with remapping here.
21386
21387         (ParameterReference): same.
21388
21389         (ProxyInstance): New expression, like the `This' expression, but
21390         it is born fully resolved.  We know what we are doing, so remove
21391         the errors that are targeted to user-provided uses of `this'.
21392
21393         * statement.cs (Foreach): our variable is now stored as an
21394         Expression;  During resolution, follow the protocol, dont just
21395         assume it will return this.
21396
21397 2003-08-06  Martin Baulig  <martin@ximian.com>
21398
21399         * support.cs (SeekableStreamReader.cs): New public class.
21400
21401         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
21402         SeekableStreamReader instead of the normal StreamReader.
21403
21404 2003-08-04  Martin Baulig  <martin@ximian.com>
21405
21406         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
21407         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
21408         deambiguate casts and delegate invocations.
21409         (parenthesized_expression): Use the new tokens to ensure this is
21410         not a cast of method invocation.
21411
21412         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
21413         when reading a `)' and Deambiguate_CloseParens () was previously
21414         called.
21415
21416         * expression.cs (ParenthesizedExpression): New class.  This is
21417         just used for the CS0075 test.
21418         (Binary.DoResolve): Check for CS0075.   
21419
21420 2003-07-29  Ravi Pratap  <ravi@ximian.com>
21421
21422         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
21423         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
21424         reference comparison.
21425
21426         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
21427         examine the ReturnType for equality - this is necessary in the
21428         cases of implicit and explicit operators whose signature also
21429         includes the return type.
21430
21431 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
21432
21433         * namespace.cs: Cache the result of the namespace computation,
21434         instead of computing it every time.
21435
21436 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
21437
21438         * decl.cs: Use a global arraylist that we reuse over invocations
21439         to avoid excesive memory consumption.  Reduces memory usage on an
21440         mcs compile by one meg (45 average).
21441
21442         * typemanager.cs (LookupTypeReflection): In .NET pointers are
21443         private, work around that.
21444
21445 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
21446
21447         * literal.cs (IntLiteral): Define Zero and One static literals. 
21448
21449         * cs-parser.jay (integer_literal): use static literals to reduce
21450         memory usage for the most used literals (0, 1 and -1).  211kb
21451         reduced in memory usage.
21452
21453         Replace all calls to `new ArrayList' with `new
21454         ArrayList(4)' which is a good average number for most allocations,
21455         and also requires only 16 bytes of memory for its buffer by
21456         default. 
21457
21458         This reduced MCS memory usage in seven megabytes for the RSS after
21459         bootstrapping.
21460
21461 2003-07-28  Ravi Pratap  <ravi@ximian.com>
21462
21463         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
21464         handle params methods the correct way by forming only one
21465         applicable set with params and normal methods in them. Earlier we
21466         were looking at params methods only if we found no normal methods
21467         which was not the correct thing to do.
21468
21469         (Invocation.BetterFunction): Take separate arguments indicating
21470         when candidate and the best method are params methods in their
21471         expanded form.
21472
21473         This fixes bugs #43367 and #46199.
21474
21475         * attribute.cs: Documentation updates.
21476
21477         (CheckAttribute): Rename to CheckAttributeTarget.
21478         (GetValidPlaces): Rename to GetValidTargets.
21479
21480         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
21481         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
21482
21483         Fixes bug #44468.
21484
21485 2003-07-28  Martin Baulig  <martin@ximian.com>
21486
21487         * class.cs (TypeContainer.DefineMembers): Use the base type's full
21488         name when looking up the base class of a nested class.  Fixes #46977.
21489
21490 2003-07-26  Martin Baulig  <martin@ximian.com>
21491
21492         * expression.cs (Indexers.Indexer): New nested struct; contains
21493         getter, setter and the indexer's type.
21494         (Indexers.Properties): This is now an ArrayList of
21495         Indexers.Indexer's.
21496         (IndexerAccess.DoResolveLValue): Correctly set the type if the
21497         indexer doesn't have any getters.
21498
21499         * assign.cs (Assign.DoResolve): Also do the implicit conversions
21500         for embedded property and indexer assignments.
21501
21502 2003-07-26  Martin Baulig  <martin@ximian.com>
21503
21504         * cs-tokenizer.cs (Tokenizer.xtoken): Report a CS1040 if a
21505         preprocessor directive is not the first non-whitespace character
21506         on a line.
21507
21508 2003-07-26  Martin Baulig  <martin@ximian.com>
21509
21510         * namespace.cs (NamespaceEntry.Lookup): New method; rewrote the
21511         namespace parsing, follow the spec more closely.
21512
21513         * rootcontext.cs (RootContext.NamespaceLookup): Use the new
21514         NamespaceEntry.Lookup().
21515
21516 2003-07-25  Martin Baulig  <martin@ximian.com>
21517
21518         * MethodCore.cs (OverridesSomething): New public field; it's set
21519         from TypeContainer.DefineMembers if this method overrides
21520         something (which doesn't need to be a method).  Fix #39462.
21521
21522 2003-07-25  Ravi Pratap  <ravi@ximian.com>
21523
21524         * typemanager.cs (GetMembers): Ensure that the list of members is
21525         reversed. This keeps things in sync.
21526
21527         * attribute.cs (Attribute.CheckAttribute): Break as soon as we
21528         find an AttributeUsage attribute.
21529
21530         * expression.cs (Invocation.OverloadResolve): Perform the check
21531         which disallows Invoke to be directly called on a Delegate.
21532
21533         (Error_InvokeOnDelegate): Report error cs1533.
21534
21535 2003-07-25  Martin Baulig  <martin@ximian.com>
21536
21537         * expression.cs (Indexers.GetIndexersForType): Only look in the
21538         interface hierarchy if the requested type is already an
21539         interface.  Fixes #46788 while keeping #46502 fixed.
21540
21541 2003-07-25  Martin Baulig  <martin@ximian.com>
21542
21543         * class.cs (TypeContainer.DefineMembers): Check whether all
21544         readonly fields have been assigned and report warning CS0649 if
21545         not.
21546
21547         * statement.cs (LocalInfo.IsFixed): Always return true if this is
21548         a valuetype.
21549
21550 2003-07-24  Ravi Pratap  <ravi@ximian.com>
21551
21552         * decl.cs (MemberCache.AddMethods): Reverse the order of the array
21553         returned from GetMethods to make things consistent with the
21554         assumptions MCS makes about ordering of methods.
21555
21556         This should comprehensively fix bug #45127 and it does :-)
21557
21558         * ecore.cs (MethodGroupExpr.DeclaringType): Correct bug - the
21559         ordering is actually reverse.
21560
21561         * Clean up some debug messages I left lying around.
21562
21563         * interface.cs (Populate*): Get rid of code which emits attributes
21564         since the stage in which we emit attributes is the 'Emit' stage,
21565         not the define stage.
21566
21567         (Emit): Move attribute emission for interface members here.
21568
21569 2003-07-22  Ravi Pratap  <ravi@ximian.com>
21570
21571         * expression.cs (Invocation.OverloadResolve): Follow the spec more
21572         closely: we eliminate methods in base types when we have an
21573         applicable method in a top-level type.
21574
21575         Please see section 14.5.5.1 for an exact description of what goes
21576         on. 
21577
21578         This fixes bug #45127 and a host of other related to corlib compilation.
21579
21580         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
21581         array is the method corresponding to the top-level type (this is
21582         because of the changes made to icall.c) so we change this
21583         accordingly.
21584
21585         (MethodGroupExpr.Name): This too.
21586
21587         * typemanager.cs (GetElementType): New method which does the right
21588         thing when compiling corlib. 
21589
21590         * everywhere: Make use of the above in the relevant places.
21591
21592 2003-07-22  Martin Baulig  <martin@ximian.com>
21593
21594         * cs-parser.jay (invocation_expression): Moved
21595         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
21596         `cast_expression', but create a InvocationOrCast which later
21597         resolves to either an Invocation or a Cast.
21598
21599         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
21600         method; call this before EmitStatement() to make sure that this
21601         expression can be used as a statement.
21602
21603         * expression.cs (InvocationOrCast): New class; resolves to either
21604         an Invocation or a Cast.
21605
21606         * statement.cs (StatementExpression): Call ResolveStatement() on
21607         the ExpressionStatement before emitting it.
21608
21609 2003-07-21  Martin Baulig  <martin@ximian.com>
21610
21611         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
21612         `ref' and `out' attributes match; fixes #46220.
21613         (MemberAccess.ResolveMemberAccess): You can't reference a type
21614         through an expression; fixes #33180.
21615         (Indexers.GetIndexersForType): Don't return the indexers from
21616         interfaces the class implements; fixes #46502.
21617
21618 2003-07-21  Martin Baulig  <martin@ximian.com>
21619
21620         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
21621         CS0661 checks; fixes bug #30442.
21622
21623 2003-07-21  Martin Baulig  <martin@ximian.com>
21624
21625         * decl.cs (AdditionResult): Added `Error'.
21626
21627         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
21628
21629         * typemanager.cs (TypeManager.ChangeType): Catch exceptions;
21630         makes cs0031.cs actually work.
21631
21632 2003-07-20  Martin Baulig  <martin@ximian.com>
21633
21634         * namespace.cs: Fixed that bug which caused a crash when compiling
21635         the debugger's GUI.
21636
21637 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
21638
21639         * typemanager.cs (LookupTypeReflection): Never expose types which
21640         are NotPublic, NestedPrivate, NestedAssembly, or
21641         NestedFamANDAssem.  We used to return these, and later do a check
21642         that would report a meaningful error, but the problem is that we
21643         would not get the real match, if there was a name override.
21644
21645 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
21646
21647         * namespace.cs (Namespace, Name): Do not compute the namespace
21648         name dynamically, compute it in the constructor.  This reduced
21649         memory usage by 1697 KB.
21650
21651         * driver.cs: Use --pause to pause at the end.
21652
21653 2003-07-17  Peter Williams  <peter@newton.cx>
21654
21655         * Makefile: Change the name of the test target so that it doesn't
21656         conflict with the recursive test target.
21657
21658 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
21659
21660         * expression.cs (LocalVariableReference.Emit, EmitAssign,
21661         AddressOf): Do not use EmitThis, that was wrong, use the actual
21662         this pointer.
21663
21664 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
21665
21666         * class.cs (MethodData.Define): While checking if a method is an
21667         interface implementation, improve the test: If we are not public
21668         (use new test here: use the computed MethodAttributes directly,
21669         instead of the parsed modifier flags) check if the `implementing'
21670         method comes from an interface or not.
21671
21672         * pending.cs (VerifyPendingMethods): Slightly better error
21673         message.
21674
21675         * makefile: add test target that does the mcs bootstrap.
21676
21677 2003-07-16  Ravi Pratap  <ravi@ximian.com>
21678
21679         * interface.cs (Define): Do nothing here since there are no
21680         members to populate etc. Move the attribute emission out of here
21681         since this was just totally the wrong place to put it. Attribute
21682         application happens during the 'Emit' phase, not in the 'Define'
21683         phase.
21684
21685         (Emit): Add this method and move the attribute emission here
21686
21687         * rootcontext.cs (EmitCode): Call the Emit method on interface
21688         types too.
21689
21690 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
21691
21692         * expression.cs (OverloadResolve): Report error only if Location
21693         is not 'Null' which means that there was a probe going on.
21694
21695 2003-07-14  Martin Baulig  <martin@ximian.com>
21696
21697         * expression.cs (ConditionalLogicalOperator): New public class to
21698         implement user defined conditional logical operators.
21699         This is section 14.11.2 in the spec and bug #40505.
21700
21701 2003-07-14  Martin Baulig  <martin@ximian.com>
21702
21703         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
21704
21705 2003-07-14  Martin Baulig  <martin@ximian.com>
21706
21707         * codegen.cs (EmitContext.InFixedInitializer): New public field.
21708
21709         * ecore.cs (IVariable.VerifyFixed): New interface method.
21710
21711         * expression.cs (Unary.ResolveOperator): When resolving the `&'
21712         operator, check whether the variable is actually fixed.  Fixes bug
21713         #36055.  Set a variable definitely assigned when taking its
21714         address as required by the spec.
21715
21716         * statement.cs (LocalInfo.IsFixed): New field.
21717         (LocalInfo.MakePinned): Set `IsFixed' to true.
21718
21719 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
21720
21721         * attribute.cs (Attribute.Resolve): While doing a Member lookup
21722         for .ctors, ensure that we only ask for members declared in the
21723         attribute type (BindingFlags.DeclaredOnly).
21724
21725         Fixes bug #43632.
21726
21727         * expression.cs (Error_WrongNumArguments): Report error 1501
21728         correctly the way CSC does.
21729
21730 2003-07-13  Martin Baulig  <martin@ximian.com>
21731
21732         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
21733         lookup on the fully qualified name, to make things like "X.X" work
21734         where "X.X" is a fully qualified type name, but we also have a
21735         namespace "X" in the using list.  Fixes #41975.
21736
21737 2003-07-13  Martin Baulig  <martin@ximian.com>
21738
21739         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
21740         function. If we're a CompoundAssign, we need to create an embedded
21741         CompoundAssign, not an embedded Assign.
21742         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
21743         Fixes #45854.
21744
21745 2003-07-13  Martin Baulig  <martin@ximian.com>
21746
21747         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
21748         work to fix bug #46088.
21749
21750 2003-07-13  Ravi Pratap <ravi@ximian.com>
21751
21752         * class.cs (Operator.Emit): Do not emit attributes here - it is
21753         taken care of by the Method class that we delegate too. This takes
21754         care of bug #45876.
21755
21756 2003-07-10  Martin Baulig  <martin@ximian.com>
21757
21758         * expression.cs (TypeOfVoid): New class.
21759         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
21760
21761 2003-07-10  Martin Baulig  <martin@ximian.com>
21762
21763         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
21764         bug #35957.
21765
21766 2003-07-10  Martin Baulig  <martin@ximian.com>
21767
21768         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
21769         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
21770
21771         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
21772
21773         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
21774
21775 2003-07-10  Martin Baulig  <martin@ximian.com>
21776
21777         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
21778         of decimal.  Fixes #42850.
21779
21780         NOTE: I also fixed the created byte blob, but this doesn't work on
21781         the MS runtime and csc never produces any byte blobs for decimal
21782         arrays.
21783
21784 2003-07-10  Martin Baulig  <martin@ximian.com>
21785
21786         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
21787         structs; fixes #32068.
21788         (Block.AddChildVariableNames): Fixed #44302.
21789
21790 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21791
21792         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
21793
21794 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21795
21796         * attribute.cs: And this test is onger needed.
21797
21798 2003-07-08  Martin Baulig  <martin@ximian.com>
21799
21800         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
21801         inaccessible types.  Fixes #36313.
21802
21803         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
21804
21805         * namespace.cs (NamespaceEntry): Create implicit entries for all
21806         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
21807         implicit entries for N1.N2 and N1.
21808
21809 2003-07-08  Martin Baulig  <martin@ximian.com>
21810
21811         Rewrote the handling of namespaces to fix a lot of the issues
21812         wrt. `using' aliases etc.
21813
21814         * namespace.cs (Namespace): Splitted this class into a
21815         per-assembly `Namespace' and a per-file `NamespaceEntry'.
21816
21817         * typemanager.cs (TypeManager.IsNamespace): Removed.
21818         (TypeManager.ComputeNamespaces): Only compute namespaces from
21819         loaded assemblies here, not the namespaces from the assembly we're
21820         currently compiling.
21821
21822 2003-07-08  Martin Baulig  <martin@ximian.com>
21823
21824         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
21825
21826 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21827
21828         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
21829         already fixed it.  
21830
21831         I thought about the memory savings here, but LookupTypeReflection
21832         is used under already very constrained scenarios.  Compiling
21833         corlib or mcs only exposes one hit, so it would not really reduce
21834         any memory consumption.
21835
21836 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21837
21838         * typemanager.cs: fixes bug #45889 by only adding public types from
21839         other assemblies to the list of known types.
21840
21841 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21842
21843         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
21844         on the type we resolved.
21845
21846 2003-07-05  Martin Baulig  <martin@ximian.com>
21847
21848         * pending.cs (PendingImplementation.ParentImplements): Don't
21849         create the proxy if the parent is abstract.
21850
21851         * class.cs (TypeContainer.DefineIndexers): Process explicit
21852         interface implementations first.  Fixes #37714.
21853
21854 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
21855
21856         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
21857         defined recursively;  but since we modify the input parameters
21858         (left is set to `this' temporarily), we reset this value if the
21859         left_is_explicit is false, which gives the original semantics to
21860         the code.  
21861
21862         * literal.cs (NullPointer): new class used to represent a null
21863         literal in a pointer context.
21864
21865         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
21866         type is a pointer, use a NullPointer object instead of a
21867         NullLiteral.   Closes 43687
21868
21869         (ExplicitConversion): Convert pointer values using
21870         the conv opcode to the proper type.
21871
21872         * ecore.cs (New): change ValueTypeVariable property into a method,
21873         that returns whether the valuetype is suitable for being used.
21874
21875         * expression.cs (Binary.DoNumericPromotions): Only return if we
21876         the int constant was a valid uint, and we can return both left and
21877         right as uints.  If not, we continue processing, to trigger the
21878         type conversion.  This fixes 39018.
21879
21880         * statement.cs (Block.EmitMeta): During constant resolution, set
21881         the CurrentBlock property on the emitcontext, so that we resolve
21882         constants propertly.
21883
21884 2003-07-02  Martin Baulig  <martin@ximian.com>
21885
21886         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
21887         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
21888
21889         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
21890         than emitting it here.
21891
21892         * statement.cs: Fixed some more flow analysis bugs.
21893
21894 2003-07-02  Martin Baulig  <martin@ximian.com>
21895
21896         * class.cs (MethodData.Define): When implementing interface
21897         methods, set Final unless we're Virtual.
21898
21899         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
21900         check work for interface methods.
21901
21902 2003-07-01  Martin Baulig  <martin@ximian.com>
21903
21904         * ecore.cs (EmitContext.This): Replaced this property with a
21905         GetThis() method which takes a Location argument.  This ensures
21906         that we get the correct error location for a CS0188.
21907
21908 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
21909
21910         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
21911         ImplicitStandardConversion.
21912
21913         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
21914
21915 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
21916
21917         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
21918         optimization.
21919
21920 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
21921
21922         * class.cs (Constructor.Define): Turn off initlocals for unsafe
21923         constructors.
21924
21925         (MethodData.Define): Turn off initlocals for unsafe methods.
21926
21927 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
21928
21929         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
21930         complete;  Fixes #37521.
21931
21932         * delegate.cs: Use Modifiers.TypeAttr to compute the
21933         TypeAttributes, instead of rolling our own.  This makes the flags
21934         correct for the delegates.
21935
21936 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
21937
21938         * class.cs (Constructor.Define): Set the private flag for static
21939         constructors as well.
21940
21941         * cs-parser.jay (statement_expression): Set the return value to
21942         null, to avoid a crash when we catch an error.
21943
21944 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
21945
21946         * cs-parser.jay: Applied patch from Jackson that adds support for
21947         extern and unsafe modifiers to destructor declarations.
21948
21949         * expression.cs: Report error 21 if the user is trying to index a
21950         System.Array.
21951
21952         * driver.cs: Add an error message, suggested by the bug report.
21953
21954         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
21955         if we do not have a ": this ()" constructor initializer.  Fixes 45149
21956
21957 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
21958
21959         * namespace.cs: Add some information to reduce FAQs.
21960
21961 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
21962
21963         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
21964         underlying enumeration types.  Fixes #43915.
21965
21966         * expression.cs: Treat ushort/short as legal values to be used in
21967         bitwise operations.
21968
21969 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
21970
21971         * delegate.cs: transfer custom attributes for paramenters from
21972         the delegate declaration to Invoke and BeginInvoke.
21973
21974 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
21975
21976         * attribute.cs: handle custom marshalers and emit marshal info
21977         for fields, too.
21978
21979 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
21980
21981         * makefile.gnu: Added anonymous.cs to the compiler sources.
21982
21983 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
21984
21985         * iterators.cs: Change the name of the proxy class to include two
21986         underscores.
21987
21988         * cs-parser.jay: Update grammar to include anonymous methods.
21989
21990         * anonymous.cs: new file.
21991
21992 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
21993
21994         * class.cs (Field.Define): Add missing test for pointers and
21995         safety. 
21996
21997 2003-05-27  Ravi Pratap  <ravi@ximian.com>
21998
21999         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
22000         we use the stobj opcode.
22001
22002         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
22003         since it wasn't the correct fix. 
22004
22005         It still is puzzling that we are required to use stobj for IntPtr
22006         which seems to be a ValueType.
22007
22008 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
22009
22010         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
22011         during regular simple name resolution.   Now, the trick is that
22012         instead of returning for processing the simplename, we do a
22013         TypeManager.LookupType (ie, a rooted lookup as opposed to a
22014         contextual lookup type).   If a match is found, return that, if
22015         not, return for further composition.
22016
22017         This fixes long-standing 30485.
22018
22019         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
22020         using the address to initialize an object, do an Stobj instead of
22021         using the regular Stelem.
22022
22023         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
22024         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
22025         Because if we are a BaseIndexerAccess that value will be true.
22026         Fixes 43643.
22027
22028         * statement.cs (GotoCase.Resolve): Return after reporting an
22029         error, do not attempt to continue. 
22030
22031         * expression.cs (PointerArithmetic.Emit): If our operand is a
22032         long, convert our constants to match the operand before
22033         multiplying.  Convert to I type before adding.   Fixes 43670.
22034
22035 2003-05-14  Ravi Pratap  <ravi@ximian.com>
22036
22037         * enum.cs (ImplicitConversionExists) : Rename to
22038         ImplicitEnumConversionExists to remove ambiguity. 
22039
22040         * ecore.cs (NullCast): New type of cast expression class which
22041         basically is very similar to EmptyCast with the difference being
22042         it still is a constant since it is used only to cast a null to
22043         something else
22044         (eg. (string) null)
22045
22046         * convert.cs (ImplicitReferenceConversion): When casting a null
22047         literal, we return a NullCast.
22048
22049         * literal.cs (NullLiteralTyped): Remove - I don't see why this
22050         should be around anymore.
22051
22052         The renaming (reported was slightly wrong). Corrections:
22053
22054         ConvertImplicitStandard -> ImplicitConversionStandard
22055         ConvertExplicitStandard -> ExplicitConversionStandard
22056
22057         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
22058         before passing them in !
22059
22060         * convert.cs (ImplicitConversionStandard): When comparing for
22061         equal expr and target types, ensure that expr is not a
22062         NullLiteral.
22063
22064         In general, we must not be checking (expr_type ==
22065         target_type) in the top level conversion methods
22066         (ImplicitConversion, ExplicitConversion etc). This checking is
22067         done in the methods that they delegate to.
22068
22069 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
22070
22071         * convert.cs: Move Error_CannotConvertType,
22072         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
22073         ImplicitNumericConversion, ImplicitConversionExists,
22074         ImplicitUserConversionExists, StandardConversionExists,
22075         FindMostEncompassedType, FindMostSpecificSource,
22076         FindMostSpecificTarget, ImplicitUserConversion,
22077         ExplicitUserConversion, GetConversionOperators,
22078         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
22079         TryImplicitIntConversion, Error_CannotConvertImplicit,
22080         ConvertImplicitRequired, ConvertNumericExplicit,
22081         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
22082         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
22083         its own file.
22084
22085         Perform the following renames:
22086
22087         StandardConversionExists -> ImplicitStandardConversionExists
22088         ConvertImplicit -> ImplicitConversion
22089         ConvertImplicitStandard -> ImplicitStandardConversion
22090         TryImplicitIntConversion -> ImplicitIntConversion
22091         ConvertImplicitRequired -> ImplicitConversionRequired
22092         ConvertNumericExplicit -> ExplicitNumericConversion
22093         ConvertReferenceExplicit -> ExplicitReferenceConversion
22094         ConvertExplicit -> ExplicitConversion
22095         ConvertExplicitStandard -> ExplicitStandardConversion
22096
22097 2003-05-19  Martin Baulig  <martin@ximian.com>
22098
22099         * statement.cs (TypeInfo.StructInfo): Made this type protected.
22100         (TypeInfo): Added support for structs having structs as fields.
22101
22102         * ecore.cs (FieldExpr): Implement IVariable.
22103         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
22104         VariableInfo for the field.
22105
22106 2003-05-18  Martin Baulig  <martin@ximian.com>
22107
22108         * expression.cs (This.DoResolve): Report a CS0027 if we're
22109         emitting a field initializer.
22110
22111 2003-05-18  Martin Baulig  <martin@ximian.com>
22112
22113         * expression.cs (This.ResolveBase): New public function.
22114         (This.DoResolve): Check for CS0188.
22115
22116         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
22117         This.Resolve().
22118
22119         * ecore.cs (MethodGroupExpr.DoResolve): Set the
22120         `instance_expression' to null if we don't have any non-static
22121         methods.
22122
22123 2003-05-18  Martin Baulig  <martin@ximian.com>
22124
22125         Reworked the way how local variables and parameters are handled by
22126         the flow analysis code.
22127
22128         * statement.cs (TypeInfo, VariableMap): New public classes.
22129         (VariableInfo): New public class.  This is now responsible for
22130         checking whether a variable has been assigned.  It is used for
22131         parameters and local variables.
22132         (Block.EmitMeta): Take the InternalParameters as argument; compute
22133         the layout of the flow vectors here.
22134         (Block.LocalMap, Block.ParameterMap): New public properties.
22135         (FlowBranching): The .ctor doesn't get the InternalParameters
22136         anymore since Block.EmitMeta() now computes the layout of the flow
22137         vector.
22138         (MyStructInfo): This class is now known as `StructInfo' and nested
22139         in `TypeInfo'; we don't access this directly anymore.
22140
22141         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
22142         property and removed IsAssigned(), IsFieldAssigned(),
22143         SetAssigned() and SetFieldAssigned(); we now call them on the
22144         VariableInfo so we don't need to duplicate this code everywhere.
22145
22146         * expression.cs (ParameterReference): Added `Block block' argument
22147         to the .ctor.
22148         (LocalVariableReference, ParameterReference, This): The new
22149         VariableInfo class is now responsible for all the definite
22150         assignment stuff.
22151
22152         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
22153         IsParameterAssigned, SetParameterAssigned): Removed.
22154
22155 2003-05-18  Martin Baulig  <martin@ximian.com>
22156
22157         * typemanager.cs (InitCoreTypes): Try calling
22158         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
22159         the 3-args-version.  Corlib now also needs our `void_type'.
22160         (GetMethod): Added overloaded version which takes an optional
22161         `bool report_errors' to allow lookups of optional methods.
22162
22163 2003-05-12  Martin Baulig  <martin@ximian.com>
22164
22165         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
22166         only used for locals and not for parameters.
22167
22168 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
22169
22170         * support.cs (InternalParameters.ParameterType): Return the
22171         ExternalType of the parameter.
22172
22173         * parameter.cs (Parameter.ExternalType): drop the two arguments,
22174         they were unused.
22175
22176 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
22177
22178         * class.cs (MethodData.Define): Do not set the `newslot' on
22179         interface members, if they are also flagged as "override".
22180
22181         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
22182         better code for ++i and i++.  This only works for static fields
22183         and local variables.
22184
22185         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
22186         want to pull the DeclSpace out of the builder_to_declspace instead
22187         of the TypeBuilder (like in TypeContainer.FindMembers).
22188
22189         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
22190         instead of LookupTypeContainer.  Fixes the crash on .NET for
22191         looking up interface members.
22192
22193         * const.cs: Create our own emit context during the Definition
22194         stage, so that constants are evaluated in the proper context, when
22195         a recursive definition happens.
22196
22197 2003-05-11  Martin Baulig  <martin@ximian.com>
22198
22199         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
22200         new block for a switch section.
22201         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
22202         the adding/lookup in the switch block.  Fixes #39828.
22203
22204 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
22205
22206         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
22207         functionality: I needed to convert the data after I had performed
22208         the add/sub operation into the operands type size.
22209
22210         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
22211         pass the type for the box operation, otherwise the resulting
22212         object would have been of type object.
22213
22214         (BoxedCast): Add constructor to specify the type to box as.
22215
22216 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
22217
22218         * iterators.cs: I was reusing the `count' variable inadvertently,
22219         take steps to not allow this to happen.
22220
22221 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
22222
22223         * attribute.cs (Attribute.Resolve): Params attributes are encoded
22224         by creating an array at the point where the params starts and
22225         putting all those arguments there, then adjusting the size of the
22226         array.
22227
22228 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
22229
22230         * expression.cs (New.AddressOf): Implement interface
22231         IMemoryLocation.  This is used when the `new' operator is used in
22232         the context of an invocation to a method on a value type.
22233
22234         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
22235         example. 
22236
22237         * namespace.cs: Also check the using aliases here.
22238
22239         * driver.cs: Move the test for using validity after the types have
22240         been entered, so we do a single pass that also includes the using
22241         aliases. 
22242
22243         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
22244         in the regular case.   CreateSiblingForFinally is doing extra
22245         error checking.
22246
22247         * attribute.cs (GetAttributeArgumentExpression): Store the result
22248         on an out value, and use the return value to indicate failure
22249         instead of using null (which is a valid return for Constant.GetValue).
22250
22251         * statement.cs: Perform the analysis flow for the increment
22252         portion after the statement, because this will be the real flow of
22253         execution.  Fixes #42385
22254
22255         * codegen.cs (EmitContext.EmitArgument,
22256         EmitContext.EmitStoreArgument): New helper functions when the
22257         RemapToProxy flag is set.
22258
22259         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
22260         function.
22261
22262         Add support for remapping parameters. 
22263
22264         * iterators.cs: Propagate parameter values;  Store parameter
22265         values in the proxy classes.
22266
22267 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
22268
22269         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
22270         need a proxy reference;  I do not know what I was thinking
22271
22272         * cs-parser.jay (constructor_initializer): catch another error,
22273         and display nice message.
22274
22275         (field_declaration): catch void field declaration
22276         to flag a better error. 
22277
22278         * class.cs (MemberBase.CheckBase): Report an error instead of a
22279         warning if a new protected member is declared in a struct. 
22280         (Field.Define): catch the error of readonly/volatile.
22281
22282         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
22283
22284         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
22285         volatile variable is taken
22286
22287 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
22288
22289         * statement.cs (Fixed.Resolve): Report an error if we are not in
22290         an unsafe context.
22291
22292 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
22293
22294         * typemanager.cs: reuse the code that handles type clashes for
22295         delegates and enumerations.
22296
22297         * class.cs (Report28): Always report.
22298
22299         * expression.cs (EncodeAsAttribute): Allow nulls here.
22300
22301 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
22302
22303         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
22304         the functionality for testing whether an expression is valid for
22305         an attribute here.  Also handle the case of arrays of elements
22306         being stored. 
22307
22308         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
22309         encoding a linear array into an array of objects that are suitable
22310         to be passed to an CustomAttributeBuilder.
22311
22312         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
22313
22314         * ecore.cs: (FieldExpr): Handle field remapping here.
22315
22316         * iteratators.cs: Pass the instance variable (if the method is an
22317         instance method) to the constructors, so we can access the field
22318         variables on the class.
22319
22320         TODO: Test this with structs.  I think the THIS variable on
22321         structs might have to be a pointer, and not a refenrece
22322
22323 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
22324
22325         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
22326         local variables to fields in a proxy class.
22327
22328         * iterators.cs (PopulateProxy): Rename our internal fields to
22329         <XXX>.  
22330         Create a <THIS> field if we are an instance method, so we can
22331         reference our parent container variables.
22332         (MapVariable): Called back from the EmitContext code to enter a
22333         new variable to field mapping into the proxy class (we just create
22334         a FieldBuilder).
22335
22336         * expression.cs
22337         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
22338         for using the remapped locals to fields.
22339
22340         I placed the code here, because that gives the same semantics to
22341         local variables, and only changes the Emit code.
22342
22343         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
22344         statements inside iterators.
22345         (VariableInfo): Add a FieldBuilder for the cases when we are
22346         remapping local variables to fields in a proxy class
22347
22348         * ecore.cs (SimpleNameResolve): Avoid testing two times for
22349         current_block != null.
22350
22351         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
22352         not cope with strings, as it has been moved to the
22353         TableSwitchEmit.  Fixed bug in switch generation.
22354
22355         * expression.cs (New.DoResolve): Provide more context for the user
22356         when reporting an error.
22357
22358         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
22359         pointers. 
22360
22361         * expression.cs (MemberAccess.DoResolve): When we get a type back,
22362         check the permissions for it.  Note than in a type-resolution
22363         context the check was already present in DeclSpace.ResolveType,
22364         but was missing from the MemberAccess.
22365
22366         (ArrayCreation.CheckIndices): warn if the user has
22367         more nested levels of expressions, but there are no more
22368         dimensions specified.  Avoids crash on bug 41906.
22369
22370 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
22371
22372         * statement.cs (Block): replace Implicit bool, for a generic
22373         flags.   
22374         New flag: `Unchecked'.  This is used during the EmitMeta phase
22375         (which is out-of-line with the regular Resolve/Emit process for a
22376         statement, as this is done ahead of time, but still gets a chance
22377         to call constant resolve).
22378
22379         (Block.Flags): new enum for adding a new flag.
22380
22381         (Block.EmitMeta): track the state of unchecked.
22382
22383         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
22384         to enable constant resolution to work there as well.
22385
22386 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
22387
22388         * typemanager.cs (ienumerable_type): Also look up
22389         System.Collections.IEnumerable. 
22390
22391 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
22392
22393         TODO: Test more than one conditional per method.
22394
22395         * class.cs (Indexer.Define): Report the location where the user is
22396         referencing the unsupported feature.
22397
22398         (MethodData): Overload the use of `conditionals' to
22399         minimize the creation of needless ArrayLists.   This saves roughly
22400         212kb on my machine.
22401
22402         (Method): Implement the new IIteratorContainer interface.
22403         (Method.SetYields): Implement the method by setting the ModFlags
22404         to contain METHOD_YIELDS.
22405
22406         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
22407         which just got set to null.
22408
22409         * iterators.cs: New file.
22410
22411         (Yield, YieldBreak): New statements.
22412
22413         * statement.cs (Return.Resolve): Flag an error if we are used in
22414         an iterator method.
22415
22416         * codegen.cs (InIterator): New flag set if the code is being
22417         compiled in an iterator method.
22418
22419         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
22420         internal modifier, and we just use it to avoid adding extra
22421         fields, as this is seldom used.  
22422
22423         * cs-parser.jay: Add yield_statement (yield and yield break).
22424
22425         * driver.cs: New flag -v2 to turn on version 2 features. 
22426
22427         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
22428         hashtable when v2 is enabled.
22429
22430 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
22431
22432         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
22433         there is already a namespace defined with this name.
22434
22435         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
22436         people upgraded their corlibs.
22437
22438         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
22439         always use fully qualified types, no need to use the compiler
22440         front end.
22441
22442         (TypeManager.IsNamespace): Use binarysearch.
22443
22444         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
22445         AddDelegate): I did not quite use the new IsValid API properly: I
22446         have to pass the short-name and the fullname.  I was passing only
22447         the basename instead of the fullname sometimes. 
22448
22449         (TypeContainer.DefineType): call NamespaceClash.
22450
22451         * interface.cs (Interface.DefineType): use NamespaceClash before
22452         defining the type.
22453
22454         * delegate.cs (Delegate.DefineType): use NamespaceClash before
22455         defining the type.
22456
22457         * enum.cs: (Enum.DefineType): use NamespaceClash before
22458         defining the type.
22459
22460         * typemanager.cs (: 3-line patch that gives us some tasty 11%
22461         speed increase.  First, use the negative_hits cache when we get a
22462         negative.  Second, add the type with its full original name
22463         instead of the new . and + encoded name (reflection uses + to
22464         separate type from a nested type).  Use LookupTypeReflection
22465         directly which bypasses the type->name hashtable (that we already
22466         know does not contain the type.
22467
22468         * decl.cs (DeclSpace.ResolveTypeExpr): track the
22469         location/container type. 
22470
22471         * driver.cs: When passing utf8, use directly the UTF8Encoding.
22472
22473 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
22474
22475         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
22476
22477         * delegate.cs (NewDelegate.Resolve): Test whether an instance
22478         method is being referenced in the method group from a static
22479         context, and report error 120 if so.
22480
22481         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
22482         Error118. 
22483
22484         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
22485         is created, we create the A namespace).
22486
22487         * cs-parser.jay: A namespace also introduces a DeclarationFound.
22488         Fixes #41591
22489
22490 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
22491
22492         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
22493         invocation to ModuleBuilder.GetType with the same values will
22494         return a new type instance, so we need to cache its return
22495         values. 
22496
22497         * expression.cs (Binary.ResolveOperator): Only allow the compare
22498         operators on enums if they are of the same type.
22499
22500         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
22501         types of ValueType on their own case.  Before we were giving them
22502         the same treatment as objects.
22503
22504         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
22505         fullname.  Short name is used to compare against container name.
22506         Fullname is used to check against defined namespace names.
22507
22508         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
22509         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
22510
22511         (Method.CheckBase): Call parent.
22512         (MemberBase.CheckBase): Check for protected members on sealed
22513         classes.
22514         (PropertyBase.CheckBase): Call parent.
22515         (Field.Define): Call parent.
22516
22517         * report.cs: Negative error codes are now mapped to 8000 - code,
22518         so that the display is render more nicely.
22519
22520         * typemanager.cs: Do not use try/catch, instead report a regular
22521         error. 
22522
22523         (GetPointerType, GetReferenceType): These methods provide
22524         mechanisms to obtain the T* and T& from a T.  We had the code
22525         previously scattered around the code base, and it also used
22526         TypeManager.LookupType that would go through plenty of caches.
22527         This one goes directly to the type source.
22528
22529         In some places we did the Type.GetType followed by
22530         ModuleBuilder.GetType, but not in others, so this unifies the
22531         processing as well.
22532
22533         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
22534         statements now that we have namespace information.
22535
22536         * typemanager.cs (IsNamespace): New method, returns whether the
22537         string presented is a namespace or not.
22538
22539         (ComputeNamespaces): New public entry point, computes the list of
22540         available namespaces, using the GetNamespaces API call in Mono, or
22541         the slower version in MS.NET.   
22542
22543         Now before we start the semantic analysis phase, we have a
22544         complete list of namespaces including everything that the user has
22545         provided.
22546
22547         Deleted old code to cache namespaces in .nsc files.
22548
22549 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
22550
22551         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
22552         class/struct location definition Location for the implicit
22553         constructor location.
22554
22555         (Operator.Define): Use the location of the operator for the
22556         implicit Method definition.
22557
22558         (Constructor.Emit): use the constructor location for the implicit
22559         base initializer constructor.
22560
22561         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
22562         and the Expression class now contains two new methods:
22563
22564         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
22565         isolate type lookup from the rest of the resolution process.
22566
22567         Since we use Expressions to hold type definitions due to the way
22568         we parse the input we have historically overloaded Resolve to
22569         perform the Type lookups if a special flag is passed.  Now this is
22570         eliminated and two methods take their place. 
22571
22572         The differences in the two methods between xStep and xTerminal is
22573         that xStep is involved in our current lookup system that uses
22574         SimpleNames to compose a name, while xTerminal is used just to
22575         catch the case where the simplename lookup failed.
22576
22577 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
22578
22579         * expression.cs (ResolveMemberAccess): Remove redundant code.
22580         TypeExpr expressions are always born fully resolved.
22581
22582         * interface.cs (PopulateMethod): Do not lookup the types twice.
22583         We were doing it once during SemanticAnalysis and once during
22584         PopulateMethod.
22585
22586         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
22587         in local variable type definitions, were being returned as a
22588         SimpleName (we decomposed everything into a string), that is
22589         because primary_expression was being used instead of a type in the
22590         grammar (reduce/reduce conflicts).
22591
22592         The part that was wrong is that we converted the expression into a
22593         string (an oversimplification in one hand, compounded with primary
22594         expressions doing string concatenation).
22595
22596         So things like:
22597
22598         A.B.C [] x;
22599
22600         Would return "A.B.C[]" as a SimpleName.  This stopped things like
22601         using clauses from working on this particular context.  And a type
22602         was being matched directly against "A.B.C[]".
22603
22604         We now use the correct approach, and allow for ComposedCast to be
22605         part of the unary expression.  So the "A.B.C []" become a composed
22606         cast of "A.B.C" (as a nested group of MemberAccess with a
22607         SimpleName at the end) plus the rank composition "[]". 
22608
22609         Also fixes 35567
22610
22611 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
22612
22613         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
22614         for the access level checking.
22615
22616         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
22617         `TypeContainer container', because I kept getting confused when I
22618         was debugging this code.
22619
22620         * expression.cs (Indexers): Instead of tracking getters/setters,
22621         we now track them in parallel.  We create one arraylist less, but
22622         most importantly it is possible now for the LValue code to find a
22623         matching get for a set.
22624
22625         (IndexerAccess.DoResolveLValue): Update the code.
22626         GetIndexersForType has been modified already to extract all the
22627         indexers from a type.  The code assumed it did not.
22628
22629         Also make the code set the correct return type for the indexer.
22630         This was fixed a long time ago for properties, but was missing for
22631         indexers.  It used to be void_type.
22632
22633         (Binary.Emit): Test first for doubles instead of
22634         floats, as they are more common.
22635
22636         (Binary.EmitBranchable): Use the .un version of the branch opcodes
22637         when dealing with floats and the <=, >= operators.  This fixes bug
22638         #39314 
22639
22640         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
22641         to load the array value by emitting a load on the foreach variable
22642         type.  This was incorrect.  
22643
22644         We now emit the code to load an element using the the array
22645         variable type, and then we emit the conversion operator.
22646
22647         Fixed #40176
22648
22649 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
22650
22651         * attribute.cs: Avoid allocation of ArrayLists in the common case.
22652
22653 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
22654
22655         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
22656         test for protection before we test for signatures. 
22657
22658         (MethodSignature.ToString): implement.
22659
22660         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
22661         to the case where we reduced into a LongConstant.
22662
22663         * decl.cs (CheckAccessLevel): If the type is an array, we can not
22664         depend on whether the information is acurrate, because the
22665         Microsoft runtime will always claim that the array type is public,
22666         regardless of the real state.
22667
22668         If the type is a pointer, another problem happens: the type is
22669         reported as non-public in Microsoft.  
22670
22671         In both cases we have to call CheckAccessLevel recursively with
22672         the underlying type as the argument to be tested.
22673
22674 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
22675
22676         * assign.cs (Assign.Emit): If we are dealing with a compound
22677         assignment expression, we should use the code path that stores the
22678         intermediate result in a temporary value.  This fixes #40903.
22679
22680         *expression.cs (Indirection.ToString): Provide ToString method for
22681         debugging. 
22682
22683 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
22684
22685         * class.cs: Null out fields holding references to Block objects so
22686         they can be garbage collected.
22687
22688         * expression.cs (OverloadResolve): Remove unused local.
22689
22690 2003-04-07  Martin Baulig  <martin@ximian.com>
22691
22692         * codegen.cs (EmitContext.CurrentFile): New public field.
22693         (EmitContext.Mark): Use the CurrentFile to check whether the
22694         location is in the correct file.
22695         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
22696
22697 2003-04-07  Martin Baulig  <martin@ximian.com>
22698
22699         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
22700
22701         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
22702         location.  [FIXME: The location argument which gets passed to this
22703         method is sometimes wrong!]
22704
22705 2003-04-07  Nick Drochak <ndrochak@gol.com>
22706
22707         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
22708
22709 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
22710
22711         * expression.cs (Indirection.EmitAssign): We were using the
22712         temporary, but returning immediately instead of continuing the
22713         EmitAssing flow.
22714
22715 2003-04-06  Martin Baulig  <martin@ximian.com>
22716
22717         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
22718         if it's a nested child, but also deriving from the outer class.
22719         See test 190.cs.
22720
22721         * typemanager.cs (IsNestedChildOf): Make this work if it's a
22722         nested child, but also deriving from the outer class.  See
22723         test-190.cs.
22724         (FilterWithClosure): We may access private members of the outer
22725         class if we're a nested child and deriving from the outer class.
22726         (RealMemberLookup): Only set `closure_private_ok' if the
22727         `original_bf' contained BindingFlags.NonPublic.
22728
22729 2003-04-05  Martin Baulig  <martin@ximian.com>
22730
22731         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #40670.
22732
22733 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
22734
22735         * class.cs (Event.Define): Do not allow abstract events to have
22736         initializers. 
22737
22738 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
22739
22740         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
22741         block in event declarations.
22742
22743         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
22744         value type, get its address.
22745
22746         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
22747         leaving a class on the stack instead of a boolean value (int
22748         0/1).  Change the code so we compare against null, and then the
22749         result against zero.
22750
22751         * class.cs (TypeContainer.GetClassBases): We were checking for the
22752         parent class being sealed too late.
22753
22754         * expression.cs (Binary.Emit): For <= and >= when dealing with
22755         floating point values, use cgt.un and clt.un instead of cgt and
22756         clt alone.
22757
22758 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
22759
22760         * statement.cs: Apply the same optimization as MS: skip the 
22761         GetEnumerator returning an IEnumerator, and use the one returning a 
22762         CharEnumerator instead. This allows us to avoid the try-finally block 
22763         and the boxing.
22764
22765 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
22766
22767         * cs-parser.jay: Attributes cannot be applied to
22768                          namespaces. Fixes #40473
22769
22770 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22771
22772         * class.cs:
22773         (Add*): check if the name is valid using the full name for constants,
22774         fields, properties and events.
22775
22776 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
22777
22778         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
22779         char constants to be part of the enumeration.
22780
22781         * expression.cs (Conditional.DoResolve): Add support for operator
22782         true. Implements the missing functionality from 14.12
22783
22784         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
22785         operator true/false as required by the spec.
22786
22787         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
22788         implicit conversion to boolean.
22789
22790         * statement.cs (Statement.ResolveBoolean): A boolean expression is
22791         also one where the type implements `operator true'. 
22792
22793         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
22794         get an expression that will invoke operator true based on an
22795         expression.  
22796
22797         (GetConversionOperators): Removed the hack that called op_True
22798         here.  
22799
22800         (Expression.ResolveBoolean): Move this from Statement.
22801
22802 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
22803
22804         * ecore.cs (FieldExpr): do not allow initialization of initonly
22805         fields on derived classes
22806
22807 2003-03-13  Martin Baulig  <martin@ximian.com>
22808
22809         * statement.cs (Block.Emit): Call ig.BeginScope() and
22810         ig.EndScope() when compiling with debugging info; call
22811         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
22812
22813 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
22814
22815         * expression.cs (Indexers): Do not construct immediately, allow
22816         for new members to be appended as we go.  Fixes 38143
22817
22818 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22819
22820         * expression.cs: save/restore context when resolving an unchecked
22821         expression.
22822
22823 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
22824
22825         * cfold.cs: Catch division by zero in modulus operator during
22826         constant folding.
22827
22828 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
22829
22830         * interface.cs (Interface.DefineMembers): Avoid defining members
22831         twice. 
22832
22833 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
22834
22835         * driver.cs: handle the +/- options for -noconfig
22836
22837         * statement.cs (Unckeched.Resolve): Also track the state of
22838         unchecked in the Resolve phase.
22839
22840 2003-02-27  Martin Baulig  <martin@ximian.com>
22841
22842         * ecore.cs (Expression.MemberLookup): Don't create a
22843         MethodGroupExpr for something which is not a method.  Fixes #38291.
22844
22845 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
22846
22847         * class.cs (MemberBase.CheckParameters): Also check that the type
22848         is unmanaged if it is a pointer.
22849
22850         * expression.cs (SizeOf.Resolve): Add location information.
22851
22852         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
22853         a managed type is declared.
22854
22855         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
22856         parameter modifiers as well.  Fixes bug 38606
22857
22858         * class.cs: Very sad.  Am backing out the speed up changes
22859         introduced by the ArrayList -> Array in the TypeContainer, as they
22860         were not actually that much faster, and introduced a bug (no error
22861         reports on duplicated methods).
22862
22863         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
22864         source first, this will guarantee that we have a valid expression
22865         before calling in lower levels functions that will require a
22866         resolved object.  Then use this original_source in the
22867         target.ResolveLValue instead of the original source that was
22868         passed to us.
22869
22870         Another change.  Use target.Resolve instead of LValueResolve.
22871         Although we are resolving for LValues, we will let the Assign code
22872         take care of that (it will be called again from Resolve).  This
22873         basically allows code like this:
22874
22875         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
22876         class Y { void A (X x) { x [0] += o; }
22877
22878         The problem was that the indexer was trying to resolve for
22879         set_Item (idx, object o) and never finding one.  The real set_Item
22880         was set_Item (idx, X).  By delaying the process we get the right
22881         semantics. 
22882
22883         Fixes bug 36505
22884
22885 2003-02-23  Martin Baulig  <martin@ximian.com>
22886
22887         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
22888         while calling DoEmit ().
22889
22890         * codegen.cs (EmitContext.Mark): Don't mark locations in other
22891         source files; if you use the #line directive inside a method, the
22892         compiler stops emitting line numbers for the debugger until it
22893         reaches the end of the method or another #line directive which
22894         restores the original file.
22895
22896 2003-02-23  Martin Baulig  <martin@ximian.com>
22897
22898         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
22899
22900 2003-02-23  Martin Baulig  <martin@ximian.com>
22901
22902         * statement.cs (Block.AddChildVariableNames): We need to call this
22903         recursively, not just for our immediate children.
22904
22905 2003-02-23  Martin Baulig  <martin@ximian.com>
22906
22907         * class.cs (Event.Define): Always make the field private, like csc does.
22908
22909         * typemanager.cs (TypeManager.RealMemberLookup): Make events
22910         actually work, fixes bug #37521.
22911
22912 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
22913
22914         * delegate.cs: When creating the various temporary "Parameters"
22915         classes, make sure that we call the ComputeAndDefineParameterTypes
22916         on those new parameters (just like we do with the formal ones), to
22917         allow them to be resolved in the context of the DeclSpace.
22918
22919         This fixes the bug that Dick observed in Bugzilla #38530.
22920
22921 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
22922
22923         * expression.cs (ResolveMemberAccess): When resolving a constant,
22924         do not attempt to pull a constant if the value was not able to
22925         generate a valid constant.
22926
22927         * const.cs (LookupConstantValue): Do not report more errors than required.
22928
22929 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22930
22931         * expression.cs: fixes bug #38328.
22932
22933 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
22934
22935         * class.cs: Changed all the various members that can be part of a
22936         class from being an ArrayList to be an Array of the right type.
22937         During the DefineType type_list, interface_list, delegate_list and
22938         enum_list are turned into types, interfaces, delegates and enums
22939         arrays.  
22940
22941         And during the member population, indexer_list, event_list,
22942         constant_list, field_list, instance_constructor_list, method_list,
22943         operator_list and property_list are turned into their real arrays.
22944
22945         Although we could probably perform this operation earlier, for
22946         good error reporting we need to keep the lists and remove the
22947         lists for longer than required.
22948
22949         This optimization was triggered by Paolo profiling the compiler
22950         speed on the output of `gen-sample-program.pl' perl script. 
22951
22952         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
22953         not crash in methods like MemberLookupFailed that use this field.  
22954
22955         This problem arises when the compiler fails to resolve a type
22956         during interface type definition for example.
22957
22958 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
22959
22960         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
22961         inherit from System.Object, so we have to stop at null, not only
22962         when reaching System.Object.
22963
22964 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
22965
22966         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
22967         DeclaredOnly because the parent indexer might have had a different
22968         name, but did not loop until the top of the hierarchy was reached.
22969
22970         The problem this one fixes is 35492: when a class implemented an
22971         indexer from an interface, we were getting the interface method
22972         (which was abstract) and we were flagging an error (can not invoke
22973         abstract method).
22974
22975         This also keeps bug 33089 functioning, and test-148 functioning.
22976
22977         * typemanager.cs (IsSpecialMethod): The correct way of figuring
22978         out if a method is special is to see if it is declared in a
22979         property or event, or whether it is one of the predefined operator
22980         names.   This should fix correctly #36804.
22981
22982 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
22983
22984         The goal here is to remove the dependency on EmptyCast.Peel ().
22985         Killing it completely.
22986
22987         The problem is that currently in a number of places where
22988         constants are expected, we have to "probe" for an EmptyCast, and
22989         Peel, which is not the correct thing to do, as this will be
22990         repetitive and will likely lead to errors. 
22991
22992         The idea is to remove any EmptyCasts that are used in casts that
22993         can be reduced to constants, so we only have to cope with
22994         constants. 
22995
22996         This bug hunt was triggered by Bug 37363 and the desire to remove
22997         the duplicate pattern where we were "peeling" emptycasts to check
22998         whether they were constants.  Now constants will always be
22999         constants.
23000
23001         * ecore.cs: Use an enumconstant here instead of wrapping with
23002         EmptyCast.  
23003
23004         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
23005         throwing me off.  By handling this we can get rid of a few hacks.
23006
23007         * statement.cs (Switch): Removed Peel() code.
23008
23009 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
23010
23011         * class.cs: Location information for error 508
23012
23013         * expression.cs (New.DoResolve): Add a guard against double
23014         resolution of an expression.  
23015
23016         The New DoResolve might be called twice when initializing field
23017         expressions (see EmitFieldInitializers, the call to
23018         GetInitializerExpression will perform a resolve on the expression,
23019         and later the assign will trigger another resolution
23020
23021         This leads to bugs (#37014)
23022
23023         * delegate.cs: The signature for EndInvoke should contain any ref
23024         or out parameters as well.  We were not doing this in the past. 
23025
23026         * class.cs (Field.Define): Do not overwrite the type definition
23027         inside the `volatile' group.  Turns out that volatile enumerations
23028         were changing the type here to perform a validity test, which
23029         broke conversions. 
23030
23031 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
23032
23033         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
23034         and structs, we do not want to load the instance variable
23035
23036         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
23037         enum_type has to be handled like an object reference (implicit
23038         conversions exists from this to object), but the regular IsClass
23039         and IsValueType tests will never return true for this one.
23040
23041         Also we use TypeManager.IsValueType instead of type.IsValueType,
23042         just for consistency with the rest of the code (this is only
23043         needed if we ever use the construct exposed by test-180.cs inside
23044         corlib, which we dont today).
23045
23046 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
23047
23048         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
23049         just InternalCall.
23050
23051 2003-02-09  Martin Baulig  <martin@ximian.com>
23052
23053         * namespace.cs (Namespace..ctor): Added SourceFile argument.
23054         (Namespace.DefineNamespaces): New static public method; this is
23055         called when we're compiling with debugging to add all namespaces
23056         to the symbol file.
23057
23058         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
23059         pass it to the Namespace's .ctor.
23060
23061         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
23062         and MethodBase arguments; pass the namespace ID to the symwriter;
23063         pass the MethodBase instead of the token to the symwriter.
23064         (SymbolWriter.DefineNamespace): New method to add a namespace to
23065         the symbol file.
23066
23067 2003-02-09  Martin Baulig  <martin@ximian.com>
23068
23069         * symbolwriter.cs: New file.  This is a wrapper around
23070         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
23071         methods here in near future.
23072
23073 2003-02-09  Martin Baulig  <martin@ximian.com>
23074
23075         * codegen.cs (EmitContext.Mark): Just pass the arguments to
23076         ILGenerator.MarkSequencePoint() which are actually used by the
23077         symbol writer.
23078
23079 2003-02-09  Martin Baulig  <martin@ximian.com>
23080
23081         * location.cs (SourceFile): New public sealed class.  This
23082         contains the name and an index which is used in the location's token.
23083         (Location): Reserve an appropriate number of bits in the token for
23084         the source file instead of walking over that list, this gives us a
23085         really huge performance improvement when compiling with debugging.
23086
23087         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
23088         `SourceFile' argument instead of a string.
23089         (Driver.ProcessFile): Add all the files via Location.AddFile(),
23090         but don't parse/tokenize here, we need to generate the list of all
23091         source files before we do that.
23092         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
23093         the files.
23094
23095         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
23096         instead of a string.
23097
23098         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
23099         of a string.
23100
23101 2003-02-09  Martin Baulig  <martin@ximian.com>
23102
23103         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
23104         filename on `#line default'.
23105
23106 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
23107
23108         * statement.cs: don't clear the pinned var when the fixed statement
23109         returns from the method (fixes bug#37752).
23110
23111 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
23112
23113         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
23114         to IsValueType.
23115
23116 2003-02-07  Martin Baulig  <martin@ximian.com>
23117
23118         * driver.cs: Removed the `--debug-args' command line argument.
23119
23120         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
23121         automatically by the AsssemblyBuilder.
23122         (CodeGen.InitializeSymbolWriter): We don't need to call any
23123         initialization function on the symbol writer anymore.  This method
23124         doesn't take any arguments.
23125
23126 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
23127
23128         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
23129         from referenced assemblies as well.
23130
23131 2003-02-02  Martin Baulig  <martin@ximian.com>
23132
23133         * class.cs (MethodData.Emit): Generate debugging info for external methods.
23134
23135 2003-02-02  Martin Baulig  <martin@ximian.com>
23136
23137         * class.cs (Constructor.Emit): Open the symbol writer before
23138         emitting the constructor initializer.
23139         (ConstructorInitializer.Emit): Call ec.Mark() to allow
23140         single-stepping through constructor initializers.
23141
23142 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
23143
23144         * class.cs: Handle error 549: do not allow virtual methods in
23145         sealed classes. 
23146
23147 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
23148
23149         * decl.cs: Check access levels when resolving types
23150
23151 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
23152
23153         * statement.cs: Add parameters and locals set in catch blocks that might 
23154         return to set vector
23155
23156 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
23157
23158         * class.cs (Operator): Set the SpecialName flags for operators.
23159
23160         * expression.cs (Invocation.DoResolve): Only block calls to
23161         accessors and operators on SpecialName methods.
23162
23163         (Cast.TryReduce): Handle conversions from char constants.
23164
23165
23166 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
23167
23168         * statement.cs: small memory and time optimization in FlowBranching.
23169
23170 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
23171
23172         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
23173         problem that the last fix but in the other sid (Set).
23174
23175         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
23176         access when there is no indexer in the hierarchy.
23177
23178 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
23179
23180         * class.cs: Combine some if statements.
23181
23182 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23183
23184         * driver.cs: fixed bug #37187.
23185
23186 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
23187
23188         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
23189         any indexer, it's needed to build a list with all the indexers in the
23190         hierarchy (AllGetters), else we have problems. Fixes #35653.
23191
23192 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
23193
23194         * class.cs (MethodData.Define): It is wrong for an interface
23195         implementation to be static in both cases: explicit and implicit.
23196         We were only handling this in one case.
23197
23198         Improve the if situation there to not have negations.
23199
23200         * class.cs (Field.Define): Turns out that we do not need to check
23201         the unsafe bit on field definition, only on usage.  Remove the test.
23202
23203 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23204
23205         * driver.cs: use assembly.Location instead of Codebase (the latest
23206         patch made mcs fail when using MS assemblies).
23207
23208 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
23209
23210         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
23211         get the path to *corlib.dll.
23212
23213 2003-01-21  Nick Drochak <ndrochak@gol.com>
23214
23215         * cs-tokenizer.cs:
23216         * pending.cs:
23217         * typemanager.cs: Remove compiler warnings
23218
23219 2003-01-20  Duncan Mak  <duncan@ximian.com>
23220
23221         * AssemblyInfo.cs: Bump the version number to 0.19.
23222
23223 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23224
23225         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
23226
23227 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
23228
23229         * class.cs (Constructor::Emit): Emit debugging info for constructors.
23230
23231 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
23232
23233         * cs-parser.jay: Small fix: we were not comparing the constructor
23234         name correctly.   Thanks to Zoltan for the initial pointer.
23235
23236 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
23237
23238         * cs-tokenizer.cs: Set file name when specified with #line
23239
23240 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
23241
23242         * cs-parser.jay: Only perform the constructor checks here if we
23243         are named like the class;  This will help provider a better
23244         error.  The constructor path is taken when a type definition is
23245         not found, but most likely the user forgot to add the type, so
23246         report that rather than the constructor error.
23247
23248 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
23249
23250         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
23251         allocations.
23252
23253 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
23254
23255         * cs-parser.jay: Add cleanup call.
23256
23257 2003-01-13  Duncan Mak  <duncan@ximian.com>
23258
23259         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
23260         consistent with other methods.
23261
23262 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
23263
23264         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
23265
23266 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
23267
23268         * attribute.cs: only set GuidAttr to true when we have a
23269         GuidAttribute.
23270
23271 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23272
23273         * ecore.cs:
23274         * expression.cs:
23275         * typemanager.cs: fixes to allow mcs compile corlib with the new
23276         Type.IsSubclassOf fix.
23277
23278 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
23279
23280         * expression.cs (LocalVariableReference.DoResolve): Classify a
23281         constant as a value, not as a variable.   Also, set the type for
23282         the variable.
23283
23284         * cs-parser.jay (fixed_statement): take a type instead of a
23285         pointer_type, so we can produce a better error message later.
23286
23287         * statement.cs (Fixed.Resolve): Flag types that are not pointers
23288         as an error.  
23289
23290         (For.DoEmit): Make inifinite loops have a
23291         non-conditional branch back.
23292
23293         (Fixed.DoEmit): First populate the pinned variables, then emit the
23294         statement, then clear the variables.  Before I was emitting the
23295         code once for each fixed piece.
23296
23297
23298 2003-01-08  Martin Baulig  <martin@ximian.com>
23299
23300         * statement.cs (FlowBranching.MergeChild): A break in a
23301         SWITCH_SECTION does not leave a loop.  Fixes #36155.
23302
23303 2003-01-08  Martin Baulig  <martin@ximian.com>
23304
23305         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
23306         lives in the same number space than `param_map'.  Fixes #36154.
23307
23308 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
23309
23310         * cs-parser.jay (constructor_declaration): Set the
23311         Constructor.ModFlags before probing for it.  This makes the
23312         compiler report 514, 515 and 132 (the code was there, but got
23313         broken). 
23314
23315         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
23316         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
23317         (GotoCase.Resolve): Set `Returns' to ALWAYS.
23318
23319 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
23320
23321         * enum.cs: create the enum static fields using the enum type.
23322
23323 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
23324
23325         * class.cs: don't try to create the ParamBuilder for the return
23326         type if it's not needed (and handle it breaking for the ms runtime
23327         anyway).
23328
23329 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
23330
23331         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
23332
23333 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
23334
23335         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
23336         the command.   This showed up while compiling the JANET source
23337         code, which used \r as its only newline separator.
23338
23339 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
23340
23341         * class.cs (Method.Define): If we are an operator (because it
23342         reuses our code), then set the SpecialName and HideBySig.  #36128
23343
23344 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
23345
23346         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
23347         exception, report error 120 `object reference required'.
23348
23349         * driver.cs: Add --pause option, used during to measure the size
23350         of the process as it goes with --timestamp.
23351
23352         * expression.cs (Invocation.DoResolve): Do not allow methods with
23353         SpecialName to be invoked.
23354
23355 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
23356
23357         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
23358         number before adding it.
23359
23360 2002-12-21  Ravi Pratap  <ravi@ximian.com>
23361
23362         * ecore.cs (StandardImplicitConversion): When in an unsafe
23363         context, we allow conversion between void * to any other pointer
23364         type. This fixes bug #35973.
23365
23366 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
23367
23368         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
23369         is not thrown when extensionless outputs are used 
23370
23371 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23372
23373         * rootcontext.cs: fixed compilation of corlib.
23374
23375 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
23376
23377         * attribute.cs (Attributes.Contains): Add new method.
23378
23379         * class.cs (MethodCore.LabelParameters): if the parameter is an
23380         `out' parameter, check that no attribute `[In]' has been passed.
23381
23382         * enum.cs: Handle the `value__' name in an enumeration.
23383
23384 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
23385
23386         * decl.cs: Added special case to allow overrides on "protected
23387         internal" methods
23388
23389 2002-12-18  Ravi Pratap  <ravi@ximian.com>
23390
23391         * attribute.cs (Attributes.AddAttributeSection): Rename to this
23392         since it makes much more sense.
23393
23394         (Attributes.ctor): Don't require a Location parameter.
23395
23396         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
23397
23398         * attribute.cs (ApplyAttributes): Remove extra Location parameters
23399         since we already have that information per attribute.
23400
23401         * everywhere : make appropriate changes.
23402
23403         * class.cs (LabelParameters): Write the code which actually
23404         applies attributes to the return type. We can't do this on the MS
23405         .NET runtime so we flag a warning in the case an exception is
23406         thrown.
23407
23408 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
23409
23410         * const.cs: Handle implicit null conversions here too.
23411
23412 2002-12-17  Ravi Pratap  <ravi@ximian.com>
23413
23414         * class.cs (MethodCore.LabelParameters): Remove the extra
23415         Type [] parameter since it is completely unnecessary. Instead
23416         pass in the method's attributes so that we can extract
23417         the "return" attribute.
23418
23419 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
23420
23421         * cs-parser.jay (parse): Use Report.Error to flag errors instead
23422         of ignoring it and letting the compile continue.
23423
23424         * typemanager.cs (ChangeType): use an extra argument to return an
23425         error condition instead of throwing an exception.
23426
23427 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
23428
23429         * expression.cs (Unary.TryReduce): mimic the code for the regular
23430         code path.  Perform an implicit cast in the cases where we can
23431         implicitly convert to one of the integral types, and then reduce
23432         based on that constant.   This fixes bug #35483.
23433
23434 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23435
23436         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
23437
23438 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23439
23440         * namespace.cs: fixed bug #35489.
23441
23442 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
23443
23444         * class.cs: Remove some dead code.
23445
23446         * cs-parser.jay: Estimate the number of methods needed
23447         (RootContext.MethodCount);
23448
23449         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
23450         numbers instead of StringBuilders.
23451
23452         * support.cs (PtrHashtable): Add constructor with initial size;
23453         We can now reduce reallocations of the method table.
23454
23455 2002-12-10  Ravi Pratap  <ravi@ximian.com>
23456
23457         * attribute.cs (ApplyAttributes): Keep track of the emitted
23458         attributes on a per-target basis. This fixes bug #35413.
23459
23460 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
23461
23462         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
23463         default to the Windows 1252 encoding.
23464
23465         (UnixParseOption): Support version, thanks to Alp for the missing
23466         pointer. 
23467
23468         * AssemblyInfo.cs: Add nice assembly information.
23469
23470         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
23471         (bug 35169).
23472
23473         * cs-parser.jay: Allow a trailing comma before the close bracked
23474         in the attribute_section production.
23475
23476         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
23477         address of the instance was being taken, I will take this out,
23478         because we take the address of the object immediately here.
23479
23480 2002-12-09  Ravi Pratap  <ravi@ximian.com>
23481
23482         * typemanager.cs (AreMultipleAllowed): Take care of the most
23483         obvious case where attribute type is not in the current assembly -
23484         stupid me ;-)
23485
23486 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
23487
23488         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
23489         definitions, instead of doing that afterwards.  
23490
23491         Also we use a nice little hack, depending on the constructor, we
23492         know if we are a "composed" name or a simple name.  Hence, we
23493         avoid the IndexOf test, and we avoid 
23494
23495         * codegen.cs: Add code to assist in a bug reporter to track down
23496         the source of a compiler crash. 
23497
23498 2002-12-07  Ravi Pratap  <ravi@ximian.com>
23499
23500         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
23501         types have been emitted for a given element and flag an error
23502         if something which does not have AllowMultiple set is used more
23503         than once.
23504
23505         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
23506         attribute types and their corresponding AllowMultiple properties
23507
23508         (AreMultipleAllowed): Check the property for a given type.
23509
23510         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
23511         property in the case we have a TypeContainer.
23512
23513         (Attributes.AddAttribute): Detect duplicates and just skip on
23514         adding them. This trivial fix catches a pretty gross error in our
23515         attribute emission - global attributes were being emitted twice!
23516
23517         Bugzilla bug #33187 is now fixed.
23518
23519 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
23520
23521         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
23522         instead of pp_and).
23523
23524         * expression.cs (Binary.ResolveOperator): I can only use the
23525         Concat (string, string, string) and Concat (string, string,
23526         string, string) if the child is actually a concatenation of
23527         strings. 
23528
23529 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
23530
23531         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
23532         context where we need a 2-character lookahead.
23533
23534         * pending.cs (PendingImplementation): Rework so we can keep track
23535         of interface types all the time, and flag those which were
23536         implemented by parents as optional.
23537
23538 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
23539
23540         * expression.cs (Binary.ResolveOperator): Use
23541         String.Concat(string,string,string) or
23542         String.Concat(string,string,string,string) when possible. 
23543
23544         * typemanager: More helper methods.
23545
23546
23547 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
23548
23549         * pending.cs: remove the bogus return from GetMissingInterfaces()
23550         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
23551
23552 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23553
23554         * namespace.cs: avoid duplicated 'using xxx' being added to
23555         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
23556         when we get more than one 'using' statement for the same namespace.
23557         Report a CS0105 warning for it.
23558
23559 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
23560
23561         * cs-tokenizer.cs (consume_identifier): use read directly, instead
23562         of calling getChar/putback, uses internal knowledge of it.    
23563
23564         (xtoken): Reorder tokenizer so most common patterns are checked
23565         first.  This reduces the compilation time in another 5% (from 8.11s
23566         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
23567
23568         The parsing time is 22% of the compilation in mcs, and from that
23569         64% is spent on the tokenization process.  
23570
23571         I tried using a binary search for keywords, but this is slower
23572         than the hashtable.  Another option would be to do a couple of
23573         things:
23574
23575                 * Not use a StringBuilder, instead use an array of chars,
23576                   with a set value.  Notice that this way we could catch
23577                   the 645 error without having to do it *afterwards*.
23578
23579                 * We could write a hand-parser to avoid the hashtable
23580                   compares altogether.
23581
23582         The identifier consumption process takes 37% of the tokenization
23583         time.  Another 15% is spent on is_number.  56% of the time spent
23584         on is_number is spent on Int64.Parse:
23585
23586                 * We could probably choose based on the string length to
23587                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
23588                   computations. 
23589
23590         Another 3% is spend on wrapping `xtoken' in the `token' function.
23591
23592         Handle 0xa0 as whitespace (#34752)
23593
23594 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
23595
23596         * typemanager.cs (IsCLRType): New routine to tell whether a type
23597         is one of the builtin types.  
23598
23599         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
23600         typecode in more places instead of doing pointer comparissions.
23601         We could leverage some knowledge about the way the typecodes are
23602         laid out.
23603
23604         New code to cache namespaces in assemblies, it is currently not
23605         invoked, to be used soon.
23606
23607         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
23608
23609         * expression.cs (Binary.ResolveOperator): specially handle
23610         strings, and do not perform user-defined operator overloading for
23611         built-in types.
23612
23613 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
23614
23615         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
23616         internalcall as it is a pretty simple operation;  Avoid whenever
23617         possible to call Char.IsLetter.
23618
23619         (consume_identifier): Cut by half the number of
23620         hashtable calls by merging the is_keyword and GetKeyword behavior.
23621
23622         Do not short-circuit, because if we do, we
23623         report errors (ie, #if false && true would produce an invalid
23624         directive error);
23625
23626
23627 2002-11-24  Martin Baulig  <martin@ximian.com>
23628
23629         * expression.cs (Cast.TryReduce): If we're in checked syntax,
23630         check constant ranges and report a CS0221.  Fixes #33186.
23631
23632 2002-11-24  Martin Baulig  <martin@ximian.com>
23633
23634         * cs-parser.jay: Make this work for uninitialized variable
23635         declarations in the `for' initializer.  Fixes #32416.
23636
23637 2002-11-24  Martin Baulig  <martin@ximian.com>
23638
23639         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
23640         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
23641
23642 2002-11-24  Martin Baulig  <martin@ximian.com>
23643
23644         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
23645         argument; if true, we also check for user-defined conversions.
23646         This is only needed if both arguments are of a user-defined type.
23647         Fixes #30443, added test-175.cs.
23648         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
23649
23650         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
23651
23652 2002-11-24  Martin Baulig  <martin@ximian.com>
23653
23654         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
23655         function to get the store opcode.
23656         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
23657         only emit the Ldelema if the store opcode is Stobj.  You must run
23658         both test-34 and test-167 to test this.  Fixes #34529.
23659
23660 2002-11-23  Martin Baulig  <martin@ximian.com>
23661
23662         * ecore.cs (Expression.MemberLookup): Added additional
23663         `qualifier_type' argument which is used when we're being called
23664         from MemberAccess.DoResolve() and null if we're called from a
23665         SimpleName lookup.
23666         (Expression.MemberLookupFailed): New method to report errors; this
23667         does the CS1540 check and reports the correct error message.
23668
23669         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
23670         argument for the CS1540 check and redone the way how we're dealing
23671         with private members.  See the comment in the source code for details.
23672         (FilterWithClosure): Reverted this back to revision 1.197; renamed
23673         `closure_start_type' to `closure_qualifier_type' and check whether
23674         it's not null.  It was not this filter being broken, it was just
23675         being called with the wrong arguments.
23676
23677         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
23678         and pass it the correct `qualifier_type'; this also does the error
23679         handling for us.
23680
23681 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
23682
23683         * expression.cs (Invocation.EmitParams): If the we are dealing
23684         with a non-built-in value type, load its address as well.
23685
23686         (ArrayCreation): Use a a pretty constant instead
23687         of the hardcoded value 2.   Use 6 instead of 2 for the number of
23688         static initializers.  
23689
23690         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
23691         because they are not really value types, just glorified integers. 
23692
23693         * driver.cs: Do not append .exe, the CSC compiler does not do it.
23694
23695         * ecore.cs: Remove redundant code for enumerations, make them use
23696         the same code path as everything else, fixes the casting issue
23697         with enumerations in Windows.Forms.
23698
23699         * attribute.cs: Do only cast to string if it is a string, the
23700         validation happens later.
23701
23702         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
23703         people upgrade their corlibs.
23704
23705         * ecore.cs: Oops, enumerations were not following the entire code path
23706
23707 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
23708
23709         * typemanager.cs (FilterWithClosure): Commented out the test for
23710         1540 in typemanager.cs, as it has problems when accessing
23711         protected methods from a parent class (see test-174.cs). 
23712
23713         * attribute.cs (Attribute.ValidateGuid): new method.
23714         (Attribute.Resolve): Use above.
23715
23716 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
23717
23718         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
23719
23720         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
23721         handling for enumerations, as we only needed the TypeContainer
23722         functionality to begin with (this is required for the fix below to
23723         work for enums that reference constants in a container class for
23724         example). 
23725
23726         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
23727
23728         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
23729         a valid TypeBuilder to perform lookups on.o
23730
23731         * class.cs (InheritableMemberSignatureCompare): Use true in the
23732         call to GetGetMethod and GetSetMethod, because we are comparing
23733         the signature, and we need to get the methods *even* if they are
23734         private. 
23735
23736         (PropertyBase.CheckBase): ditto.
23737
23738         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
23739         GotoCase.Resolve): Use Peel on EmpytCasts.
23740
23741         * ecore.cs (EmptyCast): drop child, add Peel method.
23742
23743 2002-11-17  Martin Baulig  <martin@ximian.com>
23744
23745         * ecore.cs (EmptyCast.Child): New public property.
23746
23747         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
23748         label resolved to an EmptyCast.  Fixes #34162.
23749         (GotoCase.Resolve): Likewise.
23750         (Block.EmitMeta): Likewise.
23751
23752 2002-11-17  Martin Baulig  <martin@ximian.com>
23753
23754         * expression.cs (Invocation.BetterConversion): Prefer int over
23755         uint; short over ushort; long over ulong for integer literals.
23756         Use ImplicitConversionExists instead of StandardConversionExists
23757         since we also need to check for user-defined implicit conversions.
23758         Fixes #34165.  Added test-173.cs.
23759
23760 2002-11-16  Martin Baulig  <martin@ximian.com>
23761
23762         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
23763         with the `true' and `false' literals.  Fixes #33151.
23764
23765 2002-11-16  Martin Baulig  <martin@ximian.com>
23766
23767         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
23768         October 22nd; don't do the cs1540 check for static members.
23769
23770         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
23771         now using our own filter here and doing the cs1540 check again.
23772
23773 2002-11-16  Martin Baulig  <martin@ximian.com>
23774
23775         * support.cs (InternalParameters): Don't crash if we don't have
23776         any fixed parameters.  Fixes #33532.
23777
23778 2002-11-16  Martin Baulig  <martin@ximian.com>
23779
23780         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
23781         when looking up static methods to make this work on Windows.
23782         Fixes #33773.
23783
23784 2002-11-16  Martin Baulig  <martin@ximian.com>
23785
23786         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
23787         a setter rather than using PropertyInfo.CanWrite.
23788
23789 2002-11-15  Nick Drochak  <ndrochak@gol.com>
23790
23791         * class.cs: Allow acces to block member by subclasses. Fixes build
23792         breaker.
23793
23794 2002-11-14  Martin Baulig  <martin@ximian.com>
23795
23796         * class.cs (Constructor.Emit): Added the extern/block check.
23797         Fixes bug #33678.
23798
23799 2002-11-14  Martin Baulig  <martin@ximian.com>
23800
23801         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
23802         iteration while looking for indexers, this is needed because the
23803         indexer may have a different name in our base classes.  Fixed the
23804         error reporting (no indexers at all, not get accessor, no
23805         overloaded match).  Fixes bug #33089.
23806         (IndexerAccess.DoResolveLValue): Likewise.
23807
23808 2002-11-14  Martin Baulig  <martin@ximian.com>
23809
23810         * class.cs (PropertyBase.CheckBase): Make this work for multiple
23811         indexers.  Fixes the first part of bug #33089.
23812         (MethodSignature.InheritableMemberSignatureCompare): Added support
23813         for properties.
23814
23815 2002-11-13  Ravi Pratap  <ravi@ximian.com>
23816
23817         * attribute.cs (Attribute.Resolve): Catch the
23818         NullReferenceException and report it since it isn't supposed to
23819         happen. 
23820
23821 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
23822
23823         * expression.cs (Binary.EmitBranchable): Also handle the cases for
23824         LogicalOr and LogicalAnd that can benefit from recursively
23825         handling EmitBranchable.  The code now should be nice for Paolo.
23826
23827 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
23828
23829         * typemanager.cs (LookupType): Added a negative-hit hashtable for
23830         the Type lookups, as we perform quite a number of lookups on
23831         non-Types.  This can be removed once we can deterministically tell
23832         whether we have a type or a namespace in advance.
23833
23834         But this might require special hacks from our corlib.
23835
23836         * TODO: updated.
23837
23838         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
23839         and double which avoids a conversion from an integer to a double.
23840
23841         * expression.cs: tiny optimization, avoid calling IsConstant,
23842         because it effectively performs the lookup twice.
23843
23844 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
23845
23846         But a bogus return here to keep the semantics of the old code
23847         until the Mono runtime is fixed.
23848
23849         * pending.cs (GetMissingInterfaces): New method used to remove all
23850         the interfaces that are already implemented by our parent
23851         classes from the list of pending methods. 
23852
23853         * interface.cs: Add checks for calls after ResolveTypeExpr.
23854
23855 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
23856
23857         * class.cs (Class.Emit): Report warning 67: event not used if the
23858         warning level is beyond 3.
23859
23860         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
23861         being a NullLiteral.
23862
23863         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
23864         specifiers. 
23865
23866         * class.cs (TypeContainer.GetClassBases): Cover a missing code
23867         path that might fail if a type can not be resolved.
23868
23869         * expression.cs (Binary.Emit): Emit unsigned versions of the
23870         operators. 
23871
23872         * driver.cs: use error 5.
23873
23874 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
23875
23876         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
23877
23878 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
23879
23880         * cs-parser.jay (switch_section): A beautiful patch from Martin
23881         Baulig that fixed 33094.
23882
23883 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
23884
23885         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
23886         Check whether the base is abstract and report an error if so.
23887
23888         * expression.cs (IndexerAccess.DoResolveLValue,
23889         IndexerAccess.DoResolve): ditto. 
23890
23891         (Invocation.DoResolve): ditto.
23892
23893         (Invocation.FullMethodDesc): Improve the report string.
23894
23895         * statement.cs (Block): Eliminate IsVariableDefined as it is
23896         basically just a wrapper for GetVariableInfo.
23897
23898         * ecore.cs (SimpleName): Use new 
23899
23900         * support.cs (ReflectionParamter.ParameterType): We unwrap the
23901         type, as we return the actual parameter ref/unref state on a
23902         different call.
23903
23904 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
23905
23906         * support.cs: Return proper flags REF/OUT fixing the previous
23907         commit.  
23908
23909         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
23910         not used to mean `ref' but `ref or out' in ParameterReference
23911
23912         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
23913         full type signature instead of calling TypeManger.CSharpName
23914         ourselves. 
23915
23916         * support.cs (InternalParameters.ParameterDesc): Do not compare
23917         directly to the modflags, because REF/OUT will actually be bitsets
23918         if set. 
23919
23920         * delegate.cs (VerifyMethod): Check also the modifiers.
23921
23922         * cs-tokenizer.cs: Fix bug where floating point values with an
23923         exponent where a sign was missing was ignored.
23924
23925         * driver.cs: Allow multiple assemblies to be specified in a single
23926         /r: argument
23927
23928 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
23929
23930         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
23931         because identifiers after a parenthesis would end up in this kind
23932         of production, and we needed to desamiguate it for having casts
23933         like:
23934
23935                 (UserDefinedType *) xxx
23936
23937 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
23938
23939         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
23940         we should set on the Bindingflags.NonPublic, but not turn on
23941         private_ok.  private_ok controls whether a Private member is
23942         returned (this is chekced on the filter routine), while the
23943         BindingFlags.NonPublic just controls whether private/protected
23944         will be allowed.   This fixes the problem part of the problem of
23945         private properties being allowed to be used in derived classes.
23946
23947         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
23948         so we can call the children DoResolveLValue method (this will
23949         properly signal errors on lvalue assignments to base properties)
23950
23951         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
23952         getter are null, and we have a property info, we know that this
23953         happened because the lookup failed, so we report an error 122 for
23954         protection level violation.
23955
23956         We also silently return if setter and getter are null in the
23957         resolve functions, this condition only happens if we have flagged
23958         the error before.  This is the other half of the problem. 
23959
23960         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
23961         not have accessibility information, that is why we were returning
23962         true in the filter function in typemanager.cs.
23963
23964         To properly report 122 (property is inaccessible because of its
23965         protection level) correctly, we report this error in ResolveAccess
23966         by failing if both the setter and the getter are lacking (ie, the
23967         lookup failed). 
23968
23969         DoResolve and DoLResolve have been modified to check for both
23970         setter/getter being null and returning silently, the reason being
23971         that I did not want to put the knowledge about this error in upper
23972         layers, like:
23973
23974         int old = Report.Errors;
23975         x = new PropertyExpr (...);
23976         if (old != Report.Errors)
23977                 return null;
23978         else
23979                 return x;
23980
23981         So the property expr is returned, but it is invalid, so the error
23982         will be flagged during the resolve process. 
23983
23984         * class.cs: Remove InheritablePropertySignatureCompare from the
23985         class, as we no longer depend on the property signature to compute
23986         whether it is possible to implement a method or not.
23987
23988         The reason is that calling PropertyInfo.GetGetMethod will return
23989         null (in .NET, in Mono it works, and we should change this), in
23990         cases where the Get Method does not exist in that particular
23991         class.
23992
23993         So this code:
23994
23995         class X { public virtual int A { get { return 1; } } }
23996         class Y : X { }
23997         class Z : Y { public override int A { get { return 2; } } }
23998
23999         Would fail in Z because the parent (Y) would not have the property
24000         defined.  So we avoid this completely now (because the alternative
24001         fix was ugly and slow), and we now depend exclusively on the
24002         method names.
24003
24004         (PropertyBase.CheckBase): Use a method-base mechanism to find our
24005         reference method, instead of using the property.
24006
24007         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
24008         routines are gone now.
24009
24010         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
24011         names, they were incorrectly named.
24012
24013         * cs-tokenizer.cs: Return are more gentle token on failure. 
24014
24015         * pending.cs (PendingImplementation.InterfaceMethod): This routine
24016         had an out-of-sync index variable, which caused it to remove from
24017         the list of pending methods the wrong method sometimes.
24018
24019 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
24020
24021         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
24022         CanWrite, because those refer to this particular instance of the
24023         property, and do not take into account the fact that we can
24024         override single members of a property.
24025
24026         Constructor requires an EmitContext.  The resolution process does
24027         not happen here, but we need to compute the accessors before,
24028         because the resolution does not always happen for properties.
24029
24030         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
24031         subclass, before we did not update this flag, but we did update
24032         bindingflags. 
24033
24034         (GetAccessors): Drop this routine, as it did not work in the
24035         presence of partially overwritten set/get methods. 
24036
24037         Notice that this broke the cs1540 detection, but that will require
24038         more thinking. 
24039
24040 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24041
24042         * class.cs:
24043         * codegen.cs:
24044         * driver.cs: issue a warning instead of an error if we don't support
24045         debugging for the platform. Also ignore a couple of errors that may
24046         arise when trying to write the symbols. Undo my previous patch.
24047
24048 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24049
24050         * driver.cs: ignore /debug switch except for Unix platforms.
24051
24052 2002-10-23  Nick Drochak  <ndrochak@gol.com>
24053
24054         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
24055
24056 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
24057
24058         * driver.cs: Do not make mcs-debug conditional, so we do not break
24059         builds that use it.
24060
24061         * statement.cs (UsageVector.MergeChildren): I would like Martin to
24062         review this patch.  But basically after all the children variables
24063         have been merged, the value of "Breaks" was not being set to
24064         new_breaks for Switch blocks.  I think that it should be set after
24065         it has executed.  Currently I set this to the value of new_breaks,
24066         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
24067         conservative, but I do not understand this code very well.
24068
24069         I did not break anything in the build, so that is good ;-)
24070
24071         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
24072
24073 2002-10-20  Mark Crichton  <crichton@gimp.org>
24074
24075         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
24076
24077 2002-10-20  Nick Drochak  <ndrochak@gol.com>
24078
24079         * cfold.cs: Fixed compile blocker.
24080
24081 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
24082
24083         * driver.cs: I was chekcing the key, not the file.
24084
24085 2002-10-19  Ravi Pratap  <ravi@ximian.com>
24086
24087         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
24088         message that we were generating - we just need to silently return
24089         a null.
24090
24091 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
24092
24093         * class.cs (Event.Define): Change my previous commit, as this
24094         breaks the debugger.  This is a temporary hack, as it seems like
24095         the compiler is generating events incorrectly to begin with.
24096
24097         * expression.cs (Binary.ResolveOperator): Added support for 
24098         "U operator - (E x, E y)"
24099
24100         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
24101         y)".
24102
24103         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
24104         init-only variables, but this path did not take into account that
24105         there might be also instance readonly variables.  Correct this
24106         problem. 
24107
24108         This fixes bug 32253
24109
24110         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
24111         delegates as well.
24112
24113         * driver.cs: Change the extension for modules to `netmodule'
24114
24115         * cs-parser.jay: Improved slightly the location tracking for
24116         the debugger symbols.
24117
24118         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
24119         modifiers that were specified instead of the hardcoded value
24120         (FamAndAssem).  This was basically ignoring the static modifier,
24121         and others.  Fixes 32429.
24122
24123         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
24124         fixed a bug in the process (32476)
24125
24126         * expression.cs (ArrayAccess.EmitAssign): Patch from
24127         hwang_rob@yahoo.ca that fixes bug 31834.3
24128
24129 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
24130
24131         * driver.cs: Make the module extension .netmodule.
24132
24133 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
24134
24135         * driver.cs: Report an error if the resource file is not found
24136         instead of crashing.
24137
24138         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
24139         false, like Emit does.
24140
24141 2002-10-16  Nick Drochak  <ndrochak@gol.com>
24142
24143         * typemanager.cs: Remove unused private member.  Also reported mcs
24144         bug to report this as a warning like csc.
24145
24146 2002-10-15  Martin Baulig  <martin@gnome.org>
24147
24148         * statement.cs (Statement.Emit): Made this a virtual method; emits
24149         the line number info and calls DoEmit().
24150         (Statement.DoEmit): New protected abstract method, formerly knows
24151         as Statement.Emit().
24152
24153         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
24154
24155 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
24156
24157         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
24158         have fixed a remaining problem: not every AddXXXX was adding a
24159         fully qualified name.  
24160
24161         Now everyone registers a fully qualified name in the DeclSpace as
24162         being defined instead of the partial name.  
24163
24164         Downsides: we are slower than we need to be due to the excess
24165         copies and the names being registered this way.  
24166
24167         The reason for this is that we currently depend (on the corlib
24168         bootstrap for instance) that types are fully qualified, because
24169         we dump all the types in the namespace, and we should really have
24170         types inserted into the proper namespace, so we can only store the
24171         basenames in the defined_names array.
24172
24173 2002-10-10  Martin Baulig  <martin@gnome.org>
24174
24175         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
24176         from bug #31834, see the bug report for a testcase which is
24177         miscompiled.
24178
24179 2002-10-10  Martin Baulig  <martin@gnome.org>
24180
24181         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
24182         flow analysis code for this.
24183
24184         * statement.cs (Do, While, For): Tell the flow analysis code about
24185         infinite loops.
24186         (FlowBranching.UsageVector): Added support for infinite loops.
24187         (Block.Resolve): Moved the dead code elimination here and use flow
24188         analysis to do it.
24189
24190 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
24191
24192         * class.cs (Field.Define): Catch cycles on struct type
24193         definitions. 
24194
24195         * typemanager.cs (IsUnmanagedtype): Do not recursively check
24196         fields if the fields are static.  We only need to check instance
24197         fields. 
24198
24199         * expression.cs (As.DoResolve): Test for reference type.
24200
24201         * statement.cs (Using.ResolveExpression): Use
24202         ConvertImplicitRequired, not ConvertImplicit which reports an
24203         error on failture
24204         (Using.ResolveLocalVariableDecls): ditto.
24205
24206         * expression.cs (Binary.ResolveOperator): Report errors in a few
24207         places where we had to.
24208
24209         * typemanager.cs (IsUnmanagedtype): Finish implementation.
24210
24211 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
24212
24213         * expression.cs: Use StoreFromPtr instead of extracting the type
24214         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
24215
24216         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
24217         an enumeration value to a System.Enum, but System.Enum is not a
24218         value type, but an class type, so we need to box.
24219
24220         (Expression.ConvertExplicit): One codepath could return
24221         errors but not flag them.  Fix this.  Fixes #31853
24222
24223         * parameter.cs (Resolve): Do not allow void as a parameter type.
24224
24225 2002-10-06  Martin Baulig  <martin@gnome.org>
24226
24227         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
24228         if it's a class type and not a struct.  Fixes #31815.
24229
24230 2002-10-06  Martin Baulig  <martin@gnome.org>
24231
24232         * statement.cs: Reworked the flow analysis code a bit to make it
24233         usable for dead code elimination.
24234
24235 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24236
24237         * cs-parser.jay: allow empty source files. Fixes bug #31781.
24238
24239 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
24240
24241         * expression.cs (ComposedCast.DoResolveType): A quick workaround
24242         to fix the test 165, will investigate deeper.
24243
24244 2002-10-04  Martin Baulig  <martin@gnome.org>
24245
24246         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
24247         finally blocks actually work.
24248         (Try.Resolve): We don't need to create a sibling for `finally' if
24249         there is no finally block.
24250
24251 2002-10-04  Martin Baulig  <martin@gnome.org>
24252
24253         * class.cs (Constructor.Define): The default accessibility for a
24254         non-default constructor is private, not public.
24255
24256 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
24257
24258         * class.cs (Constructor): Make AllowedModifiers public, add
24259         EXTERN.
24260
24261         * cs-parser.jay: Perform the modifiers test here, as the
24262         constructor for the Constructor class usually receives a zero
24263         because of the way we create it (first we create, later we
24264         customize, and we were never checking the modifiers).
24265
24266         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
24267         is a version of LookupTypeReflection that includes the type-name
24268         cache.  This can be used as a fast path for functions that know
24269         the fully qualified name and are only calling into *.GetType() to
24270         obtain a composed type.
24271
24272         This is also used by TypeManager.LookupType during its type
24273         composition.
24274
24275         (LookupType): We now also track the real type name, as sometimes
24276         we can get a quey for the real type name from things like
24277         ComposedCast.  This fixes bug 31422.
24278
24279         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
24280         complete type fullname, it does not have to go through the type
24281         resolution system to obtain the composed version of the type (for
24282         obtaining arrays or pointers).
24283
24284         (Conditional.Emit): Use the EmitBoolExpression to
24285         generate nicer code, as requested by Paolo.
24286
24287         (ArrayCreation.CheckIndices): Use the patch from
24288         hwang_rob@yahoo.ca to validate the array initializers. 
24289
24290 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
24291
24292         * class.cs (ConstructorInitializer.Emit): simplify code by using
24293         Invocation.EmitCall, and at the same time, fix the bugs in calling
24294         parent constructors that took variable arguments. 
24295
24296         * ecore.cs (Expression.ConvertNumericExplicit,
24297         Expression.ImplicitNumericConversion): Remove the code that
24298         manually wrapped decimal (InternalTypeConstructor call is now gone
24299         as well).
24300
24301         * expression.cs (Cast.TryReduce): Also handle decimal types when
24302         trying to perform a constant fold on the type.
24303
24304         * typemanager.cs (IsUnmanagedtype): Partially implemented.
24305
24306         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
24307         that only turned off an error report, and did nothing else. 
24308
24309 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
24310
24311         * driver.cs: Handle and ignore /fullpaths
24312
24313 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
24314
24315         * expression.cs (Binary.ResolveOperator): Catch the case where
24316         DoNumericPromotions returns true, 
24317
24318         (Binary.DoNumericPromotions): Simplify the code, and the tests.
24319
24320 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
24321
24322         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
24323         report error 70.
24324
24325 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
24326
24327         * ecore.cs (ConvertNumericExplicit): It is not enough that the
24328         conversion exists, but it is also required that the conversion be
24329         performed.  This manifested in "(Type64Enum) 2".  
24330
24331         * class.cs (TypeManager.AddMethod): The fix is not to change
24332         AddEnum, because that one was using a fully qualified name (every
24333         DeclSpace derivative does), but to change the AddMethod routine
24334         that was using an un-namespaced name.  This now correctly reports
24335         the duplicated name.
24336
24337         Revert patch until I can properly fix it.  The issue
24338         is that we have a shared Type space across all namespaces
24339         currently, which is wrong.
24340
24341         Options include making the Namespace a DeclSpace, and merge
24342         current_namespace/current_container in the parser.
24343
24344 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
24345
24346         * cs-parser.jay: Improve error reporting when we get a different
24347         kind of expression in local_variable_type and
24348         local_variable_pointer_type. 
24349
24350         Propagate this to avoid missleading errors being reported.
24351
24352         * ecore.cs (ImplicitReferenceConversion): treat
24353         TypeManager.value_type as a target just like object_type.   As
24354         code like this:
24355
24356         ValueType v = 1;
24357
24358         Is valid, and needs to result in the int 1 being boxed before it
24359         is assigned to the value type v.
24360
24361         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
24362         to validate the enumeration name.
24363
24364         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
24365         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
24366         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
24367
24368         * ecore.cs (TryImplicitIntConversion): When doing an
24369         implicit-enumeration-conversion, check if the type is 64-bits and
24370         perform a conversion before passing to EnumConstant.
24371
24372 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
24373
24374         * decl.cs (Error_AmbiguousTypeReference); New routine used to
24375         report ambiguous type references.  Unlike the MS version, we
24376         report what the ambiguity is.   Innovation at work ;-)
24377
24378         (DeclSpace.FindType): Require a location argument to
24379         display when we display an ambiguous error.
24380
24381         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
24382
24383         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
24384
24385         * expression.cs (EmitDynamicInitializers): Apply patch from
24386         hwang_rob@yahoo.ca that fixes the order in which we emit our
24387         initializers. 
24388
24389 2002-09-21  Martin Baulig  <martin@gnome.org>
24390
24391         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
24392         delegate takes no arguments.
24393
24394 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
24395
24396         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
24397         from integers.
24398
24399         * expression.cs: Extract the underlying type.
24400
24401         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
24402
24403         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
24404
24405 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
24406
24407         * class.cs (TypeContainer.DefineType): We can not use the nice
24408         PackingSize with the size set to 1 DefineType method, because it
24409         will not allow us to define the interfaces that the struct
24410         implements.
24411
24412         This completes the fixing of bug 27287
24413
24414         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
24415         means also structs.  This fixes part of the problem. 
24416         (Expresion.ImplicitReferenceConversionExists): ditto.
24417
24418         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
24419         error if there were no errors reported during the type lookup
24420         process, to avoid duplicates or redundant errors.  Without this
24421         you would get an ambiguous errors plus a type not found.  We have
24422         beaten the user enough with the first error.  
24423
24424         (DeclSparce.FindType): Emit a warning if we have an ambiguous
24425         reference. 
24426
24427         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
24428         during the resolution process, stop the lookup, this avoids
24429         repeated error reports (same error twice).
24430
24431         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
24432
24433         * typemanager.cs (LookupType): Redo the type lookup code to match
24434         the needs of System.Reflection.  
24435
24436         The issue is that System.Reflection requires references to nested
24437         types to begin with a "+" sign instead of a dot.  So toplevel
24438         types look like: "NameSpace.TopLevelClass", and nested ones look
24439         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
24440         levels. 
24441
24442 2002-09-19  Martin Baulig  <martin@gnome.org>
24443
24444         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
24445         says that a method always returns or always throws an exception,
24446         don't report the CS0161.
24447
24448         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
24449         set `Returns = new_returns'.
24450
24451 2002-09-19  Martin Baulig  <martin@gnome.org>
24452
24453         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
24454         to an enum constant, check for a CS0176.
24455
24456 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
24457
24458         * class.cs (TypeContainer.CheckPairedOperators): Now we check
24459         for operators that must be in pairs and report errors.
24460
24461         * ecore.cs (SimpleName.DoResolveType): During the initial type
24462         resolution process, when we define types recursively, we must
24463         check first for types in our current scope before we perform
24464         lookups in the enclosing scopes.
24465
24466         * expression.cs (MakeByteBlob): Handle Decimal blobs.
24467
24468         (Invocation.VerifyArgumentsCompat): Call
24469         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
24470         I thought we were supposed to always call this, but there are a
24471         few places in the code where we dont do it.
24472
24473 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
24474
24475         * driver.cs: Add support in -linkres and -resource to specify the
24476         name of the identifier.
24477
24478 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
24479
24480         * ecore.cs (StandardConversionExists): Sync with the conversion
24481         code: allow anything-* to void* conversions.
24482
24483         (FindMostSpecificSource): Use an Expression argument
24484         instead of a Type, because we might be handed over a Literal which
24485         gets a few more implicit conversions that plain types do not.  So
24486         this information was being lost.
24487
24488         Also, we drop the temporary type-holder expression when not
24489         required.
24490
24491 2002-09-17  Martin Baulig  <martin@gnome.org>
24492
24493         * class.cs (PropertyBase.CheckBase): Don't check the base class if
24494         this is an explicit interface implementation.
24495
24496 2002-09-17  Martin Baulig  <martin@gnome.org>
24497
24498         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
24499         different `IndexerName' attributes.
24500
24501         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
24502         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
24503         virtual CommonResolve().
24504
24505 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
24506
24507         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
24508         and convert that to the UnderlyingType.
24509
24510         * statement.cs (Foreach.Resolve): Indexers are just like variables
24511         or PropertyAccesses.
24512
24513         * cs-tokenizer.cs (consume_string): Track line numbers and columns
24514         inside quoted strings, we were not doing this before.
24515
24516 2002-09-16  Martin Baulig  <martin@gnome.org>
24517
24518         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
24519         resolve it.  This is needed for the definite assignment check of the
24520         instance expression, fixes bug #29846.
24521         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
24522
24523 2002-09-16  Nick Drochak  <ndrochak@gol.com>
24524
24525         * parameter.cs: Fix compile error.  Cannot reference static member
24526         from an instance object.  Is this an mcs bug?
24527
24528 2002-09-14  Martin Baulig  <martin@gnome.org>
24529
24530         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
24531         multiple times.  Fixes bug #30295, added test-166.cs.
24532
24533 2002-09-14  Martin Baulig  <martin@gnome.org>
24534
24535         * statement.cs (Block.Emit): Don't emit unreachable code.
24536         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
24537         `break' statements.
24538         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
24539
24540 2002-09-14  Martin Baulig  <martin@gnome.org>
24541
24542         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
24543         is set.
24544
24545 2002-09-14  Martin Baulig  <martin@gnome.org>
24546
24547         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
24548         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
24549         be false on the ms runtime.
24550
24551 2002-09-13  Martin Baulig  <martin@gnome.org>
24552
24553         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
24554         the CS0038 error message.
24555
24556 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
24557
24558         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
24559         constant inside, return it.
24560
24561 2002-09-12  Martin Baulig  <martin@gnome.org>
24562
24563         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
24564         implicit conversion can be done between enum types.
24565
24566         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
24567         check whether an implicit conversion to the current enum's UnderlyingType
24568         exists and report an error if not.
24569
24570         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
24571         without debugging support.
24572
24573         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
24574         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
24575
24576 2002-09-12  Martin Baulig  <martin@gnome.org>
24577
24578         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
24579
24580         * ecore.cs (IMemberExpr.DeclaringType): New property.
24581         (SimpleName.SimpleNameResolve): Check whether we're accessing a
24582         nonstatic member of an outer type (CS0038).
24583
24584 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
24585
24586         * driver.cs: Activate the using-error detector at warning level
24587         4 (at least for MS-compatible APIs).
24588
24589         * namespace.cs (VerifyUsing): Small buglett fix.
24590
24591         * pending.cs (PendingImplementation): pass the container pointer. 
24592
24593         * interface.cs (GetMethods): Allow for recursive definition.  Long
24594         term, I would like to move every type to support recursive
24595         definitions, not the current ordering mechanism that we have right
24596         now.
24597
24598         The situation is this: Attributes are handled before interfaces,
24599         so we can apply attributes to interfaces.  But some attributes
24600         implement interfaces, we will now handle the simple cases
24601         (recursive definitions will just get an error).  
24602
24603         * parameter.cs: Only invalidate types at the end if we fail to
24604         lookup all types.  
24605
24606 2002-09-09  Martin Baulig  <martin@gnome.org>
24607
24608         * ecore.cs (PropertyExpr.Emit): Also check for
24609         TypeManager.system_int_array_get_length so this'll also work when
24610         compiling corlib.  Fixes #30003.
24611
24612 2002-09-09  Martin Baulig  <martin@gnome.org>
24613
24614         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
24615         and throw an exception if we can't get the type's size.  Fixed #30040,
24616         added test-165.cs.
24617
24618 2002-09-09  Martin Baulig  <martin@gnome.org>
24619
24620         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
24621
24622         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
24623         context.  Fixes bug #30027.
24624
24625         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
24626         virtual functions.  Fixes bug #30043, added test-164.cs.
24627
24628 2002-09-08  Ravi Pratap  <ravi@ximian.com>
24629
24630         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
24631
24632 2002-09-08  Nick Drochak  <ndrochak@gol.com>
24633
24634         * driver.cs: Use an object to get the windows codepage since it's not a
24635         static property.
24636
24637 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
24638
24639         * statement.cs (For.Emit): for infinite loops (test == null)
24640         return whether there is a break inside, not always "true".
24641
24642         * namespace.cs (UsingEntry): New struct to hold the name of the
24643         using definition, the location where it is defined, and whether it
24644         has been used in a successful type lookup.
24645
24646         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
24647         strings.
24648
24649         * decl.cs: ditto.
24650
24651 2002-09-06  Ravi Pratap  <ravi@ximian.com>
24652
24653         * attribute.cs : Fix incorrect code which relied on catching
24654         a NullReferenceException to detect a null being passed in
24655         where an object was expected.
24656
24657 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
24658
24659         * statement.cs (Try): flag the catch variable as assigned
24660
24661         * expression.cs (Cast): Simplified by using ResolveType instead of
24662         manually resolving.
24663
24664         * statement.cs (Catch): Fix bug by using ResolveType.
24665
24666 2002-09-06  Ravi Pratap  <ravi@ximian.com>
24667
24668         * expression.cs (BetterConversion): Special case for when we have
24669         a NullLiteral as the argument and we have to choose between string
24670         and object types - we choose string the way csc does.
24671
24672         * attribute.cs (Attribute.Resolve): Catch the
24673         NullReferenceException and report error #182 since the Mono
24674         runtime no more has the bug and having this exception raised means
24675         we tried to select a constructor which takes an object and is
24676         passed a null.
24677
24678 2002-09-05  Ravi Pratap  <ravi@ximian.com>
24679
24680         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
24681         message (1502, 1503) when we can't locate a method after overload
24682         resolution. This is much more informative and closes the bug
24683         Miguel reported.
24684
24685         * interface.cs (PopulateMethod): Return if there are no argument
24686         types. Fixes a NullReferenceException bug.
24687
24688         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
24689         expressions too. Previously we were checking only in one place for
24690         positional arguments leaving out named arguments.
24691
24692         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
24693         type to the enum type is not allowed. Remove code corresponding to
24694         that.
24695
24696         (ConvertNumericExplicit): Allow explicit conversions from
24697         the underlying type to enum type. This precisely follows the spec
24698         and closes a bug filed by Gonzalo.
24699
24700 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24701
24702         * compiler.csproj:
24703         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
24704
24705 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
24706
24707         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
24708         it was important that we stored the right value after the
24709         reduction in `converted'.
24710
24711 2002-09-04  Martin Baulig  <martin@gnome.org>
24712
24713         * location.cs (Location.SymbolDocument): Use full pathnames for the
24714         source files.
24715
24716 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
24717
24718         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
24719         of the expression resolve mechanism, because that will catch the
24720         SimpleName error failures.
24721
24722         (Conditional): If we can not resolve the
24723         expression, return, do not crash.
24724
24725 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24726
24727         * cs-tokenizer.cs:
24728         (location): display token name instead of its number.
24729
24730 2002-08-28  Martin Baulig  <martin@gnome.org>
24731
24732         * expression.cs (Binary.ResolveOperator): Don't silently return
24733         but return an error if an operator cannot be applied between two
24734         enum types.
24735
24736 2002-08-28  Martin Baulig  <martin@gnome.org>
24737
24738         * class.cs (Constructor.Define): Set the permission attributes
24739         correctly instead of making all constructors public.
24740
24741 2002-08-28  Martin Baulig  <martin@gnome.org>
24742
24743         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
24744         for private members before reporting a CS0103; if we find anything,
24745         it's a CS0122.
24746
24747 2002-08-28  Martin Baulig  <martin@gnome.org>
24748
24749         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
24750         to check whether `closure_start_type == closure_invocation_type',
24751         we also need to check whether `m.DeclaringType == closure_invocation_type'
24752         before bypassing the permission checks.  We might be accessing
24753         protected/private members from the base class.
24754         (TypeManager.RealMemberLookup): Only set private_ok if private
24755         members were requested via BindingFlags.NonPublic.
24756
24757         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
24758
24759         * expression.cs (MemberAccess.ResolveMemberAccess): Set
24760         MethodGroupExpr.IsExplicitImpl if appropriate.
24761         (Invocation.DoResolve): Don't report the CS0120 for explicit
24762         interface implementations.
24763
24764 2002-08-27  Martin Baulig  <martin@gnome.org>
24765
24766         * expression.cs (Invocation.DoResolve): If this is a static
24767         method and we don't have an InstanceExpression, we must report
24768         a CS0120.
24769
24770 2002-08-25  Martin Baulig  <martin@gnome.org>
24771
24772         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
24773         `==' between a valuetype and an object.
24774
24775 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
24776
24777         * ecore.cs (TypeExpr): Provide a ToString method.
24778
24779 2002-08-24  Martin Baulig  <martin@gnome.org>
24780
24781         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
24782         now called proggie.dbg and it's a binary file.
24783
24784 2002-08-23  Martin Baulig  <martin@gnome.org>
24785
24786         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
24787
24788 2002-08-23  Martin Baulig  <martin@gnome.org>
24789
24790         * struct.cs (MyStructInfo.ctor): Make this work with empty
24791         structs; it's not allowed to use foreach() on null.
24792
24793 2002-08-23  Martin Baulig  <martin@gnome.org>
24794
24795         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
24796         writer the full pathname of the generated assembly.
24797
24798 2002-08-23  Martin Baulig  <martin@gnome.org>
24799
24800         * statements.cs (FlowBranching.UsageVector.MergeChildren):
24801         A `finally' block never returns or breaks; improved handling of
24802         unreachable code.
24803
24804 2002-08-23  Martin Baulig  <martin@gnome.org>
24805
24806         * statement.cs (Throw.Resolve): Allow `throw null'.
24807
24808 2002-08-23  Martin Baulig  <martin@gnome.org>
24809
24810         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
24811         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
24812         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
24813         MemberLookup would return a wrong event if this is an explicit
24814         interface implementation and the class has an event with the same
24815         name.
24816
24817 2002-08-23  Martin Baulig  <martin@gnome.org>
24818
24819         * statement.cs (Block.AddChildVariableNames): New public method.
24820         (Block.AddChildVariableName): Likewise.
24821         (Block.IsVariableNameUsedInChildBlock): Likewise.
24822         (Block.AddVariable): Check whether a variable name has already
24823         been used in a child block.
24824
24825         * cs-parser.jay (declare_local_variables): Mark all variable names
24826         from the current block as being used in a child block in the
24827         implicit block.
24828
24829 2002-08-23  Martin Baulig  <martin@gnome.org>
24830
24831         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
24832         find the symbol writer.
24833
24834         * driver.cs: csc also allows the arguments to /define being
24835         separated by commas, not only by semicolons.
24836
24837 2002-08-23  Martin Baulig  <martin@gnome.org>
24838
24839         * interface.cs (Interface.GetMembers): Added static check for events.
24840
24841 2002-08-15  Martin Baulig  <martin@gnome.org>
24842
24843         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
24844         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
24845
24846         * ecore.cs (Expression.MemberLookup): Added documentation and explained
24847         why the MethodData.EmitDestructor() change was necessary.
24848
24849 2002-08-20  Martin Baulig  <martin@gnome.org>
24850
24851         * class.cs (TypeContainer.FindMembers): Added static check for events.
24852
24853         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
24854
24855         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
24856         use Type.GetEvents(), not Type.FindMembers().
24857
24858 2002-08-20  Martin Baulig  <martin@gnome.org>
24859
24860         * decl.cs (MemberCache): Added a special method cache which will
24861         be used for method-only searched.  This ensures that a method
24862         search will return a MethodInfo with the correct ReflectedType for
24863         inherited methods.      
24864
24865 2002-08-20  Martin Baulig  <martin@gnome.org>
24866
24867         * decl.cs (DeclSpace.FindMembers): Made this public.
24868
24869 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24870
24871         * delegate.cs: fixed build on windows.
24872         [FIXME:  Filed as bug #29150: MCS must report these errors.]
24873
24874 2002-08-19  Ravi Pratap  <ravi@ximian.com>
24875
24876         * ecore.cs (StandardConversionExists): Return a false
24877         if we are trying to convert the void type to anything else
24878         since that is not allowed.
24879
24880         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
24881         we flag error 70 in the event an event is trying to be accessed
24882         directly from outside the declaring type.
24883
24884 2002-08-20  Martin Baulig  <martin@gnome.org>
24885
24886         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
24887         MemberCache from typemanager.cs to decl.cs.
24888
24889 2002-08-19  Martin Baulig  <martin@gnome.org>
24890
24891         * class.cs (TypeContainer): Implement IMemberContainer.
24892         (TypeContainer.DefineMembers): Create the MemberCache.
24893         (TypeContainer.FindMembers): Do better BindingFlags checking; only
24894         return public members if BindingFlags.Public was given, check
24895         whether members are static.
24896
24897 2002-08-16  Martin Baulig  <martin@gnome.org>
24898
24899         * decl.cs (DeclSpace.Define): Splitted this in Define and
24900         DefineMembers.  DefineMembers is called first and initializes the
24901         MemberCache.
24902
24903         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
24904         DefineMembers() on all our DeclSpaces.
24905
24906         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
24907         but call DefineMembers() on all nested interfaces.  We call their
24908         Define() in our new Define() function.
24909
24910         * interface.cs (Interface): Implement IMemberContainer.
24911         (Interface.Define): Moved all code except the attribute stuf to
24912         DefineMembers().
24913         (Interface.DefineMembers): Initialize the member cache.
24914
24915         * typemanager.cs (IMemberFinder): Removed this interface, we don't
24916         need this anymore since we can use MemberCache.FindMembers directly.
24917
24918 2002-08-19  Martin Baulig  <martin@gnome.org>
24919
24920         * typemanager.cs (MemberCache): When creating the cache for an
24921         interface type, add all inherited members.
24922         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
24923         to `out bool used_cache' and documented it.
24924         (TypeManager.MemberLookup): If we already used the cache in the first
24925         iteration, we don't need to do the interfaces check.
24926
24927 2002-08-19  Martin Baulig  <martin@gnome.org>
24928
24929         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
24930         here from IMemberFinder and don't implement this interface anymore.
24931         (DeclSpace.MemberCache): Moved here from IMemberFinder.
24932
24933         * typemanager.cs (IMemberFinder): This interface is now only used by
24934         classes which actually support the member cache.
24935         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
24936         since we only put DeclSpaces into this Hashtable.
24937         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
24938         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
24939
24940 2002-08-16  Martin Baulig  <martin@gnome.org>
24941
24942         * typemanager.cs (ICachingMemberFinder): Removed.
24943         (IMemberFinder.MemberCache): New property.
24944         (TypeManager.FindMembers): Merged this with RealFindMembers().
24945         This function will never be called from TypeManager.MemberLookup()
24946         so we can't use the cache here, just the IMemberFinder.
24947         (TypeManager.MemberLookup_FindMembers): Check whether the
24948         IMemberFinder has a MemberCache and call the cache's FindMembers
24949         function.
24950         (MemberCache): Rewrote larger parts of this yet another time and
24951         cleaned it up a bit.
24952
24953 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
24954
24955         * driver.cs (LoadArgs): Support quoting.
24956
24957         (Usage): Show the CSC-like command line arguments.
24958
24959         Improved a few error messages.
24960
24961 2002-08-15  Martin Baulig  <martin@gnome.org>
24962
24963         * typemanager.cs (IMemberContainer.Type): New property.
24964         (IMemberContainer.IsInterface): New property.
24965
24966         The following changes are conditional to BROKEN_RUNTIME, which is
24967         defined at the top of the file.
24968
24969         * typemanager.cs (MemberCache.MemberCache): Don't add the base
24970         class'es members, but add all members from TypeHandle.ObjectType
24971         if we're an interface.
24972         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
24973         is the current type.
24974         (MemberCache.CacheEntry.Container): Removed this field.
24975         (TypeHandle.GetMembers): Include inherited members.
24976
24977 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24978
24979         * typemanager.cs: fixed compilation and added a comment on a field that
24980         is never used.
24981
24982 2002-08-15  Martin Baulig  <martin@gnome.org>
24983
24984         * class.cs (ConstructorInitializer.Resolve): In the
24985         Expression.MemberLookup call, use the queried_type as
24986         invocation_type.
24987
24988         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
24989         declared' attribute, it's always true.
24990         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
24991         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
24992         temporary wrapper for FindMembers which tells MemberLookup whether
24993         members from the base classes are included in the return value.
24994         This will go away soon.
24995         (TypeManager.MemberLookup): Use this temporary hack here; once the
24996         new MemberCache is completed, we don't need to do the DeclaredOnly
24997         looping here anymore since the MemberCache will take care of this.
24998         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
24999         (MemberCache): When creating the MemberCache for a class, get
25000         members from the current class and all its base classes.
25001         (MemberCache.CacheEntry.Container): New field.  This is a
25002         temporary hack until the Mono runtime is fixed to distinguish
25003         between ReflectedType and DeclaringType.  It allows us to use MCS
25004         with both the MS runtime and the unfixed Mono runtime without
25005         problems and without accecting performance.
25006         (MemberCache.SearchMembers): The DeclaredOnly looping from
25007         TypeManager.MemberLookup is now done here.      
25008
25009 2002-08-14  Martin Baulig  <martin@gnome.org>
25010
25011         * statement.cs (MyStructInfo.MyStructInfo): Don't call
25012         Type.GetFields on dynamic types but get the fields from the
25013         corresponding TypeContainer.
25014         (MyStructInfo.GetStructInfo): Added check for enum types.
25015
25016         * typemanager.cs (MemberList.IsSynchronized): Implemented.
25017         (MemberList.SyncRoot): Implemented.
25018         (TypeManager.FilterWithClosure): No need to check permissions if
25019         closure_start_type == closure_invocation_type, don't crash if
25020         closure_invocation_type is null.
25021
25022 2002-08-13  Martin Baulig  <martin@gnome.org>
25023
25024         Rewrote TypeContainer.FindMembers to use a member cache.  This
25025         gives us a speed increase of about 35% for the self-hosting MCS
25026         build and of about 15-20% for the class libs (both on GNU/Linux).
25027
25028         * report.cs (Timer): New class to get enhanced profiling.  This
25029         whole class is "TIMER" conditional since it remarkably slows down
25030         compilation speed.
25031
25032         * class.cs (MemberList): New class.  This is an IList wrapper
25033         which we're now using instead of passing MemberInfo[]'s around to
25034         avoid copying this array unnecessarily.
25035         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
25036         (ICachingMemberFinder, IMemberContainer): New interface.
25037         (TypeManager.FilterWithClosure): If `criteria' is null, the name
25038         has already been checked, otherwise use it for the name comparision.
25039         (TypeManager.FindMembers): Renamed to RealMemberFinder and
25040         provided wrapper which tries to use ICachingMemberFinder.FindMembers
25041         if possible.  Returns a MemberList, not a MemberInfo [].
25042         (TypeHandle): New class, implements IMemberContainer.  We create
25043         one instance of this class per type, it contains a MemberCache
25044         which is used to do the member lookups.
25045         (MemberCache): New class.  Each instance of this class contains
25046         all members of a type and a name-based hash table.
25047         (MemberCache.FindMembers): This is our new member lookup
25048         function.  First, it looks up all members of the requested name in
25049         the hash table.  Then, it walks this list and sorts out all
25050         applicable members and returns them.
25051
25052 2002-08-13  Martin Baulig  <martin@gnome.org>
25053
25054         In addition to a nice code cleanup, this gives us a performance
25055         increase of about 1.4% on GNU/Linux - not much, but it's already
25056         half a second for the self-hosting MCS compilation.
25057
25058         * typemanager.cs (IMemberFinder): New interface.  It is used by
25059         TypeManager.FindMembers to call FindMembers on a TypeContainer,
25060         Enum, Delegate or Interface.
25061         (TypeManager.finder_to_member_finder): New PtrHashtable.
25062         (TypeManager.finder_to_container): Removed.
25063         (TypeManager.finder_to_delegate): Removed.
25064         (TypeManager.finder_to_interface): Removed.
25065         (TypeManager.finder_to_enum): Removed.
25066
25067         * interface.cs (Interface): Implement IMemberFinder.
25068
25069         * delegate.cs (Delegate): Implement IMemberFinder.
25070
25071         * enum.cs (Enum): Implement IMemberFinder.
25072
25073         * class.cs (TypeContainer): Implement IMemberFinder.
25074
25075 2002-08-12  Martin Baulig  <martin@gnome.org>
25076
25077         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
25078
25079 2002-08-12  Martin Baulig  <martin@gnome.org>
25080
25081         * ecore.cs (ITypeExpression): New interface for expressions which
25082         resolve to a type.
25083         (TypeExpression): Renamed to TypeLookupExpression.
25084         (Expression.DoResolve): If we're doing a types-only lookup, the
25085         expression must implement the ITypeExpression interface and we
25086         call DoResolveType() on it.
25087         (SimpleName): Implement the new ITypeExpression interface.
25088         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
25089         hack, the situation that we're only looking up types can't happen
25090         anymore when this method is called.  Moved the type lookup code to
25091         DoResolveType() and call it.
25092         (SimpleName.DoResolveType): This ITypeExpression interface method
25093         is now doing the types-only lookup.
25094         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
25095         (ResolveFlags): Added MaskExprClass.
25096
25097         * expression.cs (MemberAccess): Implement the ITypeExpression
25098         interface.
25099         (MemberAccess.DoResolve): Added support for a types-only lookup
25100         when we're called via ITypeExpression.DoResolveType().
25101         (ComposedCast): Implement the ITypeExpression interface.
25102
25103         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
25104         Expression.Resolve() with ResolveFlags.Type instead.
25105
25106 2002-08-12  Martin Baulig  <martin@gnome.org>
25107
25108         * interface.cs (Interface.Define): Apply attributes.
25109
25110         * attribute.cs (Attribute.ApplyAttributes): Added support for
25111         interface attributes.
25112
25113 2002-08-11  Martin Baulig  <martin@gnome.org>
25114
25115         * statement.cs (Block.Emit): Only check the "this" variable if we
25116         do not always throw an exception.
25117
25118         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
25119         whether the property has a set accessor.
25120
25121 2002-08-11  Martin Baulig  <martin@gnome.org>
25122
25123         Added control flow analysis support for structs.
25124
25125         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
25126         with control flow analysis turned off.
25127         (IVariable): New interface.
25128         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
25129         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
25130         (FieldExpr.DoResolve): Resolve the instance expression with flow
25131         analysis turned off and do the definite assignment check after the
25132         resolving when we know what the expression will resolve to.
25133
25134         * expression.cs (LocalVariableReference, ParameterReference):
25135         Implement the new IVariable interface, only call the flow analysis
25136         code if ec.DoFlowAnalysis is true.
25137         (This): Added constructor which takes a Block argument.  Implement
25138         the new IVariable interface.
25139         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
25140         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
25141         This does the definite assignment checks for struct members.
25142
25143         * class.cs (Constructor.Emit): If this is a non-static `struct'
25144         constructor which doesn't have any initializer, call
25145         Block.AddThisVariable() to tell the flow analysis code that all
25146         struct elements must be initialized before control returns from
25147         the constructor.
25148
25149         * statement.cs (MyStructInfo): New public class.
25150         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
25151         argument to this indexer.  If non-zero, check an individual struct
25152         member, not the whole struct.
25153         (FlowBranching.CheckOutParameters): Check struct members.
25154         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
25155         overloaded versions of these methods which take an additional
25156         `int field_idx' argument to check struct members.
25157         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
25158         overloaded versions of these methods which take an additional
25159         `string field_name' argument to check struct member.s
25160         (VariableInfo): Implement the IVariable interface.
25161         (VariableInfo.StructInfo): New public property.  Returns the
25162         MyStructInfo instance of the variable if it's a struct or null.
25163         (Block.AddThisVariable): New public method.  This is called from
25164         Constructor.Emit() for non-static `struct' constructor which do
25165         not have any initializer.  It creates a special variable for the
25166         "this" instance variable which will be checked by the flow
25167         analysis code to ensure that all of the struct's fields are
25168         initialized before control returns from the constructor.
25169         (UsageVector): Added support for struct members.  If a
25170         variable/parameter is a struct with N members, we reserve a slot
25171         in the usage vector for each member.  A struct is considered fully
25172         initialized if either the struct itself (slot 0) or all its
25173         members are initialized.
25174
25175 2002-08-08  Martin Baulig  <martin@gnome.org>
25176
25177         * driver.cs (Driver.MainDriver): Only report an error CS5001
25178         if there were no compilation errors.
25179
25180         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
25181         `UnsafeContext' property to determine whether the parent is in
25182         unsafe context rather than checking the parent's ModFlags:
25183         classes nested in an unsafe class are unsafe as well.
25184
25185 2002-08-08  Martin Baulig  <martin@gnome.org>
25186
25187         * statement.cs (UsageVector.MergeChildren): Distinguish between
25188         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
25189         we return.  Added test17() and test18() to test-154.cs.
25190
25191 2002-08-08  Martin Baulig  <martin@gnome.org>
25192
25193         * typemanager.cs (TypeManager.FilterWithClosure): If we have
25194         Family access, make sure the invoking type isn't a subclass of the
25195         queried type (that'd be a CS1540).
25196
25197         * ecore.cs (Expression.MemberLookup): Added overloaded version of
25198         this method which takes an additional `Type invocation_type'.
25199
25200         * expression.cs (BaseAccess.DoResolve): Use the base type as
25201         invocation and query type.
25202         (MemberAccess.DoResolve): If the lookup failed and we're about to
25203         report a CS0122, try a lookup with the ec.ContainerType - if this
25204         succeeds, we must report a CS1540.
25205
25206 2002-08-08  Martin Baulig  <martin@gnome.org>
25207
25208         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
25209         (MethodGroupExpr): Implement the IMemberExpr interface.
25210
25211         * expression (MemberAccess.ResolveMemberAccess): No need to have
25212         any special code for MethodGroupExprs anymore, they're now
25213         IMemberExprs.   
25214
25215 2002-08-08  Martin Baulig  <martin@gnome.org>
25216
25217         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
25218         Family, FamANDAssem and FamORAssem permissions.
25219         (TypeManager.IsSubclassOrNestedChildOf): New public method.
25220
25221 2002-08-08  Martin Baulig  <martin@gnome.org>
25222
25223         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
25224         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
25225         or loop block.
25226
25227 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
25228
25229         * driver.cs: implemented /resource option to embed managed resources.
25230
25231 2002-08-07  Martin Baulig  <martin@gnome.org>
25232
25233         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
25234         (FieldBase.HasFieldInitializer): New public property.
25235         (FieldBase.GetInitializerExpression): New public method.  Resolves and
25236         returns the field initializer and makes sure it is only resolved once.
25237         (TypeContainer.EmitFieldInitializers): Call
25238         FieldBase.GetInitializerExpression to get the initializer, this ensures
25239         that it isn't resolved multiple times.
25240
25241         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
25242         the resolving process (SimpleName/MemberLookup) that we're currently
25243         emitting a field initializer (which must not access any instance members,
25244         this is an error CS0236).
25245
25246         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
25247         argument, if the `IsFieldInitializer' flag is set, we must report and
25248         error CS0236 and not an error CS0120.   
25249
25250 2002-08-07  Martin Baulig  <martin@gnome.org>
25251
25252         * ecore.cs (IMemberExpr): New public interface.
25253         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
25254         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
25255         if the expression is an IMemberExpr.
25256
25257         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
25258         to be null, implicitly default to `this' if we're non-static in
25259         this case.  Simplified the code a lot by using the new IMemberExpr
25260         interface.  Also fixed bug #28176 here.
25261
25262 2002-08-06  Martin Baulig  <martin@gnome.org>
25263
25264         * cs-parser.jay (SimpleLookup): Removed.  We need to create
25265         ParameterReferences during semantic analysis so that we can do a
25266         type-only search when resolving Cast, TypeOf and SizeOf.
25267         (block): Pass the `current_local_parameters' to the Block's
25268         constructor.
25269
25270         * class.cs (ConstructorInitializer): Added `Parameters parameters'
25271         argument to the constructor.
25272         (ConstructorInitializer.Resolve): Create a temporary implicit
25273         block with the parameters.
25274
25275         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
25276         references here if we aren't doing a type-only search.
25277
25278         * statement.cs (Block): Added constructor which takes a
25279         `Parameters parameters' argument.
25280         (Block.Parameters): New public property.
25281
25282         * support.cs (InternalParameters.Parameters): Renamed `parameters'
25283         to `Parameters' and made it public readonly.
25284
25285 2002-08-06  Martin Baulig  <martin@gnome.org>
25286
25287         * ecore.cs (Expression.Warning): Made this public as well.
25288
25289         * report.cs (Report.Debug): Print the contents of collections.
25290
25291 2002-08-06  Martin Baulig  <martin@gnome.org>
25292
25293         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
25294         used to tell Resolve() which kinds of expressions it may return.
25295         (Expression.Resolve): Added overloaded version of this method which
25296         takes a `ResolveFlags flags' argument.  This can be used to tell
25297         Resolve() which kinds of expressions it may return.  Reports a
25298         CS0118 on error.
25299         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
25300         ResolveFlags.SimpleName.
25301         (Expression.Error118): Added overloaded version of this method which
25302         takes a `ResolveFlags flags' argument.  It uses the flags to determine
25303         which kinds of expressions are allowed.
25304
25305         * expression.cs (Argument.ResolveMethodGroup): New public method.
25306         Resolves an argument, but allows a MethodGroup to be returned.
25307         This is used when invoking a delegate.
25308
25309         * TODO: Updated a bit.
25310
25311 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25312
25313         Fixed compilation with csc.
25314
25315         * ecore.cs: Expression.Error made public. Is this correct? Should
25316         Warning be made public too?
25317
25318         * expression.cs: use ea.Location instead of ea.loc.
25319         [FIXME:  Filed as bug #28607: MCS must report these errors.]
25320
25321 2002-08-06  Martin Baulig  <martin@gnome.org>
25322
25323         * ecore.cs (Expression.loc): Moved the location here instead of
25324         duplicating it in all derived classes.
25325         (Expression.Location): New public property.
25326         (Expression.Error, Expression.Warning): Made them non-static and
25327         removed the location argument.
25328         (Expression.Warning): Added overloaded version which takes an
25329         `int level' argument.
25330         (Expression.Error118): Make this non-static and removed the
25331         expression and location arguments.
25332         (TypeExpr): Added location argument to the constructor.
25333
25334         * expression.cs (StaticCallExpr): Added location argument to
25335         the constructor.
25336         (Indirection, PointerArithmetic): Likewise.
25337         (CheckedExpr, UnCheckedExpr): Likewise.
25338         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
25339         (StringPtr): Likewise.
25340
25341
25342 2002-08-05  Martin Baulig  <martin@gnome.org>
25343
25344         * expression.cs (BaseAccess.DoResolve): Actually report errors.
25345
25346         * assign.cs (Assign.DoResolve): Check whether the source
25347         expression is a value or variable.
25348
25349         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
25350         while resolving the corresponding blocks.
25351
25352         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
25353         an error, don't silently return null.
25354
25355         * statement.cs (Block.AddVariable): Do the error reporting here
25356         and distinguish between CS0128 and CS0136.
25357         (Block.DoResolve): Report all unused labels (warning CS0164).
25358         (LabeledStatement): Pass the location to the constructor.
25359         (LabeledStatement.HasBeenReferenced): New property.
25360         (LabeledStatement.Resolve): Set it to true here.
25361
25362         * statement.cs (Return.Emit): Return success even after reporting
25363         a type mismatch error (CS0126 or CS0127), this is what csc does and
25364         it avoids confusing the users with any consecutive errors.
25365
25366 2002-08-05  Martin Baulig  <martin@gnome.org>
25367
25368         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
25369
25370         * const.cs (Const.LookupConstantValue): Catch circular definitions.
25371
25372         * expression.cs (MemberAccess.DoResolve): Silently return if an
25373         error has already been reported.
25374
25375         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
25376         error has already been reported.
25377
25378 2002-08-05  Martin Baulig  <martin@gnome.org>
25379
25380         * statement.cs (UsageVector): Only initialize the `parameters'
25381         vector if we actually have any "out" parameters.
25382
25383 2002-08-05  Martin Baulig  <martin@gnome.org>
25384
25385         * expression.cs (Binary.ResolveOperator): When combining delegates,
25386         they must have the same type.
25387
25388 2002-08-05  Martin Baulig  <martin@gnome.org>
25389
25390         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
25391         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
25392         work with the ms runtime and we also don't need it: if we're a
25393         PropertyBuilder and not in the `indexer_arguments' hash, then we
25394         are a property and not an indexer.
25395
25396         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
25397         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
25398         since the latter one doesn't work with the ms runtime.
25399
25400 2002-08-03  Martin Baulig  <martin@gnome.org>
25401
25402         Fixed bugs #27998 and #22735.
25403
25404         * class.cs (Method.IsOperator): New public field.
25405         (Method.CheckBase): Report CS0111 if there's already a method
25406         with the same parameters in the current class.  Report CS0508 when
25407         attempting to change the return type of an inherited method.
25408         (MethodData.Emit): Report CS0179 if a method doesn't have a body
25409         and it's not marked abstract or extern.
25410         (PropertyBase): New abstract base class for Property and Indexer.
25411         (PropertyBase.CheckBase): Moved here from Property and made it work
25412         for indexers.
25413         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
25414         the same so we can reuse it there.
25415         (Property, Indexer): Derive from PropertyBase.
25416         (MethodSignature.inheritable_property_signature_filter): New delegate
25417         to find properties and indexers.
25418
25419         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
25420         argument and improved error reporting.
25421
25422         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
25423         EmptyReadOnlyParameters and made it a property.
25424
25425         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
25426         version of this method which takes a `PropertyInfo indexer'.
25427         (TypeManager.RegisterIndexer): New method.
25428
25429         * class.cs: Added myself as author of this file :-)
25430
25431 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25432
25433         * class.cs: fixed compilation on windoze.
25434
25435 2002-08-03  Martin Baulig  <martin@gnome.org>
25436
25437         * interface.cs (Interface.GetInterfaceBases): Check whether all
25438         base interfaces are at least as accessible than the current one.
25439
25440         * class.cs (TypeContainer.GetClassBases): Check whether base types
25441         are at least as accessible than the current type.
25442         (TypeContainer.AsAccessible): Implemented and made non-static.
25443         (MemberBase.CheckParameters): Report errors if the accessibility
25444         checks fail.
25445
25446         * delegate.cs (Delegate.Delegate): The default visibility is
25447         internal for top-level types and private for nested types.
25448         (Delegate.Define): Report errors if the accessibility checks fail.
25449
25450         * enum.cs (Enum.Enum): The default visibility is internal for
25451         top-level types and private for nested types.
25452         (Enum.DefineType): Compute the correct visibility.
25453
25454         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
25455         function which takes a `bool is_toplevel' instead of a TypeContainer.
25456
25457         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
25458         builtin type.
25459
25460 2002-08-02  Martin Baulig  <martin@gnome.org>
25461
25462         * expression.cs (LocalVariableReferenc): Added constructor which
25463         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
25464         (LocalVariableReference.IsReadOnly): New property.
25465         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
25466         variable is readonly, use our own readonly flag to do this; you can
25467         use the new constructor to get a writable reference to a read-only
25468         variable.
25469
25470         * cs-parser.jay (foreach_statement, using_statement): Get a writable
25471         reference to the local variable.
25472
25473 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
25474
25475         * rootcontext.cs (ResolveCore): Also include System.Exception
25476
25477         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
25478         we reach an EmptyStatement.
25479
25480         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
25481         is also fine.
25482
25483         * expression.cs (Binary.ResolveOperator): Check error result in
25484         two places.
25485
25486         use brtrue/brfalse directly and avoid compares to null.
25487
25488 2002-08-02  Martin Baulig  <martin@gnome.org>
25489
25490         * class.cs (TypeContainer.Define): Define all nested interfaces here.
25491         Fixes bug #28407, added test-155.cs.
25492
25493 2002-08-01  Martin Baulig  <martin@gnome.org>
25494
25495         * class.cs (Event.EmitDefaultMethod): Make this work with static
25496         events.  Fixes #28311, added verify-3.cs.
25497
25498 2002-08-01  Martin Baulig  <martin@gnome.org>
25499
25500         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
25501         `is_disposable' fields.
25502         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
25503         `hm.is_disposable' if we're using the collection pattern.
25504         (Foreach.EmitCollectionForeach): Use the correct type for the
25505         enumerator's local variable, only emit the try/finally block if
25506         necessary (fixes #27713).
25507
25508 2002-08-01  Martin Baulig  <martin@gnome.org>
25509
25510         * ecore.cs (Expression.report118): Renamed to Error118 and made
25511         it public static.
25512
25513         * statement.cs (Throw.Resolve): Check whether the expression is of
25514         the correct type (CS0118) and whether the type derives from
25515         System.Exception (CS0155).
25516         (Catch.Resolve): New method.  Do the type lookup here and check
25517         whether it derives from System.Exception (CS0155).
25518         (Catch.CatchType, Catch.IsGeneral): New public properties.
25519
25520         * typemanager.cs (TypeManager.exception_type): Added.
25521
25522 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
25523
25524         * driver.cs: Updated About function.
25525
25526 2002-07-31  Martin Baulig  <martin@gnome.org>
25527
25528         Implemented Control Flow Analysis.
25529
25530         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
25531         (EmitContext.CurrentBranching): Added.
25532         (EmitContext.StartFlowBranching): Added.
25533         (EmitContext.EndFlowBranching): Added.
25534         (EmitContext.KillFlowBranching): Added.
25535         (EmitContext.IsVariableAssigned): Added.
25536         (EmitContext.SetVariableAssigned): Added.
25537         (EmitContext.IsParameterAssigned): Added.
25538         (EmitContext.SetParameterAssigned): Added.
25539         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
25540         Added control flow analysis stuff here.
25541
25542         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
25543         resolve the expression as lvalue.
25544         (LocalVariableReference.DoResolve): Check whether the variable has
25545         already been assigned.
25546         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
25547         the parameter as assigned here.
25548         (ParameterReference.DoResolve): Check whether the parameter has already
25549         been assigned.
25550         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
25551         expression as lvalue.
25552
25553         * statement.cs (FlowBranching): New class for the flow analysis code.
25554         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
25555         (LabeledStatement.IsDefined): New public property.
25556         (LabeledStatement.AddUsageVector): New public method to tell flow
25557         analyis that the label may be reached via a forward jump.
25558         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
25559         flow analysis.
25560         (VariableInfo.Number): New public field.  This is used by flow analysis
25561         to number all locals of a block.
25562         (Block.CountVariables): New public property.  This is the number of
25563         local variables in this block (including the locals from all parent
25564         blocks).
25565         (Block.EmitMeta): Number all the variables.
25566
25567         * statement.cs: Added flow analysis support to all classes.
25568
25569 2002-07-31  Martin Baulig  <martin@gnome.org>
25570
25571         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
25572         To get debugging messages, compile mcs with /define:MCS_DEBUG and
25573         then use this argument.
25574
25575         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
25576
25577         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
25578         use this to specify /define options.
25579
25580 2002-07-29  Martin Baulig  <martin@gnome.org>
25581
25582         * statement.cs (Fixed): Moved all code that does variable lookups
25583         and resolvings from Emit to Resolve.
25584
25585         * statement.cs (For): Moved all code that does variable lookups
25586         and resolvings from Emit to Resolve.
25587
25588         * statement.cs (Using): Moved all code that does variable lookups
25589         and resolvings from Emit to Resolve.
25590
25591 2002-07-29  Martin Baulig  <martin@gnome.org>
25592
25593         * attribute.cs (Attribute.Resolve): Explicitly catch a
25594         System.NullReferenceException when creating the
25595         CustromAttributeBuilder and report a different warning message.
25596
25597 2002-07-29  Martin Baulig  <martin@gnome.org>
25598
25599         * support.cs (ParameterData.ParameterName): Added method to
25600         get the name of a parameter.
25601
25602         * typemanager.cs (TypeManager.IsValueType): New public method.
25603
25604 2002-07-29  Martin Baulig  <martin@gnome.org>
25605
25606         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
25607         is a flag which specifies that it's either ref or out.
25608         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
25609         the out parameter to `out Parameter.Modifier mod', also set the
25610         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
25611
25612         * support.cs (InternalParameters.ParameterModifier): Distinguish
25613         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
25614         Parameter.Modifier.ISBYREF flag if it's either ref or out.
25615
25616         * expression.cs (Argument.GetParameterModifier): Distinguish
25617         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
25618         Parameter.Modifier.ISBYREF flag if it's either ref or out.
25619
25620 2002-07-29  Martin Baulig  <martin@gnome.org>
25621
25622         * expression.cs (ParameterReference.ParameterReference): Added
25623         `Location loc' argument to the constructor.
25624
25625         * cs-parser.jay: Pass location to ParameterReference.
25626
25627 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
25628
25629         * statement.cs (Try): Initialize the location.
25630
25631         * cs-parser.jay: pass location to Try.
25632
25633         * expression.cs (Unary.Reduce): Change the prototype to return
25634         whether a constant fold could be performed or not.  The result is
25635         returned in an out parameters.  In the case of Indirection and
25636         AddressOf, we want to perform the full tests.
25637
25638 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
25639
25640         * statement.cs (Statement.Emit): Flag dead code.
25641
25642 2002-07-27  Andrew Birkett  <andy@nobugs.org>
25643
25644         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
25645
25646 2002-07-27  Martin Baulig  <martin@gnome.org>
25647
25648         * class.cs (MethodData.Define): Put back call to
25649         TypeManager.AddMethod(), accidentally commented this out.
25650
25651         * report.cs (Debug): New public method to print debugging information,
25652         this is `[Conditional ("DEBUG")]'.
25653
25654 2002-07-26  Martin Baulig  <martin@gnome.org>
25655
25656         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
25657         (switch_statement): Push the current_block to the switch_stack and
25658         pop it again when we're done with the switch.
25659         (switch_section): The new block is a child of the current_block.
25660         Fixes bug #24007, added test-152.cs.
25661
25662 2002-07-27  Martin Baulig  <martin@gnome.org>
25663
25664         * expression.cs (Invocation.EmitArguments): When calling a varargs
25665         function with only its fixed arguments, we need to pass an empty
25666         array.
25667
25668 2002-07-27  Martin Baulig  <martin@gnome.org>
25669
25670         Mono 0.13 has been released.
25671
25672 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
25673
25674         * driver.cs: Rename --resource to --linkres, because that is what
25675         we do currently, we dont support --resource yet.
25676
25677         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
25678
25679 2002-07-25  Martin Baulig  <martin@gnome.org>
25680
25681         * class.cs (MethodData): New public class.  This is a `method builder'
25682         class for a method or one accessor of a Property/Indexer/Event.
25683         (MethodData.GetMethodFlags): Moved here from MemberBase.
25684         (MethodData.ApplyAttributes): Likewise.
25685         (MethodData.ApplyObsoleteAttribute): Likewise.
25686         (MethodData.ApplyConditionalAttribute): Likewise.
25687         (MethodData.ApplyDllImportAttribute): Likewise.
25688         (MethodData.CheckAbstractAndExternal): Likewise.
25689         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
25690         (MethodData.Emit): Formerly known as Method.Emit().
25691         (MemberBase): Moved everything which was specific to a single
25692         accessor/method to MethodData.
25693         (Method): Create a new MethodData and call Define() and Emit() on it.
25694         (Property, Indexer, Event): Create a new MethodData objects for each
25695         accessor and call Define() and Emit() on them.
25696
25697 2002-07-25  Martin Baulig  <martin@gnome.org>
25698
25699         Made MethodCore derive from MemberBase to reuse the code from there.
25700         MemberBase now also checks for attributes.
25701
25702         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
25703         (MemberBase.GetMethodFlags): Moved here from class Method and marked
25704         as virtual.
25705         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
25706         `CallingConventions cc' and `Attributes opt_attrs' arguments.
25707         (MemberBase.ApplyAttributes): New virtual method; applies the
25708         attributes to a method or accessor.
25709         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
25710         (MemberBase.ApplyConditionalAttribute): Likewise.
25711         (MemberBase.ApplyDllImportAttribute): Likewise.
25712         (MemberBase.CheckAbstractAndExternal): Likewise.
25713         (MethodCore.ParameterTypes): This is now a property instead of a
25714         method, it's initialized from DoDefineParameters().
25715         (MethodCore.ParameterInfo): Removed the set accessor.
25716         (MethodCore.DoDefineParameters): New protected virtual method to
25717         initialize ParameterTypes and ParameterInfo.
25718         (Method.GetReturnType): We can now simply return the MemberType.
25719         (Method.GetMethodFlags): Override the MemberBase version and add
25720         the conditional flags.
25721         (Method.CheckBase): Moved some code from Define() here, call
25722         DoDefineParameters() here.
25723         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
25724         here to avoid some larger code duplication.
25725         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
25726         ensure that abstract and external accessors don't declare a body.
25727
25728         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
25729         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
25730         lookup in the attribute's parent classes, so we need to abort as soon
25731         as we found the first match.
25732         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
25733         the attribute has no arguments.
25734
25735         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
25736         of a Method.
25737
25738 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25739
25740         * cs-parser.jay: reverted previous patch.
25741
25742 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25743
25744         * cs-parser.jay: fixed bug #22119.
25745
25746 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25747
25748         * attribute.cs: fixed compilation. The error was:
25749         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
25750         be assigned to before control leaves the current method."
25751         [FIXME:  Filed as bug #28186: MCS must report this error.]
25752
25753 2002-07-25  Martin Baulig  <martin@gnome.org>
25754
25755         * attribute.cs (Attribute.Conditional_GetConditionName): New static
25756         method to pull the condition name ouf of a Conditional attribute.
25757         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
25758         the obsolete message and error flag out of an Obsolete attribute.
25759
25760         * class.cs (Method.GetMethodFlags): New public method to get the
25761         TypeManager.MethodFlags for this method.
25762         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
25763         private methods.
25764         (Method.Define): Get and apply the Obsolete and Conditional attributes;
25765         if we're overriding a virtual function, set the new private variable
25766         `parent_method'; call the new TypeManager.AddMethod().
25767
25768         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
25769         the MethodBuilder and the Method in a PtrHashtable.
25770         (TypeManager.builder_to_method): Added for this purpose.
25771         (TypeManager.MethodFlags): Added IsObsoleteError.
25772         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
25773         Obsolete and Conditional arguments in MethodBuilders.  If we discover
25774         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
25775         the message from the attribute.
25776
25777 2002-07-24  Martin Baulig  <martin@gnome.org>
25778
25779         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
25780         preprocessor directives, ensure that the argument to #define/#undef is
25781         exactly one identifier and that it's actually an identifier.
25782
25783         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
25784         did not work ....
25785
25786 2002-07-24  Martin Baulig  <martin@gnome.org>
25787
25788         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
25789         initialize it to TypeManager.object_type in the constructor.
25790         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
25791         of the `hm.get_current' method if we're using the collection pattern.
25792         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
25793         for the explicit conversion to make it work when we're using the collection
25794         pattern and the `Current' property has a different return type than `object'.
25795         Fixes #27713.
25796
25797 2002-07-24  Martin Baulig  <martin@gnome.org>
25798
25799         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
25800         does not match, but don't report any errors.  This method is called in
25801         order for all methods in a MethodGroupExpr until a matching method is
25802         found, so we don't want to bail out if the first method doesn't match.
25803         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
25804         matches, report the 123.  Fixes #28070.
25805
25806 2002-07-24  Martin Baulig  <martin@gnome.org>
25807
25808         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
25809         TypeManager.TypeToCoreType() to the top of the method so the
25810         following equality checks will work.  Fixes #28107.
25811
25812 2002-07-24  Martin Baulig  <martin@gnome.org>
25813
25814         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
25815         operand is of type uint, and the other operand is of type sbyte,
25816         short or int, the operands are converted to type long." -
25817         Actually do what this comment already told us.  Fixes bug #28106,
25818         added test-150.cs.
25819
25820 2002-07-24  Martin Baulig  <martin@gnome.org>
25821
25822         * class.cs (MethodBase): New abstract class.  This is now a base
25823         class for Property, Indexer and Event to avoid some code duplication
25824         in their Define() and DefineMethods() methods.
25825         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
25826         generic methods for Define() and DefineMethods().
25827         (FieldBase): Derive from MemberBase, not MemberCore.
25828         (Property): Derive from MemberBase, not MemberCore.
25829         (Property.DefineMethod): Moved all the code from this method to the
25830         new MethodBase.DefineAccessor(), just call it with appropriate
25831         argumetnts.
25832         (Property.Define): Call the new Property.DoDefine(), this does some
25833         sanity checks and we don't need to duplicate the code everywhere.
25834         (Event): Derive from MemberBase, not MemberCore.
25835         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
25836         accessors, this will also make them work with interface events.
25837         (Indexer): Derive from MemberBase, not MemberCore.
25838         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
25839         (Indexer.Define): Use the new MethodBase functions.
25840
25841         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
25842         argument to the constructor.
25843         (Interface.FindMembers): Added support for interface events.
25844         (Interface.PopluateEvent): Implemented.
25845
25846         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
25847
25848 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
25849
25850         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
25851         but this is required to check for a method name being the same as
25852         the containing class.  
25853
25854         Handle this now.
25855
25856 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25857
25858         * interface.cs: initialize variable.
25859
25860 2002-07-23  Martin Baulig  <martin@gnome.org>
25861
25862         Implemented the IndexerName attribute in interfaces.
25863
25864         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
25865         name if this is an explicit interface implementation.
25866         (Indexer.InterfaceIndexerName): New public variable.  If we're
25867         implementing an interface indexer, this is the IndexerName in that
25868         interface.  Otherwise, it's the IndexerName.
25869         (Indexer.DefineMethod): If we're implementing interface indexer,
25870         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
25871         and Pending.ImplementIndexer methods.
25872         (Indexer.Define): Also define the PropertyBuilder if we're
25873         implementing an interface indexer and this is neither an explicit
25874         interface implementation nor do the IndexerName match the one in
25875         the interface.
25876
25877         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
25878         If a method is defined here, then we always need to create a proxy
25879         for it.  This is used when implementing interface indexers.
25880         (Pending.IsInterfaceIndexer): New public method.
25881         (Pending.ImplementIndexer): New public method.
25882         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
25883         This is used when implementing interface indexers to define a proxy
25884         if necessary.
25885         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
25886         define a proxy if necessary.
25887
25888         * interface.cs (Interface.IndexerName): New public variable.
25889         (Interface.PopulateIndexer): Set the IndexerName.
25890         (Interface.DefineIndexers): New private method.  Populate all the
25891         indexers and make sure their IndexerNames match.
25892
25893         * typemanager.cs (IndexerPropertyName): Added support for interface
25894         indexers.
25895
25896 2002-07-22  Martin Baulig  <martin@gnome.org>
25897
25898         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
25899         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
25900         ret if HasReturnLabel.
25901         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
25902         variables.
25903
25904         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
25905         and set the ec.LoopBeginTryCatchLevel.
25906         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
25907         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
25908         the current ec.TryCatchLevel, the branch goes out of an exception
25909         block.  In this case, we need to use Leave and not Br.
25910
25911 2002-07-22  Martin Baulig  <martin@gnome.org>
25912
25913         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
25914         block unless the block does not always return or it is contained in
25915         another try { ... } catch { ... } block.  Fixes bug #26506.
25916         Added verify-1.cs to the test suite.
25917
25918 2002-07-22  Martin Baulig  <martin@gnome.org>
25919
25920         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
25921         then we do not always return.  Fixes bug #24985.
25922
25923 2002-07-22  Martin Baulig  <martin@gnome.org>
25924
25925         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
25926         lookup on a per-class level; ie. walk up the class hierarchy until we
25927         found at least one applicable method, then choose the best among them.
25928         Fixes bug #24463 and test-29.cs.
25929
25930 2002-07-22  Martin Baulig  <martin@gnome.org>
25931
25932         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
25933         return types of the methods.  The return type is not part of the
25934         signature and we must not check it to make the `new' modifier work.
25935         Fixes bug #27999, also added test-147.cs.
25936         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
25937
25938         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
25939         on the method's return type.
25940
25941 2002-07-21  Martin Baulig  <martin@gnome.org>
25942
25943         * assign.cs: Make this work if the rightmost source is a constant and
25944         we need to do an implicit type conversion.  Also adding a few more tests
25945         to test-38.cs which should have caught this.
25946
25947         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
25948         target in the makefile for this.  The makefile.gnu is primarily intended
25949         for end-users who don't want to debug the compiler.
25950
25951 2002-07-21  Martin Baulig  <martin@gnome.org>
25952
25953         * assign.cs: Improved the Assign class so it can now handle embedded
25954         assignments (X = Y = Z = something).  As a side-effect this'll now also
25955         consume less local variables.  test-38.cs now passes with MCS, added
25956         a few new test cases to that test.
25957
25958 2002-07-20  Martin Baulig  <martin@gnome.org>
25959
25960         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
25961         instructions.  Fixes bug #27977, also added test-146.cs.
25962
25963 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25964
25965         * cs-tokenizer.cs: fixed getHex ().
25966
25967 2002-07-19  Martin Baulig  <martin@gnome.org>
25968
25969         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
25970         not Type.GetType() to lookup the array type.  This is needed when
25971         we're constructing an array of a user-defined type.
25972         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
25973         single-dimensional arrays, but also for single-dimensial arrays of
25974         type decimal.
25975
25976 2002-07-19  Martin Baulig  <martin@gnome.org>
25977
25978         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
25979         this function is called, it's not allowed to share LocalBuilders
25980         among ILGenerators.
25981
25982 2002-07-19  Martin Baulig  <martin@gnome.org>
25983
25984         * expression.cs (Argument.Resolve): Report an error 118 when trying
25985         to pass a type as argument.
25986
25987 2002-07-18  Martin Baulig  <martin@gnome.org>
25988
25989         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
25990         Conv_R_Un for the signed `long' type.
25991
25992 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
25993
25994         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
25995         `expr' for the temporary result, as that will fail if we do
25996         multiple resolves on the same expression.
25997
25998 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
25999
26000         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
26001         ec.TypeContainer for looking up aliases. 
26002
26003         * class.cs (TypeContainer): Remove LookupAlias from here.
26004
26005         * decl.cs (DeclSpace); Move here.
26006
26007 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
26008
26009         * class.cs (FindMembers): Only call filter if the constructor
26010         bulider is not null.
26011
26012         Also handle delegates in `NestedTypes' now.  Now we will perform
26013         type lookups using the standard resolution process.  This also
26014         fixes a bug.
26015
26016         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
26017         This uses Expressions (the limited kind that can be parsed by the
26018         tree) instead of strings.
26019
26020         * expression.cs (ComposedCast.ToString): Implement, used to flag
26021         errors since now we have to render expressions.
26022
26023         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
26024         FormArrayType. 
26025
26026         * ecore.cs (SimpleName.ToString): ditto.
26027
26028         * cs-parser.jay: Instead of using strings to assemble types, use
26029         Expressions to assemble the type (using SimpleName, ComposedCast,
26030         MemberAccess).  This should fix the type lookups in declarations,
26031         because we were using a different code path for this.
26032
26033         * statement.cs (Block.Resolve): Continue processing statements
26034         even when there is an error.
26035
26036 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
26037
26038         * class.cs (Event.Define): Also remove the `remove' method from
26039         the list of pending items.
26040
26041         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
26042         generate more compact code. 
26043
26044 2002-07-17  Martin Baulig  <martin@gnome.org>
26045
26046         * const.cs (Const.LookupConstantValue): Add support for constant
26047         `unchecked' and `checked' expressions.
26048         Also adding test case test-140.cs for this.
26049
26050 2002-07-17  Martin Baulig  <martin@gnome.org>
26051
26052         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
26053         check whether mi.ReturnType implements the IEnumerator interface; the
26054         `==' and the IsAssignableFrom() will fail in this situation.
26055
26056 2002-07-16  Ravi Pratap  <ravi@ximian.com>
26057
26058         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
26059         here too.
26060
26061 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26062
26063         * expression.cs: fixed bug #27811.
26064
26065 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
26066
26067         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
26068         Molaro: when we are a ref, the value already contains a pointer
26069         value, do not take the address of it.
26070
26071 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
26072         * removed mb-parser.jay and mb-tokenizer.cs
26073
26074 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
26075
26076         * expression.cs: check against the building corlib void type.
26077
26078 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
26079
26080         * ecore.cs: fix for valuetype static readonly fields: when 
26081         initializing them, we need their address, not the address of a copy.
26082
26083 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
26084
26085         * typemanager.cs: register also enum_type in corlib.
26086
26087 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
26088
26089         * class.cs: allow calling this (but not base) initializers in structs.
26090
26091 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
26092
26093         * ecore.cs: make sure we compare against the building base types
26094         in GetTypeSize ().
26095
26096 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
26097
26098         * typemanager.cs: fix TypeToCoreType() to handle void and object
26099         (corlib gets no more typerefs after this change).
26100
26101 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
26102
26103         * expression.cs (ArrayCreation.EmitArrayArguments): use
26104         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
26105
26106         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
26107         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
26108         array indexes, the runtime actually forbids them.
26109
26110         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
26111         for array arguments here.
26112
26113         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
26114         instead of the default for ValueTypes.
26115
26116         (New.DoEmit): Use IsValueType instead of
26117         IsSubclassOf (value_type)
26118         (New.DoResolve): ditto.
26119         (Invocation.EmitCall): ditto.
26120
26121         * assign.cs (Assign): ditto.
26122
26123         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
26124         Statements *are* currently doing part of their resolution during
26125         Emit.  
26126
26127         Expressions do always resolve during resolve, but statements are
26128         only required to propagate resolution to their children.
26129
26130 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
26131
26132         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
26133
26134         (LoadAssembly): Do not add the dll if it is already specified
26135
26136         (MainDriver): Add the System directory to the link path at the end,
26137         after all the other -L arguments. 
26138
26139         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
26140         wrong opcode for loading bytes and bools (ldelem.i1 instead of
26141         ldelem.u1) and using the opposite for sbytes.
26142
26143         This fixes Digger, and we can finally run it.
26144
26145         * driver.cs (UnixParseOption): Move the option parsing here.  
26146         (CSCParseOption): Implement CSC-like parsing of options.
26147
26148         We now support both modes of operation, the old Unix way, and the
26149         new CSC-like way.  This should help those who wanted to make cross
26150         platform makefiles.
26151
26152         The only thing broken is that /r:, /reference: and /lib: are not
26153         implemented, because I want to make those have the same semantics
26154         as the CSC compiler has, and kill once and for all the confussion
26155         around this.   Will be doing this tomorrow.
26156
26157         * statement.cs (Unsafe.Resolve): The state is checked during
26158         resolve, not emit, so we have to set the flags for IsUnsfe here.
26159
26160 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
26161
26162         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
26163         not catch the Error_ObjectRefRequired in SimpleName (as it is
26164         possible to have a class/instance variable name that later gets
26165         deambiguated), we have to check this here.      
26166
26167 2002-07-10  Ravi Pratap  <ravi@ximian.com>
26168
26169         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
26170         make static and put into Expression.
26171
26172         (Event.Define): Register the private field of the event with the 
26173         TypeManager so that GetFieldFromEvent can get at it.
26174
26175         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
26176         keep track of the private field associated with an event which
26177         has no accessors.
26178
26179         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
26180         private field.
26181
26182         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
26183
26184 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
26185
26186         * expression.cs (Binary.EmitBranchable): this routine emits the
26187         Binary expression in a branchable context.  This basically means:
26188         we need to branch somewhere, not just get the value on the stack.
26189
26190         This works together with Statement.EmitBoolExpression.
26191
26192         * statement.cs (Statement.EmitBoolExpression): Use
26193         EmitBranchable. 
26194
26195 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
26196
26197         * statement.cs (For): Reduce the number of jumps in loops.
26198
26199         (For): Implement loop inversion for the For statement.
26200
26201         (Break): We can be breaking out of a Try/Catch controlled section
26202         (foreach might have an implicit try/catch clause), so we need to
26203         use Leave instead of Br.
26204
26205         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
26206         now).  If the instace expression supports IMemoryLocation, we use
26207         the AddressOf method from the IMemoryLocation to extract the
26208         address instead of emitting the instance.
26209
26210         This showed up with `This', as we were emitting the instance
26211         always (Emit) instead of the Address of This.  Particularly
26212         interesting when This is a value type, as we dont want the Emit
26213         effect (which was to load the object).
26214
26215 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
26216
26217         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
26218
26219         * statement.cs (Checked): Set the CheckedState during the resolve
26220         process too, as the ConvCast operations track the checked state on
26221         the resolve process, and not emit.
26222
26223         * cs-parser.jay (namespace_member_declaration): Flag that we have
26224         found a declaration when we do.  This is used to flag error 1529
26225
26226         * driver.cs: Report ok when we display the help only.
26227
26228 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
26229
26230         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
26231
26232 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
26233
26234         * cs-tokenizer.cs (define): We also have to track locally the
26235         defines.  AllDefines is just used for the Conditional Attribute,
26236         but we also need the local defines for the current source code. 
26237
26238 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
26239
26240         * statement.cs (While, For, Do): These loops can exit through a
26241         Break statement, use this information to tell whether the
26242         statement is the last piece of code.
26243
26244         (Break): Flag that we break.
26245
26246         * codegen.cs (EmitContexts): New `Breaks' state variable.
26247
26248 2002-07-03  Martin Baulig  <martin@gnome.org>
26249
26250         * class.cs (TypeContainer.MethodModifiersValid): Allow override
26251         modifiers in method declarations in structs.  Otherwise, you won't
26252         be able to override things like Object.Equals().
26253
26254 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
26255
26256         * class.cs (Method, Property, Indexer): Do not allow the public
26257         modifier to be used in explicit interface implementations.
26258
26259         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
26260         override modifiers in method declarations in structs
26261
26262 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
26263
26264         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
26265         integer or real overflow, report an error
26266
26267 2002-07-02  Martin Baulig  <martin@gnome.org>
26268
26269         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
26270         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
26271         to tell the runtime about our newly created System.Object and
26272         System.ValueType types.
26273
26274 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
26275
26276         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
26277         struct instead of Ldarg/Starg.
26278
26279 2002-07-02  Martin Baulig  <martin@gnome.org>
26280
26281         * expression.cs (Indirection.Indirection): Call
26282         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
26283
26284 2002-07-02  Martin Baulig  <martin@gnome.org>
26285
26286         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
26287         ValueType, call TypeManager.TypeToCoreType() on it.
26288         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
26289         the OpCodes.Newarr argument.
26290
26291 2002-07-02  Martin Baulig  <martin@gnome.org>
26292
26293         * expression.cs (Invocation.EmitCall): When compiling corlib,
26294         replace all calls to the system's System.Array type to calls to
26295         the newly created one.
26296
26297         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
26298         System.Array methods.
26299         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
26300         from the system's System.Array type which must be replaced.
26301
26302 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
26303
26304         * typemanager.cs: load unverifiable_code_ctor so we can build
26305         corlib using the correct type. Avoid using GetTypeCode() with
26306         TypeBuilders.
26307         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
26308         TypeManager.object_type to allow building corlib.
26309
26310 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
26311
26312         * ecore.cs: handle System.Enum separately in LoadFromPtr().
26313
26314 2002-07-01  Martin Baulig  <martin@gnome.org>
26315
26316         * class.cs: Make the last change actually work, we need to check
26317         whether `ifaces != null' to avoid a crash.
26318
26319 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
26320
26321         * class.cs: when we build structs without fields that implement
26322         interfaces, we need to add the interfaces separately, since there is
26323         no API to both set the size and add the interfaces at type creation
26324         time.
26325
26326 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
26327
26328         * expression.cs: the dimension arguments to the array constructors
26329         need to be converted if they are a long.
26330
26331 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
26332
26333         * class.cs: don't emit ldarg.0 if there is no parent constructor
26334         (fixes showstopper for corlib).
26335
26336 2002-06-29  Martin Baulig  <martin@gnome.org>
26337
26338         MCS now compiles corlib on GNU/Linux :-)
26339
26340         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
26341         ie. check for MethodImplOptions.InternalCall.
26342
26343         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
26344         and TypeManager.attribute_type are null, so we must explicitly check
26345         whether parent is not null to find out whether it's an attribute type.
26346         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
26347         and SetBuilder, not only if the property is neither abstract nor external.
26348         This is necessary to set the MethodImplOptions on the accessor methods.
26349         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
26350         SetBuilder, see Property.Emit().
26351
26352         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
26353         populate "System.Object", "System.ValueType" and "System.Attribute" since
26354         they've already been populated from BootCorlib_PopulateCoreTypes().
26355
26356 2002-06-29  Martin Baulig  <martin@gnome.org>
26357
26358         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
26359         is the NullLiteral, we also need to make sure that target_type is not
26360         an enum type.   
26361
26362 2002-06-29  Martin Baulig  <martin@gnome.org>
26363
26364         * rootcontext.cs (RootContext.ResolveCore): We must initialize
26365         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
26366         before calling BootstrapCorlib_ResolveDelegate ().
26367
26368 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26369
26370         * statement.cs: fixed build-breaker. All tests passed ok.
26371
26372 2002-06-27  Martin Baulig  <martin@gnome.org>
26373
26374         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
26375         for System.Decimal when compiling corlib.
26376
26377 2002-06-27  Martin Baulig  <martin@gnome.org>
26378
26379         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
26380         switch blocks which contain nothing but a default clause.
26381
26382 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
26383
26384        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
26385
26386 2002-06-27  Martin Baulig  <martin@gnome.org>
26387
26388         * ecore.cs (PropertyExpr.PropertyExpr): Call
26389         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
26390
26391         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
26392         is already a TypeBuilder.
26393
26394 2002-06-27  Martin Baulig  <martin@gnome.org>
26395
26396         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
26397         `target_type == TypeManager.array_type', not IsAssignableFrom() in
26398         the "from an array-type to System.Array" case.  This makes it work
26399         when compiling corlib.
26400
26401 2002-06-27  Martin Baulig  <martin@gnome.org>
26402
26403         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
26404         non-static PropertyExpr, set its InstanceExpression.  This makes
26405         the `ICollection.Count' property work in System/Array.cs.
26406
26407 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
26408
26409         * driver.cs: Made error handling more consistent.  Errors now
26410         tracked by Report class, so many methods which used to return int
26411         now return void.  Main() now prints success/failure and 
26412         errors/warnings message.
26413
26414         Renamed '--probe' compiler argument to '--expect-error'.  Removed
26415         the magic number return values (123 and 124).  Now, if the
26416         expected error occurs, the compiler exits with success (exit value
26417         0).  If the compilation completes without seeing that particular
26418         error, the compiler exits with failure (exit value 1).  The
26419         makefile in mcs/errors has been changed to handle the new behaviour.
26420
26421         * report.cs: Made 'expected error' number a property and renamed
26422         it from 'Probe' to 'ExpectedError'.
26423
26424         * genericparser.cs: Removed error handling support, since it is
26425         now all done by Report class.
26426
26427         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
26428         class, so parse() no longer returns an int.
26429
26430         * namespace.cs: Use Report.Error instead of GenericParser.error
26431
26432 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
26433
26434         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
26435         TypeContainer.AddOperator): At the front of the list put the
26436         explicit implementations, so they get resolved/defined first. 
26437
26438 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
26439
26440         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
26441         interface type is implemented by this TypeContainer.  Used during
26442         explicit interface implementation.
26443
26444         (Property.Define, Indexer.Define, Method.Define): Validate that
26445         the given interface in the explicit implementation is one of the
26446         base classes for the containing type.
26447
26448         Also if we are explicitly implementing an interface, but there is
26449         no match in the pending implementation table, report an error.
26450
26451         (Property.Define): Only define the property if we are
26452         not explicitly implementing a property from an interface.  Use the
26453         correct name also for those properties (the same CSC uses,
26454         although that is really not needed).
26455
26456         (Property.Emit): Do not emit attributes for explicitly implemented
26457         properties, as there is no TypeBuilder.
26458
26459         (Indexer.Emit): ditto.
26460
26461         Hiding then means that we do not really *implement* a pending
26462         implementation, which makes code fail.
26463
26464 2002-06-22  Martin Baulig  <martin@gnome.org>
26465
26466         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
26467         the return value of Object.GetType().  [FIXME: we need to do this whenever
26468         we get a type back from the reflection library].
26469
26470 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
26471
26472         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
26473
26474 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
26475
26476         * attribute.cs: Return null if we can not look up the type.
26477
26478         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
26479         the interface types found.
26480
26481         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
26482         interface types found.
26483
26484         * typemanager.cs (GetInterfaces): Make this routine returns alll
26485         the interfaces and work around the lame differences between
26486         System.Type and System.Reflection.Emit.TypeBuilder in the results
26487         result for GetInterfaces.
26488
26489         (ExpandInterfaces): Given an array of interface types, expand and
26490         eliminate repeated ocurrences of an interface.  This expands in
26491         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
26492         be IA, IB, IC.
26493
26494 2002-06-21  Martin Baulig  <martin@gnome.org>
26495
26496         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
26497         on System.Enum.
26498
26499 2002-06-21  Martin Baulig  <martin@gnome.org>
26500
26501         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
26502         and called with one of the core types, return the corresponding typebuilder for
26503         that type.
26504
26505         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
26506         element type.
26507
26508 2002-06-21  Martin Baulig  <martin@gnome.org>
26509
26510         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
26511         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
26512         (Expression.ConvertReferenceExplicit): Likewise.
26513
26514         * expression.cs (ElementAccess.DoResolve): Likewise.
26515         (ElementAccess.DoResolveLValue): Likewise.
26516
26517 2002-06-10  Martin Baulig  <martin@gnome.org>
26518
26519         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
26520         add the "value" parameter to the parameter list.
26521
26522         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
26523         to our caller.
26524
26525 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
26526
26527         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
26528         the argument to an int, uint, long or ulong, per the spec.  Also
26529         catch negative constants in array creation.
26530
26531 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
26532
26533         * class.cs: do not allow the same interface to appear twice in
26534         the definition list.
26535
26536 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
26537
26538         * ecore.cs: don't use ldlen with System.Array.
26539
26540 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
26541
26542         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
26543
26544 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
26545
26546         * modifiers.cs: produce correct field attributes for protected
26547         internal. Easy fix so miguel can work on ther harder stuff:-)
26548
26549 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
26550
26551         * pending.cs: New file.  Move the code from class.cs here.
26552         Support clearning the pending flag for all methods (when not doing
26553         explicit interface implementation).
26554
26555 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
26556
26557         * rootcontext.cs: added a couple more types needed to bootstrap.
26558
26559 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
26560
26561         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
26562         constructor in the type, instead of any constructor in the type
26563         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
26564         a bug in the Mono runtime when applying the params attribute). 
26565
26566 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
26567         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
26568
26569 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
26570
26571         * expression.cs (Unary.ResolveOperator): Use TypeManager
26572         to resolve the type.
26573
26574 2002-06-13  Ravi Pratap  <ravi@ximian.com>
26575
26576         * cs-parser.jay (enum_member_declaration): Pass in the attributes
26577         attached.
26578
26579         * enum.cs (AddEnumMember): Add support to store the attributes associated 
26580         with each member too.
26581
26582         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
26583         field builders too - this takes care of the enum member case.
26584
26585 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
26586
26587         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
26588         address-of operator on both value types and pointers.
26589
26590 2002-06-10  Martin Baulig  <martin@gnome.org>
26591
26592         * interface.cs (Interface.PopulateIndexer): Add the indexer's
26593         PropertyBuilder to the `property_builders' list.
26594
26595         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
26596         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
26597         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
26598         find any indexers which are inherited from an interface.
26599
26600 2002-06-09  Martin Baulig  <martin@gnome.org>
26601
26602         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
26603         the same type as the constant if necessary.  There's also a test-130.cs
26604         for this.
26605
26606         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
26607
26608         * typemanager.cs (TypeManager.ChangeType): Previously known as
26609         Enum.ChangeEnumType().
26610
26611 2002-06-09  Martin Baulig  <martin@gnome.org>
26612
26613         * expression.cs (Cast.TryReduce): Added support for consts.
26614
26615 2002-06-08  Ravi Pratap  <ravi@ximian.com>
26616
26617         * class.cs (Accessor): Hold attributes information so we can pass
26618         it along.
26619
26620         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
26621         Modify to pass in attributes attached to the methods.
26622
26623         (add_accessor_declaration, remove_accessor_declaration): Ditto.
26624
26625         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
26626         to handle the Accessor kind :-)
26627
26628         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
26629
26630 2002-06-08  Martin Baulig  <martin@gnome.org>
26631
26632         * expression.cs (Unary.TryReduceNegative): Added support for
26633         ULongConstants.
26634
26635 2002-06-08  Martin Baulig  <martin@gnome.org>
26636
26637         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
26638         name can't be found in the `defined_names' - the caller will do a
26639         MemberLookup in this case and thus find methods in System.Enum
26640         such as Enum.IsDefined().
26641
26642 2002-06-08  Martin Baulig  <martin@gnome.org>
26643
26644         * enum.cs (Enum.ChangeEnumType): This is a custom version of
26645         Convert.ChangeType() which works with TypeBuilder created types.
26646         (Enum.LookupEnumValue, Enum.Define): Use it here.
26647
26648         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
26649         `TypeBuilder.BaseType != null' check.
26650         (TypeContainer.FindMembers): Only lookup parent members if we
26651         actually have a parent.
26652         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
26653         (ConstructorInitializer.Resolve): Likewise.
26654
26655         * interface.cs (Interface.FindMembers): Added
26656         `TypeBuilder.BaseType != null' check.
26657
26658         * rootcontext.cs (RootContext.ResolveCore): Added
26659         "System.Runtime.CompilerServices.IndexerNameAttribute" to
26660         classes_second_stage.
26661
26662         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
26663         debug_type and trace_type when compiling with --nostdlib.       
26664
26665 2002-06-07  Martin Baulig  <martin@gnome.org>
26666
26667         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
26668         (AddField): Set it to true when adding a non-static field.
26669         (DefineType): Use `have_nonstatic_fields' to find out whether we
26670         have non-static fields, not `Fields != null'.
26671
26672 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
26673
26674         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
26675         dereferencing a null on the static-field code path)
26676
26677 2002-05-30  Martin Baulig  <martin@gnome.org>
26678
26679         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
26680         to take command line arguments.  Use reflection to call the new
26681         custom `Initialize' function on the symbol writer and pass it the
26682         command line arguments.
26683
26684         * driver.cs (--debug-args): New command line argument to pass command
26685         line arguments to the symbol writer.
26686
26687 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
26688
26689         * assign.cs (DoResolve): Forgot to do the implicit conversion to
26690         the target type for indexers and properties.  Thanks to Joe for
26691         catching this.
26692
26693 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
26694
26695         * typemanager.cs (MethodFlags): returns the method flags
26696         (Obsolete/ShouldIgnore) that control warning emission and whether
26697         the invocation should be made, or ignored. 
26698
26699         * expression.cs (Invocation.Emit): Remove previous hack, we should
26700         not do this on matching a base type, we should do this based on an attribute
26701
26702         Only emit calls to System.Diagnostics.Debug and
26703         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
26704         on the command line.
26705
26706         * rootcontext.cs: Global settings for tracing and debugging.
26707
26708         * cs-tokenizer.cs (define): New utility function to track
26709         defines.   Set the global settings for TRACE and DEBUG if found.
26710
26711 2002-05-25  Ravi Pratap  <ravi@ximian.com>
26712
26713         * interface.cs (Populate*): Pass in the TypeContainer as well as
26714         the DeclSpace as parameters so that we can create EmitContexts and
26715         then use that to apply attributes etc.
26716
26717         (PopulateMethod, PopulateEvent, PopulateProperty)
26718         (PopulateIndexer): Apply attributes everywhere.
26719
26720         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
26721         etc.
26722
26723         (ApplyAttributes): Update accordingly.
26724
26725         We now apply interface attributes for all members too.
26726
26727 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
26728
26729         * class.cs (Indexer.Define); Correctly check if we are explicit
26730         implementation (instead of checking the Name for a ".", we
26731         directly look up if the InterfaceType was specified).
26732
26733         Delay the creation of the PropertyBuilder.
26734
26735         Only create the PropertyBuilder if we are not an explicit
26736         interface implementation.   This means that explicit interface
26737         implementation members do not participate in regular function
26738         lookups, and hence fixes another major ambiguity problem in
26739         overload resolution (that was the visible effect).
26740
26741         (DefineMethod): Return whether we are doing an interface
26742         implementation. 
26743
26744         * typemanager.cs: Temporary hack until we get attributes in
26745         interfaces (Ravi is working on that) and we get IndexerName
26746         support in interfaces.
26747
26748         * interface.cs: Register the indexers as properties.
26749
26750         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
26751         warning, I have verified that this is a bug in the .NET runtime
26752         (JavaScript suffers of the same problem).
26753
26754         * typemanager.cs (MemberLookup): When looking up members for
26755         interfaces, the parent of an interface is the implicit
26756         System.Object (so we succeed in searches of Object methods in an
26757         interface method invocation.  Example:  IEnumerable x;  x.ToString
26758         ()) 
26759
26760 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
26761
26762         * class.cs (Event): Events should also register if they do
26763         implement the methods that an interface requires.
26764
26765         * typemanager.cs (MemberLookup); use the new GetInterfaces
26766         method. 
26767
26768         (GetInterfaces): The code used to lookup interfaces for a type is
26769         used in more than one place, factor it here. 
26770
26771         * driver.cs: Track the errors at the bottom of the file, we kept
26772         on going.
26773
26774         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
26775         instance if the method we are calling is static!
26776
26777 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
26778
26779         * attribute.cs (ApplyAttributes): Make this function filter out
26780         the IndexerName attribute (as that attribute in reality is never
26781         applied) and return the string constant for the IndexerName
26782         attribute. 
26783
26784         * class.cs (TypeContainer.Emit): Validate that all the indexers
26785         have the same IndexerName attribute, and if so, set the
26786         DefaultName attribute on the class. 
26787
26788         * typemanager.cs: The return value might contain other stuff (not
26789         only methods).  For instance, consider a method with an "Item"
26790         property and an Item method.
26791
26792         * class.cs: If there is a problem with the parameter types,
26793         return. 
26794
26795 2002-05-24  Ravi Pratap  <ravi@ximian.com>
26796
26797         * ecore.cs (ImplicitConversionExists): Wrapper function which also
26798         looks at user defined conversion after making a call to 
26799         StandardConversionExists - we need this for overload resolution.
26800
26801         * expression.cs : Update accordingly the various method calls.
26802
26803         This fixes 2 bugs filed against implicit user defined conversions 
26804
26805 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
26806
26807         * statement.cs: Track the result of the assignment.
26808
26809 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
26810
26811         * expression.cs (MemberAccess): Improved error reporting for
26812         inaccessible members.
26813
26814 2002-05-22  Martin Baulig  <martin@gnome.org>
26815
26816         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
26817         itself with debugging support.
26818
26819 2002-05-22  Martin Baulig  <martin@gnome.org>
26820
26821         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
26822         Removed, this isn't needed anymore.
26823
26824 2002-05-20  Martin Baulig  <martin@gnome.org>
26825
26826         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
26827         be underlying type for an enum.
26828
26829 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
26830
26831         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
26832         that splits out the loading of just the core types.
26833
26834         * rootcontext.cs (ResolveCore): Split the struct resolution in
26835         two, so we can load the enumeration underlying types before any
26836         enums are used.
26837
26838         * expression.cs (Is): Bandaid until we fix properly Switch (see
26839         bug #24985 for details).
26840
26841         * typemanager.cs (ImplementsInterface): The hashtable will contain
26842         a null if there are no interfaces implemented.
26843
26844 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
26845
26846         * cs-parser.jay (indexer_declarator): It is fine to have array
26847         parameters
26848
26849 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
26850
26851         * typemanager.cs: (RegisterBuilder): New function used to register
26852         TypeBuilders that implement interfaces.  Since
26853         TypeBuilder.GetInterfaces (as usual) does not work with lame
26854         Reflection.Emit. 
26855         (AddUserType): register interfaces.
26856
26857         (ImplementsInterface): Use the builder_to_ifaces hash if we are
26858         dealing with TypeBuilder.  Also, arrays are showing up as
26859         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
26860         methods can not be invoked on them!
26861
26862         * ecore.cs (ExplicitReferenceConversionExists): Made public.
26863         (ImplicitReferenceConversionExists): Split out from
26864         StandardConversionExists. 
26865
26866         * expression.cs (As): We were only implementing one of the three
26867         cases for the as operator.  We now implement them all.
26868         (Is): Implement the various other cases for Is as well.
26869
26870         * typemanager.cs (CACHE): New define used to control if we want or
26871         not the FindMembers cache.  Seems to have a negative impact on
26872         performance currently
26873
26874         (MemberLookup): Nested types have full acess to
26875         enclosing type members
26876
26877         Remove code that coped with instance/static returns for events, we
26878         now catch this in RealFindMembers.
26879
26880         (RealFindMembers): only perform static lookup if the instance
26881         lookup did not return a type or an event.  
26882
26883 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
26884
26885         * assign.cs (CompoundAssign): We pass more semantic information
26886         now to Compound Assignments than we did before: now we have all
26887         the information at hand, and now we resolve the target *before* we
26888         do the expression expansion, which allows the "CacheValue" method
26889         to have the effect we intended (before, a [x] += 1 would generate
26890         two differen ArrayAccess expressions from the ElementAccess,
26891         during the resolution process).
26892
26893         (CompoundAssign.DoResolve): Resolve target and original_source here.
26894
26895 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
26896
26897         * expression.cs (ArrayAccess): dropped debugging information. 
26898
26899         * typemanager.cs: Small bug fix: I was always returning i_members,
26900         instead of one of i_members or s_members (depending on which had
26901         the content).
26902
26903         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
26904         method is invoked before any code generation takes place, and it
26905         is a mechanism to inform that the expression will be invoked more
26906         than once, and that the method should use temporary values to
26907         avoid having side effects
26908
26909         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
26910
26911         * ecore.cs (Expression.CacheTemporaries): Provide empty default
26912         implementation.
26913
26914         * expression.cs (Indirection, ArrayAccess): Add support for
26915         CacheTemporaries in these two bad boys. 
26916
26917         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
26918         ldobj or ldind_ref.  
26919         (StoreFromPtr): Handle stobj as well.
26920
26921         * expression.cs (UnaryMutator): Share more code.
26922
26923         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
26924         down: I was not tracking the Filter function as well, which
26925         was affecting the results of the cache.
26926
26927 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
26928
26929         * attribute.cs: Remove the hack to handle the CharSet property on
26930         StructLayouts. 
26931
26932 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
26933
26934         * attribute.cs (DoResolve): More uglyness, we now only try to
26935         resolve the attribute partially, to extract the CharSet
26936         information (only if we are a StructLayout attribute).  Otherwise 
26937
26938         (GetExtraTypeInfo): Add some code to conditionally kill in the
26939         future this.   I am more and more convinced that the .NET
26940         framework has special code to handle the attribute setting on
26941         certain elements.
26942
26943         * expression.cs (IsParamsMethodApplicable): Revert my previous
26944         foreach change here, it was wrong.
26945
26946 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
26947
26948         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
26949         (pp_expr): do not abort on unknown input, just return.
26950         (eval): abort if there are pending chars.
26951
26952         * attribute.cs (Attribute.Resolve): Positional parameters are
26953         optional.  Deal with that case.
26954
26955         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
26956         the Ansi/Unicode/Auto information for the type.
26957
26958         (TypeContainer.DefineType): instantiate the EmitContext here, as
26959         we will be using it during the type definition (to resolve
26960         attributes) and during the emit phase.
26961
26962         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
26963         to pull type information out of the attributes
26964
26965         (Attribute.Resolve): track the constructor builder, and allow for
26966         multiple invocations (structs and classes will use this).
26967
26968         * ecore.cs (MemberLookupFinal): new version with all the
26969         parameters customizable.
26970
26971         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
26972         constructors.  Return if the result value is null (as the error
26973         would have been flagged already by MemberLookupFinal)
26974
26975         Do not allow instances of abstract classes or interfaces to be
26976         created.
26977
26978         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
26979         We have to compare the assembly property here when dealing with
26980         FamANDAssem and Assembly access modifiers, because we might be
26981         creating an assembly from *modules* (that means that we are not
26982         getting TypeBuilders for types defined in other modules that are
26983         part of this assembly).
26984
26985         (Method.Emit): If the method is marked abstract and has a body,
26986         emit an error. 
26987
26988         (TypeContainer.DefineMembers): If both the defined member and the
26989         parent name match are methods, then do not emit any warnings: let
26990         the Method.Define routine take care of flagging warnings.  But if
26991         there is a mismatch (method overrides something else, or method is
26992         overriwritten by something, then emit warning).
26993
26994         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
26995         set to null, this means `do not check for the return type on the
26996         signature'. 
26997
26998         (Method.Define): set the return type for the method signature to
26999         null, so that we get methods with the same name and parameters and
27000         different return types.  This is used to flag warning 114 (you are
27001         hiding a method, and you probably want to use the new/override
27002         keywords instead).
27003
27004         * typemanager.cs (MemberLookup): Implemented proper access
27005         control, closing a long standing set of bug reports.  The problem
27006         was that the Framework only has two bits: Public and NonPublic,
27007         and NonPublic includes private and protected methods, but we need
27008         to enforce the FamANDAssem, FamOrAssem and Family. 
27009
27010 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
27011
27012         * statement.cs (GotoCase): Return true: Ammounts to giving up
27013         knowledge on whether we return or not, and letting the other case
27014         be responsible for it.
27015
27016 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
27017
27018         * driver.cs: Do not load directories for each file processed, only
27019         do it if there is a pattern.
27020
27021         * ecore.cs: Report readonly assigns here as well, as we might have
27022         been resolved only by MemberAccess.
27023
27024         (SimpleName.SimpleNameResolve): Also be useful for LValue
27025         resolution.   We need this to propagate assign to local readonly variables
27026
27027         * typemanager.cs: Use a ptrhashtable for the criteria, because we
27028         do not want to reuse potential criteria memory.
27029
27030         * class.cs (MyEventBuilder): Set reflected_type;
27031
27032         * ecore.cs (Constantify): Added support for constifying bools.
27033
27034         (RootContext.LookupType): Added a cache for values looked up in
27035         the declaration space.
27036
27037         * typemanager.cs (FindMembers): Now is a front-end to
27038         RealFindMembers, and provides a two-level hashtable-based cache to
27039         the request.  
27040
27041         15% performance improvement: from 22.5 to 19.2 seconds.
27042
27043         * expression.cs (IsParamsMethodApplicable): use foreach.
27044         (Invocation.DoResolve): ditto.
27045         (New.DoResolve): ditto.
27046         (ArrayCreation.DoResolve): ditto.
27047
27048         * ecore.cs (FindMostEncompassingType): use foreach.
27049
27050         * delegate.cs (NewDelegate.DoResolve): Use foreach
27051
27052         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
27053         (RemoveMethods): use foreach.
27054
27055         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
27056         nested foreach statements instead of for, and also break out of
27057         the inner loop once a match is found.
27058
27059         (Invocation.OverloadResolve): Use foreach, simplify the code. 
27060
27061 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
27062
27063         * cfold.cs (BinaryFold): During an enumeration evaluation context,
27064         we actually unwrap the expression to allow for extra information
27065         to be extracted. 
27066
27067         * expression.cs: Use Shr_Un on unsigned operations. 
27068
27069 2002-05-08  Ravi Pratap  <ravi@ximian.com>
27070
27071         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
27072         applicable operators was not being considered correctly. This closes
27073         the bug Miguel reported.
27074
27075 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
27076
27077         * attribute.cs: check that the type derives from System.Attribute
27078         and report the correct error in that case (moved the duplicate code to
27079         its own method, too).
27080
27081 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
27082
27083         * attribute.cs: lookup attribute type name as the spec says: first the
27084         bare attribute name and then name + "Attribute" (nant compiles with
27085         mcs after this fix).
27086
27087 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
27088
27089         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
27090         Because of the way we parse things, we should try to see if a
27091         UIntConstant can fit in an integer.
27092
27093 2002-05-07  Ravi Pratap  <ravi@ximian.com>
27094
27095         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
27096         when we are in an explicit context.
27097
27098         (ConvertReferenceExplicit): When converting from Iface type S to Class
27099         T make sure the rules are implemented as an OR.
27100
27101         * parameter.cs (ParameterType): Make it a property for now although the
27102         purpose really isn't anything immediate.
27103
27104         * expression.cs (Is*Applicable): Do better checking on the parameter type
27105         of a ref/out parameter. The ones from the system assemblies are already 
27106         marked with the correct type so we don't need to do any correction.
27107
27108         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
27109         the object type is standard too so include that.
27110
27111 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
27112
27113         * ecore.cs (StandardConversionExists): Augment with missing code:
27114         deal with IntConstant, LongConstants and Enumerations.
27115
27116         * assign.cs: Report the error, instead of failing silently
27117
27118         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
27119         typecontainer that they are declared, because the
27120         typecontainer/namespace will have the list of using clauses that
27121         need to be applied.
27122
27123         Assembly Attributes were escaping the normal registration
27124         mechanism. 
27125
27126         (EmitCode): Apply attributes within an EmitContext that represents
27127         the container they were declared on.
27128
27129         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
27130
27131 2002-05-06  Ravi Pratap  <ravi@ximian.com>
27132
27133         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
27134         Revamp completely - make much cleaner as we now operate only
27135         on a set of Types.
27136
27137         (FindMostSpecificSource, FindMostSpecificTarget): New methods
27138         to implement the logic detailed in the spec more correctly.
27139
27140         (UserDefinedConversion): Update accordingly.
27141
27142 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
27143
27144         * statement.cs: Return flow analysis information up.
27145
27146         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
27147         and the default.
27148
27149         (token): Do not consume an extra character before calling
27150         decimal_digits.
27151
27152 2002-05-06  Piers Haken <piersh@friskit.com>
27153
27154         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
27155
27156 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
27157
27158         * class.cs (Constructor.Emit): Set the IsStatic flag in the
27159         EmitContext during the instance constructor initializer
27160         resolution, to stop access to instance variables.
27161
27162         This is mandated by the spec, last paragraph of the `constructor
27163         initializers' section. 
27164
27165 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
27166
27167         * cs-parser.jay, class.cs (Accessor): new class used to represent
27168         an accessor (get or set).  In the past we used `null' to represent
27169         a missing accessor.  But this is ambiguous because there was no
27170         way to tell in abstract indexers/properties if one of them was
27171         specified.
27172
27173         Now there is a way of addressing that.
27174
27175         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
27176         instead of FindMembers.
27177
27178         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
27179         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
27180
27181         * attribute.cs: Treat indexers and properties as the same in terms
27182         of applying attributes
27183
27184         * ecore.cs (FindMostEncompassedType): Use statically initialized
27185         EmptyExpressions()s like we do elsewhere to avoid creating useless
27186         objects (and we take this out of the tight loop).
27187
27188         (GetConversionOperators): Move the code to extract the actual
27189         operators to a separate routine to clean things up.
27190
27191 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
27192
27193         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
27194         events are always registered FieldBuilders.
27195
27196         * class.cs (FieldBase): New class shared by Fields 
27197
27198         * delegate.cs: If we are a toplevel delegate, use our full name.
27199         If we are a nested delegate, then only use our tail name.
27200
27201 2002-05-02  Ravi Pratap  <ravi@ximian.com>
27202
27203         * expression.cs (IsApplicable): Ensure that we add the "&" to
27204         ref/out types before comparing it with the type of the argument.
27205
27206         (IsParamsMethodApplicable): Ditto.
27207
27208         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
27209         silly me ;-)
27210
27211         * delegate.cs : Handle the case when we have more than one applicable
27212         method. Flag an error only when we finish checking all.
27213
27214 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
27215
27216         * expression.cs: Add support for boolean static initializers.
27217
27218 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
27219
27220         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
27221
27222         * parameter.cs (ComputeParameterTypes,
27223         ComputeAndDefineParameterTypes): Better error handling: now we
27224         clear the `types' cache if we fail during any of the type lookups.
27225         We also return the status code correctly to our caller
27226
27227         * delegate.cs: If we fail to define a delegate, abort the extra
27228         steps. 
27229
27230         * expression.cs (Binary.ResolveOperator): for
27231         operator==(object,object) and operator !=(object, object) we also
27232         have to verify that there is an implicit conversion from one to
27233         the other.
27234
27235         (ArrayAccess.DoResolve): Array Access can operate on
27236         non-variables. 
27237
27238 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
27239
27240         * assign.cs (CompoundAssign): A new class used as a "flag" that
27241         the assignment actually is happening as part of a compound
27242         assignment operator.
27243
27244         During compound assignment, a few new rules exist to enable things
27245         like:
27246
27247         byte b |= 1 + 2
27248
27249         From the spec:
27250
27251         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
27252         to the type of x) if y is implicitly convertible to the type of x,
27253         and the operator is a builtin operator and the return type of the
27254         operator is explicitly convertible to the type of x. 
27255
27256         * rootcontext.cs: Reset warning level to 2.  4 catches various
27257         "interesting" features in mcs, we must clean this up at some
27258         point, but currently am trying to kill other bugs ;-)
27259
27260         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
27261         in container classes as well.  
27262
27263         * expression.cs (Binary.ResolveOperator): Handle string case
27264         before anything else (as operator overloading does emit an error
27265         before doing anything else).
27266
27267         This code could go away when we move to a table driven model, but
27268         i could not come up with a good plan last night.
27269
27270 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
27271
27272         * typemanager.cs (CSharpName): reimplementation using regex.
27273         * class.cs: added null check for fields in Emit
27274         * rootcontext.cs: set warninglevel to 4
27275
27276 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
27277
27278         * typemanager.cs (CSharpName): reimplemented with Lupus
27279         suggestion.
27280
27281 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
27282
27283         * statement.cs (If): correclty implement Resolve, because we were
27284         not catching sem errors in there.  The same process is needed
27285         everywhere else. 
27286         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
27287
27288
27289         (Statement.Warning_DeadCodeFound): Factorize code.
27290         (While): Report dead code here too.
27291
27292         (Statement): Added Resolve virtual method to allow
27293         for resolution split from the emit code.
27294
27295 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
27296
27297         * statement.cs (EmitBoolExpression): No longer try to resolve the
27298         expression here.    
27299         (MakeBoolean): New utility function that resolve, implicitly
27300         converts to boolean and tags the expression. 
27301
27302
27303         (If, Do): Implement dead code elimination.
27304         (While): Implement loop inversion
27305
27306         (Do, While, For, If): Resolve the expression prior to calling our
27307         code generation.
27308
27309 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
27310
27311         * class.cs:
27312           - added method Report28 (warning: program has more than one entry point)
27313           - added method IsEntryPoint, implements paragraph 10.1 of the spec
27314           - modified method Method.Define, the part at the end of the method
27315
27316         * rootcontext.cs: added static public Location EntryPointLocation;
27317           
27318         * ../errors/cs0028.cs : Add test case for the above warning.              
27319
27320         * typemanager.cs:
27321           - modified method CSharpName to allow arrays of primitive type to
27322             be printed nicely (e.g. instead of System.Int32[][] it now prints
27323             int[][])
27324           - added method CSharpSignature: returns the signature of a method
27325             in string format to be used in reporting errors, warnings, etc.
27326
27327         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
27328         with String.Empty.
27329
27330 2002-04-26  Ravi Pratap  <ravi@ximian.com>
27331
27332         * delegate.cs (Define): Fix extremely silly bug where I was
27333         setting the type of the 'object' parameter of the BeginInvoke
27334         method to System.IAsyncResult instead of System.Object ;-)
27335
27336 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
27337
27338         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
27339         here. 
27340
27341         (Constructor.Emit): return if we fail to initialize the
27342         constructor.  Another door closed!  
27343
27344         * expression.cs (New.DoResolve): Improve error message (from -6 to
27345         1501).  Use DeclaredOnly lookup to find the exact constructor.
27346
27347         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
27348         loop.  This is useful.
27349
27350         * cs-parser.jay: Adjust the default parameters so that destructors
27351         have the proper signature.
27352
27353 2002-04-26  Martin Baulig  <martin@gnome.org>
27354
27355         * driver.cs (LoadAssembly): If `assembly' contains any characters
27356         which are only valid in path names and not in assembly names
27357         (currently slash, backslash and point), use Assembly.LoadFrom ()
27358         instead of Assembly.Load () on the `assembly' (before iteration
27359         over the link_paths).
27360
27361 2002-04-26  Martin Baulig  <martin@gnome.org>
27362
27363         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
27364
27365 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
27366
27367         * class.cs (Property): use the new typemanager.MemberLookup
27368
27369         (TypeContainer.MemberLookup): Implement using the
27370         TypeManager.MemberLookup now. 
27371
27372         * typemanager.cs: Make MemberLookup a function of the TypeManager,
27373         and return MemberInfos, so that these can be used without an
27374         EmitContext (what we had before).
27375
27376 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
27377
27378         * expression.cs: Fix the case where the argument to params if the
27379         type of the params.  I omitted handling this before.   Fixed
27380
27381 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
27382
27383         * driver.cs: Call BootCorlib_PopulateCoreType
27384
27385         * class.cs (Property.CheckBase): Check for properties only, not
27386         for all members. 
27387
27388         * interface.cs: Temporary hack: try/catch around the
27389         CustomAttributeBuilder, because I am getting an exception that I
27390         do not understand.
27391
27392         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
27393         types whose definitions are required to be there (attributes are
27394         defined before standard types).
27395
27396         Compute definitions as we boot the various types, as they are used
27397         immediately (value_type class will need object_type, but if we do
27398         not initialize object_type, we will pass a null, which will let
27399         the runtime pick the System.Object from the existing corlib, which
27400         is not what we want).
27401
27402 2002-04-22  Patrik Torstensson <totte@labs2.com>
27403
27404         * cs-tokenizer.cs: fixed a number of trim() issues.
27405
27406 2002-04-22  Ravi Pratap  <ravi@ximian.com>
27407
27408         * expression.cs (Argument.Type): Ensure that we return the correct
27409         type when we have out or ref parameters [in which case we 
27410         append a "&"].
27411
27412 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
27413
27414         * class.cs (Property, Indexer): Allow extern modifier in there. 
27415
27416         * typemanager.cs (InitBaseTypes): Initializes object_type and
27417         value_type, since those will be used early on during the bootstrap
27418         process to compile corlib.
27419
27420         (InitCoreTypes): Move code from here to InitBaseTypes.
27421
27422 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
27423
27424         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
27425         single-dimension arrays as using the ldlen opcode.  
27426
27427         Daniel Lewis discovered this optimization.  
27428
27429         * typemanager.cs: Add signature for System.Array::get_Length
27430
27431 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
27432
27433         * statement.cs: report the error when the foreach does not apply to an
27434         array nor a collection.
27435
27436 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
27437
27438         * expression.cs: Add implicit conversions to the operator ~.
27439
27440         * constant.cs (DecimalConstant.Emit): Emit decimal value.
27441
27442         * typemanager.cs: Locate the decimal constructor.
27443
27444 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
27445
27446         * attribute.cs: use the new property of TypeOf.
27447         * expression.cs: added 'get' property around typearg.
27448
27449         These changes fix a build breaker reported by NickD. Is this the
27450         correct way to fix?  If not, please, revert my changes and make it
27451         work :-).
27452
27453 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
27454
27455         * attribute.cs: Add support for typeof in attribute invocations.
27456         I am not sure that this is right though.
27457
27458 2002-04-14  Duncan Mak  <duncan@ximian.com>
27459
27460         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
27461         Binary.Operator.Division case.
27462
27463 2002-04-13  Ravi Pratap  <ravi@ximian.com>
27464
27465         * class.cs (DefineType): Ensure that we do a proper check on
27466         attribute types and also register it with the TypeManager.
27467
27468         (TypeContainer.Targets): The default for attribute types is
27469         AttributeTargets.All.
27470
27471         * attribute.cs (ApplyAttributes): Registering the attribute type
27472         is done elsewhere, not when we discover we have a Usage attribute.
27473
27474 2002-04-12  Ravi Pratap  <ravi@ximian.com>
27475
27476         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
27477         and get rid of is_delegate parameter.
27478
27479         * everywhere : update.
27480
27481 2002-04-12  Ravi Pratap  <ravi@ximian.com>
27482
27483         * cs-parser.jay (compilation_unit): Revamp completely to use
27484         some new ideas that I got from Rhys' grammar to solve the problems
27485         with assembly level attributes.
27486
27487         (outer_declaration): New grammar production.
27488
27489         (attribute_sections): Add.
27490
27491         (opt_attributes): Base on attribute_sections
27492
27493         (namespace_declaration): Allow opt_attributes to tackle the case
27494         when we have assembly level attributes - we are clever in this
27495         regard now ;-)
27496
27497         * attribute.cs (ApplyAttributes): Do not worry about assembly 
27498         attributes in the non-global context.
27499
27500         * rootcontext.cs (AddGlobalAttributes): Go back to using this
27501         instead of SetGlobalAttributes.
27502
27503         * class.cs, rootcontext.cs : Ensure we define and generate 
27504         attribute types before anything else.
27505
27506         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
27507         and flag the new error -20 for the case when the attribute type
27508         does not have valid targets specified. csc does not catch this.
27509
27510         * ../errors/errors.txt : update for error # -20
27511
27512 2002-04-11  Ravi Pratap  <ravi@ximian.com>
27513
27514         * support.cs (InternalParameters.ParameterModifier): Do some null
27515         checking and return sane values.
27516
27517         * class.cs (Method.Define): If we are a PInvoke method, ensure
27518         that we are static and extern. Report error # 601
27519
27520         * ../errors/cs0601.cs : Add test case for the above error.
27521
27522 2002-04-07  Ravi Pratap  <ravi@ximian.com>
27523
27524         * rootcontext.cs (attribute_types): We need to keep type of
27525         all attribute types separately and emit code for them first.
27526
27527         (RegisterAttribute) : Implement.
27528
27529         * class.cs (DefineType): Check if the current Type is a custom
27530         attribute type and register it accordingly.
27531
27532         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
27533         adding the first attribute twice and rename to
27534
27535         (SetGlobalAttributes): this.
27536
27537         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
27538         lookups.
27539
27540         * attribute.cs (ApplyAttributes): Take an additional argument telling us
27541         if we are processing global arguments. Hmm, I am unsure of this.
27542
27543 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
27544
27545         * expression.cs: added static array of strings to avoid calling
27546         Enum.ToString () for Operator in Binary. Significant recover of
27547         performance.
27548
27549 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
27550
27551         * class.cs (FindMembers): Allow the Builders of the various
27552         members to be null.  If they are skip them.  This only happens
27553         during the PInvoke declaration.
27554
27555 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
27556
27557         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
27558         failure, so we do not keep going afterwards.
27559
27560         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
27561         wanted to pass `false' as the `is_delegate' argument.  If this is
27562         the case, why not use delegate_type == null to mean `is_delegate =
27563         false' and anything else as is_delegate = true.
27564
27565 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
27566
27567         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
27568         code for the section, not the beginning of the tests.
27569
27570 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
27571
27572         * cfold.cs: Handle operator + (Enum x, Underlying x) 
27573
27574         * expression.cs (Binary): same.  Warn about errors where we have
27575         Enum/Enum in operator + as well.
27576
27577 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
27578
27579         * statement.cs:
27580                 - added support for switch(bool)
27581                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
27582                 - add TableSwitchEmit() to handle table-based switch statements
27583
27584 2002-04-05  Ravi Pratap  <ravi@ximian.com>
27585
27586         * expression.cs (Invocation.OverloadResolve): Factor out code which
27587         does parameter compatibility checking with arguments so that we can 
27588         re-use the code even from Delegate.VerifyApplicability
27589
27590         (VerifyArgumentsCompat): Move above code here.
27591
27592         * delegate.cs (VerifyApplicability): Get rid of duplicate code
27593         and instead make a call to the above method.
27594
27595 2002-03-31  Ravi Pratap  <ravi@ximian.com>
27596
27597         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
27598         We use it to keep track of classes which are attribute types.
27599
27600 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
27601
27602         * delegate.cs (Delegate.Define): Correctly define the types in the
27603         presence of fixed and array parameters.
27604
27605         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
27606         doing FindMembers.
27607
27608         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
27609         include NonPublic after the first iteration.
27610
27611         * class.cs (Indexer.CheckBase): Only check if both parents are
27612         non-null. 
27613
27614         * cs-parser.jay (accessor_body): If empty, set to null.
27615
27616         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
27617         same code path here to resolve constants names that we did have in
27618         MemberAccess.DoResolve.  There is too much code duplicated here.
27619
27620 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
27621
27622         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
27623
27624         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
27625         to MakeUnionSet.
27626
27627         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
27628         tokens, numbers and strings.
27629
27630         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
27631         parenthesis.
27632
27633         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
27634         asyncronous parameters and the regular parameters.  
27635
27636         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
27637         specify the target directory.
27638
27639         * expression.cs: (This.DoResolve): Simplify
27640         (As.Emit): Optimize, do not generate IsInst if the expression is
27641         always of the given type.
27642
27643         (Is.DoResolve): Bug fix, we were reporting both always/never for
27644         the is expression.
27645
27646         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
27647         creating too many unnecessary arrays.
27648
27649 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
27650
27651         * class.cs (EmitFieldInitializer): Use Assign expression to assign
27652         fields instead of rolling our own initializer.   Takes care of all
27653         implicit conversions, and drops unnecessary static checks/argument.
27654
27655 2002-03-31  Dick Porter  <dick@ximian.com>
27656
27657         * driver.cs: use the GetDirectories() return values properly, and
27658         use "/" as path separator.
27659
27660 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
27661
27662         * expression.cs (Unary): Optimize - - expr into expr.
27663         (Binary): Optimize a + (-b) into a -b.
27664
27665         * codegen.cs (CodeGen): Made all methods static.
27666
27667 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
27668
27669         * rootcontext.cs: 
27670
27671         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
27672         TypeBuilder property.
27673
27674         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
27675         instead. 
27676
27677         * tree.cs: Removed the various RecordXXXX, and replaced with a
27678         single RecordDecl.  Removed all the accessor methods, and just
27679         left a single access point Type 
27680
27681         * enum.cs: Rename DefineEnum to DefineType.
27682
27683         * decl.cs: New abstract method `DefineType' used to unify the
27684         Defines for Enumerations, Interfaces, TypeContainers and
27685         Delegates.
27686
27687         (FindType): Moved LookupInterfaceOrClass here.  Moved the
27688         LookupBaseClasses method that used to live in class.cs and
27689         interface.cs here, and renamed to FindType.
27690
27691         * delegate.cs: Implement DefineType.  Take advantage of the
27692         refactored pattern for locating the parent builder without taking
27693         the parent_builder argument (which we know does not work if we are
27694         nested, and triggering a toplevel definition).
27695
27696 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27697
27698         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
27699         accessibility of a member has changed during override and report
27700         an error if so.
27701
27702         * class.cs (Method.Define, Property.Define): Only complain on
27703         overrides if the method is private, any other accessibility is
27704         fine (and since we just checked the permission is the same, we are
27705         good to go).
27706
27707         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
27708         and elif are processed always.  The other pre-processing
27709         directives are only processed if we are "taking" the path
27710
27711 2002-03-29  Martin Baulig  <martin@gnome.org>
27712
27713         * class.cs (Method.Emit): Only emit symbolic debugging info if the
27714         current location is not Null.
27715
27716         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
27717         a separate method so we can profile it.
27718
27719         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
27720         `span.Seconds' are just seconds, but no minutes or hours.
27721         (MainDriver): Profile the CodeGen.SaveSymbols calls.
27722
27723 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27724
27725         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
27726         Remove the gratuitous set of Final:
27727
27728                                 // If an interface implementation, then we can set Final.
27729                                 if (((flags & MethodAttributes.Abstract) == 0) &&
27730                                     implementing.DeclaringType.IsInterface)
27731                                         flags |= MethodAttributes.Final;
27732
27733         I do not know what I was smoking when I used that.
27734
27735
27736         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
27737         step into fixing the name resolution issues for delegates and
27738         unifying the toplevel name resolution.
27739
27740 2002-03-28  Martin Baulig  <martin@gnome.org>
27741
27742         * class.cs (Method.Emit): If we have a symbol writer, call its
27743         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
27744         tell it about the current method.
27745
27746         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
27747         writer that we're going to emit the first byte of IL code for a new
27748         statement (a new source line).
27749         (EmitContext.EmitTopBlock): If we have a symbol writer, call
27750         EmitContext.Mark() before emitting any code.
27751
27752         * location.cs (SymbolDocument): Return null when we're Null.
27753
27754         * statement.cs (Statement): Moved the `Location loc' variable here.
27755         (Statement.EmitBoolExpression): If we have a symbol writer, call
27756         ec.Mark() before emitting any code to tell it that we're at the
27757         beginning of a new statement.
27758         (StatementExpression): Added `Location' argument to the constructor.
27759         (Block): Added public readonly variable `StartLocation' and public
27760         variable `EndLocation'.  The latter is to be set using SetEndLocation().
27761         (Block): Added constructor which takes a start and end location.
27762         (Block.SetEndLocation): New method. This sets the end location.
27763         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
27764         local variables we create.
27765         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
27766         each statement and do also mark the begin and end of the block.
27767
27768         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
27769         tell it the current lexer.Location, use Location.Null for the end of the
27770         block.
27771         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
27772         current block, set its end location using SetEndLocation().
27773         (statement_expression): StatementExpression constructor now takes the
27774         lexer.Location as additional argument.
27775         (for_statement, declare_local_variables): Likewise.
27776         (declare_local_variables): When creating a new implicit block, use the
27777         new Block constructor and pass it the lexer.Location.
27778
27779 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27780
27781         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
27782         members also on the parent interfaces recursively.
27783
27784 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
27785
27786         * report.cs: Use new formats, since Gonzalo finished the missing
27787         bits. 
27788
27789         * expression.cs (Binary.ResolveOperator): added missing operator|
27790         operator& and operator^ for bool/bool.
27791
27792         * cs-parser.jay: CheckDef now takes a Location argument that is
27793         used to report errors more precisly (instead of reporting the end
27794         of a definition, we try to track something which is a lot closer
27795         to the source of the problem).
27796
27797         * cs-tokenizer.cs: Track global token use, so we can properly flag
27798         the use of #define/#undef after the first token has been seen.
27799
27800         Also, rename the reportXXXX to Error_DescriptiveName
27801
27802         * decl.cs (DeclSpace.IsTopLevel): Move property here from
27803         TypeContainer, so that Enum and Interface can use this too.
27804
27805         * class.cs (TypeContainer.LookupInterfaceOrClass,
27806         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
27807         `builder' argument.  Typically this was used to pass the parent
27808         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
27809         the definition).  
27810
27811         The problem is that a nested class could trigger the definition of
27812         a toplevel class, and the builder would be obviously wrong in that
27813         case. 
27814
27815         So we drop this argument, and we compute dynamically the
27816         TypeBuilder/ModuleBuilder (the correct information was available
27817         to us anyways from DeclSpace.Parent)
27818
27819         * interface.cs (Interface.DefineInterface): Drop builder
27820         parameter cleanup like class.cs
27821
27822         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
27823         like class.cs
27824
27825         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
27826         values. 
27827
27828         (Try.Emit): Propagate the returns value from the statement.
27829
27830         (Return.Emit): Even if we are leavning 
27831
27832         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
27833
27834         * modifiers.cs: Fix the computation of MethodAttributes flags.
27835
27836 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
27837
27838         * driver.cs: allow compilation of files that start with '/'.
27839         Add a default case when checking the argument of --target.
27840
27841 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
27842
27843         * interface.cs: Implement the same search algorithm for types in
27844         the interface code.
27845
27846         * delegate.cs: Do not allow multiple definition.
27847
27848         * Recovered ChangeLog that got accidentally amputated
27849
27850         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
27851
27852         * rootcontext.cs: Load manually enum to allow core classes to
27853         contain enumerations.
27854
27855         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
27856         Update to new static methods in TypeManager.
27857
27858         * typemanager.cs (GetMethod, GetConstructor): Use our
27859         implementation of FindMembers to find the members, since during
27860         corlib compilation, the types are TypeBuilders and GetMethod and
27861         GetConstructor do not work.
27862
27863         Make all methods in TypeManager static.
27864
27865         (InitCodeHelpers): Split the functionality from
27866         the InitCodeTypes function.
27867
27868         * driver.cs: Call InitCodeHelpers after we have populated the
27869         types. 
27870
27871         * cs-parser.jay (delegate_declaration): we did not used to compute
27872         the delegate name correctly for void delegates.
27873
27874 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
27875
27876         * rootcontext.cs (RootContext): Init the interface_resolve_order
27877         and type_container_resolve_order always.
27878
27879         (ResolveCore, BootstrapCorlib_ResolveClass,
27880         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
27881         compiler when compiling with --nostdlib
27882
27883         * class.cs (TypeContainer.DefineType): Check that our parent is
27884         not null.  This test is most important when we are bootstraping
27885         the core types.
27886
27887         * codegen.cs: Split out the symbol writing code.
27888
27889 2002-03-25  Martin Baulig  <martin@gnome.org>
27890
27891         * driver.cs (-g): Made -g an alias for --debug.
27892
27893 2002-03-24  Martin Baulig  <martin@gnome.org>
27894
27895         * codegen.cs (SymbolWriter): New public variable. Returns the
27896         current symbol writer.
27897         (CodeGen): Added `bool want_debugging_support' argument to the
27898          constructor. If true, tell the ModuleBuild that we want debugging
27899         support and ask it for the ISymbolWriter.
27900         (Save): If we have a symbol writer, call it's Close() method after
27901         saving the assembly.
27902
27903         * driver.c (--debug): New command line argument to create a
27904         debugger information file.
27905
27906         * location.cs (SymbolDocument): New public property. Returns an
27907         ISymbolDocumentWriter object for the current source file or null
27908         if we don't have a symbol writer.
27909
27910 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
27911
27912         * driver.cs (LoadAssembly): Correctly return when all the paths
27913         have been tried and not before.
27914
27915         * statement.cs (Switch.Emit): return the actual coverage for this
27916         statement (returns/not-returns)
27917
27918         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
27919         switch of the statement if we are the last switch section.  That
27920         kills two problems: try/catch problems (we used to emit an empty
27921         nop at the end) and switch statements where all branches would
27922         return. 
27923
27924 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
27925
27926         * driver.cs: Add default assemblies (the equivalent to the
27927         Microsoft CSC.RSP file)
27928
27929         * cs-tokenizer.cs: When updating `cols and setting it to zero,
27930         also update tokens_seen and set it to false.
27931
27932         * driver.cs: Implement --recurse for Mike.
27933
27934         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
27935         correctly splitting out the paths.
27936
27937 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
27938
27939         * interface.cs (Interface.PopulateProperty): Instead of using
27940         `parent' as the declaration space for the set parameters, use
27941         `this' 
27942
27943         * support.cs (InternalParameters): InternalParameters constructor
27944         takes a DeclSpace instead of a TypeContainer.
27945
27946         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
27947         types are being initialized, load the address of it before calling
27948         the function.  
27949
27950         (New): Provide a mechanism to disable the generation of local
27951         value type temporaries when the caller will be providing us with
27952         an address to store it.
27953
27954         (ArrayCreation.EmitDynamicInitializers): Use it.
27955
27956 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
27957
27958         * expression.cs (Invocation.EmitArguments): Only probe for array
27959         property if there is more than one argument.  Sorry about that.
27960
27961         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
27962         empty param arrays.
27963
27964         * class.cs (Method.LabelParameters): Fix incorrect code path that
27965         prevented the `ParamArrayAttribute' from being applied to the
27966         params attribute.
27967
27968 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
27969
27970         * support.cs (ReflectionParameters): Correctly compute whether the
27971         last argument is a params array.  Fixes the problem with
27972         string.Split ('a')
27973
27974         * typemanager.cs: Make the assemblies array always be non-null
27975         (empty, but non-null)
27976
27977         * tree.cs (RecordDecl): New function that abstracts the recording
27978         of names.  This reports error 101, and provides a pointer to the
27979         previous declaration.  Fixes a crash in the compiler.
27980
27981         * cs-parser.jay (constructor_declaration): Update to new grammar,
27982         and provide a constructor_body that can be empty.
27983
27984 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
27985
27986         * driver.cs: Add support for --resources.
27987
27988         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
27989         Make all types for the various array helper methods be integer.
27990
27991         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
27992         CheckState to ConvCast.
27993
27994         (ConvCast): Now it takes a `checked' state argument, to avoid
27995         depending on the emit context for the conversion, and just using
27996         the resolve time setting.
27997
27998         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
27999         instead of Invocation.EmitArguments.  We do not emit the original
28000         arguments, instead we emit those which have been converted to
28001         unsigned int expressions.
28002
28003         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
28004
28005         * codegen.cs: ditto.
28006
28007         * expression.cs (LocalVariableReference): Drop the use of the
28008         Store function that depended on the variable index.
28009
28010         * statement.cs (VariableInfo): Drop the `Idx' property from this
28011         class, as this is not taking into account the indexes for
28012         temporaries tat we generate during the execution, getting the
28013         indexes wrong.
28014
28015         * class.cs: First emit class initializers, then call the parent
28016         constructor. 
28017
28018         * expression.cs (Binary): Fix opcode emision.
28019         (UnaryMutator.EmitCode): Support checked code generation
28020
28021         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
28022         matches for events for both the Static and Instance scans,
28023         pointing to the same element.   Fix that.
28024
28025 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
28026
28027         * rootcontext.cs (ResolveTree): Always set the
28028         interface_resolve_order, because nested interfaces will be calling
28029         into us.
28030
28031         * class.cs (GetInterfaceOrClass): Track the same resolution
28032         process used by TypeManager.LookupType.  This fixes the nested
28033         type lookups in class declarations (separate path from
28034         LookupType). 
28035
28036         (TypeContainer.DefineType): Also define nested interfaces.
28037         (TypeContainer.RegisterOrder): New public function used to
28038         register the order in which child interfaces need to be closed.
28039
28040         Nested interfaces need to be closed after their parents have been
28041         created. 
28042
28043         * interface.cs (InterfaceAttr): Put all the logic for computing
28044         the interface attribute here. 
28045
28046         (DefineInterface): Register our interface order with the
28047         RootContext or with the TypeContainer depending on the case.
28048
28049 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
28050
28051         * cs-parser.jay: rework foreach statement to work with the new
28052         changes to the policy on SimpleNames.
28053
28054         * report.cs: support Stacktrace on warnings as well.
28055
28056         * makefile: drop --unsafe and /unsafe from the compile.
28057
28058 2002-03-13  Ravi Pratap  <ravi@ximian.com>
28059
28060         * ecore.cs (StandardConversionExists): Modify to take an Expression
28061         as the first parameter. Ensure we do null -> reference type conversion
28062         checking.
28063
28064         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
28065         temporary Expression objects.
28066
28067 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
28068
28069         * interface.cs: workaround bug in method overloading resolution
28070         (there is already a bugzilla bug for it).
28071
28072 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
28073
28074         We could also solve this problem by having a separate path for
28075         performing type lookups, instead of DoResolve, we could have a
28076         ResolveType entry point, and only participating pieces of the
28077         production (simplename, deref, array) would implement this. 
28078
28079         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
28080         signal SimpleName to only resolve type names and not attempt to
28081         resolve anything else.
28082
28083         * expression.cs (Cast): Set the flag.
28084
28085         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
28086
28087         * class.cs: Only report 108 if there is no `new' modifier.
28088
28089         * cs-parser.jay: rework foreach statement to work with the new
28090         changes to the policy on SimpleNames.
28091
28092         * report.cs: support Stacktrace on warnings as well.
28093
28094         * makefile: drop --unsafe and /unsafe from the compile.
28095
28096 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
28097
28098         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
28099         lookups here, instead of doing that at parse time.  This means
28100         that our grammar will not introduce `LocalVariableReferences' as
28101         expressions at this point.  That solves the problem of code like
28102         this:
28103
28104         class X {
28105            static void Main ()
28106            { int X = 1;
28107             { X x = null }}}
28108
28109         This is only half the fix.  The full fix requires parameters to
28110         also be handled in this way.
28111
28112         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
28113         makes the use more obvious of the DeclSpace.  The
28114         ec.TypeContainer.TypeBuilder is now only used to pull the
28115         TypeBuilder for it.
28116
28117         My theory is that I can get rid of the TypeBuilder completely from
28118         the EmitContext, and have typecasts where it is used (from
28119         DeclSpace to where it matters).  
28120
28121         The only pending problem is that the code that implements Aliases
28122         is on TypeContainer, and probably should go in DeclSpace.
28123
28124         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
28125         lookups here, instead of doing that at parse time.  This means
28126         that our grammar will not introduce `LocalVariableReferences' as
28127         expressions at this point.  That solves the problem of code like
28128         this:
28129
28130         class X {
28131            static void Main ()
28132            { int X = 1;
28133             { X x = null }}}
28134
28135         This is only half the fix.  The full fix requires parameters to
28136         also be handled in this way.
28137
28138         * class.cs (Property.DefineMethod): When implementing an interface
28139         method, set newslot, when implementing an abstract method, do not
28140         set the flag (before we tried never setting it, or always setting
28141         it, which is the difference).
28142         (Indexer.DefineMethod): same.
28143         (Method.DefineMethod): same.
28144
28145         * ecore.cs: Only set the status used flag if we get back a Field.
28146
28147         * attribute.cs: Temporary hack, so Paolo can keep working.
28148
28149 2002-03-08  Ravi Pratap  <ravi@ximian.com>
28150
28151         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
28152         the unmanaged type in the case we have a MarshalAs attribute.
28153
28154         (Resolve): Handle the case when we are parsing the special MarshalAs
28155         attribute [we need to store the unmanaged type to use later]
28156
28157         * typemanager.cs (marshal_as_attr_type): Built in type for the 
28158         MarshalAs Attribute.
28159
28160         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
28161         on parameters and accordingly set the marshalling info.
28162
28163 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
28164
28165         * class.cs: Optimizing slightly by removing redundant code after
28166         we switched to the `NoTypes' return value.
28167         (Property.DefineMethod): use NoTypes here too.
28168
28169         This fixes the bug I introduced in my last batch of changes.
28170
28171 2002-03-05  Ravi Pratap  <ravi@ximian.com>
28172
28173         * tree.cs (RecordEnum): Add. We now keep track of enums too.
28174
28175         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
28176         Enums since those are types too. 
28177
28178         * cs-parser.jay (enum_declaration): Record enums as we parse them.
28179
28180         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
28181         thanks to a call during the lookup process.
28182
28183 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
28184
28185         * statement.cs (Foreach): Lots of work to accomodate a particular
28186         kind of foreach statement that I had not kept in mind.  It is
28187         possible to have foreachs on classes that provide a GetEnumerator
28188         method that return objects that implement the "pattern" for using
28189         a foreach, there is no need to support GetEnumerator
28190         specifically. 
28191
28192         This is needed to compile nant.
28193
28194         * decl.cs: Only report 114 if the member is not `Finalize' and if
28195         the warning level is at least 2.
28196
28197         * class.cs: Moved the compare function from Method to
28198         MethodSignature. 
28199
28200         (MethodSignature.InheritableMemberSignatureCompare): Add new
28201         filter function that is used to extract inheritable methods from a
28202         class. 
28203
28204         (Method.Define): Use the new `inheritable_method_signature_filter'
28205         delegate
28206
28207         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
28208         command. 
28209
28210 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
28211
28212         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
28213
28214         * cs-parser.jay: Add opt_semicolon to the interface declaration.
28215
28216         * expression.cs: Pass location information to
28217         ConvertImplicitStandard. 
28218
28219         * class.cs: Added debugging code to track return values from
28220         interfaces. 
28221
28222 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
28223
28224         * expression.cs (Is.DoResolve): If either side of the `is' is an
28225         interface, do not flag the warning.
28226
28227         * ecore.cs (ImplicitReferenceConversion): We need a separate test
28228         for interfaces
28229
28230         * report.cs: Allow for --fatal to be used with --probe.
28231
28232         * typemanager.cs (NoTypes): Move the definition for the empty Type
28233         array here. 
28234
28235         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
28236         properties. 
28237         (TypeContainer.DefineProxy): New function used to proxy to parent
28238         implementations when implementing interfaces.
28239         (TypeContainer.ParentImplements): used to lookup if our parent
28240         implements a public function that is required by an interface.
28241         (TypeContainer.VerifyPendingMethods): Hook this up.
28242
28243         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
28244         `modules' and `assemblies' arraylists into arrays.  We only grow
28245         these are the very early start up of the program, so this improves
28246         the speedof LookupType (nicely measured).
28247
28248         * expression.cs (MakeByteBlob): Replaced unsafe code with
28249         BitConverter, as suggested by Paolo.
28250
28251         * cfold.cs (ConstantFold.Binary): Special case: perform constant
28252         folding of string concatenation, but if either side is a string,
28253         and the other is not, then return null, and let the runtime use
28254         the concatenation on the string plus the object (using
28255         `Object.ToString'). 
28256
28257 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
28258
28259         Constant Folding has been implemented now.
28260
28261         * expression.cs (Unary.Reduce): Do not throw an exception, catch
28262         the error instead on types that are not supported in one's
28263         complement. 
28264
28265         * constant.cs (Constant and all children): New set of functions to
28266         perform implict and explicit conversions.
28267
28268         * ecore.cs (EnumConstant): Implement the new functions to perform
28269         conversion by proxying to the child expression.
28270
28271         * codegen.cs: (ConstantCheckState): Constant evaluation has its
28272         own separate setting that can not be turned off from the command
28273         line using --unchecked or --checked and is only controlled using
28274         the checked/unchecked statements and expressions.  This setting is
28275         used by the constant folder to flag errors.
28276
28277         * expression.cs (CheckedExpr, UncheckedExpr): Set the
28278         ConstantCheckState as well.   
28279
28280         During Resolve, they also have to flag the state, because the
28281         constant folder runs completely in the Resolve phase.
28282
28283         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
28284         well.
28285
28286 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
28287
28288         * cfold.cs: New file, this file contains the constant folder.
28289
28290         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
28291         argument to track whether we are using the resulting address to
28292         load or store a value and provide better error messages. 
28293
28294         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
28295         new AddressOf arguments.
28296
28297         * statement.cs (Foreach.EmitCollectionForeach): Update
28298
28299         * expression.cs (Argument.Emit): Call AddressOf with proper
28300         arguments to track usage.
28301
28302         (New.DoEmit): Call AddressOf with new arguments.
28303
28304         (Unary.Emit): Adjust AddressOf call.
28305
28306 2002-03-01  Ravi Pratap  <ravi@ximian.com>
28307
28308         * cs-parser.jay (member_access): Change the case for pre-defined types
28309         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
28310         this suggestion.
28311
28312         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
28313         a method body.
28314
28315         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
28316         essentially like methods and apply attributes like MethodImplOptions to them too.
28317
28318         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
28319         not being null.
28320
28321         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
28322         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
28323         is the DeclSpace.
28324
28325         * Update code everywhere accordingly.
28326
28327         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
28328
28329         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
28330
28331 2002-02-28  Ravi Pratap  <ravi@ximian.com>
28332
28333         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
28334         try performing lookups against those instead of jumping straight into using
28335         the 'using' clauses.
28336
28337         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
28338
28339         (LookupType): Perform lookups in implicit parents too.
28340
28341         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
28342         sequence as RootContext.LookupType. 
28343
28344         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
28345         the various cases of namespace lookups into this method.
28346
28347 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
28348
28349         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
28350         in positional arguments)
28351
28352         * class.cs (Operator): Update the AllowedModifiers to contain
28353         extern. 
28354
28355         * cs-parser.jay: Update operator declaration to allow for the
28356         operator body to be empty.
28357
28358         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
28359         values. 
28360
28361 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
28362
28363         * class.cs (Method.Emit): Label parameters.
28364
28365         * driver.cs: Return 1 or 0 as the program exit code.
28366
28367 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
28368
28369         * expression.cs: Special case the `null' object when trying to
28370         auto-compute the type, as anything can be explicitly converted to
28371         that. 
28372
28373         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
28374         spotting this Paolo.
28375
28376         (Expression.ImplicitNumericConversion): Perform comparissions of
28377         the type using the underlying type in the case of an enumeration
28378         rather than using the enumeration type for the compare.
28379
28380         Cope with the underlying == type case, which is not possible to
28381         catch before. 
28382
28383         (Expression.ConvertNumericExplicit): Perform comparissions of
28384         the type using the underlying type in the case of an enumeration
28385         rather than using the enumeration type for the compare.
28386
28387         * driver.cs: If the user does not supply an extension, assume .exe
28388
28389         * cs-parser.jay (if_statement): Rewrote so that we can track the
28390         location for the if statement.
28391
28392         * expression.cs (Binary.ConstantFold): Only concat strings when
28393         the operation is "+", not everything ;-)
28394
28395         * statement.cs (Statement.EmitBoolExpression): Take a location
28396         argument. 
28397         (If, While, Do): Track location.
28398
28399         * expression.cs (Binary.ResolveOperator): In the object + string
28400         case, I was missing a call to ConvertImplicit
28401
28402 2002-02-25  Ravi Pratap  <ravi@ximian.com>
28403
28404         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
28405         Location arguments. Ensure we use RootContext.LookupType to do our work
28406         and not try to do a direct Type.GetType and ModuleBuilder.GetType
28407
28408         * interface.cs (PopulateMethod): Handle the type of the parameter being
28409         null gracefully.
28410
28411         * expression.cs (Invocation.BetterFunction): Handle the case when we 
28412         have a params method with no fixed arguments and a call is made with no
28413         arguments.
28414
28415 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
28416
28417         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
28418         the verbatim-string-literal
28419
28420         * support.cs (InternalParameters.ParameterModifier): handle null
28421         fixed parameters.
28422         (InternalParameters.ParameterType): ditto.
28423
28424         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
28425         duplicating the name of the variable parameter.
28426         (GetParameterByName): Fix bug where we were not looking up array
28427         paramters if they were the only present (thanks Paolo!).
28428         (GetParameterInfo): We only have an empty set of types if both
28429         fixed and array are set to null.
28430         (GetParameterInfo-idx): Handle FixedParameter == null
28431
28432         * cs-parser.jay: Handle the case where there is no catch
28433         statements (missing null test).
28434
28435 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
28436
28437         * driver.cs (MainDriver): Be conservative on our command line
28438         handling.
28439
28440         Catch DirectoryNotFoundException when calling GetFiles.
28441
28442         (SplitPathAndPattern): Used to split the input specification into
28443         a path and a pattern that we can feed to Directory.GetFiles.
28444
28445 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
28446
28447         * statement.cs (Fixed): Implement the last case of the Fixed
28448         statement (string handling).
28449
28450         * expression.cs (StringPtr): New class used to return a char * to
28451         a string;  Used by the Fixed statement.
28452
28453         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
28454
28455         * expression.cs (Binary.ResolveOperator): Remove redundant
28456         MemberLookup pn parent type.
28457         Optimize union call, we do not need a union if the types are the same.
28458         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
28459         type.
28460
28461         Specialize the use of MemberLookup everywhere, instead of using
28462         the default settings. 
28463
28464         (StackAlloc): Implement stackalloc keyword.
28465
28466         * cs-parser.jay: Add rule to parse stackalloc.
28467
28468         * driver.cs: Handle /h, /help, /?
28469
28470         * expression.cs (MakeByteBlob): Removed the hacks we had in place
28471         before we supported unsafe code.
28472
28473         * makefile: add --unsafe to the self compilation of mcs.
28474
28475 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
28476
28477         * expression.cs (PointerArithmetic): New class that is used to
28478         perform pointer arithmetic.
28479         (Binary.Resolve): Handle pointer arithmetic
28480         Handle pointer comparission.
28481         (ArrayPtr): Utility expression class that is used to take the
28482         address of an array.
28483
28484         (ElementAccess): Implement array access for pointers
28485
28486         * statement.cs (Fixed): Implement fixed statement for arrays, we
28487         are missing one more case before we are done.
28488
28489         * expression.cs (Indirection): Implement EmitAssign and set the
28490         ExprClass to Variable.  This allows pointer dereferences to be
28491         treated as variables, and to have values assigned to them.
28492
28493         * ecore.cs (Expression.StoreFromPtr): New utility function to
28494         store values dereferencing.
28495
28496 2002-02-20  Ravi Pratap  <ravi@ximian.com>
28497
28498         * expression.cs (Binary.ResolveOperator): Ensure that we are
28499         not trying to operate on a void type - this fixes the reported
28500         bug.
28501
28502         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
28503         the parent implementation is sealed.
28504
28505         * ../errors/cs0239.cs : Add.
28506
28507         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
28508
28509         * typemanager.cs (unverifiable_code_type): Corresponds to 
28510         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
28511         which have unsafe code in them.
28512
28513         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
28514         unsafe context.
28515
28516 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
28517
28518         * cs-tokenizer.cs: Add support for @"litreal strings"
28519
28520         Make tokenizer accept pre-processor directives
28521         on any column (remove the old C-like limitation). 
28522
28523         * rootcontext.cs (EmitCode): Emit any global attributes.
28524         (AddGlobalAttributes): Used to keep track of assembly attributes. 
28525
28526         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
28527
28528         * cs-parser.jay: Add support for global attributes.  
28529
28530 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
28531
28532         * expression.cs (Indirection): New helper class.  Unary will
28533         create Indirection classes to be able to implement the
28534         IMemoryLocation interface on it.
28535
28536 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
28537
28538         * cs-parser.jay (fixed_statement): reference the right statement.
28539
28540         * statement.cs (Fixed.Emit): Finish implementing the fixed
28541         statement for the &x case.
28542
28543 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
28544
28545         * class.cs (Property.Define, Method.Define): Remove newslot when
28546         `implementing'.  
28547
28548         * modifiers.cs: My use of NewSlot when `Abstract' was set was
28549         wrong.  NewSlot should only be used if the `new' keyword is present.
28550
28551         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
28552         locating our system dir.  Sorry about this.
28553
28554 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
28555
28556         * driver.cs (GetSystemDir): Compute correctly the location of our
28557         system assemblies.  I was using the compiler directory instead of
28558         the library directory.
28559
28560 2002-02-13  Ravi Pratap  <ravi@ximian.com>
28561
28562         * expression.cs (BetterFunction): Put back in what Miguel commented out
28563         since it is the correct fix. The problem is elsewhere ;-)
28564
28565         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
28566         parameters of the parms method are themselves compatible or not !
28567
28568         (StandardConversionExists): Fix very dangerous bug where we were forgetting
28569         to check that a class implements an interface before saying that an implicit
28570         conversion was allowed. Use ImplementsInterface to do the checking.
28571
28572 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
28573
28574         * class.cs (Method.Define): Track whether we are an explicit
28575         implementation or not.  And only call DefineMethodOverride if we
28576         are an explicit implementation.
28577
28578         (Property.DefineMethod): Ditto.
28579
28580 2002-02-11  Ravi Pratap  <ravi@ximian.com>
28581
28582         * expression.cs (BetterFunction): Catch hideous bug which was
28583          preventing us from detecting ambiguous calls due to implicit casts i.e
28584         cs0121.
28585
28586 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
28587
28588         * support.cs (Pair): Remove un-needed method.  I figured why I was
28589         getting the error in cs-parser.jay, the variable in a foreach loop
28590         is readonly, and the compiler does not really treat this as a variable.
28591
28592         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
28593         instead of EQUALS in grammar.  
28594
28595         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
28596
28597         * expression.cs (Unary.DoResolve): Check whether the argument is
28598         managed or not.
28599
28600 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
28601
28602         * support.cs: Api for Pair to set a value.  Despite the fact that
28603         the variables are public the MS C# compiler refuses to compile
28604         code that accesses the field if the variable is part of a foreach
28605         statement. 
28606
28607         * statement.cs (Fixed): Begin implementation of the fixed
28608         statement.
28609
28610         (Block.AddVariable): Return the VariableInfo on success and null
28611         on failure instead of true/false. 
28612
28613         * cs-parser.jay (foreach): Catch errors on variables already
28614         defined (we were ignoring this value before) and properly unwind
28615         the block hierarchy
28616
28617         (fixed_statement): grammar for the fixed statement.
28618
28619 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
28620
28621         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
28622         pointer types to be incretemented.
28623
28624         (SizeOf): Implement.
28625
28626         * cs-parser.jay (pointer_member_access): Implement
28627         expr->IDENTIFIER production.
28628
28629         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
28630         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
28631         on safe contexts.
28632
28633         (Unary): Implement indirection.
28634
28635         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
28636         use in non-unsafe context).
28637
28638         (SimpleName.DoResolve): Check for pointers in field access on safe
28639         contexts. 
28640
28641         (Expression.LoadFromPtr): Factor the load-indirect code in this
28642         function.  This was duplicated in UnboxCast and ParameterReference
28643
28644 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
28645
28646         * expression.cs (ComposedCast): report an error if a pointer cast
28647         is used in a safe region.
28648
28649         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
28650         pointer type casts in unsafe context.
28651
28652         * codegen.cs (EmitContext): Set up IsUnsafe.
28653
28654         * cs-parser.jay (non_expression_type): Add productions for pointer
28655         casts. 
28656
28657         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
28658         code.  We should not use force into static mode if the method is
28659         not virtual.  Fixes bug in MIS
28660
28661         * statement.cs (Do.Emit, While.Emit, For.Emit,
28662         Statement.EmitBoolExpression): Add support to Do and While to
28663         propagate infinite loop as `I do return' semantics.
28664
28665         Improve the For case to also test for boolean constants.
28666
28667         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
28668         to the list of attributes we can add.
28669
28670         Remove `EmitContext' argument.
28671
28672         * class.cs (Method.Define): Apply parameter attributes.
28673         (Constructor.Define): Apply parameter attributes.
28674         (MethodCore.LabelParameters): Move here the core of labeling
28675         parameters. 
28676
28677         * support.cs (ReflectionParameters.ParameterModifier,
28678         InternalParameters.ParameterModifier): Use IsByRef on the type and
28679         only return the OUT bit for these parameters instead of in/out/ref
28680         flags.
28681
28682         This is because I miss-understood things.  The ParameterInfo.IsIn
28683         and IsOut represent whether the parameter has the [In] and [Out]
28684         attributes set.  
28685
28686 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
28687
28688         * ecore.cs (FieldExpr.Emit): Release temporaries.
28689
28690         * assign.cs (LocalTemporary.Release): new function.
28691
28692         * codegen.cs (EmitContext.GetTemporaryStorage,
28693         EmitContext.FreeTemporaryStorage): Rework the way we deal with
28694         temporary storage.  Now we can "put back" localbuilders when we
28695         are done with them
28696
28697 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
28698
28699         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
28700         need to make a copy of the variable to generate verifiable code.
28701
28702 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
28703
28704         * driver.cs: Compute dynamically the system directory.
28705
28706         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
28707         Slower, but more generally useful.  Used by the abstract
28708         registering implementation. 
28709
28710         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
28711         the rules for the special rule on Type/instances.  First check if
28712         we have the same name, and if so, try that special static path
28713         rather than the instance path.
28714
28715 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
28716
28717         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
28718         for, while and if.
28719
28720         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
28721         Enum, ValueType, Delegate or Array for non-corlib compiles.
28722
28723         * cs-tokenizer.cs: Catch long identifiers (645)
28724
28725         * typemanager.cs (IndexerPropetyName): Ravi never tested this
28726         piece of code.
28727
28728         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
28729         fix, we were returning too early, so we were not registering
28730         pending methods from abstract classes.
28731
28732         Do not register pending methods if the class is abstract.
28733
28734         * expression.cs (Conditional.DoResolve): Report circular implicit
28735         conversions when we neecd to compute it for conditional
28736         expressions. 
28737
28738         (Is.DoResolve): If the expression is always of the provided type,
28739         flag warning 183.  If the expression can not ever be of the
28740         provided type flag warning 184.
28741
28742         * class.cs: Catch 169 as well.
28743
28744         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
28745         read. 
28746
28747 2002-01-18  Nick Drochak  <ndrochak@gol.com>
28748
28749         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
28750
28751 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
28752
28753         * interface.cs: (PopulateMethod): Check for pointers being defined
28754         only if the unsafe context is active.
28755         (PopulateProperty): ditto.
28756         (PopulateIndexer): ditto.
28757
28758         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
28759         specified.  If pointers are present, make sure that they are
28760         present in an unsafe context.
28761         (Constructor, Constructor.Define): ditto.
28762         (Field, Field.Define): ditto.
28763         (Property, Property.Define): ditto.
28764         (Event, Event.Define): ditto.
28765
28766         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
28767         hashtable if there are classes or structs defined.
28768
28769         * expression.cs (LocalVariableReference.DoResolve): Simplify this
28770         code, as the constant resolution moved.
28771
28772         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
28773         the metadata, so we can flag error 133. 
28774
28775         * decl.cs (MemberCore.UnsafeOK): New function to test that a
28776         pointer is being declared in an unsafe context.
28777
28778 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
28779
28780         * modifiers.cs (Modifiers.Check): Require a Location argument.
28781         Report error 227 for Unsafe use.
28782
28783         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
28784
28785         * statement.cs (For.Emit): If the test is null, then report that
28786         we do `return', as we wont reach anything afterwards.
28787
28788         (Switch.SwitchGoverningType): Track the expression that matched
28789         the conversion.
28790
28791         * driver.cs: Allow negative numbers as an error code to flag.
28792
28793         * cs-parser.jay: Handle 1551.
28794
28795         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
28796
28797 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
28798
28799         * cs-parser.jay: Report 1518 (type declaration can only contain
28800         class, struct, interface, enum or delegate)
28801
28802         (switch_label): Report 1523 (keywords `case' or `default' must
28803         preced code)
28804
28805         (opt_switch_sections): Report 1522 (empty switch)
28806
28807         * driver.cs: Report 1515 (response file specified multiple times)
28808         Report 1516 (Source file specified multiple times).
28809
28810         * expression.cs (Argument.Resolve): Signal 1510
28811
28812         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
28813         access not allowed in static code)
28814
28815 2002-01-11  Ravi Pratap  <ravi@ximian.com>
28816
28817         * typemanager.cs (IsPointerType): Utility method which we are going
28818         to need a lot.
28819
28820         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
28821         the object type, so we take care of that.
28822
28823         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
28824
28825         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
28826         added to non-params parameters :-)
28827
28828         * typemanager.cs (CSharpName): Include 'void' type too. 
28829
28830         (void_ptr_type): Include in the set of core types.
28831
28832         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
28833         duplicating code.
28834
28835         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
28836         an unsafe context.
28837
28838         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
28839         completely forgotten about it.
28840
28841 2002-01-10  Ravi Pratap  <ravi@ximian.com>
28842
28843         * cs-parser.jay (pointer_type): Add. This begins our implementation
28844         of parsing rules for unsafe code.
28845
28846         (unsafe_statement): Implement.
28847
28848         (embedded_statement): Modify to include the above.
28849
28850         * statement.cs (Unsafe): Implement new class for unsafe blocks.
28851
28852         * codegen.cs (EmitContext.InUnsafe): Add. This determines
28853         if the current context is an unsafe one.
28854
28855         * cs-parser.jay (local_variable_pointer_type): Since local variable types
28856         are handled differently, we need separate rules for them.
28857
28858         (local_variable_declaration): Update to use local_variable_pointer_type
28859         to allow variable declarations of unmanaged pointer types.
28860
28861         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
28862         in unsafe contexts.
28863
28864         * ../errors/cs0214.cs : Add.
28865
28866 2002-01-16  Nick Drochak  <ndrochak@gol.com>
28867
28868         * makefile: remove 'response' file when cleaning.
28869
28870 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
28871
28872         * cs-parser.jay: Report 1524.
28873
28874 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
28875
28876         * typemanager.cs (RegisterMethod): drop checking if we have
28877         registered this from here
28878
28879 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
28880
28881         * class.cs (Method.EmitDestructor): Implement calling our base
28882         destructor. 
28883
28884         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
28885         value of InFinally.
28886
28887         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
28888         this routine and will wrap the call in a try/catch block.  Deal
28889         with the case.
28890
28891 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
28892
28893         * ecore.cs (Expression.MemberLookup): instead of taking a
28894         parameter `same_type' that was used to tell whether we could
28895         access private members we compute our containing type from the
28896         EmitContext.
28897
28898         (FieldExpr): Added partial support for volatile fields.  This does
28899         not work for volatile fields exposed from assemblies, as I can not
28900         figure out how to extract the modreq from it.
28901
28902         Updated all the source files to use this.
28903
28904         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
28905         because it is referenced by MemberLookup very often. 
28906
28907 2002-01-09  Ravi Pratap  <ravi@ximian.com>
28908
28909         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
28910         TypeBuilder.GetCustomAttributes to retrieve what we need.
28911
28912         Get rid of redundant default_member_attr_type as this is the same as
28913         default_member_type which already exists.
28914
28915         * interface.cs, attribute.cs : Update accordingly.
28916
28917 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
28918
28919         * typemanager.cs: Enable IndexerPropertyName again.  It does not
28920         work for TYpeBuilders though.  Ravi, can you please fix this?
28921
28922         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
28923
28924         * expression.cs (Argument.Emit): Handle the case of ref objects
28925         being passed to ref functions;  
28926
28927         (ParameterReference.EmitLoad): Loads the content of the pointer
28928         without dereferencing.
28929
28930 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
28931
28932         * cs-tokenizer.cs: Implemented the pre-processing expressions.
28933
28934 2002-01-08  Ravi Pratap  <ravi@ximian.com>
28935
28936         * class.cs (Indexer.DefineMethod): Incorporate the interface
28937         type in the name of the method if we are doing explicit interface
28938         implementation.
28939
28940         * expression.cs (ConversionExists): Remove as it is completely obsolete.
28941
28942         (BetterConversion): Fix extremely trivial bug where we were referring to
28943         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
28944         again !
28945
28946         * ../errors/bug16.cs : Add although we have fixed it.
28947
28948 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
28949
28950         * expression.cs (BaseIndexer): Begin implementation.
28951
28952         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
28953
28954         * cs-parser.jay (indexer_declarator): Use qualified_identifier
28955         production directly to remove a shift/reduce, and implement
28956         explicit interface implementation.
28957
28958         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
28959         after a floating point suffix.
28960
28961         * expression.cs (DoNumericPromotions): Improved the conversion for
28962         uint/uint.  If we have a constant, we avoid doing a typecast to a
28963         larger type.
28964
28965         * class.cs (Indexer): Implement explicit interface implementation
28966         for indexers.
28967
28968 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
28969
28970         * class.cs: make the default instance constructor public and hidebysig.
28971
28972 2001-01-03  Ravi Pratap  <ravi@ximian.com>
28973
28974         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
28975         so we can call it from elsewhere.
28976
28977         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
28978         we emit it internally if the class has a defined indexer; otherwise the user
28979         emits it by decorating the class definition with the DefaultMemberAttribute.
28980
28981         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
28982         attribute is not used on a type which defines an indexer.
28983
28984         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
28985         character when we skip whitespace.
28986
28987         * ../errors/cs0646.cs : Add.
28988
28989 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
28990
28991         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
28992         again. 
28993
28994         * makefile: Add practical target `mcs3.exe' which builds the third
28995         generation compiler. 
28996
28997         * expression.cs (New): Fix structures constructor calling.
28998
28999         * class.cs (Property, Method, Indexer): Emit Final flag on the
29000         method if we are an interface implementation and we are not
29001         abstract. 
29002
29003         * ecore.cs (PropertyExpr): New public field `IsBase', tells
29004         whether this property is referencing a `base' method.
29005
29006         * expression.cs (Invocation.EmitCall): take an extra argument:
29007         is_base, this is used to determine whether the `call' or
29008         `callvirt' opcode should be used.
29009
29010
29011         * delegate.cs: update EmitCall.
29012
29013         * class.cs (Method.Define): Set NewSlot for the cases where we are
29014         not implementing an interface method.
29015
29016         (Property.Define): ditto.
29017
29018 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
29019
29020         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
29021         'r'.  Allows mcs to parse itself fully.
29022
29023 2002-01-02  Ravi Pratap  <ravi@ximian.com>
29024
29025         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
29026         of the number of initializers that require the InitializeArray method.
29027
29028         (CheckIndices): Store the Expression in all cases - not the plain value. Also
29029         update the above field where necessary.
29030
29031         (MakeByteBlob): Update accordingly.
29032
29033         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
29034         greater than 2.
29035
29036         (EmitDynamicInitializers): Update in accordance with the new optimization.
29037
29038         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
29039         same OpCode applies.
29040
29041         * cs-parser.jay : Fix some glaring errors I introduced.
29042
29043 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
29044
29045         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
29046         so that we can check for name clashes there too.
29047
29048         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
29049         for interface indexers.
29050
29051         * interfaces.cs (Define): Emit the default member attribute.
29052
29053         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
29054         variable was being referred to while setting the value ;-)
29055
29056 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
29057
29058         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
29059         byte-by-byte information when we know the data is zero.
29060
29061         Make the block always a multiple of 4, because
29062         DefineInitializedData has a bug.
29063
29064         * assign.cs: Fix, we should assign from the temporary, not from
29065         the source. 
29066
29067         * expression.cs (MakeByteBlob): Fix my incorrect code.
29068
29069 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
29070
29071         * typemanager.cs (EnumToUnderlying): This function is used to get
29072         the underlying type from an enumeration, because it does not
29073         always work. 
29074
29075         * constant.cs: Use the I4_S form for values between -128 and 127.
29076
29077         * statement.cs (Block.LookupLabel): Looks up a label.
29078         (Block): Drop support for labeled blocks.
29079
29080         (LabeledStatement): New kind of statement that represents a label
29081         only.
29082
29083         (Goto): Finally implement this bad boy.
29084
29085         * cs-parser.jay: Update to reflect new mechanism to implement
29086         labels.
29087
29088 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
29089
29090         * codegen.cs (EmitContext.This): a codegen property that keeps the
29091         a single instance of this instead of creating many different this
29092         instances. 
29093
29094         * delegate.cs (Delegate.DoResolve): Update to use the property;
29095
29096         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
29097
29098         * expression.cs (BaseAccess.DoResolve): Ditto.
29099
29100 2001-12-29  Ravi Pratap  <ravi@ximian.com>
29101
29102         * typemanager.cs (methodimpl_attr_type): Add to hold the type
29103         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
29104
29105         (InitCoreTypes): Update accordingly.
29106
29107         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
29108         so we can quickly store the state.
29109
29110         (ApplyAttributes): Set the correct implementation flags
29111         for InternalCall methods.
29112
29113 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
29114
29115         * expression.cs (EmitCall): if a method is not virtual, then do
29116         not use callvirt on it.
29117
29118         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
29119         user defined stuff) requires the use of stobj, which takes an
29120         address on the stack instead of an array and an index.  So emit
29121         the Ldelema operation for it.
29122
29123         (EmitStoreOpcode): Use stobj for valuetypes.
29124
29125         (UnaryMutator.EmitCode): Use the right 1 value depending on
29126         whether we are dealing with int64/uint64, float or doubles.
29127
29128         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
29129         constructors that I implemented last night.
29130
29131         (Constructor.IsDefault): Fix to work properly for static
29132         constructors.
29133
29134         * cs-parser.jay (CheckDef): report method signature errors.
29135         Update error number 103 to be 132.
29136
29137         * decl.cs: New AdditionResult enumeration value: MethodExists.
29138         Although we do this check for methods later on in the semantic
29139         analysis, catching repeated default constructors is so easy that
29140         we catch these here. 
29141
29142         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
29143         promotions code.
29144
29145         (ParameterReference.EmitAssign, Emit): handle
29146         bools as bytes.
29147
29148         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
29149         (ArrayAccess.EmitStoreOpcode): ditto.
29150
29151         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
29152
29153         * expression.cs (MakeByteBlob): Complete all the missing types
29154         (uint, short, ushort, byte, sbyte)
29155
29156         * class.cs: Only init instance field initializers on instance
29157         constructors. 
29158
29159         Rename `constructors' to instance_constructors. 
29160
29161         (TypeContainer.AddConstructor): Only add constructors to the list
29162         if it is not static.
29163
29164         Make sure that we handle default_static_constructor independently
29165         everywhere where we handle instance_constructors
29166
29167 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
29168
29169         * class.cs: Do not lookup or create a base initializer for a
29170         static constructor.
29171
29172         (ConstructorInitializer.Resolve): use the proper type to lookup
29173         for constructors.
29174
29175         * cs-parser.jay: Report error 1585 (modifiers between type and name).
29176
29177         * enum.cs, interface.cs: Remove CloseType, this is taken care by
29178         in DeclSpace. 
29179
29180         * decl.cs: CloseType is now an virtual method, the default
29181         implementation just closes this type.
29182
29183 2001-12-28  Ravi Pratap  <ravi@ximian.com>
29184
29185         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
29186         to PreserveSig by default. Also emit HideBySig on such methods.
29187
29188         Basically, set the defaults to standard values.
29189
29190         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
29191         argument, if candidate is better, it can't be worse than the best !
29192
29193         (Invocation): Re-write bits to differentiate between methods being
29194         applicable in their expanded form and their normal form - for params
29195         methods of course.
29196
29197         Get rid of use_standard everywhere as only standard conversions are allowed
29198         in overload resolution. 
29199
29200         More spec conformance.
29201
29202 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
29203
29204         * driver.cs: Add --timestamp, to see where the compiler spends
29205         most of its time.
29206
29207         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
29208         `this' in static code.
29209
29210         (SimpleName.DoResolve): Implement in terms of a helper function
29211         that allows static-references to be passed upstream to
29212         MemberAccess.
29213
29214         (Expression.ResolveWithSimpleName): Resolve specially simple
29215         names when called by MemberAccess to implement the special
29216         semantics. 
29217
29218         (Expression.ImplicitReferenceConversion): Handle conversions from
29219         Null to reference types before others, as Null's type is
29220         System.Object. 
29221
29222         * expression.cs (Invocation.EmitCall): Handle the special case of
29223         calling methods declared on a reference type from a ValueType
29224         (Base classes System.Object and System.Enum)
29225
29226         (MemberAccess.Resolve): Only perform lookups on Enumerations if
29227         the left hand side is a TypeExpr, not on every enumeration. 
29228
29229         (Binary.Resolve): If types are reference types, then do a cast to
29230         object on operators != and == of both arguments.
29231
29232         * typemanager.cs (FindMembers): Extract instance and static
29233         members if requested.
29234
29235         * interface.cs (PopulateProperty): Use void_type instead of null
29236         as the return type for the setter method.
29237
29238         (PopulateIndexer): ditto.
29239
29240 2001-12-27  Ravi Pratap  <ravi@ximian.com>
29241
29242         * support.cs (ReflectionParameters): Fix minor bug where we
29243         were examining the wrong parameter for the ParamArray attribute.
29244
29245         Cope with requests for the type of the parameter at position
29246         greater than the params parameter's. We now return the element
29247         type of the params array as that makes more sense.
29248
29249         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
29250         accordingly as we no longer have to extract the element type
29251         ourselves.
29252
29253         (Invocation.OverloadResolve): Update.
29254
29255 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
29256
29257         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
29258         against IEnumerator, test whether the return value is a descendant
29259         of the IEnumerator interface.
29260
29261         * class.cs (Indexer.Define): Use an auxiliary method to implement
29262         the other bits of the method definition.  Begin support for
29263         explicit interface implementation.
29264
29265         (Property.DefineMethod): Use TypeManager.void_type instead of null
29266         for an empty return value.
29267
29268 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
29269
29270         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
29271         dealing with a FieldExpr which is composed of a FieldBuilder, in
29272         the code path we did extract the constant, but we should have
29273         obtained the underlying value to be able to cast it (otherwise we
29274         end up in an infinite loop, this is what Ravi was running into).
29275
29276         (ArrayCreation.UpdateIndices): Arrays might be empty.
29277
29278         (MemberAccess.ResolveMemberAccess): Add support for section
29279         14.5.4.1 that deals with the special case of E.I when E is a type
29280         and something else, that I can be a reference to a static member.
29281
29282         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
29283         handle a particular array type to create byte blobs, it is just
29284         something we dont generate byteblobs for.
29285
29286         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
29287         arguments. 
29288
29289         * location.cs (Push): remove the key from the hashtable that we
29290         are about to add.   This happens for empty files.
29291
29292         * driver.cs: Dispose files after we have parsed them.
29293
29294         (tokenize): new function that only runs the tokenizer on its
29295         input, for speed testing.
29296
29297 2001-12-26  Ravi Pratap  <ravi@ximian.com>
29298
29299         * class.cs (Event.Define): Define the private field only if there
29300         are no accessors defined.
29301
29302         * expression.cs (ResolveMemberAccess): If there is no associated
29303         field with the event, that means we have an event defined with its
29304         own accessors and we should flag error cs0070 since transforming
29305         ourselves into a field is not valid in that case.
29306
29307         * ecore.cs (SimpleName.DoResolve): Same as above.
29308
29309         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
29310         and charset to sane values.
29311
29312 2001-12-25  Ravi Pratap  <ravi@ximian.com>
29313
29314         * assign.cs (DoResolve): Perform check on events only if they 
29315         are being accessed outside the declaring type.
29316
29317         * cs-parser.jay (event_declarations): Update rules to correctly
29318         set the type of the implicit parameter etc.
29319
29320         (add_accessor, remove_accessor): Set current local parameters.
29321
29322         * expression.cs (Binary): For delegate addition and subtraction,
29323         cast the return value from the method into the appropriate delegate
29324         type.
29325
29326 2001-12-24  Ravi Pratap  <ravi@ximian.com>
29327
29328         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
29329         of these as the workaround is unnecessary.
29330
29331         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
29332         delegate data - none of that is needed at all.
29333
29334         Re-write bits to extract the instance expression and the delegate method
29335         correctly.
29336
29337         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
29338         on delegates too.
29339
29340         * attribute.cs (ApplyAttributes): New method to take care of common tasks
29341         of attaching attributes instead of duplicating code everywhere.
29342
29343         * everywhere : Update code to do attribute emission using the above method.
29344
29345 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
29346
29347         * expression.cs (IsParamsMethodApplicable): if there are not
29348         parameters, return immediately.
29349
29350         * ecore.cs: The 0 literal can be implicity converted to an enum
29351         type. 
29352
29353         (SimpleName.DoResolve): First lookup the type, then lookup the
29354         members. 
29355
29356         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
29357         want to get its address.  If the InstanceExpression is not
29358         addressable, store the result in a temporary variable, then get
29359         the address of it.
29360
29361         * codegen.cs: Only display 219 errors on warning level or above. 
29362
29363         * expression.cs (ArrayAccess): Make it implement the
29364         IMemoryLocation interface.
29365
29366         (Binary.DoResolve): handle the operator == (object a, object b)
29367         and operator != (object a, object b) without incurring into a
29368         BoxedCast (because 5 != o should never be performed).
29369
29370         Handle binary enumerator operators.
29371
29372         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
29373         value type, otherwise use Ldelem_ref.
29374
29375         Use precomputed names;
29376
29377         (AddressOf): Implement address of
29378
29379         * cs-parser.jay (labeled_statement): Fix recursive block
29380         addition by reworking the production.
29381
29382         * expression.cs (New.DoEmit): New has a special case:
29383                 
29384                  If we are dealing with a ValueType, we have a few
29385                  situations to deal with:
29386                 
29387                     * The target of New is a ValueType variable, that is
29388                       easy, we just pass this as the variable reference
29389                 
29390                     * The target of New is being passed as an argument,
29391                       to a boxing operation or a function that takes a
29392                       ValueType.
29393                 
29394                       In this case, we need to create a temporary variable
29395                       that is the argument of New.
29396
29397
29398 2001-12-23  Ravi Pratap  <ravi@ximian.com>
29399
29400         * rootcontext.cs (LookupType): Check that current_type is not null before
29401         going about looking at nested types.
29402
29403         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
29404         not implement the IAssignMethod interface any more.
29405
29406         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
29407         where we tranform them into FieldExprs if they are being resolved from within
29408         the declaring type.
29409
29410         * ecore.cs (SimpleName.DoResolve): Do the same here.
29411
29412         * assign.cs (DoResolve, Emit): Clean up code considerably. 
29413
29414         * ../errors/bug10.cs : Add.
29415
29416         * ../errors/cs0070.cs : Add.
29417
29418         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
29419
29420         * assign.cs : Get rid of EventIsLocal everywhere.
29421
29422 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
29423
29424         * ecore.cs (ConvertIntLiteral): finished the implementation.
29425
29426         * statement.cs (SwitchLabel): Convert the value we are using as a
29427         key before looking up the table.
29428
29429 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
29430
29431         * codegen.cs (EmitTopBlock): Require a Location argument now.
29432
29433         * cs-parser.jay (constructor_declarator): We need to setup
29434         current_local_parameters before we parse the
29435         opt_constructor_initializer, to allow the variables to be bound
29436         to the constructor arguments.
29437
29438         * rootcontext.cs (LookupType): First lookup nested classes in our
29439         class and our parents before we go looking outside our class.
29440
29441         * expression.cs (ConstantFold): Extract/debox the values at the
29442         beginnning. 
29443
29444         * rootcontext.cs (EmitCode): Resolve the constants first before we
29445         resolve the types.  This is not really needed, but it helps debugging.
29446
29447         * statement.cs: report location.
29448
29449         * cs-parser.jay: pass location to throw statement.
29450
29451         * driver.cs: Small bug fix.
29452
29453         * report.cs: Updated format to be 4-zero filled digits.
29454
29455 2001-12-22  Ravi Pratap  <ravi@ximian.com>
29456
29457         * expression.cs (CheckIndices): Fix minor bug where the wrong
29458         variable was being referred to ;-)
29459
29460         (DoEmit): Do not call EmitStaticInitializers when the 
29461         underlying type is System.Object.
29462
29463 2001-12-21  Ravi Pratap  <ravi@ximian.com>
29464
29465         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
29466         and do the usual workaround for SRE.
29467
29468         * class.cs (MyEventBuilder.EventType): New member to get at the type
29469         of the event, quickly.
29470
29471         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
29472
29473         * assign.cs (Assign.DoResolve): Handle the case when the target
29474         is an EventExpr and perform the necessary checks.
29475
29476         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
29477         interface.
29478
29479         (SimpleName.MemberStaticCheck): Include check for EventExpr.
29480
29481         (EventExpr): Set the type in the constructor itself since we 
29482         are meant to be born fully resolved.
29483
29484         (EventExpr.Define): Revert code I wrote earlier.
29485                 
29486         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
29487         instance expression is null. The instance expression is a This in that case
29488         or a null, depending on whether it is a static method or not.
29489
29490         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
29491         refers to more than one method.
29492
29493         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
29494         and accordingly flag errors.
29495
29496 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
29497
29498         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
29499
29500 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
29501
29502         * location.cs (ToString): Provide useful rutine.
29503
29504 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
29505
29506         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
29507         objects, return the actual integral boxed.
29508
29509         * statement.cs (SwitchLabel): define an ILLabel for each
29510         SwitchLabel. 
29511
29512         (Switch.CheckSwitch): If the value is a Literal, extract
29513         the underlying literal.
29514
29515         Also in the unused hashtable we had, add the SwitchLabel so we can
29516         quickly look this value up.
29517
29518         * constant.cs: Implement a bunch of new constants.  Rewrite
29519         Literal based on this.  Made changes everywhere to adapt to this.
29520
29521         * expression.cs (Expression.MakeByteBlob): Optimize routine by
29522         dereferencing array only once, and also copes with enumrations.
29523
29524         bytes are two bytes wide, not one.
29525
29526         (Cast): Perform constant conversions.
29527
29528         * ecore.cs (TryImplicitIntConversion): Return literals instead of
29529         wrappers to the literals here.
29530
29531         * expression.cs (DoNumericPromotions): long literals can converted
29532         to ulong implicity (this is taken care of elsewhere, but I was
29533         missing this spot).
29534
29535         * ecore.cs (Expression.Literalize): Make the return type Literal,
29536         to improve type checking.
29537
29538         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
29539
29540 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
29541
29542         * literal.cs: Revert code from ravi that checked the bounds.  The
29543         bounds are sane by the definition of the type itself. 
29544
29545         * typemanager.cs: Fix implementation of ImplementsInterface.  We
29546         need to actually look up in our parent hierarchy for interfaces
29547         implemented. 
29548
29549         * const.cs: Use the underlying type for enumerations
29550
29551         * delegate.cs: Compute the basename for the delegate creation,
29552         that should fix the delegate test case, and restore the correct
29553         Type Lookup semantics in rootcontext
29554
29555         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
29556         referencing a nested type with the Reflection API is using the "+"
29557         sign. 
29558
29559         * cs-parser.jay: Do not require EOF token at the end.
29560
29561 2001-12-20  Ravi Pratap  <ravi@ximian.com>
29562
29563         * rootcontext.cs (LookupType): Concatenate type names with
29564         a '.' instead of a '+' The test suite passes again.
29565
29566         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
29567         field of the enumeration.
29568
29569         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
29570         the case when the member is an EventExpr.
29571
29572         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
29573         static has an associated instance expression.
29574
29575         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
29576
29577         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
29578
29579         * class.cs (Event.Define): Register event and perform appropriate checks
29580         for error #111.
29581
29582         We define the Add and Remove methods even if the use provides none because
29583         in that case, we provide default implementations ourselves.
29584
29585         Define a private field of the type of the event. This is done by the CSC compiler
29586         and we should be doing it too ;-)
29587
29588         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
29589         More methods we use in code we generate.
29590
29591         (multicast_delegate_type, delegate_type): Two separate types since the distinction
29592         is important.
29593
29594         (InitCoreTypes): Update accordingly for the above.
29595
29596         * class.cs (Event.Emit): Generate code for default accessors that we provide
29597
29598         (EmitDefaultMethod): Do the job in the above.
29599
29600         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
29601         appropriate place.
29602
29603 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
29604
29605         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
29606         builders even if we were missing one.
29607
29608         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
29609         pass the Basename as our class name instead of the Name.  The
29610         basename will be correctly composed for us.
29611
29612         * parameter.cs (Paramters): Now takes a Location argument.
29613
29614         * decl.cs (DeclSpace.LookupType): Removed convenience function and
29615         make all the code call directly LookupType in RootContext and take
29616         this chance to pass the Location information everywhere.
29617
29618         * Everywhere: pass Location information.
29619
29620 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
29621
29622         * class.cs (Constructor.Define): Updated way of detecting the
29623         length of the parameters.
29624
29625         (TypeContainer.DefineType): Use basename as the type name for
29626         nested types.
29627
29628         (TypeContainer.Define): Do not recursively define types here, as
29629         definition is taken care in order by the RootContext.
29630
29631         * tree.cs: Keep track of namespaces in a per-file basis.
29632
29633         * parameter.cs (Parameter.ComputeSignature): Update to use
29634         DeclSpace. 
29635
29636         (Parameters.GetSignature): ditto.
29637
29638         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
29639         instead of a TypeContainer.
29640
29641         (Interface.SemanticAnalysis): Use `this' instead of our parent to
29642         resolve names.  Because we need to be resolve in our context, not
29643         our parents.
29644
29645         * driver.cs: Implement response files.
29646
29647         * class.cs (TypeContainer.DefineType): If we are defined, do not
29648         redefine ourselves.
29649
29650         (Event.Emit): Emit the code for add/remove handlers.
29651         (Event.Define): Save the MethodBuilders for add/remove.
29652
29653         * typemanager.cs: Use pair here too.
29654
29655         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
29656         DictionaryEntry requires the first argument to be non-null.  
29657
29658         (enum_declaration): Compute full name for registering the
29659         enumeration.
29660
29661         (delegate_declaration): Instead of using
29662         formal_parameter_list, use opt_formal_parameter_list as the list
29663         can be empty.
29664
29665         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
29666         (EventParsing): New property that controls whether `add' and
29667         `remove' are returned as tokens or identifiers (for events);
29668
29669 2001-12-19  Ravi Pratap  <ravi@ximian.com>
29670
29671         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
29672         use MyEventBuilder only and let it wrap the real builder for us.
29673
29674         (MyEventBuilder): Revamp constructor etc.
29675
29676         Implement all operations that we perform on EventBuilder in precisely the same
29677         way here too.
29678
29679         (FindMembers): Update to use the EventBuilder member.
29680
29681         (Event.Emit): Update accordingly.
29682
29683 2001-12-18  Ravi Pratap  <ravi@ximian.com>
29684
29685         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
29686         by calling the appropriate methods.
29687
29688         (GetCustomAttributes): Make stubs as they cannot possibly do anything
29689         useful.
29690
29691         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
29692
29693 2001-12-17  Ravi Pratap  <ravi@ximian.com>
29694
29695         * delegate.cs (Delegate.Populate): Check that the return type
29696         and various parameters types are indeed accessible.
29697
29698         * class.cs (Constructor.Define): Same here.
29699
29700         (Field.Define): Ditto.
29701
29702         (Event.Define): Ditto.
29703
29704         (Operator.Define): Check that the underlying Method defined itself
29705         correctly - so it's MethodBuilder should not be null.
29706
29707         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
29708         expression happens to be null.
29709
29710         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
29711         members but as of now we don't seem to be able to do anything really useful with it.
29712
29713         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
29714         not the EventBuilder.
29715
29716 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
29717
29718         * cs-tokenizer.cs: Add support for defines.
29719         Add support for #if, #elif, #else, #endif
29720
29721         (eval_var): evaluates a variable.
29722         (eval): stubbed for evaluating functions.
29723
29724         * cs-parser.jay: Pass the defines information
29725
29726         * driver.cs: Add --define command line option.
29727
29728         * decl.cs: Move MemberCore here.
29729
29730         Make it the base class for DeclSpace.  This allows us to catch and
29731         report 108 and 109 for everything now.
29732
29733         * class.cs (TypeContainer.Define): Extract all the members
29734         before populating and emit the warning 108 (new keyword required
29735         to override) instead of having each member implement this.
29736
29737         (MemberCore.Define): New abstract method, we will be using this in
29738         the warning reporting engine in Populate.
29739
29740         (Operator.Define): Adjust to new MemberCore protocol. 
29741
29742         * const.cs (Const): This does not derive from Expression, it is a
29743         temporary object we use to create fields, it is a MemberCore. 
29744
29745         * class.cs (Method.Define): Allow the entry point to be in a
29746         specific class.
29747
29748         * driver.cs: Rewrite the argument handler to clean it up a bit.
29749
29750         * rootcontext.cs: Made it just an auxiliary namespace feature by
29751         making everything static.
29752
29753         * driver.cs: Adapt code to use RootContext type name instead of
29754         instance variable.
29755
29756         * delegate.cs: Remove RootContext argument.
29757
29758         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
29759         argument. 
29760
29761         * class.cs (Event.Define): The lookup can fail.
29762
29763         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
29764
29765         * expression.cs: Resolve the this instance before invoking the code.
29766
29767 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
29768
29769         * cs-parser.jay: Add a production in element_access that allows
29770         the thing to become a "type" reference.  This way we can parse
29771         things like "(string [])" as a type.
29772
29773         Note that this still does not handle the more complex rules of
29774         casts. 
29775
29776
29777         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
29778
29779         * ecore.cs: (CopyNewMethods): new utility function used to
29780         assemble the list of methods from running FindMembers.
29781
29782         (MemberLookup): Rework FindMembers so that 
29783
29784 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
29785
29786         * class.cs (TypeContainer): Remove Delegates who fail to be
29787         defined.
29788
29789         * delegate.cs (Populate): Verify that we dont get null return
29790         values.   TODO: Check for AsAccessible.
29791
29792         * cs-parser.jay: Use basename to emit error 574 (destructor should
29793         have the same name as container class), not the full name.
29794
29795         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
29796         possible representation.  
29797
29798         Also implements integer type suffixes U and L.
29799
29800 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
29801
29802         * expression.cs (ArrayCreation.DoResolve): We need to do the
29803         argument resolution *always*.
29804
29805         * decl.cs: Make this hold the namespace.  Hold the root context as
29806         well.
29807         (LookupType): Move here.
29808
29809         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
29810
29811         * location.cs (Row, Name): Fixed the code, it was always returning
29812         references to the first file.
29813
29814         * interface.cs: Register properties defined through interfaces.
29815
29816         * driver.cs: Add support for globbing on the command line
29817
29818         * class.cs (Field): Make it derive from MemberCore as well.
29819         (Event): ditto.
29820
29821 2001-12-15  Ravi Pratap  <ravi@ximian.com>
29822
29823         * class.cs (Event::Define): Check that the type of the event is a delegate
29824         type else flag error #66.
29825
29826         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
29827         same.
29828
29829         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
29830         values of EntryPoint, CharSet etc etc.
29831
29832         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
29833
29834         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
29835         be null and we should ignore this. I am not sure if this is really clean. Apparently,
29836         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
29837         which needs this to do its work.
29838
29839         * ../errors/cs0066.cs : Add.
29840
29841 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
29842
29843         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
29844         helper functions.
29845
29846         * class.cs: (MethodSignature.MethodSignature): Removed hack that
29847         clears out the parameters field.
29848         (MemberSignatureCompare): Cleanup
29849
29850         (MemberCore): New base class used to share code between MethodCore
29851         and Property.
29852
29853         (RegisterRequiredImplementations) BindingFlags.Public requires
29854         either BindingFlags.Instace or Static.  Use instance here.
29855
29856         (Property): Refactored code to cope better with the full spec.
29857
29858         * parameter.cs (GetParameterInfo): Return an empty array instead
29859         of null on error.
29860
29861         * class.cs (Property): Abstract or extern properties have no bodies.
29862
29863         * parameter.cs (GetParameterInfo): return a zero-sized array.
29864
29865         * class.cs (TypeContainer.MethodModifiersValid): Move all the
29866         method modifier validation to the typecontainer so we can reuse
29867         this on properties.
29868
29869         (MethodCore.ParameterTypes): return an empty sized array of types.
29870
29871         (Property.Define): Test property modifier validity.
29872
29873         Add tests for sealed/override too.
29874
29875         (Method.Emit): abstract or extern methods have no bodies.
29876
29877 2001-12-14  Ravi Pratap  <ravi@ximian.com>
29878
29879         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
29880         thing.
29881
29882         (Method::Define, ::Emit): Modify accordingly.
29883
29884         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
29885
29886         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
29887
29888         * makefile: Pass in /unsafe.
29889
29890 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
29891
29892         * class.cs (MakeKey): Kill routine.
29893
29894         * class.cs (TypeContainer.Define): Correctly define explicit
29895         method implementations (they require the full interface name plus
29896         the method name).
29897
29898         * typemanager.cs: Deply the PtrHashtable here and stop using the
29899         lame keys.  Things work so much better.
29900
29901         This of course broke everyone who depended on `RegisterMethod' to
29902         do the `test for existance' test.  This has to be done elsewhere.
29903
29904         * support.cs (PtrHashtable): A hashtable that avoid comparing with
29905         the object stupid Equals method (because, that like fails all over
29906         the place).  We still do not use it.
29907
29908         * class.cs (TypeContainer.SetRequiredInterface,
29909         TypeContainer.RequireMethods): Killed these two routines and moved
29910         all the functionality to RegisterRequiredImplementations.
29911
29912         (TypeContainer.RegisterRequiredImplementations): This routine now
29913         registers all the implementations required in an array for the
29914         interfaces and abstract methods.  We use an array of structures
29915         which can be computed ahead of time to reduce memory usage and we
29916         also assume that lookups are cheap as most classes will not
29917         implement too many interfaces.
29918
29919         We also avoid creating too many MethodSignatures.
29920
29921         (TypeContainer.IsInterfaceMethod): Update and optionally does not
29922         clear the "pending" bit if we find that there are problems with
29923         the declaration.
29924
29925         (TypeContainer.VerifyPendingMethods): Update to report errors of
29926         methods that look like implementations but are not.
29927
29928         (TypeContainer.Define): Add support for explicit interface method
29929         implementation. 
29930
29931 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
29932
29933         * typemanager.cs: Keep track of the parameters here instead of
29934         being a feature of the TypeContainer.
29935
29936         * class.cs: Drop the registration of parameters here, as
29937         InterfaceMethods are also interface declarations.
29938
29939         * delegate.cs: Register methods with the TypeManager not only with
29940         the TypeContainer.  This code was buggy.
29941
29942         * interface.cs: Full registation here.
29943
29944 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
29945
29946         * expression.cs: Remove reducer for binary expressions, it can not
29947         be done this way.
29948
29949         * const.cs: Put here the code that used to go into constant.cs
29950
29951         * constant.cs: Put here the code for constants, this is a new base
29952         class for Literals.
29953
29954         * literal.cs: Make Literal derive from Constant.
29955
29956 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
29957
29958         * statement.cs (Return.Emit): Report error 157 if the user
29959         attempts to return from a finally block.
29960
29961         (Return.Emit): Instead of emitting a return, jump to the end of
29962         the function.
29963
29964         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
29965         LocalBuilder to store the result of the function.  ReturnLabel is
29966         the target where we jump.
29967
29968
29969 2001-12-09  Radek Doulik  <rodo@ximian.com>
29970
29971         * cs-parser.jay: remember alias in current namespace
29972
29973         * ecore.cs (SimpleName::DoResolve): use aliases for types or
29974         namespaces
29975
29976         * class.cs (LookupAlias): lookup alias in my_namespace
29977
29978         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
29979         aliases hashtable
29980         (LookupAlias): lookup alias in this and if needed in parent
29981         namespaces
29982
29983 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
29984
29985         * support.cs: 
29986
29987         * rootcontext.cs: (ModuleBuilder) Made static, first step into
29988         making things static.  I need this to avoid passing the
29989         TypeContainer when calling ParameterType.
29990
29991         * support.cs (InternalParameters.ParameterType): Remove ugly hack
29992         that did string manipulation to compute the type and then call
29993         GetType.  Use Parameter.ParameterType instead.
29994
29995         * cs-tokenizer.cs: Consume the suffix for floating values.
29996
29997         * expression.cs (ParameterReference): figure out whether this is a
29998         reference parameter or not.  Kill an extra variable by computing
29999         the arg_idx during emission.
30000
30001         * parameter.cs (Parameters.GetParameterInfo): New overloaded
30002         function that returns whether a parameter is an out/ref value or not.
30003
30004         (Parameter.ParameterType): The type of the parameter (base,
30005         without ref/out applied).
30006
30007         (Parameter.Resolve): Perform resolution here.
30008         (Parameter.ExternalType): The full type (with ref/out applied).
30009
30010         * statement.cs (Using.Emit, Using.EmitExpression): Implement
30011         support for expressions on the using statement.
30012
30013 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
30014
30015         * statement.cs (Using.EmitLocalVariableDecls): Split the
30016         localvariable handling of the using statement.
30017
30018         (Block.EmitMeta): Keep track of variable count across blocks.  We
30019         were reusing slots on separate branches of blocks.
30020
30021         (Try.Emit): Emit the general code block, we were not emitting it. 
30022
30023         Check the type of the declaration to be an IDisposable or
30024         something that can be implicity converted to it. 
30025
30026         Emit conversions if required.
30027
30028         * ecore.cs (EmptyExpression): New utility class.
30029         (Expression.ImplicitConversionExists): New utility function.
30030
30031 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
30032
30033         * statement.cs (Using): Implement.
30034
30035         * expression.cs (LocalVariableReference): Support read only variables.
30036
30037         * statement.cs: Remove the explicit emit for the Leave opcode.
30038         (VariableInfo): Add a readonly field.
30039
30040 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
30041
30042         * ecore.cs (ConvCast): new class used to encapsulate the various
30043         explicit integer conversions that works in both checked and
30044         unchecked contexts.
30045
30046         (Expression.ConvertNumericExplicit): Use new ConvCast class to
30047         properly generate the overflow opcodes.
30048
30049 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
30050
30051         * statement.cs: The correct type for the EmptyExpression is the
30052         element_type, not the variable type.  Ravi pointed this out.
30053
30054 2001-12-04  Ravi Pratap  <ravi@ximian.com>
30055
30056         * class.cs (Method::Define): Handle PInvoke methods specially
30057         by using DefinePInvokeMethod instead of the usual one.
30058
30059         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
30060         above to do the task of extracting information and defining the method.
30061
30062 2001-12-04  Ravi Pratap  <ravi@ximian.com>
30063
30064         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
30065         of the condition for string type.
30066
30067         (Emit): Move that here. 
30068
30069         (ArrayCreation::CheckIndices): Keep string literals in their expression
30070         form.
30071
30072         (EmitDynamicInitializers): Handle strings appropriately.
30073
30074 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
30075
30076         * codegen.cs (EmitContext): Replace multiple variables with a
30077         single pointer to the current Switch statement.
30078
30079         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
30080         EmitContext.
30081
30082 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
30083
30084         * statement.cs 
30085
30086         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
30087         default'.
30088
30089         (Foreach.Emit): Foreach on arrays was not setting
30090         up the loop variables (for break/continue).
30091
30092         (GotoCase): Semi-implented.
30093
30094 2001-12-03  Ravi Pratap  <ravi@ximian.com>
30095
30096         * attribute.cs (CheckAttribute): Handle system attributes by using
30097         Attribute.GetAttributes to examine information we need.
30098
30099         (GetValidPlaces): Same here.
30100
30101         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
30102
30103         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
30104
30105         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
30106
30107         (Method::Define): Set appropriate flags if we have a DllImport attribute.
30108
30109         (Method::Emit): Handle the case when we are a PInvoke method.
30110
30111 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
30112
30113         * expression.cs: Use ResolveWithSimpleName on compound names.
30114
30115 2001-12-02  Ravi Pratap  <ravi@ximian.com>
30116
30117         * constant.cs (EmitConstant): Make sure we resolve the associated expression
30118         before trying to reduce it.
30119
30120         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
30121
30122         * constant.cs (LookupConstantValue): Implement.
30123
30124         (EmitConstant): Use the above in emitting the constant.
30125
30126         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
30127         that are user-defined by doing a LookupConstantValue on them.
30128
30129         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
30130         too, like above.
30131
30132 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
30133
30134         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
30135
30136         (BaseAccess.DoResolve): Implement.
30137
30138         (MemberAccess.DoResolve): Split this routine into a
30139         ResolveMemberAccess routine that can be used independently
30140
30141 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
30142
30143         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
30144         As that share bits of the implementation.  Is returns a boolean,
30145         while As returns the Type that is being probed.
30146
30147 2001-12-01  Ravi Pratap  <ravi@ximian.com>
30148
30149         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
30150         instead of a Literal - much easier.
30151
30152         (EnumInTransit): Remove - utterly useless :-)
30153
30154         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
30155
30156         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
30157
30158         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
30159         chain when we have no associated expression.
30160
30161 2001-11-30  Ravi Pratap  <ravi@ximian.com>
30162
30163         * constant.cs (Define): Use Location while reporting the errror.
30164
30165         Also emit a warning when 'new' is used and there is no inherited
30166         member to hide.
30167
30168         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
30169         populated.
30170
30171         (LookupEnumValue): Implement to lookup an enum member's value and define it
30172         if necessary.
30173
30174         (Populate): Re-write accordingly to use the above routine.
30175
30176 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
30177
30178         * expression.cs (This): Fix prototype for DoResolveLValue to
30179         override the base class DoResolveLValue.
30180
30181         * cs-parser.cs: Report errors cs574 and cs575 (destructor
30182         declarations) 
30183
30184         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
30185         (we need to load the address of the field here).  This fixes
30186         test-22. 
30187
30188         (FieldExpr.DoResolveLValue): Call the DoResolve
30189         function to initialize the Instance expression.
30190
30191         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
30192         correctly the GetEnumerator operation on a value type.
30193
30194         * cs-parser.jay: Add more simple parsing error catches.
30195
30196         * statement.cs (Switch): Add support for string switches.
30197         Handle null specially.
30198
30199         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
30200
30201 2001-11-28  Ravi Pratap  <ravi@ximian.com>
30202
30203         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
30204
30205         (declare_local_constant): New helper function.
30206
30207         * statement.cs (AddConstant): Keep a separate record of constants
30208
30209         (IsConstant): Implement to determine if a variable is a constant.
30210
30211         (GetConstantExpression): Implement.
30212
30213         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
30214
30215         * statement.cs (IsVariableDefined): Re-write.
30216
30217 2001-11-27  Ravi Pratap  <ravi@ximian.com>
30218
30219         * class.cs (TypeContainer::FindMembers): Look for constants
30220         in the case when we are looking for MemberTypes.Field
30221
30222         * expression.cs (MemberAccess::DoResolve): Check that in the
30223         case we are a FieldExpr and a Literal, we are not being accessed
30224         by an instance reference.
30225
30226         * cs-parser.jay (local_constant_declaration): Implement.
30227
30228         (declaration_statement): Implement for constant declarations.
30229
30230 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
30231
30232         * statement.cs (Switch): Catch double defaults.
30233
30234         (Switch): More work on the switch() statement
30235         implementation.  It works for integral values now, need to finish
30236         string support.
30237
30238
30239 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
30240
30241         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
30242         integer literals into other integer literals.  To be used by
30243         switch. 
30244
30245 2001-11-24  Ravi Pratap  <ravi@ximian.com>
30246
30247         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
30248         some memory.
30249
30250         (EmitDynamicInitializers): Cope with the above since we extract data
30251         directly from ArrayData now.
30252
30253         (ExpectInitializers): Keep track of whether initializers are mandatory
30254         or not.
30255
30256         (Bounds): Make it a hashtable to prevent the same dimension being 
30257         recorded for every element in that dimension.
30258
30259         (EmitDynamicInitializers): Fix bug which prevented the Set array method
30260         from being found.
30261
30262         Also fix bug which was causing the indices to be emitted in the reverse
30263         order.
30264
30265 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
30266
30267         * expression.cs (ArrayCreation): Implement the bits that Ravi left
30268         unfinished.  They do not work, because the underlying code is
30269         sloppy.
30270
30271 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
30272
30273         * cs-parser.jay: Remove bogus fixme.
30274
30275         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
30276         on Switch statement.
30277
30278 2001-11-23  Ravi Pratap  <ravi@ximian.com>
30279
30280         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
30281         the same. 
30282
30283         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
30284         parameter. Apparently, any expression is allowed. 
30285
30286         (ValidateInitializers): Update accordingly.
30287
30288         (CheckIndices): Fix some tricky bugs thanks to recursion.
30289
30290         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
30291         I was being completely brain-dead.
30292
30293         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
30294         and re-write acordingly.
30295
30296         (DelegateInvocation): Re-write accordingly.
30297
30298         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
30299
30300         (MakeByteBlob): Handle types more correctly.
30301
30302         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
30303         initialization from expressions but it is incomplete because I am a complete
30304         Dodo :-|
30305
30306 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
30307
30308         * statement.cs (If.Emit): Fix a bug that generated incorrect code
30309         on If.  Basically, we have to return `true' (ie, we do return to
30310         our caller) only if both branches of the if return.
30311
30312         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
30313         short-circuit operators, handle them as short circuit operators. 
30314
30315         (Cast.DoResolve): Resolve type.
30316         (Cast.Cast): Take an expression as the target type.
30317
30318         * cs-parser.jay (cast_expression): Remove old hack that only
30319         allowed a limited set of types to be handled.  Now we take a
30320         unary_expression and we resolve to a type during semantic
30321         analysis.
30322
30323         Use the grammar productions from Rhys to handle casts (this is
30324         not complete like Rhys syntax yet, we fail to handle that corner
30325         case that C# has regarding (-x), but we will get there.
30326
30327 2001-11-22  Ravi Pratap  <ravi@ximian.com>
30328
30329         * class.cs (EmitFieldInitializer): Take care of the case when we have a
30330         field which is an array type.
30331
30332         * cs-parser.jay (declare_local_variables): Support array initialization too.
30333
30334         * typemanager.cs (MakeKey): Implement.
30335
30336         (everywhere): Use the above appropriately.
30337
30338         * cs-parser.jay (for_statement): Update for array initialization while
30339         declaring variables.
30340
30341         * ecore.cs : The error message was correct, it's the variable's names that
30342         were misleading ;-) Make the code more readable.
30343
30344         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
30345         the correct type etc.
30346
30347         (ConvertExplicit): Handle Enum types by examining the underlying type.
30348
30349 2001-11-21  Ravi Pratap  <ravi@ximian.com>
30350
30351         * parameter.cs (GetCallingConvention): Always return
30352         CallingConventions.Standard for now.
30353
30354 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
30355
30356         * expression.cs (Binary.ResolveOperator): Update the values of `l'
30357         and `r' after calling DoNumericPromotions.
30358
30359         * ecore.cs: Fix error message (the types were in the wrong order).
30360
30361         * statement.cs (Foreach.ProbeCollectionType): Need to pass
30362         BindingFlags.Instance as well 
30363
30364         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
30365         implicit int literal conversion in an empty cast so that we
30366         propagate the right type upstream.
30367
30368         (UnboxCast): new class used to unbox value types.
30369         (Expression.ConvertExplicit): Add explicit type conversions done
30370         by unboxing.
30371
30372         (Expression.ImplicitNumericConversion): Oops, forgot to test for
30373         the target type before applying the implicit LongLiterals to ULong
30374         literal cast.
30375
30376 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
30377
30378         * cs-parser.jay (for_statement): Reworked the way For works: now
30379         we declare manually any variables that are introduced in
30380         for_initializer to solve the problem of having out-of-band code
30381         emition (that is what got for broken).
30382
30383         (declaration_statement): Perform the actual variable declaration
30384         that used to be done in local_variable_declaration here.
30385
30386         (local_variable_declaration): Do not declare anything, just pass
30387         the information on a DictionaryEntry
30388
30389 2001-11-20  Ravi Pratap  <ravi@ximian.com>
30390
30391         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
30392         re-write of the logic to now make it recursive.
30393
30394         (UpdateIndices): Re-write accordingly.
30395
30396         Store element data in a separate ArrayData list in the above methods.
30397
30398         (MakeByteBlob): Implement to dump the array data into a byte array.
30399
30400 2001-11-19  Ravi Pratap  <ravi@ximian.com>
30401
30402         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
30403         into CheckIndices.
30404
30405         * constant.cs (Define): Implement.
30406
30407         (EmitConstant): Re-write fully.
30408
30409         Pass in location info.
30410
30411         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
30412         respectively.
30413
30414         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
30415         DictionaryEntry since we need location info too.
30416
30417         (constant_declaration): Update accordingly.
30418
30419         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
30420         code into another method : UpdateIndices.
30421
30422 2001-11-18  Ravi Pratap  <ravi@ximian.com>
30423
30424         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
30425         some type checking etc.
30426
30427 2001-11-17  Ravi Pratap  <ravi@ximian.com>
30428
30429         * expression.cs (ArrayCreation::ValidateInitializers): Implement
30430         bits to provide dimension info if the user skips doing that.
30431
30432         Update second constructor to store the rank correctly.
30433
30434 2001-11-16  Ravi Pratap  <ravi@ximian.com>
30435
30436         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
30437         and try to implement.
30438
30439         * ../errors/cs0150.cs : Add.
30440
30441         * ../errors/cs0178.cs : Add.
30442
30443 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
30444
30445         * statement.cs: Implement foreach on multi-dimensional arrays. 
30446
30447         * parameter.cs (Parameters.GetParameterByName): Also lookup the
30448         name of the params argument.
30449
30450         * expression.cs: Use EmitStoreOpcode to get the right opcode while
30451         initializing the array.
30452
30453         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
30454         we can use this elsewhere.
30455
30456         * statement.cs: Finish implementation of foreach for single
30457         dimension arrays.
30458
30459         * cs-parser.jay: Use an out-of-band stack to pass information
30460         around, I wonder why I need this.
30461
30462         foreach_block: Make the new foreach_block the current_block.
30463
30464         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
30465         function used to return a static Parameters structure.  Used for
30466         empty parameters, as those are created very frequently.
30467
30468         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
30469
30470 2001-11-15  Ravi Pratap  <ravi@ximian.com>
30471
30472         * interface.cs : Default modifier is private, not public. The
30473         make verify test passes again.
30474
30475 2001-11-15  Ravi Pratap  <ravi@ximian.com>
30476
30477         * support.cs (ReflectionParameters): Fix logic to determine
30478         whether the last parameter is a params one. Test 9 passes again.
30479
30480         * delegate.cs (Populate): Register the builders we define with
30481         RegisterParameterForBuilder. Test 19 passes again.
30482
30483         * cs-parser.jay (property_declaration): Reference $6 instead
30484         of $$ to get at the location.
30485
30486         (indexer_declaration): Similar stuff.
30487
30488         (attribute): Ditto.
30489
30490         * class.cs (Property): Register parameters for the Get and Set methods
30491         if they exist. Test 23 passes again.
30492
30493         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
30494         call to EmitArguments as we are sure there aren't any params arguments. 
30495         Test 32 passes again.
30496
30497         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
30498         IndexOutOfRangeException. 
30499
30500         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
30501         Test 33 now passes again.
30502
30503 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
30504
30505         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
30506         broke a bunch of things.  Will have to come up with a better way
30507         of tracking locations.
30508
30509         * statement.cs: Implemented foreach for single dimension arrays.
30510
30511 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
30512
30513         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
30514         an error.  This removes the lookup from the critical path.
30515
30516         * cs-parser.jay: Removed use of temporary_loc, which is completely
30517         broken. 
30518
30519 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
30520
30521         * support.cs (ReflectionParameters.ParameterModifier): Report
30522         whether the argument is a PARAMS argument or not.
30523
30524         * class.cs: Set the attribute `ParamArrayAttribute' on the
30525         parameter argument.
30526
30527         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
30528         and cons_param_array_attribute (ConstructorInfo for
30529         ParamArrayAttribute)., 
30530
30531         * codegen.cs: Emit the return using the `Return' statement, that
30532         way we can report the error correctly for missing return values. 
30533
30534         * class.cs (Method.Emit): Clean up.
30535
30536         * expression.cs (Argument.Resolve): Take another argument: the
30537         location where this argument is used.  Notice that this is not
30538         part of the "Argument" class as to reduce the size of the
30539         structure (we know the approximate location anyways).
30540
30541         Test if the argument is a variable-reference, if not, then
30542         complain with a 206.
30543
30544         (Argument.Emit): Emit addresses of variables.
30545
30546         (Argument.FullDesc): Simplify.
30547
30548         (Invocation.DoResolve): Update for Argument.Resolve.
30549
30550         (ElementAccess.DoResolve): ditto.
30551
30552         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
30553         method should be virtual, as this method is always virtual.
30554
30555         (NewDelegate.DoResolve): Update for Argument.Resolve.
30556
30557         * class.cs (ConstructorInitializer.DoResolve): ditto.
30558
30559         * attribute.cs (Attribute.Resolve): ditto.
30560
30561 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
30562
30563         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
30564
30565         * expression.cs (ParameterReference): Drop IStackStorage and implement
30566         IAssignMethod instead. 
30567
30568         (LocalVariableReference): ditto.
30569
30570         * ecore.cs (FieldExpr): Drop IStackStorage and implement
30571         IAssignMethod instead. 
30572
30573 2001-11-13  Miguel de Icaza <miguel@ximian.com>
30574
30575         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
30576         enumerations that are used in heavily used structures derive from
30577         byte in a laughable and pathetic attempt to reduce memory usage.
30578         This is the kind of pre-optimzations that you should not do at
30579         home without adult supervision.
30580
30581         * expression.cs (UnaryMutator): New class, used to handle ++ and
30582         -- separatedly from the other unary operators.  Cleans up the
30583         code, and kills the ExpressionStatement dependency in Unary.
30584
30585         (Unary): Removed `method' and `Arguments' from this class, making
30586         it smaller, and moving it all to SimpleCall, so I can reuse this
30587         code in other locations and avoid creating a lot of transient data
30588         strucutres when not required.
30589
30590         * cs-parser.jay: Adjust for new changes.
30591
30592 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
30593
30594         * enum.cs (Enum.Populate): If there is a failure during
30595         definition, return
30596
30597         * cs-parser.jay (opt_enum_base): we used to catch type errors
30598         here, but this is really incorrect.  The type error should be
30599         catched during semantic analysis.
30600
30601 2001-12-11  Ravi Pratap  <ravi@ximian.com>
30602
30603         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
30604         current_local_parameters as expected since I, in my stupidity, had forgotten
30605         to do this :-)
30606
30607         * attribute.cs (GetValidPlaces): Fix stupid bug.
30608
30609         * class.cs (Method::Emit): Perform check on applicability of attributes.
30610
30611         (Constructor::Emit): Ditto.
30612
30613         (Field::Emit): Ditto.
30614
30615         (Field.Location): Store location information.
30616
30617         (Property, Event, Indexer, Operator): Ditto.
30618
30619         * cs-parser.jay (field_declaration): Pass in location for each field.
30620
30621         * ../errors/cs0592.cs : Add.
30622
30623 2001-11-12  Ravi Pratap  <ravi@ximian.com>
30624
30625         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
30626
30627         (InitCoreTypes): Update accordingly.
30628
30629         (RegisterAttrType, LookupAttr): Implement.
30630
30631         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
30632         info about the same.
30633
30634         (Resolve): Update to populate the above as necessary.
30635
30636         (Error592): Helper.
30637
30638         (GetValidPlaces): Helper to the above.
30639
30640         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
30641
30642         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
30643
30644 2001-11-12  Ravi Pratap  <ravi@ximian.com>
30645
30646         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
30647
30648         * ../errors/cs0617.cs : Add.
30649
30650 2001-11-11  Ravi Pratap  <ravi@ximian.com>
30651
30652         * enum.cs (Emit): Rename to Populate to be more consistent with what
30653         we expect it to do and when exactly it is called.
30654
30655         * class.cs, rootcontext.cs : Update accordingly.
30656
30657         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
30658         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
30659
30660         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
30661
30662         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
30663         of a fieldinfo using the above, when dealing with a FieldBuilder.
30664
30665 2001-11-10  Ravi Pratap  <ravi@ximian.com>
30666
30667         * ../errors/cs0031.cs : Add.
30668
30669         * ../errors/cs1008.cs : Add.
30670
30671         * ../errrors/cs0543.cs : Add.
30672
30673         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
30674         enum type.
30675
30676         (FindMembers): Implement.
30677
30678         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
30679         enums and delegates too.
30680
30681         (enum_types): Rename to builder_to_enum.
30682
30683         (delegate_types): Rename to builder_to_delegate.
30684
30685         * delegate.cs (FindMembers): Implement.
30686
30687 2001-11-09  Ravi Pratap  <ravi@ximian.com>
30688
30689         * typemanager.cs (IsEnumType): Implement.
30690
30691         * enum.cs (Emit): Re-write parts to account for the underlying type
30692         better and perform checking etc.
30693
30694         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
30695         of the underlying type.
30696
30697         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
30698         value
30699
30700         * enum.cs (error31): Helper to report error #31.
30701
30702         * cs-parser.jay (enum_declaration): Store location of each member too.
30703
30704         * enum.cs (member_to_location): New hashtable. 
30705
30706         (AddEnumMember): Update location hashtable.
30707
30708         (Emit): Use the location of each member while reporting errors.
30709
30710 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
30711
30712         * cs-parser.jay: A for_initializer if is a
30713         local_variable_declaration really ammount to have an implicit
30714         block with the variable declaration and no initializer for for.
30715
30716         * statement.cs (For.Emit): Cope with null initializers.
30717
30718         This fixes the infinite loop on for initializers.
30719
30720 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
30721
30722         * enum.cs: More cleanup.
30723
30724         * ecore.cs: Remove dead code.
30725
30726         * class.cs (Property.Emit): More simplification.
30727         (Event.Emit): ditto.
30728
30729         Reworked to have less levels of indentation.
30730
30731 2001-11-08  Ravi Pratap  <ravi@ximian.com>
30732
30733         * class.cs (Property): Emit attributes.
30734
30735         (Field): Ditto.
30736
30737         (Event): Ditto.
30738
30739         (Indexer): Ditto.
30740
30741         (Operator): Ditto.
30742
30743         * enum.cs (Emit): Ditto.
30744
30745         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
30746         Enums too.
30747
30748         * class.cs (Field, Event, etc.): Move attribute generation into the
30749         Emit method everywhere.
30750
30751         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
30752         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
30753         as we had no way of defining nested enums !
30754
30755         * rootcontext.cs : Adjust code accordingly.
30756
30757         * typemanager.cs (AddEnumType): To keep track of enum types separately.
30758
30759 2001-11-07  Ravi Pratap  <ravi@ximian.com>
30760
30761         * expression.cs (EvalConstantExpression): Move into ecore.cs
30762
30763         * enum.cs (Enum): Rename some members and make them public and readonly
30764         according to our convention.
30765
30766         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
30767         nothing else.
30768
30769         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
30770
30771         (Enum::Emit): Write a simple version for now which doesn't try to compute
30772         expressions. I shall modify this to be more robust in just a while.
30773
30774         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
30775
30776         (TypeContainer::CloseType): Create the Enum types too.
30777
30778         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
30779
30780         * expression.cs (EvalConstantExpression): Get rid of completely.
30781
30782         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
30783         user-defined values and other cases.
30784
30785         (IsValidEnumLiteral): Helper function.
30786
30787         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
30788         out there in the case we had a literal FieldExpr.
30789
30790         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
30791
30792         (Literalize): Revamp a bit to take two arguments.
30793
30794         (EnumLiteral): New class which derives from Literal to wrap enum literals.
30795
30796 2001-11-06  Ravi Pratap  <ravi@ximian.com>
30797
30798         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
30799
30800         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
30801
30802         (Resolve): Use the above to ensure we have proper initializers.
30803
30804 2001-11-05  Ravi Pratap  <ravi@ximian.com>
30805
30806         * expression.cs (Expression::EvalConstantExpression): New method to 
30807         evaluate constant expressions.
30808
30809         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
30810
30811 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
30812
30813         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
30814         in an array.
30815
30816         (Binary.ResolveOperator): Handle operator != (object a, object b)
30817         and operator == (object a, object b);
30818
30819         (Binary.DoNumericPromotions): Indicate whether the numeric
30820         promotion was possible.
30821
30822         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
30823         Implement.  
30824
30825         Made the ArrayAccess implement interface IAssignMethod instead of
30826         IStackStore as the order in which arguments are passed reflects
30827         this.
30828
30829         * assign.cs: Instead of using expr.ExprClass to select the way of
30830         assinging, probe for the IStackStore/IAssignMethod interfaces.
30831
30832         * typemanager.cs: Load InitializeArray definition.
30833
30834         * rootcontext.cs (RootContext.MakeStaticData): Used to define
30835         static data that can be used to initialize arrays. 
30836
30837 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
30838
30839         * expression.cs: Handle operator== and operator!= for booleans.
30840
30841         (Conditioal.Reduce): Implement reducer for the ?: operator.
30842
30843         (Conditional.Resolve): Implement dead code elimination.
30844
30845         (Binary.Resolve): Catch string literals and return a new
30846         concatenated string.
30847
30848         (Unary.Reduce): Implement reduction of unary expressions.
30849
30850         * ecore.cs: Split out the expression core handling here.
30851
30852         (Expression.Reduce): New method used to perform constant folding
30853         and CSE.  This is needed to support constant-expressions. 
30854
30855         * statement.cs (Statement.EmitBoolExpression): Pass true and false
30856         targets, and optimize for !x.
30857
30858 2001-11-04  Ravi Pratap  <ravi@ximian.com>
30859
30860         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
30861         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
30862         set custom atttributes.
30863
30864         * literal.cs (Literal::GetValue): New abstract method to return the actual
30865         value of the literal, cast as an object.
30866
30867         (*Literal): Implement GetValue method.
30868
30869         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
30870         expressions to the arraylist but objects of type Argument.
30871
30872         * class.cs (TypeContainer::Emit): Emit our attributes too.
30873
30874         (Method::Emit, Constructor::Emit): Ditto.
30875
30876         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
30877         to be ignoring earlier.
30878
30879 2001-11-03  Ravi Pratap  <ravi@ximian.com>
30880
30881         * attribute.cs (AttributeSection::Define): Implement to do the business
30882         of constructing a CustomAttributeBuilder.
30883
30884         (Attribute): New trivial class. Increases readability of code.  
30885
30886         * cs-parser.jay : Update accordingly.
30887
30888         (positional_argument_list, named_argument_list, named_argument): New rules
30889
30890         (attribute_arguments): Use the above so that we are more correct.
30891
30892 2001-11-02  Ravi Pratap  <ravi@ximian.com>
30893
30894         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
30895         to perform all checks for a method with a params parameter.
30896
30897         (Invocation::OverloadResolve): Update to use the above method and therefore
30898         cope correctly with params method invocations.
30899
30900         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
30901         params too.
30902
30903         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
30904         constructors in our parent too because we can't afford to miss out on 
30905         protected ones ;-)
30906
30907         * attribute.cs (AttributeSection): New name for the class Attribute
30908
30909         Other trivial changes to improve readability.
30910
30911         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
30912         use the new class names.
30913
30914 2001-11-01  Ravi Pratap  <ravi@ximian.com>
30915
30916         * class.cs (Method::Define): Complete definition for params types too
30917
30918         (Indexer::Define): Ditto.
30919
30920         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
30921         Cope everywhere with a request for info about the array parameter.
30922
30923 2001-11-01  Ravi Pratap  <ravi@ximian.com>
30924
30925         * tree.cs (RecordNamespace): Fix up to check for the correct key.
30926
30927         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
30928         local_variable_type to extract the string corresponding to the type.
30929
30930         (local_variable_type): Fixup the action to use the new helper method.
30931
30932         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
30933         go.
30934
30935         * expression.cs : Clean out code which uses the above.
30936
30937 2001-10-31  Ravi Pratap  <ravi@ximian.com>
30938
30939         * typemanager.cs (RegisterMethod): Check if we already have an existing key
30940         and bale out if necessary by returning a false.
30941
30942         (RegisterProperty): Ditto.
30943
30944         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
30945         and print out appropriate error messages.
30946
30947         * interface.cs (everywhere): Ditto.
30948
30949         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
30950         location to constructor.
30951
30952         * class.cs (Property, Event, Indexer): Update accordingly.
30953
30954         * ../errors/cs111.cs : Added.
30955
30956         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
30957         of a method, as laid down by the spec.
30958
30959         (Invocation::OverloadResolve): Use the above method.
30960
30961 2001-10-31  Ravi Pratap  <ravi@ximian.com>
30962
30963         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
30964         now take a TypeContainer and a Parameters object.
30965
30966         (ParameterData): Modify return type of ParameterModifier method to be 
30967         Parameter.Modifier and not a string.
30968
30969         (ReflectionParameters, InternalParameters): Update accordingly.
30970
30971         * expression.cs (Argument::GetParameterModifier): Same here.
30972
30973         * support.cs (InternalParameters::ParameterType): Find a better way of determining
30974         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
30975         symbol in it at all so maybe this is only for now.
30976
30977 2001-10-30  Ravi Pratap  <ravi@ximian.com>
30978
30979         * support.cs (InternalParameters): Constructor now takes an extra argument 
30980         which is the actual Parameters class.
30981
30982         (ParameterDesc): Update to provide info on ref/out modifiers.
30983
30984         * class.cs (everywhere): Update call to InternalParameters to pass in
30985         the second argument too.
30986
30987         * support.cs (ParameterData): Add ParameterModifier, which is a method 
30988         to return the modifier info [ref/out etc]
30989
30990         (InternalParameters, ReflectionParameters): Implement the above.
30991
30992         * expression.cs (Argument::ParameterModifier): Similar function to return
30993         info about the argument's modifiers.
30994
30995         (Invocation::OverloadResolve): Update to take into account matching modifiers 
30996         too.
30997
30998         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
30999         a new SetFormalParameters object which we pass to InternalParameters.
31000
31001 2001-10-30  Ravi Pratap  <ravi@ximian.com>
31002
31003         * expression.cs (NewArray): Merge into the ArrayCreation class.
31004
31005 2001-10-29  Ravi Pratap  <ravi@ximian.com>
31006
31007         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
31008         NewUserdefinedArray into one as there wasn't much of a use in having
31009         two separate ones.
31010
31011         * expression.cs (Argument): Change field's name to ArgType from Type.
31012
31013         (Type): New readonly property which returns the proper type, taking into 
31014         account ref/out modifiers.
31015
31016         (everywhere): Adjust code accordingly for the above.
31017
31018         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
31019         whether we are emitting for a ref or out parameter.
31020
31021         * expression.cs (Argument::Emit): Use the above field to set the state.
31022
31023         (LocalVariableReference::Emit): Update to honour the flag and emit the
31024         right stuff.
31025
31026         * parameter.cs (Attributes): Set the correct flags for ref parameters.
31027
31028         * expression.cs (Argument::FullDesc): New function to provide a full desc.
31029
31030         * support.cs (ParameterData): Add method ParameterDesc to the interface.
31031
31032         (ReflectionParameters, InternalParameters): Implement the above method.
31033
31034         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
31035         reporting errors.
31036
31037         (Invocation::FullMethodDesc): Ditto. 
31038
31039 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
31040
31041         * cs-parser.jay: Add extra production for the second form of array
31042         creation. 
31043
31044         * expression.cs (ArrayCreation): Update to reflect the above
31045         change. 
31046
31047         * Small changes to prepare for Array initialization.
31048
31049 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
31050
31051         * typemanager.cs (ImplementsInterface): interface might be null;
31052         Deal with this problem;
31053
31054         Also, we do store negative hits on the cache (null values), so use
31055         this instead of calling t.GetInterfaces on the type everytime.
31056
31057 2001-10-28  Ravi Pratap  <ravi@ximian.com>
31058
31059         * typemanager.cs (IsBuiltinType): New method to help determine the same.
31060
31061         * expression.cs (New::DoResolve): Get rid of array creation code and instead
31062         split functionality out into different classes.
31063
31064         (New::FormArrayType): Move into NewBuiltinArray.
31065
31066         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
31067         quite useless.
31068
31069         (NewBuiltinArray): New class to handle creation of built-in arrays.
31070
31071         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
31072         account creation of one-dimensional arrays.
31073
31074         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
31075
31076         (NewUserdefinedArray::DoResolve): Implement.
31077
31078         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
31079
31080         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
31081         we maintain inside the TypeManager. This is necessary to perform lookups on the
31082         module builder.
31083
31084         (LookupType): Update to perform GetType on the module builders too.     
31085
31086         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
31087
31088         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
31089
31090 2001-10-23  Ravi Pratap  <ravi@ximian.com>
31091
31092         * expression.cs (New::DoResolve): Implement guts of array creation.
31093
31094         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
31095
31096 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
31097
31098         * expression.cs: Fix bug I introduced lsat night that broke
31099         Delegates. 
31100
31101         (Expression.Resolve): Report a 246 error (can not resolve name)
31102         if we find a SimpleName in the stream.
31103
31104         (Expression.ResolveLValue): Ditto.
31105
31106         (Expression.ResolveWithSimpleName): This function is a variant of
31107         ResolveName, this one allows SimpleNames to be returned without a
31108         warning.  The only consumer of SimpleNames is MemberAccess
31109
31110 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
31111
31112         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
31113         might arrive here.  I have my doubts that this is correct.
31114
31115         * statement.cs (Lock): Implement lock statement.
31116
31117         * cs-parser.jay: Small fixes to support `lock' and `using'
31118
31119         * cs-tokenizer.cs: Remove extra space
31120
31121         * driver.cs: New flag --checked, allows to turn on integer math
31122         checking. 
31123
31124         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
31125         Threading.Monitor.Exit 
31126
31127 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
31128
31129         * expression.cs (IndexerAccess::DoResolveLValue): Set the
31130         Expression Class to be IndexerAccess.
31131
31132         Notice that Indexer::DoResolve sets the eclass to Value.
31133
31134 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
31135
31136         * class.cs (TypeContainer::Emit): Emit code for indexers.
31137
31138         * assign.cs (IAssignMethod): New interface implemented by Indexers
31139         and Properties for handling assignment.
31140
31141         (Assign::Emit): Simplify and reuse code. 
31142
31143         * expression.cs (IndexerAccess, PropertyExpr): Implement
31144         IAssignMethod, clean up old code. 
31145
31146 2001-10-22  Ravi Pratap  <ravi@ximian.com>
31147
31148         * typemanager.cs (ImplementsInterface): New method to determine if a type
31149         implements a given interface. Provides a nice cache too.
31150
31151         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
31152         method.
31153
31154         (ConvertReferenceExplicit): Ditto.
31155
31156         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
31157         various methods, with correct names etc.
31158
31159         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
31160         Operator.UnaryNegation.
31161
31162         * cs-parser.jay (operator_declarator): Be a little clever in the case where
31163         we have a unary plus or minus operator.
31164
31165         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
31166         UnaryMinus.
31167
31168         * everywhere : update accordingly.
31169
31170         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
31171         respectively.
31172
31173         * class.cs (Method::Define): For the case where we are implementing a method
31174         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
31175         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
31176
31177 2001-10-21  Ravi Pratap  <ravi@ximian.com>
31178
31179         * interface.cs (FindMembers): Implement to work around S.R.E
31180         lameness.
31181
31182         * typemanager.cs (IsInterfaceType): Implement.
31183
31184         (FindMembers): Update to handle interface types too.
31185
31186         * expression.cs (ImplicitReferenceConversion): Re-write bits which
31187         use IsAssignableFrom as that is not correct - it doesn't work.
31188
31189         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
31190         and accordingly override EmitStatement.
31191
31192         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
31193         using the correct logic :-)
31194
31195 2001-10-19  Ravi Pratap  <ravi@ximian.com>
31196
31197         * ../errors/cs-11.cs : Add to demonstrate error -11 
31198
31199 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
31200
31201         * assign.cs (Assign::Resolve): Resolve right hand side first, and
31202         then pass this as a hint to ResolveLValue.
31203
31204         * expression.cs (FieldExpr): Add Location information
31205
31206         (FieldExpr::LValueResolve): Report assignment to readonly
31207         variable. 
31208
31209         (Expression::ExprClassFromMemberInfo): Pass location information.
31210
31211         (Expression::ResolveLValue): Add new method that resolves an
31212         LValue. 
31213
31214         (Expression::DoResolveLValue): Default invocation calls
31215         DoResolve. 
31216
31217         (Indexers): New class used to keep track of indexers in a given
31218         Type. 
31219
31220         (IStackStore): Renamed from LValue, as it did not really describe
31221         what this did.  Also ResolveLValue is gone from this interface and
31222         now is part of Expression.
31223
31224         (ElementAccess): Depending on the element access type
31225
31226         * typemanager.cs: Add `indexer_name_type' as a Core type
31227         (System.Runtime.CompilerServices.IndexerNameAttribute)
31228
31229         * statement.cs (Goto): Take a location.
31230
31231 2001-10-18  Ravi Pratap  <ravi@ximian.com>
31232
31233         * delegate.cs (Delegate::VerifyDelegate): New method to verify
31234         if two delegates are compatible.
31235
31236         (NewDelegate::DoResolve): Update to take care of the case when
31237         we instantiate a delegate from another delegate.
31238
31239         * typemanager.cs (FindMembers): Don't even try to look up members
31240         of Delegate types for now.
31241
31242 2001-10-18  Ravi Pratap  <ravi@ximian.com>
31243
31244         * delegate.cs (NewDelegate): New class to take care of delegate
31245         instantiation.
31246
31247         * expression.cs (New): Split the delegate related code out into 
31248         the NewDelegate class.
31249
31250         * delegate.cs (DelegateInvocation): New class to handle delegate 
31251         invocation.
31252
31253         * expression.cs (Invocation): Split out delegate related code into
31254         the DelegateInvocation class.
31255
31256 2001-10-17  Ravi Pratap  <ravi@ximian.com>
31257
31258         * expression.cs (New::DoResolve): Implement delegate creation fully
31259         and according to the spec.
31260
31261         (New::DoEmit): Update to handle delegates differently.
31262
31263         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
31264         because of which we were printing out arguments in reverse order !
31265
31266         * delegate.cs (VerifyMethod): Implement to check if the given method
31267         matches the delegate.
31268
31269         (FullDelegateDesc): Implement.
31270
31271         (VerifyApplicability): Implement.
31272
31273         * expression.cs (Invocation::DoResolve): Update to accordingly handle
31274         delegate invocations too.
31275
31276         (Invocation::Emit): Ditto.
31277
31278         * ../errors/cs1593.cs : Added.
31279
31280         * ../errors/cs1594.cs : Added.
31281
31282         * delegate.cs (InstanceExpression, TargetMethod): New properties.
31283
31284 2001-10-16  Ravi Pratap  <ravi@ximian.com>
31285
31286         * typemanager.cs (intptr_type): Core type for System.IntPtr
31287
31288         (InitCoreTypes): Update for the same.
31289
31290         (iasyncresult_type, asynccallback_type): Ditto.
31291
31292         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
31293         correct.
31294
31295         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
31296         too.
31297
31298         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
31299         the builders for the 4 members of a delegate type :-)
31300
31301         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
31302         type.
31303
31304         * expression.cs (New::DoResolve): Implement guts for delegate creation.
31305
31306         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
31307
31308 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
31309
31310         * statement.cs (Break::Emit): Implement.   
31311         (Continue::Emit): Implement.
31312
31313         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
31314         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
31315         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
31316         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
31317         end loop
31318
31319         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
31320         properties that track the label for the current loop (begin of the
31321         loop and end of the loop).
31322
31323 2001-10-15  Ravi Pratap  <ravi@ximian.com>
31324
31325         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
31326         use of emitting anything at all.
31327
31328         * class.cs, rootcontext.cs : Get rid of calls to the same.
31329
31330         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
31331
31332         (Populate): Define the constructor correctly and set the implementation
31333         attributes.
31334
31335         * typemanager.cs (delegate_types): New hashtable to hold delegates that
31336         have been defined.
31337
31338         (AddDelegateType): Implement.
31339
31340         (IsDelegateType): Implement helper method.
31341
31342         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
31343
31344         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
31345         and accordingly handle it.
31346
31347         * delegate.cs (Populate): Take TypeContainer argument.
31348         Implement bits to define the Invoke method. However, I still haven't figured out
31349         how to take care of the native int bit :-(
31350
31351         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
31352         Qualify the name of the delegate, not its return type !
31353
31354         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
31355         conversion.
31356
31357         (StandardConversionExists): Checking for array types turns out to be recursive.
31358
31359         (ConvertReferenceExplicit): Implement array conversion.
31360
31361         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
31362
31363 2001-10-12  Ravi Pratap  <ravi@ximian.com>
31364
31365         * cs-parser.jay (delegate_declaration): Store the fully qualified
31366         name as it is a type declaration.
31367
31368         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
31369         readonly.
31370
31371         (DefineDelegate): Renamed from Define. Does the same thing essentially,
31372         as TypeContainer::DefineType.
31373
31374         (Populate): Method in which all the definition of the various methods (Invoke)
31375         etc is done.
31376
31377         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
31378         see.
31379
31380         (CloseDelegate): Finally creates the delegate.
31381
31382         * class.cs (TypeContainer::DefineType): Update to define delegates.
31383         (Populate, Emit and CloseType): Do the same thing here too.
31384
31385         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
31386         delegates in all these operations.
31387
31388 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
31389
31390         * expression.cs: LocalTemporary: a new expression used to
31391         reference a temporary that has been created.
31392
31393         * assign.cs: Handle PropertyAccess back here, so that we can
31394         provide the proper semantic access to properties.
31395
31396         * expression.cs (Expression::ConvertReferenceExplicit): Implement
31397         a few more explicit conversions. 
31398
31399         * modifiers.cs: `NEW' modifier maps to HideBySig.
31400
31401         * expression.cs (PropertyExpr): Make this into an
31402         ExpressionStatement, and support the EmitStatement code path. 
31403
31404         Perform get/set error checking, clean up the interface.
31405
31406         * assign.cs: recognize PropertyExprs as targets, and if so, turn
31407         them into toplevel access objects.
31408
31409 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
31410
31411         * expression.cs: PropertyExpr::PropertyExpr: use work around the
31412         SRE.
31413
31414         * typemanager.cs: Keep track here of our PropertyBuilders again to
31415         work around lameness in SRE.
31416
31417 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
31418
31419         * expression.cs (LValue::LValueResolve): New method in the
31420         interface, used to perform a second resolution pass for LValues. 
31421
31422         (This::DoResolve): Catch the use of this in static methods.
31423
31424         (This::LValueResolve): Implement.
31425
31426         (This::Store): Remove warning, assigning to `this' in structures
31427         is 
31428
31429         (Invocation::Emit): Deal with invocation of
31430         methods on value types.  We need to pass the address to structure
31431         methods rather than the object itself.  (The equivalent code to
31432         emit "this" for structures leaves the entire structure on the
31433         stack instead of a pointer to it). 
31434
31435         (ParameterReference::DoResolve): Compute the real index for the
31436         argument based on whether the method takes or not a `this' pointer
31437         (ie, the method is static).
31438
31439         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
31440         value types returned from functions when we need to invoke a
31441         method on the sturcture.
31442
31443
31444 2001-10-11  Ravi Pratap  <ravi@ximian.com>
31445
31446         * class.cs (TypeContainer::DefineType): Method to actually do the business of
31447         defining the type in the Modulebuilder or Typebuilder. This is to take
31448         care of nested types which need to be defined on the TypeBuilder using
31449         DefineNestedMethod.
31450
31451         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
31452         methods in RootContext, only ported to be part of TypeContainer.
31453
31454         (TypeContainer::GetInterfaceOrClass): Ditto.
31455
31456         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
31457
31458         * interface.cs (Interface::DefineInterface): New method. Does exactly
31459         what RootContext.CreateInterface did earlier, only it takes care of nested types 
31460         too.
31461
31462         (Interface::GetInterfaces): Move from RootContext here and port.
31463
31464         (Interface::GetInterfaceByName): Same here.
31465
31466         * rootcontext.cs (ResolveTree): Re-write.
31467
31468         (PopulateTypes): Re-write.
31469
31470         * class.cs (TypeContainer::Populate): Populate nested types too.
31471         (TypeContainer::Emit): Emit nested members too.
31472
31473         * typemanager.cs (AddUserType): Do not make use of the FullName property,
31474         instead just use the name argument passed in as it is already fully
31475         qualified.
31476
31477         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
31478         to TypeContainer mapping to see if a type is user-defined.
31479
31480         * class.cs (TypeContainer::CloseType): Implement. 
31481
31482         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
31483         the default constructor.
31484
31485         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
31486         twice.
31487
31488         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
31489
31490         * interface.cs (CloseType): Create the type here.
31491
31492         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
31493         the hierarchy.
31494
31495         Remove all the methods which are now in TypeContainer.
31496
31497 2001-10-10  Ravi Pratap  <ravi@ximian.com>
31498
31499         * delegate.cs (Define): Re-write bits to define the delegate
31500         correctly.
31501
31502 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
31503
31504         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
31505
31506         * expression.cs (ImplicitReferenceConversion): handle null as well
31507         as a source to convert to any reference type.
31508
31509         * statement.cs (Return): Perform any implicit conversions to
31510         expected return type.  
31511
31512         Validate use of return statement.  
31513
31514         * codegen.cs (EmitContext): Pass the expected return type here.
31515
31516         * class.cs (Method, Constructor, Property): Pass expected return
31517         type to EmitContext.
31518
31519 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
31520
31521         * expression.cs: Make DoResolve take an EmitContext instead of a
31522         TypeContainer.
31523
31524         Replaced `l' and `location' for `loc', for consistency.
31525
31526         (Error, Warning): Remove unneeded Tc argument.
31527
31528         * assign.cs, literal.cs, constant.cs: Update to new calling
31529         convention. 
31530
31531         * codegen.cs: EmitContext now contains a flag indicating whether
31532         code is being generated in a static method or not.
31533
31534         * cs-parser.jay: DecomposeQI, new function that replaces the old
31535         QualifiedIdentifier.  Now we always decompose the assembled
31536         strings from qualified_identifier productions into a group of
31537         memberaccesses.
31538
31539 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
31540
31541         * rootcontext.cs: Deal with field-less struct types correctly now
31542         by passing the size option to Define Type.
31543
31544         * class.cs: Removed hack that created one static field. 
31545
31546 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
31547
31548         * statement.cs: Moved most of the code generation here. 
31549
31550 2001-10-09  Ravi Pratap  <ravi@ximian.com>
31551
31552         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
31553         seem very right.
31554
31555         (ElementAccess): Remove useless bits for now - keep checks as the spec
31556         says.
31557
31558 2001-10-08  Ravi Pratap  <ravi@ximian.com>
31559
31560         * expression.cs (ElementAccess::DoResolve): Remove my crap code
31561         and start performing checks according to the spec.
31562
31563 2001-10-07  Ravi Pratap  <ravi@ximian.com>
31564
31565         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
31566         rank_specifiers instead.
31567
31568         (rank_specifiers): Change the order in which the rank specifiers are stored
31569
31570         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
31571
31572         * expression.cs (ElementAccess): Implement the LValue interface too.
31573
31574 2001-10-06  Ravi Pratap  <ravi@ximian.com>
31575
31576         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
31577         except that user defined conversions are not included.
31578
31579         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
31580         perform the conversion of the return type, if necessary.
31581
31582         (New::DoResolve): Check whether we are creating an array or an object
31583         and accordingly do the needful.
31584
31585         (New::Emit): Same here.
31586
31587         (New::DoResolve): Implement guts of array creation.
31588
31589         (New::FormLookupType): Helper function.
31590
31591 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
31592
31593         * codegen.cs: Removed most of the code generation here, and move the
31594         corresponding code generation bits to the statement classes. 
31595
31596         Added support for try/catch/finalize and throw.
31597
31598         * cs-parser.jay: Added support for try/catch/finalize.
31599
31600         * class.cs: Catch static methods having the flags override,
31601         virtual or abstract.
31602
31603         * expression.cs (UserCast): This user cast was not really doing
31604         what it was supposed to do.  Which is to be born in fully resolved
31605         state.  Parts of the resolution were being performed at Emit time! 
31606
31607         Fixed this code.
31608
31609 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
31610
31611         * expression.cs: Implicity convert the result from UserCast.
31612
31613 2001-10-05  Ravi Pratap  <ravi@ximian.com>
31614
31615         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
31616         prevented it from working correctly. 
31617
31618         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
31619         merely ConvertImplicit.
31620
31621 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
31622
31623         * typemanager.cs: Make the LookupTypeContainer function static,
31624         and not per-instance.  
31625
31626         * class.cs: Make static FindMembers (the one that takes a Type
31627         argument). 
31628
31629         * codegen.cs: Add EmitForeach here.
31630
31631         * cs-parser.jay: Make foreach a toplevel object instead of the
31632         inline expansion, as we need to perform semantic analysis on it. 
31633
31634 2001-10-05  Ravi Pratap  <ravi@ximian.com>
31635
31636         * expression.cs (Expression::ImplicitUserConversion): Rename to
31637         UserDefinedConversion.
31638
31639         (Expression::UserDefinedConversion): Take an extra argument specifying 
31640         whether we look for explicit user conversions too.
31641
31642         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
31643
31644         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
31645
31646         (ExplicitUserConversion): Make it a call to UserDefinedConversion
31647         with the appropriate arguments.
31648
31649         * cs-parser.jay (cast_expression): Record location too.
31650
31651         * expression.cs (Cast): Record location info.
31652
31653         (Expression::ConvertExplicit): Take location argument.
31654
31655         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
31656         to determine if we are doing explicit conversions.
31657
31658         (UserCast::Emit): Update accordingly.
31659
31660         (Expression::ConvertExplicit): Report an error if everything fails.
31661
31662         * ../errors/cs0030.cs : Add.
31663
31664 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
31665
31666         * modifiers.cs: If the ABSTRACT keyword is present, also set the
31667         virtual and newslot bits. 
31668
31669         * class.cs (TypeContainer::RegisterRequiredImplementations):
31670         Record methods we need.
31671
31672         (TypeContainer::MakeKey): Helper function to make keys for
31673         MethodBases, since the Methodbase key is useless.
31674
31675         (TypeContainer::Populate): Call RegisterRequiredImplementations
31676         before defining the methods.   
31677
31678         Create a mapping for method_builders_to_methods ahead of time
31679         instead of inside a tight loop.
31680
31681         (::RequireMethods):  Accept an object as the data to set into the
31682         hashtable so we can report interface vs abstract method mismatch.
31683
31684 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
31685
31686         * report.cs: Make all of it static.
31687
31688         * rootcontext.cs: Drop object_type and value_type computations, as
31689         we have those in the TypeManager anyways.
31690
31691         Drop report instance variable too, now it is a global.
31692
31693         * driver.cs: Use try/catch on command line handling.
31694
31695         Add --probe option to debug the error reporting system with a test
31696         suite. 
31697
31698         * report.cs: Add support for exiting program when a probe
31699         condition is reached.
31700
31701 2001-10-03  Ravi Pratap  <ravi@ximian.com>
31702
31703         * expression.cs (Binary::DoNumericPromotions): Fix the case when
31704         we do a forcible conversion regardless of type, to check if 
31705         ForceConversion returns a null.
31706
31707         (Binary::error19): Use location to report error.
31708
31709         (Unary::error23): Use location here too.
31710
31711         * ../errors/cs0019.cs : Check in.
31712
31713         * ../errors/cs0023.cs : Check in.
31714
31715         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
31716         case of a non-null MethodInfo object with a length of 0 !
31717
31718         (Binary::ResolveOperator): Flag error if overload resolution fails to find
31719         an applicable member - according to the spec :-)
31720         Also fix logic to find members in base types.
31721
31722         (Unary::ResolveOperator): Same here.
31723
31724         (Unary::report23): Change name to error23 and make first argument a TypeContainer
31725         as I was getting thoroughly confused between this and error19 :-)
31726
31727         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
31728         (::FindMostEncompassedType): Implement.
31729         (::FindMostEncompassingType): Implement.
31730         (::StandardConversionExists): Implement.
31731
31732         (UserImplicitCast): Re-vamp. We now need info about most specific
31733         source and target types so that we can do the necessary conversions.
31734
31735         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
31736         mathematical union with no duplicates.
31737
31738 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
31739
31740         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
31741         in order from base classes to child classes, so that we can in
31742         child classes look up in our parent for method names and
31743         attributes (required for handling abstract, virtual, new, override
31744         constructs: we need to instrospect our base class, and if we dont
31745         populate the classes in order, the introspection might be
31746         incorrect.  For example, a method could query its parent before
31747         the parent has any methods and would determine that the parent has
31748         no abstract methods (while it could have had them)).
31749
31750         (RootContext::CreateType): Record the order in which we define the
31751         classes.
31752
31753 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
31754
31755         * class.cs (TypeContainer::Populate): Also method definitions can
31756         fail now, keep track of this.
31757
31758         (TypeContainer::FindMembers): Implement support for
31759         DeclaredOnly/noDeclaredOnly flag.
31760
31761         (Constructor::Emit) Return the ConstructorBuilder.
31762
31763         (Method::Emit) Return the MethodBuilder. 
31764         Check for abstract or virtual methods to be public.
31765
31766         * rootcontext.cs (RootContext::CreateType): Register all the
31767         abstract methods required for the class to be complete and the
31768         interface methods that must be implemented. 
31769
31770         * cs-parser.jay: Report error 501 (method requires body if it is
31771         not marked abstract or extern).
31772
31773         * expression.cs (TypeOf::Emit): Implement.
31774
31775         * typemanager.cs: runtime_handle_type, new global type.
31776
31777         * class.cs (Property::Emit): Generate code for properties.
31778
31779 2001-10-02  Ravi Pratap  <ravi@ximian.com>
31780
31781         * expression.cs (Unary::ResolveOperator): Find operators on base type
31782         too - we now conform exactly to the spec.
31783
31784         (Binary::ResolveOperator): Same here.
31785
31786         * class.cs (Operator::Define): Fix minor quirk in the tests.
31787
31788         * ../errors/cs0215.cs : Added.
31789
31790         * ../errors/cs0556.cs : Added.
31791
31792         * ../errors/cs0555.cs : Added.
31793
31794 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
31795
31796         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
31797         single integer which is really efficient
31798
31799 2001-10-01  Ravi Pratap  <ravi@ximian.com>
31800
31801         *  expression.cs (Expression::ImplicitUserConversion): Use location
31802         even in the case when we are examining True operators.
31803  
31804         * class.cs (Operator::Define): Perform extensive checks to conform
31805         with the rules for operator overloading in the spec.
31806
31807         * expression.cs (Expression::ImplicitReferenceConversion): Implement
31808         some of the other conversions mentioned in the spec.
31809
31810         * typemanager.cs (array_type): New static member for the System.Array built-in
31811         type.
31812
31813         (cloneable_interface): For System.ICloneable interface.
31814
31815         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
31816         we start resolving the tree and populating types.
31817
31818         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
31819  
31820 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
31821
31822         * expression.cs (Expression::ExprClassFromMemberInfo,
31823         Expression::Literalize): Create literal expressions from
31824         FieldInfos which are literals.
31825
31826         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
31827         type casts, because they were wrong.  The test suite in tests
31828         caught these ones.
31829
31830         (ImplicitNumericConversion): ushort to ulong requires a widening
31831         cast. 
31832
31833         Int32 constant to long requires widening cast as well.
31834
31835         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
31836         for integers because the type on the stack is not i4.
31837
31838 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
31839
31840         * expression.cs (report118): require location argument. 
31841
31842         * parameter.cs: Do not dereference potential null value.
31843
31844         * class.cs: Catch methods that lack the `new' keyword when
31845         overriding a name.  Report warnings when `new' is used without
31846         anything being there to override.
31847
31848         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
31849
31850         * class.cs: Only add constructor to hashtable if it is non-null
31851         (as now constructors can fail on define).
31852
31853         (TypeManager, Class, Struct): Take location arguments.
31854
31855         Catch field instance initialization in structs as errors.
31856
31857         accepting_filter: a new filter for FindMembers that is static so
31858         that we dont create an instance per invocation.
31859
31860         (Constructor::Define): Catch errors where a struct constructor is
31861         parameterless 
31862
31863         * cs-parser.jay: Pass location information for various new
31864         constructs. 
31865
31866         * delegate.cs (Delegate): take a location argument.
31867
31868         * driver.cs: Do not call EmitCode if there were problesm in the
31869         Definition of the types, as many Builders wont be there. 
31870
31871         * decl.cs (Decl::Decl): Require a location argument.
31872
31873         * cs-tokenizer.cs: Handle properly hex constants that can not fit
31874         into integers, and find the most appropiate integer for it.
31875
31876         * literal.cs: Implement ULongLiteral.
31877
31878         * rootcontext.cs: Provide better information about the location of
31879         failure when CreateType fails.
31880
31881 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
31882
31883         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
31884         as well.
31885
31886         * expression.cs (Binary::CheckShiftArguments): Add missing type
31887         computation.
31888         (Binary::ResolveOperator): Add type to the logical and and logical
31889         or, Bitwise And/Or and Exclusive Or code paths, it was missing
31890         before.
31891
31892         (Binary::DoNumericPromotions): In the case where either argument
31893         is ulong (and most signed types combined with ulong cause an
31894         error) perform implicit integer constant conversions as well.
31895
31896 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
31897
31898         * expression.cs (UserImplicitCast): Method should always be
31899         non-null. 
31900         (Invocation::BetterConversion): Simplified test for IntLiteral.
31901
31902         (Expression::ImplicitNumericConversion): Split this routine out.
31903         Put the code that performs implicit constant integer conversions
31904         here. 
31905
31906         (Expression::Resolve): Become a wrapper around DoResolve so we can
31907         check eclass and type being set after resolve.
31908
31909         (Invocation::Badness): Remove this dead function
31910
31911         (Binary::ResolveOperator): Do not compute the expensive argumnets
31912         unless we have a union for it.
31913
31914         (Probe::Emit): Is needs to do an isinst and then
31915         compare against null.
31916
31917         (::CanConvert): Added Location argument.  If the Location argument
31918         is null (Location.Null), then we do not report errors.  This is
31919         used by the `probe' mechanism of the Explicit conversion.  We do
31920         not want to generate an error for something that the user
31921         explicitly requested to be casted.  But the pipeline for an
31922         explicit cast first tests for potential implicit casts.
31923
31924         So for now, if the Location is null, it means `Probe only' to
31925         avoid adding another argument.   Might have to revise this
31926         strategy later.
31927
31928         (ClassCast): New class used to type cast objects into arbitrary
31929         classes (used in Explicit Reference Conversions).
31930
31931         Implement `as' as well.
31932
31933         Reverted all the patches from Ravi below: they were broken:
31934
31935                 * The use of `level' as a mechanism to stop recursive
31936                   invocations is wrong.  That was there just to catch the
31937                   bug with a strack trace but not as a way of addressing
31938                   the problem.
31939
31940                   To fix the problem we have to *understand* what is going
31941                   on and the interactions and come up with a plan, not
31942                   just get things going.
31943
31944                 * The use of the type conversion cache that I proposed
31945                   last night had an open topic: How does this work across
31946                   protection domains.  A user defined conversion might not
31947                   be public in the location where we are applying the
31948                   conversion, a different conversion might be selected
31949                   (ie, private A->B (better) but public B->A (worse),
31950                   inside A, A->B applies, but outside it, B->A will
31951                   apply).
31952
31953                 * On top of that (ie, even if the above is solved),
31954                   conversions in a cache need to be abstract.  Ie, `To
31955                   convert from an Int to a Short use an OpcodeCast', not
31956                   `To convert from an Int to a Short use the OpcodeCast on
31957                   the variable 5' (which is what this patch was doing).
31958
31959 2001-09-28  Ravi Pratap  <ravi@ximian.com>
31960
31961         * expression.cs (Invocation::ConversionExists): Re-write to use
31962         the conversion cache
31963
31964         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
31965         cache all conversions done, not just user-defined ones.
31966
31967         (Invocation::BetterConversion): The real culprit. Use ConversionExists
31968         to determine if a conversion exists instead of acutually trying to 
31969         perform the conversion. It's faster too.
31970
31971         (Expression::ConvertExplicit): Modify to use ConversionExists to check
31972         and only then attempt the implicit conversion.
31973
31974 2001-09-28  Ravi Pratap  <ravi@ximian.com>
31975
31976         * expression.cs (ConvertImplicit): Use a cache for conversions
31977         already found. Check level of recursion and bail out if necessary.
31978
31979 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
31980
31981         * typemanager.cs (string_concat_string_string, string_concat_object_object):
31982         Export standard methods that we expect for string operations.
31983
31984         * statement.cs (Block::UsageWarning): Track usage of variables and
31985         report the errors for not used variables.
31986
31987         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
31988         operator. 
31989
31990 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
31991
31992         * codegen.cs: remove unnneded code 
31993
31994         * expression.cs: Removed BuiltinTypeAccess class
31995
31996         Fix the order in which implicit conversions are
31997         done.  
31998
31999         The previous fixed dropped support for boxed conversions (adding a
32000         test to the test suite now)
32001
32002         (UserImplicitCast::CanConvert): Remove test for source being null,
32003         that code is broken.  We should not feed a null to begin with, if
32004         we do, then we should track the bug where the problem originates
32005         and not try to cover it up here.
32006
32007         Return a resolved expression of type UserImplicitCast on success
32008         rather than true/false.  Ravi: this is what I was talking about,
32009         the pattern is to use a static method as a "constructor" for
32010         objects. 
32011
32012         Also, do not create arguments until the very last minute,
32013         otherwise we always create the arguments even for lookups that
32014         will never be performed. 
32015
32016         (UserImplicitCast::Resolve): Eliminate, objects of type
32017         UserImplicitCast are born in a fully resolved state. 
32018
32019         * typemanager.cs (InitCoreTypes): Init also value_type
32020         (System.ValueType). 
32021
32022         * expression.cs (Cast::Resolve): First resolve the child expression.
32023
32024         (LValue): Add new method AddressOf to be used by
32025         the `&' operator.  
32026
32027         Change the argument of Store to take an EmitContext instead of an
32028         ILGenerator, because things like FieldExpr need to be able to call
32029         their children expression to generate the instance code. 
32030
32031         (Expression::Error, Expression::Warning): Sugar functions for
32032         reporting errors.
32033
32034         (Expression::MemberLookup): Accept a TypeContainer instead of a
32035         Report as the first argument.
32036
32037         (Expression::ResolvePrimary): Killed.  I still want to improve
32038         this as currently the code is just not right.
32039
32040         (Expression::ResolveMemberAccess): Simplify, but it is still
32041         wrong. 
32042
32043         (Unary::Resolve): Catch errors in AddressOf operators.
32044
32045         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
32046         index to a byte for the short-version, or the compiler will choose
32047         the wrong Emit call, which generates the wrong data.
32048
32049         (ParameterReference::Emit, ::Store): same.
32050
32051         (FieldExpr::AddressOf): Implement.
32052
32053         * typemanager.cs: TypeManager: made public variable instead of
32054         property.
32055
32056         * driver.cs: document --fatal.
32057
32058         * report.cs (ErrorMessage, WarningMessage): new names for the old
32059         Error and Warning classes.
32060
32061         * cs-parser.jay (member_access): Turn built-in access to types
32062         into a normal simplename
32063
32064 2001-09-27  Ravi Pratap  <ravi@ximian.com>
32065
32066         * expression.cs (Invocation::BetterConversion): Fix to cope
32067         with q being null, since this was introducing a bug.
32068
32069         * expression.cs (ConvertImplicit): Do built-in conversions first.
32070
32071 2001-09-27  Ravi Pratap  <ravi@ximian.com>
32072
32073         * expression.cs (UserImplicitCast::Resolve): Fix bug.
32074
32075 2001-09-27  Ravi Pratap  <ravi@ximian.com>
32076
32077         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
32078         I had introduced long ago (what's new ?).
32079
32080         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
32081         the work of all the checking. 
32082         (ConvertImplicit): Call CanConvert and only then create object if necessary.
32083         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
32084
32085         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
32086         that is the right way. 
32087
32088         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
32089         overloading resolution. Use everywhere instead of cutting and pasting code.
32090
32091         (Binary::ResolveOperator): Use MakeUnionSet.
32092
32093         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
32094         we have to convert to bool types. Not complete yet.
32095
32096 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
32097
32098         * typemanager.cs (TypeManager::CSharpName): support ushort.
32099
32100         * expression.cs (Expression::TryImplicitIntConversion): Attempts
32101         to provide an expression that performsn an implicit constant int
32102         conversion (section 6.1.6).
32103         (Expression::ConvertImplicitRequired): Reworked to include
32104         implicit constant expression conversions.
32105
32106         (Expression::ConvertNumericExplicit): Finished.
32107
32108         (Invocation::Emit): If InstanceExpression is null, then it means
32109         that we perform a call on this.
32110
32111 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
32112
32113         * expression.cs (Unary::Emit): Remove some dead code.
32114         (Probe): Implement Resolve and Emit for `is'.
32115         (Expression::ConvertImplicitRequired): Attempt to do constant
32116         expression conversions here.  Maybe should be moved to
32117         ConvertImplicit, but I am not sure.
32118         (Expression::ImplicitLongConstantConversionPossible,
32119         Expression::ImplicitIntConstantConversionPossible): New functions
32120         that tell whether is it possible to apply an implicit constant
32121         expression conversion.
32122
32123         (ConvertNumericExplicit): Started work on explicit numeric
32124         conversions.
32125
32126         * cs-parser.jay: Update operator constants.
32127
32128         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
32129         (Parameters::GetSignature): Hook up VerifyArgs here.
32130         (Parameters::VerifyArgs): Verifies that no two arguments have the
32131         same name. 
32132
32133         * class.cs (Operator): Update the operator names to reflect the
32134         ones that the spec expects (as we are just stringizing the
32135         operator names).
32136
32137         * expression.cs (Unary::ResolveOperator): Fix bug: Use
32138         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
32139         previous usage did only work for our methods.
32140         (Expression::ConvertImplicit): Handle decimal implicit numeric
32141         conversions as well.
32142         (Expression::InternalTypeConstructor): Used to invoke constructors
32143         on internal types for default promotions.
32144
32145         (Unary::Emit): Implement special handling for the pre/post
32146         increment/decrement for overloaded operators, as they need to have
32147         the same semantics as the other operators.
32148
32149         (Binary::ResolveOperator): ditto.
32150         (Invocation::ConversionExists): ditto.
32151         (UserImplicitCast::Resolve): ditto.
32152
32153 2001-09-26  Ravi Pratap  <ravi@ximian.com>
32154
32155         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
32156         operator, return after emitting body. Regression tests pass again !
32157
32158         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
32159         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
32160         (Invocation::OverloadResolve): Ditto.
32161         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
32162
32163         * everywhere : update calls to the above methods accordingly.
32164
32165 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
32166
32167         * assign.cs (Assign): Make it inherit from ExpressionStatement.
32168
32169         * expression.cs (ExpressionStatement): New base class used for
32170         expressions that can appear in statements, so that we can provide
32171         an alternate path to generate expression that do not leave a value
32172         on the stack.
32173
32174         (Expression::Emit, and all the derivatives): We no longer return
32175         whether a value is left on the stack or not.  Every expression
32176         after being emitted leaves a single value on the stack.
32177
32178         * codegen.cs (EmitContext::EmitStatementExpression): Use the
32179         facilties of ExpressionStatement if possible.
32180
32181         * cs-parser.jay: Update statement_expression.
32182
32183 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
32184
32185         * driver.cs: Change the wording of message
32186
32187 2001-09-25  Ravi Pratap  <ravi@ximian.com>
32188
32189         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
32190         the type of the expression to the return type of the method if
32191         we have an overloaded operator match ! The regression tests pass again !
32192         (Unary::ResolveOperator): Ditto.
32193
32194         * expression.cs (Invocation::ConversionExists): Correct the member lookup
32195         to find "op_Implicit", not "implicit" ;-)
32196         (UserImplicitCast): New class to take care of user-defined implicit conversions.
32197         (ConvertImplicit, ForceConversion): Take TypeContainer argument
32198
32199         * everywhere : Correct calls to the above accordingly.
32200
32201         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
32202         (ConvertImplicit): Do user-defined conversion if it exists.
32203
32204 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
32205
32206         * assign.cs: track location.
32207         (Resolve): Use implicit conversions on assignment.
32208
32209         * literal.cs: Oops.  Not good, Emit of short access values should
32210         pass (Bytes) or the wrong argument will be selected.
32211
32212         * expression.cs (Unary::Emit): Emit code for -expr.
32213
32214         (Unary::ResolveOperator): Handle `Substract' for non-constants
32215         (substract from zero from the non-constants).
32216         Deal with Doubles as well. 
32217
32218         (Expression::ConvertImplicitRequired): New routine that reports an
32219         error if no implicit conversion exists. 
32220
32221         (Invocation::OverloadResolve): Store the converted implicit
32222         expressions if we make them
32223
32224 2001-09-24  Ravi Pratap  <ravi@ximian.com>
32225
32226         * class.cs (ConstructorInitializer): Take a Location argument.
32227         (ConstructorBaseInitializer): Same here.
32228         (ConstructorThisInitializer): Same here.
32229
32230         * cs-parser.jay : Update all calls accordingly.
32231
32232         * expression.cs (Unary, Binary, New): Take location argument.
32233         Update accordingly everywhere.
32234
32235         * cs-parser.jay : Update all calls to the above to take a location
32236         argument.
32237
32238         * class.cs : Ditto.
32239
32240 2001-09-24  Ravi Pratap  <ravi@ximian.com>
32241
32242         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
32243         (Invocation::BetterConversion): Same here
32244         (Invocation::ConversionExists): Ditto.
32245
32246         (Invocation::ConversionExists): Implement.
32247
32248 2001-09-22  Ravi Pratap  <ravi@ximian.com>
32249
32250         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
32251         Also take an additional TypeContainer argument.
32252
32253         * All over : Pass in TypeContainer as argument to OverloadResolve.
32254
32255         * typemanager.cs (CSharpName): Update to check for the string type and return
32256         that too.
32257
32258         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
32259         a given method.
32260
32261 2001-09-21  Ravi Pratap  <ravi@ximian.com>
32262
32263         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
32264         (Invocation::BetterFunction): Implement.
32265         (Invocation::BetterConversion): Implement.
32266         (Invocation::ConversionExists): Skeleton, no implementation yet.
32267
32268         Okay, things work fine !
32269
32270 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
32271
32272         * typemanager.cs: declare and load enum_type, delegate_type and
32273         void_type. 
32274
32275         * expression.cs (Expression::Emit): Now emit returns a value that
32276         tells whether a value is left on the stack or not.  This strategy
32277         might be reveted tomorrow with a mechanism that would address
32278         multiple assignments.
32279         (Expression::report118): Utility routine to report mismatches on
32280         the ExprClass.
32281
32282         (Unary::Report23): Report impossible type/operator combination
32283         utility function.
32284
32285         (Unary::IsIncrementableNumber): Whether the type can be
32286         incremented or decremented with add.
32287         (Unary::ResolveOperator): Also allow enumerations to be bitwise
32288         complemented. 
32289         (Unary::ResolveOperator): Implement ++, !, ~,
32290
32291         (Invocation::Emit): Deal with new Emit convetion.
32292
32293         * All Expression derivatives: Updated their Emit method to return
32294         whether they leave values on the stack or not.
32295
32296         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
32297         stack for expressions that are statements. 
32298
32299 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
32300
32301         * expression.cs (LValue): New interface.  Must be implemented by
32302         LValue objects.
32303         (LocalVariableReference, ParameterReference, FieldExpr): Implement
32304         LValue interface.
32305
32306         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
32307         interface for generating code, simplifies the code.
32308
32309 2001-09-20  Ravi Pratap  <ravi@ximian.com>
32310
32311         * expression.cs (everywhere): Comment out return statements in ::Resolve
32312         methods to avoid the warnings.
32313
32314 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
32315
32316         * driver.cs (parse): Report error 2001 if we can not open the
32317         source file.
32318
32319         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
32320         not resolve it.
32321
32322         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
32323         object. 
32324
32325         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
32326         otherwise nested blocks end up with the same index.
32327
32328         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
32329
32330         * expression.cs:  Instead of having FIXMEs in the Resolve
32331         functions, throw exceptions so it is obvious that we are facing a
32332         bug. 
32333
32334         * cs-parser.jay (invocation_expression): Pass Location information.
32335
32336         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
32337         Use a basename for those routines because .NET does not like paths
32338         on them. 
32339
32340         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
32341         already defined.
32342
32343 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
32344
32345         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
32346         are loading the correct data types (throws an exception if not).
32347         (TypeManager::InitCoreTypes): Use CoreLookupType
32348
32349         * expression.cs (Unary::ResolveOperator): return the child
32350         expression for expressions which are just +expr.
32351         (Unary::ResolveOperator): Return negative literals for -LITERAL
32352         expressions (otherwise they are Unary {Literal}).
32353         (Invocation::Badness): Take into account `Implicit constant
32354         expression conversions'.
32355
32356         * literal.cs (LongLiteral): Implement long literal class.
32357         (IntLiteral): export the `Value' of the intliteral. 
32358
32359 2001-09-19  Ravi Pratap  <ravi@ximian.com>
32360
32361         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
32362
32363         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
32364         instead of 'Operator'
32365
32366         * expression.cs (Binary::ResolveOperator): Update accordingly.
32367         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
32368         and 'Minus'
32369
32370         * cs-parser.jay (unary_expression): Update to use the new names.
32371
32372         * gen-treedump.cs (GetUnary): Same here.
32373
32374         * expression.cs (Unary::Resolve): Implement.
32375         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
32376         operators are found instead of making noise ;-)
32377         (Unary::ResolveOperator): New method to do precisely the same thing which
32378         Binary::ResolveOperator does for Binary expressions.
32379         (Unary.method, .Arguments): Add.
32380         (Unary::OperName): Implement.   
32381         (Unary::ForceConversion): Copy and Paste !
32382
32383         * class.cs (Operator::Define): Fix a small bug for the case when we have 
32384         a unary operator.
32385
32386         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
32387         for the inbuilt operators. Only overloading works for now ;-)
32388
32389 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
32390
32391         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
32392         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
32393
32394         * expression.cs (This::Emit): Implement. 
32395         (This::Resolve): Implement.
32396         (TypeOf:Resolve): Implement.
32397         (Expression::ResolveSimpleName): Add an implicit this to instance
32398         field references. 
32399         (MemberAccess::Resolve): Deal with Parameters and Fields. 
32400         Bind instance variable to Field expressions.
32401         (FieldExpr::Instance): New field used to track the expression that
32402         represents the object instance.
32403         (FieldExpr::Resolve): Track potential errors from MemberLookup not
32404         binding 
32405         (FieldExpr::Emit): Implement.
32406
32407         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
32408         the last instruction contains a return opcode to avoid generating
32409         the last `ret' instruction (this generates correct code, and it is
32410         nice to pass the peverify output).
32411
32412         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
32413         initializer for static and instance variables.
32414         (Constructor::Emit): Allow initializer to be null in the case of
32415         static constructors.  Only emit initializer for instance
32416         constructors. 
32417
32418         (TypeContainer::FindMembers): Return a null array if there are no
32419         matches.
32420
32421         Also fix the code for the MemberTypes.Method branch, as it was not
32422         scanning that for operators (or tried to access null variables before).
32423
32424         * assign.cs (Assign::Emit): Handle instance and static fields. 
32425
32426         * TODO: Updated.
32427
32428         * driver.cs: Stop compilation if there are parse errors.
32429
32430         * cs-parser.jay (constructor_declaration): Provide default base
32431         initializer for non-static constructors.
32432         (constructor_declarator): Do not provide a default base
32433         initializers if none was specified.
32434         Catch the fact that constructors should not have parameters.
32435
32436         * class.cs: Do not emit parent class initializers for static
32437         constructors, that should be flagged as an error.
32438
32439 2001-09-18  Ravi Pratap  <ravi@ximian.com>
32440
32441         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
32442         Move back code into TypeContainer::Populate.
32443
32444 2001-09-18  Ravi Pratap  <ravi@ximian.com>
32445
32446         * class.cs (TypeContainer::AddConstructor): Fix the check to
32447         compare against Name, not Basename. 
32448         (Operator::OpType): Change Plus and Minus to Add and Subtract.
32449
32450         * cs-parser.jay : Update accordingly.
32451
32452         * class.cs (TypeContainer::FindMembers): For the case where we are searching
32453         for methods, don't forget to look into the operators too.
32454         (RegisterMethodBuilder): Helper method to take care of this for
32455         methods, constructors and operators.
32456         (Operator::Define): Completely revamp.
32457         (Operator.OperatorMethod, MethodName): New fields.
32458         (TypeContainer::Populate): Move the registering of builders into
32459         RegisterMethodBuilder.
32460         (Operator::Emit): Re-write.
32461
32462         * expression.cs (Binary::Emit): Comment out code path to emit method
32463         invocation stuff for the case when we have a user defined operator. I am
32464         just not able to get it right !
32465
32466 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
32467
32468         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
32469         argument. 
32470
32471         (Expression::MemberLookup): Provide a version that allows to
32472         specify the MemberTypes and BindingFlags. 
32473
32474         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
32475         so it was not fetching variable information from outer blocks.
32476
32477         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
32478         Beforefieldinit as it was buggy.
32479
32480         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
32481         that Ravi put here.  
32482
32483         * class.cs (Constructor::Emit): Only emit if block is not null.
32484         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
32485         deal with this by semantically definining it as if the user had
32486         done it.
32487
32488         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
32489         constructors as we now "emit" them at a higher level.
32490
32491         (TypeContainer::DefineDefaultConstructor): Used to define the
32492         default constructors if none was provided.
32493
32494         (ConstructorInitializer): Add methods Resolve and Emit. 
32495
32496         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
32497
32498 2001-09-17  Ravi Pratap  <ravi@ximian.com>
32499
32500         * class.cs (TypeContainer::EmitDefaultConstructor): Register
32501         the default constructor builder with our hashtable for methodbuilders
32502         to methodcores.
32503
32504         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
32505         and argument_count is 0 in which case we have a match.
32506         (Binary::ResolveOperator): More null checking and miscellaneous coding
32507         style cleanup.
32508
32509 2001-09-17  Ravi Pratap  <ravi@ximian.com>
32510
32511         * rootcontext.cs (IsNameSpace): Compare against null.
32512
32513         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
32514
32515         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
32516         and Unary::Operator.
32517
32518         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
32519         accordingly.
32520
32521         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
32522         we have overloaded operators.
32523         (Binary::ResolveOperator): Implement the part which does the operator overload
32524         resolution.
32525
32526         * class.cs (Operator::Emit): Implement.
32527         (TypeContainer::Emit): Emit the operators we have too.
32528
32529         * expression.cs (Binary::Emit): Update to emit the appropriate code for
32530         the case when we have a user-defined operator.
32531
32532 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
32533
32534         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
32535
32536 2001-09-16  Ravi Pratap  <ravi@ximian.com>
32537
32538         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
32539         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
32540         (Constructor::Emit): Implement.
32541         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
32542         if we have no work to do. 
32543         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
32544         Emit method.
32545
32546         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
32547         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
32548
32549         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
32550         of parent.parent.
32551
32552 2001-09-15  Ravi Pratap  <ravi@ximian.com>
32553
32554         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
32555         in the source.
32556         (Tree::RecordNamespace): Method to do what the name says ;-)
32557         (Tree::Namespaces): Property to get at the namespaces hashtable.
32558
32559         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
32560         keep track.
32561
32562         * rootcontext.cs (IsNamespace): Fixed it :-)
32563
32564 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
32565
32566         * class.cs (TypeContainer::FindMembers): Add support for
32567         constructors. 
32568         (MethodCore): New class that encapsulates both the shared aspects
32569         of a Constructor and a Method.  
32570         (Method, Constructor): Factored pieces into MethodCore.
32571
32572         * driver.cs: Added --fatal which makes errors throw exceptions.
32573         Load System assembly as well as part of the standard library.
32574
32575         * report.cs: Allow throwing exceptions on errors for debugging.
32576
32577         * modifiers.cs: Do not use `parent', instead use the real type
32578         container to evaluate permission settings.
32579
32580         * class.cs: Put Ravi's patch back in.  He is right, and we will
32581         have to cope with the
32582
32583 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32584
32585         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
32586         FamORAssem, not FamANDAssem.
32587
32588 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
32589
32590         * driver.cs: Added --parse option that only parses its input files
32591         and terminates.
32592
32593         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
32594         incorrect.  IsTopLevel is not used to tell whether an object is
32595         root_types or not (that can be achieved by testing this ==
32596         root_types).  But to see if this is a top-level *class* (not
32597         necessarly our "toplevel" container). 
32598
32599 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32600
32601         * enum.cs (Enum::Define): Modify to call the Lookup method on the
32602         parent instead of a direct call to GetType.
32603
32604 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32605
32606         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
32607         Modifiers.TypeAttr. This should just be a call to that method.
32608
32609         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
32610         object so that we can determine if we are top-level or not.
32611
32612         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
32613         TypeContainer too.
32614
32615         * enum.cs (Enum::Define): Ditto.
32616
32617         * modifiers.cs (FieldAttr): Re-write.
32618
32619         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
32620         (TypeContainer::HaveStaticConstructor): New property to provide access
32621         to precisely that info.
32622
32623         * modifiers.cs (MethodAttr): Re-write.
32624         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
32625
32626         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
32627         of top-level types as claimed.
32628
32629 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
32630
32631         * expression.cs (MemberLookup): Fruitless attempt to lookup
32632         constructors.  Maybe I need to emit default constructors?  That
32633         might be it (currently .NET emits this for me automatically).
32634         (Invocation::OverloadResolve): Cope with Arguments == null.
32635         (Invocation::EmitArguments): new function, shared by the new
32636         constructor and us.
32637         (Invocation::Emit): Handle static and instance methods.  Emit
32638         proper call instruction for virtual or non-virtual invocations.
32639         (New::Emit): Implement.
32640         (New::Resolve): Implement.
32641         (MemberAccess:Resolve): Implement.
32642         (MethodGroupExpr::InstanceExpression): used conforming to the spec
32643         to track instances.
32644         (FieldExpr::Resolve): Set type.
32645
32646         * support.cs: Handle empty arguments.
32647                 
32648         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
32649         SimpleLookup): Auxiliary routines to help parse a qualifier
32650         identifier.  
32651
32652         Update qualifier_identifier rule.
32653
32654         * codegen.cs: Removed debugging messages.
32655
32656         * class.cs: Make this a global thing, this acts just as a "key" to
32657         objects that we might have around.
32658
32659         (Populate): Only initialize method_builders_to_methods once.
32660
32661         * expression.cs (PropertyExpr): Initialize type from the
32662         PropertyType. 
32663
32664         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
32665         Resolve pattern.  Attempt to implicitly convert value to boolean.
32666         Emit code.
32667
32668         * expression.cs: Set the type for the int32/int32 argument case.
32669         (Binary::ResolveOperator): Set the return type to boolean for
32670         comparission operators
32671
32672         * typemanager.cs: Remove debugging print code.
32673
32674         (Invocation::Resolve): resolve type.
32675
32676         * class.cs: Allocate a MemberInfo of the correct size, as the code
32677         elsewhere depends on the test to reflect the correct contents.
32678
32679         (Method::) Keep track of parameters, due to System.Reflection holes
32680
32681         (TypeContainer::Populate): Keep track of MethodBuilders to Method
32682         mapping here.
32683
32684         (TypeContainer::FindMembers): Use ArrayList and then copy an array
32685         of the exact size and return that.
32686
32687         (Class::LookupMethodByBuilder): New function that maps
32688         MethodBuilders to its methods.  Required to locate the information
32689         on methods because System.Reflection bit us again.
32690
32691         * support.cs: New file, contains an interface ParameterData and
32692         two implementations: ReflectionParameters and InternalParameters
32693         used to access Parameter information.  We will need to grow this
32694         as required.
32695
32696         * expression.cs (Invocation::GetParameterData): implement a cache
32697         and a wrapper around the ParameterData creation for methods. 
32698         (Invocation::OverloadResolve): Use new code.
32699
32700 2001-09-13  Ravi Pratap  <ravi@ximian.com>
32701
32702         * class.cs (TypeContainer::EmitField): Remove and move into 
32703         (Field::Define): here and modify accordingly.
32704         (Field.FieldBuilder): New member.
32705         (TypeContainer::Populate): Update accordingly.
32706         (TypeContainer::FindMembers): Implement.
32707
32708 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
32709
32710         * statement.cs: (VariableInfo::VariableType): New field to be
32711         initialized with the full type once it is resolved. 
32712
32713 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
32714
32715         * parameter.cs (GetParameterInfo): Use a type cache to compute
32716         things only once, and to reuse this information
32717
32718         * expression.cs (LocalVariableReference::Emit): Implement.
32719         (OpcodeCast::Emit): fix.
32720
32721         (ParameterReference::Resolve): Implement.
32722         (ParameterReference::Emit): Implement.
32723
32724         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
32725         that are expressions need to stay as Expressions.
32726
32727         * typemanager.cs (CSharpName): Returns the C# name of a type if
32728         possible. 
32729
32730         * expression.cs (Expression::ConvertImplicit): New function that
32731         implements implicit type conversions.
32732
32733         (Expression::ImplicitReferenceConversion): Implements implicit
32734         reference conversions.
32735
32736         (EmptyCast): New type for transparent casts.
32737
32738         (OpcodeCast): New type for casts of types that are performed with
32739         a sequence of bytecodes.
32740
32741         (BoxedCast): New type used for casting value types into reference
32742         types.  Emits a box opcode.
32743
32744         (Binary::DoNumericPromotions): Implements numeric promotions of
32745         and computation of the Binary::Type.
32746
32747         (Binary::EmitBranchable): Optimization.
32748
32749         (Binary::Emit): Implement code emission for expressions.
32750
32751         * typemanager.cs (TypeManager): Added two new core types: sbyte
32752         and byte.
32753
32754 2001-09-12  Ravi Pratap  <ravi@ximian.com>
32755
32756         * class.cs (TypeContainer::FindMembers): Method which does exactly
32757         what Type.FindMembers does, only we don't have to use reflection. No
32758         implementation yet.
32759
32760         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
32761         typecontainer objects as we need to get at them.
32762         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
32763
32764         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
32765         typecontainer object.
32766
32767         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
32768         of just a Report object.
32769
32770 2001-09-11  Ravi Pratap  <ravi@ximian.com>
32771
32772         * class.cs (Event::Define): Go back to using the prefixes "add_" and
32773         "remove_"
32774         (TypeContainer::Populate): Now define the delegates of the type too.
32775         (TypeContainer.Delegates): Property to access the list of delegates defined
32776         in the type.
32777
32778         * delegates.cs (Delegate::Define): Implement partially.
32779
32780         * modifiers.cs (TypeAttr): Handle more flags.
32781
32782 2001-09-11  Ravi Pratap  <ravi@ximian.com>
32783
32784         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
32785         and not <=
32786         (Operator::Define): Re-write logic to get types by using the LookupType method
32787         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
32788         (Indexer::Define): Ditto.
32789         (Event::Define): Ditto.
32790         (Property::Define): Ditto.
32791
32792 2001-09-10  Ravi Pratap  <ravi@ximian.com>
32793
32794         * class.cs (TypeContainer::Populate): Now define operators too. 
32795         (TypeContainer.Operators): New property to access the list of operators
32796         in a type.
32797         (Operator.OperatorMethodBuilder): New member to hold the method builder
32798         for the operator we are defining.
32799         (Operator::Define): Implement.
32800
32801 2001-09-10  Ravi Pratap  <ravi@ximian.com>
32802
32803         * class.cs (Event::Define): Make the prefixes of the accessor methods
32804         addOn_ and removeOn_ 
32805
32806         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
32807         of the location being passed in too. Ideally, this should go later since all
32808         error reporting should be done through the Report object.
32809
32810         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
32811         (Populate): Iterate thru the indexers we have and define them too.
32812         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
32813         for the get and set accessors.
32814         (Indexer::Define): Implement.
32815
32816 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
32817
32818         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
32819         my previous implementation, did not work.
32820
32821         * typemanager.cs: Add a couple of missing types (the longs).
32822
32823         * literal.cs: Use TypeManager.bool_type instead of getting it.
32824
32825         * expression.cs (EventExpr): New kind of expressions.
32826         (Expressio::ExprClassFromMemberInfo): finish
32827
32828 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
32829
32830         * assign.cs: Emit stores to static fields differently.
32831
32832 2001-09-08  Ravi Pratap  <ravi@ximian.com>
32833
32834         * Merge in changes and adjust code to tackle conflicts. Backed out my
32835         code in Assign::Resolve ;-) 
32836
32837 2001-09-08  Ravi Pratap  <ravi@ximian.com>
32838
32839         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
32840         instead Report.Error and also pass in the location.
32841         (CSharpParser::Lexer): New readonly property to return the reference
32842         to the Tokenizer object.
32843         (declare_local_variables): Use Report.Error with location instead of plain 
32844         old error.
32845         (CheckDef): Ditto.
32846
32847         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
32848         (Operator.CheckBinaryOperator): Ditto.
32849
32850         * cs-parser.jay (operator_declarator): Update accordingly.
32851
32852         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
32853         (CheckBinaryOperator): Same here.
32854
32855         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
32856         on the name without any prefixes of namespace names etc. This is because we
32857         already might have something already fully qualified like 
32858         'System.Console.WriteLine'
32859
32860         * assign.cs (Resolve): Begin implementation. Stuck ;-)
32861
32862 2001-09-07  Ravi Pratap  <ravi@ximian.com>
32863
32864         * cs-tokenizer.cs (location): Return a string which also contains
32865         the file name.
32866
32867         * expression.cs (ElementAccess): New class for expressions of the
32868         type 'element access.'
32869         (BaseAccess): New class for expressions of the type 'base access.'
32870         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
32871         respectively.
32872
32873         * cs-parser.jay (element_access): Implement action.
32874         (base_access): Implement actions.
32875         (checked_expression, unchecked_expression): Implement.
32876
32877         * cs-parser.jay (local_variable_type): Correct and implement.
32878         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
32879
32880         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
32881
32882         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
32883         name and the specifiers.
32884
32885         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
32886
32887         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
32888         making them all public ;-)
32889
32890         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
32891         class anyways.
32892
32893 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
32894
32895         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
32896         PropertyExprs.
32897         (FieldExpr, PropertyExprs): New resolved expressions.
32898         (SimpleName::MemberStaticCheck): Perform static checks for access
32899         to non-static fields on static methods. Maybe this should be
32900         generalized for MemberAccesses. 
32901         (SimpleName::ResolveSimpleName): More work on simple name
32902         resolution. 
32903
32904         * cs-parser.jay (primary_expression/qualified_identifier): track
32905         the parameter index.
32906
32907         * codegen.cs (CodeGen::Save): Catch save exception, report error.
32908         (EmitContext::EmitBoolExpression): Chain to expression generation
32909         instead of temporary hack.
32910         (::EmitStatementExpression): Put generic expression code generation.
32911
32912         * assign.cs (Assign::Emit): Implement variable assignments to
32913         local variables, parameters and fields.
32914
32915 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
32916
32917         * statement.cs (Block::GetVariableInfo): New method, returns the
32918         VariableInfo for a variable name in a block.
32919         (Block::GetVariableType): Implement in terms of GetVariableInfo
32920
32921         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
32922         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
32923
32924 2001-09-06  Ravi Pratap  <ravi@ximian.com>
32925
32926         * cs-parser.jay (operator_declaration): Continue on my quest : update
32927         to take attributes argument.
32928         (event_declaration): Ditto.
32929         (enum_declaration): Ditto.
32930         (indexer_declaration): Ditto.
32931
32932         * class.cs (Operator::Operator): Update constructor accordingly.
32933         (Event::Event): Ditto.
32934
32935         * delegate.cs (Delegate::Delegate): Same here.
32936
32937         * enum.cs (Enum::Enum): Same here.
32938
32939 2001-09-05  Ravi Pratap  <ravi@ximian.com>
32940
32941         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
32942
32943         * ../tests/cs0658.cs : New file to demonstrate error 0658.
32944
32945         * attribute.cs (Attributes): New class to encapsulate all attributes which were
32946         being passed around as an arraylist.
32947         (Attributes::AddAttribute): Method to add attribute sections.
32948
32949         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
32950         (struct_declaration): Update accordingly.
32951         (constant_declaration): Update.
32952         (field_declaration): Update.
32953         (method_header): Update.
32954         (fixed_parameter): Update.
32955         (parameter_array): Ditto.
32956         (property_declaration): Ditto.
32957         (destructor_declaration): Ditto.
32958
32959         * class.cs (Struct::Struct): Update constructors accordingly.
32960         (Class::Class): Ditto.
32961         (Field::Field): Ditto.
32962         (Method::Method): Ditto.
32963         (Property::Property): Ditto.
32964         (TypeContainer::OptAttribute): update property's return type.
32965
32966         * interface.cs (Interface.opt_attributes): New member.
32967         (Interface::Interface): Update to take the extra Attributes argument.
32968
32969         * parameter.cs (Parameter::Parameter): Ditto.
32970
32971         * constant.cs (Constant::Constant): Ditto.
32972
32973         * interface.cs (InterfaceMemberBase): New OptAttributes field.
32974         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
32975         the attributes as a parameter.
32976         (InterfaceProperty): Update constructor call.
32977         (InterfaceEvent): Ditto.
32978         (InterfaceMethod): Ditto.
32979         (InterfaceIndexer): Ditto.
32980
32981         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
32982         pass the attributes too.
32983         (interface_event_declaration): Ditto.
32984         (interface_property_declaration): Ditto.
32985         (interface_method_declaration): Ditto.
32986         (interface_declaration): Ditto.
32987
32988 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
32989
32990         * class.cs (Method::Define): Track the "static Main" definition to
32991         create an entry point. 
32992
32993         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
32994         EntryPoint if we find it. 
32995
32996         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
32997         (EmitContext::ig): Make this variable public.
32998
32999         * driver.cs: Make the default output file be the first file name
33000         with the .exe extension.  
33001
33002         Detect empty compilations
33003
33004         Handle various kinds of output targets.  Handle --target and
33005         rename -t to --dumper.
33006
33007         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
33008         methods inherited from Expression return now an Expression.  This
33009         will is used during the tree rewriting as we resolve them during
33010         semantic analysis.
33011
33012         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
33013         the spec.  Missing entirely is the information about
33014         accessability of elements of it.
33015
33016         (Expression::ExprClassFromMemberInfo): New constructor for
33017         Expressions that creates a fully initialized Expression based on
33018         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
33019         a Type.
33020
33021         (Invocation::Resolve): Begin implementing resolution of invocations.
33022
33023         * literal.cs (StringLiteral):  Implement Emit.
33024
33025 2001-09-05  Ravi Pratap  <ravi@ximian.com>
33026
33027         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
33028         member.
33029
33030 2001-09-04  Ravi Pratap  <ravi@ximian.com>
33031
33032         * cs-parser.jay (attribute_arguments): Implement actions.
33033         (attribute): Fix bug in production. Implement action.
33034         (attribute_list): Implement.
33035         (attribute_target): Implement.
33036         (attribute_target_specifier, opt_target_specifier): Implement
33037         (CheckAttributeTarget): New method to check if the attribute target
33038         is valid.
33039         (attribute_section): Implement.
33040         (opt_attributes): Implement.
33041
33042         * attribute.cs : New file to handle attributes.
33043         (Attribute): Class to hold attribute info.
33044
33045         * cs-parser.jay (opt_attribute_target_specifier): Remove production
33046         (attribute_section): Modify production to use 2 different rules to 
33047         achieve the same thing. 1 s/r conflict down !
33048         Clean out commented, useless, non-reducing dimension_separator rules.
33049
33050         * class.cs (TypeContainer.attributes): New member to hold list
33051         of attributes for a type.
33052         (Struct::Struct): Modify to take one more argument, the attribute list.
33053         (Class::Class): Ditto.
33054         (Field::Field): Ditto.
33055         (Method::Method): Ditto.
33056         (Property::Property): Ditto.
33057
33058         * cs-parser.jay (struct_declaration): Update constructor call to
33059         pass in the attributes too.
33060         (class_declaration): Ditto.
33061         (constant_declaration): Ditto.
33062         (field_declaration): Ditto.
33063         (method_header): Ditto.
33064         (fixed_parameter): Ditto.
33065         (parameter_array): Ditto.
33066         (property_declaration): Ditto.
33067
33068         * constant.cs (Constant::Constant): Update constructor similarly.
33069         Use System.Collections.
33070
33071         * parameter.cs (Parameter::Parameter): Update as above.
33072
33073 2001-09-02  Ravi Pratap  <ravi@ximian.com>
33074
33075         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
33076         (TypeContainer.delegates): New member to hold list of delegates.
33077
33078         * cs-parser.jay (delegate_declaration): Implement the action correctly 
33079         this time as I seem to be on crack ;-)
33080
33081 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
33082
33083         * rootcontext.cs (RootContext::IsNamespace): new function, used to
33084         tell whether an identifier represents a namespace.
33085
33086         * expression.cs (NamespaceExpr): A namespace expression, used only
33087         temporarly during expression resolution.
33088         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
33089         utility functions to resolve names on expressions.
33090
33091 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
33092
33093         * codegen.cs: Add hook for StatementExpressions. 
33094
33095         * class.cs: Fix inverted test for static flag in methods.
33096
33097 2001-09-02  Ravi Pratap  <ravi@ximian.com>
33098
33099         * class.cs (Operator::CheckUnaryOperator): Correct error number used
33100         to make it coincide with MS' number.
33101         (Operator::CheckBinaryOperator): Ditto.
33102
33103         * ../errors/errors.txt : Remove error numbers added earlier.
33104
33105         * ../errors/cs1019.cs : Test case for error # 1019
33106
33107         * ../errros/cs1020.cs : Test case for error # 1020
33108
33109         * cs-parser.jay : Clean out commented cruft.
33110         (dimension_separators, dimension_separator): Comment out. Ostensibly not
33111         used anywhere - non-reducing rule.
33112         (namespace_declarations): Non-reducing rule - comment out.
33113
33114         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
33115         with TypeContainer::AddEnum.
33116
33117         * delegate.cs : New file for delegate handling classes.
33118         (Delegate): Class for declaring delegates.
33119
33120         * makefile : Update.
33121
33122         * cs-parser.jay (delegate_declaration): Implement.
33123
33124 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
33125
33126         * class.cs (Event::Define): Implement.
33127         (Event.EventBuilder): New member.
33128
33129         * class.cs (TypeContainer::Populate): Update to define all enums and events
33130         we have.
33131         (Events): New property for the events arraylist we hold. Shouldn't we move to using
33132         readonly fields for all these cases ?
33133
33134 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
33135
33136         * class.cs (Property): Revamp to use the convention of making fields readonly.
33137         Accordingly modify code elsewhere.
33138
33139         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
33140         the Define method of the Property class.
33141
33142         * class.cs : Clean up applied patch and update references to variables etc. Fix 
33143         trivial bug.
33144         (TypeContainer::Populate): Update to define all the properties we have. Also
33145         define all enumerations.
33146
33147         * enum.cs (Define): Implement.
33148
33149 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
33150
33151         * cs-parser.jay (overloadable_operator): The semantic value is an
33152         enum of the Operator class.
33153         (operator_declarator): Implement actions.
33154         (operator_declaration): Implement.
33155
33156         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
33157         validity of definitions.
33158         (Operator::CheckBinaryOperator): Static method to check for binary operators
33159         (TypeContainer::AddOperator): New method to add an operator to a type.
33160
33161         * cs-parser.jay (indexer_declaration): Added line to actually call the
33162         AddIndexer method so it gets added ;-)
33163
33164         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
33165         already taken care of by the MS compiler ?  
33166
33167 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
33168
33169         * class.cs (Operator): New class for operator declarations.
33170         (Operator::OpType): Enum for the various operators.
33171
33172 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
33173
33174         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
33175         ostensibly handle this in semantic analysis.
33176
33177         * cs-parser.jay (general_catch_clause): Comment out
33178         (specific_catch_clauses, specific_catch_clause): Ditto.
33179         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
33180         (catch_args, opt_catch_args): New productions.
33181         (catch_clause): Rewrite to use the new productions above
33182         (catch_clauses): Modify accordingly.
33183         (opt_catch_clauses): New production to use in try_statement
33184         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
33185         and re-write the code in the actions to extract the specific and
33186         general catch clauses by being a little smart ;-)
33187
33188         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
33189         Hooray, try and catch statements parse fine !
33190
33191 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
33192
33193         * statement.cs (Block::GetVariableType): Fix logic to extract the type
33194         string from the hashtable of variables.
33195
33196         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
33197         I end up making that mistake ;-)
33198         (catch_clauses): Fixed gross error which made Key and Value of the 
33199         DictionaryEntry the same : $1 !!
33200
33201 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
33202
33203         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
33204
33205         * cs-parser.jay (event_declaration): Correct to remove the semicolon
33206         when the add and remove accessors are specified. 
33207
33208 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
33209
33210         * cs-parser.jay (IndexerDeclaration): New helper class to hold
33211         information about indexer_declarator.
33212         (indexer_declarator): Implement actions.
33213         (parsing_indexer): New local boolean used to keep track of whether
33214         we are parsing indexers or properties. This is necessary because 
33215         implicit_parameters come into picture even for the get accessor in the 
33216         case of an indexer.
33217         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
33218
33219         * class.cs (Indexer): New class for indexer declarations.
33220         (TypeContainer::AddIndexer): New method to add an indexer to a type.
33221         (TypeContainer::indexers): New member to hold list of indexers for the
33222         type.
33223
33224 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
33225
33226         * cs-parser.jay (add_accessor_declaration): Implement action.
33227         (remove_accessor_declaration): Implement action.
33228         (event_accessors_declaration): Implement
33229         (variable_declarators): swap statements for first rule - trivial.
33230
33231         * class.cs (Event): New class to hold information about event
33232         declarations.
33233         (TypeContainer::AddEvent): New method to add an event to a type
33234         (TypeContainer::events): New member to hold list of events.
33235
33236         * cs-parser.jay (event_declaration): Implement actions.
33237
33238 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
33239
33240         * cs-parser.jay (dim_separators): Implement. Make it a string
33241         concatenating all the commas together, just as they appear.
33242         (opt_dim_separators): Modify accordingly
33243         (rank_specifiers): Update accordingly. Basically do the same
33244         thing - instead, collect the brackets here.
33245         (opt_rank_sepcifiers): Modify accordingly.
33246         (array_type): Modify to actually return the complete type string
33247         instead of ignoring the rank_specifiers.
33248         (expression_list): Implement to collect the expressions
33249         (variable_initializer): Implement. We make it a list of expressions
33250         essentially so that we can handle the array_initializer case neatly too.
33251         (variable_initializer_list): Implement.
33252         (array_initializer): Make it a list of variable_initializers
33253         (opt_array_initializer): Modify accordingly.
33254
33255         * expression.cs (New::NType): Add enumeration to help us
33256         keep track of whether we have an object/delegate creation
33257         or an array creation.
33258         (New:NewType, New::Rank, New::Indices, New::Initializers): New
33259         members to hold data about array creation.
33260         (New:New): Modify to update NewType
33261         (New:New): New Overloaded contructor for the array creation
33262         case.
33263
33264         * cs-parser.jay (array_creation_expression): Implement to call
33265         the overloaded New constructor.
33266
33267 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
33268
33269         * class.cs (TypeContainer::Constructors): Return member
33270         constructors instead of returning null.
33271
33272 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
33273
33274         * typemanager.cs (InitCoreTypes): Initialize the various core
33275         types after we have populated the type manager with the user
33276         defined types (this distinction will be important later while
33277         compiling corlib.dll)
33278
33279         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
33280         on Expression Classification.  Now all expressions have a method
33281         `Resolve' and a method `Emit'.
33282
33283         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
33284         generation from working.     Also add some temporary debugging
33285         code. 
33286
33287 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
33288
33289         * codegen.cs: Lots of code generation pieces.  This is only the
33290         beginning, will continue tomorrow with more touches of polish.  We
33291         handle the fundamentals of if, while, do, for, return.  Others are
33292         trickier and I need to start working on invocations soon.
33293
33294         * gen-treedump.cs: Bug fix, use s.Increment here instead of
33295         s.InitStatement. 
33296
33297         * codegen.cs (EmitContext): New struct, used during code
33298         emission to keep a context.   Most of the code generation will be
33299         here. 
33300
33301         * cs-parser.jay: Add embedded blocks to the list of statements of
33302         this block.  So code generation proceeds in a top down fashion.
33303
33304 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
33305
33306         * statement.cs: Add support for multiple child blocks.
33307
33308 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
33309
33310         * codegen.cs (EmitCode): New function, will emit the code for a
33311         Block of code given a TypeContainer and its ILGenerator. 
33312
33313         * statement.cs (Block): Standard public readonly optimization.
33314         (Block::Block constructors): Link children. 
33315         (Block::Child): Child Linker.
33316         (Block::EmitVariables): Emits IL variable declarations.
33317
33318         * class.cs: Drop support for MethodGroups here, delay until
33319         Semantic Analysis.
33320         (Method::): Applied the same simplification that I did before, and
33321         move from Properties to public readonly fields.
33322         (Method::ParameterTypes): Returns the parameter types for the
33323         function, and implements a cache that will be useful later when I
33324         do error checking and the semantic analysis on the methods is
33325         performed.
33326         (Constructor::GetCallingConvention): Renamed from CallingConvetion
33327         and made a method, optional argument tells whether this is a class
33328         or a structure to apply the `has-this' bit.
33329         (Method::GetCallingConvention): Implement, returns the calling
33330         convention. 
33331         (Method::Define): Defines the type, a second pass is performed
33332         later to populate the methods.
33333
33334         (Constructor::ParameterTypes): implement a cache similar to the
33335         one on Method::ParameterTypes, useful later when we do semantic
33336         analysis. 
33337
33338         (TypeContainer::EmitMethod):  New method.  Emits methods.
33339
33340         * expression.cs: Removed MethodGroup class from here.
33341
33342         * parameter.cs (Parameters::GetCallingConvention): new method.
33343
33344 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
33345
33346         * class.cs (TypeContainer::Populate): Drop RootContext from the
33347         argument. 
33348
33349         (Constructor::CallingConvention): Returns the calling convention.
33350         (Constructor::ParameterTypes): Returns the constructor parameter
33351         types. 
33352
33353         (TypeContainer::AddConstructor): Keep track of default constructor
33354         and the default static constructor.
33355
33356         (Constructor::) Another class that starts using `public readonly'
33357         instead of properties. 
33358
33359         (Constructor::IsDefault): Whether this is a default constructor. 
33360
33361         (Field::) use readonly public fields instead of properties also.
33362
33363         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
33364         track of static constructors;  If none is used, turn on
33365         BeforeFieldInit in the TypeAttributes. 
33366
33367         * cs-parser.jay (opt_argument_list): now the return can be null
33368         for the cases where there are no arguments. 
33369
33370         (constructor_declarator): If there is no implicit `base' or
33371         `this', then invoke the default parent constructor. 
33372
33373         * modifiers.cs (MethodAttr): New static function maps a set of
33374         modifiers flags into a MethodAttributes enum
33375         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
33376         MethodAttr, TypeAttr to represent the various mappings where the
33377         modifiers are used.
33378         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
33379
33380 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
33381
33382         * parameter.cs (GetParameterInfo): Fix bug where there would be no
33383         method arguments.
33384
33385         * interface.cs (PopulateIndexer): Implemented the code generator
33386         for interface indexers.
33387
33388 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
33389
33390         * interface.cs (InterfaceMemberBase): Now we track the new status
33391         here.  
33392
33393         (PopulateProperty): Implement property population.  Woohoo!  Got
33394         Methods and Properties going today. 
33395
33396         Removed all the properties for interfaces, and replaced them with
33397         `public readonly' fields. 
33398
33399 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
33400
33401         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
33402         initialize their hashtables/arraylists only when they are needed
33403         instead of doing this always.
33404
33405         * parameter.cs: Handle refs and out parameters.
33406
33407         * cs-parser.jay: Use an ArrayList to construct the arguments
33408         instead of the ParameterCollection, and then cast that to a
33409         Parameter[] array.
33410
33411         * parameter.cs: Drop the use of ParameterCollection and use
33412         instead arrays of Parameters.
33413
33414         (GetParameterInfo): Use the Type, not the Name when resolving
33415         types. 
33416
33417 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
33418
33419         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
33420         and instead use public readonly fields.
33421
33422         * class.cs: Put back walking code for type containers.
33423
33424 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
33425
33426         * class.cs (MakeConstant): Code to define constants.
33427
33428         * rootcontext.cs (LookupType): New function.  Used to locate types 
33429
33430
33431 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
33432
33433         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
33434         this System.Reflection code is.  Kudos to Microsoft
33435
33436         * typemanager.cs: Implement a type cache and avoid loading all
33437         types at boot time.  Wrap in LookupType the internals.  This made
33438         the compiler so much faster.  Wow.  I rule!
33439
33440         * driver.cs: Make sure we always load mscorlib first (for
33441         debugging purposes, nothing really important).
33442
33443         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
33444         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
33445
33446         * rootcontext.cs: Lookup types on their namespace;  Lookup types
33447         on namespaces that have been imported using the `using' keyword.
33448
33449         * class.cs (TypeContainer::TypeAttr): Virtualize.
33450         (Class::TypeAttr): Return attributes suitable for this bad boy.
33451         (Struct::TypeAttr): ditto.
33452         Handle nested classes.
33453         (TypeContainer::) Remove all the type visiting code, it is now
33454         replaced with the rootcontext.cs code
33455
33456         * rootcontext.cs (GetClassBases): Added support for structs. 
33457
33458 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
33459
33460         * interface.cs, statement.cs, class.cs, parameter.cs,
33461         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
33462         Drop use of TypeRefs, and use strings instead.
33463
33464 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
33465
33466         * rootcontext.cs: 
33467
33468         * class.cs (Struct::Struct): set the SEALED flags after
33469         checking the modifiers.
33470         (TypeContainer::TypeAttr): new property, returns the
33471         TypeAttributes for a class.  
33472
33473         * cs-parser.jay (type_list): Oops, list production was creating a
33474         new list of base types.
33475
33476         * rootcontext.cs (StdLib): New property.
33477         (GetInterfaceTypeByName): returns an interface by type name, and
33478         encapsulates error handling here.
33479         (GetInterfaces): simplified.
33480         (ResolveTree): Encapsulated all the tree resolution here.
33481         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
33482         types. 
33483
33484         * driver.cs: Add support for --nostdlib, to avoid loading the
33485         default assemblies.
33486         (Main): Do not put tree resolution here. 
33487
33488         * rootcontext.cs: Beginning of the class resolution.
33489
33490 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
33491
33492         * rootcontext.cs: Provide better error reporting. 
33493
33494         * cs-parser.jay (interface_base): set our $$ to be interfaces.
33495
33496         * rootcontext.cs (CreateInterface): Handle the case where there
33497         are no parent interfaces.
33498
33499         (CloseTypes): Routine to flush types at the end.
33500         (CreateInterface): Track types.
33501         (GetInterfaces): Returns an array of Types from the list of
33502         defined interfaces.
33503
33504         * typemanager.c (AddUserType): Mechanism to track user types (puts
33505         the type on the global type hash, and allows us to close it at the
33506         end). 
33507
33508 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
33509
33510         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
33511         RecordInterface instead.
33512
33513         * cs-parser.jay: Updated to reflect changes above.
33514
33515         * decl.cs (Definition): Keep track of the TypeBuilder type that
33516         represents this type here.  Not sure we will use it in the long
33517         run, but wont hurt for now.
33518
33519         * driver.cs: Smaller changes to accomodate the new code.
33520
33521         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
33522         when done. 
33523
33524         * rootcontext.cs (CreateInterface):  New method, used to create
33525         the System.TypeBuilder type for interfaces.
33526         (ResolveInterfaces): new entry point to resolve the interface
33527         hierarchy. 
33528         (CodeGen): Property, used to keep track of the code generator.
33529
33530 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
33531
33532         * cs-parser.jay: Add a second production for delegate_declaration
33533         with `VOID'.
33534
33535         (enum_body): Put an opt_comma here instead of putting it on
33536         enum_body or enum_member_declarations so we can handle trailing
33537         commas on enumeration members.  Gets rid of a shift/reduce.
33538
33539         (type_list): Need a COMMA in the middle.
33540
33541         (indexer_declaration): Tell tokenizer to recognize get/set
33542
33543         * Remove old targets.
33544
33545         * Re-add the parser target.
33546
33547 2001-07-13  Simon Cozens <simon@simon-cozens.org>
33548
33549         * cs-parser.jay: Add precendence rules for a number of operators
33550         ot reduce the number of shift/reduce conflicts in the grammar.
33551
33552 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
33553
33554         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
33555         and put it here.
33556
33557         Get rid of old crufty code.
33558
33559         * rootcontext.cs: Use this to keep track of the parsed
33560         representation and the defined types available to the program. 
33561
33562         * gen-treedump.cs: adjust for new convention.
33563
33564         * type.cs: Split out the type manager, and the assembly builder
33565         from here. 
33566
33567         * typemanager.cs: the type manager will live here now.
33568
33569         * cil-codegen.cs: And the code generator here. 
33570
33571 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
33572
33573         * makefile: Fixed up for easy making.
33574
33575 2001-07-13  Simon Cozens <simon@simon-cozens.org>
33576
33577         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
33578         the 
33579
33580         (unary_expression): Expand pre_increment_expression and
33581         post_decrement_expression to reduce a shift/reduce.
33582
33583 2001-07-11  Simon Cozens
33584
33585         * cs-tokenizer.cs: Hex numbers should begin with a 0.
33586
33587         Improve allow_keyword_as_indent name.
33588
33589 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
33590
33591         * Adjustments for Beta2. 
33592
33593 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
33594
33595         * decl.cs: Added `Define' abstract method.
33596         (InTransit): new property, used to catch recursive definitions. 
33597
33598         * interface.cs: Implement `Define'. 
33599
33600         * modifiers.cs: Map Modifiers.constants to
33601         System.Reflection.TypeAttribute flags.
33602
33603         * class.cs: Keep track of types and user-defined types.
33604         (BuilderInit): New method for creating an assembly
33605         (ResolveType): New function to launch the resolution process, only
33606         used by interfaces for now.
33607
33608         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
33609         that are inserted into the name space. 
33610
33611 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
33612
33613         * ARGH.  I have screwed up my tree so many times due to the use of
33614         rsync rather than using CVS.  Going to fix this at once. 
33615
33616         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
33617         load types.
33618
33619 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
33620
33621         * Experiment successful: Use System.Type rather that our own
33622         version of Type.  
33623
33624 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
33625
33626         * cs-parser.jay: Removed nsAliases from here.
33627
33628         Use new namespaces, handle `using XXX;' 
33629
33630         * namespace.cs: Reimplemented namespace handling, use a recursive
33631         definition of the class.  Now we can keep track of using clauses
33632         and catch invalid using clauses.
33633
33634 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
33635
33636         * gen-treedump.cs: Adapted for all the renaming.
33637
33638         * expression.cs (Expression): this class now has a Type property
33639         which returns an expression Type.
33640
33641         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
33642         `Type', as this has a different meaning now in the base
33643
33644 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
33645
33646         * interface.cs, class.cs: Removed from all the sources the
33647         references to signature computation, as we can not do method
33648         signature computation during the parsing time, as we are not
33649         trying to solve at that point distinguishing:
33650
33651         class X {
33652                 void a (Blah x) {}
33653                 void a (NS.Blah x) {}
33654         }
33655
33656         Which depending on the context might be valid or not, as we do not
33657         know if Blah is the same thing as NS.Blah at that point.
33658
33659         * Redid everything so the code uses TypeRefs now instead of
33660         Types.  TypeRefs are just temporary type placeholders, that need
33661         to be resolved.  They initially have a pointer to a string and the
33662         current scope in which they are used.  This is used later by the
33663         compiler to resolve the reference to an actual Type. 
33664
33665         * DeclSpace is no longer a CIR.Type, and neither are
33666         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
33667         are all DeclSpaces, but no Types. 
33668
33669         * type.cs (TypeRefManager): This implements the TypeRef manager,
33670         which keeps track of all the types that need to be resolved after
33671         the parsing has finished. 
33672
33673 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
33674
33675         * ARGH.  We are going to have to store `foreach' as a class rather
33676         than resolving it, as we need to verify error 1579 after name
33677         resolution.   *OR* we could keep a flag that says `This request to
33678         IEnumerator comes from a foreach statement' which we can then use
33679         to generate the error.
33680
33681 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
33682
33683         * class.cs (TypeContainer.AddMethod): we now add methods to the
33684         MethodGroup instead of the method hashtable.  
33685
33686         * expression.cs: Add MethodGroup abstraction, which gets us one
33687         step closer to the specification in the way we handle method
33688         declarations.  
33689
33690         * cs-parser.jay (primary_expression): qualified_identifier now
33691         tried to match up an identifier to a local variable reference or
33692         to a parameter reference.
33693
33694         current_local_parameters is now a parser global variable that
33695         points to the current parameters for the block, used during name
33696         lookup.
33697
33698         (property_declaration): Now creates an implicit `value' argument to
33699         the set accessor.
33700
33701 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
33702
33703         * parameter.cs: Do not use `param' arguments as part of the
33704         signature, per the spec.
33705
33706 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
33707
33708         * decl.cs: Base class for classes, structs and interfaces.  This
33709         is the "Declaration Space" 
33710
33711         * cs-parser.jay: Use CheckDef for checking declaration errors
33712         instead of having one on each function.
33713
33714         * class.cs: Factor out some code for handling error handling in
33715         accordance to the "Declarations" section in the "Basic Concepts"
33716         chapter in the ECMA C# spec.
33717
33718         * interface.cs: Make all interface member classes derive from
33719         InterfaceMemberBase.
33720
33721 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
33722
33723         * Many things: all interfaces are parsed and generated in
33724         gen-treedump.  Support for member variables, constructors,
33725         destructors, properties, constants is there.
33726
33727         Beginning of the IL backend, but very little done, just there for
33728         testing purposes. 
33729
33730 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
33731
33732         * cs-parser.jay: Fix labeled statement.
33733
33734         * cs-tokenizer.cs (escape): Escape " and ' always.
33735         ref_line, ref_name: keep track of the line/filename as instructed
33736         by #line by the compiler.
33737         Parse #line.
33738
33739 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
33740
33741         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
33742         to match the values in System.CodeDOM.
33743
33744         Divid renamed to Divide.
33745
33746         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
33747         statements. 
33748         (Statements.set): remove.
33749
33750         * System.CodeDOM/CodeCatchClause.cs: always have a valid
33751         statements. 
33752
33753         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
33754         falseStatements always have valid values. 
33755
33756         * cs-parser.jay: Use System.CodeDOM now.
33757