2009-12-17 Marek Safar <marek.safar@gmail.com>
[mono.git] / mcs / mcs / ChangeLog
1 2009-12-17  Marek Safar  <marek.safar@gmail.com>
2
3         * field.cs: Extracted from class.cs
4
5 2009-12-15  Marek Safar  <marek.safar@gmail.com>
6
7         * attribute.cs (GetFixedBuffer): Work on field definition only.
8
9 2009-12-15  Marek Safar  <marek.safar@gmail.com>
10
11         * *.cs: Clean up NET_4_0 conditional where possible.
12
13 2009-12-14 Rodrigo Kumpera  <rkumpera@novell.com>
14
15         support.cs (DynamicType): Assembly property returns the assembly builder.
16         This is required due to how compiler context works in corlib.
17
18 2009-12-14  Marek Safar  <marek.safar@gmail.com>
19
20         A fix for bug #564376
21         * assign.cs (LocalTemporary): Removed no longer needed special
22         by-ref handling.
23
24 2009-12-11  Marek Safar  <marek.safar@gmail.com>
25
26         * modifiers.cs, decl.cs, iterators.cs, const.cs, anonymous.cs,
27         class.cs, delegate.cs, cs-parser.jay, enum.cs: Turn modifiers into
28         enum for easier debugging.
29
30 2009-12-10  Marek Safar  <marek.safar@gmail.com>
31
32         * decl.cs, anonymous.cs, class.cs: Sealed Define it's now main entry
33         point.
34         
35         * parameter.cs, delegate.cs, dynamic.cs: Don't use builder methods
36         directly.
37
38 2009-12-10  Marek Safar  <marek.safar@gmail.com>
39
40         * cs-parser.jay, statement.cs: Handle parser error in code
41         completition.
42
43 2009-12-10  Marek Safar  <marek.safar@gmail.com>
44
45         * ecore.cs: Ignore base imported methods when they are already
46         in method bag.
47         
48         * eval.cs: Handle non-existent keys.
49         
50         * report.cs, driver.cs: Make fatal work with console printer only.
51
52 2009-12-08 Rodrigo Kumpera  <rkumpera@novell.com>
53
54         * typemanager.cs (MakeGenericMethod): Fix stupid mistake.
55
56 2009-12-08 Rodrigo Kumpera  <rkumpera@novell.com>
57
58         * typemanager.cs: Add MakeGenericMethod that checks if the method
59         is really the generic method definition.
60
61         ecore.cs (MethodGroupExpr:IsApplicable): Use new TypeManager function
62         to inflate generic methods.
63
64 2009-12-08  Marek Safar  <marek.safar@gmail.com>
65
66         A fix for bug #561149
67         * anonymous.cs: Use actual type parameters when checking for generic
68         method host.
69
70 2009-12-08  Marek Safar  <marek.safar@gmail.com>
71
72         A fix for bug #561369
73         * expression.cs (DoNumericPromotion): Fixed typo.
74
75 2009-12-08  Marek Safar  <marek.safar@gmail.com>
76
77         *.cs: Moving to generics world.
78
79         cs-parser.jay: Removed current_array_type.
80
81 2009-12-07  Marek Safar  <marek.safar@gmail.com>
82
83         *.cs: Moving to generics world.
84
85 2009-12-04  Marek Safar  <marek.safar@gmail.com>
86
87         *.cs: Moving to generics world (day 2).
88
89 2009-12-03  Marek Safar  <marek.safar@gmail.com>
90
91         *.cs: Moving to generics world.
92
93 2009-12-02  Marek Safar  <marek.safar@gmail.com>
94
95         * typemanager.cs, parameter.cs, class.cs, delegate.cs, attribute.cs:
96         Encode dynamic type attribute for elements where attributes cannot
97         be used.
98
99 2009-12-01  Marek Safar  <marek.safar@gmail.com>
100
101          argument.cs, assign.cs, expression.cs, cs-parser.jay: Named
102          arguments by ref.
103
104 2009-12-01  Marek Safar  <marek.safar@gmail.com>
105
106         A fix for bug #360455
107         * class.cs: Never report a unused warning for generic events to
108         workaround wrong expression type.
109
110 2009-11-30  Marek Safar  <marek.safar@gmail.com>
111
112         A fix for bug #558305
113         * decl.cs, class.cs: Check partial method definitions using correct
114         flag.
115
116 2009-11-30  Marek Safar  <marek.safar@gmail.com>
117
118         * argument.cs: Don't cache rarely used dynamic flag.
119
120 2009-11-27  Marek Safar  <marek.safar@gmail.com>
121
122         * cs-parser.jay: Use jay global stacks (saves over 3MB for corlib).
123
124 2009-11-27  Marek Safar  <marek.safar@gmail.com>
125
126         * ecore.cs (SimpleName): Removed no longer needed in_transit as
127         Resolve is now non-reentrant (saves ~0.6MB for corlib).
128
129 2009-11-26  Marek Safar  <marek.safar@gmail.com>
130
131         A fix for bug #545081
132         * decl.cs: Check private nested types of nested types recursively.
133
134 2009-11-26  Marek Safar  <marek.safar@gmail.com>
135
136         A fix for bug #558305
137         * location.cs: Ignore self referencing #line directive
138
139 2009-11-26  Marek Safar  <marek.safar@gmail.com>
140
141         A fix for bug #558292
142         * class.cs: Allow single unsafe fixed buffer fields.
143
144 2009-11-26  Marek Safar  <marek.safar@gmail.com>
145
146         * expression: Optimize few more zero-based operations.
147
148 2009-11-26  Marek Safar  <marek.safar@gmail.com>
149
150         * cs-tokenizer.cs, cs-parser.jay: Simplify literal parsing, also
151         avoids boxing of literal values.
152
153 2009-11-26  Marek Safar  <marek.safar@gmail.com>
154
155         * cs-tokenizer.cs, argument.cs, eval.cs, linq.cs, decl.cs,
156         expression.cs, ecore.cs, location.cs, cs-parser.jay, attribute.cs,
157         codegen.cs: LocatedToken redesing to avoid excessive allocation and
158         boxing (saves ~7MB for corlib). Also fixes presise token location.
159
160 2009-11-25  Marek Safar  <marek.safar@gmail.com>
161
162         * ecore.cs, cs-parser.jay: Keep parser structures local. Share
163         common data buckers.
164
165 2009-11-24  Marek Safar  <marek.safar@gmail.com>
166
167         * expression.cs: Lower static array initializer barrier.
168         
169         * support.cs, driver.cs: Share reader buffer.
170
171 2009-11-23  Marek Safar  <marek.safar@gmail.com>
172
173         * cs-tokenizer.cs, support.cs: Some tokenizer optimizations.
174
175 2009-11-23  Marek Safar  <marek.safar@gmail.com>
176
177         * cs-tokenizer.cs, support.cs: Use Dictionary instead of Hashtable,
178         cleanup some obsolete code.
179
180 2009-11-20  Marek Safar  <marek.safar@gmail.com>
181
182         * context.cs, expression.cs, ecore.cs, complete.cs: Cleaned up
183         Expression.Resolve.
184
185 2009-11-20  Marek Safar  <marek.safar@gmail.com>
186
187         * *.cs: Resolved expressions are never resolved again, this helps to
188         uncover some not easy to find bugs and improve the performance.
189
190 2009-11-19  Marek Safar  <marek.safar@gmail.com>
191
192         * *.cs: Made constant expressions fully compatible with any other
193         expression.
194
195 2009-11-19  Marek Safar  <marek.safar@gmail.com>
196
197         * *.cs: DoResolve is a worker method and has to be protected.
198
199 2009-11-18  Marek Safar  <marek.safar@gmail.com>
200
201         * *.cs: More context specific handling.
202
203 2009-11-17  Marek Safar  <marek.safar@gmail.com>
204
205         * *.cs: More context specific handling.
206
207 2009-11-16  Marek Safar  <marek.safar@gmail.com>
208
209         * dynamic.cs, class.cs: Removed few fixed user types conversions.
210         
211         * symbolwriter.cs: Uses public ILOffset.
212
213 2009-11-13  Marek Safar  <marek.safar@gmail.com>
214
215         A fix for bug #553650
216         * generic.cs: Another missing TypeToCoreType, still too many to fix.
217
218 2009-11-13  Marek Safar  <marek.safar@gmail.com>
219
220         A fix for bug #555170
221
222         * class.cs, delegate.cs, enum.cs: Constants have to be available
223         for parameters resolve.
224
225 2009-11-12  Marek Safar  <marek.safar@gmail.com>
226
227         * typemanager.cs, argument.cs, support.cs, delegate.cs: Dynamic
228         arrays.
229
230 2009-11-12  Marek Safar  <marek.safar@gmail.com>
231
232         * argument.cs, context.cs, expression.cs, ecore.cs: Dynamic binding
233         with a statically known candidate set.
234
235 2009-11-11  Scott Peterson  <lunchtimemama@gmail.com>
236
237         * generic.cs: Made type inflation for generic constraint checks
238         recursive. This fixes BGO #553655.
239
240 2009-11-11  Marek Safar  <marek.safar@gmail.com>
241
242         * dynamic.cs, decl.cs, expression.cs, ecore.cs: More dynamic type
243         checks.
244
245 2009-11-10  Marek Safar  <marek.safar@gmail.com>
246
247         * typemanager.cs, generic.cs, parameter.cs, argument.cs, dynamic.cs,
248         linq.cs, rootcontext.cs, ecore.cs, class.cs, delegate.cs,
249         attribute.cs: Add some dynamic error checking.
250
251 2009-11-07  Marek Safar  <marek.safar@gmail.com>
252
253         A fix for bug #553465
254
255         * expression.cs: Fixed mixed version of expression tree anonymous
256         type.
257
258 2009-11-06  Marek Safar  <marek.safar@gmail.com>
259
260         A fix for bug #553031
261
262         * linq.cs, expression.cs, class.cs, cs-parser.jay: Initialize
263         expression tree version of anonymous type with members declaration.
264
265 2009-11-05  Marek Safar  <marek.safar@gmail.com>
266
267         * parameter.cs: Handle nullable parameter default expression.
268         
269         * argument.cs, dynamic.cs, expression.cs, support.cs, ecore.cs,
270         class.cs, attribute.cs: Check for wrong dynamic arguments.
271
272 2009-11-05  Marek Safar  <marek.safar@gmail.com>
273
274         * statement.cs: Dynamic statements.
275
276 2009-11-04  Marek Safar  <marek.safar@gmail.com>
277
278         * dynamic.cs, assign.cs, context.cs, expression.cs, ecore.cs:
279         Compound assignments over dynamic type.
280
281 2009-11-03  Marek Safar  <marek.safar@gmail.com>
282
283         * argument.cs, dynamic.cs, expression.cs, delegate.cs: Dynamic
284         constructor arguments.
285
286 2009-10-30  Marek Safar  <marek.safar@gmail.com>
287
288         * dynamic.cs, convert.cs, assign.cs, constant.cs, expression.cs,
289         codegen.cs: Unary mutator on dynamic member access expression.
290
291 2009-10-29  Marek Safar  <marek.safar@gmail.com>
292
293         A fix for bug #550580   
294         * convert.cs: Don't eliminate explicit precission casts.
295
296 2009-10-28  Marek Safar  <marek.safar@gmail.com>
297
298         A fix for bug #550404
299         
300         * parameter.cs, iterators.cs, context.cs, anonymous.cs,
301         expression.cs, statement.cs, ecore.cs: Quote any nested expression
302         tree.
303
304 2009-10-27  Marek Safar  <marek.safar@gmail.com>
305
306         * constant.cs, nullable.cs: Create nullable-null as LiftedNull
307         constant.
308         
309         * class.cs: Allow nullable binary user operators.
310
311 2009-10-26  Marek Safar  <marek.safar@gmail.com>
312
313         * expression.cs: Move binary expression optimization at the end of
314         resolve.
315
316 2009-10-23  Marek Safar  <marek.safar@gmail.com>
317
318         * constant.cs, nullable.cs, expression.cs, literal.cs, cfold.cs:
319         Separate NullConstant from NullLiteral.
320
321 2009-10-23  Marek Safar  <marek.safar@gmail.com>
322
323         * typemanager.cs, eval.cs, decl.cs, roottypes.cs, context.cs,
324         anonymous.cs, expression.cs, rootcontext.cs, ecore.cs, class.cs,
325         flowanalysis.cs, cs-parser.jay, driver.cs, codegen.cs: Split
326         ModuleContainer. Add common unclosed member check routine.
327
328 2009-10-22  Marek Safar  <marek.safar@gmail.com>
329
330         * argument.cs: Use literal flag for real literals only.
331
332         * dynamic.cs: Use correct return type for custom delegates.
333
334 2009-10-22  Marek Safar  <marek.safar@gmail.com>
335
336         * dynamic.cs, expression.cs: Pass logical binary flag to dynamic
337         resolver.
338
339 2009-10-22  Marek Safar  <marek.safar@gmail.com>
340
341         * dynamic.cs, ecore.cs: Dynamic invocation with void return type.
342
343 2009-10-21  Marek Safar  <marek.safar@gmail.com>
344
345         * dynamic.cs, convert.cs, expression.cs, ecore.cs: Wrap array index
346         conversion.
347
348 2009-10-21  Marek Safar  <marek.safar@gmail.com>
349
350         * typemanager.cs, dynamic.cs, expression.cs: Don't resolve runtime
351         binder flags.
352
353 2009-10-20  Marek Safar  <marek.safar@gmail.com>
354
355         * argument.cs, dynamic.cs, expression.cs: Latest API update.
356
357 2009-10-19  Marek Safar  <marek.safar@gmail.com>
358
359         * typemanager.cs, expression.cs: Dynamic array initializer.
360
361 2009-10-16  Marek Safar  <marek.safar@gmail.com>
362
363         * typemanager.cs, rootcontext.cs: Clear -nostdlib flag when object
364         is imported.
365
366 2009-10-16  Marek Safar  <marek.safar@gmail.com>
367
368         A fix for bug #493523, #507067
369         * convert.cs, nullable.cs, expression.cs: Do implicit and explicit
370         standard nullable conversion using underlying standard conversion
371         and not full conversion.
372
373 2009-10-15  Marek Safar  <marek.safar@gmail.com>
374
375         * dynamic.cs, expression.cs, ecore.cs, delegate.cs: Check return
376         type in VerifyArgumentsCompat.
377
378 2009-10-15  Marek Safar  <marek.safar@gmail.com>
379
380         * nullable.cs, expression.cs, statement.cs, namespace.cs, ecore.cs:
381         Reject variable used with type arguments.
382
383 2009-10-14  Marek Safar  <marek.safar@gmail.com>
384
385         * argument.cs, dynamic.cs, assign.cs, expression.cs, ecore.cs:
386         Implement dynamic expressions assignment.
387
388 2009-10-14  Marek Safar  <marek.safar@gmail.com>
389
390         * expression.cs: Build underlying expression when resolving unary
391         mutators.
392
393 2009-10-14  Marek Safar  <marek.safar@gmail.com>
394
395         * expression.cs: Emit enum array initializer using binary blob.
396
397 2009-10-08  Marek Safar  <marek.safar@gmail.com>
398
399         * typemanager.cs, constant.cs: Optimize decimal constants which fit
400         to long range.
401
402 2009-10-07  Marek Safar  <marek.safar@gmail.com>
403
404         * typemanager.cs: Reset object_type.
405         
406         * assign: Made SimpleAssign public.
407
408 2009-10-06  Marek Safar  <marek.safar@gmail.com>
409
410         * typemanager.cs, decl.cs, namespace.cs, ecore.cs, class.cs: Pass
411         invocation assembly to IsThisOrFriendAssembly.
412
413 2009-10-05  Marek Safar  <marek.safar@gmail.com>
414
415         * expression.cs: Equality comparison of generic parameter with
416         class constraint.
417
418 2009-10-05  Marek Safar  <marek.safar@gmail.com>
419
420         A fix for bug #543570
421         * generic.cs: Import predefined constraints correctly.
422
423 2009-10-02  Marek Safar  <marek.safar@gmail.com>
424
425         * ecore.cs: Don't crash on overloads with optional paremeters where
426         arguments count overflows.
427         
428         * parameter.cs: Import optional parameter constants using optional
429         value type.
430
431 2009-10-01  Marek Safar  <marek.safar@gmail.com>
432
433         * Makefile: Default is gmcs compiler.
434
435 2009-10-01  Marek Safar  <marek.safar@gmail.com>
436
437         * cs-parser.jay: Fixed few NRE.
438
439 2009-10-01  Marek Safar  <marek.safar@gmail.com>
440
441         * cs-parser.jay, driver.cs: Expose parser exception in verbose mode.
442
443 2009-09-30  Marek Safar  <marek.safar@gmail.com>
444
445         * linq.cs, convert.cs, assign.cs, expression.cs, ecore.cs: Add
446         ShimExpression, ImplicitCast.
447
448 2009-09-30  Marek Safar  <marek.safar@gmail.com>
449
450         A fix for bug #542959
451         * delegate.cs: Emit correct delegate instance variable when there
452         are static and non-static overloads.
453
454 2009-09-29  Marek Safar  <marek.safar@gmail.com>
455
456         * dynamic.cs, linq.cs, anonymous.cs, expression.cs, statement.cs,
457         ecore.cs, cs-parser.jay: Unary expression dynamic compiler.
458
459 2009-09-28  Marek Safar  <marek.safar@gmail.com>
460
461         A fix for bug #542487
462         * ecore.cs: Resolve extension methods hidden by properties.
463
464 2009-09-25  Marek Safar  <marek.safar@gmail.com>
465
466         * expression.cs, ecore.cs: More dynamic binary expressions.
467
468 2009-09-22  Marek Safar  <marek.safar@gmail.com>
469
470         * nullable.cs, expression.cs: Fixed null lifted conversion for
471         bitwise enum operations.
472
473 2009-09-22  Marek Safar  <marek.safar@gmail.com>
474
475         * convert.cs, ecore.cs: Fixed explicit unsafe coversion of long
476         values in checked context.
477
478 2009-09-22  Marek Safar  <marek.safar@gmail.com>
479
480         * expression.cs, ecore.cs: Fixed array index constant conversion.
481
482 2009-09-20  Miguel de Icaza  <miguel@novell.com>
483
484         * expression.cs: Do not crash when MemberLookup returns something
485         that is not a MemberExpr here.   Report error 582 instead. 
486
487         Fixes #499988.
488
489 2009-09-18  Marek Safar  <marek.safar@gmail.com>
490
491         * decl.cs, class.cs: Check protected property accessors.
492
493 2009-09-18  Marek Safar  <marek.safar@gmail.com>
494
495         * dynamic.cs, assign.cs: Dynamic compound assignment.
496
497 2009-09-17  Marek Safar  <marek.safar@gmail.com>
498
499         * expression.cs: Fixed compound assignment explicit conversion.
500
501 2009-09-17  Marek Safar  <marek.safar@gmail.com>
502
503         * expression.cs, ecore.cs: Cannot infer variables from method group.
504
505 2009-09-16  Marek Safar  <marek.safar@gmail.com>
506
507         * argument.cs, dynamic.cs, convert.cs, context.cs, anonymous.cs,
508         constant.cs, nullable.cs, expression.cs, literal.cs, ecore.cs,
509         codegen.cs: Dynamic binary operations scaffolding.
510
511 2009-09-15  Marek Safar  <marek.safar@gmail.com>
512
513         * expression.cs: Fixes nullable promotion for enum type variables.
514
515 2009-09-11  Marek Safar  <marek.safar@gmail.com>
516
517         * driver.cs, dynamic.cs: Reset more static variables.
518
519 2009-09-11  Marek Safar  <marek.safar@gmail.com>
520
521         * dynamic.cs, expression.cs, rootcontext.cs, namespace.cs, ecore.cs,
522         driver.cs: Introduced Expression::MakeExpression.
523
524 2009-09-11  Marek Safar  <marek.safar@gmail.com>
525
526         * eval.cs: Exposed MessageOutput instead of cleaning up eval API.
527
528 2009-09-09  Marek Safar  <marek.safar@gmail.com>
529
530         * eval.cs, report.cs: Use Console.Out for all eval error or warning
531         output.
532
533 2009-09-09  Marek Safar  <marek.safar@gmail.com>
534
535         A fix for bug #518707
536         * expression.cs (Is): Optimize only generic parameter type
537         expression probing value type generic parameter.
538
539 2009-09-09  Marek Safar  <marek.safar@gmail.com>
540
541         A fix for bug #532571
542         * ecore.cs: Check for simple name type arguments used with
543         non-generic type.
544
545 2009-09-08  Marek Safar  <marek.safar@gmail.com>
546
547         A fix for bug #497421
548         * generic.cs (CheckConstraint): Don't use buildin types to check for
549         parameterless constructor.
550
551 2009-09-08  Marek Safar  <marek.safar@gmail.com>
552
553         A fix for bug #537402
554         * generic.cs (CheckConstraint): Correctly inflate generic type
555         arguments when checking generic method. 
556
557 2009-09-08  Marek Safar  <marek.safar@gmail.com>
558
559         A fix for bug #536463
560         * decl.cs (AddToContainer): Don't report collision between explicit
561         and parameterless non-explicit members.
562
563 2009-09-08  Marek Safar  <marek.safar@gmail.com>
564
565         * eval.cs: Reset more static stuff.
566
567 2009-09-07  Marek Safar  <marek.safar@gmail.com>
568
569         A fix for bug #324625
570         * expression.cs, ecore.cs: Create nested generic type expression
571         using declaring and not current type.
572
573 2009-09-07  Marek Safar  <marek.safar@gmail.com>
574
575         * *.cs: Changed Report class to accept various output printers and
576         be an instance class. An expression resolver can now use different
577         message reporter for each call and Report.Error can safely throw
578         an exception. Part of ongoing work to turn mcs into proper library.
579
580 2009-09-04  Marek Safar  <marek.safar@gmail.com>
581
582         * statement.cs, ecore.cs: Removed error reporting from emit code.
583
584 2009-09-04  Marek Safar  <marek.safar@gmail.com>
585
586         * cs-parser.jay, parameter.cs: Moved parser check out of constructor
587
588 2009-09-03  Marek Safar  <marek.safar@gmail.com>
589
590         * anonymous.cs, expression.cs, statement.cs, cs-parser.jay: Moved
591         parser checks out of constructors.
592
593 2009-09-02  Marek Safar  <marek.safar@gmail.com>
594
595         * expression.cs, statement.cs, ecore.cs: Use common Report.Error.
596
597 2009-09-02  Marek Safar  <marek.safar@gmail.com>
598
599         A fix for bug #535448
600         * anonymous.cs, class.cs: Copy return label between all contexts.
601
602 2009-09-02  Marek Safar  <marek.safar@gmail.com>
603
604         A fix for bug #535395
605         * namespace.cs: Resolve context can be null.
606
607 2009-08-25  Marek Safar  <marek.safar@gmail.com>
608
609         A fix for bug #533912
610         * generic.cs: Use correct context for constraints resolving.
611
612 2009-08-25  Marek Safar  <marek.safar@gmail.com>
613
614         A fix for bug #532630
615         * driver.cs: Trim conditional symbols.
616
617 2009-08-25  Marek Safar  <marek.safar@gmail.com>
618
619         * context.cs: New file.
620         
621         * *.exe.sources, *.csproj: Updated.
622
623 2009-08-25  Marek Safar  <marek.safar@gmail.com>
624
625         * generic.cs, parameter.cs, decl.cs, statement.cs, namespace.cs,
626         class.cs, generic-mcs.cs, codegen.cs: Add GetSignatureForError to
627         IMembercontext, some small cleanups.
628
629 2009-08-24  Marek Safar  <marek.safar@gmail.com>
630
631         * *.cs: Split ResolveContext and EmitContext.
632
633 2009-08-24  Marek Safar  <marek.safar@gmail.com>
634
635         * *.cs: Only ResolveContext implements IMemberContext.
636
637 2009-08-21  Marek Safar  <marek.safar@gmail.com>
638
639         * *.cs: Renamed IResolveContext to IMemberContext.
640
641 2009-08-21  Marek Safar  <marek.safar@gmail.com>
642
643         * *.cs: Detached ResolveContext from EmitContext.
644
645 2009-08-21  Marek Safar  <marek.safar@gmail.com>
646
647         * codegen.cs: Moved flow-analysis to BlockContext.
648
649 2009-08-21  Marek Safar  <marek.safar@gmail.com>
650
651         * *.cs: Detached BlockContext from EmitContext.
652
653 2009-08-20 Gonzalo Paniagua Javier <gonzalo@novell.com>
654
655         * statement.cs: avoid nullref when the return value of GetEnumerator()
656         does not contain any MoveNext() method.
657
658 2009-08-19  Marek Safar  <marek.safar@gmail.com>
659
660         * *.cs: Removed IResolveContext::GenericDeclContainer.
661
662 2009-08-19  Marek Safar  <marek.safar@gmail.com>
663
664         * class.cs, delegate.cs: Changed Delegate to be TypeContainer based.
665
666 2009-08-19  Marek Safar  <marek.safar@gmail.com>
667
668         * generic.cs, iterators.cs, expression.cs, statement.cs, ecore.cs,
669         cs-parser.jay, attribute.cs, codegen.cs: Better error reports.
670
671 2009-08-18  Marek Safar  <marek.safar@gmail.com>
672
673         * *.cs: Removed boolean fields from EmitContext.
674
675 2009-08-18  Marek Safar  <marek.safar@gmail.com>
676
677         * *.cs: Add IResolveContext::IsStatic.
678
679 2009-08-18  Marek Safar  <marek.safar@gmail.com>
680
681         * *.cs: Moved TopBlock's methods from EmitContext to TopBlock.
682
683 2009-08-17  Marek Safar  <marek.safar@gmail.com>
684
685         * *.cs: Removed DeclContainer from EmitContext.
686
687 2009-08-17  Marek Safar  <marek.safar@gmail.com>
688
689         * *.cs: Add IResolveContext::CurrentTypeParameters.
690
691 2009-08-14  Marek Safar  <marek.safar@gmail.com>
692
693         * *.cs: Removed TypeContainer and ContainerType from EmitContext.
694
695 2009-08-14  Marek Safar  <marek.safar@gmail.com>
696
697         * decl.cs, expression.cs, namespace.cs, ecore.cs, class.cs,
698         codegen.cs: Add IResolveContext::LookupExtensionMethod.
699
700 2009-08-13  Marek Safar  <marek.safar@gmail.com>
701
702         * decl.cs: Look in PartialContainer for parent type parameters.
703
704 2009-08-13  Marek Safar  <marek.safar@gmail.com>
705
706         * decl.cs, namespace.cs, ecore.cs, class.cs, attribute.cs,
707         codegen.cs: Add IResolveContext::LookupTypeParameter.
708
709 2009-08-13  Marek Safar  <marek.safar@gmail.com>
710
711         * lambda.cs, expression.cs, statement.cs, namespace.cs, ecore.cs:
712         Moved resolved logic from Emit to Resolve.
713
714 2009-08-13  Marek Safar  <marek.safar@gmail.com>
715
716         * parameter.cs, decl.cs, roottypes.cs, class.cs, attribute.cs,
717         codegen.cs: Reworked atttributes handling of ResolveContext.
718
719 2009-08-12  Marek Safar  <marek.safar@gmail.com>
720
721         * decl.cs, ecore.cs, class.cs, attribute.cs, codegen.cs: Pushed
722         LookupNamespaceOrType to ResolveContext.
723
724 2009-08-12  Marek Safar  <marek.safar@gmail.com>
725
726         * typemanager.cs, decl.cs, expression.cs, namespace.cs, ecore.cs,
727         class.cs: Removed unused parameters and methods.
728
729 2009-08-11  Marek Safar  <marek.safar@gmail.com>
730
731         * generic.cs, lambda.cs, anonymous.cs, statement.cs, generic-mcs.cs,
732         codegen.cs: Finding the best common type of a set of expressions for
733         lambda statements.
734
735 2009-08-07  Marek Safar  <marek.safar@gmail.com>
736
737         * dynamic.cs, expression.cs: More dynamic conversions.
738
739 2009-08-06  Miguel de Icaza  <miguel@novell.com>
740
741         * generic.cs: This loop was incorrect, it was increment ii, but
742         checking for `i'.  This was a change introduced to fix #327497,
743         now we fix #424012.
744  
745         * class.cs: Catch another case for cs0533 error, fixes #324782.
746
747 2009-08-06 Rodrigo Kumpera  <rkumpera@novell.com>
748
749         * typemanager.cs (GetGenericArguments): SRE returns null for
750         generic methods on type builder instances if they are not generic
751         themselves. For example, for Foo<int>::Bar() it returns null, but
752         not for Foo<int>::Bar<>() or Foo<int>::Bar<double>().
753
754 2009-08-05  Marek Safar  <marek.safar@gmail.com>
755
756         * argument.cs, dynamic.cs, expression.cs, ecore.cs, class.cs,
757         delegate.cs: Work on dynamic binding.
758
759 2009-08-04  Marek Safar  <marek.safar@gmail.com>
760
761         A second fix for bug #525342
762         * class.cs: Attach partial method attributes to method
763         implementation.
764
765 2009-08-03  Marek Safar  <marek.safar@gmail.com>
766
767         * typemanager.cs, parameter.cs, support.cs, class.cs: Dynamic type
768         restrictions.
769         
770         * rootcontext.cs: Default to langversion v4.
771
772 2009-08-03  Marek Safar  <marek.safar@gmail.com>
773
774         * pending.cs: Check return type before member info is set.
775
776 2009-08-03  Marek Safar  <marek.safar@gmail.com>
777
778         * anonymous.cs: Fully initialize generic hoisted field expression.
779
780 2009-08-02  Miguel de Icaza  <miguel@novell.com>
781
782         * cs-parser.jay: Flag variables declared on the interactive shell
783         as used to prevent the 168 warning about local variable not being
784         used. 
785
786 2009-07-31  Marek Safar  <marek.safar@gmail.com>
787
788         * parameter.cs, dynamic.cs, support.cs, class.cs, delegate.cs,
789         attribute.cs: Emit dynamic export attribute.
790
791 2009-07-30  Marek Safar  <marek.safar@gmail.com>
792
793         * expression.cs: More verifier work.
794
795 2009-07-29  Marek Safar  <marek.safar@gmail.com>
796
797         * nullable.cs: Fixed SRE crash during corlib compilation.
798
799 2009-07-29  Marek Safar  <marek.safar@gmail.com>
800
801         * generic.cs, typemanager.cs, decl.cs, iterators.cs, convert.cs,
802         nullable.cs, expression.cs, ecore.cs, class.cs, attribute.cs:
803         More TypeManager.TypeToCoreType needed.
804
805 2009-07-29  Marek Safar  <marek.safar@gmail.com>
806
807         * anonymous.cs: Update after recent SRE fixes.
808
809 2009-07-28  Marek Safar  <marek.safar@gmail.com>
810
811         * typemanager.cs, expression.cs, ecore.cs, delegate.cs: Use correct
812         version of GetFieldHandle for fields of generic types.
813
814 2009-07-27  Marek Safar  <marek.safar@gmail.com>
815
816         * typemanager.cs, argument.cs, convert.cs, assign.cs, expression.cs,
817         ecore.cs: Add TypeManager.IsDynamicType,
818         PredefinedAttributes.Dynamic.
819
820 2009-07-27  Marek Safar  <marek.safar@gmail.com>
821
822         A fix for bug #415375
823         * expression.cs: Fixed object and reference type parameter
824         comparison.
825
826 2009-07-27  Marek Safar  <marek.safar@gmail.com>
827
828         A fix for bug #525342
829         * class.cs: Attach partial method attributes to method
830         implementation.
831
832 2009-07-24  Marek Safar  <marek.safar@gmail.com>
833
834         * argument.cs, dynamic.cs, expression.cs, class.cs, attribute.cs:
835         Dynamic arguments.
836
837 2009-07-24  Marek Safar  <marek.safar@gmail.com>
838
839         * anonymous.cs (MutateField): Add imported types handling.
840
841 2009-07-23  Marek Safar  <marek.safar@gmail.com>
842
843         * expression.cs, delegate.cs: Moved arguments resolve into their
844         counterparts expressions. Removed argument resolve from
845         CollectionElementInitializer.
846
847 2009-07-23  Marek Safar  <marek.safar@gmail.com>
848
849         A fix for bug #523683
850         * convert.cs, delegate.cs: Use common overload mechanism for method
851         group conversion check.
852
853 2009-07-22  Marek Safar  <marek.safar@gmail.com>
854
855         A fix for bug #523899
856         * generics.cs: Exact type inference with other bound types.
857
858 2009-07-22  Raja R Harinath  <harinath@hurrynot.org>
859
860         Don't complain when the same type is implemented by the output
861         assembly as well as multiple referenced assemblies
862         * namespace.cs (RootNamespace.LookupTypeReflection): Add
863         'must_be_unique' flag.
864         (GlobalRootNamespace): Update to changes.
865         (Namespace.LookupType): Pass 'must_be_unique' only when we don't
866         already have a type in hand.
867
868 2009-07-22  Marek Safar  <marek.safar@gmail.com>
869
870         * expression.cs: More verifier instrumentation.
871         
872         * statement.cs: Do proper throw expression conversion.
873
874 2009-07-22  Marek Safar  <marek.safar@gmail.com>
875
876         A fix for bug #522789
877         * expression.cs: Mutate invocation return type.
878
879 2009-07-16  Marek Safar  <marek.safar@gmail.com>
880
881         * anonymous.cs: Split assignable and readonly generated variable
882         references.
883
884 2009-07-16  Marek Safar  <marek.safar@gmail.com>
885
886         A fix for bug #521671
887         * statement.cs: Fixed crash when checking missing type.
888
889 2009-07-16  Marek Safar  <marek.safar@gmail.com>
890
891         * typemanager.cs, generic.cs, argument.cs, linq.cs, convert.cs,
892         assign.cs, expression.cs, statement.cs, support.cs, ecore.cs,
893         class.cs, driver.cs: Work on dynamic binding.
894
895         * dynamic.cs: New file.
896
897         * *.sources, *.proj: Updated.
898
899 2009-07-15  Marek Safar  <marek.safar@gmail.com>
900
901         * expression.cs (Conditional): Avoid double Resolve.
902
903 2009-07-13  Marcus Griep  <marcus@griep.us>
904
905         * ecore.cs: Fix obscure bug with resolving members of interfaces
906         that hide parent interface members. Fixes bug #444388 and corrects
907         bug #323096
908
909 2009-07-13  Marek Safar  <marek.safar@gmail.com>
910
911         * expression.cs (LocalVariableReference): Bounce resolve.
912
913 2009-07-10  Marek Safar  <marek.safar@gmail.com>
914
915         * typemanager.cs, lambda.cs, parameter.cs, convert.cs, anonymous.cs,
916         expression.cs, literal.cs, ecore.cs, complete.cs: Moved internal
917         types to new class.
918         
919         * support.cs: New dynamic type wrapper.
920
921 2009-07-08  Marek Safar  <marek.safar@gmail.com>
922
923         * ecore.cs, cs-parser.jay: Better error reporting for implicitly
924         typed local variable.
925
926 2009-07-06  Marek Safar  <marek.safar@gmail.com>
927
928         A fix for bug #519005
929         * anonymous.cs: Use null_type as no return type placeholder.
930
931 2009-07-02  Marek Safar  <marek.safar@gmail.com>
932
933         * generic.cs: Handle type inference of identical type parameters
934         with different bounds.
935
936 2009-07-01  Marek Safar  <marek.safar@gmail.com>
937
938         * expression.cs, class.cs: Events variance.
939         
940         * cs-parser.jay: Interface events error messages.
941
942 2009-07-01  Marek Safar  <marek.safar@gmail.com>
943
944         * generic.cs, argument.cs: Updated type inference logic to C# 4.0.
945
946 2009-06-29  Marek Safar  <marek.safar@gmail.com>
947
948         * parameter.cs, convert.cs, expression.cs, class.cs: Default
949         parameter expression can be value-type New.
950
951         * cs-parser.jay: Clean up too many parameter modifier boolean flags.
952
953 2009-06-26  Marek Safar  <marek.safar@gmail.com>
954
955         * generic.cs, argument.cs, expression.cs, ecore.cs, cs-parser.jay:
956         Implemented C# 4.0 named arguments.
957
958 2009-06-24  Marek Safar  <marek.safar@gmail.com>
959
960         * typemanager.cs, parameter.cs, iterators.cs, convert.cs,
961         expression.cs, ecore.cs, delegate.cs: Removed unnecessary ArgList
962         parameter modifier. Also fixes bug #515497.
963
964 2009-06-24  Marek Safar  <marek.safar@gmail.com>
965
966         * *.cs: Replaced ArrayList with Arguments in need of a nonsequential 
967         arguments expression to be implemented.
968         
969         *.sources: Add argument.cs
970
971 2009-06-23  Marek Safar  <marek.safar@gmail.com>
972
973         * parameter.cs: Moved GetParameterIndexByName to base class.
974         
975         * expression.cs, statement.cs, ecore.cs, delegate.cs: Removed
976         unused AType. Use argument's version of GetExpressionTree.
977
978 2009-06-22  Marek Safar  <marek.safar@gmail.com>
979
980         * expression.cs, cs-parser.jay, attribute.cs, codegen.cs: Named
981         arguments grammar.
982
983 2009-06-17  Marek Safar  <marek.safar@gmail.com>
984
985         A fix for bug #514096
986         * class.cs: Allow IntPtr/UIntPtr fields to be volatile.
987
988 2009-06-17  Marek Safar  <marek.safar@gmail.com>
989
990         * expression.cs: The first multi-dimensional array nested array
991         initializers was not checked.
992         
993         * statement.cs (Switch): Fixed error message to reflect 2.0 changes.
994
995 2009-06-17  Marek Safar  <marek.safar@gmail.com>
996
997         A fix for bug #513400
998         * nullable.cs (EmitEquality): Operands emit could be simplified for
999         built-in types when we now emit user operators differently.
1000
1001 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1002
1003         * ecore.cs: Report inaccessible delegate methods correctly.
1004
1005 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1006
1007         * parameter.cs, expression.cs, ecore.cs, class.cs, delegate.cs,
1008         cs-parser.jay: Implemented C# 4.0 optional parameters.
1009
1010 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1011
1012         * driver.cs: Removed broken DefineManifestResource.
1013
1014 2009-06-16  Raja R Harinath  <harinath@hurrynot.org>
1015
1016         * Makefile [net_2_0_bootstrap]: Don't explicitly mention net_1_1.
1017         Use $(BOOTSTRAP_PROFILE) instead.
1018
1019 2009-06-12  Jb Evain  <jbevain@novell.com>
1020
1021         * rootcontext.cs: add a Platform field.
1022         * driver.cs: handle /platform.
1023         * codegen.cs: pass the proper flags according to
1024         the platform when saving the assembly.
1025
1026 2009-06-11  Marek Safar  <marek.safar@gmail.com>
1027
1028         * parameter.cs, const.cs, report.cs, cs-parser.jay, attribute.cs:
1029         Add optional parameters grammar.
1030
1031 2009-06-10  Marek Safar  <marek.safar@gmail.com>
1032
1033         * eval.cs, anonymous.cs, report.cs, rootcontext.cs, cs-parser.jay,
1034         driver.cs: Split lang version and metadata version.
1035
1036 2009-06-10  Marek Safar  <marek.safar@gmail.com>
1037
1038         * decl.cs: Better overload ctor collision error message.
1039
1040 2009-06-05  Jb Evain  <jbevain@novell.com>
1041
1042         * driver.cs (EmbededResource): avoid using an internal method
1043         in gmcs to embed manifest resources.
1044
1045 2009-06-04  Sebastien Pouliot  <sebastien@ximian.com>
1046
1047         * generic.cs, parameter.cs: Avoid using 'var' so we can bootstrap
1048         the compiler from older mono versions (like moon's bots)
1049
1050 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1051
1052         * namespace.cs (LookupTypeReflection): Ignore collisions between
1053         forwarded types.
1054
1055 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1056
1057         * codegen.cs: Enabled generic type forwarders.
1058
1059 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1060
1061         * dmcs.*: Add another version of SRE compiler.
1062
1063 2009-06-03  Marek Safar  <marek.safar@gmail.com>
1064
1065         * generic.cs, typemanager.cs, parameter.cs, convert.cs,
1066         generic-mcs.cs: Fixed variant type conversions.
1067
1068 2009-06-02  Marek Safar  <marek.safar@gmail.com>
1069
1070         A fix for bug #507863
1071         * codegen.cs: Fixes a crash on invalid string value attribute.
1072
1073 2009-06-01  Marek Safar  <marek.safar@gmail.com>
1074
1075         A fix for bug #508334
1076         * typemanager.cs, parameter.cs, convert.cs, expression.cs, ecore.cs,
1077         cs-parser.jay: Fully import __arglist modifier.
1078
1079 2009-05-29  Marek Safar  <marek.safar@gmail.com>
1080
1081         * generic.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs,
1082         delegate.cs, generic-mcs.cs: Rewrote type variance checks to
1083         actually work with closed generic types.
1084
1085 2009-05-27  Alan McGovern  <amcgovern@novell.com>
1086
1087         * class.cs, decl.cs, delegate.cs, parameter.cs: 
1088         Fix the build by replacing the use of 'var' with the actual type.
1089
1090 2009-05-27  Marek Safar  <marek.safar@gmail.com>
1091
1092         * generic.cs, parameter.cs, decl.cs, ecore.cs, class.cs, delegate.cs
1093     cs-parser.jay, generic-mcs.cs: Report wrong variant types
1094         declarations.
1095           
1096         * driver.cs, rootcontext.cs, report.cs: Add 3.0 language version
1097         filter.
1098
1099 2009-05-26  Rodrigo Kumpera  <rkumpera@novell.com>
1100                         Marek Safar  <marek.safar@gmail.com>
1101
1102         A fix for bug #377509
1103         * parameter.cs: Use predefined and not empty name for implicit
1104         setters.
1105
1106 2009-05-21  Marek Safar  <marek.safar@gmail.com>
1107
1108         * class.cs: Don't report wrong warnings for event fields.
1109
1110 2009-05-21  Marek Safar  <marek.safar@gmail.com>
1111
1112         A fix for bug #504667
1113         * class.cs: Check for static class using parent container instead of
1114         parent type.
1115
1116 2009-05-08  Marek Safar  <marek.safar@gmail.com>
1117
1118         A fix for bug #496922
1119         * expression.cs: Always use temporary variable when using object
1120         initializer.
1121
1122 2009-04-28  Marek Safar  <marek.safar@gmail.com>
1123
1124         A fix for bug #495112
1125         * class.cs (IsUnmanagedType): Handle recursive unmanaged types using
1126         local cache.
1127
1128 2009-04-27  Miguel de Icaza  <miguel@novell.com>
1129
1130         * driver.cs: Add a flag to work as a replacement for CSC in VS.
1131
1132 2009-04-24  Miguel de Icaza  <miguel@novell.com>
1133
1134         * complete.cs: No idea how gonzalo got a null in the list, but
1135         avoid crashing.
1136
1137 2009-04-24  Miguel de Icaza  <miguel@novell.com>
1138
1139         * complete.cs (CompletionElementInitializer): New completion class
1140         to support completing inside a C# 3 element initializer, so this
1141         allows completion for Silverlight situations where it is very
1142         common to do:
1143
1144         new TextBlock () { Fo<TAB>
1145
1146         (CompletionSimpleName): Expose the prefix that was
1147         passed to the simple name.
1148
1149         * cs-parser.jay (object_or_collection_initializer): Add support
1150         for element_initializers.
1151
1152         * expression.cs (CollectionOrObjectInitializers.DoResolve):
1153         special case completion expressions as this method aggressively
1154         collects data before it operates, and errors were being thrown
1155         earlier than we were able to complete.
1156
1157 2009-04-23  Miguel de Icaza  <miguel@novell.com>
1158
1159         * eval.cs: Make getcompletions silent and enable debugging output
1160         if the -v option is passed.
1161
1162         * namespace.cs (NamespaceEntry.CompletionGetTypesStartingWith):
1163         Consider looking up the namespace that matches the prefix being
1164         used. 
1165
1166         This is part of the support for allowing completions like:
1167         `System.Co<TAB>' to complete to System.Console.
1168
1169         * complete.cs (CompletionSimpleName.AppendResults): Make this
1170         routine reusable.
1171
1172 2009-04-21  Raja R Harinath  <harinath@hurrynot.org>
1173
1174         * cs-parser.jay (GetTokenName): Mark GENERATE_COMPLETION and
1175         COMPLETE_COMPLETION as internal.
1176
1177 2009-04-17  Miguel de Icaza  <miguel@novell.com>
1178
1179         * complete.cs: Include namespace resolution in simple names as
1180         well as global types and types in the using scope in the
1181         resolution. 
1182
1183         * namespace.cs: Supporting infrastrcture to provide completions
1184         based on the current using scope. 
1185
1186         * eval.cs: Introduce an entry point that allows for initialization
1187         to return a list of the files passed on the command line.
1188
1189 2009-04-14  Marek Safar  <marek.safar@gmail.com>
1190
1191         A fix for bug #494243
1192         * report.cs (SymbolRelatedToPreviousError): Fixed NRE.
1193
1194 2009-04-13  Marek Safar  <marek.safar@gmail.com>
1195
1196         A fix for bug #493887
1197         * statement.cs: Don't skip string multi-section with default or
1198         null label when populating string hashtable.
1199
1200 2009-04-06  Marek Safar  <marek.safar@gmail.com>
1201
1202         A fix for bug #492329
1203         * expression.cs (New): Load variable when assigning type parameter
1204         to ref variable.
1205
1206 2009-04-06  Marek Safar  <marek.safar@gmail.com>
1207
1208         A fix for bug #488960
1209         * decl.cs: Compare MVAR types using non-null values.
1210
1211 2009-03-27  Marek Safar  <marek.safar@gmail.com>
1212
1213         * typemanager.cs, expression.cs: Removed unused nullable checks.
1214
1215 2009-03-27  Marek Safar  <marek.safar@gmail.com>
1216
1217         * *.cs: Removed some gmcs conditionals.
1218
1219 2009-03-26  Marek Safar  <marek.safar@gmail.com>
1220
1221         * generic.cs, support.cs: Moved generics stuff out of support.cs
1222
1223 2009-03-24  Marek Safar  <marek.safar@gmail.com>
1224
1225         * ecore.cs, expression.cs: Use queried type for MethodGroupExpr
1226         DeclaringType.
1227
1228 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1229
1230         * attribute.cs: Consider all members for error reporting when
1231         checking named arguments.
1232
1233 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1234
1235         A fix for bug #487625
1236         * namespace.cs: Use a warning for all predefined type conflicts.
1237
1238 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1239
1240         A fix for bug #485706
1241         * statement.cs: Explicitly type catch type argument to pass verifier
1242         check.
1243
1244 2009-03-22  Miguel de Icaza  <miguel@novell.com>
1245
1246         Initial support to provide code completion facilities to consumers
1247         of the evaluator API.
1248         
1249         * cs-tokenizer.cs (CompleteOnEOF): this new property is used to
1250         support the completion engine.   When we reach the end of the
1251         input stream instead of returning EOF, when this flag is true the
1252         tokenizer instead produces:
1253
1254                 One GENERATE_COMPLETION token: this token then must be
1255                 handled in the grammar at every point where the user
1256                 would likely request a completion.
1257
1258                 As many COMPLETE_COMPLETION tokens as necessary.   These
1259                 tokens are generated to assist the parser in unwinding and
1260                 producing a valid parse tree.    
1261
1262         The parser rules do not have to be perfect, the parser needs to be
1263         augmented with judicious use of GENERATE_COMPLETION tokens to
1264         improve the areas where we can provide completion and the parser
1265         needs to add support for COMPLETE_COMPLETION tokens in productions
1266         to make them work.
1267
1268         It is common to not have enough support for COMPLETE_COMPLETION
1269         under certain rules and that even if we generated the
1270         GENERATE_COMPLETION token that the resulting tree will be invalid
1271         due to the missing rules that support COMPLETE_COMPLETION.
1272
1273         The final EOF token is produced by having the parser notify the
1274         tokenizer when it reaches the root production that the next token
1275         should be EOF.
1276
1277         * support.cs (CompletionResult): New Exception.   This exception
1278         is thrown to return the completion results when one of the special
1279         completion expressions is reached.
1280
1281         This exception is thrown by the completing ExpressionStatements
1282         classes that live in complete.cs
1283
1284         * complete.cs (CompletingExpression): a new base class for
1285         completing expressions.   This derives from the
1286         ExpressionStatement class and not from Expression as it allows
1287         completion to happen not only where expressions are expected in
1288         the grammar, but also where statements are expected.
1289
1290         (CompletionSimpleName): A new class used to provide completions
1291         for SimpleNames.     This currently only resolves to local
1292         variables from the evaluator context (GetVars call).
1293
1294         (CompletionMemberAccess): Implements support for completing member
1295         access patterns. 
1296
1297         * cs-parser.jay: Add support for completion in a few places. 
1298
1299         * eval.cs (GetCompletions): New public API for the evaluator that
1300         returns a list of possible completions given the input.   The
1301         return value is an array of completions 
1302
1303         * anonymous.cs (Compatible): If the exception thrown from the
1304         resolved expression is a CompletionResult exception let that one
1305         through instead of printing a diagnostic error in the try/catch. 
1306 <       
1307 2009-03-22  Miguel de Icaza  <miguel@novell.com>
1308
1309         * 
1310
1311         * driver.cs (Main): Use Environment.Exit to quit quickly and
1312         prevent the compiler from doing the usual wait for helper thread
1313         to terminate.  
1314
1315         This is to prevent a slowdown that was reported by Gonzalo on
1316         ASP.NET 
1317
1318 2009-03-19  Marek Safar  <marek.safar@gmail.com>
1319
1320         * ecore.cs: Load build-in types directly instead of accessing
1321         an internal field.
1322
1323 2009-03-18  Marek Safar  <marek.safar@gmail.com>
1324
1325         * ecore.cs: Always use unbox.any when available.
1326
1327 2009-03-18  Marek Safar  <marek.safar@gmail.com>
1328
1329         * class.cs: Always set TypeAttributes.BeforeFieldInit conditionally.
1330
1331 2009-03-17  Marek Safar  <marek.safar@gmail.com>
1332
1333         * generic.cs: Removed obsolete version of type inference.
1334
1335 2009-03-16  Marek Safar  <marek.safar@gmail.com>
1336
1337         * typemanager.cs, decl.cs, roottypes.cs, anonymous.cs, nullable.cs,
1338         expression.cs, rootcontext.cs, namespace.cs, ecore.cs, class.cs,
1339         delegate.cs, flowanalysis.cs, cs-parser.jay, driver.cs,
1340         attribute.cs, codegen.cs: Changed RootTypes to be ModuleContainer.
1341
1342 2009-03-11  Marek Safar  <marek.safar@gmail.com>
1343
1344         A fix for bug #482996
1345         * anonymous.cs: Make sure we are not infering return type when
1346         checking type compatibility.
1347
1348 2009-03-11  Marek Safar  <marek.safar@gmail.com>
1349
1350         * typemanager.cs, generic.cs, parameter.cs, decl.cs, const.cs,
1351         rootcontext.cs, namespace.cs, class.cs, delegate.cs, driver.cs,
1352         generic-mcs.cs, attribute.cs, codegen.cs: Maintain predefined
1353         attributes in their own structure. Needed when accessing their
1354         properties before they are resolved.
1355
1356 2009-03-09  Marek Safar  <marek.safar@gmail.com>
1357
1358         * cs-tokenizer.cs: Optimized GetKeyword using an array instead of
1359         hashtable (~10x faster).
1360         
1361         * driver.cs: Removed wrong Reset.
1362
1363 2009-03-08  Marek Safar  <marek.safar@gmail.com>
1364
1365         * class.cs: Use correct common base type for unmanaged delayed
1366         check.
1367
1368         * rootcontext.cs: Wrap unhandled exception.
1369
1370 2009-03-06  Raja R Harinath  <harinath@hurrynot.org>
1371
1372         Make SeekableStreamReader self-tuning and arbitrarily seekable
1373         * support.cs (SeekableStreamReader.ResetStream): New.  Allocates
1374         the buffer.
1375         (SeekableStreamReader.Position.set): Use it.  Simplify logic
1376         which, as a side-effect, makes it arbitrarily-seekable.  Tune the
1377         buffer size when the stream needs to be re-read from the beginning.
1378
1379 2009-03-05  Marek Safar  <marek.safar@gmail.com>
1380
1381         A fix for bug #480100
1382         * parameter.cs: A parameter is not hoisted when used directly as ET.
1383
1384 2009-03-04  Marek Safar  <marek.safar@gmail.com>
1385
1386         * statement.cs: Fixed an issue when using variable is of interface
1387         type.
1388
1389 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1390
1391         A fix for bug #480319
1392         * report.cs, driver.cs: Support -warnaserror-:<warning list> option.
1393
1394 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1395
1396         A fix for bug #480867
1397         * typemanager.cs, expression.cs, ecore.cs: Changed method group
1398         expression to have no valid type.
1399
1400 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1401
1402         A fix for bug #481258
1403         * class.cs: Set extension method flag in partial container.
1404
1405 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1406
1407         * statement.cs, typemanager.cs: Use expression for StringEmitter.
1408         
1409         * attribute.cs: Add sanity check.
1410
1411 2009-02-27  Marek Safar  <marek.safar@gmail.com>
1412
1413         * class.cs: Add external constructor error.
1414
1415 2009-02-26  Marek Safar  <marek.safar@gmail.com>
1416
1417         A fix for bug #475354
1418         * convert.cs, nullable.cs, expression.cs, statement.cs: Emit
1419         correctly user defined nullable equality operators.
1420
1421 2009-02-25  Marek Safar  <marek.safar@gmail.com>
1422
1423         A fix for bug #479532
1424         * expression.cs: Implement NewInitialize::AddressOf.
1425
1426 2009-02-25  Marek Safar  <marek.safar@gmail.com>
1427
1428         A fix for bug #413633
1429         * expression.cs: Iterate all base class-constraint types.
1430
1431 2009-02-24  Marek Safar  <marek.safar@gmail.com>
1432
1433         A fix for bug #479209
1434         * literal.cs: Mutate null underlying type.
1435
1436 2009-02-24  Marek Safar  <marek.safar@gmail.com>
1437
1438         A fix for bug #476295
1439         * convert.cs: Avoid wrapping implicitly convertible reference type.
1440
1441 2009-02-23  Marek Safar  <marek.safar@gmail.com>
1442
1443         * iterators.cs: Create MemberName correctly.
1444
1445 2009-02-23  Marek Safar  <marek.safar@gmail.com>
1446
1447         A fix for bug #478655
1448         * literal.cs: Check also underlying null type conversion.
1449
1450 2009-02-21  Marek Safar  <marek.safar@gmail.com>
1451
1452         * generic.cs, ecore.cs, class.cs: Removed redundant AsAccessible.
1453
1454 2009-02-20  Marek Safar  <marek.safar@gmail.com>
1455
1456         A fix for bug #477447
1457         * statement.cs: Add reference to correct parent storey when this
1458         is accessible from deep children storey (more than 1 level).
1459
1460 2009-02-19  Marek Safar  <marek.safar@gmail.com>
1461
1462         A fix for bug #475860 by David Mitchell <dmitchell@logos.com>
1463         * class.cs: Define base type members before setting up member cache.
1464
1465 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1466
1467         A fix for bug #477378
1468         * nullable.cs, expression.cs, statement.cs: More precise null type
1469         sanity checks.
1470
1471 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1472
1473         A fix for bug #472805
1474         * typemanager.cs, namespace.cs: Import only visible extension method
1475         types.
1476
1477 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1478
1479         A fix for bug #476895
1480         * attribute.cs: Use correct resolve context for attribute type.
1481
1482 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1483
1484         A fix for bug #476266
1485         * anonymous.cs: Mutate multi-dimensional arrays.
1486
1487 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1488
1489         A fix for bug #476400
1490         * statement.cs, expression.cs: Removed wrong Dispose optimization.
1491
1492 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1493
1494         A fix for bug #476811
1495         * generics.cs: Fixed null-literal check.
1496
1497 2009-02-17  Marek Safar  <marek.safar@gmail.com>
1498
1499         * typemanager.cs, convert.cs, flowanalysis.cs, driver.cs,
1500         expression.cs, ecore.cs, rootcontext.cs, eval.cs, class.cs: More
1501         messing with static variables.
1502
1503 2009-02-16  Marek Safar  <marek.safar@gmail.com>
1504
1505         A fix for bug #475965
1506         * generics.cs: Check generic parameter type after extracting from
1507         Expression<T>.
1508
1509 2009-02-16  Marek Safar  <marek.safar@gmail.com>
1510
1511         A fix for bug #475823
1512         * convert.cs, expression.cs, literal.cs, ecore.cs, cfold.cs: Add
1513         typed-null support.
1514
1515 2009-02-14  Marek Safar  <marek.safar@gmail.com>
1516
1517         * modifiers.cs, decl.cs, ecore.cs, class.cs, flowanalysis.cs:
1518         Simplified event field definition using backing field and not
1519         field builder directly.
1520
1521         * expression.cs (EmitLdArg): Optimize fast paths.
1522
1523 2009-02-13  Marek Safar  <marek.safar@gmail.com>
1524
1525         A fix for bug #475327
1526         * expression.cs (ArrayCreation): Don't mutate values optimized away.
1527
1528 2009-02-13  Marek Safar  <marek.safar@gmail.com>
1529
1530         A fix for bug #475342
1531         * cs-parser.jay: Using 'super' instead of 'base' to call base
1532         constructor crashes compiler.
1533
1534 2009-02-13  Marek Safar  <marek.safar@gmail.com>
1535
1536         A fix for bug #475354
1537         * expression.cs (Constantify): Add nullable types.
1538         
1539         * const.cs (EmitDecimalConstant): Avoid explicit cast.
1540
1541 2009-02-12  Marek Safar  <marek.safar@gmail.com>
1542
1543         A fix for bug #475246
1544         * expression.cs: More broken flowanalysis hacking needed.
1545
1546 2009-02-12  Marek Safar  <marek.safar@gmail.com>
1547
1548         * attribute.cs: Compare only ref/out array modifiers. 
1549
1550 2009-02-11  Marek Safar  <marek.safar@gmail.com>
1551
1552         * statement.cs: Use member cache when looking for foreach members.
1553
1554 2009-02-11  Marek Safar  <marek.safar@gmail.com>
1555
1556         * expression.cs: Don't expose internal initializer types.
1557         
1558         * statement.cs: Check also explicit conversions for goto case.
1559
1560 2009-02-11  Marek Safar  <marek.safar@gmail.com>
1561
1562         * convert.cs, statement.cs: Removed usage of IsAssignableFrom.
1563
1564 2009-02-10  Marek Safar  <marek.safar@gmail.com>
1565
1566         * *.cs: Replace null-type with NullLiteral where appropriate.
1567
1568 2009-02-09  Marek Safar  <marek.safar@gmail.com>
1569
1570         * expression.cs: Initializer of reference argument use temporary
1571         variable to be verifiable.
1572         
1573         * parameter.cs: Share EmitLdArg.
1574
1575 2009-02-09  Marek Safar  <marek.safar@gmail.com>
1576
1577         A fix for bug #473559
1578         * class.cs: Fixed: Not reporting error about nested class with the
1579         same name.
1580
1581 2009-02-06  Scott Peterson  <lunchtimemama@gmail.com>
1582
1583         Contributed under the MIT/X11 license.
1584
1585         * generic.cs: Added VerifyVariantTypeParameters which performs new
1586         variance verification logic. The old logic, based on the spec, was
1587         wrong because the spec is full of LIES!
1588
1589         * generic-mcs.cs: Stubbed out the VerifyVariantTypeParameters method.
1590
1591         *typemanager.cs: Moved variance verification logic to GenericTypeExpr.
1592
1593         * class.cs:
1594         * ecore.cs: Added calls to the new variance verification logic.
1595
1596         * parameter.cs:
1597         * delegate.cs: Removed calls to the old variance verification logic.
1598
1599 2009-02-06  Marek Safar  <marek.safar@gmail.com>
1600
1601         * delegate.cs: Use cached Invoke method directly.
1602
1603 2009-02-06  Marek Safar  <marek.safar@gmail.com>
1604
1605         * expression.cs: Emit expression tree for hoisted variable access.
1606
1607 2009-02-04  Marek Safar  <marek.safar@gmail.com>
1608
1609         * namespace.cs: Add better extension class check.
1610
1611 2009-02-05  Scott Peterson  <lunchtimemama@gmail.com>
1612
1613         * generic.cs: Fixed typeo (TypeParameter.Variacne).
1614
1615 2009-02-04  Scott Peterson  <lunchtimemama@gmail.com>
1616
1617         This patch adds initial generic variance support to the compiler.
1618         It is contributed under the MIT/X11 license.
1619
1620         * typemanager.cs: Modified ImplementsInterface to check variance.
1621         Added VerifyVariantTypeParameters which checks the specified type to see
1622         if it uses a variant type parameter as a type argument (which is not
1623         allowed). Added IsVariantOf which determins if the first type is a
1624         variant of the second. NOTE: This only supports reference types at
1625         the moment to conform with the current level of VM support. When the
1626         VM supports value types, this will follow step.
1627
1628         * generic.cs: Added the Variance enum. Added a Variance property to
1629         TypeParameter and added variance support to definition phase. Added a
1630         Variance property to TypeParameterName. Also check to make sure that
1631         no variant types appear in generic method parameters.
1632
1633         * cs-tokenizer.cs: Modified parse_less_than to tokenize the variance
1634         keywords if the langversion supports it.
1635
1636         * parameter.cs: Added Parameter.VerifyNoVariantTypeParameters to ensure
1637         that variant types are only used in legal positions. Also added
1638         ParametersCompiled.VerifyNoVariantTypeParameters to check all of its
1639         parameters.
1640
1641         * decl.cs: Construct TypeParameter with the variance information.
1642
1643         * convert.cs: Checks variance in ImplicitReferenceConversionExists
1644         and ImplicitConversionStandard.
1645
1646         * rootcontext.cs: Added new "Future" language version.
1647
1648         * class.cs: In TypeContainer.DoDefineMembers, ensure that contravariant
1649         type parameters are not used as type arguments in interface inheritance.
1650         In MemberBase.DoMemberDependentChecks, ensure that contravariant type
1651         parameters are not used as method return types. In MemberBase.
1652         ResolveMemberType, ensure that variant type parameters are not used
1653         as type arguments. Also call VerifyNoVariantTypeParameters on every
1654         set of parameters which are resolved.
1655
1656         * delegate.cs: Modified Delegate.Define to ensure that variant
1657         parameters are not used as type arguments and that a contravariant
1658         parameter is not used as the return type. Also call
1659         VerifyNoVariantTypeParameters on the delegate parameters.
1660
1661         * cs-parser.jay: Modified grammar to support "in" and "out" keywords
1662         to specify generic variance.
1663
1664         * driver.cs: Added support for LanguageVersion.Future in the form of
1665         "-langversion:future".
1666
1667         * generic-mcs.cs: Stubbed out new members in generic.cs.
1668
1669 2009-02-03  Marek Safar  <marek.safar@gmail.com>
1670
1671         * class.cs, generic.cs: Emit type parameter constraints for nested
1672         types.
1673
1674 2009-02-02  Marek Safar  <marek.safar@gmail.com>
1675
1676         A fix for bug #471213
1677         * class.cs: Avoid emitting backing field for abstract event fields.
1678
1679 2009-02-01  Marek Safar  <marek.safar@gmail.com>
1680
1681         A fix for bug #359731
1682         * cs-tokenizer.cs, cs-parser.jay: Correctly parse nested query
1683         expressions.
1684
1685 2009-01-30  Marek Safar  <marek.safar@gmail.com>
1686
1687         A fix for bug #470767
1688         * statement.cs: Introduced BlockScopeExpression, needed when 
1689         expression tree conversion has to emit scope variables.
1690
1691 2009-01-29  Marek Safar  <marek.safar@gmail.com>
1692
1693         * class.cs: Remove duplicate CallingConvention.
1694
1695 2009-01-29  Marek Safar  <marek.safar@gmail.com>
1696
1697         *.cs: Rename Parameters to ParametersCompiled and ParametersImported
1698         when I finally found the right naming convention.
1699
1700 2009-01-29  Marek Safar  <marek.safar@gmail.com>
1701
1702         * cs-tokenizer.cs: Put back different open parens optimization.
1703
1704 2009-01-28  Marek Safar  <marek.safar@gmail.com>
1705
1706         A fix for bug #470227
1707         * cs-tokenizer.cs: Remove too agressive parser optimization.
1708
1709 2009-01-28  Marek Safar  <marek.safar@gmail.com>
1710
1711         A fix for bug #324319
1712         * class.cs: Remove too early base type resolve.
1713
1714 2009-01-27  Marek Safar  <marek.safar@gmail.com>
1715
1716         A fix for bug #324319
1717         * ecore.cs: Explicitly type null when assigning to type argument to
1718         make pass verifier check.
1719
1720 2009-01-27  Marek Safar  <marek.safar@gmail.com>
1721
1722         * anonymous.cs: Fixed recent regression when initializing captured 
1723         this.
1724
1725 2009-01-26  Marek Safar  <marek.safar@gmail.com>
1726
1727         A fix for bug #469019
1728         * anonymous.cs: Use all parent type parameters when instantiating
1729         nested generic storey.
1730
1731 2009-01-26  Marek Safar  <marek.safar@gmail.com>
1732
1733         * expression.cs: Check for null instance methodgroup expression.
1734
1735 2009-01-26  Marek Safar  <marek.safar@gmail.com>
1736
1737         A fix for bug #469244
1738         * cs-tokenizer.cs, cs-parser.jay: Fixed parsing of nullable type
1739         instance inside a conditional expression.
1740
1741 2009-01-23  Marek Safar  <marek.safar@gmail.com>
1742
1743         * typemanager.cs, generic.cs, parameter.cs, decl.cs, anonymous.cs,
1744         expression.cs, report.cs, ecore.cs, attribute.cs: Use common 
1745         GetElementType and HasElementType. IsValueType clean up.
1746
1747 2009-01-23  Marek Safar  <marek.safar@gmail.com>
1748
1749         * nullable.cs: Use common EmitCall.
1750         
1751         * expression.cs: Emit constraint. for virtual calls only.
1752
1753 2009-01-23  Marek Safar  <marek.safar@gmail.com>
1754
1755         * typemanager.cs, generic.cs, eval.cs, convert.cs, const.cs, 
1756         expression.cs, statement.cs, rootcontext.cs, ecore.cs, class.cs,
1757         driver.cs, attribute.cs, enum.cs: Split IsValueType and IsStruct
1758         checks.
1759
1760 2009-01-22  Jb Evain  <jbevain@novell.com>
1761
1762         * anonymous.cs: make anonymous types' ToString implementation
1763         match what csc outputs.
1764
1765 2009-01-21  Marek Safar  <marek.safar@gmail.com>
1766
1767         * typemanager.cs, ecore.cs, iterator.cs: TypeLookupExpression clean
1768         up.
1769
1770 2009-01-17  Marek Safar  <marek.safar@gmail.com>
1771
1772         * convert.cs, ecore.cs: Explicitly casts type arguments to pass
1773         verifier checks.
1774
1775 2009-01-16  Marek Safar  <marek.safar@gmail.com>
1776
1777         * nullable.cs (LiftedBinaryOperator): Check for all possible null
1778         expressions.
1779
1780 2009-01-15  Marek Safar  <marek.safar@gmail.com>
1781
1782         A fix for bug #466634
1783         * statement.cs: Add reference for nested storey when only this
1784         is captured.
1785
1786 2009-01-15  Marek Safar  <marek.safar@gmail.com>
1787
1788         A fix for bug #466474
1789         * codegen.cs: Emit SecurityPermissionAttribute when -unsafe option
1790         was specified.
1791
1792 2009-01-15  Marek Safar  <marek.safar@gmail.com>
1793
1794         * iterators.cs, anonymous.cs, expression.cs, statement.cs, ecore.cs:
1795         Fixed nested stories parent referencing process. Also fixes #463985.
1796
1797 2009-01-06  Marek Safar  <marek.safar@gmail.com>
1798
1799         * decl.cs, iterators.cs, expression.cs, statement.cs, doc.cs, 
1800         class.cs, cs-parser.jay, codegen.cs: Clean up destructor
1801         implementation. Also fixes #463108.
1802
1803 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1804
1805         A fix for bug #416109
1806         * decl.cs: Issue correct CLSAttribute warning location.
1807
1808 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1809
1810         A fix for bug #456775
1811         * attribute.cs: Use attribute owner scope when resolving attribute
1812         arguments.
1813
1814 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1815
1816         A fix for bug #457257
1817         * decl.cs: Fixed incorrect member declaring type comparison.
1818
1819 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1820
1821         A fix for bug #460896
1822         * driver.cs: Handle /RES resources as embeddable.
1823
1824 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1825
1826         A fix for bug #462515
1827         * ecore.cs: Report inacessible members upwards.
1828
1829 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1830
1831         A fix for bug #463190, #463192
1832         * decl.cs, namespace.cs: Also import internal extension classes.
1833
1834 2009-01-04  Marek Safar  <marek.safar@gmail.com>
1835
1836         A fix for bug #463415
1837         * generic.cs: Use right index for RemoveDependentTypes.
1838
1839 2009-01-02  Marek Safar  <marek.safar@gmail.com>
1840
1841         A fix for bug #463196
1842         * expression.cs: Fixed enum to null comparison.
1843
1844 2009-01-02  Marek Safar  <marek.safar@gmail.com>
1845
1846         A fix for bug #463121
1847         * nullable.cs: Fixed nullable user equality operator comparison.
1848
1849 2009-01-02  Marek Safar  <marek.safar@gmail.com>
1850
1851         A fix for bug #462950
1852         * class.cs, decl.cs: Use full explicit name when defining automatic
1853         property backing field.
1854
1855 2009-01-02  Marek Safar  <marek.safar@gmail.com>
1856
1857         A fix for bug #462592
1858         * pending.cs: Emit type arguments for generic proxy method.
1859
1860 2008-12-30  Marek Safar  <marek.safar@gmail.com>
1861
1862         * expression.cs (As): Mutate all type arguments.
1863
1864 2008-12-29  Marek Safar  <marek.safar@gmail.com>
1865
1866         A fix for bug #462622
1867         * anonymous.cs: Resolve anonymous type GetHashCode in unchecked
1868         context.
1869
1870 2008-12-29  Marek Safar  <marek.safar@gmail.com>
1871
1872         A fix for bug #450782
1873         * ecore.cs: Consider more variables of form V.I to be fixed.
1874
1875 2008-12-29  Marek Safar  <marek.safar@gmail.com>
1876
1877         A fix for bug #460712
1878         * typemanager.cs: Core types could be imported.
1879
1880 2008-12-28  Marek Safar  <marek.safar@gmail.com>
1881
1882         A fix for bugs #460847, #460772, #458049, #457339, #447807
1883         * generic.cs, parameter.cs, lambda.cs, linq.cs, anonymous.cs
1884         statement.cs, ecore.cs, class.cs, delegate.cs, flowanalysis.cs
1885         cs-parser.jay, driver.cs: LINQ implementation upgrade to deal with
1886         user lambdas used inside query clauses.
1887
1888 2008-12-18  Marek Safar  <marek.safar@gmail.com>
1889
1890         A fix for bug #460229
1891         * cs-tokenizer.cs: Ignore wrongly placed BOM markers.
1892
1893 2008-12-18  Marek Safar  <marek.safar@gmail.com>
1894
1895         A fix for bug #459952
1896         * decl.cs, namespace.cs: Use common CheckAccessLevel.
1897
1898 2008-12-18  Marek Safar  <marek.safar@gmail.com>
1899
1900         A fix for bug #459630
1901         * convert.cs: Enum to valuetype conversion is not allowed.
1902
1903 2008-12-18  Marek Safar  <marek.safar@gmail.com>
1904
1905         A fix for bug #457087
1906         * generic.cs: Don't crash when constraint comes from type
1907         declaration.
1908
1909 2008-12-16  Marek Safar  <marek.safar@gmail.com>
1910
1911         A fix for bug #459221
1912         * anonymous.cs, statement.cs: Delay only captured this
1913         initialization.
1914
1915 2008-12-12  Marek Safar  <marek.safar@gmail.com>
1916
1917         A fix for bug #457489
1918         * anonymous.cs, statement.cs: Split anonymous storey instantiation
1919         and initialization to capture scope initializers correctly.
1920
1921 2008-12-11  Marek Safar  <marek.safar@gmail.com>
1922
1923         * generic.cs, parameter.cs, expression.cs, statement.cs, doc.cs:
1924         ParameterReference refactoring.
1925
1926 2008-12-03  Marek Safar  <marek.safar@gmail.com>
1927
1928         * typemanager.cs, namespace.cs, driver.cs: Allow ExtensionAttribute
1929         to be imported from any assembly.
1930
1931 2008-12-03  Marek Safar  <marek.safar@gmail.com>
1932
1933         * parameter.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs
1934         statement.cs, class.cs, cs-parser.jay: Removed duplicate parameters
1935         from anonymous method and lambda expression.
1936
1937 2008-12-01  Marek Safar  <marek.safar@gmail.com>
1938
1939         A fix for bug #448560
1940         * expression.cs (As): Box any generic type arguments to be
1941         verifiable.
1942
1943 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
1944
1945         Add tripwire for implicit conversion bugs
1946         * ecore.cs (MethodGroupExpr.Error_ArgumentCountWrong): New helper
1947         for CS1501 error.
1948         (MethodGroupExpr.OverloadResolve): Add sanity check between
1949         IsApplicable and VerifyArgumentsCompat.
1950         (VerifyArgumentsCompat): Report CS1501 where appropriate.
1951
1952 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
1953
1954         Fix build break in System.Data_test
1955         * convert.cs (ImplicitConversionExists): Move NullLiteral
1956         conversions ...
1957         (ImplicitStandardConversionExists): ... here.
1958
1959 2008-11-28  Marek Safar  <marek.safar@gmail.com>
1960
1961         * literal.cs: Emit correctly explicit null to nullable cast.
1962
1963 2008-11-28  Marek Safar  <marek.safar@gmail.com>
1964
1965         * ecore.cs, generics.cs: Fixed crash when type arguments fail to
1966         resolve.
1967
1968 2008-11-28  Marek Safar  <marek.safar@gmail.com>
1969
1970         A fix for bug #449005
1971         * convert.cs, nullable.cs: Use only one implicit nullable
1972         conversion.
1973
1974 2008-11-27  Marek Safar  <marek.safar@gmail.com>
1975
1976         * convert.cs, literal.cs: More Convert cleanup is needed.
1977
1978 2008-11-27  Marek Safar  <marek.safar@gmail.com>
1979
1980         * decl.cs, class.cs: Fixed misleading error message.
1981
1982 2008-11-26  Marek Safar  <marek.safar@gmail.com>
1983
1984         A fix for bug #449005
1985         * nullable.cs (EmitEquality): Disable optimization for user operator
1986         operands.
1987
1988 2008-11-25  Marek Safar  <marek.safar@gmail.com>
1989
1990         A fix for bug #447027
1991         * anonymous.cs (HoistedVariable): Cache also outer access to deal
1992         with context variables stored as expression instances.
1993
1994 2008-11-25  Marek Safar  <marek.safar@gmail.com>
1995
1996         A fix for bug #447027
1997         * delegate.cs: Fixed delegate VerifyMethod logic.
1998
1999 2008-11-24  Marek Safar  <marek.safar@gmail.com>
2000
2001         * ecore.cs, delegate.cs: MethodGroup expressions can be applicable
2002         but not verifiable.
2003
2004 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2005
2006         * typemanager.cs, decl.cs, anonymous.cs, class.cs, enum.cs: Rewrote
2007         member type resolve to follow normal flow, instead of random
2008         property access.
2009
2010 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2011
2012         * iterators.cs (GetEnumeratorStatement): Re-use already resolved
2013         type.
2014
2015 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2016
2017         * const.cs: Emit decimal array constant as literal.
2018
2019 2008-11-20  Marek Safar  <marek.safar@gmail.com>
2020
2021         * iterators.cs, ecore.cs: Removed CurrentBlock statement.
2022
2023 2008-11-19  Marek Safar  <marek.safar@gmail.com>
2024
2025         * eval.cs, location.cs, driver.cs (Location.SourceFiles): Turned
2026         into real property (saves 8 MB for corlib compilation).
2027
2028 2008-11-19  Marek Safar  <marek.safar@gmail.com>
2029
2030         * generic.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs,
2031         nullable.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay
2032         generic-mcs.cs: Small cleanup of TypeArguments.
2033
2034 2008-11-18  Marek Safar  <marek.safar@gmail.com>
2035
2036         * generic.cs, iterators.cs, anonymous.cs, nullable.cs, ecore.cs,
2037         expression.cs, namespace.cs, generic-mcs.cs, class.cs: Small cleanup
2038         of ConstructedType expression, renamed to GenericTypeExpr.
2039
2040 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2041
2042         A fix for bug #445303
2043         * location.cs (IsConditionalDefined): Handle undefined global
2044         defines.
2045
2046 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2047
2048         A fix for bug #444678
2049         * expression.cs (TryReduceConstant): Always create new constant
2050         instance.
2051
2052 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2053
2054         A fix for bug #444673
2055         * ecore.cs: Ignore open generic types when used as generic type
2056         instance fields.
2057
2058 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2059
2060         A fix for bug #445458
2061         * expression.cs, cs-parser.jay: Don't crash when an expression
2062         statement is null.
2063
2064 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2065
2066         A fix for bug #445464
2067         * expression.cs, cs-parser.jay: Fixed typeof of non-generic type
2068         inside unbound type.
2069
2070 2008-11-14  Jb Evain  <jbevain@novell.com>
2071
2072         * driver.cs: ignore empty -nowarn argument such as
2073         the one in -nowarn:12,13,,.
2074
2075 2008-11-13  Marek Safar  <marek.safar@gmail.com>
2076
2077         A fix for bug #444271
2078         * anonymous.cs: Rescan parent storeys when best candidate was
2079         undone.
2080
2081 2008-11-13  Marek Safar  <marek.safar@gmail.com>
2082
2083         * generic.cs, expression.cs, ecore.cs, cs-parser.jay: Removed
2084         useless UnboundTypeExpression.
2085         
2086         * attribute.cs: Do check obsolete attribute on generic types.
2087
2088 2008-11-12  Marek Safar  <marek.safar@gmail.com>
2089
2090         A fix for bugs #425680, #400139
2091         * ecore.cs, expression.cs: Trying to do some almost_matched_members
2092         refactoring.
2093
2094 2008-11-11  Marek Safar  <marek.safar@gmail.com>
2095
2096         A fix for bug #435747
2097         * assign.cs, expression.cs: Cleanup New assignment to emit correcly
2098         compound value types assignment. Few micro optimizations added.
2099
2100 2008-11-10  Marek Safar  <marek.safar@gmail.com>
2101
2102         A fix for bug #442610
2103         * anonymous.cs (MutateConstructor): More SRE hacking.
2104
2105 2008-11-10  Marek Safar  <marek.safar@gmail.com>
2106
2107         A fix for bug #442579
2108         * ecore.cs: Also initialize expanded form of a method with 1 params
2109         parameter.
2110
2111 2008-11-06  Marek Safar  <marek.safar@gmail.com>
2112
2113         * expression.cs (UnaryMutator): Do early l-side check.
2114
2115 2008-11-05  Miguel de Icaza  <miguel@novell.com>
2116
2117         * codegen.cs (InitDynamic): also setup Assembly.Name like we do in
2118         Init, otherwise we would crash later on when checking for friend
2119         assemblies. 
2120
2121         * eval.cs: Do not hide errors from invalid calls to LoadAssembly.
2122         Otherwise we never get any meaningful information as to what
2123         failed. 
2124
2125 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2126
2127         A fix for bug #436318
2128         * driver.cs, report.cs: Add -warnaserror:Wn to command line options.
2129
2130 2008-11-05  Miguel de Icaza  <miguel@novell.com>
2131
2132         * namespace.cs: Turns out that it was a really bad idea to hide
2133         the errors for namespaces not found here in eval mode.    
2134
2135         * eval.cs: When we process using clauses, only enter those into
2136         the list of valid using clauses after they have been validated.   
2137
2138         The above change gives the proper semantics: it does not
2139         senselessly report the same errors with broken using statements by
2140         never storing them in the first place when they are invalid.
2141
2142 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2143
2144         A fix for bug #421839
2145         * cs-parser.jay: Remove expression from coalesce rule to force lower
2146         priority than the assignment operator.
2147
2148 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2149
2150         A fix for bug #437875
2151         * nullable.cs: Compile correctly method group operand used with null
2152         coalescing operator.
2153
2154 2008-11-04  Marek Safar  <marek.safar@gmail.com>
2155
2156         A fix for bug #434589
2157         * expression.cs (Binary): Ignore lifted conversions when at least
2158         one operand is of reference type.
2159
2160 2008-11-04  Marek Safar  <marek.safar@gmail.com>
2161
2162         * cs-parser.jay: Better syntax error report.
2163
2164 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2165
2166         A fix for bug #436792
2167         * cs-parser.jay: Use GetLocation to access location.
2168
2169 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2170
2171         A fix for bug #440774
2172         * cs-parser.jay: Also set current_array_type when parsing local
2173         variables types.
2174
2175 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2176
2177         A fix for bug #440785
2178         * expression.cs (As): Don't resolve self modifing expression
2179         multiple times.
2180
2181 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2182
2183         A fix for bug #439447
2184         * cs-tokenizer.cs: Tokenize surrogates only where allowed.
2185
2186 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2187
2188         A fix for bug #437571
2189         * cs-parser.jay: Fixes internal error for invalid expression
2190         statements.
2191
2192 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2193
2194         * ecore.cs: Resolve correctly ambiguous params delegate methods.
2195
2196 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2197
2198         * generic.cs, anonymous.cs: Simplified GetDeclarations.
2199
2200 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2201
2202         * cs-tokenizer.cs: More precise cast parsing.
2203
2204 2008-10-16  Martin Baulig  <martin@ximian.com>
2205
2206         * anonymous.cs (AnonymousMethodStorey): Put back the
2207         `hoisted_locals' hashtable and use it in EmitType().
2208
2209 2008-10-15  Marek Safar  <marek.safar@gmail.com>
2210
2211         * cs-tokenizer.cs, nullable.cs, expression.cs, statement.cs,
2212         cs-parser.jay: Tokenizer optimizations and memory reduction, saves
2213         ~5MB for corlib.
2214
2215 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2216
2217         * cs-tokenizer.cs: Add bool type to the list of valid cast tokens.
2218
2219 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2220
2221         * statement.cs: Mutate scope initializers.
2222
2223 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2224
2225         * expression.cs: Use typeless value for This constant.
2226         
2227         * ecore.cs: Access FieldInfo via GetConstructedFieldInfo.
2228
2229 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2230
2231         * cs-tokenizer.cs, cs-parser.jay: Unify context sensite keyword
2232         tokenizer.
2233
2234 2008-10-13  Marek Safar  <marek.safar@gmail.com>
2235
2236         * cs-tokenizer.cs: Add missing alias qualifier and dotted generic
2237         type to type cast.
2238
2239 2008-10-13  Marek Safar  <marek.safar@gmail.com>
2240
2241         * cs-tokenizer.cs, expression.cs, cs-parser.jay: Reworked parens
2242         parser and tokenizer. Fixes many ambiguities including #433258.
2243
2244 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2245
2246         * cs-parser.jay: Fixed missing accessor recovery.
2247
2248 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2249
2250         A fix for bug #433701
2251         * expression.cs: Better error message.
2252
2253 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2254
2255         * cs-parser.jay, expression.cs: Start reporting real parser errors.
2256         
2257         * Makefile: Disabled unused debug symbols.
2258
2259         Also fixes: #320556, #321097, #321656, #321876, #351316
2260
2261 2008-10-09  Miguel de Icaza  <miguel@novell.com>
2262
2263         * eval.cs: rename "<interactive>" to "{interactive}", to work
2264         around a requirement in the compiler that this be a valid
2265         filename, and in Windows it is not (433886).
2266
2267 2008-10-09  Marek Safar  <marek.safar@gmail.com>
2268
2269         * cs-tokenizer.cs, cs-parser.jay: Fixed more subtle parser problems
2270
2271 2008-10-08  Marek Safar  <marek.safar@gmail.com>
2272
2273         * cs-tokenizer.cs, eval.cs, anonymous.cs, statement.cs, class.cs
2274         cs-parser.jay: Generic type declaration and type arguments cleanup.
2275
2276 2008-10-05  Marek Safar  <marek.safar@gmail.com>
2277
2278         * cs-parser.jay: Allow parsing weird array creation construct.
2279
2280 2008-10-05  Marek Safar  <marek.safar@gmail.com>
2281
2282         * cs-parser.jay: Conflicts reduction.
2283
2284 2008-10-04  Marek Safar  <marek.safar@gmail.com>
2285
2286         * cs-parser.jay: Conflicts reduction.
2287
2288 2008-10-04  Raja R Harinath  <harinath@hurrynot.org>
2289
2290         Fix #398325
2291         * flowanalysis.cs (MyBitvector.MakeShared): Rename from 'Shared'
2292         property.  Add a 'count' hint about the use of the shared vector.
2293         Ensure that we don't leak out dirty bits.
2294         (UsageVector.MergeChild): Throw away information about variables
2295         in child vectors.
2296         Based on patch and analysis by Moritz Kroll <Moritz.Kroll@gmx.de>.
2297
2298 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2299
2300         A fix for bug #431746
2301         * iterators.cs, anonymous.cs: Re-initialize hoisted iterator
2302         parameters when iterator is created.
2303
2304 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2305
2306         A fix for bug #431827
2307         * expression.cs: Fixed right based pointer arithmetic operations
2308         emit.
2309
2310 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2311
2312         A fix for bug #353779
2313         * assign.cs, expression.cs: Fixed compound assignment conversions.
2314
2315 2008-10-02  Marek Safar  <marek.safar@gmail.com>
2316
2317         A fix for bug #375262
2318         * statement.cs: Refactor ArrayForeach to be usable with string
2319         indexer. Optimized single dimentional arrays foreach.
2320
2321 2008-10-02  Marek Safar  <marek.safar@gmail.com>
2322
2323         A fix for bug #431255
2324         * anonymous.cs, expression.cs: Removed broken optimization.
2325
2326 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2327
2328         * anonymous.cs: Use full type parameters of parent generic
2329         containers. Removed unnecessary AddParentStoreyReference call.
2330
2331 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2332
2333         A fix for bug #324702
2334         * class.cs: Use better shorter names for explicit interface member
2335         implementations.
2336
2337         * ecore.cs, typemanager.cs: Convert only mscorlib predefined names.
2338
2339 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2340         
2341         * expression.cs: Use new interface to check fixed expression.
2342
2343 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2344
2345         A fix for bug #421101
2346         * expression.cs, statement.cs, ecore.cs: Use IFixedExpression
2347         interface to check for fixed fixed-buffers.
2348
2349 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2350
2351         A fix for bug #429264
2352         * assign.cs, anonymous.cs, ecore.cs: More type mutators added.
2353         
2354         * delegate.cs: Removed unnecessary casts.
2355
2356 2008-09-30  Marek Safar  <marek.safar@gmail.com>
2357
2358         A fix for bug #352151
2359         * decl.cs, iterators.cs, anonymous.cs, report.cs, namespace.cs,
2360         class.cs: Fixed already defined explicit interface members check.
2361
2362 2008-09-29  Rodrigo Kumpera  <rkumpera@novell.com>
2363
2364         cs-tokenizer.cs: Fix typo.
2365
2366 2008-09-28  Miguel de Icaza  <miguel@novell.com>
2367
2368         * eval.cs (InteractiveBase): The quit command now just sets a
2369         flag, instead of calling Environment.Exit(), it is milder on
2370         embedded hosts. 
2371
2372         CompiledMethod is now in Mono.CSharp, not nested inside
2373         the Evaluator, it was inconvenient to use.
2374
2375 2008-09-27  Miguel de Icaza  <miguel@novell.com>
2376
2377         * eval.cs (Evaluator): Introduce Compile method, to allow compiled
2378         code to be invoked without having to reparse.
2379
2380 2008-09-27  Miguel de Icaza  <miguel@novell.com>
2381
2382         * ecore.cs: The recent changes to FieldExpr broke this as well.
2383         Fixes LINQ queries in the interactive shell.
2384
2385         * Multiple files: indentation fixing for the Mono coding
2386         guidelines for the switch statement.
2387
2388         * eval.cs: Make the Evaluator API thread safe.
2389
2390 2008-09-26  Marek Safar  <marek.safar@gmail.com>
2391
2392         * anonymous.cs, statement.cs, class.cs, cs-parser.jay: Simplified
2393         constructor parsing.
2394
2395 2008-09-26  Marek Safar  <marek.safar@gmail.com>
2396
2397         A fix for bug #325326
2398         * statement.cs: Check possible mistaken empty statement using
2399         explicit blocks only.
2400
2401 2008-09-25  Miguel de Icaza  <miguel@novell.com>
2402
2403         * eval.cs (LoadAssembly, ReferenceAssembly): Call
2404         RootNamespace.ComputeNamespaces to update the internal list of
2405         namespaces, this is no longer done for us.
2406
2407         (InteractiveBase): Use the Evaluator APIs instead of calling into
2408         Driver directly
2409
2410 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2411
2412         A fix for bug #429264
2413         * expression.cs: Missing mutator for access to multidimensional
2414         arrays.
2415
2416 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2417
2418         * class.cs, statement: Emit DebuggerHidden attribute for iterator
2419         entry wrapper.
2420         
2421         * driver.cs: Missing input argument check.
2422
2423 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2424
2425         * typemanager.cs, generic.cs, eval.cs, decl.cs, anonymous.cs,
2426         expression.cs, statement.cs, rootcontext.cs, class.cs, 
2427         cs-parser.jay, driver.cs, generic-mcs.cs, enum.cs: Removed obsolete
2428         DefineMembers.
2429
2430 2008-09-24  Miguel de Icaza  <miguel@novell.com>
2431
2432         * ecore.cs (FieldExpr): Only initialize eclass when we return a
2433         fully constructed FieldExpr, fixes the regression introduced in
2434         the last commit.
2435         
2436         * ecore.cs, expression.cs: Plug back the eclass initialization as
2437         otherwise it regresses `csharp'. 
2438
2439 2008-09-24  Marek Safar  <marek.safar@gmail.com>
2440
2441         * typemanager.cs, decl.cs, convert.cs, assign.cs, expression.cs,
2442         ecore.cs, attribute.cs: Moved obsolete method checks from emit
2443         phase to resolve phase. It resolves problems with expression trees
2444         and fixes bugs #323796, #325156.
2445
2446 2008-09-23  Marek Safar  <marek.safar@gmail.com>
2447
2448         * codegen.cs: Report better error when symbol writer is missing.
2449
2450 2008-09-23  Marek Safar  <marek.safar@gmail.com>
2451
2452         * codegen.cs: Set .NET symbol writer.
2453         
2454         * decl.cs: Guard against null generic arguments.
2455         
2456         * report.cs: Don't report exactly same additional details.
2457
2458 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2459
2460         A fix for bug #324917
2461         * cs-parser.jay: Add missing multidimensional non-expression type
2462         ranks.
2463         
2464 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2465
2466         A fix for bug #428191
2467         * anonymous.cs: Create an outer generic fields also for non-storey
2468         anonymous methods.
2469
2470 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2471
2472         A fix for bug #378294
2473         * class.cs: Make fixed size buffers gmcs feature only.
2474
2475 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2476
2477         A fix for bug #355622, #324993
2478         * assign.cs, const.cs, class.cs: Create new EmitContext for each
2479         field initializer.
2480
2481 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2482
2483         * nullable.cs, expression.cs, namespace.cs, delegate.cs: Duplicate
2484         error reporting.
2485
2486 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2487
2488         A fix for bug #416110
2489         * generic.cs: Struct constraint results in default ctor and
2490         ValueType base type constraint to be set.
2491
2492 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2493
2494         A fix for bug #423791
2495         * generic.cs: Fixed params output type type-inference.
2496
2497 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2498
2499         * cs-parser.jay, expression.cs: Fixed few expression crashes.
2500         
2501 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2502
2503         * cs-tokenizer.cs: Don't break on extra partial modifier.
2504
2505 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2506
2507         A fix for bug #427592
2508         * generic.cs: Use common parameter resolve method.
2509
2510 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2511
2512         A fix for bug #414758
2513         * expression.cs, ecore.cs: Fixed crash when accessing non-static
2514         property.
2515
2516 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2517
2518         * driver.cs, namespace.cs: Read types and namespaces after all
2519         requested assemblies are loaded, fixes issues with System.Core
2520         auto-reference, and #419888.
2521
2522 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2523
2524         A fix for bug #417705
2525         * cs-parser.jay: Fixed as/is operator expression split.
2526
2527 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2528
2529         * const.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay:
2530         Fixed expression tree representation of empty new expression and
2531         new initializer expression.
2532
2533 2008-09-18  Miguel de Icaza  <miguel@novell.com>
2534
2535         * eval.cs: Remove warning, keep reference to driver around.
2536
2537         * Hide fields that do not need to be public.
2538
2539 2008-09-17  Marek Safar  <marek.safar@gmail.com>
2540
2541         A fix for bug #426385
2542         * expression.cs (ImplicitlyTypedArrayCreation): Use full implicit
2543         conversion for array elements.
2544
2545 2008-09-17  Marek Safar  <marek.safar@gmail.com>
2546
2547         * expression.cs, statement.cs, class.cs, cs-parser.jay: Fixed
2548         void parsing conflicts.
2549
2550 2008-09-15  Marek Safar  <marek.safar@gmail.com>
2551
2552         A fix for bug #425601
2553         * driver.cs, typemanager.cs, namespace.cs: Automatically reference
2554         System.Core only when there is no custom ExtensionAttribute
2555         implementation.
2556
2557 2008-09-15  Miguel de Icaza  <miguel@novell.com>
2558
2559         * namespace.cs: Do not report CS0246 (name
2560
2561 2008-09-12  Marek Safar  <marek.safar@gmail.com>
2562
2563         A fix for bug #425669
2564         * generic.cs: Don't cache generic static anonymous method 
2565         containers.
2566
2567 2008-09-12  Marek Safar  <marek.safar@gmail.com>
2568
2569         * generic.cs, class.cs, delegate.cs: Check recursive inherited
2570         conflicting constraints.
2571
2572 2008-09-12  Raja R Harinath  <harinath@hurrynot.org>
2573
2574         * cs-tokenizer.cs (consume_identifier): Allow partial methods in
2575         mcs too.
2576
2577 2008-09-12  Marek Safar  <marek.safar@gmail.com>
2578
2579         * literal.cs, convert.cs, expression.cs, statement.cs: More null
2580         to null pointer conversion fixes.
2581
2582 2008-09-11  Marek Safar  <marek.safar@gmail.com>
2583
2584         * cs-parser.jay, expression.cs: An implicitly typed local variable
2585         declarator cannot use an array initializer.
2586
2587 2008-09-11  Marek Safar  <marek.safar@gmail.com>
2588
2589         * cs-parser.jay: Reduced number of printed tokens, add sorting.
2590
2591 2008-09-11  Marek Safar  <marek.safar@gmail.com>
2592
2593         * generic.cs (InflatedConstraints): Don't crash when constraints
2594         are different.
2595         
2596         * cs-parser.jay: const_declarator is a block.
2597
2598         * constant.cs: Check for not allowed NaN conversions.
2599
2600 2008-09-10  Miguel de Icaza  <miguel@novell.com>
2601
2602         * driver.cs: Drop --shell argument, the compiler is no longer a
2603         REPL. 
2604
2605         * eval.cs: Move most of the code that deals with evaluation into
2606         this file and document the public API from repl.cs
2607
2608         * repl.cs: Remove from here.
2609         
2610 2008-09-10  Marek Safar  <marek.safar@gmail.com>
2611
2612         A fix for bug #424684
2613         * generic.cs: Generic class constraints must come first.
2614
2615 2008-09-09  Miguel de Icaza  <miguel@novell.com>
2616
2617         * cs-parser.jay: Improve error reporting for syntax errors in
2618         statements and expressions, we now report the expected tokens
2619         instead of reporting the useless "; expected".
2620
2621         Drop the strings from the token declaration, it turns out that
2622         they did not do what I thought they did.  Instead they were adding
2623         two sets of tokens to the tables.
2624
2625 2008-09-09  Marek Safar  <marek.safar@gmail.com>
2626
2627         * typemanager.cs, generic.cs, parameter.cs, expression.cs, class.cs,
2628         delegate.cs: Share special type check.
2629
2630 2008-09-09  Marek Safar  <marek.safar@gmail.com>
2631
2632         A fix for bug #423981
2633         * expression.cs (EmitBranchable): Correctly emit inverted float conditions.
2634
2635 2008-09-09  Marek Safar  <marek.safar@gmail.com>
2636
2637         * ecore.cs (ReducedConstantExpression): Implemented ConvertExplicitly and
2638         ConvertImplicitly.
2639
2640 2008-09-09  Marek Safar  <marek.safar@gmail.com>
2641
2642         A fix for bugs: #324750, #335946
2643         * cs-tokenizer.cs, cs-parser.jay, expression.cs: Use a custom 
2644         lookup rule to determine ?-based tokens.
2645
2646 2008-09-08  Miguel de Icaza  <miguel@novell.com>
2647
2648         * repl.cs (OptionalAssign.EmitStatement): It is possible that some
2649         expressions (like event adding or removing) end up here, so we
2650         need to treat those as statements.
2651
2652         Add LoadAssembly method.
2653
2654 2008-09-04  Miguel de Icaza  <miguel@novell.com>
2655
2656         * repl.cs: Add Time method.
2657
2658 2008-09-05  Marek Safar  <marek.safar@gmail.com>
2659
2660         * cs-tokenizer.cs: Fixed swaped UTF-16 surrogates parsing.
2661
2662 2008-09-05  Miguel de Icaza  <miguel@novell.com>
2663
2664         * repl.cs: Add workaround for old compilers.
2665
2666 2008-09-04  Jb Evain  <jbevain@novell.com>
2667
2668         * repl.cs (PrettyPrint): pretty print everything that
2669         implements IDictionary, as well as IEnumerables. Also,
2670         add a quit helper property.
2671
2672 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2673
2674         * constant.cs: Better error reporting for decimal literals.
2675         
2676         * class.cs, attribute.cs, typemanager.cs: Emit more fixed buffer
2677         field attributes.
2678         
2679 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2680                         Miguel de Icaza  <miguel@novell.com>
2681
2682         A fix for bug #422951
2683         * assign.cs (Assign.DoResolve): Perform the type conversions
2684         checks before we attempt to initialize `New' initializers. 
2685
2686 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2687
2688         A fix for bug #422853
2689         * delegate.cs (DelegateCreation): Add special handling for
2690         EmptyExpression.Null instance expression which is just another
2691         hack for undecided member instance exression.
2692
2693 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2694
2695         * expression.cs, ecore.cs: Emit full expression tree for reduced
2696         binary expressions.
2697
2698 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2699
2700         * expression.cs (This): Guard against multi-resolving.
2701         
2702         * ecore.cs, statement.cs (Throw): Simplified.
2703         
2704         * flowanalysis.cs: Also verify event fields.
2705
2706 2008-09-04  Miguel de Icaza  <miguel@novell.com>
2707
2708         * assign.cs (Assign.DoResolve): Perform the type conversions
2709         checks before we attempt to initialize `New' initializers. 
2710
2711         * repl.cs (PrettyPrint): Add Hashtable prettyprint
2712
2713         * anonymous.cs (AnonymousTypeClass): On EvalMode make the class
2714         public. 
2715
2716         * repl.cs: Update help.
2717
2718 2008-09-03  Miguel de Icaza  <miguel@novell.com>
2719
2720         * driver.cs (ProcessDefaultConfig): Now it encapsulates all the
2721         handling of the default config handling, including the special
2722         treatment of System.Core assembly. 
2723
2724         Fixes the REPL processing for LINQ.
2725
2726 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2727
2728         A fix for bug #422507
2729         * expression.cs (UnboxCast): Add missing child expression mutator.
2730
2731 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2732
2733         * driver.cs: Don't self reference System.Core assembly.
2734
2735 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2736
2737         A fix for bug #422507
2738         * expression.cs (StringConcat): Add missing type mutator.
2739
2740 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2741
2742         * generic.cs (TypeInferenceContext): Follow equality rule for
2743         constructed type lower bound type inference.
2744
2745 2008-09-02  Miguel de Icaza  <miguel@novell.com>
2746
2747         * getline.cs (CmdRefresh): Apply patch from Douglas S. Blank
2748         <dblank@cs.brynmawr.edu> which updates the cursor position on
2749         refresh.
2750         
2751 2008-09-02  Marek Safar  <marek.safar@gmail.com>
2752
2753         A fix for bug #367145
2754         * driver.cs: Fixed import of extension methods when using -noconfig
2755         option.
2756
2757 2008-09-02  Marek Safar  <marek.safar@gmail.com>
2758
2759         * iterator.cs: Don't emit GetEnumerator method twice but call a generic
2760         version from non-generic implementation instead.
2761
2762 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2763
2764         A fix for bug #418908
2765         * class.cs: Use AddScopeStatement for field initializers.
2766
2767 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2768
2769         A fix for bug #415385
2770         * ecore.cs, convert.cs: Do method group conversion for equal group types.
2771
2772 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2773
2774         A fix for bug #421736
2775         * iterators.cs: Don't crash on unreachable iterators.
2776
2777 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2778
2779         A fix for bug #421628
2780         * parameter.cs, attribute.cs: Clone also parameter attributes.
2781
2782 2008-08-30  Miguel de Icaza  <miguel@novell.com>
2783
2784         * namespace.cs (LookupType): In EvalMode, try to replace
2785         the TypeBuilder from our cache with a Type as Reflection.Emit does
2786         not  like to mix code from older assemblies emitted and new
2787         assemblies emitted. 
2788
2789         This sounds like a serious Mono bug that prevents multiple
2790         assemblies to be generated and consumed at the same time.
2791
2792         * cs-parser.jay (push_current_class): Do not make interactive
2793         classes internal or private, make them public as we currently
2794         generate each new class in a new assembly.   
2795
2796 2008-08-29  Miguel de Icaza  <miguel@novell.com>
2797
2798         * decl.cs, roottypes.cs, class.cs:: Add an infrastructure to
2799         remove types that are entered into the global namespace during
2800         parsing so that we can remove them on failure.
2801  
2802         * cs-parser.jay: Parsing: we now keep track of types that are
2803         entered into global variables and queue those in case the parsing
2804         or resolution fail.
2805  
2806         This happens in a few situations: during partial-input, we invoke
2807         the parser repeatedly for example with the string "class X", this
2808         would cause X to be registed, and we need to remove this
2809         registration so that another parse attempt later with say "class X {"
2810         would actually work.
2811  
2812         Additionally, if there is an error in the resolution phase, for
2813         example: "class X : NonExistant {}" th
2814         
2815         * cs-parser.jay: Be more precise with the errors being raised,
2816         instead of flagging all exceptions during parsing to be attributed
2817         to the parsing process, distinguish those from errors happening in
2818         the actions and hint that using -v would produce the actual
2819         exception. 
2820
2821         * repl.cs: Do not load all compiler references on each reset,
2822         doing the partial reset takes care of this.
2823         
2824 2008-08-28  Miguel de Icaza  <miguel@novell.com>
2825
2826         * repl.cs: Add support for loading all the files from
2827         ~/.config/csharp/*cs as startup scripts and ~/.config/csharp/*.dll
2828         as shell libraries.
2829
2830         Introduce a micro-parser that is able to deambiguate on its input
2831         whether we are dealing with a compilation unit (namespace, class,
2832         interface, struct, delegate) declaration or a statement.   This
2833         allows both declarations and statements to be entered. 
2834
2835         Set history size by default to 300 lines.
2836
2837         Instead of distinguishing based on the parser.InteractiveResult,
2838         have only two cases: statements were parsed, or a compilation unit
2839         was.   Always pull the Using statement additions from the
2840         compilation unit parse.
2841         
2842         * cs-tokenizer.cs: Rename tokens to better describe their intent
2843         (EvalStatementParserCharacter and EvalCompilationUnitParserCharacter).
2844         
2845         * rootcontext.cs: Split EvalMode into EvalMode and StatementMode.
2846         EvalMode is used to trigger the lookup of global variables while
2847         StatementMode is used turn variable declarations into static
2848         fields.
2849
2850         * getline.cs: Allow history size to be set.
2851         
2852 2008-08-29  Marek Safar  <marek.safar@gmail.com>
2853
2854         A fix for bug #360755
2855         * ecore.cs (SimpleName): Exclude indexers from simple name resolve.
2856
2857 2008-08-29  Marek Safar  <marek.safar@gmail.com>
2858
2859         * generic.cs, iterators.cs, codegen.cs: Removed unused variable.
2860         
2861         * typemanager.cs, statement.cs, ecore.cs, enum.cs: Don't reconstruct enum
2862         member name, it is too confusing
2863         
2864         * decl.cs, class.cs: Don't report unused fields with attached attribute.
2865         
2866         * rootcontext.cs: Finally default to warning level 4.
2867
2868 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2869
2870         * class.cs (CheckBase): Ignore overloaded operators.
2871
2872 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2873
2874         A fix for bug #420830
2875         * expression.cs, cs-parser.jay: Put back InvocationOrCast expression.
2876
2877 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2878
2879         A fix for bug #420832
2880         * anonymous.cs, iterators.cs: Also clone hoisted this iterator variable.
2881
2882 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2883
2884         A fix for bug #420386
2885         * nullables.cs: Fixed logic of nullable user comparison operators involving
2886         null values.
2887
2888 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2889         
2890         * attribute (IsClsCompliant): Use FALSE value for pointer types.
2891
2892 2008-08-27  Miguel de Icaza  <miguel@novell.com>
2893
2894         * repl.cs: Add support for aborting the running code with C-c. 
2895
2896 2008-08-27  Raja R Harinath  <harinath@hurrynot.org>
2897
2898         * cs-parser.jay (CS1002): Dump 'yyToken' with Report.ExtraInformation.
2899
2900 2008-08-27  Miguel de Icaza  <miguel@novell.com>
2901
2902         * cs-parser.jay (interactive_statement_list): A new set of rules
2903         for hosting statements that uses the "interactive_" prefix.   
2904
2905         * repl.cs: Add support for parsing `using' as a statement or as a
2906         directive.  Deambiguating before passing this to the parser.
2907
2908         We need to distinguish statement_expressions that occur at the
2909         toplevel vs those that occur embedded into expressions.
2910
2911         * getline.cs: Applied patch from Stuart Carnie <stuart.carnie@gmail.com> 
2912         that fixes the cursor key handling, and a history bug.
2913         
2914 2008-08-26  Miguel de Icaza  <miguel@novell.com>
2915
2916         * Makefile: Drop BOOTSTRAP_COMPILER as that was masking the
2917         limitations in Console, instead the 2.0 bootstrap libraries now
2918         include the Console bits.
2919
2920         Also, remove the use of Nullables from getline.cs
2921
2922         ------------
2923         
2924         Interactive support for the C# compiler.   Use gmcs --shell to
2925         enter a read-eval-print loop shell.
2926
2927         Docs: http://www.mono-project.com/CsharpRepl
2928         
2929         * sources: include repl.cs here and getline.cs for gmcs.exe,
2930         everything else is getline.cs impaired.
2931
2932         * Makefile: when bootstrapping pass a special flag
2933         BOOTSTRAP_COMPILER which we use to prevent failures in compilation
2934         as we use NET_2_0 define to pull 2.0 APIs from System.Console.
2935         This distinguishes those two cases.
2936
2937         * repl.cs: Support for a read-eval-print loop.   Will be soon
2938         refactored into eval support and then REPL on top of it.
2939
2940         * ecore.cs: If a simplename lookup fails, before erroring out,
2941         if we are in EvalMode to resolve the name to a declaration in the
2942         Eval-land.    
2943
2944         This means that variable declarations that happened in previous
2945         classes (as repl puts every statement in a separate class) are
2946         made visible in this way.
2947
2948         * cs-parser.jay: UnexpectedEOF, a new flag that is set if we
2949         triggered an error due to the end of file being reached.   This is
2950         used to do multi-line input, and notify the caller that the user
2951         needs to provide more text before a successful parse.
2952
2953         Add new grammar rules after the INTERACTIVE_PARSER token is seen
2954         to drive the evaluation with a custom wrapper. 
2955
2956         * driver.cs: Add support for --shell, and refactor some code to be
2957         reused from repl.cs
2958         
2959         * namespace.cs: Add support for serializing the contents of the
2960         namespaces and reloading them.  
2961
2962         * getline.cs: A managed implementation of ReadLine under
2963         X11/Apache2 license terms.  Easy to embed in other applications as
2964         well.
2965
2966         * namespace.cs: Add some functions to save and restore the
2967         namespace state.
2968
2969         * rootcontext.cs: New public field.
2970
2971         * cs-tokenizer.cs: Add support for one of the possible characters
2972         we introduce into the token stream.  
2973
2974         This patch does not affect the regular tokenization process, the
2975         only performance hit would happen if there is an invalid character
2976         on the input string.
2977
2978         * support.cs: Move isatty helper routine here.
2979
2980         * codegen.cs: Small cleanup, and add a mechanism to initialize the
2981         code generator for in-memory assemblies.
2982
2983 2008-08-26  Marek Safar  <marek.safar@gmail.com>
2984
2985         * generic.cs, ecore.cs, delegate.cs, cs-parser.jay, expression.cs: A type
2986         parameter cannot be always used as a type.
2987
2988 2008-08-21  Marek Safar  <marek.safar@gmail.com>
2989
2990         * convert.cs, expression.cs: Use single ExplicitReferenceConversion routine.
2991
2992 2008-08-21  Marek Safar  <marek.safar@gmail.com>
2993
2994         * convert.cs: Implement explicit array to IList<T> conversion.
2995
2996 2008-08-20  Marek Safar  <marek.safar@gmail.com>
2997
2998         A fix for bug #362740
2999         * cs-tokenizer.cs: Handle UTF-16 surrogates.
3000
3001 2008-08-20  Marek Safar  <marek.safar@gmail.com>
3002         
3003         * generic.cs, support.cs, typemanager.cs, lambda.cs, parameter.cs,
3004         pending.cs, ecore.cs, linq.cs, class.cs, decl.cs, delegate.cs,
3005         flowanalysis.cs, iterators.cs, cs-parser.jay, convert.cs, anonymous.cs,
3006         expression.cs, attribute.cs, statement.cs, doc.cs: Refactored parameters
3007         handling to use just one type of infrastructure and deal with generics
3008         more effectivelly.
3009
3010 2008-07-23  Martin Baulig  <martin@ximian.com>
3011
3012         *** Merged this from trunk revision 108527 ***
3013
3014         * statement.cs
3015         (ExplicitBlock.EmitSymbolInfo): Moved to `ToplevelBlock'.
3016         (ToplevelBlock.EmitSymbolInfo): Tell the symbol writer about the
3017         scope variable.
3018
3019 2008-08-15  Marek Safar  <marek.safar@gmail.com>
3020         
3021         * ecore.cs, linq.cs, const.cs, expression.cs, statement.cs: More robust
3022         error checks.
3023
3024 2008-08-15  Marek Safar  <marek.safar@gmail.com>
3025         
3026         * delegate.cs: Fixed compiler crash when creating delegate using partial
3027         method.
3028         
3029         * typemanager.cs: MulticastDelegate is not a delegate.
3030
3031 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3032         
3033         * expression.cs, ecore.cs, anonymous.cs, class.cs: Fixed missing error
3034         checks.
3035
3036 2008-08-14  Raja R Harinath  <harinath@hurrynot.org>
3037
3038         * cs-parser.jay (type): Allow 'var' in mcs too.
3039         (local_variable_type): Likewise.
3040
3041 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3042         
3043         * driver.cs: Removed broken -noconfig variants.
3044
3045 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3046         
3047         A fix for bug #417078
3048         * expression.cs: Emit correctly left side pointer operators.
3049
3050 2008-08-13  Marek Safar  <marek.safar@gmail.com>
3051
3052         * generic.cs, lambda.cs: Inflate method generic arguments only.
3053
3054 2008-08-12  Marek Safar  <marek.safar@gmail.com>
3055
3056         * class.cs: Fixed struct layout check regression.
3057
3058 2008-08-12  Marek Safar  <marek.safar@gmail.com>
3059
3060         * cs-parser.jay, enum.cs: Simplified enum parsing.
3061         
3062         * decl.cs: Check all type parameters conflicts.
3063         
3064         * expression.cs, statement.cs, attribute.cs: More expression checks.
3065
3066 2008-08-11  Marek Safar  <marek.safar@gmail.com>
3067
3068         * generic.cs: Add type inference types restriction.
3069         
3070         * parameter.cs, class.cs, delegate.cs, iterators.cs, cs-parser.jay,
3071         anonymous.cs, expression.cs: Allocate less accessor parameters.
3072
3073 2008-08-08  Marek Safar  <marek.safar@gmail.com>
3074
3075         * typemanager.cs, ecore.cs: Ambiguous operators can come from different
3076         classes.
3077
3078 2008-08-08  Marek Safar  <marek.safar@gmail.com>
3079
3080         * convert.cs, delegate.cs: Fixed delegate compatibility conversion. 
3081
3082 2008-08-07  Marek Safar  <marek.safar@gmail.com>
3083
3084         * class.cs, decl.cs, iterator.cs, ecore.cs: Refactor base type resolving.
3085         Also fixes #362146 and #381592.
3086
3087 2008-08-07  Marek Safar  <marek.safar@gmail.com>
3088
3089         * ecore.cs: Reduced constant cannot be used as an attribute value.
3090         
3091         * cs-parser.jay: Base expression has to be a type.
3092         
3093         * expression.cs (Conditional): Uses ReducedExpression.
3094
3095 2008-08-06  Marek Safar  <marek.safar@gmail.com>
3096
3097         A fix for bug #376826
3098         * parameter.cs, ecore.cs, anonymous.cs, expression.cs, statement.cs: An
3099         address of hoisted local variable or parameter cannot be taken.
3100
3101 2008-08-05  Marek Safar  <marek.safar@gmail.com>
3102
3103         * ecore.cs, constant.cs, expression.cs, statement.cs: Resolve correctly 
3104         anonymous method inside checked/unchecked expression.
3105
3106 2008-08-05  Marek Safar  <marek.safar@gmail.com>
3107
3108         * typemanager.cs (IsEqual): Guard against null.
3109         
3110         * ecore.cs, class.cs, convert.cs, const.cs, constant.cs, expression.cs,
3111         attribute.cs, enum.cs, statement.cs: Pass EmitContext to constant conversion
3112         routine. Fixed few misleading conversion errors.
3113
3114 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3115
3116         * class.cs: Consider generics when checking cycles in struct layout.
3117
3118 2008-08-04  Raja R Harinath  <harinath@hurrynot.org>
3119
3120         * cs-tokenizer.cs (get_cmd_arg): Simplify.  Don't be too pedantic.
3121
3122 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3123
3124         A fix for bug #414165
3125         * anonymous.cs: Use same anonymous implementation method for all anonymous
3126         method emits.
3127
3128 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3129
3130         * generic.cs, anonymous.cs, statement.cs: Emit inherited anonymous method
3131         constraints.
3132
3133 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3134
3135         * cs-parser.jay: Typeof argument has to be a type expression.
3136         
3137         * namespace.cs: Check alias and namespace definitions collisions.
3138         
3139         * class.cs, pending.cs: Moved explicit interface accessor implementation
3140         check.
3141         
3142         * delegate.cs, expression.cs: Verify special name invocations.
3143         
3144 2008-08-01  Marek Safar  <marek.safar@gmail.com>
3145
3146         * cs-parser.jay: Don't choke on empty generic type arguments.
3147         
3148         * cs-tokenizer.cs: Handle escaped preprocessor directives.
3149         
3150         * expression.cs, ecore.cs: Minor expressions bugs.
3151
3152 2008-08-01  Marek Safar  <marek.safar@gmail.com>
3153
3154         * cs-parser.jay: Removed duplicate interface declaration (fixes 2 conflicts)
3155         and added more error handling.
3156         
3157         * class.cs, iterators.cs, anonymous.cs: Removed useless interface parameter.
3158         
3159         *  modifiers.cs, enum.cs: Fixed.
3160
3161 2008-07-31  Jb Evain  <jbevain@novell.com>
3162
3163         * driver.cs: remove -pkg ability of smcs.
3164
3165 2008-07-30  Marek Safar  <marek.safar@gmail.com>
3166
3167         * statement.cs (Switch): Correctly set empty default target for single
3168         blocks.
3169
3170 2008-07-30  Marek Safar  <marek.safar@gmail.com>
3171
3172         * typemanager.cs, assign.cs, driver.cs, expression.cs, statement.cs: Rewrote
3173         string switch statement implementation to use string dictionary which
3174         significantly (2-8x) improves performance of generated code.
3175
3176 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3177
3178         A fix for bug #412880 by Atsushi Enomoto <atsushi@ximian.com>
3179         * modifiers.cs (GetDescription): Fixed FamANDAssem case.
3180         
3181 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3182
3183         A fix for bug #412595
3184         * typemanager.cs, convert.cs, expression.cs: Some types are never
3185         convertible to each other.
3186
3187 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3188
3189         * nullable.cs (CreateNullConstant): An error messages update.
3190
3191 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3192
3193         A fix for bug #412595
3194         * cfold.cs: Don't cast undefined bool constant.
3195
3196 2008-07-29  Martin Baulig  <martin@ximian.com>
3197
3198         * symbolwriter.cs
3199         (SymbolWriter.Reset): New public static method.
3200
3201         * driver.cs
3202         (CompilerCallableEntryPoint.Reset): Call SymbolWriter.Reset().
3203
3204 2008-07-28  Marek Safar  <marek.safar@gmail.com>
3205
3206         * cs-tokenizer.cs (IsLambdaOpenParens): Optimized using more stop tokens.
3207         
3208         * expression.cs (ElementAccess): Exact size allocation.
3209
3210 2008-07-26  Marek Safar  <marek.safar@gmail.com>
3211
3212         * driver.cs: Replaced outdated UnixParseOption with CSCParseOption.
3213
3214 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3215
3216         * flowanalysis.cs (StructInfo): Fixed detection of dynamic types.
3217         
3218         * class.cs: Removed $PRIVATE$ field hack which caused problems during
3219         flow analysis.
3220
3221 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3222
3223         A fix for bug #412217
3224         * assign.cs: Mutate also assignment type.
3225
3226 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3227
3228         A fix for bug #323644
3229         * typemanager.cs (IsValidProperty): Verify DefaultMemberName when checking
3230         indexers.
3231
3232 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3233
3234         A fix for bug #412134
3235         * expression.cs (ResolveOperatorEnum): Do implicit conversion of
3236         non-enumerable operands when overloading equality or bitwise operators.
3237
3238 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3239
3240         * anonymous.cs: Cache closed generic anonymous method delegates.
3241
3242 2008-07-24  Marek Safar  <marek.safar@gmail.com>
3243
3244         * lambda.cs, linq.cs, class.cs, iterators.cs, cs-parser.jay, assign.cs, 
3245         anonymous.cs, statement.cs: Always emit anonymous method as static method
3246         when is instance free. Use nesting for nested anynomous methods blocks.
3247         
3248 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3249
3250         * anonymous.cs (MutateGenericMethod): Added extra code path for imported
3251         types.
3252
3253 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3254
3255         * expression.cs: Removed MakeSimpleCall.
3256
3257 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3258
3259         A fix for bug #323012
3260         * class.cs, pending.cs: Emit proxy for indexers when they differ in name.
3261         Base method implementing interface has to be public.
3262
3263 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3264
3265         * cs-parser.jay: Don't break on missing argument.
3266
3267 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3268
3269         A fix for bug #320993
3270         * report.cs, parameter.cs, class.cs, decl.cs, delegate.cs, attribute.cs,
3271           enum.cs, codegen.cs: Report CLS compliance errors as warnings.
3272
3273 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3274
3275         A fix for bug #320748
3276         * convert.cs: Implicit user operators cannot convert to interfaces
3277
3278 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3279
3280         A fix for bug #312686
3281         * driver.cs: Ignore empty assembly references.
3282
3283 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3284
3285         A fix for bug #387040
3286         * ecore.cs: Skip constrains check for an explicit implementation.
3287
3288 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3289
3290         A fix for bug #409045
3291         * cs-tokenizer.cs, rootcontext.cs, class.cs, location.cs, delegate.cs,
3292           cs-parser.jay, driver.cs, expression.cs, attribute.cs: Conditional
3293           identifiers are file specific unless passed as input arguments.
3294
3295 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3296
3297          * typemanager.cs, parameter.cs, class.cs, attribute.cs: Use an attribute
3298          to emit UnmanagedMarshal data under 2.0 profile.
3299
3300 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3301
3302         A fix for bug #410369
3303         * parameter.cs: Clone correctly ParamsParameter.
3304
3305 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3306
3307         * expression.cs (Argument): Always report type for type based expressions
3308         errors.
3309
3310 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3311
3312         A fix for bug #410666
3313         * anonymous.cs: Correctly initialize generic storey reference.
3314
3315 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3316
3317         * convert.cs: Don't box same type arguments.
3318
3319 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3320
3321         * ecore.cs, linq.cs, delegate.cs, constant.cs, nullable.cs, expression.cs:
3322         Finished missing generic type mutators.
3323
3324 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3325
3326         * iterators.cs, statement.cs: Finished statements CloneTo.
3327
3328 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3329
3330         * anonymous.cs: ExpressionTreeProxy is of Value type expression.
3331         
3332         * expression.cs: Emit optimized default value expressions in expression tree
3333         array initializer.
3334
3335 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3336
3337         * ecore.cs, cs-parser.jay, statement.cs: Error reporting fixes.
3338
3339 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3340
3341         A fix for bug #367536
3342         * cs-parser.jay: Check static constructor of generic types for an access
3343         modifier.
3344
3345 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3346
3347         A fix for bug #353800
3348         * lambda.cs: Emit ret for contextual statements.
3349         
3350         * codegen.cs: Keep both resolved and unreachable flags, otherwise we end
3351         up emitting redundant ret for all anonymous methods with return.
3352
3353 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3354
3355         A fix for bug #365188
3356         * ecore.cs, anonymous.cs, expression.cs, codegen.cs, statement.cs: Don't
3357         create anonymous method storey in unreachable block.
3358
3359 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3360
3361         * generic.cs, typemanager.cs, cs-tokenizer.cs, parameter.cs, namespace.cs,
3362         class.cs, delegate.cs, flowanalysis.cs, iterators.cs, anonymous.cs,
3363         driver.cs, nullable.cs, expression.cs, attribute.cs, codegen.cs,
3364         statement.cs: Fixed relevant defects found by Gendarme.
3365
3366 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3367
3368         A fix for bug #325291
3369         * modifiers.cs, class.cs, cs-parser.jay, anonymous.cs, codegen.cs, 
3370         statement.cs: Replaced IAnonymousHost with top level block flag.
3371
3372 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3373
3374         * cs-parser.jay: Clean up unused open_parens.
3375
3376 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3377
3378         * ecore.cs: Custom error message for a range variable assignment.
3379
3380 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3381
3382         * constant.cs, typemanager.cs: Emit empty string ("") as string.Empty field
3383         load.
3384
3385 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3386
3387         * literal.cs: Null literal is of object type.
3388
3389 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3390
3391         * nullable.cs (LiftedBinaryOperator): Always lift unwrapped nullable
3392         expression of nullable equality comparison.
3393
3394 2008-07-15  Marek Safar  <marek.safar@gmail.com>
3395
3396         * expression.cs(PointerArithmetic): Removed redundant assignment.
3397
3398 2008-07-15  Marek Safar  <marek.safar@gmail.com>
3399
3400         * decl.cs (GetSignatureForError): Report full namespace name for containers.
3401
3402 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3403
3404         A fix for bug #408361
3405         * anonymous.cs (MutateGenericMethod): Store generic type arguments before
3406         they are replaced by GetMethod.
3407
3408 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3409
3410         A fix for bug #408721 by jeremie.laval@gmail.com
3411         * expression.cs (Indirection): Implemented CloneTo.
3412
3413 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3414
3415         * statement.cs (AssignableSlots): Temporary disabled variable initialization
3416         assert check.
3417
3418 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3419
3420         * report.cs (EnableReporting): Don't reinitialize 0-based values.
3421
3422 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3423
3424         * linq.cs: Reset tranparent parameter counter in probing mode.
3425
3426 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3427
3428         * anonymous.cs: Mutate anonymous method type.
3429
3430 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3431
3432         * ecore.cs, anonymous.cs: Mutate field expressions.
3433
3434 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3435
3436         A fix for bug #369670
3437         * linq.cs, statement.cs: Use explicit block for query expressions variables.
3438
3439 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3440
3441         * report.cs, ecore.cs: Flush recorder only when silent mode is off.
3442
3443 2008-07-10  Raja R Harinath  <harinath@hurrynot.org>
3444
3445         Fix bug #314902
3446         * cs-tokenizer.cs (is_punct): If a generic lookahead is looking
3447         only one '>', and finds a '>>', abort the generic lookahead.
3448
3449 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3450
3451         A fix for bug #319902
3452         * cs-tokenizer.cs: Always look-ahed for `>='  when tokenizing `>'.
3453
3454 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3455
3456         A fix for bug #406371
3457         * statement.cs: Moved EmitSymbolInfo to Block.
3458
3459 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3460
3461         * ecore.cs: Report better error for extension method overload failures.
3462
3463 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3464
3465         * expression.cs (Is): No need to box reference values.
3466
3467 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3468
3469         * class.cs: Use event resolve context when initializing CreateEmitContext.
3470
3471 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3472
3473         A fix for bug #394436
3474         * anonymous.cs, class.cs, expression.cs, lambda.cs: Emit correctly extension
3475         method used inside expression trees. Added more LINQ to expression tree
3476         conversions.
3477
3478 2008-07-08  Marek Safar  <marek.safar@gmail.com>
3479
3480         A fix for bug #378189, #370577
3481         * lambda.cs, ecore.cs: Implemented 3.0 enhancement to better conversion
3482         from expression.
3483
3484 2008-07-08  Marek Safar  <marek.safar@gmail.com>
3485
3486         * anonymous.cs, class.cs, decl.cs: Emit CompilerGenerated attribute
3487         hierarchically.
3488
3489 2008-07-08  Marek Safar  <marek.safar@gmail.com>
3490
3491         A fix for bug #406702
3492         * anonymous.cs: Always park anonymous method in the nearest parent storey.
3493
3494 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3495
3496         A fix for bug #406648
3497         * cs-parser.jay: Report nullable use in mcs for some cases.
3498
3499 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3500
3501         * ecore.cs: Improved argument mismatch error messages.
3502
3503 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3504
3505         * anonymous.cs: Don't cache generic delegates when reference MVAR argument.
3506
3507 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3508
3509         * expression.cs (TypeOf): Mutate type argument.
3510
3511 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3512
3513         * class.cs: Report missing partial modifier for correct type.
3514
3515 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3516
3517         * ecore.cs, expression.cs (VariableReference): Variable property is 
3518         protected.
3519
3520 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3521
3522         * ecore.cs, convert.cs: Made OpcodeCast more memory efficient.
3523         
3524 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3525
3526         * anonymous.cs, class.cs, lambda.cs, iterator.cs: Cache static anonymous
3527         method delegates.
3528
3529 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3530
3531         * anonymous.cs, class.cs, expression.cs, iterator.cs, statement.cs: Reduce
3532         anonymous method storey to an instance method when only "this" is hoisted.
3533
3534 2008-07-03  Marek Safar  <marek.safar@gmail.com>
3535
3536         A fix for bug #321615
3537         * expression.cs: Pointer comparisons use unsigned operator.
3538
3539 2008-07-03  Marek Safar  <marek.safar@gmail.com>
3540
3541         * expression.cs: Fixed native pointer conversions. Also fixes #321615.
3542
3543 2008-07-02  Marek Safar  <marek.safar@gmail.com>
3544
3545         A fix for bug #404905
3546         * class.cs: Always initialize local unsafe variables.
3547
3548 2008-06-30  Marek Safar  <marek.safar@gmail.com>
3549
3550         A fix for bug #396987
3551         * expression.cs (NewInitialize): Clear local temporary variable for next run
3552
3553 2008-06-27  Marek Safar  <marek.safar@gmail.com>
3554
3555         A fix for bug #401020
3556         * ecore.cs: Both types and modifiers have to match for ref and out arguments
3557
3558 2008-06-27  Marek Safar  <marek.safar@gmail.com>
3559
3560         A fix for bug #398319
3561         * cs-parser.jay: Implemented undocumented base access expression inside
3562         anonymous types.
3563
3564 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3565
3566         A fix for bug #404227
3567         * cs-parser.jay: Parse namespace declaration using qualified identifier.
3568
3569 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3570
3571         A fix for bug #404227
3572         * convert.cs: Fixed explicit array to interface cast.
3573
3574 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3575
3576         A fix for bug #403894
3577         * delegate.cs: Mutate DelegateInvocation type.
3578
3579 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3580
3581         A fix for bug #379348
3582         * delegate.cs: Box a load of generic parameters.
3583
3584 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3585
3586         * expression.cs: Add an array creation arguments mutate.
3587
3588 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3589
3590         A fix for bug #386068
3591         * anonymous.cs, expression.cs: Emit correctly hoisted expression tree
3592         parameter.
3593
3594 2008-06-25  Marek Safar  <marek.safar@gmail.com>
3595
3596         * ecore.cs, expression.cs: Fixed broken TypeCast clone, implemented few more
3597         CloneTo.
3598
3599 2008-06-25  Marek Safar  <marek.safar@gmail.com>
3600
3601         A fix for bug #403518
3602         * delegate.cs: Type correctly anonymous method new invocation.
3603
3604 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3605
3606         A fix for bug #394826
3607         * anonymous.cs: Fully qualify members when resolving anonymous type internal
3608         calls.
3609
3610 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3611
3612         A fix for bug #394826
3613         * anonymous.cs, iterators.cs: Construct generic storey only when is really
3614         needed.
3615
3616 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3617
3618         * class.cs: Clone indexer parameters for localized capturing.
3619
3620 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3621
3622         A fix for bug #402379
3623         * expression.cs: Don't crash when an object initializer resolve fails.
3624
3625 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3626
3627         A fix for bug #402888
3628         * expression.cs: Mutate conditional expression.
3629
3630 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3631
3632         A fix for bug #401012
3633         * class.cs: Keep StructLayout in shared container.
3634
3635 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3636
3637         A fix for bug #400438
3638         * decl.cs, class.cs: Only properties can be automatically implemented.
3639
3640 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3641
3642         * statement.cs (ChangeToIterator): Copy also labels.
3643
3644 2008-06-23  Marek Safar  <marek.safar@gmail.com>
3645
3646         * ecore.cs: Pass type argument details to parent extension method.
3647
3648 2008-06-23  Marek Safar  <marek.safar@gmail.com>
3649
3650         A fix for bug #375966
3651         * delegate.cs: Fixed IsTypeCovariant generic type conversions.
3652
3653 2008-06-23  Raja R Harinath  <harinath@hurrynot.org>
3654
3655         * Makefile (bootstrap-libs): Pass NO_DIR_CHECK to sub-make.
3656
3657 2008-06-22  Marek Safar  <marek.safar@gmail.com>
3658
3659         A fix for bug #394347
3660         * anonymous.cs: Cache compatible delegates as compatibility check produces
3661         a new method every time.
3662
3663 2008-06-20  Marek Safar  <marek.safar@gmail.com>
3664
3665         * anonymous.cs: Propagate storey reference for single references.
3666
3667 2008-06-20  Marek Safar  <marek.safar@gmail.com>
3668
3669         A fix for bug #387615
3670         * assign.cs, expression.cs: Correctly clone compound assignment.
3671
3672 2008-06-19  Marek Safar  <marek.safar@gmail.com>
3673
3674         A fix for bug #359611, #359604
3675         * anonymous.cs: Mutate all types of hoisted parameters.
3676
3677 2008-06-19  Marek Safar  <marek.safar@gmail.com>
3678
3679         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, linq.cs, class.cs
3680         delegate.cs, iterators.cs, cs-parser.jay, assign.cs, anonymous.cs, driver.cs
3681         expression.cs, codegen.cs, statement.cs
3682         
3683         Fixes bugs: #318652, #323223, #234779, #325069, #325476, #332532, #334465,
3684         #345907, #349190, #353276, #355256, #359617, #378542, #384584, #396530
3685         
3686         ** Anonymous methods, lambda expressions rewrite **
3687         
3688         Anonymous expressions are now resolved when an explicit block is resolved 
3689         and they don't require any registration procedure anymore. Further,
3690         anonymous methods are defined when explicit block is emitted which allows
3691         better control of whole process and opens possibilities for more
3692         optimizations as well as alternative to reverse whole process.
3693         
3694         A concept of `MutateHoistedGenericType' was introduced to keep the resolve
3695         process consistent and to correctly emit hoisted generic methods when they
3696         have at least 1 hoisted variable.
3697         
3698 2008-06-17  Martin Baulig  <martin@ximian.com>
3699
3700         * class.cs: Also emit the `[DebuggerHidden]' attribute on the main
3701         iterator method.
3702         (AbstractPropertyEventMethod.IsDebuggerHidden): New protected
3703         virtual property; check it in Emit().
3704         (PropertyMethod.IsDebuggerHidden): Override, check whether we're
3705         an iterator.
3706         (MethodOrOperator.ResolveMethods): Set `DEBUGGER_HIDDEN' if we're
3707         an iterator.
3708         (Indexer.Define): Likewise.
3709
3710 2008-06-17  Marek Safar  <marek.safar@gmail.com>
3711
3712         * convert.cs: Don't use IsInterface on type arguments.
3713         
3714         * delegate.cs: DelegateInvocation uses MethodInfo.
3715         
3716         * parameter.cs: Removed IsTypeParameter.
3717         
3718         * generic-mcs.cs: More missing stuff.
3719
3720 2008-06-16  Martin Baulig  <martin@ximian.com>
3721
3722         * modifiers.cs
3723         (Modifiers.DEBUGGER_HIDDEN): New public const.
3724
3725         * typemanager.cs
3726         (TypeManager.GetDebuggerHiddenAttribute): New public static method.
3727
3728         * class.cs
3729         (MethodOrOperator.Emit): Check `Modifiers.DEBUGGER_HIDDEN'.
3730         (AbstractPropertyEventMethod): Likewise.
3731         (Constructor.Emit): Likewise.
3732         (SourceMethod.SetCompilerGenerated): Removed.
3733
3734         * iterator.cs: Set `Modifiers.DEBUGGER_HIDDEN' everywhere except
3735         on MoveNext().
3736
3737         * anonymous.cs
3738         (RootScopeInfo.DoDefineMembers): Set `Modifiers.DEBUGGER_HIDDEN'
3739         if we're an `IteratorHost'.
3740         (AnonymousMethodMethod..ctor): Don't set
3741         `Modifiers.COMPILER_GENERATED'; csc only sets this on the class,
3742         not on the method.
3743
3744 2008-06-16  Marek Safar  <marek.safar@gmail.com>
3745
3746         * statement.cs: Clean-up foreach statements.
3747
3748 2008-06-12  Marek Safar  <marek.safar@gmail.com>
3749
3750         * class.cs: Stop using public method which should not exist
3751         (MethodBuilder.SetGenericMethodSignature).
3752
3753 2008-06-11  Martin Baulig  <martin@ximian.com>
3754
3755         * location.cs
3756         (Location.LookupFile): Add `CompilationUnit' argument; when given
3757         a relative file name, make it relative to the directory the .cs
3758         file is located in instead of using the current directory.
3759
3760 2008-06-11  Martin Baulig  <martin@ximian.com>
3761
3762         * class.cs
3763         (IMethodData.EmitExtraSymbolInfo): Added `SourceMethod' argument.
3764         (MethodOrOperator.EmitExtraSymbolInfo): Likewise.
3765         (SourceMethod.SetRealMethodName): Moved here from the symbol writer.
3766         (SourceMethod.SetCompilerGenerated): Likewise.
3767
3768 2008-06-11  Marek Safar  <marek.safar@gmail.com>
3769
3770         * codegen.cs, driver: Only write symbol file when it's asked for.
3771
3772 2008-06-11  Marek Safar  <marek.safar@gmail.com>
3773
3774         * codegen.cs: Don't use assembly writer error handling for symbol writer.
3775
3776 2008-06-10  Martin Baulig  <martin@ximian.com>
3777
3778         * symbolwriter.cs: Reflect latest MarkSequencePoint() API changes.
3779
3780 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3781
3782         A fix for bug #316290
3783         * expression.cs: Include decimal operators in predefined table.
3784         
3785         * parameters.cs: More readonlyness.
3786
3787 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3788
3789         A fix for bug #397213
3790         * cs-parser.jay: One more missing current_local_parameters reset.
3791
3792 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3793
3794         A fix for bug #396633
3795         * class.cs: Host backing field in partial container.
3796
3797 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3798
3799         A fix for bug #397068
3800         * expression.cs: Check both operand types when predefined operator is used.
3801
3802 2008-06-05  Martin Baulig  <martin@ximian.com>
3803
3804         Merged the `debugger-kahalo' branch.
3805
3806         * class.cs
3807         (MethodData.Emit): Call SymbolWriter.SetCompilerGenerated() if
3808         we're an iterator method.
3809         (SourceMethod): Reflect latest symbol writer changes;
3810         SymbolWriter.OpenMethod() now takes a `ICompileUnit' argument and
3811         now `start_row' and `end_row'.
3812         (Constructor.Emit): Fix the logic whether to emit symbol information.
3813
3814         * iterator.cs: Call SymbolWriter.SetCompilerGenerated() on all the
3815         generated methods.
3816
3817         * location.cs
3818         (CompilationUnit): New public class; derives from `SourceFile'.
3819         (SourceFileEntry.DefineSymbolInfo): New public method.
3820         (SourceFileEntry.SetChecksum): New public method.
3821         (Location): Encode hidden line numbers by using `column == 255';
3822         the .ctor now accepts `column == -1' to mark a hidden line number.
3823         (Location.Hidden): New public property.
3824         (Location.CheckPoint): Add `CompilationUnit'.
3825         (Location.SourceFiles): Change return type to `CompilationUnit[]'.
3826         (Location.Push): Add `CompilationUnit compile_unit' argument.
3827         (Location.CompilationUnit): New public property.
3828
3829         * statement.cs
3830         (ToplevelBlock.Emit): Add `ec.Mark (EndLocation)'.
3831
3832         * cs-parser.jay: `SourceFile' -> `CompilationUnit'.
3833
3834         * driver.cs: `SourceFile' -> `CompilationUnit'.
3835
3836         * cs-tokenizer.cs: `SourceFile' -> `CompilationUnit'.
3837
3838         * namespace.cs: `SourceFile' -> `CompilationUnit'.
3839
3840         * cs-tokenizer.cs: Add support for `#pragma checksum' and
3841         `#line hidden'.
3842
3843         * symbolwriter.cs
3844         (SymbolWriter.MarkSequencePoint): Take a `Location' and use the
3845         new symbol writer API to also pass the file.
3846
3847 2008-06-05  Marek Safar  <marek.safar@gmail.com>
3848
3849         * statement.cs: Emit catch variable assignment using variable expression.
3850         
3851 2008-06-05  Marek Safar  <marek.safar@gmail.com>
3852
3853         * ecore.cs, expression.cs, statement.cs: Make TemporaryVariable compatible
3854         with other variable types.
3855
3856 2008-06-04  Marek Safar  <marek.safar@gmail.com>
3857
3858         * ecore.cs, expression.cs, statement.cs, typemanager.cs: Removed custom
3859         GetLength method emit, it breaks resolve rules.
3860         
3861 2008-06-02  Atsushi Enomoto  <atsushi@ximian.com>
3862             Marek Safar  <marek.safar@gmail.com>
3863                         
3864         A fix for bug #395542
3865         * cs-parser.jay: The trailing comma is allowed in anonymous type member
3866         declaration.
3867         
3868 2008-06-02  Marek Safar  <marek.safar@gmail.com>
3869
3870         A fix for bug #395287
3871         * class.cs, modifiers.cs: Automatic properties method base modifiers checks.
3872
3873 2008-05-31  Marek Safar  <marek.safar@gmail.com>
3874
3875         A fix for bug #395845
3876         * class.cs, nullable.cs: User unary operator is allowed to have nullable and
3877         non-nullable parameter type.
3878         
3879 2008-05-31  Marek Safar  <marek.safar@gmail.com>
3880
3881         * class.cs: Handle contructor initializer as a statement in top-level block.
3882
3883 2008-05-30  Marek Safar  <marek.safar@gmail.com>
3884
3885         * attribute.cs: Don't mix old and new corlib types when emitting corlib
3886         security attributes.
3887
3888 2008-05-24  Marek Safar  <marek.safar@gmail.com>
3889
3890         * ecore.cs, expression.cs: Small IVariable refactoring.
3891
3892 2008-05-22  Marek Safar  <marek.safar@gmail.com>
3893
3894         * assign.cs (LocalTemporary): Implemented CreateExpressionTree.
3895
3896 2008-05-21  Marek Safar  <marek.safar@gmail.com>
3897
3898         * cs-parser.jay: Removed redundant catch type check.
3899
3900 2008-05-21  Marek Safar  <marek.safar@gmail.com>
3901
3902         A fix for bug #390372
3903         * nullable.cs: Set correct return type.
3904
3905 2008-05-21  Marek Safar  <marek.safar@gmail.com>
3906
3907         A fix for bug #391062
3908         * typemanager.cs: Fixed crash when comparing null types.
3909
3910 2008-05-21  Marek Safar  <marek.safar@gmail.com>
3911
3912         A fix for bug #391871
3913         * cs-parser.jay: Better error handling for invalid catch type.
3914
3915 2008-05-20  Marek Safar  <marek.safar@gmail.com>
3916
3917         A fix for bug #392155
3918         * cs-tokenizer.cs: Fixed casting of byte and decimal expression.
3919
3920 2008-05-15  Marek Safar  <marek.safar@gmail.com>
3921
3922         A fix for bug #390666
3923         * ecore.cs (BetterExpressionConversion): Unwrap each Expression<T>
3924         expressions.
3925
3926 2008-05-15  Marek Safar  <marek.safar@gmail.com>
3927
3928         * class.cs, expression.cs, statement.cs: Removed a hack, setting block flag
3929         in getter.
3930
3931 2008-05-13  Marek Safar  <marek.safar@gmail.com>
3932
3933         A fix for bug #389625
3934         * delegate.cs, generic.cs: Some progress on method group return type
3935         inference.
3936
3937 2008-05-13  Marek Safar  <marek.safar@gmail.com>
3938
3939         A fix for bug #378419
3940         * namespace.cs: Inspect also parent namespaces not only namespace entries.
3941
3942 2008-05-12  Marek Safar  <marek.safar@gmail.com>
3943
3944         * class.cs (Constructor): Added IsCompilerGenerated.
3945
3946 2008-05-12  Marek Safar  <marek.safar@gmail.com>
3947
3948         * expression.cs: Enum binary operators can accept non-enum operand only when
3949         is implicitly convertible to underlying type.
3950
3951 2008-05-12  Marek Safar  <marek.safar@gmail.com>
3952
3953         A fix for bug #389272
3954         * support.cs: Workaround System.InvalidOperationException for enums.
3955
3956 2008-05-12  Marek Safar  <marek.safar@gmail.com>
3957
3958         A fix for bug #389073
3959         * convert.cs: More undocumented explicit IntPtr/UIntPtr conversions.
3960
3961 2008-05-10  Marek Safar  <marek.safar@gmail.com>
3962
3963         * driver.cs: Split Parse.
3964         
3965         * location.cs (LookupFile): Uses string.Empty.
3966
3967 2008-05-07  Marek Safar  <marek.safar@gmail.com>
3968
3969         * expression.cs, parameter.cs: Small ParameterReference clean up.
3970
3971 2008-05-07  Marek Safar  <marek.safar@gmail.com>
3972
3973         * anonymous.cs, codegen.cs, convert.cs, ecore.cs: Removed uber ugly TempEc
3974         hack. Fixes #387502.
3975
3976 2008-05-06  Martin Baulig  <martin@ximian.com>
3977
3978         * class.cs (Constructor.Emit): Fix the logic whether to emit
3979         symbol information.
3980
3981 2008-05-06  Raja R Harinath  <harinath@hurrynot.org>
3982
3983         Fix #385503
3984         * iterators.cs (Iterator.CurrentBlock.DoEmit): Don't emit
3985         InvalidOperationException when the iterator is before the start or
3986         after the end.
3987
3988 2008-05-06  Marek Safar  <marek.safar@gmail.com>
3989
3990         * nullable.cs (NullCoalescingOperator): Result is underlying type of left,
3991         when left is nullable type.
3992
3993 2008-05-06  Marek Safar  <marek.safar@gmail.com>
3994
3995         A fix for bug #386628
3996         * expression.cs (LocalVariableReference): Continue in resolving when
3997         variable is not assigned.
3998
3999 2008-05-05  Marek Safar  <marek.safar@gmail.com>
4000
4001         * nullable.cs, statement.cs (Unwrap): Store non-variable expression in all
4002         nullable operations.
4003
4004 2008-05-04  Marek Safar  <marek.safar@gmail.com>
4005
4006         * nullable.cs, statement.cs (Unwrap): Don't duplicate variable expressions,
4007         it saves many redundant temporary variables for nullable operations.
4008
4009 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4010
4011         * assign.cs: EventAddOrRemove is a statement and cannot have a type.
4012         
4013         * cfold.cs, constant.cs, expression.cs: Share Error_OperatorCannotBeApplied
4014         method.
4015         
4016         * nullable.cs: Constant coalescing operator optimizations.
4017
4018 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4019
4020         * constant.cs: Use unsigned conversion for values which are unsigned only.
4021
4022 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4023
4024         * convert.cs, literal.cs, nullabel.cs, typemanager.cs: Implemeted null 
4025         coalescing operator as it should be.
4026
4027 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4028
4029         A fix for bug #371016
4030         * expression.cs: All predefined delegate operators require implicit method
4031         group conversion.
4032         
4033 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4034
4035         * constant.cs: Emit long constant as uint when fits the range.
4036         
4037         * convert.cs, expression.cs: Fixed few unsafe conversions.
4038
4039 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4040
4041         * convert.cs, literal.cs: Don't wrap implicit reference conversion to object
4042
4043 2008-05-02  Raja R Harinath  <harinath@hurrynot.org>
4044
4045         Fix #385758
4046         * convert.cs (ImplicitNumericConversion): Don't modify the type of
4047         'expr'.
4048         * ecore.cs (EmptyCast.Create): Flatten nested EmptyCasts.
4049
4050 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4051
4052         * constant.cs, literal.cs: IsLiteral property for error reporting.
4053         
4054         * ecore.cs, expression.cs: Implemented Property expression.
4055
4056 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4057
4058         * class.cs, modifiers.cs, flowanalysis.cs: New BACKING_FIELD flag.
4059         
4060         * nullable.cs: Implemented nullable coalescing null operator.
4061
4062         * ecore.cs, expression.cs: Expression trees work.
4063
4064 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4065
4066         * ecore.cs: CreateExpressionTree is finally abstract.
4067
4068         * expression.cs, linq.cs: Updated.
4069
4070 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4071
4072         * expression.cs, ecore.cs: Block base access expression inside expression
4073         tree.
4074
4075 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4076
4077         A fix for bug #385058
4078         * expression.cs: User-defined operator implementations always take
4079         precedence over predefined operator implementations.
4080
4081 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4082
4083         * assign.cs, anonymous.cs, lambda.cs, nullable.cs, ecore.cs, linq.cs,
4084         class.cs, iterators.cs, expression.cs, attribute.cs: Filled a few more
4085         expression tree conversions.
4086         
4087 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4088
4089         * typemanager.cs, ecore.cs, class.cs, expression.cs, doc.cs: Merged all
4090         operators method details to Operator class.
4091
4092 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4093
4094         * anonymous.cs: Pass unsafe flags to anonymous container.
4095         
4096         * ecore.cs, expression.cs, statement.cs: Block unsafe pointer operations
4097         inside expression tree.
4098
4099 2008-04-29  Martin Baulig  <martin@ximian.com>
4100
4101         * cs-tokenizer.cs (Tokenizer.Position): Added `line'.
4102         (Tokenizer.PopPosition): Also restore the `line'.
4103
4104 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4105
4106         * delegate.cs: Implemented Invoke expression.
4107
4108 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4109
4110         * expression.cs: Fixed equality reference comparison regression.
4111
4112 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4113
4114         * ecore.cs: Clean up EmptyCast hack.
4115         
4116         * expression.cs, nullable.cs: Implemented enum binary and unary operations
4117         using correct conversion rules. Also fixes #383993.
4118
4119 2008-04-28  Martin Baulig  <martin@ximian.com>
4120
4121         * class.cs (Constructor.Emit): Don't emit debugging information
4122         for generated default .ctor's.
4123
4124 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4125
4126         * convert.cs: Empty-cast ushort to int conversion.
4127
4128 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4129
4130         A fix for bug #384191
4131         * ecore.cs, expression.cs: Fixed expression cloning.
4132
4133 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4134
4135         * ecore.cs, delegate.cs, assign.cs: Few tweaks for recent changes.
4136
4137 2008-04-28  Raja R Harinath  <harinath@hurrynot.org>
4138
4139         Fix #381559, test-638.cs, test-639.cs
4140         * assign.cs (CompoundAssign.Helper): New wrapper.
4141         (CompoundAssign.DoResolve): Use it to wrap the nested 'target'
4142         access.
4143         * ecore.cs (MethodGroupExpr.VerifyArgumentsCompat) <params arguments>:
4144         Pass unconverted expressions to the params array creation expression.
4145         (FieldExpr.EmitAssign): Don't special-case StringConcat.
4146         (PropertyExpr.EmitAssign): Likewise.
4147         * expression.cs (ArrayCreation.ResolveArrayElement): Keep track of the
4148         element if it is of kind CompoundAssign.Helper.
4149         (ArrayCreation.Emit): If we saw a CompoundAssign.Helper, emit it
4150         first before anything else.
4151         (ArrayAccess.EmitAssign): Don't special-case StringConcat.
4152         (ArrayAccess.LoadArrayAndArguments): Simplify.
4153
4154 2008-04-27  Marek Safar  <marek.safar@gmail.com>
4155
4156         * expression.cs: Fixed cloning of typeof(void).
4157
4158 2008-04-27  Raja R Harinath  <harinath@hurrynot.org>
4159
4160         * assign.cs (Assign.DoResolve): Remove support for EventExprs.
4161         (Assign.Emit): Likewise.  Move it to ...
4162         (CompoundAssign.DoResolve): ... here and ...
4163         (CompoundAssign.Emit): ... here.
4164         (EventAddOrRemove): New helper to handle += and -= on events, and
4165         avoid the use of BinaryDelegates.
4166         * ecore.cs (EventExpr.DoResolveLValue): Emit CS0070 unconditionally.
4167         (EventExpr.EmitAddOrRemove): Improve.
4168         * delegate.cs (DelegateInvocation.DoResolve): Simplify slightly.
4169
4170         * cs-parser.jay (type) <namespace_or_type_name variant>: Don't
4171         create VarExprs for 'foo.bar.var'.
4172         * ecore.cs (VarExpr.InferType): Rename from DoResolveLValue, which
4173         is a highly inappropriate name for its functionality.
4174
4175 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
4176
4177         Simplify handling of multiple assignments
4178         * assign.cs (Assign): Clear out all 'embedded assign' gunk.  Make
4179         inheritable-only.
4180         (SimpleAssign): New.  Class to be used for normal assignments.
4181         * anonymous.cs, class.cs, cs-parser.jay: Update to changes.
4182         * expression.cs, parameter.cs, statement.cs: Likewise.
4183
4184 2008-04-25  Marek Safar  <marek.safar@gmail.com>
4185
4186         * ecore.cs, expression.cs, nullable.cs: Implemeted enum binary add operation
4187         for incompatible underlying types, more to come, uff.
4188
4189 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
4190
4191         Fix gtest-388.cs
4192         * expression.cs (VariableReference.EmitAssign) <source is NewInstance>:
4193         Handle 'leave_copy'.
4194
4195 2008-04-25  Marek Safar  <marek.safar@gmail.com>
4196
4197         * expression.cs, nullable.cs: Implemented UnaryPlus expression.
4198
4199 2008-04-24  Raja R Harinath  <harinath@hurrynot.org>
4200
4201         Fix test-636.cs.  Sprinkle a few more 'EmitSideEffect's around
4202         * expression.cs (Unary.TryReduceConstant): Unwrap SideEffectConstant.
4203         * statement.cs (While, Do, For): Allow test to have side effects.
4204         (For.DoEmit): Always emit InitStatement.
4205
4206         Fix test-635.cs
4207         * expression.cs (Binary.DoResolve) <BitwiseAnd with zero constant>:
4208         Always create SideEffectConstant.
4209         (Binary.EnumLiftUp): Don't assume that the enumeration constant is
4210         of type EnumConstant.
4211
4212         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
4213         Handle 'right' being SideEffectConstant of type 'bool'.
4214
4215         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
4216         Use left.EmitBranchable instead of open coding it, so as to
4217         improve optimization opportunities.
4218
4219         * constant.cs (SideEffectConstant.EmitSideEffect): Simplify slightly.
4220
4221         * ecore.cs (Expression.EmitBranchable): Document some non-obvious
4222         assumptions.
4223         (Expression.EmitSideEffect): Document.
4224
4225 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4226
4227         * expression.cs: Implemented NewArrayBounds, TypeIs, and TypeAs expressions.
4228
4229 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4230
4231         * constant.cs, statement.cs: Use EmitSideEffect for constant if statement.
4232
4233 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4234
4235         * ecore.cs, expression.cs, delegate.cs: Implemeted delegate instantiation
4236         conversion to expression tree.
4237
4238 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4239
4240         * ecore.cs: Removed unused expression.
4241
4242 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4243
4244         * expression.cs: Implemented NegateChecked and New expressions.
4245
4246 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4247
4248         * convert.cs, nullable.cs, expression.cs: Implemented Negate expression.
4249
4250 2008-04-22  Raja R Harinath  <harinath@hurrynot.org>
4251
4252         Fix #351102
4253         * anonymous.cs (AnonymousMethodExpression.DoResolve): Mark as
4254         needing final 'ret' instruction.
4255
4256 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4257
4258         * expression.cs: Disabled lifted binary conversion on ISO-1 profiles.
4259
4260 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4261
4262         * expression.cs: Emit ldnull and not null expression as an instance argument
4263          of static method expression calls.
4264
4265 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4266
4267         A fix for bug #378200
4268         * expression.cs: Fixed crash when creating parameterless expression tree
4269         method call.
4270
4271 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4272
4273         A fix for bug #375297
4274         * anonymous.cs: Fixed crash when inferring from null argument anonymous
4275         method.
4276
4277 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4278
4279         A fix for bug #377596
4280         * decl.cs, class.cs: Emit delegate type argument attributes.
4281
4282 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4283
4284         A fix for bug #365314
4285         * generic.cs, ecore.cs: Type parameter declaration cannot be of generic type
4286         
4287 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4288
4289         * cs-parser.jay, expression.cs: ComposedCast can work with type expressions
4290         only.
4291
4292 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4293
4294         * generic.cs (TypeParameter): Removed redundant location.
4295
4296 2008-04-19  Marek Safar  <marek.safar@gmail.com>
4297
4298         * generic.cs, parameter.cs, namespace.cs, ecore.cs, class.cs, decl.cs,
4299         delegate.cs, iterators.cs, cs-parser.jay, const.cs, enum.cs: Use
4300         FullNamedExpression in all declaration type expression, statements will come
4301         later.
4302
4303 2008-04-18  Marek Safar  <marek.safar@gmail.com>
4304
4305         * generic.cs, namespace.cs, ecore.cs, class.cs, decl.cs, generic-mcs.cs,
4306         nullable.cs, expression.cs, enum.cs, doc.cs: Cleaning up type expressions.
4307
4308 2008-04-18  Marek Safar  <marek.safar@gmail.com>
4309
4310         * parameter.cs, delegate.cs, cs-parser.jay, expression.cs: Removed unused
4311         code.
4312
4313 2008-04-17  Marek Safar  <marek.safar@gmail.com>
4314
4315         * decl.cs, class.cs, generic.cs: Verify partial parts type parameters and
4316         constraints.
4317
4318 2008-04-17  Marek Safar  <marek.safar@gmail.com>
4319
4320         * decl.cs, class.cs, cs-parser.jay, ecore.cs, expression.cs: Unify all type
4321         name expressions.
4322         Also fixes #340463.
4323
4324 2008-04-17  Raja R Harinath  <harinath@hurrynot.org>
4325
4326         Hook up 'EmitSideEffect'
4327         * constant.cs (Constant.EmitSideEffect): New.
4328         (SideEffectConstant.Emit): Simplify.  Use EmitSideEffect.
4329         (SideEffectConstant.EmitSideEffect): New.
4330         * ecore.cs (BoxedCast.EmitBranchable): Remove.  We can't use an
4331         unconditional branch in EmitBranchable.
4332         (FieldExpr.EmitBranchable): New.
4333         * expression.cs (Unary.EmitSideEffect): New.
4334         (Binary.EmitSideEffect): New.
4335         (VariableReference.EmitSideEffect): New.  Do nothing.
4336
4337 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
4338
4339         Introduce 'EmitSideEffect'
4340         * ecore.cs (Expression.EmitSideEffect): New.
4341         (TypeCast): Rename from EmptyCast.
4342         (EmptyCast): New.
4343         (EmptyCast.EmitBranchable, EmptyCast.EmitSideEffect): Implement.
4344         (BoxedCast.EmitBranchable, BoxedCast.EmitSideEffect): Implement.
4345         * convert.cs, nullable.cs: Update to changes.
4346
4347 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4348
4349         * class.cs, cs-parser.jay: Early check for base types expression.
4350
4351 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4352
4353         * decl.cs (MemberName): Declare PrettyName as obsolete.
4354
4355 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4356
4357         * namespace.cs: Use MemberName comparison.
4358
4359 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
4360
4361         Fix build break
4362         * decl.cs (MemberName.PrettyName): New.  Replaces the misnamed
4363         FullName.
4364         (MemberName.MethodName, MemberName.GetSignatureForError): Improve.
4365         (MemberName.FullyQualifiedName): New.  Provides the functionality
4366         that users assume FullName would have.
4367         * ecore.cs, namespace.cs: Update to changes.
4368
4369         * statement.cs (Using.assign): Make into ExpressionStatement.
4370         (Using.EmitPreTryBody): Simplify.
4371
4372 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4373
4374         * report.cs: ColorFormat is protected.
4375         
4376         * rootcontext.cs: Unused fields clean-up.
4377         
4378         * namespace.cs: Made UsingEntry name private.
4379
4380 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4381
4382         * cs-tokenizer.cs, location.cs: Removed unused field.
4383
4384 2008-04-16  Jan Oravec <jan.oravec@6com.sk>
4385             Raja R Harinath  <harinath@hurrynot.org>
4386
4387         Fix #379822
4388         * constant.cs (SideEffectConstant.value): Rename from 'left'.
4389         (SideEffectConstant.side_effect): Rename from 'right'.
4390         (SideEffectConstant..ctor): Normalize 'side_effect'.
4391         (SideEffectConstant.Emit): Emit 'value', not 'side_effect' as the
4392         value of this constant.
4393         * cfold.cs: Update to changes.
4394
4395 2008-04-15  Marek Safar  <marek.safar@gmail.com>
4396
4397         * cs-paser.jay: Removed unused variable.
4398         
4399         * driver.cs: Made Compile instance method.
4400
4401 2008-04-15  Raja R Harinath  <harinath@hurrynot.org>
4402
4403         * flowanalysis.cs (FlowBranching.MergeChild): Simplify.
4404
4405 2008-04-15  Marek Safar  <marek.safar@gmail.com>
4406
4407         * cs-paser.jay, namespace.cs: Simplified handling of namespace imports. 
4408
4409 2008-04-13  Jb Evain  <jbevain@novell.com>
4410
4411         * namespace.cs: update the System.Core fullname for 2.1
4412         * driver.cs: update the list of required assemblies for 2.1.
4413         Merged from the Moonlight 2 branch.
4414
4415 2008-04-11  Marek Safar  <marek.safar@gmail.com>
4416
4417         * assign.cs, ecore.cs, expression.cs, nullable.cs: More work on nullable
4418         types and user defined operators. User operators arguments has to be checked
4419         for null value before invocation, which also means no operator is called
4420         when any argument is not convertible to unwrapped nullable type.
4421         
4422 2008-04-09  Marek Safar  <marek.safar@gmail.com>
4423
4424         * convert.cs, ecore.cs, expression.cs, nullable.cs: Initial refactoring
4425         of Unary expressions to follow operator overloading rules precisely.
4426         Also fixes #321794, #323794
4427         
4428 2008-04-08  Marek Safar  <marek.safar@gmail.com>
4429
4430         * cs-parser.jay, expression.cs: Don't wrap Indirection expression in Unary
4431         expression.
4432         
4433 2008-04-08  Marek Safar  <marek.safar@gmail.com>
4434
4435         * expression.cs, ecore.cs: Implemented MemberInit expression.
4436         
4437 2008-04-08  Raja R Harinath  <harinath@hurrynot.org>
4438
4439         Fix mono/tests/exception4.cs
4440         * statement.cs (ExceptionStatement, TryCatch): Revert to using
4441         ec.NeedReturnLabel () rather emitting a 'nop'.
4442
4443         * statement.cs (ExceptionStatement.SomeCodeFollows): A hook for a
4444         simple heuristic.
4445         (TryCatch.SomeCodeFollows): Likewise.
4446         * flowanalysis.cs (FlowBranchingException): Call 'SomeCodeFollows'
4447         for 'break', 'continue' and 'return' statements inside a try.
4448         We're fairly sure that the generated IL stream will have more
4449         instructions textually following the try.
4450         (FlowBranchingTryCatch): Likewise.
4451
4452         * statement.cs (Throw.Resolve): Move CS0156 and CS0724 testing ...
4453         * flowanalysis.cs (FlowBranching.CheckRethrow): ... here and to its
4454         overrides.
4455
4456         * statement.cs (CollectionForeach.DisposableWrapper): Make a true
4457         wrapper -- forward everything to CollectionForeach.
4458         (CollectionForeach.NonDisposableWrapper): New.
4459         (CollectionForeach.EmitFinallyBody): Use 'endfinally' instruction
4460         instead of a pop + branch to end.
4461
4462 2008-04-07  Marek Safar  <marek.safar@gmail.com>
4463
4464         A fix for bug #377485
4465         * assign.cs, expression.cs, decl.cs, class.cs, ecore.cs, namespace.cs: 
4466         Propagate location for extension method groups. Report conversion failure at
4467         right place.
4468
4469 2008-04-07  Marek Safar  <marek.safar@gmail.com>
4470
4471         * anonymous.cs, expression.cs, ecore.cs, typemanager.cs: Implemented
4472         ListInit and Field expressions.
4473
4474 2008-04-06  Raja R Harinath  <harinath@hurrynot.org>
4475
4476         * iterators.cs (Iterator.EmitMoveNext): Remove try/fault wrapper.
4477         Since $PC is always -1 inside the body of MoveNext, the fault
4478         handler is a no-op.
4479         * flowanalysis.cs (FlowBranchingException.EmitFinally): Kill.
4480         * statement.cs (ExceptionStatement.emit_finally): Likewise.
4481         (ExceptionStatement.ResolveFinally): Drop 'branching' argument.
4482
4483         The denouement!  Fix #324708
4484         * iterators.cs (Iterator.EmitMoveNext): Reset $PC to -1 on entry.
4485         (Iterator.EmitYieldBreak): We no longer need to reset $PC.
4486         * statement.cs (ExceptionStatement.DoEmit): Actually emit the
4487         'finally' inside the finally clause.
4488
4489         * statement.cs (ExceptionStatement.DoEmit): Emit try/finally block
4490         inside an iterator.  Don't emit the body of the 'finally' inside
4491         the finally clause yet.
4492
4493         Use the ResumableStatement infrastructure for MoveNext ()
4494         * iterators.cs (Iterator.EmitMoveNext_NoResumePoints): New.
4495         (Iterator.EmitMoveNext): Use 'resume_points'.  Get rid of
4496         'old_resume_points'.  Move dispatcher upfront.
4497         (Iterator.MarkYield): Mark the 'resume_point' of a Yield.
4498         * statement.cs (ExceptionStatement.DoEmit): Emit a dispatcher if
4499         in an enumerator.  This encodes the main fix in this patch series
4500         -- we can only jump into the first instruction of a try from the
4501         outside, but we want to emit try/finally regions in iterators and
4502         resume in the middle of them.
4503
4504 2008-04-05  Raja R Harinath  <harinath@hurrynot.org>
4505
4506         * statement.cs (ExceptionStatement.ResolveFinally): Move setting
4507         of NeedReturnLabel here.
4508
4509         Introduce a common point for emitting try/finally to IL
4510         * statement.cs (ExceptionStatement.DoEmit): New.  Combines all the
4511         features of the various subclasses, which are now driven by ...
4512         (ExceptionStatement.EmitPreTryBody): ... this and ...
4513         (ExceptionStatement.EmitTryBody): ... this and the original
4514         EmitFinallyBody.
4515         (TryFinally, Lock, Using, UsingTemporary, DisposableWrapper):
4516         Remove DoEmit and update to follow above protocol.
4517
4518         * statement.cs (ExceptionStatement.EmitForDispose): If all labels
4519         of the dispatcher are the same, skip emitting the 'switch'.
4520         * iterator.cs (Iterator.EmitDispose): Update to changes.
4521
4522         Clean up handling of 'using' statement
4523         * statement.cs (UsingTemporary): New.  Carved out of ...
4524         (Using): ... this.  Simplify drastically.  Handle exactly
4525         one variable.
4526         * cs-parser.jay (using_statement): Split.  Create UsingTemporary
4527         or Using as appropriate.  If there are multiple variable declared,
4528         create nested Using statements.
4529         (resource_acquisition): Kill.
4530
4531         * statement.cs (ExceptionStatement.EmitForDispose): Use
4532         EmitFinallyBody, not EmitFinally.
4533
4534         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Remove.
4535         * iterator.cs: Update to changes.
4536
4537         Start using the ResumableStatement infrastructure
4538         * statement.cs (ResumeableStatement.PrepareForDispose): New.
4539         (ResumableStatement.EmitForDispose): New.
4540         (ExceptionStatement): Override them.
4541         * iterators.cs (Iterator.EmitDispose): Use PrepareForDispose and
4542         EmitForDispose to create the body of the Dispose method.  Don't
4543         use OldResumePoint.
4544
4545         * iterator.cs (Iterator.AddResumePoint): Move here from ...
4546         * statement.cs (Toplevel.AddResumePoint): ... here.
4547         (Toplevel.MoveNextStatement.Resolve): Create FlowBranchingIterator.
4548         * flowanalysis.cs (FlowBranchingIterator): New.
4549         * codegen.cs (EmitContext): Update to changes.
4550
4551         * iterators.cs (Iterator.OldResumePoint): Rename from ResumePoint.
4552         (Iterator.old_resume_points): Rename from 'resume_points'.
4553         (Iterator.MoveNextStatement): Remove unused class.
4554
4555         New infrastructure for try/finally in iterators (still unused)
4556         * flowanalysis.cs (FlowBranching.AddResumePoint): New.
4557         (FlowBranchingToplevel.AddResumePoint): Hook into
4558         ToplevelBlock.AddResumePoint.
4559         (FlowBranchingTryCatch): Move CS01626 and CS01631 checks here.
4560         (FlowBranchingException): Hook into ExceptionBlock.AddResumePoint.
4561         * statement.cs (ToplevelBlock.AddResumePoint): New.  Collect
4562         resume points and assign program-counter values.
4563         (ExceptionBlock.AddResumePoint): Collect resume points for
4564         de-muxer at the top of try block.
4565         * iterators.cs (Yield.CheckContext): Simplify.
4566         (Yield.Resolve): Use FlowBranching.AddResumePoint.
4567
4568 2008-04-04  Raja R Harinath  <harinath@hurrynot.org>
4569
4570         * flowanalysis.cs (FlowBranching.AddReturnOrigin): Change Location
4571         argument to an ExitStatement.
4572         (FlowBranchingException): Refactor saved origins code.
4573         * statement.cs (ExitStatement): Update to cahges.
4574         * iterator.cs (YieldBreak): Likewise.
4575
4576         * statement.cs (ResumableStatement): New.  Common base class for
4577         YieldReturn and ExceptionStatement.
4578         (ExitStatement): New.  Common base class for Return and YieldBreak.
4579         (Return): Update to changes.
4580         * iterator.cs (YieldBreak): Likewise.
4581         * lambda.cs (ContextualReturn): Likewise.
4582
4583         Fix #377028
4584         * ecore.cs (Expression.ResolveAsTypeStep): If '!silent' attempt to
4585         emit a meaningful error message.
4586
4587         Fix #324765, #319508
4588         * flowanalysis.cs (VariableInfo.IsEverAssigned): New.
4589         (VariableInfo.SetAssigned): Set it.
4590         * statement.cs (Block.UsageWarning): Use 'IsEverAssigned' to
4591         determine if CS0219 or CS0168 is appropriate.  Don't use
4592         flow-analysis information.
4593         (Block.Resolve): Use ec.EndFlowBranching, not ec.DoEndFlowBranching.
4594         * codegen.cs (EmitContext.DoEndFlowBranching): Kill.  Inline into ...
4595         (EmitContext.EndFlowBranching): ... this.
4596
4597 2008-04-03  Marek Safar  <marek.safar@gmail.com>
4598
4599         * class.cs, typemanager.cs: Emit volatile field with IsVolatile modifier.
4600
4601 2008-04-03  Marek Safar  <marek.safar@gmail.com>
4602
4603         A fix for bug #376508
4604         * convert.cs, expression.cs: Fixed difference between ImplicitConversion and
4605         ImplicitConversionExists.
4606
4607 2008-04-03  Marek Safar  <marek.safar@gmail.com>
4608
4609         * expression.cs (Binary): Added remaining binary operators to expression
4610         tree builder.
4611
4612         * nullable.cs: Optimize shift with null argument.
4613
4614 2008-04-03  Raja R Harinath  <harinath@hurrynot.org>
4615
4616         Fix minor IL regression
4617         * statement.cs (TryCatch..ctor): Add 'inside_try_finally' argument.
4618         (TryCatch.DoEmit): Use it to avoid creating another ExceptionBlock.
4619         * cs-parser.jay (try_statement): Update to changes.
4620
4621         * statement.cs (TryFinally.need_exc_block): Delete.
4622         (TryFinally): Update to changes.
4623
4624         Now all ExceptionStatements are unconditional
4625         * statement.cs (CollectionForeach.DisposableWrapper): New.
4626         Extract out the try/finally code into a new wrapper.
4627         (CollectionForeach.Resolve): Use it to simplify the code.
4628
4629 2008-04-02  Raja R Harinath  <harinath@hurrynot.org>
4630
4631         Start at simplifying ExceptionStatement semantics a bit
4632         * statement.cs (TryCatch, TryFinally): Split 'Try' into two pieces.
4633         * cs-parser.jay (try_statement): Update to changes.
4634         (opt_catch_clauses): Remove.
4635         * flowanalysis.cs: Update to changes.
4636         (FlowBranching.BranchingType.TryCatch): New.
4637         (FlowBranchingTryCatch): New.
4638
4639         * flowanalysis.cs (FlowBranching.BranchingType.SwitchSection): Kill.
4640         (FlowBranching.CreateBranching): Update to changes.
4641         (FlowBranchingBlock.AddSibling): Add sanity check.
4642         * codegen.cs (EmitContext.StartFlowBranching) <Block variant>:
4643         Update to changes.
4644
4645         * iterators.cs (Iterator.MarkFinally): Remove.
4646         * statement.cs (ExceptionStatement): Update to changes.
4647
4648         Add support for skipping over finally blocks at runtime.  First
4649         in a series to fix #324708
4650         * iterators.cs (Iterator.SkipFinally): New LocalBuilder.
4651         (Iterator.EmitMoveNext): Initialize it.
4652         * statement.cs (ExceptionStatement.EmitFinally): Use it to emit a
4653         branch over the body of the 'finally' clause.
4654
4655 2008-03-31  Raja R Harinath  <harinath@hurrynot.org>
4656
4657         Avoid lopsided use of Foo/DoFoo names
4658         * statement.cs (ExpressionStatement.EmitFinallyBody):
4659         Rename from EmitFinally.
4660         (ExpressionStatement.EmitFinally): Rename from DoEmitFinally.
4661         * iterator.cs: Update to changes.
4662
4663 2008-04-02  Marek Safar  <marek.safar@gmail.com>
4664
4665         * ecore.cs, expression.cs, nullable.cs: ConditionalLogicalOperator is now
4666         based on UserOperatorCall. More binary nullable operators clean up.
4667
4668 2008-04-02  Martin Baulig  <martin@ximian.com>
4669
4670         * symbolwriter.cs: Remove the `#if !DISABLE_TERRANIA_CHANGES' conditionals.
4671
4672 2008-04-02  Marek Safar  <marek.safar@gmail.com>
4673
4674         * nullable.cs: Merge user and empty conversions when lifting expression
4675         trees.
4676         
4677         * expression.cs (StringConcat): Implemented expression tree representation.
4678
4679 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4680
4681         * nullable.cs: When lifting null literal and a user operator exists, no call 
4682         is made.
4683         
4684 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4685
4686         * nullable.cs, ecore.cs, expression.cs: Convert null arithmetic to lifted
4687         null.
4688
4689 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4690
4691         * nullable.cs, expression.cs: Use namespace instead heavily nested
4692         monster abstract class.
4693
4694 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4695
4696         * ecore.cs, convert.cs, constant.cs, nullable.cs, expression.cs: Implemented
4697         lifting of null literal and user operators. Clean up of some temporary
4698         nullable hacks.
4699
4700 2008-03-30  Raja R Harinath  <harinath@hurrynot.org>
4701
4702         Fix #368224, test-629.cs
4703         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Return true
4704         if it crossed an unwind-protect boundary.
4705         * iterators.cs (Yield.CheckContext): Relax check for 'yield break'.
4706         (Yield.Resolve, Yield.DoEmit): Track whether the yield occurs
4707         inside an unwind-protected region.
4708         (YieldBreak.Resolve, YieldBreak.DoEmit): Likewise.
4709         (Iterator.MarkYield): Add 'unwind_protect' parameter.  Emit a
4710         'leave' instead of a 'br' if unwind-protected.
4711         (Iterator.EmitYieldBreak): Likewise.
4712
4713 2008-03-29  Gert Driesen  <drieseng@users.sourceforge.net>
4714
4715         * driver.cs: Only define versioninfo resources if no win32 resource
4716         file was specified.
4717
4718 2008-03-28  Marek Safar  <marek.safar@gmail.com>
4719
4720         A fix for bug #372375
4721         * convert.cs: Fixed boxing of nullable types.
4722
4723 2008-03-28  Marek Safar  <marek.safar@gmail.com>
4724
4725         * typemanager.cs: Initialize InternalsVisibleTo as the very first optional
4726         type.
4727
4728 2008-03-28  Marek Safar  <marek.safar@gmail.com>
4729
4730         A fix for bug #374619
4731         * nullable.cs: Fixed guarding of EmitBitwiseBoolean.
4732         
4733 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4734
4735         * lambda.cs: Check return type only for invocation.
4736         
4737 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4738
4739         A fix for bug #374214
4740         * ecore.cs: Correctly report argument type mismatch.
4741
4742 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4743
4744         * convert.cs (ImplicitReferenceConversionCore): Correctly compare enum type
4745         and not rely on broken IsEnum.
4746
4747 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4748
4749         * nullable.cs: New file, extracted from generic.cs.
4750         
4751         * generic.cs, generic-mcs.cs, *.csproj, *.sources: Updated.
4752
4753 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4754
4755         * generic.cs, convert.cs, generic-mcs.cs, expression.cs: Added lifting of
4756         predefined comparison operators and null literals.
4757         
4758         * report.cs: New warning ID.
4759         
4760 2008-03-25  Marek Safar  <marek.safar@gmail.com>
4761
4762         A fix for bug #370577
4763         * lambda.cs: Check return type too.
4764
4765 2008-03-25  Marek Safar  <marek.safar@gmail.com>
4766
4767         A fix for bug #372846
4768         * class.cs: Automatic properties can be declared as unsafe.
4769
4770 2008-03-20  Marek Safar  <marek.safar@gmail.com>
4771
4772         * location.cs: Use string based concatenation.
4773         
4774         * expression.cs: LiftedBinaryOperator is gmcs only.
4775         
4776 2008-03-20  Marek Safar  <marek.safar@gmail.com>
4777
4778         * generic.cs, literal.cs, ecore.cs, expression.cs: Ongoing work on nullable
4779         conversions rules and expression trees.
4780
4781 2008-03-19  Marek Safar  <marek.safar@gmail.com>
4782
4783         * delegate.cs: Use extension method source as delegate target.
4784
4785 2008-03-19  Marek Safar  <marek.safar@gmail.com>
4786
4787         * generic.cs, generic-mcs.cs, expression.cs, ecore.cs: Rewrote nullable
4788         binary operations to be purely based on binary operations and optimized
4789         emitted code (30% less in some cases). Introduced ReducedExpression for ETs
4790         and other ET refactoring.
4791         
4792         * typemanager.cs: Fixed warning.
4793         
4794 2008-03-17  Marek Safar  <marek.safar@gmail.com>
4795
4796         * class.cs, decl.cs, delegate.cs: Do protected modifier check on each member
4797         
4798         * symbolwriter.cs: Fixed.
4799
4800 2008-03-17  Marek Safar  <marek.safar@gmail.com>
4801
4802         * anonymous.cs, driver.cs: Reset anonymous types counters.
4803
4804 2008-03-17  Marek Safar  <marek.safar@gmail.com>
4805
4806         * ecore.cs (MethodGroupExpr): Skip first candidate, it's already the best.
4807         
4808         * class.cs: Use fullname for all type member definitions.
4809         
4810 2008-02-19  Martin Baulig  <martin@ximian.com>
4811
4812         * class.cs
4813         (IMethodData.EmitExtraSymbolInfo): New interface method.
4814         (MethodData.Emit): Call method.EmitExtraSymbolInfo().
4815         (MethodOrOperator.EmitExtraSymbolInfo): Implement this new
4816         interface method here as an empty public virtual method.
4817
4818         * anonymous.cs
4819         (AnonymousMethodMethod.ctor): Added `string real_name' argument.
4820         (AnonymousMethodMethod.EmitExtraSymbolInfo): Override and call
4821         CodeGen.SymbolWriter.SetRealMethodName().       
4822
4823 2008-02-18  Martin Baulig  <martin@ximian.com>
4824
4825         * anonymous.cs
4826         (ScopeInfo.EmitType): Override this and emit debugging
4827         information for captured variables.
4828         (RootScopeInfo.EmitType): Override this and emit symbol
4829         information for a captured `this'.
4830
4831 2008-02-15  Martin Baulig  <martin@ximian.com>
4832
4833         * iterators.cs: Emit debugging info.
4834
4835         * codegen.cs
4836         (EmitContext.Flags): Add `OmitDebuggingInfo'.
4837         (EmitContext.OmitDebuggingInfo): New public property.
4838
4839         * statement.cs
4840         (While): Override Emit() and don't emit symbol info there; do it
4841         inside DoEmit() instead.
4842         (Block.Emit): Omit symbol information while emitting the scope
4843         initializers; don't ec.Mark() the `EndLocation'.  Fix the lexical
4844         block logic.
4845         (ExplicitBlock.IsIterator): Moved here from `ToplevelBlock'.
4846         (ToplevelBlock.MakeIterator): Pass the `flags' to `ExplicitBlock's
4847         .ctor to make `IsIterator' work.
4848
4849 2008-03-14  Martin Baulig  <martin@ximian.com>
4850
4851         * symbolwriter.cs: Added the new symbol writer function from the
4852         debugger's `terrania' branch; temporarily enclose them inside
4853         `#if !DISABLE_TERRANIA_CHANGES' conditionals until I'm back from
4854         my vacations.
4855
4856 2008-03-14  Martin Baulig  <martin@ximian.com>
4857
4858         * symbolwriter.cs
4859         (SymbolWriter): Make this a public static class.
4860
4861         * codegen.cs
4862         (CodeGen.SymbolWriter): Removed; use the new static `SymbolWriter'
4863         class instead of using `if (CodeGen.SymbolWriter != null)' everywhere.
4864
4865 2008-03-14  Marek Safar  <marek.safar@gmail.com>
4866
4867         A fix for bug #370577
4868         * statement.cs, lambda.cs: Added extra limitations when dealing with void
4869         return type.
4870         
4871 2008-03-14  Marek Safar  <marek.safar@gmail.com>
4872
4873         * typemanager.cs (CSharpName): Made 250 times faster.
4874
4875 2008-03-13  Marek Safar  <marek.safar@gmail.com>
4876
4877         * ecore.cs, expression.cs: Emit conversion for ET shift argument.
4878         
4879 2008-03-12  Marek Safar  <marek.safar@gmail.com>
4880
4881         * generic.cs, typemanager.cs, enum.cs, codegen.cs, statement.cs: Try not to
4882         crash when predefined field does not exist.
4883         
4884 2008-03-12  Marek Safar  <marek.safar@gmail.com>
4885
4886         * ecore.cs (PropertyExpr): Fixed IsSingleDimensionalArrayLength regression.
4887         
4888 2008-03-12  Marek Safar  <marek.safar@gmail.com>
4889
4890         * class.cs (FixedField): Don't crash when contructors are missing.
4891
4892 2008-03-11  Marek Safar  <marek.safar@gmail.com>
4893
4894         * typemanager.cs, namespace.cs, literal.cs, ecore.cs, class.cs, decl.cs,
4895         convert.cs, constant.cs, expression.cs, statement.cs: Use same method to
4896         check internal types accessibility for internal and external types.
4897         Replaced EnumToUnderlying by GetEnumUnderlyingType.
4898
4899 2008-03-11  Marek Safar  <marek.safar@gmail.com>
4900
4901         * support.cs, typemanager.cs, pending.cs, ecore.cs, class.cs, delegate.cs
4902         convert.cs, const.cs, anonymous.cs, constant.cs, expression.cs,
4903         attribute.cs, statement: Use corect instance of predefined types (work
4904         related to #364674).
4905
4906 2008-03-07  Marek Safar  <marek.safar@gmail.com>
4907
4908         * expression.cs (TypeOfVoid): Fixed predefined method initialization.
4909         
4910 2008-03-07  Marek Safar  <marek.safar@gmail.com>
4911
4912         * generic.cs, typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, 
4913         class.cs, delegate.cs, iterators.cs, const.cs, constant.cs, driver.cs,
4914         expression.cs, attribute.cs, codegen.cs, statement.cs: TypeManager optional
4915         predefined types clean up, delayed predefined types members initialization
4916         (work related to #364674).
4917
4918 2008-03-05  Marek Safar  <marek.safar@gmail.com>
4919
4920         * typemanager.cs (IsFriendAssembly): InternalsVisibleTo is not mandatory.
4921         
4922 2008-03-05  Marek Safar  <marek.safar@gmail.com>
4923
4924         * typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, class.cs, decl.cs,
4925         delegate.cs, convert.cs, driver.cs, attribute.cs, codegen.cs: TypeManager
4926         predefined types clean up (work related to #364674).
4927
4928 2008-03-04  Marek Safar  <marek.safar@gmail.com>
4929
4930         * ecore.cs: Print an error message instead of throwing exception.
4931         
4932 2008-03-04  Marek Safar  <marek.safar@gmail.com>
4933
4934         * generic.cs, typemanager.cs, literal.cs, convert.cs, cfold.cs, constant.cs,
4935         expression.cs, statement.cs: Unififed null literal representation.
4936
4937 2008-03-03  Marek Safar  <marek.safar@gmail.com>
4938
4939         * anonymous.cs, cfold.cs, convert.cs, delegate.cs, doc.cs, ecore.cs,
4940         expression.cs: Refactored binary operators resolve phase and improved speed.
4941         The nullable code is still missing and won't work correctly, more fixes
4942         required.
4943
4944         It also fixes #323726, #324312, #324248, and many other unreported issues.
4945
4946 2008-02-29  Zoltan Varga  <vargaz@gmail.com>
4947
4948         * report.cs (FeatureIsNotAvailable): Use 'mcs1' instead of 'mcs', and 'mcs' 
4949         instead of 'gmcs'.
4950
4951 2008-02-27  Marek Safar  <marek.safar@gmail.com>
4952
4953         * ecore.cs: Clean-up and split BetterConversion.
4954         
4955 2008-02-25  Raja R Harinath  <harinath@hurrynot.org>
4956
4957         Fix #363791
4958         * enum.cs (EnumMember.Value): Only access 'value' if
4959         ResolveValue says it's ok.
4960         (EnumMember.DoResolveValue): Don't set prev_member.value.
4961         (Enum.GetDefinition): Reverse arguments of Equals --
4962         EnumMember.Value can return 'null'.
4963
4964         * statement.cs (Switch.Error_AlreadyOccurs): Fix typo in name.
4965
4966 2008-02-22  Marek Safar  <marek.safar@gmail.com>
4967
4968         * generic.cs, expression.cs: More ongoing work on expression trees.
4969         
4970 2008-02-21  Marek Safar  <marek.safar@gmail.com>
4971
4972         * class.cs, typemanager.cs: Rewrote operator matching logic to correctly
4973         handle missing matches when mutiple operators exist.
4974         
4975 2008-02-20  Marek Safar  <marek.safar@gmail.com>
4976
4977         A fix for bug #363218
4978         * expression.cs (ArrayCreation.Clone): Deal with multi-dimensional
4979         initializers.
4980         
4981 2008-02-20  Marek Safar  <marek.safar@gmail.com>
4982
4983         * expression.cs, constant.cs, cfold.cs: Yet another side-effect constant
4984         update. This time to deal correctly with SideEffectConstant expression used
4985         as an argument for another constant folding.
4986
4987 2008-02-20  Raja R Harinath  <harinath@hurrynot.org>
4988
4989         * typemanager.cs (DropGenericMethodArguments): Ensure we get an underlying
4990         MethodBuilder.
4991
4992 2008-02-19  Marek Safar  <marek.safar@gmail.com>
4993
4994         * constant.cs, cfold.cs: SideEffectConstant results can apply for folding.
4995
4996 2008-02-19  Marek Safar  <marek.safar@gmail.com>
4997
4998         A fix for bug #328136
4999         * expression.cs: Do not fold immediately LogicalAnd operators when the left
5000         side is a false constant, because we still need to evaluate the right-hand
5001         side.
5002
5003         * statement.cs (If): Emit two types of boolean constants (simple constant,
5004         side-effect constant).
5005
5006 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5007
5008         * constant.cs (SideEffectConstant): Don't emit boolean constant.
5009
5010         * expression.cs: Fold immediately LogicalAnd operators when both sides are
5011         constants.
5012
5013 2008-02-18  Marek Safar  <marek.safar@gmail.com>
5014
5015         A fix for bug #361457
5016         * ecore.cs (IsApplicable): Params methods have lower priority.
5017
5018         * support.cs: Return correct parameter modifier for params types.
5019
5020 2008-02-18  Marek Safar  <marek.safar@gmail.com>
5021
5022         * generic.cs (TypeParameter): Cache attribute target name.
5023
5024         * support.cs: Removed unused variable.
5025
5026         * typemanager.cs: Removed debugging leftover.
5027
5028         * ecore.cs: Use local type instead of a property;
5029
5030         * class.cs (VerifyMembers): Consider also parent to test whether type member
5031         is local or public.
5032
5033         * expression.cs (FullMethodDesc): Removed.
5034
5035         * attribute.cs (IsValidArgumentType): Made static.
5036
5037 2008-02-17  Raja R Harinath  <harinath@hurrynot.org>
5038
5039         Cleanup to be more readable.
5040         * Makefile (GMCS_PROFILE): Remove.
5041         (COMPILER_NAME): New helper.
5042
5043 2008-02-15  Miguel de Icaza  <miguel@novell.com>
5044
5045         * cs-tokenizer.cs: if a conditional expression happens inside a
5046         (...) this also means that we do not need to de-ambiguate between
5047         an parenthesized expression and a cast.
5048
5049         Fixes 346484.
5050
5051         * constant.cs (SideEffectConstant): a constant value that happens
5052         to have a side effect.
5053
5054         Fixes the build regressions introduced by the fix for #359789
5055
5056 2008-02-14  Rodrigo Kumpera  <rkumpera@novell.com>
5057
5058         * expression.cs (Conditional.Emit): when emitting the ternary
5059         operator, use local variables to generate code verifiable code.
5060
5061         The verifier cannot infer that the type on stack before the
5062         stloc.0 is executed is of type ParentB. This happens because the
5063         stack merge algorithm uses only parent types when deciding which
5064         is the common type.  This is described in Part III 1.8.1.3 of ECMA
5065         335.
5066
5067         This code compiled with mcs is not verifiable under MS. The MS
5068         verifier picks the first common interface of Foo and Bar, which is
5069         wrong, but doesn't use a full join type of the 2 interfaces.
5070
5071         CSC uses a clever hack to compile such code in a verifiable
5072         way. It stores the intermediate values in a local variable with
5073         the expected type.
5074
5075         Fixes: #358102
5076
5077 2008-02-14  Miguel de Icaza  <miguel@novell.com>
5078
5079         * expression.cs: Do not fold BitwiseAnd operators when the left
5080         side is a false constant, because we still need to evaluate the
5081         right-hand side.
5082
5083         Fixes #359789
5084
5085         * support.cs: Instead of throwing an InternalErrorException when
5086         the position of the stream is outside the boundary of our buffer,
5087         reset the state of the reader, and restart the reading from the
5088         beginning of the file.
5089
5090 2008-02-14  Marek Safar  <marek.safar@gmail.com>
5091
5092         * generic.cs (TypeParameter.GetMembers): Is not supported operation.
5093
5094 2008-02-14  Marek Safar  <marek.safar@gmail.com>
5095
5096         A fix for bug #361686
5097         * decl.cs: A protected types used inside a private class which parents
5098         derives from the protected class are accessible.
5099
5100 2008-02-13  Marek Safar  <marek.safar@gmail.com>
5101
5102         * generic.cs (ConstraintChecker): Use cached member lookup when looking for
5103         the parameterless constructor.
5104
5105 2008-02-13  Marek Safar  <marek.safar@gmail.com>
5106
5107         * generic.cs, typemanager.cs, iterators.cs, codegen.cs: Refactored core
5108         lookup methods to use standard member cache when doing member lookup.
5109
5110 2008-02-12  Marek Safar  <marek.safar@gmail.com>
5111
5112         * driver.cs: Don't report full path for referenced module as assembly error.
5113
5114 2008-02-12  Marek Safar  <marek.safar@gmail.com>
5115
5116         * Makefile: Fixed `qh' target to work on all machines.
5117
5118         * report.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs, anonymous.cs,
5119         expression.cs, codegen.cs, statement.cs, doc.cs: Replaced type IsSubclassOf
5120         and HasElementType with TypeManager implementation.
5121
5122 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5123
5124         A fix for bugs #325134, #359749
5125         * expression.cs, ecore.cs: Try to resolve an extension method even if the
5126         first binds point to non-method member expression.
5127
5128 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5129
5130         * cs-parser.jay: Null coalescing operator is not part of ISO-1.
5131
5132 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5133
5134         A fix for bugs #321394, #323028
5135         * generic.cs, parameter.cs, ecore.cs, class.cs, decl.cs, delegate.cs:
5136         Reworked naive IsAccessibleAs implementation to handle nested types.
5137
5138 2008-02-05  Jb Evain  <jbevain@novell.com>
5139
5140         * class.cs: use generic type comparison for parameters
5141         as well.
5142
5143 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5144
5145         A fix for bug #325372
5146         * class.cs: Use generic type comparison when testing method signatures.
5147
5148 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5149
5150         A fix for bug #357047
5151         * ecore.cs: Applied C# 3.0 changes to better conversion.
5152
5153 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5154
5155         A fix for bug #358374
5156         * cs-parser.jay: Correctly set modifiers for all constructor types.
5157
5158 2008-02-04  Marek Safar  <marek.safar@gmail.com>
5159
5160         A fix for bug #355251
5161         * generic.cs: Added base class constraint based type inference.
5162
5163 2008-02-01  Marek Safar  <marek.safar@gmail.com>
5164
5165         A fix for bug #357255
5166         * decl.cs: One more missing visibility check.
5167
5168 2008-02-01  Marek Safar  <marek.safar@gmail.com>
5169
5170         * support.cs: Fixed broken return.
5171
5172 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5173
5174         * report.cs: Correctly reset warnings count after probing.
5175
5176 2008-01-25  Martin Baulig  <martin@ximian.com>
5177
5178         * namespace.cs
5179         (NamespaceEntry.SymbolFileID): Make this work again after
5180         MemberName.ToString() is gone.
5181
5182 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5183
5184         * expression.cs: Implemented Divide, Equal, ExclusiveOr, GreaterThanOrEqual
5185         expressions.
5186
5187 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5188
5189         * generic.cs: Use full implicit conversion for type inference fixing.
5190
5191 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5192
5193         * ecore.cs, expression.cs, generic.cs: Implemented Convert, ConvertChecked.
5194         Fixed user operator conversions.
5195
5196 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5197
5198         * generic.cs: Do nullable type to null comparison optimization during
5199         resolve phase.
5200
5201 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5202
5203         A fix for bug #355163
5204         * generic.cs: Enabled l-value resolve on nullable expressions.
5205
5206 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5207
5208         A fix for bug #353986
5209         * class.cs: Ingore static ctors with parameters for any further checks.
5210
5211 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5212
5213         A fix for bug #354310
5214         * namespace.cs: Removed redundant check.
5215
5216 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5217
5218         A fix for bug #354928
5219         * expression.cs: ElementInitializers can be resolved only once.
5220
5221 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5222
5223         * convert.cs, ecore.cs, expression.cs, generic.cs: Implemented Coalesce and
5224         Condition expressions.
5225
5226 2008-01-23  Marek Safar  <marek.safar@gmail.com>
5227
5228         * codegen.cs: Fixed AssemblyBuilder initialization on other platforms.
5229
5230 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5231
5232         * ecore.cs, expression.cs, generic.cs: Implicit bool? to bool conversion is
5233         not allowed.
5234
5235         * generic.cs: Implemented coalesce expression.
5236
5237 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5238
5239         A fix for bug #355145
5240         * anonymous.cs, convert.cs, ecore.cs, generic.cs, lambda.cs: Implemented
5241         expression tree type inference.
5242
5243 2008-01-22  Raja R Harinath  <harinath@hurrynot.org>
5244
5245         Fix #354663
5246         * expression.cs (Binary.IsUnsignedType): Fix typo.
5247
5248 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5249
5250         * ecore.cs, expression.cs, generic.cs: Implemented NewArrayInit expression.
5251
5252 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5253
5254         A fix for bug #355161
5255         * ecore.cs, expression.cs: Wider range of extension method supported
5256         expressions.
5257
5258 2008-01-22  Gert Driesen  <drieseng@users.sourceforge.net>
5259
5260         * codegen.cs: Use magic value for AssemblyBuilderAccess to instruct
5261         AssemblyBuilder to operate in compiler context. Fixes mcs part of
5262         bug #354970.
5263
5264 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5265
5266         A fix for bug #355148
5267         * ecore.cs, expression.cs: Correctly report misused ref and out modifiers.
5268
5269 2008-01-22  Miguel de Icaza  <miguel@novell.com>
5270
5271         * expression.cs (CreateExpressionTree): Add support for or and
5272         logical or, and indent following the coding conventions.
5273
5274         * typemanager.cs (LinqExpression): renamed from
5275         ExpressionTreeManager, for a shorter name.
5276
5277         Use TypeManager.CoreLookupType to lookup types from our core
5278         assemblies and turn those into "Type" variables.
5279
5280         Consumers that previously used "Namespace" and "Type" from this
5281         class should instead use the TypeExpression which is a type that
5282         is fully resolved (without involving the regular C# resolution
5283         rules). 
5284
5285         This typically looks like this:
5286
5287         TypeExpression texpr = new TypeExpression (LinqExpression.expression_type, loc);
5288         new MemberAccess (texpr, name, type_arguments, loc)
5289
5290         This avoids the problem in: #355178
5291
5292 2008-01-21  Marek Safar  <marek.safar@gmail.com>
5293
5294         * cs-parser.jay, expression.cs: Check `namespace alias qualifier' language
5295         feature in parser only as we do in other cases.
5296         
5297 2008-01-21  Marek Safar  <marek.safar@gmail.com>
5298
5299         * attribute.cs, ecore.cs, class.cs, delegate.cs, expression.cs, linq.cs,
5300         typemanager.cs: A refactoring of params arguments to reuse existing
5301         expressions (params -> array initializer) to emit params argument instead
5302         of specialized handling.
5303         It was required by expression tree implementation and it has other benefits
5304         as well, we now apply same optimization for params arguments as we do for
5305         array initializers.
5306         
5307 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5308
5309         A fix for bug #353526
5310         * generic.cs: A type inference of params arguments may not required any
5311         temporary array creation.
5312         
5313 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5314
5315         A fix for bug #353534
5316         * generic.cs, ecore.cs, expression.cs: A method group type inference is
5317         supported for delegates only.
5318         
5319 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5320
5321         * generic.cs: Fixed 3.0 type inference fixing phase to determine a unique
5322         type for more than 1 candidates.
5323         
5324 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5325
5326         * typemanager.cs, ecore.cs, expression.cs: Implemented ArrayLength and Call
5327         expressions.
5328         
5329 2008-01-16  Marek Safar  <marek.safar@gmail.com>
5330
5331         * generic.cs, typemanager.cs, lambda.cs, parameter.cs, ecore.cs, constant.cs,
5332         expression.cs: Implemented Add, And, AndAlso, and ArrayIndex (without unary
5333         operator) expressions. 
5334                 
5335 2008-01-16  Zoltan Varga  <vargaz@gmail.com>
5336
5337         * statement.cs: Avoid declaring an IL variable for this_variable since it is
5338         not accessed from the generated IL.
5339
5340 2008-01-14  Marek Safar  <marek.safar@gmail.com>
5341
5342         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, class.cs, delegate.cs,
5343         iterators.cs, convert.cs, assign.cs, anonymous.cs, expression.cs,
5344         statement.cs: The first expression tree implementation drop, mostly
5345         infrastructure work.
5346
5347 2008-01-14  Marek Safar  <marek.safar@gmail.com>
5348
5349         * ecore.cs (IsNestedChild): Refactored.
5350
5351 2008-01-11  Marek Safar  <marek.safar@gmail.com>
5352
5353         * lambda.cs: Don't use a cast on unknown expression statement.
5354
5355 2008-01-10  Geoff Norton  <gnorton@novell.com>
5356
5357         * cs-tokenizer.cs: One more token to distinguish between method and lambda
5358         arguments
5359
5360 2008-01-09  Marek Safar  <marek.safar@gmail.com>
5361
5362         * doc.cs: Report better /doc crash details.
5363         
5364 2008-01-09  Marek Safar  <marek.safar@gmail.com>
5365
5366         A fix for bug #352536
5367         * ecore.cs, assign.cs, codegen.cs: Check event assignments.
5368
5369 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5370
5371         A fix for bug #352287
5372         * ecore.cs, expression.cs: Do `this' access checking in all member access
5373         expressions.
5374         
5375 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5376
5377         * rootcontext.cs, driver.cs: Switch to linq mode by default.
5378         
5379         * report.cs: Reset message stacks.
5380         
5381 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5382
5383         * generic.cs (InferInPhases): Correctly calculate params position.
5384         
5385 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5386
5387         * cs-tokenizer.cs: No need to parse full string when parsing lambda
5388         arguments.
5389
5390 2008-01-07  Marek Safar  <marek.safar@gmail.com>
5391
5392         * cs-tokenizer.cs: Enabled lambda arguments micro-parser for all profiles.
5393         
5394         * decl.cs (LookupNamespaceOrType): Don't cache names which caused an error.
5395         
5396         * driver.cs: Updated --help option.
5397         
5398 2008-01-07  Marek Safar  <marek.safar@gmail.com>
5399
5400         * generic.cs (InferParamsTypeArguments): Removed.
5401         (InferInPhases): Add params type inference.
5402         (LowerBoundInference): Fixed scoring mechanism.
5403         
5404         * cs-tokenizer.cs (PreProcessPragma): Use Location instead of line.
5405         
5406 2008-01-06  Gert Driesen  <drieseng@users.sourceforge.net>
5407
5408         * typemanager.cs: On 2.0 profile, GetPublicKeyToken returns an empty
5409         byte array for unsigned "baked" assemblies.
5410
5411 2008-01-05  Gert Driesen  <drieseng@users.sourceforge.net>
5412
5413         * codegen.cs: AssemblyName.GetPublicKey returns a zero-length byte
5414         array for assemblies that are not strongnamed.
5415
5416 2008-01-04  Marek Safar  <marek.safar@gmail.com>
5417
5418         A fix for bug #351481
5419         * expression.cs (MemberAccess.ResolveNamespaceOrType): Use correct
5420         declaring type for nested generic types.
5421         
5422 2008-01-04  Marek Safar  <marek.safar@gmail.com>
5423
5424         * namespace.cs, class.cs, decl.cs, cs-parser.jay: Use GetSignatureForError
5425         instead of ToString.
5426         
5427 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5428
5429         A fix for bug #351047
5430         * expression.cs (Binary.ResolveOperator): Allow equality operators between
5431         null and structs only when equality and inequality operators are defined
5432         either as an user-operators or predefined operators.
5433         
5434 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5435
5436         A fix for bug #351047
5437         * generic.cs, typemanager.cs, class.cs: New IsReferenceType helper method.
5438         
5439 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5440
5441         A fix for bug #351257
5442         * cs-tokenizer.cs: Advance line number for '\r' correctly.
5443         
5444 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5445
5446         A fix for bug #351157
5447         * class.cs (Using): Fixed yet another broken cloning.
5448         
5449         (Block): Put back more sensible default value for statements.
5450         
5451 2008-01-01  Gert Driesen  <drieseng@users.sourceforge.net>
5452
5453         * codegen.cs: Allow AssemblyVersion with only major version component.
5454         Fixes bug #351055.
5455
5456 2007-12-29  Marek Safar  <marek.safar@gmail.com>
5457
5458         A fix for bug #324654
5459         * class.cs: Use FullName property as member name.
5460
5461 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5462
5463         A fix for bug #342117
5464         * generic.cs (ConstraintChecker): Struct constraint also satisfies default
5465         constructor constraint.
5466
5467 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5468
5469         A fix for bug #338273
5470         * class.cs (ProbertyBase): Access modifier checks are required for overrides
5471         only.
5472
5473 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5474
5475         A fix for bug #350839
5476         * ecore.cs (MethodroupExpr): Probing hacks are no longer required.
5477
5478 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
5479
5480         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
5481         GHOP:
5482         
5483         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
5484
5485         * statement.cs: Changed some Hashtables to use HybridDictionaries
5486         instead. It was observed that some HashTables only contained a few
5487         items in the vast majority of cases. Since HybridDictionary is
5488         more efficient on small sets (<10 elements), "known_variables"
5489         from class ExplicitBlock as well as "labels" and "constants " from
5490         class Block were changed to HybridDictionaries. 
5491
5492         Atsai results: (56216kb->54987kb)
5493
5494         Miguel results (bootstrap of mcs): 59819kb -> 59290kb
5495
5496
5497 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
5498
5499         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
5500         GHOP:
5501         
5502         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
5503         
5504         * expression.cs: foreach loop to for loop, saved on allocation of
5505         enumerator (59333kb->59141kb)
5506
5507         * statement.cs. Changed foreach loops to for loops, saved on
5508         allocation of enumerator (59141kb->59006kb)
5509
5510         * decl.cs: ArrayLists in .NET 1.1 allocate 16 elements by default
5511         when constructed with no specified capacity. This was causing a
5512         few ArrayLists to allocate more memory than they would potentially
5513         need in the Block class and MemberCache class. Setting the
5514         ArrayLists to construct with a capacity of 1 saves some
5515         memory. (56216kb->55585kb)
5516
5517 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5518
5519         A fix for bug #347189 (2nd issue)
5520         * expression.cs (MemberAccess): Nested type can be found in base non-generic
5521         type.
5522
5523 2007-12-27  Miguel de Icaza  <miguel@novell.com>
5524         
5525         * report.cs: Do not use colors if stdout and stderr are not a
5526         terminal.
5527
5528 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5529
5530         A fix for bug #346998
5531         * ecore.cs (MethodGroupExpr): Implemented override filter for generic
5532         overloads.
5533
5534 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5535
5536         A fix for bug #343465
5537         * class.cs: Explicit method name for nested types uses dots only.
5538
5539 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5540
5541         A fix for bug #343707
5542         * cs-tokenizer.cs: Advance line number for mixed CR/LF files correctly.
5543
5544 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5545
5546         * ecore.cs: Report type inference errors only when arguments count matches
5547         parameter count.
5548         
5549         * generic.cs (NullCoalescingOperator): Cannot be applied to null.
5550         
5551         * expression.cs, report.cs: New warning.
5552         
5553         * typemanager.cs: Catch anonymous method type too.
5554
5555 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5556
5557         A fix for bug #346379
5558         * expression.cs (UnaryMutator): Emit size of type for pointer mutator.
5559
5560 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5561
5562         A fix for bug #347359
5563         * expression.cs (Invocation): Don't resolve already resolved expression.
5564
5565 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5566
5567         A fix for bug #347189
5568         * class.cs (FixedField): Use non-dependent code only in the define phase.
5569
5570 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5571
5572         A fix for bug #348076
5573         * ecore.cs (FieldExpr.DoResolve): Allow any variable based expression.
5574
5575 2007-12-22  Marek Safar  <marek.safar@gmail.com>
5576
5577         * ecore.cs (MethodGroupExpr.OverloadResolve): Set type arguments for
5578         discovered extension methods.
5579
5580 2007-12-22  Marek Safar  <marek.safar@gmail.com>
5581
5582         * ecore.cs, namespace.cs, expression.cs: Removed broken ResolveGeneric
5583         method.
5584
5585 2007-12-21  Miguel de Icaza  <miguel@novell.com>
5586
5587         * report.cs (ErrorMessage): Add support for using colors on
5588         terminals that support it. 
5589
5590 2007-12-21  Marek Safar  <marek.safar@gmail.com>
5591
5592         * ecore.cs: Use information about expanded params for error reporting.
5593
5594 2007-12-21  Marek Safar  <marek.safar@gmail.com>
5595
5596         * ecore.cs, generic.cs, delegate.cs: Refactoring of method overloading code
5597         and logic for params overloads.
5598         
5599 2007-12-15  Miguel de Icaza  <miguel@novell.com>
5600
5601         * generic.cs (NullCoalescingOperator.CloneTo): implement this one,
5602         as this is also created from the parser.  Fixes #349034
5603
5604 2007-12-12  Miguel de Icaza  <miguel@novell.com>
5605
5606         * statement.cs (Throw.CloneTo): it is valid to have empty
5607         expressions for throw. 
5608
5609 2007-12-03  Marek Safar  <marek.safar@gmail.com>
5610
5611         * cs-parser.jay: Set delegate constraint parsing region correctly.
5612
5613 2007-12-03  Marek Safar  <marek.safar@gmail.com>
5614
5615         A fix for bug #345467
5616         * typemanager.cs (IsEqual): Compare generic parameters position only.
5617         
5618 2007-11-28  Marek Safar  <marek.safar@gmail.com>
5619
5620         * expression.cs (BaseAccess): Type arguments can be null.
5621
5622 2007-11-27  Raja R Harinath  <harinath@gmail.com>
5623
5624         * statement.cs (Block.Resolve): Ensure flow-branching tree is
5625         consistent even when an error has occured.
5626         (Switch.Resolve): Likewise.
5627
5628 2007-11-22  Marek Safar  <marek.safar@gmail.com>
5629
5630         A fix for bug #334505
5631         * class.cs: Don't ignore InternalsVisibleTo attribute for internal
5632         overrides.
5633         
5634 2007-11-22  Marek Safar  <marek.safar@gmail.com>
5635
5636         * ecore.cs, typemanager.cs, delegate.cs, expression.cs: The first of 
5637         refactorings required to resolve extension methods correctly when mixing
5638         generics and non-generics members.
5639         
5640 2007-11-20  Marek Safar  <marek.safar@gmail.com>
5641
5642         A fix for bug #342584
5643         * convert.cs: Added not documented explicit IntPtr/UIntPtr to enum
5644         conversion.
5645         
5646 2007-11-19  Marek Safar  <marek.safar@gmail.com>
5647
5648         A fix for bug #342512
5649         * delegate.cs: Use delegate argument expression when is available. Don't
5650         emit virtual call when class is sealed.
5651         
5652 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5653
5654         A fix for bug #325423
5655         * assign.cs (FieldInitializer): Use resolved expression for emit.
5656         
5657         * class.cs: Print less confusing error message.
5658         
5659 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5660
5661         * cs-tokenizer.cs: Removed GMCS ifdefs.
5662         
5663         * rootcontext.cs, report.cs: Report unavailable gmcs features used by
5664         mcs.
5665         
5666         * cs-parser.jay: Disabled nullable check.
5667         
5668         * generic-mcs: Copied more generic stuff.
5669                 
5670 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5671
5672         * gcs-parser.jay: Merged to cs-parser.jay.
5673         
5674         * generic.cs, typemanager.cs, cs-tokenizer.cs, linq.cs, Makefile
5675         * *.csproj, *.sources: Updated to use only jay parser file.
5676
5677 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5678
5679         * gcs-parser.jay: Added nullable and default expression feature checks.
5680         
5681 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5682
5683         * gcs-parser.jay, cs-parser.jay, class.cs: Unified parameters parsing, 
5684         it fixes many TODOs and hidden bugs.
5685         
5686         * expression: Removed duplicate error check.
5687
5688 2007-11-15  Marek Safar  <marek.safar@gmail.com>
5689
5690         * gcs-parser.jay, statement.cs, decl.cs, ecore.cs: Try to resolve an
5691         implicitly type local variable only when it is used in a declaration.
5692
5693 2007-11-15  Marek Safar  <marek.safar@gmail.com>
5694
5695         * attribute.cs: Use CS0612 for empty strings.
5696
5697 2007-11-14  Marek Safar  <marek.safar@gmail.com>
5698
5699         * lambda.cs, statement.cs: Contextual return may act as a statement.
5700
5701 2007-11-14  Marek Safar  <marek.safar@gmail.com>
5702
5703         A fix for a regression cause by #324222
5704         * class.cs: Don't report unused even when it implements an interface.
5705         
5706 2007-11-13  Marek Safar  <marek.safar@gmail.com>
5707
5708         A fix for bug #341205
5709         * ecore.cs, expression.cs: Method group expression cannot do static
5710         method access with an instance reference check before overloading takes
5711         a place.
5712         
5713 2007-11-13  Marek Safar  <marek.safar@gmail.com>
5714
5715         A fix for bug #325359
5716         * class.cs: Use predictable name for automatically generated property.
5717         
5718 2007-11-12  Marek Safar  <marek.safar@gmail.com>
5719
5720         A fix for bug #324996
5721         * expression.cs (Is): Handle case where D is nullable and T is not
5722         correctly.
5723         
5724         * generics.cs (Nullable.HasValue): Nullable HasValue expression.
5725         
5726 2007-11-12  Marek Safar  <marek.safar@gmail.com>
5727
5728         * generic.cs, literal.cs, ecore.cs, class.cs, delegate.cs, const.cs,
5729         anonymous.cs, expression.cs, attribute.cs, codegen.cs, statement.cs:
5730         Flush small error reporting changes.
5731         
5732 2007-11-09  Marek Safar  <marek.safar@gmail.com>
5733
5734         A fix for bug #324996
5735         * expression.cs: Rewrote Is expression implementation to work with
5736         generics, nullable types, anonymous method. A const result expression 
5737         uses existing infrastructure instead of custom not fully-featured one.
5738         
5739 2007-11-08  Marek Safar  <marek.safar@gmail.com>
5740
5741         A fix for bug #340202
5742         * class.cs: Consider generics for volatile field.
5743
5744 2007-11-08  Marek Safar  <marek.safar@gmail.com>
5745
5746         A fix for bug #335594
5747         * expression.cs: Use conversion rules when handling string addition.
5748         
5749 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5750
5751         A fix for bug #336651
5752         * expression.cs: Fixed a crash when probing is on.
5753         
5754 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5755
5756         A fix for bug #324242
5757         * covert.cs: Added a conversion from any nullable-type with an 
5758         underlying enum-type to the type System.Enum.
5759         
5760 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5761
5762         A fix for bug #324222
5763         * class.cs: Report all non-used event fields.
5764         
5765 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5766
5767         A fix for bug #325161
5768         * cs-parser.jay, gcs-parser.jay, decl.cs: Implemented namespace alias
5769         qualifier for generic types.
5770         
5771 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5772
5773         A fix for bug #322971
5774         * expression.cs, ecore.cs: Added intermediate result value check for
5775         indexers. 
5776         
5777 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5778
5779         A fix for bug #324754
5780         * cs-parser.jay, gcs-parser.jay, class.cs: Try to create an interator
5781         when it was requested.
5782
5783 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5784
5785         A fix for bug #325101
5786         * expression.cs: Do type not value comparison for `is' expression.
5787
5788 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5789
5790         A fix for bug #320236
5791         * convert.cs: Don't apply user conversion on underlying target type.
5792
5793 2007-11-06  Marek Safar  <marek.safar@gmail.com>
5794
5795         * expression.cs: Don't use unresolved expression for error reporting.
5796  
5797 2007-11-06  Marek Safar  <marek.safar@gmail.com>
5798
5799         A fix for bugs #337712, #324490
5800         * ecore.cs (MethodGroupExpr): Refactored to handle delegate method
5801         overloading resolution too.
5802         
5803         * delegate.cs: Uses MethodGroupExpr for overloading resolution. It makes
5804         the process consistent and more robust.
5805         
5806         * expression.cs, linq.cs, report.cs: Update.
5807
5808 2007-11-02  Marek Safar  <marek.safar@gmail.com>
5809
5810         A fix for bug #332909
5811         * attribute.cs: Resolve attributes in correct context using error
5812         handling procedure.
5813         
5814         * rootcontext.cs: Define Obsolete attribute members as core members.
5815         
5816 2007-11-02  Marek Safar  <marek.safar@gmail.com>
5817
5818         * statement.cs: Removed unused methods.
5819         
5820 2007-10-31  Wade Berrier  <wberrier@novell.com>
5821
5822         * Makefile:  reenable copy of gmcs.exe.config, but include it in EXTRA
5823         DIST (it doesn't get included because PROGRAM isn't defined to be gmcs
5824         during 'make dist')
5825
5826 2007-10-31  Marek Safar  <marek.safar@gmail.com>
5827
5828         A fix for bug #338102
5829         * decl.cs (CheckExistingMembersOverloads): Workaround issue with generic
5830         methods registered as non-generics.
5831         
5832 2007-10-31  Marek Safar  <marek.safar@gmail.com>
5833
5834         A fix for bugs #337712, #324490
5835         * delegate.cs: Delegate covariance and contravariance is not allowed for
5836         value types.
5837         
5838 2007-10-31  Marek Safar  <marek.safar@gmail.com>
5839
5840         A fix for bug #337719 
5841         * cs-tokenizer.cs: Restore identifier buffer when parsing contextual
5842         `from' keyword.
5843         
5844 2007-10-30  Marek Safar  <marek.safar@gmail.com>
5845  
5846         * Makefile (net_2_0_bootstrap/mcs.exe.config): Reverted copy gmcs.exe.config.
5847
5848 2007-10-29  Marek Safar  <marek.safar@gmail.com>
5849  
5850         * cs-tokenizer.cs, gcs-parser.jay, driver.cs: Fixed parsing of nested
5851         query expressions.
5852
5853 2007-10-29  Raja R Harinath  <rharinath@novell.com>
5854
5855         * Makefile (net_2_0_bootstrap/mcs.exe.config): Copy gmcs.exe.config.
5856
5857 2007-10-29  Marek Safar  <marek.safar@gmail.com>
5858  
5859         A fix for bug #334652
5860         * ecore.cs (MethodGroupExpr.OverloadResolve): Do also lookup for
5861         extension methods when we have not found the best candidate in normal
5862         container.
5863
5864 2007-10-27  Marek Safar  <marek.safar@gmail.com>
5865
5866         * AssemblyInfo.cs: Keep up-to-date.
5867
5868 2007-10-27  Marek Safar  <marek.safar@gmail.com>
5869
5870         * Makefile: Fixed generics compiler name.
5871         
5872 2007-10-27  Marek Safar  <marek.safar@gmail.com>
5873
5874         * lambda.test: removed, lambda parsing is done differently.
5875         
5876         * gen-il.cs, gen-treedump.cs, old-code.cs : Obsolete.
5877
5878 2007-10-27  Gert Driesen  <drieseng@users.sourceforge.net>
5879
5880         * Makefile: Removed dependency on gmcs.exe.config. Fixes build.
5881
5882 2007-10-27  Marek Safar  <marek.safar@gmail.com>
5883
5884         * Makefile, *.sources : All C# compilers are in mcs folder.
5885         
5886         * *.cs: Use existing 2_1 define for smcs.
5887
5888 2007-10-26  Marek Safar  <marek.safar@gmail.com>
5889
5890         A fix for bug #335847
5891         * assign.cs, expression.cs: Couple of changes to avoid creating a
5892         temporary variable for each object initializer assignment statement. It
5893         simplifies struct initialization too, otherwise two temporary variables
5894         would be required.
5895         Implemented optimization of redundant default element initializers.
5896         
5897 2007-10-25  Marek Safar  <marek.safar@gmail.com>
5898
5899         A fix for bug #336766
5900         * expression.cs (Class.CheckBase): Use generic name when method is
5901         generic.
5902         
5903 2007-10-25  Marek Safar  <marek.safar@gmail.com>
5904
5905         A fix for bug #334737
5906         * expression.cs (IndexerAccess.EmitAssign): Emit local temporary
5907         variable and not variable argument for prepared copies.
5908
5909 2007-10-24  Marek Safar  <marek.safar@gmail.com>
5910
5911         A fix for bug #325110
5912         * class.cs, expression.cs, attribute.cs: Use open generic method when
5913         checking conditional attribute.
5914         
5915 2007-10-24  Marek Safar  <marek.safar@gmail.com>
5916
5917         * report.cs, cs-tokenizer.cs, class.cs, cs-parser.jay, anonymous.cs, 
5918         expression.cs, statement.cs: Renamed method FeatureIsNotISO to
5919         FeatureIsNotAvailable.
5920
5921 2007-10-24  Marek Safar  <marek.safar@gmail.com>
5922
5923         ** C# 3.0 Partial methods
5924         
5925         * cs-tokenizer.cs, support.cs, class.cs, decl.cs: Implemented partial
5926         methods support. Because of member cache issue with generics only
5927         non-generics partial methods are fully supported.
5928         
5929 2007-10-23  Marek Safar  <marek.safar@gmail.com>
5930         
5931         * class.cs, decl.cs: Rewrote member overloads check to cope with 
5932         generics and to use member cache for member checking. It also improves
5933         performance and fixes remaining overloads issues.
5934         
5935 2007-10-20  Marek Safar  <marek.safar@gmail.com>
5936         
5937         * class.cs, const.cs, decl.cs, delegate.cs, enum.cs, generic.cs,
5938         roottypes.cs, typemanager.cs:
5939                 
5940         A member cache creation logic changed to add members immediately and
5941         not rely on fallback. The member cache is now only prefered way
5942         how to access and find type declaration members. It saves 5 MB of memory
5943         during MWF compilation and makes code ready for more optimizations and
5944         clean-ups, it's also a pre-requirement for partial methods.
5945         
5946 2007-10-18  Raja R Harinath  <harinath@gmail.com>
5947
5948         * ecore.cs (Expression.Error_ValueCannotBeConverted): Add special
5949         handling for generic parameters.
5950
5951 2007-10-15  Marek Safar  <marek.safar@gmail.com>
5952         
5953         * class.cs (FixedField): Removed redundant volatile check.
5954         
5955 2007-10-15  Marek Safar  <marek.safar@gmail.com>
5956         
5957         * class.cs, decl.cs: Fixed overload members verification to do only one
5958         check per possible collision.
5959         
5960 2007-10-13  Marek Safar  <marek.safar@gmail.com>
5961         
5962         A fix for bug #325478
5963         * anonymous.cs (AnonymousContainer.Compatible): Merge are flags together
5964         and create only one disposable flags container.
5965         
5966 2007-10-12  Marek Safar  <marek.safar@gmail.com>
5967         
5968         A fix for bug #332442 by Alexandre Gomes <alexmipego@gmail.com>
5969         * statement.cs (Fixed): Fixed variables cloning.
5970         
5971 2007-10-12  Marek Safar  <marek.safar@gmail.com>
5972         
5973         A fix for bug #333342
5974         * class.cs (EventField): Don't mark value type event as synchronized. 
5975         
5976 2007-10-12  Marek Safar  <marek.safar@gmail.com>
5977         
5978         * ecore.cs, anonymous.cs (MethodGroupExpr): Use score from type
5979         inference to identify best candidate method correctly.
5980         (ProperyExpr): A range variable is read only and cannot be modified.
5981         
5982 2007-10-11  Marek Safar  <marek.safar@gmail.com>
5983         
5984         * ecore.cs, delegate.cs (MethodGroupExpr): Refactored best candidate
5985         logic to identify best candidate method correctly.
5986         
5987 2007-10-11  Marek Safar  <marek.safar@gmail.com>
5988         
5989         * location.cs (Equals, GetHashCode): Removed.
5990         
5991 2007-10-11  Marek Safar  <marek.safar@gmail.com>
5992         
5993         * report.cs: Implemented message recorder. It is used mainly for lambda
5994         expressions to capture otherwise swallowed error messages.
5995         
5996         * anonymous.cs, lambda.cs.cs: Do full parameters check.
5997
5998         * ecore.cs (ExtensionMethodGroup): Report binding failure at the botton
5999         and not at the top.
6000         (MethodGroupExpr.DoResolve): Use message recorder for error handling.
6001                 
6002         * expression.cs (MemberAccess): Always report lookup failure.
6003         
6004         * location.cs: Implemented Equals, GetHashCode.
6005         
6006         * statement.cs (Return.DoResolve): Fixed hardcoded error argument.
6007         
6008 2007-10-10  Jb Evain  <jbevain@novell.com>
6009
6010         * codegen.cs: re-enable assembly version check.
6011
6012 2007-10-09  Marek Safar  <marek.safar@gmail.com>
6013         
6014         * report.cs, anonymous.cs, driver.cs, expression.cs: Added few ISO-2
6015         checks.
6016         
6017         * namespace.cs (UsingAlias): Do correct version check.
6018         
6019 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6020         
6021         * expresison.cs, ecore.cs: Issue extension method error message when
6022         appropriate.
6023         
6024         * rootcontext.cs: Added ISO_2 compiler mode option.
6025
6026 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6027         
6028         * expresison.cs (UnaryMutator.ResolveOperator): Print more useful error
6029          message.
6030         
6031 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6032         
6033         * attribute.cs (GetString, GetBoolean): Work with both literal and
6034         constant.
6035         
6036         * ecore.cs, expresison.cs, delegate.cs (Invocation, MethodGroupExpr):
6037         Moved method overload specific methods to MethodGroupExpr.
6038         
6039         (IndexerAccess): Re-wrote resolving mechanism, fixed many issues and
6040         it should be less memory consuming.
6041         
6042 Mon Oct 8 09:29:15 CEST 2007 Paolo Molaro <lupus@ximian.com>
6043
6044         * codegen.cs: remove the assembly version check until the buildbot is
6045         fixed.
6046
6047 2007-10-07  Jb Evain  <jbevain@novell.com>
6048
6049         * attribute.cs (Attribute.GetString): if the value
6050         expression is a StringConstant, return its string value.
6051
6052 2007-10-07  Jb Evain  <jbevain@novell.com>
6053
6054         * typemanager.cs: add `assembly_version_attribute_type`.
6055         * codegen.cs: on attribute emission, check that the
6056         AssemblyVersionAttribute doesn't overflow.
6057
6058 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6059         
6060         A fix for bug #324677
6061         * anonymous.cs, decl.cs: Yes another anonymous container hack. Overwrite
6062         parent container of a scope container with currently resolved one. 
6063         
6064 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6065         
6066         A fix for bug #325534
6067         * class.cs (Invocation.DoResolve): Check invocation of object finalizer
6068         only.
6069         
6070 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6071         
6072         A fix for bug #327504
6073         * class.cs (Operator.Define): Refactored implicit and explicit user
6074         operator conversion rules.
6075         
6076 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6077         
6078         A fix for bug #327520
6079         * ecore.cs (ExtensionMethodGroupExpr): Emit resolved extension argument.
6080         
6081 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6082         
6083         A fix for bug #328022
6084         * class.cs (MethodData.Define): Use correct method to check whether
6085         a method implementents an accessor.
6086         
6087 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6088         
6089         A fix for bug #330069
6090         * statement.cs (Fixed.Resolve): Read the first array element only when
6091         an array is instantiated. 
6092         
6093 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6094         
6095         * expression.cs, assign.cs, generics.cs: Print correct operator when
6096         compound assignment is used.
6097         
6098 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6099         
6100         A fix for bug #325841
6101         * expression.cs (ArrayAccess): Use full argument cloning only for
6102         string compound concatenation.
6103         
6104 2007-10-03  Marek Safar  <marek.safar@gmail.com>
6105         
6106         A fix for bug #328774
6107         * ecore.cs (FieldExpr.EmitAssign): Fixed string concatenation compound
6108         assignment.
6109         (PropertyExpr.EmitAssign): Fixed string concatenation compound
6110         assignment.
6111
6112 2007-10-03  Raja R Harinath  <rharinath@novell.com>
6113
6114         Fix #328490
6115         * ecore.cs (SimpleName.DoSimpleNameResolve): Handle Property and
6116         Event accessibility checks here.  Remove some bogus code that
6117         accidently made GenericMethods work.
6118         (PropertyExpr.IsAccessibleFrom, EventExpr.IsAccessibleFrom): New.
6119
6120 2007-09-25  Marek Safar  <marek.safar@gmail.com>
6121         
6122         * expression.cs (ArrayCreation): Fixed cloning of an implicit types.
6123         
6124         * statement.cs (Block): Refactored AddVariable to allow error handling
6125         customization.
6126         
6127         * generic.cs: New stub.
6128         
6129 2007-09-23  Marek Safar  <marek.safar@gmail.com>
6130         
6131         * anonymous.cs, codegen.cs: Changed InferReturnType to be EmitContext
6132         flag.
6133         
6134 2007-09-17  Marek Safar  <marek.safar@gmail.com>
6135
6136         * class.cs: Use partial container to record whether any partial part
6137         contains static field initializer and therefore default contructor has
6138         to be defined.
6139         
6140 2007-09-14  Marek Safar  <marek.safar@gmail.com>
6141
6142         * class.cs (TypeContainer.AddPartial): Fixed an issue reported on
6143         mono-list when only one of two partial parts has defined accessibility
6144         modifier.
6145         
6146 2007-09-14  Marek Safar  <marek.safar@gmail.com>
6147
6148         A fix for bug #82845
6149         
6150         * class.cs (TypeContainer): Set correct resolve context for all field
6151         initializers.
6152         
6153 2007-09-13  Marek Safar  <marek.safar@gmail.com>
6154
6155         * assign.cs: Fixed a crash when field is resolved twice with an error.
6156         
6157         * codegen.cs: Changed InFieldInitializer to be flag.
6158         
6159         * anonymous.cs, ecore.cs, expression.cs: Update after
6160         IsInFieldInitializer rename.
6161         
6162         * const.cs: Removed unused parameter.
6163         
6164         * class.cs: Changed the way how we resolve and emit field initializers.
6165         The field initilizers have to have access to contructor block to emit
6166         compiler generated code.
6167
6168 2007-09-13  Marek Safar  <marek.safar@gmail.com>
6169
6170         * expression.cs (MemberAccess.DoResolve): DeclSpace is broken by
6171         generics use TypeContainer instead.
6172         
6173 2007-09-12  Marek Safar  <marek.safar@gmail.com>
6174         
6175         * generic.cs (TypeInferenceContext.InflateGenericArgument): Stub.
6176
6177         * lambda.cs (ResolveParameters): Use more powerful
6178         InflateGenericArgument.
6179         
6180         * parameters.cs: Better exception message.
6181                 
6182 2007-09-10  Marek Safar  <marek.safar@gmail.com>
6183
6184         * anonymous.cs (AnonymousMethodExpression.CompatibleChecks): Report
6185         correct expression block type. 
6186         
6187         * ecore.cs (Expression.Error_MemberLookupFailed): Made virtual.
6188         
6189         * expression.cs (Invocation): Extracted method group resolve to
6190         DoResolveOverload.
6191         
6192 2007-09-07  Marek Safar  <marek.safar@gmail.com>
6193
6194         * ecore.cs (Expression.MemberLookupFinal): Removed unused loc parameter.
6195         (MethodGroupExpr.ResolveGeneric): Use existing method group instance.
6196         
6197         * expression.cs (MemberAccess.DoResolve): Uses generic resolver for
6198         generic extension methods.
6199
6200 2007-09-06  Marek Safar  <marek.safar@gmail.com>
6201
6202         A fix for bug #82676 (Do I get it right now?)
6203         * convert.cs (Binary.ResolveOperator): An interface is converted to the
6204         object before a standard conversion is applied.
6205         
6206 2007-09-06  Marek Safar  <marek.safar@gmail.com>
6207
6208         * convert.cs (ImplicitReferenceConversionCore): Reverted wrong fix of
6209         #82676.
6210         
6211 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6212
6213         A fix for bug #82676
6214         * convert.cs (ImplicitReferenceConversionCore): Check both sides for
6215         non-generic interface types.
6216         
6217 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6218
6219         A fix for bug #82690
6220         * ecore.cs (PropertyExpr.EmitAssign): Leave a copy does just that.
6221         
6222 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6223
6224         A fix for bug #82571
6225         * anonymous.cs (AnonymousMethod.DoCreateMethodHost): Use internal 
6226         modifier for container based methods.
6227         
6228 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6229
6230         A fix for bug #82676
6231         * convert.cs (ImplicitReferenceConversionCore): From any class-type S to
6232         any interface-type T means to any of interface type T.
6233
6234 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6235
6236         * namespace.cs: We have 2 versions of System.Core assembly.
6237
6238 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6239
6240         A fix for bug #82652
6241         * class.cs (Class.GetClassBases): Compare types and not expressions.
6242
6243 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6244
6245         A fix for bug #82620
6246         * expression.cs (Invocation.EmitArguments): Duplicate params arguments
6247         actually never worked before.
6248         (IndexerAccess): Emit prepared arguments before they are modified.
6249         
6250 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6251
6252         A fix for bug #82563
6253         * assign.cs: Revert wrong fix.
6254         
6255         * expression.cs (VariableReference.EmitAssign): Handle ref reference
6256         correctly.
6257         (ArrayAccess): Changed the way we emit compound (prepared) assignments.
6258         Instead of ldelema/stdind we have to use temporary variables to handle
6259         cases like String.Concat (params string[]).
6260         
6261 2007-08-31  Marek Safar  <marek.safar@gmail.com>
6262
6263         * class.cs: EmitAttributes to Emit rename.
6264         
6265         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Parent can be
6266         null.
6267         (MemberCore.HasClsCompliantAttribute): Don't depend on 
6268         GetClsCompliantAttributeValue execution.
6269         
6270 2007-08-31  Marek Safar  <marek.safar@gmail.com>
6271
6272         * anonymous.cs: Use shorter type prefix.
6273         
6274         * ecore.cs (SimpleName.DoSimpleNameResolve): Use transparent identifiers
6275         when exist.
6276         
6277         * expression.cs (LocalVariableReference.DoResolveBase): Don't capture
6278         variables when probing is on.
6279         
6280         * statement.cs (LocaLInfo.Clone): Clone correctly resolved and 
6281         unresolved variables.
6282         (TopLevelBlock.GetTransparentIdentifier): Default implementation doesn't
6283         handle transparent identifiers.
6284         
6285 2007-08-26  Marek Safar  <marek.safar@gmail.com>
6286
6287         * attribute.cs (IsClsCompliant): Add nullable types test.
6288         
6289 2007-08-24  Atsushi Enomoto  <atsushi@ximian.com>
6290
6291         * doc.cs : catch other types of exception than XmlException to
6292           report CS1570. Fixed bug #82565.
6293
6294 2007-08-23  Marek Safar  <marek.safar@gmail.com>
6295
6296         * anonymous.cs (AnonymousMethodExpressin.ExplicitTypeInference): 
6297         The number of delegate parameters has to match.
6298         (AnonymousMethodExpressin.VerifyParameterCompatibility): Handles generic
6299         arrays.
6300
6301 2007-08-21  Marek Safar  <marek.safar@gmail.com>
6302
6303         * anonymous.cs (AnonymousMethod): Generate private anonymous method
6304         to fix problem with private arguments.
6305
6306 2007-08-20  Marek Safar  <marek.safar@gmail.com>
6307
6308         * anonymous.cs (AnonymousTypeClass): An anonymous type can be empty.
6309         
6310         * decl.cs (MemberName): Ignore generic type with no generic arguments. 
6311         
6312         * expression.cs (AnonymousTypeDeclaration): An anonymous type can be
6313         empty. Add cloning suport.
6314         
6315         * roottypes.cs (GetAnonymousType): Fixed argument comparison logic.
6316
6317 2007-08-20  Marek Safar  <marek.safar@gmail.com>
6318
6319         * convert.cs, ecore.cs, expression.cs, literal.cs: Use factory method 
6320         to create EmptyCast. It handles EmptyConstantCast specialization for
6321         constants.
6322         
6323 2007-08-18  Marek Safar  <marek.safar@gmail.com>
6324
6325         * expression.cs (Binary.is_unsigned): Handle unsafe types too.
6326         (EmitArrayArgument): One routine for array arguments.
6327         (ArrayCreation.MakeByteBlob): Fixed an array alignment. 
6328         
6329 2007-08-17  Marek Safar  <marek.safar@gmail.com>
6330
6331         * cs-tokenizer.cs (GetKeyword): Handle from keyword in a different way.
6332
6333 2007-08-17  Marek Safar  <marek.safar@gmail.com>
6334
6335         * anonymous.cs: MemberLookupFinal update.
6336
6337         * class.cs (ConstructorInitializer): Is expression based.
6338         
6339         * delegate.cs: MethodGroupExpr update.
6340         
6341         * ecore.cs  (Error_MemberLookupFailed): Improved to report better error
6342         messages.
6343         (Error_MemberLookupFailed): Customizable error override.
6344         (MethodGroupExpr): Keep queried type for later usage.
6345         (MethodGroupExpr.OverloadResolve): Catch errors related to overload
6346         resolve.
6347         
6348         * expression.cs: Error_MemberLookupFailed refactoring.
6349         (New.DoResolve): Resolve as much as possible.
6350         (ElementInitializer.Error_MemberLookupFailed): Object initializer
6351         customization for invalid member types.
6352
6353         * statement.cs: MethodGroupExpr update.
6354         
6355 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6356
6357         * modifier.cs (Check): Check all modifiers and not only accessibility
6358         ones.
6359
6360 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6361
6362         * ecore.cs (Expression.Error_ValueCannotBeConverted): Report always a
6363         type and not an expression.
6364
6365 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6366
6367         * statement.cs (Catch.Clone): Type and variable can be null.
6368
6369 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6370
6371         A fix for bug #81979
6372         * assign.cs (Assign.Emit): Prepare arguments for string concatenation.
6373         I am really not sure whether this is the best fix.
6374         
6375         * expression.cs (VariableReference.EmitAssign): Do prepare_load test
6376         only once.
6377         
6378 2007-08-14  Marek Safar  <marek.safar@gmail.com>
6379
6380         ** C# 3.0 Object and collection initializers (major re-write)
6381         
6382         * assign.cs (DoResolve): Initializers are not assign related.
6383         
6384         * codegen.cs (EmitContext.CurrentInitializerVariable): Holds a varible
6385         used during collection or object initialization.
6386         
6387         * expression.cs (Error_InvalidArguments): Add initializers specific
6388         messages. More will come later because it requires some general
6389         refactoring.
6390         (New.DoResolve): Better error handling for unsafe types.
6391         (EmptyExpressionStatement): New class.
6392         (ElementInitializer): An object initializer expression.
6393         (CollectionElementInitializer): A collection initializer expression.
6394         (CollectionOrObjectInitializers): A block of object or collection
6395         initializers.
6396         (NewInitialize): New expression with element/object initializers.
6397         
6398         * statement.cs: Reverted object/collection initializer hacks.
6399         
6400         * typemanager.cs (CSharpName): Filter __arglist type.
6401         
6402 2007-08-09  Marek Safar  <marek.safar@gmail.com>
6403
6404         ** C# 3.0 Anonymous Types (update to the latest standard)
6405         
6406         * expression.cs (Binary.ResolveOperator): Threat all null based types
6407         same.
6408         (AnonymousTypeDeclaration): Renamed from AnonymousType and simplified.
6409         (AnonymousTypeParameter): Updated.
6410         
6411         * anonymous.cs (CompilerGeneratedClass): Add custom name overload.
6412         (AnonymousTypeClass): New anonymous type container.
6413         
6414         * class.cs (AddField): Return operation result.
6415         
6416         * generic.cs: Another empty TypeArguments overload.
6417         
6418         * roottypes.cs (AddAnonymousType, GetAnonymousType): Anonymous types
6419         are stored at top of normal hierarchy.
6420         
6421         * typemanager.cs (CSharpName): Filter anonymous types.
6422         
6423 2007-08-09  Marek Safar  <marek.safar@gmail.com>
6424
6425         * expression.cs (StringConcat.Append): Handle 3 and more concatenation
6426         as single Concat call. How could we miss that :-(
6427         
6428 2007-08-08  Marek Safar  <marek.safar@gmail.com>
6429
6430         * expression.cs (ArrayCreation.CloneTo): Allocate exact size.
6431         
6432 2007-08-07  Miguel de Icaza  <miguel@novell.com>
6433
6434         * expression.cs: Fix the previous commit, the creation of the
6435         arguments array list needs also to be conditional on the arguments
6436         not being null.
6437
6438         * class.cs: Add a little bit of help to help narrow down problems.
6439
6440         * expression.cs (ArrayCreation.CloneTo): Argument can be null, do
6441         not try to copy in that case. 
6442
6443         * driver.cs: When building SMCS, include a new different set of
6444         default assemblies here.   Do this here so we can control whether
6445         to include the default assemblies with /noconfig.
6446
6447 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6448
6449         A fix for bug #81979
6450         * expression.cs (TypeOf.GetAttributableValue): Check for type arguments
6451         only.
6452
6453 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6454
6455         A fix for bug #82300
6456
6457         * anonymous.cs (AnonymousContainer.Define): Don't define anything when
6458         we are in probing scope.
6459
6460 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6461
6462         A fix for bug #82301
6463
6464         * statement.cs (Catch.CloneTo): Clone blocks in the right order.
6465         (Statement.CloneTo): Clone and not map children blocks.
6466
6467 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6468
6469         A fix for bug #82299
6470
6471         * expression.cs (LocalVariableReference.CloneTo): Remap local info
6472         variable too.
6473         
6474         * statement.cs (Statement.CloneTo): Clone variables before statements
6475         to allow remaping of local variables.
6476
6477 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6478
6479         A fix for bug #82296
6480
6481         * anonymous.cs,
6482         * report.cs: Log crash details for future clone problems.
6483         
6484         * statement.cs (Return.Clone): Don't clone non-existent expression.
6485
6486 2007-08-03  Raja R Harinath  <harinath@gmail.com>
6487
6488         * class.cs (TypeContainer.AddBasesForPart): Make virtual.
6489         (Class.AddBasesForPart): Move CS0537 check here from ...
6490         * cs-parser.jay (class_declaration): ... here.  Move calling of
6491         'AddBasesForPart' to ...
6492         (class_bases): ... here.
6493         (struct_declaration, interface_declaration): Update to changes.
6494
6495 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6496
6497         A fix for bug #81923
6498
6499         * statement.cs (Using.ResolveLocalVariableDecls): Only non-user implicit
6500         conversion is allowed.
6501
6502 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6503
6504         A fix for bug #81564
6505
6506         * ecore.cs (EventExpr): Add IsBase handling.
6507
6508         * expression.cs (BaseAccess.CommonResolve): Events can use base accessor
6509         too.    
6510         
6511 2007-08-02  Raja R Harinath  <harinath@gmail.com>
6512
6513         Reduce some differences between cs-parser.jay in mcs/ and gmcs/.
6514         * cs-parser.jay: Some whitespace cleanups.
6515         (current_delegate): New.
6516         (type_name): New.
6517         (struct_declaration): Make similar to gmcs/cs-parser.jay -- add
6518         a dummy code block, and use 'type_name' instead of 'member_name'.
6519         (interface_declaration, class_declaration): Likewise.
6520         (delegate_declaration): Likewise.  Rearrange slightly and use
6521         'current_delegate'.
6522         * cs-tokenizer.cs (handle_where): Rename from handle_constraints.
6523         (GetKeyword): Update to change.  Use '!foo' instead of 'foo == false'.
6524
6525 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6526
6527         A fix for bug #82039
6528
6529         * ecore.cs (TypeLookup.GetSignatureForError): Use name when type is not
6530         available.
6531
6532         * typemanager.cs (CSharpName): Split to string overload.
6533
6534 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6535
6536         * expression.cs,
6537         * report.cs: Updated warning CS0472.
6538
6539 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6540
6541         A fix for bug #82181
6542         * cs-parser.jay,
6543         * cs-tokenizer.cs: Ignore partial keyword inside block expression.
6544
6545 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6546
6547         A fix for bug #82277
6548         * statememnt.cs (Block.Clone): Don't clone explicit blocks twice.
6549
6550 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6551
6552         ** C# 3.0 Type Inference (major bits are working)
6553         
6554         * anonymous.cs (AnonymousMethodExpression): Removed refactored fields.
6555         (.ImplicitStandardConversionExists): Uses compatible.
6556         (.ExplicitTypeInference): Infers type arguments based on explicit arguments
6557         (.InferReturnType): New method.
6558         (.Compatible): Refactored.
6559         (.ResolveParameters): Uses factory to create resolved parameters.
6560         (.CompatibleMethod): Add probing mode support.
6561         (AnonymousContainer): Removed unused fields. Split Define and Resolve to
6562         clearly distinguish between 2 different operations.
6563         (LambdaMethod): Moved to lambda.cs.
6564         (AnonymousMethod): Removed unused fields and methods.
6565         (AnonymousDelegate): Simplified.
6566         
6567         * codegen.cs (ResolveTopBlock): Updated renamed Resolve to Define.
6568         
6569         * convert. cs (ImplicitConversionStandard): Compatible works differently.
6570         
6571         * delegate.cs (Delegate): New mehods to reduce code duplication.
6572         (.GetConstructor): New method.
6573         (.GetInvokeMethod): New method.
6574         (DelegateCreation): Updated.
6575         
6576         * ecore.cs (ResolveOverloadExtensions): Don't crash when extension method
6577         does not exist.
6578         (OverloadResolve): Made probing little bit faster.
6579         
6580         * expression.cs (ParameterReference.DoResolveLValue): Reference can be null
6581         when probing is on.
6582         
6583         * generic.cs (TypeInferenceContext): Dummy implementation.
6584         
6585         * iterators.cs: Updated after Resolve/Define rename.
6586         
6587         * lambda.cs (LambdaExpression)
6588         (.ResolveParameters): Handles both type of arguments and type inference too.
6589         
6590         * parameter.cs (ImplicitLambdaParameter.Resolve): Sanity check.
6591         (InflateTypes): Updated.
6592         
6593         * support.cs (InflateTypes): Changed signature and updated.
6594         
6595         * typemanager.cs (LookupMemberCache): Better dynamic type check.
6596         (MemberLookup_FindMembers): More MS tricks.
6597         (GetParameterData): Ditto.
6598         (GetDelegateParameters): Uses quick path for dynamic types.
6599         
6600 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6601
6602         * class.cs (MethodData.Define): EmitContext is required for generic stuff
6603         only.
6604
6605 2007-07-31  Marek Safar  <marek.safar@gmail.com>
6606
6607         * statement.cs (ProcessParameters): Don't crash when parameters have wrong
6608         syntax.
6609         
6610 2007-07-26  Jb Evain  <jbevain@novell.com>
6611
6612         * typemanager.cs (TypeManager.GetConstructor): Add a method overload
6613         which takes a boolean 'report_errors', similar to the GetMethod.
6614         (InitCodeHelpers): StructLayoutAttribute.ctor(int16) is not visible
6615         in .net 2.1, do not report errors here.
6616
6617         * typemanager.cs (TypeManager.InitCoreTypes): System.ArgIterator,
6618         System.Runtime.CompilerServices.RequiredAttributeAttribute and
6619         System.Runtime.CompilerServices.TypeForwardedToAttribute are internal
6620         in .net 2.1.
6621
6622         * typemanager.cs (TypeManager.InitCoreTypes): Move the resolution
6623         of the type InternalsVisibleToAttribute before the first call
6624         to CoreLookupType which is allowed to fail (third boolean parameter
6625         to true). Because, during the resolution for a type that is not
6626         immediately found, we try to check if the type is not defined in
6627         a friend assembly, and to do so, we need the
6628         InternalVisibleToAttribute.
6629
6630 2007-07-23  Miguel de Icaza  <miguel@novell.com>
6631
6632         * expression.cs (Binary): Add support for the brain-dead CSC 2.x
6633         feature that allows structs to be compared against null and inline
6634         the result as true or false.
6635
6636         Notice that the same code is not permitted inside a generic block
6637         of code that would do:
6638
6639         class Foo<T> where T : struct {
6640             bool Eval (T x)
6641             {
6642                  return x == null;
6643             }
6644         }
6645
6646         It is only allowed if the type of T is not bound (no where
6647         clause).   In my opinion, this CSC 2 behavior is broken but people
6648         seem to be using it (IronRuby does, a few bug reports on bugzilla
6649         have it and some people have complained about it).
6650
6651         All of the users that depend on this behavior have code that is
6652         very likely broken. 
6653         
6654         * report.cs (Warning, Error): make these take object arguments,
6655         not strings, as that allows us to take advantage of Format.
6656
6657 2007-07-20  William Holmes  <billholmes54@gmail.com>
6658
6659         * decl.cs: Changed MemberName.CountTypeArguments to also check the 
6660           Left member variable for the Count.
6661         * doc.cs: Changed DocUtil.GetMethodDocCommentName to call 
6662           MemberName.CountTypeArguments to avoid a NRE. 
6663
6664         This code is contributed under the MIT X11 license
6665
6666 2007-07-18  Marek Safar  <marek.safar@gmail.com>
6667
6668         * cs-tokenizer.cs: Improved lambda parsing and removed old code.
6669
6670 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
6671
6672         * doc.cs : generic method arguments are written as ``x while generic
6673           type arguments are `x. Combined with the previous change, fixed bug
6674           #79706.
6675
6676 2007-07-18  Raja R Harinath  <rharinath@novell.com>
6677
6678         Fix #82120
6679         * expression.cs (Binary.ResolveOperator): When converting
6680         'a + (- b)' to 'a - b', ensure that the unary '-' is discarded.
6681
6682 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
6683
6684         * doc.cs : when T: or whatever x: is specified, it does not really
6685           check the doc comment's syntax correctness. Fixed bug #82006.
6686
6687 2007-07-18  Marek Safar  <marek.safar@gmail.com>
6688
6689         * anonymous.cs (AnonymouseMethodExpression): Refactored to work with
6690         LambdaExpression better.
6691         
6692         * cs-tokenizer.cs: Changed a way how we detect lambda parameters.
6693         
6694         * driver.cs (LambdaTypeParseTest): Removed, tested method is gone.
6695         
6696         * ecore.cs (Expression.MemberLookupFailed): Don't show currect context
6697         as it can be generated.
6698         
6699         * expression.cs (Invocation.Error_InvalidArguments): Show correct
6700         modifiers.
6701         
6702         * lambda.cs (LambdaExpression): Refactored to share same code with
6703         AnonymousMethodExpression.
6704         
6705 2007-07-17  Marek Safar  <marek.safar@gmail.com>
6706
6707         * anonymous.cs (MakeName): Include host name for easier debugging.
6708         (LambdaMethod): New class for lambda spcecific stuff.
6709         
6710         * attribute.cs: Set EmitContext return type.
6711
6712         * class.cs: Set EmitContext return type.
6713         
6714         * codegen.cs (EmitContext): Return type cannot be null to stop messing
6715         with null/void meaning.
6716         
6717         * iterators.cs (ContainerType): Implemented.
6718         
6719         * rootcontext.cs: Set value of TypeManager.bool_type at early stage.
6720         
6721         * statement.cs (Return): Updated to lambda expressions.
6722         (Block.CloneTo): Parent can be null.
6723                 
6724 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6725
6726         A fix for bug #81917
6727         * attribute.cs (AttributeTester.GetFixedBuffer): More robust testing.
6728         
6729         * class.cs (FixedField): Check whether field is in unsafe scope.
6730
6731         * ecore.cs (FieldExpr.DoResolve): Create fixed buffer expression here.
6732         (FieldExpr.Emit): Fixed buffers cannot be volatile.
6733
6734         * expression.cs (ElementAccess.Resolve): Move fixed buffers resolve to
6735         FieldExpr.
6736         
6737         * statement.cs (Fixed.Resolve): Simplified fixed buffers.
6738                 
6739 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6740
6741         * cs-tokenizer.cs, class.cs, decl.cs, driver.cs, namespace.cs,
6742         rootcontext.cs, expression.cs, statement.cs: Updated to use WarningLevel
6743         from Report class.
6744
6745 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6746
6747         * ecore.cs (FieldExpr.AddressOf): Less confusing warning message.
6748         
6749 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6750
6751         * anonymous.cs (AnonymousMethodExpression): Parameters are r/o.
6752         (AnonymousContainer.ResolveNoDefine): Another ec to aec flag conversion.
6753         
6754         * codegen.cs(EmitContext): Add ProbingMode flag.
6755         
6756         * delegate.cs (DelegateInvocation): Set few instance variables as r/o.
6757         
6758         * driver.cs: For now set both warning values.
6759         
6760         * ecore.cs (SimpleName): Name is readonly.
6761         (MethodGroup.OverloadResolve): One quick path for probing.
6762         
6763         * expression.cs (Unary): Set Oper r/o.
6764         (Binary): Set Oper r/o.
6765         (ParameterReference): Set few instance variables as r/o.
6766         (ParameterReference.DoResolveBase): Don't capture aruments when 
6767         the probing is on.
6768         (Invocation.CloneTo): Fixed typo, looks easy, yeah.
6769         (Arglist): arguments are private.
6770         (SizeOf): type is private and r/o.
6771         (MemberAccess): arguments are private.
6772
6773         * report.cs: Enhanced reporting on/off capabilities.
6774         
6775         * lambda.cs: Uses ec.IsInProbingMode.
6776         (ContextualReturn): Derives from return.
6777         
6778         * rootcontext.cs: For now set both warning values.
6779         
6780         * statement.cs (CloneContext.RemapBlockCopy): Remaps block to cloned
6781         copy if one exists.
6782         (Return.Resolve): Don't die immediately.
6783         (Block.Resolve): Speed-up probing.
6784         (Block.CloneTo): Clone only child blocks.
6785
6786 Fri Jul 13 11:19:28 CEST 2007 Paolo Molaro <lupus@ximian.com>
6787
6788         * iterators.cs: reverted Miguel's latest change (r81925) as it
6789         breaks the build in System.
6790
6791 2007-07-13  Miguel de Icaza  <miguel@novell.com>
6792
6793         * iterators.cs (Yield.CheckContext): Check for the iterator type
6794         also here as we can call into Yield even in codepaths that are not
6795         directly checked by
6796         (MethodOrOperator is the only path that was checked).
6797
6798         In addition to the standard check, use a more specific check for
6799         constructors to report a more verbose error. 
6800
6801 2007-07-12  Miguel de Icaza  <miguel@novell.com>
6802
6803         * ecore.cs (FieldExpr.AddressOf): Do not stop processing here,
6804         report the warning and continue 
6805
6806         * statement.cs (Using.EmitLocalVariableDecls): We were leaving
6807         values on the stack on the call to Emit.   Use EmitStatement if
6808         possible, or using Emit + Pop if not possible.   Fixes #82064
6809
6810 2007-07-12  Raja R Harinath  <rharinath@novell.com>
6811
6812         * expression.cs (Invocation.IsApplicable): Reorganize slightly to
6813         avoid try...finally in some cases.
6814
6815 2007-07-10  Marek Safar  <marek.safar@gmail.com>
6816
6817         * attribute.cs (Attribute.ResolveConstructor): Uses method group.
6818         
6819         * class.cs (ConstructorInitializer.Resolve): Use and keep method group
6820         instead of method. Re-use standard error handling.
6821         (ConstructorInitializer.Emit): Simplified.
6822         
6823         * delegate.cs: Updated after Invocation.EmitCall change.
6824         
6825         * ecore.cs (GetOperatorTrueOrFalse): Uses MethodGroupExpr only.
6826         (SimpleName.SimpleNameResolve): Set and reset in_transit flag correctly.
6827         (ExtensionMethodGroupExpr): Refactored to use same OverloadResolve
6828         method and don't permanently changing input arguments.
6829         (MethodGroupExpr): Introduced resolved best_candidate, when method group
6830         is resolved it has one of the candidates is the best one which is later
6831         used to emit. Removed a few unused method.
6832         (MethodGroupExpr.MakeUnionSet): Moved from Invocation, it belongs here.
6833
6834         * expression.cs (StaticCallExpr.MakeSimpleCall): Uses method group.
6835         (Binary.ResolveOperator): Ditto.
6836         (ConditionalLogicalOperator.DoResolve): Ditto.
6837         (Invocation): Uses method group.
6838         (Invocation.DoResolve): Simplified.
6839         (Invocation.EmitCall): Removed useless is_static.
6840         (Invocation.Emit): Delegate to method group.
6841         (Invocation.EmitStatement): Simplified.
6842         (New): Uses method group.
6843         (MemberAccess.DoResolve): Don't destroy original expression.
6844         
6845         * statement.cs (ForEach.Resolve): Use null for no method arguments.
6846         
6847 2007-07-04  Marek Safar  <marek.safar@gmail.com>
6848
6849         * ecore.cs (VarExpr.DoResolveLValue): More restriction checks.
6850         
6851         * anonymous.cs,
6852         * lambda.cs: Add custom error message type.
6853
6854 2007-07-03  Marek Safar  <marek.safar@gmail.com>
6855
6856         * lambda.cs: Simplified little bit.
6857         
6858         * parameter.cs: Introduced ImplicitLambdaParameter.
6859         (Parameters.CreateFullyResolved): New factory instead of ctor.
6860         
6861         * anonymous.cs,
6862         * class.cs,
6863         * delegate.cs: Updated parameter creation.
6864         
6865 2007-07-03  Marek Safar  <marek.safar@gmail.com>
6866
6867         *  ecore.cs (SimpleName.GetSignatureForError): Display correctly generic
6868         arguments.
6869         
6870         * generic.cs: Synchronized with gmcs.
6871         
6872 2007-07-03  Marek Safar  <marek.safar@gmail.com>
6873
6874         * class.cs (Indexer): Check return type as soon as possible.
6875         
6876         * cs-parser.jay: Initialize implicit_value_parameter_type for interface
6877         members too.
6878         
6879         * ecore.cs (VarExpr.DoResolveLValue): Set eclass value.
6880         
6881         * expression.cs (Invocation.Error_InvalidArguments): Show type only.
6882         
6883         * parameter.cs (Parameter): Use expression type when it is available.
6884         
6885         * support.cs (ReflectionParameters.ParameterDesc): Show an extension
6886         method modifier for the first parameter only.
6887
6888 2007-06-24  Marek Safar  <marek.safar@gmail.com>
6889
6890         A fix for bug #81938
6891         * typemanager.cs (ChangeType): Fixed couple of char conversions.
6892         
6893         * constant.cs: Tide up an exception message.
6894
6895 2007-06-22  Marek Safar  <marek.safar@gmail.com>
6896
6897         * ecore.cs (SimpleName.DoSimpleNameResolve): Better error reporting when
6898         an uninitialized variable is used.
6899         
6900         * expression.cs (LocalVariableReference.DoResolve): Ditto.
6901
6902 2007-06-22  Marek Safar  <marek.safar@gmail.com>
6903
6904         * ecore.cs (SimpleName.TypeOrNamespaceNotFound): Allow to override type
6905         not found error handling.
6906
6907         * expression.cs (ArrayCreation): Removed redundant fields and little bit
6908         simplified.
6909         (ArrayCreation.ResolveArrayElement): To be ready to customization.
6910         (ArrayCreation.DoResolve): Simplified.
6911         (ImplicitlyTypedArrayCreation.DoResolve): Implicitly typed arrays have
6912         its own resolve process.
6913         (ImplicitlyTypedArrayCreation.ResolveArrayElement): Conversion magic.
6914
6915 2007-06-20  Marek Safar  <marek.safar@gmail.com>
6916
6917         * namespace.cs (NamespaceEntry.Error_AmbiguousTypeReference): Print
6918         more error details.
6919         
6920 2007-06-20  Marek Safar  <marek.safar@gmail.com>
6921
6922         * cs-tokenizer.cs: Removed var related stuff.
6923         
6924         * ecore.cs (Expression.ResolveAsContextualType): Introduced new method.
6925         (VarExpr): Changed to derive from SimpleName. VarExpr now behaves as
6926         a type and a keyword at same time.
6927         
6928         * decl.cs (MembeName.GetTypeExpression): Create VarExpr when type name
6929         matches to "var".
6930         
6931         * expression.cs (ImplicitlyTypedArrayCreation): New empty class for
6932         implicitly typed arrays, more changes will follow.
6933         
6934         * statement.cs (LocalInfo.Resolve): Resolve type as contextual type.
6935         
6936 2007-06-19  Marek Safar  <marek.safar@gmail.com>
6937
6938         * ecore.cs (VarExpr): Removed Handled field.
6939         
6940         * statement.cs (Using.ResolveLocalVariableDecls): Refactored to use
6941         build-in assign functionality.
6942         (ForEach.Resolve): Removed all implicitly typed local variable code and
6943         simplified.
6944         (ArrayForeach.Resolve): Infer implicitly typed local variable here.
6945         (CollectionForeach.Resolve): Infer implicitly typed local variable here.
6946
6947 2007-06-18  Marek Safar  <marek.safar@gmail.com>
6948
6949         * assign.cs: Removed implicitly typed local variable check.
6950         
6951         * expression.cs (LocalVariableReference.DoResolve): Add check for self
6952         referencing implicitly typed local variable.
6953         (LocalVariableReference.DoResolveLValue): Infer implicitly typed local
6954         variable here.
6955         
6956         * statement.cs (Fixed): Removed unsupported implicitly typed local
6957         variable code.
6958
6959 2007-06-15  Marek Safar  <marek.safar@gmail.com>
6960
6961         * decl.cs (MemberName): Moved all Unbound stuff to parser.
6962
6963 2007-06-14  Marek Safar  <marek.safar@gmail.com>
6964
6965         A fix for bugs #81855 and #76274
6966         * attribute.cs (AttachTo): Always set owner for global attributes to
6967         prefined owner.
6968         
6969         * ecore.cs (Error_TypeDoesNotContainDefinition): A type location can be
6970         usefull too.
6971         
6972         * cs-parser.jay: Assembly and module attributes must precede all other
6973         elements except using clauses and extern alias declarations.
6974
6975 2007-06-13  Marek Safar  <marek.safar@gmail.com>
6976
6977         A fix for bug #81748
6978         * cs-tokenizer.cs,
6979         * expression.cs: More checks for non ISO-1 features.
6980
6981 2007-06-12  Marek Safar  <marek.safar@gmail.com>
6982
6983         A fix for bug #81807
6984         * statement.cs(Switch.TableSwitchEmit): Define null label when it's not
6985         present inside switch statement and it is required by nullable check.
6986
6987 2007-06-12  Marek Safar  <marek.safar@gmail.com>
6988
6989         A fix for bug #81840
6990         * ecore.cs (SimpleName.ResolveAsTypeStep): Look for non-generic type
6991         when type matching fails.
6992         
6993         * namespace.cs: Tiny error message change.
6994
6995 2007-06-12  Marek Safar  <marek.safar@gmail.com>
6996
6997         * decl.cs (CheckAbstractAndExtern): Moved to MemberCore for easier error
6998         reporting. Added automatic property check.
6999         
7000         * class.cs: Updated after CheckAbstractAndExtern relocation.
7001         (AEventPropertyAccessor.GetSignatureForError): Customized.
7002         
7003 2007-06-11  Marek Safar  <marek.safar@gmail.com>
7004
7005         * class.cs (DefineBaseTypes): Base type can be undefined.
7006         
7007         * ecore.cs (TypeLookup): Minor refactoring.
7008         (DoResolveAsTypeStep): Removed redundant check.
7009
7010         * namespace.cs (Lookup): Removed redundant check.
7011                 
7012         * rootcontext.cs (BootstrapCorlib_ResolveType): Uses normal 
7013         ResolveAsTypeTerminal step.
7014         (BootstrapCorlib_*): Simplified.
7015         (PopulateCoreType): Core types can be now external.
7016
7017 2007-06-07  Marek Safar  <marek.safar@gmail.com>
7018
7019         * anonymous.cs (VerifyExplicitParameterCompatibility): Add flag to do
7020          verification only.
7021          (InferTypeArguments): Infers anonymous expression type arguments.
7022          (Compatible): Split to Compatible and InferTypeArguments. 
7023         
7024         * lambda.cs: Updated.
7025
7026 2007-06-08  Marek Safar  <marek.safar@gmail.com>
7027
7028         * anonymous.cs (AnonymousContainer): Marked as compiler generated.
7029
7030 2007-06-07  Raja R Harinath  <harinath@gmail.com>
7031
7032         Fix #80477, cs0135-2.cs, cs0135-3.cs
7033         * statement.cs (ToplevelBlock.ProcessParameters): Add parameter
7034         names to the "known" variables list.
7035         (Block.CheckInvariantMeaningInBlock): Handle the fact the
7036         parameter names are also "known".
7037         (Block.CheckError136): Remove.
7038         (ExplicitBlock.CloneTo): New.  Set 'known_variables' in target to
7039         null.
7040
7041 2007-06-07  Marek Safar  <marek.safar@gmail.com>
7042
7043         * ecore.cs (MethodGroupExpr.OverloadResolve): Print full method definition.
7044
7045 2007-06-06  Marek Safar  <marek.safar@gmail.com>
7046
7047         * ecore.cs (SimpleName.Emit): Emitting unresolved simple name is
7048         internal error not an user error.
7049          
7050         * expression.cs (IsApplicable): Refactored to make debugging easier.
7051
7052         * support.cs: More tricks for non-mono runtimes.
7053         
7054         * typemanager.cs (CoreLookupType): Made public.
7055         (InitSystemCore): All linq specific stuff moved to linq.cs
7056
7057 2007-06-05  Marek Safar  <marek.safar@gmail.com>
7058
7059         * typemanager.cs (CSharpSignature): One more missing build-in types
7060         replacement.
7061         More tricks for non-mono runtime.
7062
7063 2007-06-05  Raja R Harinath  <harinath@gmail.com>
7064
7065         * statement.cs (Block.CheckError136_InParents): Remove.
7066         (Block.AddVariable): Use GetParameterInfo instead.
7067         (ToplevelBlock.ProcessArguments): Likewise.
7068
7069 2007-06-04  Raja R Harinath  <rharinath@novell.com>
7070
7071         * statement.cs (ToplevelBlock.CloneTo): New.  Copy over parameter
7072         information too.
7073         (ToplevelBlock.GetParameterInfo): Split out of ...
7074         (ToplevelBlock.GetParameterRefernce): ... this.
7075         (ToplevelBlock.ParameterMap): Remove.
7076         * expression.cs (ParameterReference): Update to use
7077         ToplevelParameterInfo.
7078
7079         * statement.cs (ToplevelBlock.ProcessParameters): Workaround some
7080         regression.
7081
7082         * flowanalysis.cs (FlowBranching.CheckOutParameters): Move ...
7083         * statement.cs (ToplevelBlock.CheckOutParameters): ... here.
7084
7085         * statement.cs (ToplevelBlock.ResolveMeta): Move CS0136 checks ...
7086         (ToplevelBlock.ProcessParameters) ... here.
7087         (ToplevelBlock..ctor): Invoke it.
7088
7089         * statement.cs (ToplevelBlock.ResolveMeta): Add sanity checks for
7090         new parameters.
7091
7092         * statement.cs (IKnownVariable): New interface.
7093         (LocalInfo): Implement it.
7094         (ToplevelParameterInfo): New class.
7095         (ExplicitBlock.AddKnownVariable): Use IKnownVariable.
7096         (ExplicitBlock.GetKnownVariable): Likewise.  Rename from
7097         GetKnownVariableInfo.
7098
7099 2007-06-03  Raja R Harinath  <harinath@gmail.com>
7100
7101         Partly speed up CS0136 error checks.
7102         * statement.cs (ExplicitBlock.GetKnownVariableInfo): Remove
7103         'recurse' parameter.
7104         (Block.DoCheckError136): Only check errors in parameters.  Move
7105         local variable checks ...
7106         (Block.AddVariable): ... here, and ...
7107         (ToplevelBlock.ResolveMeta): ... here.
7108
7109 2007-06-02  Raja R Harinath  <harinath@gmail.com>
7110
7111         * statement.cs (Block.IsChildOf): Remove.
7112
7113         * statement.cs (Statement.Clone): Move special case code ...
7114         (Block.CloneTo): ... here.
7115
7116 2007-05-29  Raja R Harinath  <rharinath@novell.com>
7117
7118         * statement.cs (ToplevelBlock.container): Remove field.  It's
7119         redundant with 'Parent'.
7120         (ToplevelBlock.ContainerBlock): Remove accessor.
7121         (ToplevelBlock..ctor): Update to changes.  Register anonymous
7122         child with parent here, ...
7123         * cs-parser.jay (end_anonymous): ... not here.  Don't modify
7124         current_block.
7125         (start_anonymous): Don't save current_block.
7126         (top_current_block): Remove.
7127
7128         * statement.cs (Block.Flags): Remove IsExplicit and IsToplevel flags.
7129         (Block.Resolve): Update to changes.
7130         (Block..ctor): Move setting of "correct" 'Toplevel'
7131         and 'Explicit' fields to ...
7132         (ExplicitBlock..ctor, ToplevelBlock..ctor): ... here.
7133
7134 2007-05-27  Raja R Harinath  <harinath@gmail.com>
7135
7136         Kill Block.Implicit
7137         * statement.cs (Block.Implicit): Remove.
7138         (Block): Update to changes.
7139         * flowanalysis.cs: Likewise.
7140
7141         Mildly speed up CheckInvariantMeaningInBlock
7142         * statement.cs (ExplicitBlock.AddKnownVariable): Move here from Block.
7143         Recursively call AddKnownVariable to all enclosing blocks.
7144         (ExplicitBlock.GetKnownVariableInfo): Move here from Block.
7145         Remove recursive calls.
7146         (Block): Update to changes.
7147
7148         New ExplicitBlock invariants
7149         * statement.cs (Block.Explicit): New field.  It points to the
7150         immediately enclosing non-implicit block.
7151         (Block..ctor): Maintain the invariant.
7152         * cs-parser.jay: Take advantage of invariant.
7153
7154         Introduce ExplicitBlock
7155         * statement.cs (ExplicitBlock): New.
7156         (ToplevelBlock): Derive from it.
7157         (Block.Flags.IsExplicit): Rename from '...Implicit' and invert
7158         sense of flag.
7159         (Block.Implicit): Update to changes.
7160         * cs-parser.jay: Update to changes.
7161
7162         Remove unused field
7163         * codegen.cs (EmitContext.IsLastStatement): Remove.
7164         * statement.cs (Block.DoEmit): Update to changes.
7165
7166 2007-05-25  Raja R Harinath  <rharinath@novell.com>
7167
7168         * cs-parser.jay: Use 'start_block' and 'end_block' rather than
7169         modifying current_block directly.
7170
7171 2007-05-23  Scott Peterson  <lunchtimemama@gmail.com>
7172         
7173         * class.cs: Implemented automatic properties (C# 3.0)
7174           Thanks to Marek for the help.
7175
7176 2007-05-23  Raja R Harinath  <rharinath@novell.com>
7177
7178         * flowanalysis.cs (VariableInfo.SetAssigned): When noting a
7179         variable as assigned, note also that all its components are
7180         assigned too.
7181         (MyBitVector.SetRange): New.  Function to set multiple bits to true.
7182
7183 2007-05-19  Marek Safar  <marek.safar@gmail.com>
7184
7185         * anonymous.cs, class.cs: Emit Compiler generated attribute when
7186         member is marked as compiler generated.
7187         
7188         * decl.cs (MemberCore): Refactored ModFlags into property.
7189
7190         * modifiers.cs: Add new modifier (COMPILER_GENERATED).
7191         (Check): Check only accessibility modifiers.
7192
7193 2007-05-18  Raja R Harinath  <rharinath@novell.com>
7194
7195         Track all assignable slots in one bit array
7196         * statement.cs (ToplevelBlock.ParameterMap): Convert into array.
7197         (ToplevelBlock.ResolveMeta): Don't create a VariableMap.  Move
7198         logic from VariableMap constructor here.  Use the same 'offset'
7199         variable that's later used for computing offsets of local
7200         variables.
7201         * flowanalysis.cs (UsageVector.parameters): Remove.
7202         (UsageVector): Update to changes.
7203         (VariableMap): Remove.
7204
7205         Avoid creating ParameterMap in every block
7206         * statement.cs (Block.ParameterMap): Move ...
7207         (ToplevelBlock.ParameterMap): ... here.
7208         (ToplevelBlock.ResolveMeta): Create VariableMap for parameters
7209         only once.
7210         * flowanalysis.cs (FlowBranching.param_map): Remove.
7211         (FlowBranching.UsageVector): Update to changes.
7212         (FlowBranchingToplevel.CheckOutParameters): Likewise.
7213
7214         * statement.cs (Block.CloneTo): Clone Toplevel field too.
7215
7216         * expression.cs (ParameterReference): Distinguish between block
7217         where parameter was referenced and declared.
7218
7219 2007-05-18  Marek Safar  <marek.safar@gmail.com>
7220
7221         * flowanalysis.cs, statement.cs: Put back improved error handling.
7222
7223 2007-05-15  Scott Peterson  <lunchtimemama@gmail.com>
7224         
7225         * assign.cs:
7226         * expression.cs:
7227           Imporved object and collection initialization (C# 3.0).
7228
7229 2007-05-15  Marek Safar  <marek.safar@gmail.com>
7230
7231         A fix for bug #81380
7232         * expression.cs (Is.DoResolve): Only value types have constant `is'
7233         behaviour.
7234
7235 2007-05-15  Raja R Harinath  <rharinath@novell.com>
7236
7237         * statement.cs (ToplevelBlock.child): Remove.
7238
7239 2007-05-15  Raja R Harinath  <harinath@gmail.com>
7240
7241         Rationalize ResolveMeta: refactoring
7242         (Block.ResolveMeta): Remove wrong or superfluous comments.  Carve
7243         out constant handling code into ...
7244         (Block.DoResolveConstants): ... this.
7245
7246         Rationalize ResolveMeta: kill local_map
7247         * statement.cs (Block.local_map, Block.LocalMap): Remove.
7248         (Block.AssignableSlots): New.
7249         (Block.ResolveMeta): Make protected.  Don't create a VariableMap
7250         for locals -- move code from VariableMap here.  Avoid unnecessary
7251         allocations.
7252         * flowanalysis.cs (FlowBranching.local_map): Remove.
7253         (FlowBranching..ctor): Use Block.AssignableSlots.
7254         (VariableMap): Remove unused constructors.
7255
7256 2007-05-11  Raja R Harinath  <rharinath@novell.com>
7257
7258         * Makefile [PROFILE=net_2_0_bootstrap]: Add special-case rules.
7259
7260 2007-05-11  Marek Safar  <marek.safar@gmail.com>
7261
7262         * typemanager.cs (IsFriendAssembly): Should not be called for building
7263         assembly.
7264
7265 2007-05-09  Marek Safar  <marek.safar@gmail.com>
7266
7267         * literal.cs (NullConstant): Print null in all cases.
7268         
7269         * expression.cs (Binary.ResolveOperator): Implemented delegate
7270          comparison based on C# 2.0 changes.
7271
7272 2007-04-28  Scott Peterson  <lunchtimemama@gmail.com>
7273
7274         This code is contributed under the MIT X11 license
7275         
7276         The following enables support for several C# 3.0 language features:
7277         
7278         * cs-tokenizer.cs: Added support for the "var" keyword.
7279         
7280         * ecore.cs: Refactored TypeLookupExpression.DoResolveAsTypeStep().
7281           Added VarExpr class to facilitate type inferencing.
7282         
7283         * class.cs: Added IDictionary field AnonymousTypes to TypeContainer
7284           to support anonymous types.
7285         
7286         * assign.cs: Added support for type inferencing and initialization.
7287         
7288         * anonymous.cs: Added AnonymousClass class to enable anonymous types.
7289         
7290         * expression.cs: Added implicit array support to ArrayCreation.
7291           Added 5 types and 1 interface:
7292           
7293           IInitializable                Implementing classes can inject initializing
7294                                         statements after object instantiation.
7295           
7296           Initializer                   Stores data for object initialization.
7297           
7298           AnonymousType                 An expression for anonymous types.
7299           
7300           AnonymousTypeParameter        Stores data about an anonymous type's field.
7301           
7302           NewInitialize                 An expression for object initialization.
7303           
7304           CollectionInitialize          An expression for collection initialization.
7305         
7306         * statement.cs: Added "var" keyword support to the foreach, using, and fixed
7307           statements.
7308
7309 2007-05-06  Marek Safar  <marek.safar@gmail.com>
7310
7311         A fix for bug #81500
7312         * cs-tokenizer.cs: Add special handling for coalescing operator.
7313
7314 2007-05-06  Marek Safar  <marek.safar@gmail.com>
7315
7316         A fix for bug #81529
7317         * attribute.cs (GetAttributeUsage): AttributeUsage attribute inherits
7318         its value from base class until it is redefined.
7319
7320 2007-05-02  Raja R Harinath  <rharinath@novell.com>
7321
7322         Fix regression in cs0631-3.cs
7323         * cs-parser.jay (operator_declarator): Add opt_attributes to error
7324         fallback.  Make error fallback catch more cases.
7325
7326 2007-05-01  Miguel de Icaza  <miguel@novell.com>
7327
7328         * cs-parser.jay: Allow parameters in operator declarations to have
7329         attributes. 
7330
7331 2007-04-27  Miguel de Icaza  <miguel@novell.com>
7332
7333         * statement.cs (If.CloneTo): Only clone the FalseStatement if it
7334         exists. 
7335
7336         * lambda.cs (ContextualReturn.Resolve): An expression is valid
7337         inside the ContextualReturn, it does not have to be an
7338         ExpressionStatement. 
7339
7340 2007-04-24  Miguel de Icaza  <miguel@novell.com>
7341
7342         * lambda.cs (ContextualReturn.Resolve): if the return type is not
7343         set, set it.
7344
7345 2007-04-23  Miguel de Icaza  <miguel@novell.com>
7346
7347         * anonymous.cs (AnonymousContainer): split the virtual Resolve
7348         method in two methods: ResolveNoDefine and Resolve.
7349
7350         ResolveNoDefine will stop just after ResolveTopBlock has been
7351         called.   
7352
7353         Resolve will then continue by creating a method and issuing the
7354         call to method.Define ().
7355
7356         (AnonymousMethod): Split and implement the new Resolve and
7357         ResolveNoDefine as well.
7358
7359         * lambda.cs (LambdaExpression): Split the anonymous method
7360         resolution code into a separate routine (CoreCompatibilityTest)
7361         from DoCompatibleTest.
7362
7363         (LambdaExpression.TryBuild): New method, this method tries to
7364         build the LambdaExpression with the given set of types to be used
7365         as the types for the various parameters of the lambda expression. 
7366
7367         If the compilation succeed with the given types, the infered type
7368         of the Anonymous method is returned, otherwise null is returned.
7369
7370 2007-04-23  Marek Safar  <marek.safar@gmail.com>
7371
7372         A fix for bug #81414
7373         * delegate.cs: Better fix, moved ApplyAttributes from Define to Emit.
7374
7375 2007-04-22  Miguel de Icaza  <miguel@novell.com>
7376
7377         * cs-tokenizer.cs: Change various identifiers here from the
7378         camelCasing to the recommended Linux-like style for instance
7379         variables from the Coding Guidelines. 
7380
7381 2007-04-19  Martin Baulig  <martin@ximian.com>
7382
7383         * convert.cs
7384         (Convert.ImplicitReferenceConversionCore): Allow conversions from
7385         System.Enum to System.ValueType.
7386
7387 2007-04-13  Martin Baulig  <martin@ximian.com>
7388
7389         Rewrote implicit reference conversions.  We need to distinguish
7390         between implicit reference conversions (13.1.4) and implicit
7391         boxing conversions (13.1.5).
7392
7393         According to the spec, there's an an implicit conversion
7394         "From a one-dimensional array-type S[] to IList<T> and base
7395         interfaces of this interface, provided there is an implicit
7396         reference conversion from S to T."  Note that this does not
7397         include boxing conversions.
7398
7399         * convert.cs
7400         (Convert.ImplicitTypeParameterBoxingConversion): New method.
7401         (Convert.ImplicitReferenceConversion): Split into
7402         ImplicitReferenceConversionCore() and
7403         ImplicitBoxingConversionExist().
7404         (Convert.ImplicitReferenceConversionExists): Use the new
7405         ImplicitReferenceConversionCore() and ImplicitBoxingConversionExists().
7406
7407 2007-04-12  Martin Baulig  <martin@ximian.com>
7408
7409         * convert.cs (Convert.ImplicitReferenceConversion): Move the
7410         `TypeManager.null_type' checks up to the top of the method.
7411
7412 2007-04-11  Marek Safar  <marek.safar@gmail.com>
7413
7414         A fix for bug #81350
7415         * class.cs, decl.cs, ecore.cs, namespace.cs: The optimization for private
7416         extension methods.
7417
7418 2007-04-11  Martin Baulig  <martin@ximian.com>
7419
7420         * statement.cs (Foreach.CollectionForeach.ProbeCollectionType):
7421         Use `TypeManager.GetInterfaces(t)' rather than `t.GetInterfaces()'
7422         to make this work for generic classes; fixes #79561.
7423
7424 2007-04-11  Martin Baulig  <martin@ximian.com>
7425
7426         * expression.cs (As): Add support for nullable types; fixes #79371.
7427
7428 2007-04-11  Martin Baulig  <martin@ximian.com>
7429
7430         * doc.cs (DocUtil.GetSignatureForDoc): Don't crash if
7431         `type.FullName' is null; fixes #80243.
7432
7433 2007-04-11  Martin Baulig  <martin@ximian.com>
7434
7435         * expression.cs (Invocation.IsApplicable): Don't modify the method
7436         if type inference succeeded, but the method was not applicable.
7437         Fixes #81250.
7438
7439 2007-04-10  Marek Safar  <marek.safar@gmail.com>
7440
7441         A fix for bug #81324
7442         * namespace.cs (Namespace.LookupExtensionMethod): Always inspect both
7443         internal and external namespaces containers.
7444
7445 2007-04-10  Martin Baulig  <martin@ximian.com>
7446
7447         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Use
7448         TypeManager.DropGenericMethodArguments() so we also call
7449         IMethodData.SetMemberIsUsed() for generic methods.  Fixes #80357.
7450
7451 2007-04-10  Martin Baulig  <martin@ximian.com>
7452
7453         * iterators.cs (Iterator.CreateIterator): Don't crash if
7454         `method.ReturnType' is null.  This happens if something went wrong
7455         while resolving that typ (we already reported an error in this case).
7456
7457 2007-04-10  Martin Baulig  <martin@ximian.com>
7458
7459         * expression.cs (New.DoResolve): Don't call CheckComImport() on
7460         generic interfaces; report the CS0144 directly.
7461
7462 2007-04-10  Martin Baulig  <martin@ximian.com>
7463
7464         * ecore.cs (MemberExpr.ResolveMemberExpr): If `left' is a
7465         `TypeExpr', call ResolveAsTypeTerminal() on it; fixes #81180.
7466
7467 2007-04-10  Martin Baulig  <martin@ximian.com>
7468
7469         * expression.cs (New.DoEmitTypeParameter): Fix #81109.
7470
7471 2007-04-09  Raja R Harinath  <rharinath@novell.com>
7472
7473         A better fix
7474         * flowanalysis.cs (UsageVector.MergeChild): Handle child.Block == null.
7475         * statement.cs: Use KillFlowBranching only in ResolveUnreachable.
7476
7477         Fix #81338
7478         * statement.cs (For.Resolve): If resolution fails, use
7479         KillFlowBranching.
7480
7481 2007-04-08  Marek Safar  <marek.safar@gmail.com>
7482
7483         * anonymous.cs (MakeName): Make faster and zero-based.
7484         (VerifyExplicitParameterCompatibility): Back to mode where generic
7485         parameter is ignored.
7486         (AnonymousMethodMethod.Emit): Decorate method as compiler generated.
7487
7488         * class.cs (EmitType): Method can emit another new method.
7489
7490         * cs-tokenizer.cs (IsLinqEnabled): Fixes static cctor race.
7491
7492         * driver.cs: Updated.
7493
7494         * lambda.cs: Reuse predefined empty parameters.
7495
7496         * parameter.cs: Updated
7497
7498         * support.cs: Implemented InflateTypes.
7499
7500         * typemanager.cs (GetFullName): Don't use FullName as it can be null.
7501         (InitSystemCore): Introduced to isolate 3.0 dependencies.
7502
7503 2007-04-03  Martin Baulig  <martin@ximian.com>
7504
7505         Fix #80632.
7506
7507         * statement.cs (Foreach.CollectionForeach.TryType): Use a custom
7508         version of TypeManager.IsOverride() which also works with generic
7509         types.  
7510
7511 2007-04-03  Martin Baulig  <martin@ximian.com>
7512
7513         Fix #81044.
7514
7515         * convert.cs
7516         (Convert.ExplicitReferenceConversion): We need to cast when
7517         converting from IList<T> to S[].
7518
7519 2007-04-01  Marek Safar  <marek.safar@gmail.com>
7520
7521         * decl.cs (FindExtensionMethods): Consider all candidates with same name
7522         at this level.
7523         
7524         * expression.cs (MemberAccess.DoResolve): Cache resolved expression.
7525
7526 2007-03-31  Marek Safar  <marek.safar@gmail.com>
7527
7528         * anonymous.cs (AnonymousMethodExpression.Compatible): Handles both
7529         argument and return type inferring.
7530
7531         * codegen.cs (InferReturnType): Flag whether return can be inferred.
7532         (ReturnType): Turned to property.
7533
7534         * statement.cs (Return): Implemented return type inferring.
7535
7536         * support.cs (ReflectionParameters): Use local types if possible.
7537
7538 2007-03-30  Raja R Harinath  <rharinath@novell.com>
7539
7540         * flowanalysis.cs (FlowBranching.Reachability): Remove.
7541         (FlowBranching.UsageVector): Update to changes.
7542
7543         Prepare to kill 'Reachability'
7544         * flowanalysis.cs (UsageVector): Remove 'Reachability' from
7545         argument of constructor.
7546
7547 2007-03-29  Raja R Harinath  <rharinath@novell.com>
7548
7549         Prepare to kill 'Reachability'
7550         * flowanalysis.cs (UsageVector.is_unreachable): New.
7551         (UsageVector): Update to maintain 'is_unreachable' in parallel to
7552         'reachability', and verify they're consistent.
7553
7554         Fix #81121
7555         * expression.cs (New.EmitStatement): Handle type parameters here too.
7556
7557 2007-03-29  Martin Baulig  <martin@ximian.com>
7558
7559         Fix #79148.
7560
7561         * anonymous.cs
7562         (ScopeInfo.ctor): Use `Modifiers.PUBLIC' if we're a nested
7563         CompilerGeneratedClass.
7564         (ScopeInfo.EmitScopeInstance): Make this protected.
7565         (CapturedVariable.EmitInstance): Use `Ldarg_0' if
7566         `ec.CurrentAnonymousMethod.Scope == Scope'.
7567
7568         * statement.cs (Block.ScopeInfo): Make this a property.
7569
7570 2007-03-27  Raja R Harinath  <harinath@gmail.com>
7571
7572         Prepare to kill 'Reachability'
7573         * flowanalysis.cs (FlowBranching.Reachability): Make class private.
7574         (FlowBranching.UsageVector.Reachability): Remove property.
7575         (FlowBranching.UsageVector.IsUnreachable): New property.
7576         (FlowBranching.UsageVector.ResetBarrier): New.
7577         (FlowBranching.UsageVector, FlowBranchingLabeled): Update to changes.
7578         * codegen.cs, statement.cs: Update to changes.
7579
7580 2007-03-27  Martin Baulig  <martin@ximian.com>
7581
7582         Fix #81209.
7583
7584         * decl.cs
7585         (DeclSpace.LookupNestedTypeInHierarchy): Correctly handle nested
7586         generic types.
7587
7588 2007-03-26  Raja R Harinath  <rharinath@novell.com>
7589
7590         * flowanalysis.cs (FlowBranching.Reachability): Use a boolean
7591         instead of TriState.  Remove all mention of TriState.
7592
7593         * flowanalysis.cs (FlowBranching.Reachability): Prepare to be
7594         replaced by a boolean.  Add boolean 'is_unreachable' field, check
7595         and maintain invariants.
7596
7597 2007-03-25  Marek Safar  <marek.safar@gmail.com>
7598
7599         * anonymous.cs: Restored checks disabled for uninflated anonymous methods.
7600
7601 2007-03-25  Marek Safar  <marek.safar@gmail.com>
7602
7603         * expression.cs: Stop using obsolete 2.0 opcodes.
7604
7605 2007-03-25  Marek Safar  <marek.safar@gmail.com>
7606
7607         * enum.cs (EnumMember.Define): Fixed regression and slowdown caused by
7608         one of the latests Martin's fixes.
7609
7610 2007-03-23  Miguel de Icaza  <miguel@novell.com>
7611
7612         * expression.cs: On BigEndian systems, swap the bytes, temporary
7613         solution until we get a new bitconverter class.
7614
7615 2007-03-23  Martin Baulig  <martin@ximian.com>
7616
7617         Fix #81158.
7618
7619         * decl.cs (MemberCache.AddMembers): Add generic methods both as
7620         "Method" and "Method`1".  Normally, a cache lookup is done on the
7621         "Method" form (ie. without the generic arity), but this one makes
7622         lookups on the full form work as well.
7623
7624 2007-03-22  Raja R Harinath  <rharinath@novell.com>
7625
7626         * flowanalysis.cs (Reachability): Reorganize slightly, and remove
7627         unused properties.
7628
7629 2007-03-20  Bill Holmes  <billholmes54@gmail.com>
7630         * class.cs: 
7631         Added 2 MemberCoreArrayList objects, ordered_explicit_member_list and
7632         ordered_member_list, to TypeBuilder to store members to be defined
7633         in the order they were parsed in.
7634         - ordered_explicit_member_list contains all properties indexers
7635           and methods that are defined as explicit implementation of an
7636           interface or base class.
7637         - ordered_member_list contains all properties indexers and methods
7638           that are not defined as explicit implementation of an interface
7639           or base class.
7640
7641         Removed MethodArrayList and IndexerArrayList from TypeBuilder.  The 
7642         functionality in these removed classes has been replaced with 
7643         ComputeIndexerName, EmitIndexerName, HasEqualss, HasGetHashCode, and 
7644         CheckEqualsAndGetHashCode members defined and called in the TypeBuilderClass.
7645
7646         Adding CheckForDuplications to PropertyBase.PropertyMethod and calls
7647         to CheckForDuplications inside GetMethod and SetMethod Define Method
7648         to handle method property and indexer name conflicts.
7649
7650         Fixes #79434
7651
7652         All code is contributed under the MIT/X11 license.
7653
7654 2007-03-20  Martin Baulig  <martin@ximian.com>
7655
7656         * class.cs (TypeContainer.Interfaces): Removed; they're now
7657         included in `TypeContainer.Types'.
7658
7659 2007-03-20  Martin Baulig  <martin@ximian.com>
7660
7661         Fix #77963, #80314 and #81019.  Added gtest-317, ..., gtest-320.
7662
7663         * class.cs (TypeContainer.CreateType): New public method.  This is
7664         now called before DefineType() to create the TypeBuilders.
7665         (TypeContainer.DefineType): Don't create the TypeBuilder here; it
7666         has already been created by CreateType().
7667         (TypeContainer.DefineTypeBuilder): Renamed into CreateTypeBuilder();
7668         don't resolve our base classes here; this has been moved into
7669         DefineBaseTypes().  We're now called from CreateType().
7670         (TypeContainer.DefineBaseTypes): New private method; resolve our
7671         base classes here.  We're now called from DefineType().
7672
7673         * rootcontext.cs
7674         (RootContext.ResolveTree): Call TypeContainer.CreateType() on all
7675         our types first to create all the TypeBuilders.  After that, call
7676         TypeContainer.DefineType() on all the types which'll resolve their
7677         base classes and setup the resolve order.
7678
7679 2007-03-20  Martin Baulig  <martin@ximian.com>
7680
7681         * class.cs (TypeContainer.Enums): Removed; they're now included in
7682         `TypeContainer.Types'.  
7683
7684 2007-03-20  Martin Baulig  <martin@ximian.com>
7685
7686         * class.cs
7687         (TypeContainer.DefineType): Don't call ResolveMembers() here.
7688         (TypeContainer.DoResolveMembers): Call DefineType() on our
7689         `compiler_generated' classes; moved here from DefineNestedTypes().
7690
7691         * rootcontext.cs
7692         (RootContext.ResolveTree): Call ResolveMembers() on all
7693         TypeContainer's in the `type_container_resolve_order'.
7694
7695 2007-03-19  Marek Safar  <marek.safar@gmail.com>
7696
7697         * class.cs: Use corlib to handle InternalMethodImplAttribute.
7698
7699 2007-03-17  Marek Safar  <marek.safar@gmail.com>
7700
7701         * class.cs (EventFieldAccessor.EmitMethod): Don't override existing
7702         implementation flags.
7703
7704 2007-03-17  Marek Safar  <marek.safar@gmail.com>
7705
7706         * class.cs: More optimizations for type parameters.
7707
7708 2007-03-15  Marek Safar  <marek.safar@gmail.com>
7709
7710         * anonymous.cs (AnomymousMethod): Can be now hosted in generic container.
7711
7712         * ecore.cs, parameter.cs: More common code for both corlibs.
7713
7714         * typemanager.cs (IsGenericMethod): Simplified.
7715
7716 2007-03-15  Raja R Harinath  <rharinath@novell.com>
7717
7718         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
7719         'returns'.
7720         * statement.cs, iterators.cs, lambda.cs: Update to changes.
7721
7722         * statement.cs (Lock.Resolve): Invoke 'ec.NeedReturnLabel'
7723         unconditionally.  Simplify explanation.
7724         (Try.Resolve, Using.Resolve): Likewise.
7725
7726 2007-03-15  Martin Baulig  <martin@ximian.com>
7727
7728         Fix #80731.
7729
7730         * decl.cs (DeclSpace): If we're a partial class, use our
7731         `PartialContainer's `TypeParameters' and `CurrentTypeParameters'.
7732
7733 2007-03-15  Raja R Harinath  <rharinath@novell.com>
7734
7735         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
7736         'throws'.
7737         (FlowBranching.UsageVector): Update to changes.
7738         (FlowBranching.MergeSiblings): Likewise.
7739         * statement.cs: Likewise.
7740
7741 2007-03-15  Martin Baulig  <martin@ximian.com>
7742
7743         Fix #79302.
7744
7745         * decl.cs
7746         (MemberCache): Added a special .ctor for type parameters.
7747
7748         * typemanager.cs
7749         (TypeManager.MemberLookup_FindMembers): `TypeParameter' now has a
7750         `MemberCache'.  
7751
7752 2007-03-09  Martin Baulig  <martin@ximian.com>
7753
7754         * enum.cs (Enum): Make this a TypeContainer.
7755         (EnumMember): Derive from `Const'.
7756
7757         * const.cs
7758         (Const.DoResolveValue): New protected virtual method; move most of
7759         the functionality of ResolveValue() here so we can override it in
7760         `EnumMember'.
7761         (Const.CreateConstantReference): Make this virtual.
7762
7763         * class.cs (Kind): Add `Kind.Enum'.
7764         (TypeContainer.Emit): Don't emit the enums here; they're already
7765         in the `RootContext.typecontainer_resolve_order'.
7766
7767         * rootcontext.cs (RootContext.EmitCode): Don't emit the enums
7768         here; they're already in the `typecontainer_resolve_order'.
7769
7770         * ecore.cs (EnumConstant.ConvertImplicitly): Add
7771         TypeManager.DropGenericTypeArguments().
7772
7773         * typemanager.cs
7774         (TypeManager.CSharpEnumValue): Add DropGenericTypeArguments().
7775         (TypeManager.IsEnumType): Likewise.
7776         (TypeManager.EnumToUnderlying): Likewise.
7777         (TypeManager.IsEqual): Add support for enums.
7778
7779 2007-03-12  Raja R Harinath  <rharinath@novell.com>
7780
7781         * typemanager.cs (InitCoreTypes) [NET_2_0]: Allow
7782         DefaultParameterValueAttribute to be undefined, say if System.dll
7783         is not referenced.
7784
7785 2007-03-11  Marek Safar  <marek.safar@gmail.com>
7786
7787         * ecore.cs, parameter.cs, typemanager.cs: Another gmcs fix to work with
7788         any mscorlib.
7789
7790 2007-03-10  Marek Safar  <marek.safar@gmail.com>
7791
7792         * class.cs, parameter.cs: Unified parameters verification.
7793
7794 2007-03-08  Martin Baulig  <martin@ximian.com>
7795
7796         * cs-parser.jay (constructor_header): Pass the location to the
7797         newly created TopLevelBlock.
7798
7799 2007-03-07  Martin Baulig  <martin@ximian.com>
7800
7801         * statement.cs (Block.Resolve): Don't crash on error; bug #80715.
7802
7803 2007-03-06  Miguel de Icaza  <miguel@novell.com>
7804
7805         * convert.cs (ExplicitReferenceConversionExists): Sync this method
7806         with the changes from David, fixes the build.
7807
7808 2007-03-05  David Mitchell  <dmitchell@logos.com>
7809
7810         * convert.cs: Implement From System.Collecitons.Generic.IList<T>
7811         and its base interfaces to a one-dimensional array type S[],
7812         provided there is an implicit or explicit reference conversion
7813         from S to T.
7814
7815 2007-03-03  Marek Safar  <marek.safar@gmail.com>
7816
7817         * cs-tokenizer.cs: Implemented basic linq grammar.
7818
7819         * driver.cs: Set linq lang version on demand.
7820
7821 2007-02-26  Marek Safar  <marek.safar@gmail.com>
7822
7823         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
7824
7825 2007-02-25  Marek Safar  <marek.safar@gmail.com>
7826
7827         * attribute.cs: Replaced DefinePInvoke in favor of S.R.E implementation
7828         (Fixes #80455)
7829
7830         * class.cs (InterfaceMemberBase): Share common `extern' modifier checks
7831         here.
7832         Check property and event extern attributes.
7833
7834         * codegen.cs (ModuleClass): HasDefaultCharSet when module defined global
7835         charset.
7836
7837 2007-02-24  Marek Safar  <marek.safar@gmail.com>
7838
7839         A fix for bug #80407
7840         * ecore.cs: Don't report ambiguity error when methods have same parent.
7841
7842 2007-02-23  Marek Safar  <marek.safar@gmail.com>
7843
7844         A fix for bug #80878
7845         * class.cs, cs-parser.jay: Event property can host anonymous methods.
7846
7847 2007-02-22  Marek Safar  <marek.safar@gmail.com>
7848
7849         * attribute.cs: Enable ExtensionAttribute presence test.
7850
7851 2007-02-22  Marek Safar  <marek.safar@gmail.com>
7852
7853         * class.cs: Warn about missing GetHashCode only when Equals is override.
7854
7855         * decl.cs: Check accessibility of type arguments.
7856
7857         * typemanager.cs: Correctly report nullable array.
7858
7859 2007-02-20  Marek Safar  <marek.safar@gmail.com>
7860
7861         * class.cs, report.cs: Capture more details when things go wrong.
7862
7863 2007-02-20  Marek Safar  <marek.safar@gmail.com>
7864
7865         A fix for bug #80650
7866         * cs-parser.jay: Anonymous container starts at constructor declaration
7867         and not at block beginning because it has to be usable in constructor
7868         initializer.
7869
7870         * statement.cs: Use context location and not block one for error reporting.
7871
7872 2007-02-18  Marek Safar  <marek.safar@gmail.com>
7873
7874         A fix for bug #78712
7875         * class.cs.cs, decl.cs, ecore.cs: LookupAnyGeneric inspects nested types
7876         too.
7877
7878 2007-02-18  Marek Safar  <marek.safar@gmail.com>
7879
7880         A fix for bug #80493 by Atsushi Enomoto
7881         * cs-parser.jay: Ignore invalid attribute target.
7882
7883 2007-02-18  Marek Safar  <marek.safar@gmail.com>
7884  
7885         * cs-tokenizer.cs: Ignore '\0' as white space character.
7886
7887 2007-02-17  Miguel de Icaza  <miguel@novell.com>
7888
7889         * cs-parser.jay: Add support for lambda expressions to the mcs
7890         compiler as well.
7891
7892         * lambda.cs: Only clone when we are probing, not on the final call
7893         (Compatible is the final call). 
7894
7895         * statement.cs (CloneContext): Introduce class to provide block
7896         remapping during clone.
7897
7898         All statements Clone themselves now.
7899
7900         (Clone): special handling for blocks, when we clone a block, we
7901         register the block inside this routine, as children of the block
7902         might trigger a lookup. 
7903         
7904         * expression.cs: Add support for CloneContext in all expressions. 
7905         
7906 2007-02-17  Marek Safar  <marek.safar@gmail.com>
7907  
7908         A fix for bug #80493
7909         * statement.cs: Report ambiguous warning when interfaces are not related.
7910
7911 2007-02-15  Marek Safar  <marek.safar@gmail.com>
7912
7913         C# 3.0 extension methods.
7914
7915         * attribute.cs (Error_MisusedExtensionAttribute): Extension attribute
7916         cannot be used directly.
7917
7918         * class.cs (Class.Emit): Emit extension attribute if any class method
7919         is extension method.
7920         (Method.Define): Add basic extension method validation conditions.
7921         (Method.Emit): Emit extension attribute for method.
7922
7923         * codegen.cs (AssemblyClass): Emit extension attribute if at least one
7924         extension method exists. Currently we follow same approach as Microsoft
7925         does, emit even if a method or a class are private but this can change
7926         later.
7927
7928         * cs-parser.jay: Add handling of `this' keyword in method parameters
7929         context.
7930
7931         * decl.cs (DeclSpace.IsStaticClass): New property.
7932         (MemberCache.FindExtensionMethods): Looks for extension methods with
7933         defined name and extension type.
7934
7935         * doc.cs: Updated after OverloadResolve changes.
7936
7937         * driver.cs: Add new soft reference to System.Core.dll.
7938
7939         * ecore.cs (MethodLookup): Can return only MethodGroupExpr.
7940         (ExtensionMethodGroupExpr): Represents group of extension methods.
7941
7942         * expression.cs (Invocation): Moved methods BetterConversion, MoreSpecific,
7943         BetterFunction, IsOverride, IsAncestralType, OverloadResolve
7944         to MethodGroupExpr and made non-static for easier customization.
7945         (Invocation.DoResolve): Add extension method lookup when no standard
7946         method was found.
7947         (MemberAccess.DoResolve): Try extension methods if no member exists.
7948
7949         * modifiers.cs: Add METHOD_EXTENSION modifier.
7950
7951         * namespace.cs (RegisterExtensionMethodClass): Register class namespace
7952         as well as candidate extension type.
7953         (ComputeNamespaces): When assembly constains extension methods registers
7954         them.
7955         (Namespace.RegisterExternalExtensionMethodClass): Register type for later
7956         extension method lookup.
7957         (Namespace.LookupExtensionMethod): Looks for extension method in this
7958         namespace.
7959         (NamespaceEntry.LookupExtensionMethod): Does extension methods lookup to
7960         find a method which matches name and extensionType.
7961
7962         * parameter.cs (Parameter): Add This modifer.
7963         (HasExtensionMethodModifier): New property.
7964         (Resolve): Add extension parameter check.
7965         (ModFlags): turned to property to exclude this modifier as it is not real
7966         parameter modifier.
7967         (Parameters): Implemented ExtensionMethodType and HasExtensionMethodType.
7968
7969         * support.cs (ParameterData): Add ExtensionMethodType.
7970         (ReflectionParameters): Implemented ExtensionMethodType interface property.
7971
7972         * typemanager.cs: Add type and ctor extension attribute type.
7973
7974 2007-02-15  Miguel de Icaza  <miguel@novell.com>
7975
7976         * report.cs (DisableErrors, EnableErrors): used to prevent error
7977         output when we are "trying" to compile various methods with
7978         different types. 
7979
7980         * ecore.cs (Expression): Add Clone method that calls the virtual
7981         CloneTo method.  The current CloneTo method in Expression throws
7982         an exception so we can track down all the places where this must
7983         be implemented (not using abstract, because that would be a lot of
7984         up-front-work before we can start testing the implementation
7985         idea). 
7986
7987         Important: we only need Clone capabilities for expressions created
7988         by the parser, as the expressions we will be cloning are
7989         expressions in the pre-resolved state.   This vastly simplifies
7990         the work required. 
7991         
7992         (SimpleName): Add CloneTo that does nothing.
7993         (EmptyCast): Add CloneTo.
7994         
7995         * expression.cs (Binary): Implement CloneTo.
7996         (Invocation.IsApplicable): Store the current ec in
7997         EmitContext.TempEc and restore it on return.  This is used so we
7998         do not have to sprinkle hundres of methods with an extra
7999         EmitContext, we know that the only user is the lambda expression
8000         ImplicitConversionExists code. 
8001         
8002         (Argument): Add Cloning capabilities.
8003         (LocalVariableReference, ParenthesizedExpression, Unary, Probe,
8004         Cast, Conditional, ArrayCreation, InvocationOrCast, Invocation,
8005         ArglistAccess, ArgList, TypeOf, SizeOf, CheckedExpr,
8006         UnCheckedExpr, ElementAccess, BaseAccess, BaseIndexerAccess,
8007         IndexerAccess): Add Clone capability.
8008
8009         (LocalVariableReference, This): TODO: needs cloned Block mapping.
8010
8011         (Argument): Add cloning capability.
8012
8013         * assign.cs (Assign): Implement CloneTo.
8014
8015         * anonymous.cs (ImplicitStandardConversionExists): Make virtual.
8016         
8017         * lambda.cs (ImplicitStandardConversionExists): Implement lambda
8018         version by calling Convert with the EmitContext (that we are
8019         currently storing in ec, this is not great, but will do for now,
8020         to avoid passing EmitContext parameters to hundreds of functions
8021         that do not need them now).
8022
8023         (SetExpression): Remove, it is not needed.
8024         
8025         (ContextualReturn): Implement CloneTo.
8026
8027         * statement.cs (Statement): Implement cloning infrastructure,
8028         similar to expressions.
8029
8030         (Block): Partial implementation of Clone for statements.
8031
8032         (Return): Implement clone.
8033         
8034         * constant.cs (Constant.CloneTo): New method, does nothing.
8035
8036         * codegen.cs (TempEc): Add a static EmitContext as a temporary
8037         solution, until we decide how to exactly do this.  
8038         
8039 2007-02-14  Marek Safar  <marek.safar@gmail.com>
8040  
8041         A fix for bug #80493
8042         * class.cs (FindOutBaseMethod): When the base accessor does not exist and
8043         a property is override we need to use second accessor.
8044
8045 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8046  
8047         A fix for bug #80418
8048         * attribute.cs, class.cs: Use correct calling conventions for pinvoke
8049         methods.
8050
8051 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8052
8053         Another fix for bug #80749
8054         * pending.cs: Abstract class has priority over interfaces.
8055
8056 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8057
8058         Another fix for bug #80749
8059         * pending.cs: Abstract class has priority over interfaces.
8060
8061 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8062
8063         Another fix for bug #80749
8064         * pending.cs: Abstract class has priority over interfaces.
8065
8066 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8067
8068         Another fix for bug #80749
8069         * pending.cs: Abstract class has priority over interfaces.
8070
8071 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8072
8073         * class.cs Better error message.
8074
8075         * driver.cs: Add shorter versions of -optimize option.
8076
8077 2007-02-13  Martin Baulig  <martin@ximian.com>
8078
8079         * class.cs (Constructor.Emit): Check the return value of
8080         ec.ResolveTopBlock() and return on error.
8081
8082 2007-02-13  Raja R Harinath  <rharinath@novell.com>
8083
8084         * ecore.cs (Error_InvalidExpressionStatement): Add a comma to error
8085         message to fix error message regression.
8086
8087 2007-02-12  Marek Safar  <marek.safar@gmail.com>
8088
8089         * delegate.cs: Delegate creation expression cannot be of Nullable type.
8090
8091 2007-02-12  Marek Safar  <marek.safar@gmail.com>
8092
8093         A fix for bug #80749
8094         * assign.cs (FieldInitializer): FieldInitializer has to keep track of
8095         its parent container.
8096
8097         * class.cs (DefineFieldInitializers): Each initializer can has different
8098         resolve context.
8099
8100         * const.cs: Updated.
8101
8102 2007-02-11  Miguel de Icaza  <miguel@novell.com>
8103
8104         * lambda.cs (LambdaExpression.Compatible): Remove some early code,
8105         now all the heavy lifting to check that embedded statements or
8106         expressions have the right form is done in the ContextualReturn.
8107
8108         (ContextualReturn): New class.  
8109
8110         * ecore.cs (Error_InvalidExpressionStatement): Make a helper
8111         method that can be invoked to report 201, so we do not replicate
8112         this everywhere.
8113
8114         * cs-parser.jay: Reuse Error_InvalidExpressionStatement.
8115         
8116         * cs-tokenizer.cs (xtoken): Correctly compute the column, it was
8117         treating tabs as spaces. 
8118
8119 2007-02-09  Marek Safar  <marek.safar@gmail.com>
8120
8121         A fix for bug #80315 by martin.voelkle@gmail.com (Martin Voelkle)
8122         * assign.cs: Use full implicit conversion for right side check.
8123
8124 2007-02-09  Marek Safar  <marek.safar@gmail.com>
8125
8126         * statement.cs (Switch): Switch over boolean type is not standardized.
8127
8128 2007-02-08  Marek Safar  <marek.safar@gmail.com>
8129
8130         A fix for bug #80755
8131         * decl.cs (FindBaseEvent): Don't use method cache for events.
8132
8133 2007-02-07  Marek Safar  <marek.safar@gmail.com>
8134
8135         * cs-parser.jay: Better syntax error handling.
8136
8137         * ecore.cs, enum.cs, statement.cs, typemanager.cs: Print enum member name
8138         instead of underlying type value.
8139
8140 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8141
8142         * driver.cs: Check define identifier before is registered.
8143
8144         * namespace.cs: Use existing error message.
8145
8146         * report.cs: New warning.
8147
8148 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8149
8150         A fix for bug #80742
8151         * expression.cs: Delegate Invoke method can be called directly.
8152
8153 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8154
8155         A fix for bug #80676
8156         * class.cs (IsEntryPoint): The Main method can have params modifier.
8157
8158 2007-02-04  Miguel de Icaza  <miguel@novell.com>
8159
8160         * parameter.cs (Parameter, Parameters): Add Clone method.
8161
8162         * anonymous.cs (Compatible): Turn method into virtual method, so
8163         LambdaExpression can implement a different behavior.
8164
8165         (CompatibleChecks, VerifyExplicitParameterCompatibility): Factor
8166         out the basic checking here, so it can be used by
8167         LambdaExpressions.
8168         
8169         * lambda.cs: Introduce "Compatible" function that will do the
8170         heavy lifting.
8171
8172 2007-02-02  Marek Safar  <marek.safar@gmail.com>
8173
8174         * attribute.cs: Unified one error message.
8175
8176         * class.cs (Class): Use type attributes and not properties to test static
8177         class.
8178         (IsEntryPoint): Don's pass local variable.
8179
8180         * convert.cs: Removed duplicate check.
8181
8182         * decl.cs, doc.cs, ecore.cs (LookupType): Renamed to LookupNamespaceOrType.
8183
8184         * driver.cs: Don't crash when soft reference does not exist.
8185
8186         * namespace.cs (EnsureNamespace): Renamed to RegisterNamespace.
8187         (UsingEntry): Removed redundant allocation.
8188
8189         * parameter.cs: Add fast path for type parameters.
8190
8191         * support.cs: Don't allocate attribute when it's not used.
8192
8193 2007-01-30  Miguel de Icaza  <miguel@novell.com>
8194
8195         * anonymous.cs
8196         (AnonymousMethodExpression.ImplicitStandardConversionExists): turn
8197         this into a virtual method, so we can override it in LambdaExpression.
8198
8199         * driver.cs: Improve diagnostics in case of failure. 
8200
8201         * cs-tokenizer.cs: Instead of trying to parse a type and a name,
8202         write a function that is slightly more complex and that parses:
8203
8204         type identifier [, type identifier]* )
8205
8206         The old function would return incorrectly a OPEN_PARENS_LAMBDA for
8207         this expression:
8208
8209                 (canEmpty ? i >= 0 : i > 0)
8210
8211 2007-01-30  Raja R Harinath  <rharinath@novell.com>
8212
8213         * cs-tokenizer.cs (parse_namespace_or_typename): Don't throw an
8214         exception on possibly valid code.
8215
8216 2007-01-29  Raja R Harinath  <rharinath@novell.com>
8217
8218         * cs-tokenizer.cs (is_punct) ['<']: Update to changes in
8219         Push/PopPosition.
8220         (parse_opt_type_arguments): Remove.  It's almost the same as
8221         parse_less_than.
8222         (parse_namespace_or_typename): Use parse_less_than.
8223
8224 2007-01-28  Miguel de Icaza  <miguel@novell.com>
8225
8226         * cs-tokenizer.cs: Typo fix, its not GMCS_SOURCES but GMCS_SOURCE,
8227         this bug took a few hours to find, because the state saved and
8228         restored by PushPosition and PopPosition was ignoring the state of
8229         parse_generic_less_than.
8230
8231         I can also now remove the handling of OP_LT and OP_GT, this solves
8232         the big mistery.
8233         
8234         * cs-tokenizer.cs: store the location for the ARROW token, we use
8235         that in the parser.
8236
8237         (PushPosition, PopPosition): save/restore also `current_token',
8238         restore `parse_generic_less_than' (was missing).
8239
8240         (parse_opt_type_arguments): use parse_type, not
8241         parse_namespace_or_typename to parse types.
8242
8243         * lambda.cs: Empty new file, will eventually have the lambda
8244         expression implementation.
8245
8246         * lambda.test: used to test the internal tokenizer. 
8247
8248         * report.cs (FeatureIsNotISO1): Rename from
8249         FeatureIsNotStandardized, because it was about the language level
8250         (1 vs 2) it was not about standarization.
8251
8252         (FeatureRequiresLINQ): New.
8253
8254         * support.cs (SeekableStreamReader): Only require that the reader
8255         is a TextReader, not a StreamReader, so we can plug StringReader. 
8256
8257         * cs-tokenizer.cs (parse_type_and_parameter): Returns true if at a
8258         given position in the input stream the following tokens can be
8259         parsed as a type followed by an identifier.
8260
8261         (is_punct): after a '(' if parse_type_and_parameter returns true,
8262         then return a special token OPEN_PARENS_LAMBDA which is used to
8263         avoid reduce/reduce errors in the grammar for the
8264         lambda_expression rules.
8265
8266         (parse_type): implement a type parser inside the
8267         tokenizer, the parser only returns true or false depending on
8268         whether the input at a given position can be parsed as a type.
8269
8270         (peek_token): new method used during type parsing.
8271
8272 2007-01-28  Raja R Harinath  <rharinath@novell.com>
8273
8274         Fix #80531
8275         * anonymous.cs (ScopeInfo.InflateParameters): New.
8276         (AnonymousContainer.Resolve): Use it to redirect types of
8277         delegate parameters.
8278
8279 2007-01-27  Raja R Harinath  <rharinath@novell.com>
8280
8281         Fix #80530
8282         * expression.cs (Error_InvalidArguments): Don't use two different
8283         messages for CS1503.  Use ExtraInformation and
8284         SymbolRelatedToPreviousError instead.
8285
8286         Fix #80358
8287         * decl.cs (DeclSpace.initialize_type_params): Don't access
8288         'type_params' of a partial class directly.
8289
8290 2007-01-26  Miguel de Icaza  <miguel@novell.com>
8291
8292         * constant.cs: Removed a handful of out-of-range checks that were
8293         not necessary. 
8294
8295 2007-01-25  Marek Safar  <marek.safar@gmail.com>
8296
8297         * expression.cs (CheckUselessComparison): Add additional check for char
8298         constants.
8299
8300         * namespace.cs: Fixed typo.
8301
8302 2007-01-23  Miguel de Icaza  <miguel@novell.com>
8303
8304         * constant.cs: Bloat removal, CheckRange and CheckUnsigned are
8305         gone, instead we inline the test, preventing the needless casts to
8306         longs, ulongs and doubles for the parameters, avoiding calls to
8307         methods that overchecked stuff, and instead inlined things
8308         nicely. 
8309
8310 2007-01-20  Marek Safar  <marek.safar@gmail.com>
8311
8312         * cs-parser.jay: Better parameter error handling.
8313
8314 2007-01-17  Marek Safar  <marek.safar@gmail.com>
8315
8316         A fix for bug #80368, #80522
8317         * expression.cs (ArrayCreation.only_constant_initializers): Indicates
8318         whether array initializer contains constants only.
8319         (ArrayCreation.Emit): Use better formula to decide when
8320         are array initializers for static initialization.
8321         (ArrayCreation.EmitDynamicInitializers): When the array is small enough we
8322         have to emit even constants otherwise they are pre-initialized.
8323
8324 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
8325             Raja R Harinath  <rharinath@novell.com>
8326
8327         Fix emit order of 'get' vs. 'set'.
8328         * support.cs (Accessors): New.
8329         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
8330         Note the order in which accessors are declared in the source.
8331         * class.cs (PropertyBase.DefineGet, PropertyBase.DefineSet): New.
8332         Refactored from Property.Define and Indexer.Define.
8333         (PropertyBase.DefineAccessors): New helper that calls the above in
8334         appropriate order as noted by the parser.
8335         (Property.Define, Indexer.Define): Update to changes.
8336         (PropertyBase.SetMethod.PropertyInfo): Don't return a null.
8337
8338 2007-01-17  Raja R Harinath  <rharinath@novell.com>
8339
8340         Fix cs0029-6.cs and gcs0029-2.cs (regression)
8341         * ecore.cs (EmptyConstantCast.ConvertImplicitly): Check that
8342         there's an implicit conversion from the current type to the target
8343         type before converting the underlying constant.
8344
8345 2007-01-16  Marek Safar  <marek.safar@gmail.com>
8346
8347         * const.cs (ResolveValue): Updated after constant conversion was made more
8348         generic.
8349
8350         * constant.cs (GetAttributableValue): constant to object conversion is
8351         used for attributes only.
8352         (IntConstant.ConvertImplicitly): Moved from convert to be used in all
8353         constant conversions.
8354         (LongConstant.ConvertImplicitly): Ditto.
8355
8356         * convert.cs (ImplicitNumericConversion): Extracted constant bussiness.
8357         (ImplicitConversionStandard): Handle constant conversion as extra step.
8358         It solves the issue when constant conversion was called indirectly like
8359         inside array initializer and constant folding was skipped.
8360
8361         * literal.cs (NullLiteral.ConvertImplicitly): Fixed an issue exposed by
8362         this change.
8363
8364         * statement.cs(ImplicitConversionStandard): Updated after constant
8365         conversion was made more generic.
8366
8367 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
8368
8369         * expression.cs (As.DoResolve): Use GenericConstraints instead of
8370         Constraints, solves the problem where the compiler incorrectly
8371         reported that a type parameter was not constrained to a class (Bug
8372         80518)
8373
8374 2007-01-14  Marek Habersack  <grendello@gmail.com>
8375
8376         * doc-bootstrap.cs: Fix a compilation problem in the bootstrap phase.
8377
8378 2007-01-14  Marek Safar  <marek.safar@gmail.com>
8379
8380         A fix for bug #80368
8381         * assign.cs (FieldInitializer): New class implements field
8382         initializer statement.
8383
8384         * attribute.cs: Update after FieldMember rename.
8385
8386         * class.cs (PropertyBasedMember): New common class for property based
8387         types.
8388         (InterfaceMemberBase): New base class for all members which can be used as
8389         an interface members.
8390         (MethodCore): Moved really common code to InterfaceMemberBase.
8391         (Method.Define): Equal and GetHasCode detection is relevant for methods
8392         only.
8393         (MethodData.Define): Don't assume that public event implements an
8394         interface automatically.
8395         (MethodData.DefineMethodBuilder): Issue an error even if only extern
8396         modifier is used.
8397         (MemberBase): Moved all interface speficic code to InterfaceMemberBase.
8398         (FieldMember): Merged with FieldBase.
8399         (EventProperty.AEventPropertyAccessor): New specialization to check whether
8400         event extern modifier can be used.
8401         (EventField.EventFieldAccessor): Moved event field specific code here.
8402         (Event.AllowedModifiers): Even event can be extern.
8403         (Event.FindOutBaseMethod): New override specific to events.
8404         (Indexer.parameters): Reintroduce parameters because base class holds
8405         only properties common data.
8406         (Indexer.CheckForDuplications): Indexers are threated as methods so we
8407         need do extra parameters check.
8408
8409         * const.cs: Update after FieldMember rename.
8410
8411         * decl.cs (MemberCache.FindBaseEvent): New method.
8412
8413         * doc.cs (GetMethodDocCommentName): Accept parameters as extra argument
8414         to reflect that indexer is now derived from PropertyBased.
8415
8416         * ecore.cs (GetMemberType): Made public.
8417         (EventExpr.ResolveMemberAccess): Use right event cache and checks for
8418         obsolete event.
8419
8420         * flowanalysis.cs, statement.cs: Update after FieldMember rename.
8421         
8422         * typemanager.cs (CSharpSignature): Correctly print event accessors.
8423         (RegisterEvent): Removed.
8424         (RegisterPrivateFieldOfEvent): Renamed to RegisterEventField.
8425         (GetPrivateFieldOfEvent): Renamed to GetEventField.
8426
8427 2007-01-11  Raja R Harinath  <rharinath@novell.com>
8428
8429         Fix #80249
8430         * statement.cs (CollectionForeach.TryType): Prefer generic
8431         GetEnumerator over non-generic variant.  Fix code to follow comments.
8432
8433 2007-01-09  Raja R Harinath  <rharinath@novell.com>
8434
8435         Fix #80446
8436         * support.cs (ReflectionParameter): Don't use an invalid index on
8437         the generic parameter data.
8438
8439 2007-01-08  Miguel de Icaza  <miguel@novell.com>
8440
8441         * driver.cs: Just add a tiny bit of infrastructure.
8442
8443 2007-01-02  Marek Safar  <marek.safar@gmail.com>
8444
8445         * class.cs (VerifyMembers): Fixed an crash reported on mono mailing list
8446         where field type is struct from current assembly.
8447         
8448         * ecore.cs (EnumConstant.AsString): Report an enum member name whenever
8449         it is possible.
8450
8451 2007-01-02  Marek Safar  <marek.safar@gmail.com>
8452
8453         A fix for bug #80381
8454         * attribute.cs (AttributeTester.RegisterNonObsoleteType): Registers
8455         the core types.
8456
8457         * namespace.cs (GlobalRootNamespace.LookupTypeReflection): Better error
8458         messages.
8459         (Namespace.LookupType): Always use core types from corlib when speficied.
8460
8461         * report.cs: A new warning.
8462
8463         * rootcontext.cs (BootstrapCorlib_ResolveInterface,
8464         BootstrapCorlib_ResolveClass): Register type as non-obsolete type.
8465         (ResolveCore): Add missing System.Runtime.InteropServices._Attribute.
8466
8467         * typemanager.cs (CoreLookupType): Register type as non-obsolete type.
8468         (InitCoreTypes): Set expression type of object_type and value_type
8469         immediately after lookup.
8470
8471 2007-01-01  Miguel de Icaza  <miguel@novell.com>
8472
8473         * cs-tokenizer.cs: Accept Pc class characters (Connector
8474         Punctuation) as valid identifiers.  Fixes #78259
8475
8476         * expression.cs (Invocation.DoResolve): Moved the check for the
8477         use of `this' for doing method calls to the Invocation resolution
8478         step, after overload resolution has taken place instead of doing
8479         the check at the low-level `This.DoResolve' level.
8480
8481         The `This.DoResolve'(appens before overload resolution, so it has
8482         no way of knowing if the method that will be called will be
8483         instace or static, triggering an erroneous report for cs0188 (Bug
8484         78113).
8485
8486         We now do the check for instance method invocations after we know
8487         what method will be called.
8488
8489         (This.CheckThisUsage): Move the actual use of this structure
8490         checking into its own method and expose it. 
8491
8492         * Everywhere that called Error_ValueCannotBeConverted: pass a new
8493         EmitContext.
8494
8495         Exceptions: Null.ConvertImplicitly,
8496         Constant.ImplicitConversionRequired as there are too many call
8497         sites for passing the ec. 
8498
8499         * ecore.cs (Expression.Error_ValueCannotBeConverted): Take an
8500         EmitContext, if the value is null, then we do not try to provide
8501         the extra information from the error (If a userdefined conversion
8502         exists, as UserDefinedConversion requires a non null-EmitContext).
8503
8504         Fixes: #80347
8505
8506 2006-12-30  Raja R Harinath  <rharinath@novell.com>
8507
8508         * flowanalysis.cs (MyBitVector): Document some invariants.
8509         (MyBitVector.Or, MyBitVector.And): Reimplement the optimizations
8510         introduced below, and add a couple of others, 
8511
8512 2006-12-30  Marek Safar  <marek.safar@gmail.com>
8513
8514         * attribute.cs (GetMethodObsoleteAttribute): Uses new
8515         GetPropertyFromAccessor and GetEventFromAccessor.
8516         
8517         * class.cs (MethodCore.CheckBase): A new warning when obsolete member
8518         overrides non-obsolete one.
8519         (Indexer.Define): Error message has been moved to the parser.
8520
8521         * cs-parser.jay: Better syntax errors handling.
8522
8523         * delegate.cs (NewDelegate.DoResolve): Issue less confusing error message
8524         when an invocation has no arguments.
8525
8526         * ecore.cs: Removed not used caching.
8527
8528         * expression.cs (IsSpecialMethodInvocation): Reuses TypeManager
8529         implementation.
8530
8531         * report.cs: Add a new warning.
8532
8533         * support.cs (ReflectionParameters): Implements Equals, GetHashCode.
8534
8535         * typemanager.cs (enumeration_type): Removed.
8536         (CSharpSignature): Reuses IsSpecialMethod.
8537         (IsEqual): Hack for MS BCL.
8538         (GetPropertyFromAccessor): New method.
8539         (GetEventFromAccessor): New method.
8540         (IsSpecialMethod): Fixed to handle more cases.
8541
8542 2006-12-30  Marek Safar  <marek.safar@gmail.com>
8543
8544         * cs-tokenizer.cs (PreProcessDefinition, handle_preprocessing_directive):
8545         Made white spaces array static.
8546
8547         * ecore.cs (RemoveGenericArity): Optimized.
8548
8549         * flowanalysis.cs (MyBitVector.Or, MyBitVector.And): Optimized (up to
8550         10 times faster).
8551         (MyBitVector.initialize_vector): Simplified.
8552
8553 2006-12-22  Miguel de Icaza  <miguel@novell.com>
8554
8555         * ecore.cs: Am not entirely happy with this hack, but it seems to
8556         address the issue in 80257 (a small test case for
8557         CreativeDocs.NET). 
8558
8559         I set the MethodGroupExpr.Type to an internal compiler type
8560         (itself in this case) to force the resolution to take place.   Why
8561         it does not take place with a null is beyond me.
8562
8563 2006-12-20  Marek Safar  <marek.safar@gmail.com>
8564
8565         A fix for bug #80288
8566         * expression.cs (ResolveOperator): Consider user defined conversion for
8567         logical and operator too.
8568         (EmitBranchable): Optimization for logical and when full constant folding
8569         could not be applied but one operand is constant.
8570
8571 2006-12-19  Marek Safar  <marek.safar@gmail.com>
8572
8573         * class.cs (GetClassBases): Write 5 times every day, will never use
8574         FullName for error reporting.
8575
8576         * decl.cs (AsAccessible, CheckAccessLevel): Always unpack arrays first.
8577
8578 2006-12-19  Martin Baulig  <martin@ximian.com>
8579
8580         * statement.cs (LocalInfo.EmitSymbolInfo): New public method; emit
8581         the symbol file info here.
8582
8583 2006-12-18  Marek Safar  <marek.safar@gmail.com>
8584
8585         * cs-tokenizer.cs (handle_preprocessing_directive): When previous section
8586         of `elseif' is taking then following sections are not taking.
8587         Fixes an issue reported on mono mailing list.
8588
8589 2006-12-18  Marek Safar  <marek.safar@gmail.com>
8590
8591         A fix for bug #80300
8592         * cs-tokenizer.cs (PreProcessDefinition): Do no define/undefine when
8593         a caller is not taking.
8594
8595 2006-12-18  Raja R Harinath  <rharinath@novell.com>
8596
8597         * anonymous.cs: Change several TypeContainer declarations to DeclSpace.
8598         (CompilerGeneratedClass): Use parent.PartialContainer unconditionally.
8599         (RootScopeInfo, AnonymousMethodMethod): Update to changes.
8600         * iterator.cs: Change several TypeContainer declarations to DeclSpace.
8601         * class.cs: Update to changes.
8602
8603 2006-12-17  Marek Safar  <marek.safar@gmail.com>
8604
8605         A fix for bug #79934
8606         * anonymous.cs (CompilerGeneratedClass): Register class in a shared
8607         partial container.
8608
8609         * class.cs (ResolveMembers): Register an iterator in current container and
8610         not in shared one.
8611
8612 2006-12-16  Raja R Harinath  <rharinath@novell.com>
8613
8614         Fix test-543.cs
8615         * expression.cs (VerifyArgumentsCompat): Allow zero arguments to
8616         satisfy a params annotated parameter.
8617
8618 2006-12-16  Marek Safar  <marek.safar@gmail.com>
8619
8620         A fix for bug #77014
8621         * expression.cs (Invocation.BetterFunction): Fixed to cope with dynamic
8622         paramters correctly and not rely on hacks in Parameters class.
8623         (Invocation.IsParamsMethodApplicable): Changed to accept params parameter
8624         at any possition.
8625         (Invocation.VerifyArgumentsCompat): Ditto.
8626         (Invocation.EmitArguments): Changed to correctly emit params arguments at
8627         any possition.
8628
8629         * parameter.cs (HasParams): Don't assume that params is the last one.
8630
8631         * support.cs (ReflectionParameters.ctor): Look for params attribute
8632         correctly.
8633         (ReflectionParameters.ParameterType): Removed hack when we returned last
8634         parameter for out of range parameters.
8635         (ParameterName, ParameterModifier): Ditto.
8636
8637 2006-12-14  Marek Safar  <marek.safar@gmail.com>
8638
8639         A fix for bug #79987
8640         * decl.cs (DeclSpace.VerifyClsCompliance): External names cache is null
8641         when assembly is not CLS compliant but type is. I have no idea why is this
8642         allowed.
8643
8644         * typemanager.cs (Reset): Invalidate AllClsTopLevelTypes cache.
8645
8646 2006-12-13  Miguel de Icaza  <miguel@novell.com>
8647
8648         * class.cs (ConstructorInitializer.Resolve): Allow for ":this()"
8649         in struct constructors, they are basically no-ops.
8650
8651 2006-12-12  Marek Safar  <marek.safar@gmail.com>
8652
8653         * cs-tokenizer.cs (Position): Save preprocessor status too.
8654
8655 2006-12-12  Marek Safar  <marek.safar@gmail.com>
8656
8657         A fix for bug #77794
8658         * cs-tokenizer.cs (consume_identifier): Check for correct partial context.
8659
8660 2006-12-12  Marek Safar  <marek.safar@gmail.com>
8661
8662         * cs-tokenizer.cs (get_cmd_arg): Support CR as the line terminator.
8663         Fixes #69299.
8664         (pp_expr): Report error for an invalid expression.
8665         (handle_preprocessing_directive): Simplified; add more error checking.
8666
8667 2006-12-11  Marek Safar  <marek.safar@gmail.com>
8668
8669         A fix for bug #74939
8670         * cs-tokenizer.cs (is_punct): We cannot simply disable preprocessor
8671         directives handling.
8672
8673 2006-12-10  Marek Safar  <marek.safar@gmail.com>
8674
8675         A fix for bugs #80093, and #75984
8676         * cs-tokenizer.cs (handle_preprocessing_directive): Fixed #if/#else/#endif
8677         logic, it seems to me as it worked before "by coincidence".
8678         (xtoken): Simplified to use reworked handle_preprocessing_directive.
8679         (cleanup): Enabled endif check.
8680
8681 2006-12-09  Marek Safar  <marek.safar@gmail.com>
8682
8683         A fix for bug #80162
8684         * statement.cs (CollectionForeach.TryType): Generics and non-generics
8685         enumerators are never ambiguous.
8686
8687 2006-12-08  Raja R Harinath  <rharinath@novell.com>
8688
8689         Fix #80060
8690         * cs-tokenizer.cs (parse_less_than): Recognize double-colons too.
8691
8692 2006-12-06  Marek Safar  <marek.safar@gmail.com>
8693
8694         A fix for bug #80144
8695         * class.cs (EventProperty.Define): Explicit implementation means
8696         that an even is used.
8697
8698 2006-12-06  Marek Safar  <marek.safar@gmail.com>
8699
8700         Fixes the operators implementation (part II)
8701
8702         * cfold.cs (DoConstantNumericPromotions): Renamed to
8703         DoBinaryNumericPromotions and simplified.
8704         (BinaryFold): Couple of conversion fixes; simplified.
8705
8706         * constant.cs, ecore.cs, literal.cs
8707         (ToType): Renamed to ConvertImplicitly.
8708         (Reduce): Renamed to ConvertExplicitly.
8709
8710         * class.cs, convert.cs: Updated.
8711
8712         * expression.cs: TryReduce doesn't throw an exception.
8713
8714 2006-12-01  Marek Safar  <marek.safar@gmail.com>
8715
8716         A fix for bug #80108
8717         * ecore.cs (EventExpr.EmitAddOrRemove): Don't crash when right side is not
8718         compatible.
8719
8720 2006-11-30  Marek Safar  <marek.safar@gmail.com>
8721
8722         Fixes unary operators implementation (part I)
8723         Also fixes #80026
8724
8725         * cfold.cs (Error_CompileTimeOverflow): Made internal
8726
8727         * const.cs (IConstant): Changed to use reference to constant and
8728         not constant itself.
8729         Updated IConstant implementations.
8730
8731         * constant.cs (CreateConstant): New factory method.
8732         Updated IConstant implementation.
8733
8734         * convert.cs (ImplicitStandardConversionExists): Uses compiler Equals.
8735
8736         * ecore.cs: Updated to use CreateConstantReference.
8737
8738         * enum.cs: Reflects IConstant changes.
8739
8740         * expression.cs (Unary): Reimplemented +,-,~ to conform C# standard.
8741
8742         * literal.cs (NullConstant): Change to be independently usable.
8743
8744 2006-11-29  Martin Baulig  <martin@ximian.com>
8745
8746         * class.cs (Constructor.Emit): Correctly handle anonymous methods;
8747         we need to emit the scope initializer before calling the base .ctor.
8748
8749         * anonymous.cs: Merged back from the new anonymous methods branch.
8750         (AnonymousMethodHost): Renamed to `RootScopeInfo'.
8751
8752         * expression.cs (ParameterReference.DoResolveBase): Create a
8753         "normal" ScopeInfo when capturing parameters rather than using the
8754         root scope; this makes things work with anonymous methods having
8755         parameters.
8756
8757         * statement.cs
8758         (ToplevelBlock.AnonymousMethodHost): Renamed into `RootScope'.
8759
8760 2006-11-22  Marek Safar  <marek.safar@gmail.com>
8761
8762         A fix for bug #79987
8763         * class.cs (VerifyClsCompliance): Move redundant CLS compliance attribute
8764         check to a base class.
8765         * decl.cs (VerifyClsCompliance): Warn that CLS compliance cannot be tested
8766         only when assembly has missing attribute.
8767         * report.cs: Update.
8768
8769 2006-11-21  Marek Safar  <marek.safar@gmail.com>
8770
8771         * cs-tokenizer.cs: Merged with gmcs version.
8772
8773 2006-11-20  Marek Safar  <marek.safar@gmail.com>
8774
8775         * cs-tokenizer.cs,
8776         * cs-parser.jay: Better error message when partial keyword is misplaced.
8777
8778 2006-11-19  Gert Driesen  <drieseng@users.sourceforge.net>
8779
8780         A fix for bug #79810
8781         report.cs: CS1058 only applies to 2.0 profile (gmcs).
8782         codegen.cs: on 2.0 profile, non-exception throwables are wrapped in
8783         a RuntimeWrappedException by default.
8784
8785 2006-11-18  Marek Safar  <marek.safar@gmail.com>
8786
8787         A fix for bug #79843
8788         * delegate.cs (Delegate.VerifyMethod): Fixed covariance and contravariance
8789         implementation.
8790         (DelegateCreation.Error_NoMatchingMethodForDelegate): Ditto.
8791
8792 2006-11-18  Marek Safar  <marek.safar@gmail.com>
8793
8794         * driver.cs, namespace.cs: Uses faster IndexOf version.
8795
8796 2006-11-17  Marek Safar  <marek.safar@gmail.com>
8797
8798         A fix for bug #79941
8799         * class.cs (MemberCore.IsDuplicateImplementation): Add more tricks for
8800         operators.
8801         (Operator.Define): Implicit/Explicit operator of same type is duplicate
8802         even if internal name is different.
8803         * convert.cs (GetConversionOperator): Replaced EmitContext with parentType.
8804         (UserDefinedConversion): Simplified as the operators cannot be internal.
8805         * ecore.cs (Error_ValueCannotBeConverted): Take account of user
8806         conversions.
8807         (MethodLookup): Replaced EmitContext with parentType.
8808         * expression.cs: Updated.
8809
8810 2006-11-09  Raja R Harinath  <rharinath@novell.com>
8811
8812         * driver.cs (BadAssembly): Handle all the ugliness of
8813         DefineDynamicAssembly.
8814
8815 2006-11-08  Raja R Harinath  <rharinath@novell.com>
8816
8817         Address parts of #58244 -- most of what's left is in the runtime
8818         * driver.cs (LoadAssembly): Simplify slightly.  Add CS0009 and
8819         CS1509 error checks, and handle them for all assembly loads, not
8820         just the first invocation.
8821         (LoadModule): Likewise.  Move handling of 'adder_method' ...
8822         * codegen.cs (AssemblyClass.AddModule): ... here.
8823
8824 2006-11-02  Marek Safar  <marek.safar@gmail.com>
8825
8826         * statement.cs.cs (CollectionForeach.TryType): Issue a error when
8827         IEnumerable<T> is ambiguous.
8828
8829 2006-10-31  Marek Safar  <marek.safar@gmail.com>
8830
8831         A fix for bug #67689
8832         * statement.cs.cs (CollectionForeach.TryType): Issue a warning when
8833         GetEnumerator is ambiguous.
8834
8835         * report.cs: Add new warning.
8836
8837 2006-10-29  Marek Safar  <marek.safar@gmail.com>
8838
8839         A fix for bug #78602
8840         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
8841         to protected member can be nested type.
8842
8843 2006-10-28  Marek Safar  <marek.safar@gmail.com>
8844
8845         A fix for bug #78965
8846         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
8847         to protected member must derive from current type.
8848
8849 2006-10-27  Marek Safar  <marek.safar@gmail.com>
8850
8851         assign.cs: Reuses error method.
8852
8853         ecore.cs (Expression.Error_ValueCannotBeConverted): Report a value
8854         instead of type for constants.
8855         (Expression.Error_ValueAssignment): Common error method.
8856
8857         * expression.cs (UnaryMutator.ResolveOperator): Value cannot be used
8858         for any assignment.
8859
8860 2006-10-27  Marek Safar  <marek.safar@gmail.com>
8861
8862         A fix for bug #79081
8863         * expression.cs (MemberAccess.DoResolve): Check nested type
8864         accessibility.
8865
8866 2006-10-27  Atsushi Enomoto  <atsushi@ximian.com>
8867
8868         * doc.cs : nested delegates were not handled. Fixed bug #79754.
8869
8870 2006-10-26  Marek Safar  <marek.safar@gmail.com>
8871
8872         A fix for bug #76591
8873         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous method.
8874
8875 2006-10-26  Marek Safar  <marek.safar@gmail.com>
8876
8877         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Don't allow to have
8878         type forwarder of the same type multiple times.
8879
8880 2006-10-26  Raja R Harinath  <rharinath@novell.com>
8881
8882         Fix #78820
8883         * ecore.cs (PropertyExpr.InstanceResolve): Always resolve the
8884         instance as an rvalue, even when we later resolve as an lvalue.
8885
8886 2006-10-25  Martin Baulig  <martin@ximian.com>
8887
8888         * anonymous.cs: Fix #79673.
8889
8890 2006-10-24  Marek Safar  <marek.safar@seznam.cz>
8891
8892         A fix for bug #79666
8893         expression.cs (ArrayCreation.GetAttributableValue): An initializer can be
8894         ignored when is optimized (= default value) as its value is already set.
8895
8896 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
8897
8898         A fix for bug #79724
8899         * report.cs (SymbolRelatedToPreviousError): Uses DeclSpace instead of
8900         TypeContainer for type lookup.
8901
8902 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
8903
8904         A fix for bug #79231
8905         * ecore.cs (ResolveAsBaseTerminal): Removed redundant error test.
8906         * expression.cs (OverloadResolve): Always convert type name for
8907         an error message.
8908         (ResolveNamespaceOrType): Don't confuse a nested type with any 
8909         other member.
8910
8911 2006-10-18  Martin Baulig <martin@ximian.com>
8912
8913         * anonymous.cs: Propagate the IsStatic state, fixes the crasher in banshee.
8914
8915 2006-10-17  Miguel de Icaza  <miguel@novell.com>
8916
8917         * convert.cs: Fix typo, fixes the test-535.cs, we were casting to
8918         an int32, but requesting an int64 from the conversion
8919
8920 2006-10-12  Martin Baulig  <martin@ximian.com>
8921
8922         * anonymous.cs
8923         (AnonymousContainer.Resolve): Inflate the `ReturnType'.  Fixes #79592.
8924         
8925 2006-10-12  Martin Baulig  <martin@ximian.com>
8926
8927         * statement.cs
8928         (Using.EmitLocalVariableDeclFinally): Small fix for iterators.
8929
8930 2006-10-11  Miguel de Icaza  <miguel@novell.com>
8931
8932         * convert.cs: Remove broken code: I was doing the "Existance"
8933         tests for Implicit conversions.
8934
8935 2006-10-10  Miguel de Icaza  <miguel@novell.com>
8936
8937         * convert.cs: Added one missing case in
8938         ImplicitStandardConversionExists uint64 to intptr.
8939
8940         Fixes #59800
8941         
8942         * typemanager.cs (uintptr_type): another core known type.   
8943
8944         * ecore.cs (OperatorCast): routine used to do cast operations that
8945         depend on op_Explicit.  We could change some of the Decimal
8946         conversions to use this.
8947
8948         This one has a probe mechanism that checks both types for an op_
8949         which it coudl be used to eliminate two classes: CastToDecimal
8950         and CastFromDecimal.
8951
8952         * convert.cs: Implement the conversions documented in #59800
8953         
8954 2006-10-10  Martin Baulig  <martin@ximian.com>
8955
8956         * iterators.cs (Iterator.Resolve): Call RootScope.ResolveType()
8957         before RootScope.ResolveMembers().
8958
8959         * anonymous.cs (ScopeInfo.CapturedScope.ctor): Use the child's
8960         `CurrentType' if appropriate.
8961
8962 2006-10-09  Marek Safar  <marek.safar@seznam.cz>
8963
8964         A fix for bug #78568
8965         * cs-tokenizer.cs (Deambiguate_CloseParens): Expression cannot be cast
8966         when contains binary operators.
8967         * cs-parser.jay: Updated.
8968
8969 2006-10-09  Martin Baulig  <martin@ximian.com>
8970
8971         * delegate.cs
8972         (Delegate.DefineType): Don't call TypeParameter.Resolve() here;
8973         moved that into Define() and also do the other type parameter
8974         checks there.  Fixes #79094.  Added gtest-292.cs.
8975
8976         * expression.cs
8977         (ArrayCreation.EmitDynamicInitializers): Use `etype.IsValueType'
8978         since that doesn't include type parameters; don't use `Ldelema'
8979         for type parameters.  Fixes #78980.  Added gtest-293.cs.
8980
8981 2006-10-08  Marek Safar  <marek.safar@seznam.cz>
8982
8983         A fix for #77796
8984         * convert.cs (ExplicitReferenceConversion): Only enum to enum value
8985         conversion is allowed.
8986
8987 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
8988
8989         * ecore.cs (Expression.MemberLookup): Don't register any symbol for
8990         error reporting when no error occurs.
8991
8992 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
8993
8994         * cfold.cs (ConstantFold.BinaryFold): Report an error when the conversion
8995         does not exist.
8996
8997 2006-10-06  Raja R Harinath  <rharinath@novell.com>
8998
8999         Fix #79584
9000         * class.cs (DefineTypeBuilder): Check circular dependencies before
9001         setting the parent of the TypeBuilder.
9002         (CheckRecursiveDefinition): Don't use 'BaseType', since
9003         it may not be valid until after DefineTypeBuilder.  Use
9004         'base_type' instead.
9005
9006 2006-10-04  Martin Baulig  <martin@ximian.com>
9007
9008         Merged the Anonymous Methods patch.
9009
9010         * anonymous.cs, iterators.cs: The new anonymous methods code.
9011
9012         * statement.cs (Variable): New public abstract class.
9013         (LocalInfo.Variable): New public property.
9014         (LocalInfo.ResolveVariable): New public method.
9015         (Block.Flags): Add `IsIterator'.
9016         (Block.AddVariable): Improved the CS0136 check.
9017         (Block.AnonymousChildren): New public property.
9018         (Block.AddAnonymousChild): New public method.
9019         (ToplevelBlock): Update to use the new anonymous method framework.
9020         (ToplevelBlock.ctor): `container' is now a `Block' and not a
9021         `ToplevelBlock'; this is required to correctly implement the
9022         CS0136 check.
9023         (Fixed, Using): Use `TemporaryVariable' instead of directly
9024         creating the `LocalBuilder'.
9025
9026         * parameter.cs (Parameter.ResolveVariable): New public method.
9027         (Parameters.ResolveVariable): Likewise.
9028
9029         * ecore.cs (TemporaryVariable): Use the new `Variable' framework.
9030
9031         * class.cs (TypeContainer): Replaced the `iterators' list and
9032         corresponding methods with a list of `CompilerGeneratedClass'es.
9033         (TypeContainer.ResolveMembers): New public method.
9034         (Method): `IIteratorContainer' has been replaced by
9035         `IAnonymousHost'.
9036
9037         * expression.cs (VariableReference): New public abstract base
9038         class for `LocalVariableReference', `ParameterReference' and
9039         `This'.
9040
9041         * codegen.cs (EmitContext): Removed `capture_context',
9042         `HaveCaptureInfo', `EmitScopeInitFromBlock()' and `Capture*()'.
9043         (EmitContext.EmitThis): Removed.
9044
9045         * cs-parser.jay: Replace `iterator_container' with
9046         `anonymous_host'.       
9047
9048 2006-10-04  Martin Baulig  <martin@ximian.com>
9049
9050         * generic.cs (GenericMethod): Don't make this abstract.
9051         (Constraints.Clone): Added dummy implementation.
9052
9053 2006-10-04  Raja R Harinath  <harinath@gmail.com>
9054
9055         Fix #79577
9056         * namespace.cs (LookForAnyGenericType): Avoid nullref on
9057         'declspaces'.  Avoid allocating arrays willy-nilly.
9058
9059         Fix #79553
9060         * cfold.cs (BinaryFold): Move boolean Equality and Inequality
9061         cases out of the switch.
9062
9063 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
9064
9065         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Better error
9066         message when non-generic type is used with the type arguments.
9067         * expression.cs: Updated.
9068
9069 2006-09-28  Raja R Harinath  <rharinath@novell.com>
9070
9071         Fix #79013
9072         * convert.cs (Convert.ImplicitStandardConversionExists): Avoid infloop.
9073         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
9074         Change semantics slightly.  Don't insist on having only one
9075         temporary EmptyExpression -- just throttle the creation of new ones.
9076
9077         Fix #79451
9078         * ecore.cs (Expression.MemberLookup): Enable CS0229 errors for
9079         non-interfaces too.  If no methods are found, don't try to create
9080         a MethodGroupExpr.
9081
9082 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
9083
9084         * ecore.cs (ResolveAsTypeStep): Print better error when type can be
9085         generic type.
9086
9087         * namespace.cs (Namespace.LookForAnyGenericType): New method to help
9088         us produce better error message.
9089
9090 2006-09-27  Marek Safar  <marek.safar@seznam.cz>
9091
9092         * expression.cs (Binary.ResolveOperator): Warn about a side effect
9093         of the `|' operator.
9094
9095         * report.cs: A new warning added.
9096
9097 2006-09-27  Martin Baulig  <martin@ximian.com>
9098
9099         * generic.cs (GenericMethod): Don't make this abstract.
9100
9101 2006-09-27  Martin Baulig  <martin@ximian.com>
9102
9103         * report.cs
9104         (InternalErrorException): Added overloaded ctor taking a params array.
9105
9106 2006-09-26  Marek Safar  <marek.safar@seznam.cz>
9107
9108         * class.cs, codegen.cs, const.cs, cs-tokenizer.cs, driver.cs, ecore.cs:
9109         Fixed the cases when same error was reported twice.
9110
9111         * report.cs (SymbolRelatedToPreviousError): Simplified as all our messages
9112         now report symbol information.
9113
9114 2006-09-25  Martin Baulig  <martin@ximian.com>
9115
9116         * class.cs: Completely unified with the gmcs version.
9117
9118 2006-09-25  Martin Baulig  <martin@ximian.com>
9119
9120         * typemanager.cs (TypeManager.IsNullableType): New public function.
9121         (TypeManager.IsNullableTypeOf): Likewise.
9122         (TypeManager.IsNullableValueType): Likewise.
9123
9124         * class.cs (MethodCore): Added the `GenericMethod' argument from
9125         gmcs and also unified all classes derived from `MethodCore' with gmcs.
9126
9127 2006-09-24  Raja R Harinath  <harinath@gmail.com>
9128
9129         * convert.cs: Unify with gmcs version.
9130
9131 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9132
9133         * decl.cs (DeclSpace.VerifyClsCompliance): When type has type parameters
9134         verify them as well.
9135
9136         * report.cs: New warning.
9137
9138 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9139
9140         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
9141         for anonymous block with out argument.
9142
9143 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9144
9145         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
9146         not used private events only.
9147
9148 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
9149
9150         * cfold.cs (BinaryFold): On the guest to unify empty constant cast.
9151
9152         * const.cs (Const.Define): Check for constant type.
9153         (Const.IsConstantTypeValid): Looks for valid constant types.
9154
9155         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
9156
9157         * ecore.cs (EmptyConstantCast): New common class for all constant based
9158         EmptyCast(s).
9159
9160         * expression.cs (Is.DoResolve): Handle null constant especially.
9161         (New.DoResolve): Check for new void().
9162         (MemberAccess.DoResolve): Cope with all kind of nulls.
9163
9164         * literal.cs (NullConstant): Uses EmptyConstantCast.
9165         (NullDefault): Based on EmptyConstantCast.
9166         (NullLiteral): Uses EmptyConstantCast.
9167
9168         * statement.cs (Block.ResolveMeta): Check for constant type.
9169
9170 2006-09-22  Martin Baulig  <martin@ximian.com>
9171
9172         * delegate.cs, attribute.cs: Merged with the gmcs versions.
9173
9174 2006-09-22  Raja R Harinath  <rharinath@novell.com>
9175
9176         * literal.cs (NullDefault): The type of default(IFoo) is 'IFoo',
9177         not the null type.
9178
9179         Fix part of #79451
9180         * typemanager.cs (Closure.Filter): Consider PrivateScope attributes.
9181         * decl.cs (DeclSpace.FindMemberToOverride): Likewise.  Reorganize
9182         code slightly.
9183
9184 2006-09-22  Martin Baulig  <martin@ximian.com>
9185
9186         * ecore.cs: Merged with the gmcs version.
9187
9188         * generic.cs (ConstructedType): New dummy class.
9189         (TypeArguments): Don't make this abstract.
9190
9191         * typemanager.cs
9192         (TypeManager.IsGenericTypeDefinition): New method.
9193         (TypeManager.GetGenericFieldDefinition): Moved here from gmcs.
9194
9195 2006-09-22  Raja R Harinath  <rharinath@novell.com>
9196
9197         * expression.cs (ComposedCast): Check for arrays of TypedReference
9198         before creating the type, not after.
9199
9200 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
9201
9202         * cfold.cs, const.cs, enum.cs, statement.cs: Updated
9203         after ToType change.
9204
9205         * constant.cs (Constant.ImplicitConversionRequired): Designed to used
9206         when constant must be implicitly convertible.
9207
9208         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
9209
9210         * ecore.cs (NullCast): Derives from NullConstant.
9211
9212         * expression.cs (Is.DoResolve): Removed useless variables.
9213         (Conditional.DoResolve): Quick hack for `Foo () ? null : null'.
9214         (New.Constantify): Add enum support.
9215         (MemberAccess.DoResolve): Add warning when accessing null constant or
9216         variable.
9217
9218         * generic.cs (GenericConstraints.IsReferenceType): Another dummy
9219         property.
9220
9221         * literal.cs (NullConstant): New abstract class with common
9222         functionality for all null specializations.
9223         (NullDefault): Represents default(X) when result can be
9224         reduced to null.
9225         (NullLiteral): Updated.
9226
9227         * report.cs: Add new warning.
9228
9229 2006-09-21  Martin Baulig  <martin@ximian.com>
9230
9231         * generic.cs (GenericTypeParameterBuilder): Removed this ugly hack.
9232
9233 2006-09-21  Martin Baulig  <martin@ximian.com>
9234
9235         * generic.cs (GenericConstraints): New dummy class.
9236         (Constraints): Likewise.
9237         (TypeParameter): Likewise.
9238         (TypeParameterName): Likewise.
9239         (GenericMethod): Likewise.
9240
9241         * typemanager.cs (TypeManager.GetGenericArguments): New method.
9242
9243         * decl.cs: Merged with the gmcs version.
9244
9245 2006-09-21  Raja R Harinath  <rharinath@novell.com>
9246
9247         * generic.cs (TypeParameter): Implement IMemberContainer.
9248         (GenericTypeParameterBuilder): New.  An abominable repugnant hack.
9249
9250         * rootcontext.cs: Unify with gmcs version.
9251
9252         * report.cs: Unify with gmcs version.
9253         * typemanager.cs (AddTypeParameter, LookupTypeParameter): Move
9254         from gmcs/generics.cs.
9255         * generics.cs (TypeParameter): New dummy class.
9256
9257         * support.cs: Unify with gmcs version.
9258
9259 2006-09-20  Raja R Harinath  <rharinath@novell.com>
9260
9261         * ecore.cs (MethodGroupExpr.ResolveGeneric): New dummy method.
9262         * expression.cs (MemberAccess, BaseAccess): Remove GMCS_SOURCE #ifdef.
9263
9264         * decl.cs (MemberName): Unify with gmcs, except for GetTypeExpression.
9265         * generic.cs (TypeArguments): New dummy class to help avoid #ifdefs.
9266         * mcs.exe.sources: Add generic.cs.
9267
9268         * codegen.cs: Unify with gmcs version.
9269
9270         * codegen.cs (IResolveContent.GenericDeclContainer): Copy from gmcs.
9271         (EmitContext): Add GenericDeclContainer implementation.
9272         * decl.cs (MemberCore, DeclSpace): Likewise.
9273         * namespace.cs: Remove #ifdef GMCS_SOURCE.
9274
9275         * namespace.cs (GetTypeInAssembly): Remove #ifdef GMCS_SOURCE.
9276         MCS TypeManager has a corresponding dummy method.
9277
9278 2006-09-19  Martin Baulig  <martin@ximian.com>
9279
9280         * expression.cs: Completely merged with the gmcs version.
9281
9282 2006-09-19  Martin Baulig  <martin@ximian.com>
9283
9284         * expression.cs (Invocation): Merged with the gmcs version.
9285         (ArrayAccess.GetStoreOpcode): Likewise.
9286
9287 2006-09-19  Martin Baulig  <martin@ximian.com>
9288
9289         * typemanager.cs
9290         (TypeManager.IsGenericMethod): Moved here from ../gmcs/generic.cs.
9291         (TypeManager.IsGenericMethodDefinition): Likewise.
9292
9293 2006-09-19  Martin Baulig  <martin@ximian.com>
9294
9295         * typemanager.cs
9296         (TypeManager.IsEqual): Moved the gmcs implementation here.
9297         (TypeManager.DropGenericTypeArguments): Likewise.
9298         (TypeManager.DropGenericMethodArguments): Likewise.
9299         (TypeManager.GetTypeArguments): Moved here from gmcs.
9300         (TypeManager.HasGenericArguments): Likewise.
9301
9302 2006-09-19  Martin Baulig  <martin@ximian.com>
9303
9304         * expression.cs (Binary): Merged with the gmcs version.
9305
9306 2006-09-19  Martin Baulig  <martin@ximian.com>
9307
9308         * expression.cs (Probe, As, Is): Merged with the gmcs version.
9309
9310 2006-09-19  Martin Baulig  <martin@ximian.com>
9311
9312         * typemanager.cs: Merged with the gmcs version.
9313
9314 2006-09-16  Raja R Harinath  <rharinath@novell.com>
9315
9316         * AssemblyInfo.cs [GMCS_SOURCE]: Unify with gmcs source.
9317         * driver.cs: Likewise.
9318
9319 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
9320
9321         A fix for #79401
9322         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
9323         only if parent type is class.
9324         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
9325         update.
9326
9327 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
9328
9329         * cs-parser.jay,
9330         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
9331         keywords are used.
9332         * typemanager.cs(CSharpName): Converts NullType to null.
9333
9334 2006-09-15  Martin Baulig  <martin@ximian.com>
9335
9336         * typemanager.cs
9337         (TypeManager.GetMethodName): Added mcs implementation.
9338         (TypeManager.IsEqual): Likewise.
9339
9340         * ecore.cs
9341         (SimpleName.RemoveGenericArity): Added dummy implementation.
9342
9343         * pending.cs: Merged with the gmcs version.     
9344
9345 2006-09-15  Martin Baulig  <martin@ximian.com>
9346
9347         * statement.cs: Merge with the gmcs version.
9348
9349 2006-09-15  Martin Baulig  <martin@ximian.com>
9350
9351         * statement.cs (Switch): Merge with the gmcs implementation
9352         (without nullables), which is newer.
9353
9354 2006-09-15  Martin Baulig  <martin@ximian.com>
9355
9356         * statement.cs (Block.Variables): Make this public.
9357         (ToplevelBlock.Parameters): Make this a property.
9358         (Throw.Resolve): Use `TypeManager.IsSubclassOf ()'.
9359
9360 2006-09-15  Martin Baulig  <martin@ximian.com>
9361
9362         * namespace.cs: Merge with the gmcs version.
9363
9364 2006-09-15  Martin Baulig  <martin@ximian.com>
9365
9366         * decl.cs (MemberName): Minor code cleanups.
9367
9368 2006-09-15  Martin Baulig  <martin@ximian.com>
9369
9370         * parameter.cs: Merge with the gmcs version.
9371
9372 2006-09-15  Martin Baulig  <martin@ximian.com>
9373
9374         * enum.cs: Merge with the gmcs version: 3005 is a warning in gmcs
9375         and an error in mcs.
9376
9377 2006-09-15  Martin Baulig  <martin@ximian.com>
9378
9379         * flowanalysis.cs: Merged from GMCS; added the generics code into
9380         a `GMCS_SOURCE' conditional so we can share this file.
9381
9382 2006-09-08  Martin Baulig  <martin@ximian.com>
9383
9384         * typemanager.cs (TypeManager.interlocked_type): New public field.
9385         (TypeManager.int_interlocked_compare-exchange): New public field.
9386         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
9387         enumerator types here and call InitGenericCoreTypes().
9388         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
9389         after calling InitEnumUnderlyingTypes().
9390
9391         * rootcontext.cs
9392         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
9393         `classes_second_stage'. 
9394
9395 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
9396
9397         * assign.cs, ecore.cs, expression.cs: Share error message text.
9398         * class.cs (FieldMember.Define): Check for varible of static type.
9399         * driver.cs (LoadAssembly): Uses error output for errors.
9400         * statement.cs: Updated.
9401
9402 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
9403
9404         * expression.cs (Error_OperatorCannotBeApplied): Report type instead of
9405         type instance.
9406
9407 2006-09-07  Martin Baulig  <martin@ximian.com>
9408
9409         * driver.cs
9410         (MainDriver): Revert r62663 from Marek; see #70506 for details.
9411
9412 2006-08-29  Miguel de Icaza  <miguel@novell.com>
9413
9414         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
9415         
9416 2006-08-17  Miguel de Icaza  <miguel@novell.com>
9417
9418         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
9419         #52019 and #79064, the use of the \uXXXX sequence in source code
9420         to represent unicode characters.
9421
9422 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
9423
9424         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
9425         support.
9426         * class.cs, ecore.cs, statement.cs: Merged to one error message.
9427
9428 2006-08-13  Miguel de Icaza  <miguel@novell.com>
9429
9430         * assign.cs: Catch attempts to assign to a method groups in += and
9431         report as 1656
9432
9433 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
9434
9435         A fix for #79056
9436         * cs-parser.jay: Don't destroy current array type by typeof of array's.
9437
9438 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
9439
9440         * class.cs (Method.Define): Issue a warning when generic method looks like
9441         an entry point.
9442         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
9443         as well.
9444
9445 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
9446  
9447         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
9448         looking for ctor.
9449         * decl.cs (MemberCache.FindMembers): When container is interface we need to
9450         search all base interfaces as a member can be ambiguous.
9451         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
9452         Constructor member type filter. 
9453         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
9454         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
9455         reporting for returned memberinfos.
9456         * report.cs: Updated.
9457         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
9458         version to work on all runtimes.
9459         (TypeManager.RealMemberLookup): Removed members filtering.
9460
9461 2006-08-08  Raja R Harinath  <rharinath@novell.com>
9462
9463         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
9464         (PropertyExpr.EmitAssign): Likewise.
9465         * expression.cs (Indirection.EmitAssign): Likewise.
9466         (LocalVariableReference.EmitAssign): Likewise.
9467         (ParameterReference.EmitAssign): Likewise.
9468         (Invocation.EmitArguments): Likewise.
9469         (ArrayAccess.EmitAssign): Likewise.
9470         (IndexerAccess.EmitAssign): Likewise.
9471         (This.EmitAssign): Likewise.
9472         (ConditionalLogicalOperator.Emit): Likewise.
9473
9474         Fix #79026
9475         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
9476         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
9477         leave it in after returning it.
9478         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
9479
9480 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
9481
9482         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
9483         message.
9484
9485 2006-08-03  Raja R Harinath  <rharinath@novell.com>
9486
9487         Fix cs0146-3.cs and cs0146-4.cs.
9488         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
9489         enclosing types don't depend on the current type.
9490
9491 2006-08-02  Raja R Harinath  <rharinath@novell.com>
9492
9493         Fix #77963
9494         * class.cs (TypeContainer.DoDefineMembers): Use
9495         FindBaseMemberWithSameName on Parent, since we're interested in
9496         whether we hide inherited members or not.
9497         (FindBaseMemberWithSameName): Make slightly more robust.
9498
9499         Fix the non-generic testcase from #77396
9500         * decl.cs (DeclSpace.DeclContainer): Remove override.
9501
9502         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
9503         declspaces for doppelgangers too.
9504         (UsingEntry): Implement IResolveContext.
9505         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
9506         'this' as the resolve context.
9507         (LocalAliasEntry): Likewise.
9508
9509         Implement parts of #77403
9510         * roottypes.cs (RootDeclSpace): New.  Used to represent the
9511         toplevel declaration space.  Each namespace declaration introduces
9512         a "partial" root declaretion space.
9513         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
9514         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
9515         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
9516         from 'current_namespace.SlaveDeclSpace'.
9517         (namespace_declaration): Likewise.
9518         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
9519         check.  It can't happen now.
9520         * decl.cs (DeclSpace.LookupType): Likewise.
9521         * driver.cs (MainDriver): Sanity check.
9522
9523 2006-08-01  Raja R Harinath  <rharinath@novell.com>
9524
9525         * decl.cs (DeclSpace.FindNestedType): Remove.
9526         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
9527         LookupTypeContainer to get the container of the nested type.
9528         * class.cs (TypeContainer.FindNestedType): Make non-override.
9529
9530 2006-07-31  Raja R Harinath  <rharinath@novell.com>
9531
9532         * decl.cs (DeclSpace.PartialContainer): Move field from ...
9533         * class.cs (TypeContainer.PartialContainer): ... here.
9534         (TypeContainer.AddBasesForPart): New helper.
9535         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
9536         instead.
9537         * cs-parser.jay (current_class): Convert to DeclSpace.
9538         (struct_declaration, interface_declaration, class_declaration):
9539         Use AddBasesForPart instead of .Bases directly.
9540         * const.cs, iterators.cs: Update to changes.
9541
9542 2006-07-28  Raja R Harinath  <rharinath@novell.com>
9543
9544         * class.cs (TypeContainer.AddMemberType): Rename from
9545         AddToTypeContainer.
9546         (TypeContainer.AddMember): Rename from AddToMemberContainer.
9547         (AddTypeContainer): New.  Combine AddClassOrStruct and
9548         AddInterface.
9549         (AddPartial): Update.  Add 'is_partial' argument.
9550         * roottypes.cs: Update to changes.
9551         * cs-parser.jay (push_current_class): New helper for handling
9552         current_container and current_class.
9553         (struct_declaration, interface_declaration, class_declaration):
9554         Use it.
9555
9556 2006-07-26  Raja R Harinath  <rharinath@novell.com>
9557
9558         * roottypes.cs: Rename from tree.cs.
9559
9560         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
9561         * tree.cs (Tree, ITreeDump): Remove types.
9562         * rootcontext.cs (tree, Tree): Remove fields.
9563         (root, ToplevelTypes): New.
9564         * *.cs: Update to rename.
9565
9566         * tree.cs (Tree.RecordDecl): Remove.
9567         (RootTypes.AddToTypeContainer): Record the toplevel type in its
9568         namespace here.
9569         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
9570
9571 2006-07-23  Raja R Harinath  <harinath@gmail.com>
9572
9573         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
9574         DoFlowAnalysis and OmitStructFlowAnalysis here.
9575         (ec.With): Rename from WithUnsafe and generalize.
9576         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
9577         (ec.WithFlowAnalyis): New.
9578         * ecore.cs, expression.cs, statement.cs: Update.
9579
9580 2006-07-22  Raja R Harinath  <harinath@gmail.com>
9581
9582         * statement.cs (Block.ResolveMeta): Simplify slightly.
9583
9584         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
9585         multiple boolean fields.  Convert InUnsafe, constant_check_state,
9586         check_state to flags.
9587         (CheckState, ConstantCheckState): Update.
9588         (InUnsafe): New read-only property.
9589         (FlagsHandle): Rename from CheckStateHandle and convert to handle
9590         arbitrary flags.
9591         (WithUnsafe): New helper similar to WithCheckState.
9592         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
9593         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
9594
9595 2006-07-21  Raja R Harinath  <rharinath@novell.com>
9596
9597         Make comparisons use the same IL irrespective of whether they're
9598         in a 'checked' or 'unchecked' context: one of the issues in #78899
9599         * codegen.cs (EmitContext.CheckState): Make read-only property.
9600         (EmitContext.ConstantCheckState): Likewise.
9601         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
9602         helper that implement a save/restore stack for CheckState
9603         values.  This is the only way to change check-state.
9604         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
9605         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
9606         (CheckedExpr.EmitBranchable): New forwarding method.
9607         (UnCheckedExpr): Likewise.
9608         * statement.cs (Block.ResolveMeta): Use WithCheckState.
9609         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
9610         (Checked.Resolve, checked.DoEmit): Likewise.
9611
9612 2006-07-20  Miguel de Icaza  <miguel@novell.com>
9613
9614         * anonymous.cs: Cache the resolved anonymous delegate, and return
9615         this so that the ResolveTopBlock is only triggered once, not
9616         twice.
9617
9618         Currently we trigger ResolvetopBlock twice due to a first pass of
9619         argument check compatibility, and a second pass that does the
9620         actual resolution.   
9621         
9622 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
9623
9624         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
9625         modifiers.
9626         * rootcontext.cs (Reset): Add helper_classes.
9627
9628 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
9629
9630         A fix for #78860
9631         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
9632         correctly.
9633
9634 2006-07-13  Miguel de Icaza  <miguel@novell.com>
9635
9636         * statement.cs (Lock): Handle expressions of type
9637         TypeManager.null_type specially.  Fixes #78770
9638
9639 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
9640
9641         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
9642         to an event.
9643
9644 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
9645
9646         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
9647         for accessors as well.
9648         * ecore.cs (EventExpr): Add AccessorTable.
9649
9650 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
9651
9652         A fix for #78738
9653         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
9654         for CS0122 where appropriate.
9655         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
9656         level attributes.
9657         (Filter): Assembly can be null in the case of top level attributes.
9658
9659 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
9660
9661         A fix for #78690
9662
9663         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
9664         is done at global level.
9665
9666 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
9667
9668         A fix for #77002, Implemented TypeForwarder support.
9669
9670         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
9671         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
9672         * typemanager.cs (): Add type_forwarder_attr_type.
9673
9674 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
9675
9676         * report.cs: Add CS0469 warning.
9677
9678 2006-06-21  Martin Baulig  <martin@ximian.com>
9679
9680         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
9681         the `try'-block, so we also report CS0016 etc. there.
9682
9683 2006-06-21  Martin Baulig  <martin@ximian.com>
9684
9685         * delegate.cs
9686         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
9687
9688 2006-06-21  Martin Baulig  <martin@ximian.com>
9689
9690         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
9691         also report CS1686 for parameters.
9692
9693 2006-06-21  Martin Baulig  <martin@ximian.com>
9694
9695         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
9696         instead of an error if the value is not implicitly convertible to
9697         the switch types; fixes #77964.
9698
9699 2006-06-21  Raja R Harinath  <rharinath@novell.com>
9700
9701         Fix #78673
9702         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
9703         FieldBuilder is null.
9704
9705         Fix #78662
9706         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
9707         'left' and 'right' before error-checking.
9708
9709 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
9710
9711         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
9712         Fixed bug #78601.
9713         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
9714         (FieldExpr.DoResolve): likewise.
9715         (PropertyExpr.InstanceResolve): likewise.
9716         (EventExpr.InstanceResolve): likewise. 
9717
9718 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
9719
9720         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
9721         attribute applicable tests for attribute argument.
9722
9723 2006-06-02  Raja R Harinath  <rharinath@novell.com>
9724
9725         Fix #78079
9726         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
9727         (Binary.OverloadResolve_PredefinedIntegral): New.
9728         (Binary.OverloadResolve_PredefinedFloating): New.
9729         (Binary.OverloadResolve_PredefinedString): New.
9730         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
9731         Follow the standard more closely, and treat numeric promotions in
9732         terms of overload resolution.
9733         (Binary.CheckShiftArguments): Simplify.
9734
9735 2006-06-01  Raja R Harinath  <rharinath@novell.com>
9736
9737         * flowanalysis.cs (MyBitVector): Simplify representation.
9738         (MyBitVector.Clone): Avoid allocating BitArray.
9739         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
9740         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
9741         (*): Update.  Change all references to MyBitVector.And and
9742         MyBitVector.Or to &= and |=.
9743
9744 2006-05-29  Raja R Harinath  <rharinath@novell.com>
9745
9746         Fix cs0231-[34].cs.
9747         * cs-parser.jay (formal_parameter_list): Extend the pattern below
9748         to param arguments too.
9749
9750 2006-05-26  Miguel de Icaza  <miguel@novell.com>
9751
9752         * cs-parser.jay: Catch another parsing form for arglist being
9753         followed by other arguments.  Fixes #78313.
9754
9755 2006-05-24  Raja R Harinath  <rharinath@novell.com>
9756
9757         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
9758         checking of out parameters to ...
9759         (FlowBranchingToplevel.Merge): ... here.
9760         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
9761         set, propagate the origin upward, and only complain if there was
9762         no other error.
9763         (FlowBranchingException.AddContinueOrigin): Likewise.
9764         (FlowBranchingException.AddReturnOrigin): Likewise.
9765         (FlowBranchingException.AddGotoOrigin): Likewise.       
9766
9767 2006-05-23  Raja R Harinath  <rharinath@novell.com>
9768
9769         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
9770         unreachable, skip it.
9771         (FlowBranchingException.Merge): Always propagate jumps, even if
9772         the finally block renders subsequent code unreachable.
9773
9774 2006-05-18  Raja R Harinath  <rharinath@novell.com>
9775
9776         Fix #77601
9777         * statement.cs (Goto.Resolve): Move responsibility for resolving
9778         'goto' to FlowBranching.AddGotoOrigin.
9779         (Goto.SetResolvedTarget): New.  Callback to set the
9780         LabeledStatement that's the target of the goto.
9781         (Goto.DoEmit): Use Leave instead of Br when crossing an
9782         unwind-protect boundary.
9783         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
9784         LookupLabel and adjust to new semantics.
9785         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
9786         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
9787         Goto.SetResolvedTarget to update target.
9788         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
9789         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
9790         AddBreakOrigin & co.  Delay propagation until ...
9791         (FlowBranchingException.Merge): ... this.
9792
9793         * statement.cs (Block.Resolve): Always depend on flow-branching to
9794         determine unreachability.  Kill workaround that originally emitted
9795         only one statement after an "unreachable" label (see infloop in
9796         test-515.cs).
9797
9798         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
9799         This is still "wrong", but anything better would probably need a
9800         multi-pass algorithm.
9801         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
9802         usage vector.  Force current usage vector to be reachable, to
9803         optimistically signify backward jumps.
9804         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
9805         detected.
9806         (FlowBranchingLabeled.Merge): New.  If no backward jump was
9807         detected, return the original salted-away usage vector instead,
9808         updated with appropriate changes.  Print unreachable warning if
9809         necessary.
9810         * statement.cs (Block.Resolve): Don't print unreachable warning on
9811         a labeled statement.
9812
9813 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
9814
9815         * driver.cs: Pass filename without path to AssemblyBuilder's 
9816         AddResourceFile. Fixes bug #78407.
9817
9818 2006-05-17  Raja R Harinath  <rharinath@novell.com>
9819
9820         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
9821         * flowanalysis.cs (FlowBranchingLabeled): ... here.
9822         (FlowBranching.MergeChild): Overwrite
9823         reachability information from Labeled branchings too.
9824
9825 2006-05-16  Raja R Harinath  <rharinath@novell.com>
9826
9827         * statement.cs (Goto.Resolve): Merge jump origins here ...
9828         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
9829
9830         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
9831         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
9832         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
9833         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
9834         here, ...
9835         * statement.cs (Goto.Resolve): ... not here.
9836         (Goto.Emit): Remove CS1632 check.
9837
9838 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
9839
9840         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
9841         error message.
9842
9843 2006-05-11  Raja R Harinath  <rharinath@novell.com>
9844
9845         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
9846         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
9847         (FlowBranchingException.Label): Likewise.
9848
9849         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
9850         given value.
9851         (MyBitVector.Or): Use it to avoid losing information (Count).
9852         (FlowBranching.MergeOrigins): Likewise.
9853
9854         * flowanalysis.cs (UsageVector.IsDirty): Remove.
9855         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
9856         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
9857         (UsageVector.ToString): Simplify.
9858         (UsageVector.MergeSiblings): Move here from ...
9859         (FlowBranching.Merge): ... here.
9860         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
9861         not a MyBitVector.
9862
9863 2006-05-10  Raja R Harinath  <rharinath@novell.com>
9864
9865         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
9866         null bitvector is treated as all-true.
9867
9868         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
9869         (MyBitVector): Rationalize invariants.  'vector != null' implies
9870         that we have our own copy of the bitvector.  Otherwise,
9871         'InheritsFrom == null' implies all inherited bits are true.
9872
9873 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
9874
9875         * statement.cs (LocalInfo): Add IsConstant.
9876         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
9877         local variable for constants.
9878
9879 2006-05-09  Raja R Harinath  <rharinath@novell.com>
9880
9881         * flowanalysis.cs (MyBitVector.Empty): New.
9882         (MyBitVector): Don't allow InheritedFrom to be null.
9883         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
9884         (UsageVector, FlowBranching): Update to changes.
9885
9886         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
9887         recursion.  The 'Parent == null' condition isn't sufficient for
9888         anonymous methods.
9889         (FlowBranching.AddBreakOrigin): Likewise.
9890         (FlowBranching.AddContinueOrigin): Likewise.
9891         (FlowBranching.AddReturnOrigin): Likewise.
9892         (FlowBranching.StealFinallyClauses): Likewise.
9893         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
9894         (FlowBranching.CheckOutParameters): Likewise.
9895         (FlowBranchingToplevel): Terminate all the above recursions here.
9896         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
9897         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
9898
9899         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
9900         toplevel block.
9901         (FlowBranchingToplevel): New.  Empty for now.
9902         (FlowBranching.MergeTopBlock): Update.
9903         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
9904         branching for the anonymous delegate.
9905         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
9906
9907         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
9908         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
9909         information at the start of the merge.  Reorganize.
9910
9911 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
9912
9913         * class.cs (MethodData.Define): Method cannot implement interface accessor.
9914
9915 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
9916
9917         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
9918         to newly introduced ctor.
9919
9920         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
9921         message to one place.
9922         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
9923         global namespace.
9924
9925 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
9926
9927         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
9928
9929         * ecore.cs (Expression.ResolveAsConstant): Updated.
9930
9931         * statement.cs (ResolveMeta): Updated.
9932
9933 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
9934
9935         * cs-parser.jay: __arglist cannot be used in initializer.
9936
9937 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
9938
9939         A fix for #77879
9940         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
9941         private types.
9942
9943 2006-05-05  Raja R Harinath  <rharinath@novell.com>
9944
9945         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
9946         (LabeledStatement): Add 'name' parameter.
9947         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
9948         (Block.AddLabel): Update to changes.
9949         * cs-parser.jay (labeled_statement): Likewise.
9950
9951         * flowanalysis.cs (BranchingType.Labeled): New.
9952         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
9953         (FlowBranchingLabeled): New.  Does nothing for now, but will
9954         eventually handle 'goto' flows.
9955         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
9956         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
9957         that's terminated ...
9958         (Block.Resolve): ... here.
9959
9960         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
9961         (UsageVector.MergeFinallyOrigins): Likewise.
9962         (FlowBranching.InTryOrCatch): Likewise.
9963         (FlowBranching.AddFinallyVector): Likewise.
9964         (FlowBranchingException): Update to changes.
9965
9966         Fix #78290
9967         * statement.cs (Return.Resolve): Move error checking to ...
9968         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
9969         (FlowBranchingException): Handle return origins like break and
9970         continue origins.
9971         (FlowBranching.UsageVector.CheckOutParameters): Remove.
9972
9973 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
9974
9975         A fix for #76122
9976         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
9977         filter.
9978
9979 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
9980
9981         A fix for #77543
9982         * class.cs (MethodData.Define): Do public accessor check only when method
9983         implements an interface.
9984
9985 2006-05-04  Raja R Harinath  <rharinath@novell.com>
9986
9987         Remove special handling of 'break'
9988         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
9989         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
9990         (UsageVector.Break): Remove.
9991         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
9992         reachability.
9993         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
9994
9995         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
9996         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
9997
9998 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
9999
10000         A fix for #75726
10001         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
10002         be the interface member.
10003
10004 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
10005
10006         A fix for #60069
10007         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
10008         for emitting small (int) values.
10009
10010 2006-05-03  Raja R Harinath  <rharinath@novell.com>
10011
10012         Fix #59427
10013         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
10014         control-flow passes through the 'finally' after merging-in all the
10015         control-flows from 'try' and the 'catch' clauses.
10016
10017         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
10018         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
10019         always true at the only non-recursive entry point.
10020         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
10021         FlowBranchingBreakable.
10022         (FlowBranchingLoop): Remove.
10023         * statement.cs (Return.DoResolve): Update to changes.
10024
10025         Fix #76471, #76665
10026         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
10027         (FlowBranching.CreateBranching): Handle it: create a
10028         FlowBranchingContinuable.
10029         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
10030         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
10031         except that it handles the 'continue' command.
10032         (FlowBranching.UsageVector.MergeOrigins): Rename from
10033         MergeBreakOrigins.
10034         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
10035         except that it overrides AddContinueOrigin.
10036         (FlowBranchingException): Override AddContinueOrigin, similar to
10037         AddBreakOrigin.
10038         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
10039         Create a new branching around the embedded statement.
10040         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
10041         control flow after the embedded statement.
10042         (Continue.Resolve): Move all error checking to AddContinueOrigin.
10043
10044         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
10045         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
10046         FlowBranchingBreakable.
10047         (FlowBranchingSwitch): Remove.
10048
10049         Fix test-503.cs
10050         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
10051         error reporting to ...
10052         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
10053         Rename from 'AddBreakVector'.  Add new location argument.  Return
10054         a bool indicating whether the 'break' crosses an unwind-protect.
10055         (FlowBranchingException.AddBreakOrigin): Add.
10056         (FlowBranchingException.Merge): Propagate 'break's to surrounding
10057         flowbranching after updating with the effects of the 'finally'
10058         clause.
10059         (FlowBranchingBreakable): New common base class for
10060         FlowBranchingLoop and FlowBranchingSwitch.
10061
10062         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
10063         embedded statement.
10064         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
10065
10066 2006-05-02  Raja R Harinath  <rharinath@novell.com>
10067
10068         * statement.cs (Do.Resolve): If the loop is infinite, set the
10069         barrier.
10070         (While.Resolve, For.Resolve): Set a barrier after the embedded
10071         statement.  There's no direct control flow that goes from the end
10072         of the embedded statement to the end of the loop.
10073         * flowanalysis.cs (FlowBranching.Infinite): Remove.
10074         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
10075         above ensure that the reachability is correctly computed.
10076
10077         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
10078         (UsageVector.MergeBreakOrigins): If the current path is
10079         unreachable, treat it as if all parameters/locals are initialized.
10080         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
10081         infinite loops before merging-in break origins.
10082
10083         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
10084         (Reachability.Reachable): Split part into ...
10085         (Reachability.Unreachable): ... this.  Simplify.
10086         (Reachability.IsUnreachable): Use 'Unreachable' instead.
10087
10088         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
10089         (Reachability.SetThrowsSometimes): Likewise.
10090         (FlowBranchingBlock.MergeTopBlock): Don't compare against
10091         TriState.Always, use corresponding property.
10092         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
10093         (Block.Resolve): Likewise.  Remove some redundant checks.
10094
10095 2006-05-02  Raja R Harinath  <harinath@gmail.com>
10096
10097         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
10098         (Reachability.Meet): Don't bother checking AlwaysThrows --
10099         barrier is always set.
10100         (FlowBranchingBlock.Merge): Likewise.
10101
10102 2006-05-01  Raja R Harinath  <harinath@gmail.com>
10103
10104         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
10105         checks for unreachable.
10106
10107 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
10108
10109         A fix for #77980
10110         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
10111
10112         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
10113         whether field is really assigned.
10114
10115 2006-04-30  Raja R Harinath  <harinath@gmail.com>
10116
10117         * flowanalysis.cs (Reachability): Make 4-argument constructor
10118         private.
10119         (Reachability.Meet): Rename from 'And'.  Remove static variant.
10120         (Reachability.Always): Rename from the highly misleading
10121         'Reachability.Never'.
10122         (FlowBranching.Merge): Update to changes.  Mark an impossible
10123         situation with a 'throw'.
10124         (*): Update to changes.
10125
10126 2006-04-29  Raja R Harinath  <harinath@gmail.com>
10127
10128         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
10129         Remove 'Undefined'.
10130         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
10131         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
10132         (*): Update to changes.
10133         * statement.cs: Update to changes.
10134
10135 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
10136
10137         A fix for #78049
10138         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
10139
10140 2006-04-28  Raja R Harinath  <harinath@gmail.com>
10141
10142         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
10143         dummy UsageVector.
10144
10145         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
10146         argument to two arguments: an usage-vector and a bool.  Move call
10147         to FlowBranching.Merge () ...
10148         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
10149
10150         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
10151         handling of loop and switch reachability to ...
10152         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
10153
10154 2006-04-27  Raja R Harinath  <harinath@gmail.com>
10155
10156         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
10157         handling to FlowBranchingLoop.InLoop.
10158         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
10159
10160 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
10161
10162         A fix for #78115
10163         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
10164         anonymous method is allowed from AnonymousContainer here.
10165
10166         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
10167
10168 2006-04-24  Raja R Harinath  <rharinath@novell.com>
10169
10170         Fix #78156
10171         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
10172
10173 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
10174
10175         A fix for #49011.
10176         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
10177         (DoubleConstant.Reduce): Ditto.
10178
10179 2006-04-23  Raja R Harinath  <rharinath@novell.com>
10180
10181         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
10182         Remove 'lvalue_right_side' argument.  Move parts to ...
10183         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
10184         (LocalVariable.DoResolveLValue): ... these.
10185
10186 2006-04-21  Raja R Harinath  <rharinath@novell.com>
10187
10188         Fix cs1655.cs
10189         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
10190         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
10191         (LocalVariableReference.DoResolveBase): Use it to implement new
10192         CS1655 check.
10193         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
10194         (Argument.Resolve): Simplify.  Move CS1510 check ...
10195         * ecore.cs (Expression.ResolveLValue): ... here.
10196         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
10197         (PropertyExpr.DoResolveLValue): Likewise.
10198         (FieldExpr.Report_AssignToReadonly): Likewise.
10199         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
10200         LValueMemberAccess or LValueMemberOutAccess on instance depending
10201         on it.
10202         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
10203         DoResolve as appropriate.
10204
10205 2006-04-20  Raja R Harinath  <rharinath@novell.com>
10206
10207         Fix #75800
10208         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
10209         implicit conversions on 'out' and 'ref' arguments.
10210
10211         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
10212         improve clarity.  Remove dead code.
10213
10214         Fix #66031
10215         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
10216         (Catch.Resolve): Resolve VarBlock if it exists.
10217
10218 2006-04-19  Miguel de Icaza  <miguel@novell.com>
10219
10220         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
10221         twice, this was some residual code, the enumerator was emitted
10222         properly in the two branche of if later.
10223
10224 2006-04-19  Raja R Harinath  <rharinath@novell.com>
10225
10226         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
10227         cast is never an lvalue.
10228         (Cast.DoResolve, Cast.ResolveRest): Combine.
10229         (Argument.Emit): Simplify slightly.  Move 'Expr is
10230         IMemoryLocation' check ...
10231         (Argument.Resolve): ... here.
10232         (Argument.Error_LValueRequired): Remove.  Inline into only user.
10233
10234         Simplifications.  Fix cs0191-2.cs
10235         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
10236         CS1649 and CS1651 to ...
10237         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
10238         the actual selection of the error code and message to a lookup
10239         table.  Add a dummy return value to simplify callsites.
10240         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
10241         readonly fields of other instances of the same type.  Move CS0197
10242         warning from ...
10243         * expression.cs (Argument.Resolve): ... here.  Simplify code.
10244         Ensure that ec.InRefOutArgumentResolving is only set during LValue
10245         resolution of an out or ref argument.  The code simplification
10246         above uses this invariant.
10247
10248 2006-04-18  Raja R Harinath  <rharinath@novell.com>
10249
10250         Possibly fix #77752.  Fix cs1690-[4-7].cs.
10251         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
10252         CheckMarshallByRefAccess.  Drop parameter.
10253         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
10254         warning.
10255         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
10256         InstanceExpression.
10257         * report.cs (AllWarnings): Add CS1690.
10258         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
10259         for ref access too.
10260         (LocalVariableReference.DoResolveBase): Update.
10261
10262 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10263
10264         * class.cs (MethodOrOperator): Moved common parts from method class.
10265         detect obsolete attributes.
10266         (Method.Define): Simplified as it reuses code from base.
10267         (Constructor.ValidAttributeTargets): Fixed issue found during
10268         refactoring.
10269         (Destructor.ValidAttributeTargets): Fixed issue found during
10270         refactoring.
10271         (Operator): Finished refactoring set off by #78020. Operator class is now
10272         ordinary method class.
10273
10274         * anonymous.cs: Updated.
10275
10276         * decl.cs (DeclSpace): Add IsGeneric
10277
10278 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10279
10280         * class.cs (Constructor.Emit): Don't emit the attributes twice.
10281
10282 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10283
10284         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
10285         detect obsolete attributes.
10286         (Method.CreateEmitContext): Moved to MethodOrOperator.
10287
10288 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10289
10290         A fix for #78048.
10291         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
10292         customized exception to make crash detection easier.
10293         (MethodOrOperator): Started to work on new base class for methods and
10294         operators.
10295         (Method): Derives from MethodOrOperator.
10296         (Constructor.Emit): Emits its own attributes.
10297         (AbstractPropertyEventMethod.Emit): Ditto.
10298         (Operator): Derives from MethodOrOperator, will refactor fully in extra
10299         patch.
10300         (Operator.Emit): It's temporary more tricky than should be.
10301         
10302         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
10303
10304         * report.cs (InternalErrorException): Add ctor with inner exception.
10305
10306 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
10307
10308         A fix for #76744.
10309         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
10310         only not visible.
10311
10312 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
10313
10314         A fix for #77916.
10315         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
10316         array.
10317
10318 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
10319
10320         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
10321         attribute is present and Guid not.
10322         (Interface.ApplyAttributeBuilder): Ditto.
10323
10324         * attribute.cs: Add error message.
10325
10326 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
10327
10328         A fix for #78020.
10329
10330         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
10331         sources (it's composite) so hold them in extra array as they are used in
10332         Emit phase only. It worked in the previous versions by mistake.
10333         (Attribute.Emit): Emit attribute for more owners when exist.
10334
10335         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
10336         it has now different behaviour.
10337
10338 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
10339
10340         * constant.cs (Constant.IsDefaultInitializer): New method.
10341
10342         * class.cs: Updated.
10343
10344         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
10345         re-initialize default values. It saves KBs almost for every assembly.
10346         Thanks Zoltan for the idea.
10347         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
10348         (ArrayCreation.DoResolve): Resolve only once.
10349         (ArrayCreation.Emit): Emit static initializer only when it is faster.
10350         (ArrayCreation.GetAttributableValue): Cope with optimized values.
10351
10352 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
10353
10354         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
10355         From #77961.
10356
10357 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
10358
10359         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
10360         in an embedded statement too.
10361
10362 2006-04-01  Raja R Harinath  <rharinath@novell.com>
10363
10364         Fix #77958
10365         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
10366
10367 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
10368
10369         A fix for #77966.
10370
10371         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
10372         was not specified.
10373
10374         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
10375
10376 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
10377
10378         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
10379         phase.
10380
10381         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
10382         LocalTemporary change.
10383
10384         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
10385         TypeContainer.
10386         (ClassOrStruct.DefineFieldInitializers): Implemented static field
10387         initializers optimization.
10388         (ClassOrStruct.TypeAttr): Moved from modifiers.
10389         (Constructor.CheckBase): Don't crash when static ctor has parameters.
10390         (FieldBase.ResolveInitializer): Resolves initializer.
10391         (FieldBase.HasDefaultInitializer): New property.
10392
10393         * cs-parser.jay: Removed message.
10394
10395         * expression.cs (CompilerGeneratedThis): New specialization.
10396
10397         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
10398
10399 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
10400
10401         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
10402
10403 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
10404
10405         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
10406         be now EnumConstants only.
10407
10408 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
10409
10410         * attribute.cs, driver.cs: Reset more caches.
10411
10412 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10413
10414         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
10415
10416 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10417
10418         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
10419         for easier reuse. Updated all overrides.
10420         (IntegralConstant): New base class for all integral constants.
10421         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
10422         of the constant range, report custom error.
10423         (UIntConstant.Reduce): Fixed uint conversion.
10424
10425         * ecore.cs, literal.cs: Reduce updates.
10426
10427 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10428
10429         A fix for #75813.
10430
10431         * class.cs (Constructor.Define): Removed extra if for default ctors.
10432         A patch from Atsushi Enomoto.
10433
10434 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10435
10436         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
10437         GetAttributableValue.
10438
10439         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
10440         when required.
10441
10442         * convert.cs (ImplicitConversionRequired): Error message moved to
10443         DoubleLiteral.
10444
10445         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
10446         automatic implicit conversion of an output value.
10447         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
10448
10449         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
10450         conversion.
10451         (TypeOf.GetAttributableValue): Add extra handling for object type.
10452
10453         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
10454         special error message.
10455
10456 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
10457
10458         * class.cs (Constructor.Emit): Don't crash when struct ctor is
10459         InternalCall.
10460         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
10461         compatible with MS runtime.
10462
10463 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
10464
10465         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
10466         attribute arguments here.
10467
10468         * class.cs (Indexer.Define): The check was moved to attribute class.
10469
10470 2006-03-22  Marek Safar  <marek.safar@seznam.cz>
10471
10472         * assign.cs, class.cs, codegen.cs, convert.cs, decl.cs, ecore.cs,
10473         expression.cs, typemanager.cs: Minor changes from gmcs to make merging
10474         easier.
10475
10476 2006-03-22  Raja R Harinath  <rharinath@novell.com>
10477
10478         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
10479         mcs to keep code differences small.
10480         * attribute.cs (Attribute.GetParameterDefaultValue): New.
10481         * typemanager.cs (parameter_default_value_attribute_type): New.
10482         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
10483         CS1908 check.
10484
10485 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
10486
10487         * expression.cs (StringConcat.Append): Reverted back to no warning state.
10488
10489 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
10490
10491         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
10492
10493         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
10494         the blocks too.
10495
10496 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
10497
10498         * doc-bootstrap.cs : fix build.
10499
10500 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
10501
10502         * expression.cs (StringConcat.Append): Issue a warning when empty string
10503         is going to append.
10504
10505 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
10506
10507         * assign.cs (CompoundAssign.ResolveSource): Removed.
10508
10509         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
10510         clean up.
10511
10512         * class.cs (TypeContainer.FindMethods): Removed.
10513         (TypeContainer.CheckMemberUsage): Made static.
10514
10515         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
10516
10517         * constant.cs (CheckRange): Removed unused type argument.
10518         (CheckUnsigned): Removed unused type argument.
10519
10520         * cs-parser.jay: Updated after MemberAccess clean up.
10521         Uses Length for empty string test.
10522
10523         * cs-tokenizer.cs: Uses Length for empty string test.
10524         (IsCastToken): Made static.
10525         (is_hex): Made static.
10526         (real_type_suffix): Made static.
10527
10528         * decl.cs (SetupCache): Made static.
10529         (OnGenerateDocComment): Removed unused ds argument.
10530
10531         * delegate.cs (VerifyDelegate): Removed unused argument.
10532
10533         * doc.cs: Uses Length for empty string test.
10534
10535         * driver.cs: Uses Length for empty string test.
10536
10537         * enum.cs (IsValidEnumType): Made static
10538
10539         * expression.cs (EnumLiftUp): Removed unused argument.
10540         (ResolveMethodGroup): Ditto.
10541         (BetterConversion): Ditto.
10542         (GetVarargsTypes): Ditto.
10543         (UpdateIndices): Ditto.
10544         (ValidateInitializers): Ditto.
10545         (MemberAccess.ctor): Ditto.
10546         (GetIndexersForType): Ditto.
10547
10548         * flowanalysis.cs: (MergeFinally): Removed unused argument.
10549
10550         * iterators.cs: Updated after MemberAccess clean up.
10551
10552         * location.cs: Uses Length for empty string test.
10553
10554         * namespace.cs: Uses Length for empty string test.
10555
10556          * report.cs (CheckWarningCode): Made static.
10557
10558         * statement.cs (LabeledStatement): Removed unused argument.
10559
10560         * typemanager.cs (FilterNone): Removed.
10561
10562 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10563
10564         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
10565         obsolete.
10566
10567         * class.cs: Updated.
10568
10569 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10570
10571         * cs-parser.jay.cs: __arglist is not allowed for delegates.
10572
10573 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10574
10575         A fix for #77822.
10576
10577         * expression.cs (VerifyArgumentsCompat): Reverted to double error
10578         reporting, it's more tricky than I thought.
10579
10580 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10581
10582         A fix for #77816.
10583
10584         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
10585         host container.
10586         (AnonymousMethod.ImplicitStandardConversionExists): New method.
10587         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
10588         Add more error reporting; Fixed issue with params.
10589
10590         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
10591
10592         * cs-parser.jay: AnonymousMethod requires host container.
10593
10594         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
10595
10596 2006-03-18  Raja R Harinath  <harinath@gmail.com>
10597
10598         * class.cs: Change 'TypeContainer ds' constructor argument to
10599         'DeclSpace parent'.  Some classes were missed below due to
10600         different naming convention.
10601
10602         * class.cs (MemberCore.Parent): Delete.  This makes the
10603         ParentContainer changes below enforceable by the compiler.
10604
10605         Treat pointers to enclosing declaration space as 'DeclSpace', not
10606         'TypeContainer'.
10607         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
10608         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
10609
10610         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
10611         of TypeContainer.
10612         (Block.AddThisVariable): Likewise.
10613         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
10614         (AbstractPropertyEventMethod.Emit): Likewise.
10615         (AbstractPropertyEventMethod.EmitMethod): Likewise.
10616         (GetMethod.Define, SetMethod.Define): Likewise.
10617         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
10618         (DelegateMethod.EmitMethod): Likewise.
10619
10620         Fix regression test-partial-13.cs.
10621         Rationalize use of PartialContainer.  Ensure that the partial
10622         class semantics can be tied to type-correctness, i.e., any
10623         violation will cause a compile error.
10624         * class.cs, const.cs: Access all fields that belong to class
10625         TypeContainer via ParentContainer.  Arguments of EmitContexts and
10626         Resolve()-like functions still use 'Parent'.
10627
10628         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
10629         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
10630         (PropertyMethod.CheckModifiers): Remove unused argument.
10631         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
10632         DeclSpace.
10633
10634 2006-03-17  Raja R Harinath  <harinath@gmail.com>
10635
10636         Make semantics of PartialContainer simpler.
10637         * decl.cs (DeclSpace.IsPartial): Remove.
10638         * class.cs (TypeContainer.IsPartial): Likewise.
10639         (TypeContainer..ctor): Set PartialContainer to point to self.
10640         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
10641         (TypeContainer.FindNestedType): Likewise.
10642         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
10643
10644 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
10645
10646         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
10647
10648 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
10649
10650         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
10651         classes.
10652
10653 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
10654
10655         * class.cs (Operator.Define): An error for base conversion was not
10656         reported correctly.
10657
10658 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
10659
10660         * iterator.cs : yield break is allowed in try statement which has
10661           catch clauses. Fixed bug #77767.
10662
10663 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
10664
10665         A fix for #77593, #77574.
10666
10667         * class.cs (MethodCore.CheckBase): Another if for operator.
10668
10669 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
10670
10671         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
10672         were not resolved
10673
10674         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
10675         (DelegateCreation.ImplicitStandardConversionExists): New method for just
10676         conversion test.
10677         
10678         *ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
10679         not needed.
10680
10681         * assign.cs, constant.cs, convert.cs, delegate.cs, expression.cs:
10682         Updated after another emitcontext usage was clean up. It should help us to
10683         synchronize with gmcs easier.
10684
10685 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
10686
10687         A fix for #77353.
10688
10689         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
10690         (Event.Define): ditto
10691         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
10692
10693         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
10694         Removed redundant code and set NewSlot for Invoke method too.
10695
10696         * parameter.cs (Parameters.ctor): Add custom, type ctor.
10697         (Parameters.MergeGenerated): New method. Use this method when you merge
10698         compiler generated argument with user arguments.
10699
10700 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
10701
10702         * attribute.cs (ResolveAsTypeTerminal): Removed.
10703
10704         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
10705         specialization for predefined types; 30% speed up.
10706         Finally placed obsolete check to right place.
10707         (Expression.ResolveType): Removed.
10708
10709         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
10710         Updated after ResolveType was removed.
10711
10712         * expression.cs (Cast.ctor): Check void cast.
10713         (Binary.ResolveAsTypeTerminal): Is never type.
10714         (Conditional.ResolveAsTypeTerminal): Is never type.
10715
10716         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
10717
10718 2006-03-01  Raja R Harinath  <rharinath@novell.com>
10719
10720         Fix #77679.
10721         * expression.cs (ParameterReference.DoResolveBase): Change return
10722         type to bool.
10723         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
10724         Update.
10725
10726         Fix #77628.
10727         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
10728
10729         Fix #77642.
10730         * typemanager.cs (GetFullNameSignature): Don't nullref on
10731         protected accessors.
10732
10733 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
10734
10735         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
10736         these two separated members to simplify the code.
10737         (Attribute.Resolve): Refactored to use new fields and methods.
10738         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
10739         implemented obsolete attribute checking.
10740         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
10741         implemented obsolete checking again. It look line never ending quest ;-)
10742         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
10743
10744         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
10745
10746         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
10747
10748         *class.cs (Property.Define): Add RegisterProperty call.
10749
10750         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
10751         argument groups (only 2).
10752
10753         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
10754         encoding expression to arguments.
10755         (Expression.ExprClassToResolveFlags): Just turned to property.
10756
10757         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
10758         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
10759         optimized as well as implemented support for zero-length attributes.
10760
10761         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
10762         Add caching of PropertyInfo's.
10763
10764 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
10765
10766         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
10767         error multiple times.
10768
10769 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
10770
10771         New partial class implementation.
10772         A fix for #77027, #77029, #77403
10773
10774         * attribute.cs (Attributable): Made attributes protected.
10775
10776         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
10777         the replacements of ClassPart and PartialContainer.
10778         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
10779         (TypeContainer.AddInterface): Ditto.
10780         (TypeContainer.AddPartial): The main method for partial classes. It checks
10781         for errors and merges ModFlags and attributes. At the end class is added to
10782         partial_parts list.
10783         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
10784         required here.
10785         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
10786         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
10787         from the rest of partial classes.
10788         (TypeContainer.GetClassBases): Simplified.
10789         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
10790         DefineType.
10791         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
10792         (TypeContainer.HasExplicitLayout): Uses Flags now.
10793         (PartialContainer): Removed.
10794         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
10795         (StaticClass): Was merged with Class.
10796         (Class.GetClassBases): class and static class bases are verified here.
10797         (Class.TypeAttr): Added static attributes when class is static.
10798         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
10799         (MemberBase): In some cases we need to call parent container for partial
10800         class. It should be eliminated but it's not easy now.
10801
10802         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
10803
10804         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
10805         partial classed to accumulate class comments.
10806         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
10807
10808         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
10809
10810         * driver.cs (MainDriver): Tree.GetDecl was removed.
10811
10812         * modifiers.cs (Modifiers): Add partial modifier.
10813
10814         * tree.cs (Tree.decl): Removed.
10815         (RootTypes): Started to use this class more often for root types
10816         specializations.
10817
10818 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
10819
10820         A fix for #77615
10821
10822         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
10823         external interface does not have an attribute.
10824
10825 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
10826
10827         Another prerequisites for new partial classs implementation.
10828         
10829         * attribute.cs (Attribute.Equal): Implemented.
10830         (Attribute.Emit): Changed as attributes can be applied more than twice.
10831         (Attributes.Emit): Check for duplicate attributes here.
10832
10833         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
10834         as a parameter, clean-up.
10835
10836 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
10837
10838         A fix for #77485
10839
10840         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
10841         contains obsolete attribute check which can in some cases look for base
10842         type of current class which is not initialized yet.
10843         (TypeContainer.BaseType): Replacement of ptype.
10844
10845         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
10846
10847 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
10848
10849         First of prerequisites for new partial classs implemention.
10850         
10851         * attribute.cs (Attributable): Extended by ResolveContext;
10852         Attributes finally have correct context for resolving in all cases.
10853         (AttachTo): Attribute owner is assigned here.
10854
10855         * codegen.cs (IResolveContext): Introduce new interface to hold
10856         all information needed in resolving phase.
10857         (EmitContext): Implements IResolveContext; more clean-up needed here.
10858         
10859         * decl.cs (MemberCore): Implemented IResolveContext.
10860
10861         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
10862         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
10863         parameter.cs, statement.cs, tree.cs, typemanager.cs:
10864         Refactored to use new IResolveContext instead of EmitContext; cleanup
10865
10866 2006-02-06  Miguel de Icaza  <miguel@novell.com>
10867
10868         * codegen.cs (EmitScopeInitFromBlock): check here the
10869         capture_context, there is no need to make two calls to the
10870         EmitContext. 
10871
10872         * anonymous.cs: Add some debugging messages that might help me
10873         track other instances of this problem in the future (the
10874         regression of test 467).
10875
10876         * cs-parser.jay: track the variable block, as we need to initalize
10877         any captured variables declared in this block for the "catch"
10878         portion of the "Try" statement.
10879
10880         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
10881         scope initialization for captured variables. 
10882
10883         Also, move the emit for the variables after the block location has
10884         been marked.
10885
10886 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
10887
10888         * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
10889
10890 2006-02-02  Miguel de Icaza  <miguel@novell.com>
10891
10892         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
10893         commit yesterday, the initialization for the roots is necessary.
10894         What is not necessary is the scope activation.
10895
10896 2006-02-02  Raja R Harinath  <rharinath@novell.com>
10897
10898         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
10899         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
10900         CS0206 checks.
10901         (Argument.Resolve): Remove CS0206 checks.
10902
10903 2006-02-01  Miguel de Icaza  <miguel@novell.com>
10904
10905         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
10906         scopes for all the roots, the scopes will now be emitted when the
10907         Blocks are entered.   [This change was wrong, fixed on 2006-02-02]
10908
10909         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
10910         code.  This reduces a lot of existing cruft.
10911         
10912         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
10913         that the ScopeInfo is generated as we enter the scope, not at the
10914         time of use, which is what we used to do before.
10915
10916         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
10917         every time a Block is about to be emitted if we have a
10918         CaptureContext. 
10919
10920 2006-02-01  Raja R Harinath  <rharinath@novell.com>
10921
10922         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
10923         (Reset): Update.
10924         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
10925
10926         * typemanager.cs (cons_param_array_attribute): Make private.
10927         (Reset): Set it to null.
10928         (InitCoreHelpers): Don't initialize it.
10929         (ConsParamArrayAttribute): New.  Initialize it as needed.
10930         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
10931
10932 2006-01-31  Miguel de Icaza  <miguel@novell.com>
10933
10934         * expression.cs: There might be errors reported during the
10935         selection of applicable methods.  If there are errors, do not
10936         continue execution as it will lead the compiler to crash.
10937
10938 2006-01-30  Miguel de Icaza  <miguel@novell.com>
10939
10940         * expression.cs: Member access is not allowed on anonymous
10941         methods.  Fixes #77402.
10942
10943 2006-01-30  Raja R Harinath  <rharinath@novell.com>
10944
10945         Fix #77401
10946         * cs-parser.jay (VariableDeclaration): Don't set
10947         current_array_type to null.
10948         (field_declaration, event_declaration, declaration_statement):
10949         Set it to null here.
10950
10951 2006-01-28  Raja R Harinath  <harinath@gmail.com>
10952
10953         * typemanager.cs (GenericParameterPosition): New.
10954         * doc.cs: Use it.
10955
10956 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
10957
10958         * doc.cs : To process "include" elements, first we should create
10959           another list than XmlNodeList, because it could result in node
10960           removal, which could result in that the XmlNodeList gives up
10961           yielding next node.
10962
10963           (Also made code identical to gmcs again.)
10964
10965 2006-01-25  Miguel de Icaza  <miguel@novell.com>
10966
10967         * ecore.cs: Introduce an error report that we were not catching
10968         before, if not silent, we must report the error.  Gonzalo ran into
10969         it.
10970
10971 2006-01-23  Miguel de Icaza  <miguel@novell.com>
10972
10973         A fix for bug: #76957
10974         
10975         * iterators.cs (MoveNextMethod.CreateMethodHost): call
10976         ComputeMethodHost before creating the method, this is a new
10977         requirement. 
10978
10979         * anonymous.cs (AnonymousContainer): Now we track all the scopes
10980         that this method references (RegisterScope).  The actual scope
10981         where the method is hosted is computed with the ComputeMethodHost
10982         before we create the method.
10983
10984         Moved the Deepest routine here.
10985
10986         (AnonymousContainer.ComputeMethodHost): New routine used to
10987         compute the proper ScopeInfo that will host the anonymous method.
10988
10989         (ScopeInfo): Deal with multiple roots.  The problem was that we
10990         did not have a unique root where all ScopeInfos could be hanged
10991         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
10992         of roots.  
10993
10994         Remove AdjustMethodScope which is now computed at the end.  Remove
10995         LinkScope which did a partial link, instead link all ScopeInfos
10996         before code generation from the new "LinkScopes" routine. 
10997
10998         Simplify all the Add* routines as they no longer need to maintain
10999         the tree, they just need to record that they are using variables
11000         from a ScopeInfo.
11001
11002         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
11003         routines to produce the forest of ScopeInfo trees.
11004
11005         * class.cs (TypeContainer.AppendMethod): This is just like
11006         AddMethod, but ensures that an interface implementation method
11007         (IEnumerable.XXX) is not inserted at the beginning of the queue of
11008         methods, but at the end.
11009
11010         We use this functionality to ensure that the generated MoveNext
11011         method in the iterator class is resolved/emitted before the
11012         enumerator methods created.   
11013
11014         This is required because the MoveNext method computes the right
11015         ScopeInfo for the method.  And the other methods will eventually
11016         need to resolve and fetch information computed from the anonymous
11017         method. 
11018
11019 2006-01-21  Raja R Harinath  <harinath@gmail.com>
11020             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
11021
11022         Fix rest of #76995.
11023         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
11024         the 'aliases' hash.
11025         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
11026         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
11027
11028 2006-01-18  Raja R Harinath  <rharinath@novell.com>
11029
11030         Fix #76656, cs0231-2.cs.
11031         * cs-parser.jay (formal_parameter_list): Make error case catch
11032         more issues.
11033         (parenthesized_expression_0): Add CS1026 check.
11034         (invocation_expression): Remove unused { $$ = lexer.Location }.
11035
11036 2006-01-17  Raja R Harinath  <rharinath@novell.com>
11037
11038         Fix #76824.
11039         * cs-parser.jay (statement_expression): Don't list out the
11040         individual statement-expressions.  Convert syntax error into
11041         CS0201 check.
11042
11043 2006-01-16  Raja R Harinath  <rharinath@novell.com>
11044
11045         Fix #76874.
11046         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
11047         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
11048         CheckIntermediateModification.
11049         (FieldExpr.DoResolve): Add new two-argument version that
11050         allows us to resolve the InstanceExpression as an lvalue.
11051         The one-argument variant is now just a wrapper.
11052         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
11053         Resolve the lhs as an lvalue if the it has a value type.
11054         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
11055         from Assign.DoResolve.
11056         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
11057         resolved as an lvalue.
11058         (PropertyExpr.DoResolve): Update.
11059         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
11060         has a value type.  Move CS1612 check here from
11061         CheckIntermediateModification.
11062         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
11063         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
11064         'right_side' of a ResolveLValue on an 'out' argument.
11065         (EmptyExpression.LValueMemberAccess): New.  Used as the
11066         'right_side' of a propagated ResolveLValue on a value type.
11067         (LocalVariableReference.DoResolveBase): Recognize
11068         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
11069         Add CS1654 check.
11070         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
11071         EmptyExpression.Null.
11072
11073 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
11074
11075         * typemanager.cs : added IsGenericParameter(). In mcs it always
11076           return false.
11077         * doc.cs : for generic parameters, use GenericParameterPosition,
11078           not FullName.
11079
11080 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
11081
11082         * expression.cs: Fix Console.WriteLine ((this = x).foo);
11083
11084 2006-01-12  Miguel de Icaza  <miguel@novell.com>
11085
11086         This fixes the problem where we used ldfld instead of ldflda to
11087         load the "THIS" pointer on captured parameters, when THIS is a
11088         value type.  See bug #77205.
11089         
11090         * iterators.cs (CapturedThisReference.Emit): Pass false to
11091         EmitThis (we do not need the address).
11092
11093         * codegen.cs (EmitThis): it needs to know whether we need the
11094         address of `this' or not.  This is used by value types.  
11095
11096         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
11097         every other call passes false.
11098
11099 2006-01-12  Raja R Harinath  <rharinath@novell.com>
11100
11101         Fix #77221.
11102         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
11103         GetOverride.
11104         * expression.cs (Invocation.OverloadResolve): Update.
11105         (Invocation.DoResolve): Avoid double resolution of invocation.
11106
11107 2006-01-11  Raja R Harinath  <rharinath@novell.com>
11108
11109         Fix #77180.
11110         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
11111         unary negation of floating point types as 0-expr; negation cannot
11112         overflow in floating point types.
11113
11114         Fix #77204.
11115         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
11116         on operands of 'void' type.
11117
11118         Fix #77200.
11119         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
11120         and ExclusiveOr for boolean constants too.
11121
11122 2006-01-09  Raja R Harinath  <rharinath@novell.com>
11123
11124         Fix #75636.
11125         * expression.cs (Invocation.OverloadResolve): Replace reflected
11126         override methods with their base virtual methods, rather than
11127         skipping over them.
11128         * typemanager.cs (TypeManager.GetOverride): New.
11129
11130 2006-01-05  Jb Evain  <jbevain@gmail.com>
11131
11132         * class.cs (Property.Define, Indexer.Define): do not tag the
11133         properties as SpecialName | RTSpecialName.
11134
11135 2006-01-04  Miguel de Icaza  <miguel@novell.com>
11136
11137         * class.cs (MethodCore.IsDuplicateImplementation): This method was
11138         doing a low-level comparission of parameter types.  It was lacking
11139         a check for __argslist. 
11140
11141 2005-12-30  Miguel de Icaza  <miguel@novell.com>
11142
11143         * expression.cs (ParameterReference.DoResolveBase): Allow
11144         reference parameters if they are local to this block. 
11145
11146         This allows the ref and out parameters of a delegate to be used in
11147         an anonymous method, for example:
11148
11149         delegate void set (out int x);
11150
11151         set s = delegate (out int x){
11152                 x = 0;
11153         };
11154
11155         This is used by functionality introduced late in the C# language.
11156         
11157         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
11158         method that take ref and out parameters. 
11159
11160         Fixes #77119 which was a late change in the spec.
11161
11162 2005-12-23  Miguel de Icaza  <miguel@novell.com>
11163
11164         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
11165         parent if its the same scope.  Fixes #77060.
11166
11167 2005-12-21  Miguel de Icaza  <miguel@novell.com>
11168
11169         * driver.cs: Report the case of no source files and no -out:
11170         argument provided.
11171
11172 2005-12-20  Raja R Harinath  <rharinath@novell.com>
11173
11174         Fix #77035.
11175         * expression.cs (ComposedCast.GetSignatureForError): Define.
11176
11177 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
11178
11179         Fix #76995
11180
11181         * namespace.cs (NamespaceEntry): Add extern_aliases as a
11182         ListDictionary, to contain the ExternAliasEntry entries (in
11183         addition to the NamespaceEntry.aliases hashtable). This field is
11184         shared between the original entry and its doppelganger (bodyless 
11185         copy of it).
11186         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
11187         extern_aliases field.
11188         (NamespaceEntry.Lookup): Move the IsImplicit check after the
11189         lookup in extern_aliases.
11190
11191 2005-12-16  Raja R Harinath  <rharinath@novell.com>
11192
11193         Fix #77006.
11194         * class.cs (TypeContainer.Mark_HasEquals): New.
11195         (TypeContainer.Mark_HasGetHashCode): New.
11196         (ClassPart): Override them.
11197         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
11198
11199         Fix #77008.
11200         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
11201         'parent' argument to the base constructor.
11202
11203         Remove all mention of TypeContainer from decl.cs.
11204         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
11205         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
11206         (DeclSpace.DeclSpace): Likewise.
11207         (DeclSpace.DefineMembers): Remove unused argument.
11208         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
11209         debugging check -- we don't care if the debug code throws an
11210         InvalidCastException instead of an InternalErrorException.
11211         * class.cs (TypeContainer.DefineMembers): Update to changes.
11212         (TypeContainer.DoDefineMembers): Likewise.
11213         (TypeContainer.GetMethods): Likewise.
11214         (PropertyMember.Define): Likewise.
11215         (MemberBase.Parent): New property that forwards to
11216         MemberCore.Parent, but ensures that we get a TypeContainer.
11217         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
11218         (RootContext.PopulateTypes): Likewise.  Remove special case code
11219         for !RootContext.StdLib: DefineMembers is idempotent.
11220
11221 2005-12-14  Miguel de Icaza  <miguel@novell.com>
11222
11223         * convert.cs (ExplicitConversionCore): Check the return value from
11224         ExplicitConversionCore which can return null on failure.  Fixes #76914
11225
11226 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
11227
11228         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
11229
11230 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
11231
11232         * doc.cs : The search for referenced namespace was insufficient to
11233           get global one as it used to do. Fixed bug #76965.
11234
11235 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
11236
11237         * doc.cs : check name in cref in the last phase that whether it is
11238           namespace or not.
11239
11240 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11241
11242         * cs-tokenizer.cs : reverted the latest change: it somehow broke
11243           Mono.C5.
11244
11245 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11246
11247         * doc.cs : so it turned out that we cannot skip override check for 
11248           interface members. Fixed bug #76954.
11249
11250 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11251
11252         * cs-tokenizer.cs : fixed bug #75984:
11253           - #warning and #error should not be handled when the source line
11254             is disabled.
11255           - #line is not checked strictly when the source line is disabled.
11256           - #define and #undef is on the other hand checked strictly at any
11257             state.
11258
11259 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
11260
11261         * cs-tokenizer.cs : missing Location (actually, filename) in one of
11262           CS1027 report.
11263
11264 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11265
11266         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
11267
11268         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
11269         event initializers.
11270         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
11271         (FieldBase.Initializer): Initializer is now optional.
11272         (EventField.Define): Only event field can have initializer.
11273
11274         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
11275
11276         * const.cs (Const): Reuse initializer.
11277
11278         * cs-parser.jay: Updated after FieldBase changes.
11279         Added current_array_type to simplify array initializers.
11280
11281         * ecore.cs (NullCast.IsDefaultValue): Implemented.
11282
11283         * expression.cs, iterators.cs: Updated.
11284
11285         * namespace.cs (NamespaceEntry): Made UsingFound private.
11286
11287 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11288
11289         * parameterCollection.cs: Obsolete, removed.
11290         * parser.cs: Obsolete, removed.
11291
11292 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11293
11294         Fix #76849.
11295         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
11296
11297         * enum.cs (Enum.Define): Set obsolete context here.
11298
11299 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
11300
11301         * doc.cs :
11302           - FindDocumentedMember() now expects 1) paramList as null
11303             when "we don't have to check the number of parameters" and
11304             2) Type.EmptyTypes when "there is no arguments".
11305           - Introduced FoundMember struct to hold the exact type which was
11306             used to find the documented member (the above change broke
11307             test-xml-044; it might be better just to use DeclaringType than
11308             what MS does, like this change does, but it depends on usage.)
11309
11310 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
11311
11312         * doc.cs : documented member might be from DeclaringType for nested
11313           types. Fixed bug #76782.
11314
11315 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
11316
11317         * anonymous.cs: Have the param code handle leaving copies on the
11318         stack etc. Allows anonymous params to take part in the assignment
11319         code (++, +=, etc). Fixes bug #76550
11320
11321         * expression.cs: Handle the prepare_for_load/leave_copy by passing
11322         it down to the anon code.
11323
11324         * iterators.cs: Use dummy var here
11325
11326         * codegen.cs: Handle new vars
11327
11328 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
11329
11330         Fix #76849.
11331         * class.cs (MethodData.Define): Set proper Obsolete context.
11332
11333         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
11334         obsolete context.
11335         (FieldExpr.DoResolve): Ditto.
11336
11337 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
11338
11339         Fix #76849.
11340         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
11341         parent is not obsolete.
11342
11343 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
11344
11345         * doc.cs : (FindDocumentedMember) find parameterless members first
11346           and get CS0419 in the early stage. Fixed first case of bug #76727.
11347
11348 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
11349
11350         Fix #76859.
11351         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
11352         no error was reported.
11353
11354         *expression.cs (Binary.DoResolve): left can be null.
11355
11356 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
11357
11358         Fix #76783.
11359         * class.cs (MethodData.Emit): Parameters should be labeled first.
11360
11361 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
11362
11363         Fix #76761.
11364         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
11365
11366 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
11367
11368         * attribute.cs (AreParametersCompliant): Moved to Parameter.
11369
11370         * class.cs (MethodCore): Parameter clean up.
11371         (IMethodData): Added ParameterInfo.
11372         (MethodData): Parameter clean up.
11373         (Indexer.Define): Parameter clean up.
11374
11375         * anonymous.cs,
11376         * codegen.cs,
11377         * cs-parser.jay,
11378         * decl.cs,
11379         * doc.cs,
11380         * ecore.cs,
11381         * flowanalysis.cs,
11382         * iterators.cs,
11383         * pending.cs,
11384         * statement.cs,
11385         * typemanager.cs: Parameter clean up.
11386
11387         * delegate.cs (Define): Get rid of duplicated code.
11388
11389         * expression.cs (ParameterReference): Removed useless parameters
11390         and simplified.
11391         (Invocation): Ditto.
11392
11393         * parameter.cs (ParamsParameter): New class, params specialization.
11394         (ArglistParameter): Attemp to separate arglist.
11395         (Parameter): Refactored to be reusable and faster.
11396         (Parameter.Modifier): Made understandable.
11397         (Parameters): Changed to be used as a class for `this' assembly
11398         parameters. Refactored to use new specialized classes.
11399
11400         * support.cs (ParameterData): Added Types property.
11401         (InternalParameters): Deleted.
11402
11403 2005-08-20  Martin Baulig  <martin@ximian.com>
11404
11405         Merging this patch from GMCS to fix #75867.
11406
11407         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
11408         scope if we don't already have it.
11409
11410 2005-11-17  Martin Baulig  <martin@ximian.com>
11411
11412         * anonymous.cs
11413         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
11414         inherit the scope from our parent.  Fixes #76653.
11415
11416 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11417
11418         * doc.cs : the previous patch does not actually fix the bug.
11419           PropertyInfo override check is now implemented and really fixed it.
11420         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
11421
11422 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11423
11424         * doc.cs : apply "override filter" also to properties.
11425           Fixed bug #76730.
11426
11427 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11428
11429         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
11430           no need to check overrides. For classes, omit those results from 
11431           interfaces since they must exist in the class. Fixed bug #76726.
11432
11433 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11434
11435         * typemanager.cs : (GetFullNameSignature) differentiate indexers
11436           with different parameters. Fixed the second problem in #76685.
11437
11438 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11439
11440         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
11441           get expected 'protected' access in CheckValidFamilyAccess()).
11442           Fixed bug #76692.
11443
11444 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11445
11446         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
11447           Fixed bug #76705.  CS1569 was incorrectly commented out.
11448
11449 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
11450
11451         * doc.cs : use Invocation.IsOverride() to do real override check.
11452         * expression.cs : made Invocation.IsOverride() internal.
11453
11454 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
11455
11456         * doc.cs : use TypeManager.FindMembers() instead of (possible)
11457           TypeBuilder.FindMembers() and filter overriden base members out.
11458           Fixed bug #76990.
11459
11460 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11461
11462         * doc.cs : ref/out parameters are represented as '@' (instead of
11463           '&' in type FullName). Fixed bug #76630 (additionally crefs).
11464
11465 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11466
11467         * doc.cs : when there was no '.' in cref to methods in doc comment,
11468           then parameters were missing in the output. Fixed bug #76691.
11469
11470 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11471
11472         * driver.cs : don't output docs when there is an error.
11473           Fixed bug #76693.
11474
11475 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11476
11477         * doc.cs :
11478           Now it should detect indexers. Fixed primary concern in bug #76685.
11479           Fixed CS0419 message to not show the identical member signature in
11480           the message.
11481
11482 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11483
11484         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
11485           instead of Type.FindMembers() since it does not handle events.
11486           Fixed bug #71604.
11487
11488 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
11489
11490         * codegen.cs: Fixed typo (speficied -> specified).
11491
11492 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
11493
11494         Fix #76369.
11495         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
11496
11497 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
11498
11499         * attribute.cs: Changed error message.
11500
11501         * cs-tokenizer.cs: One more check.
11502
11503 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
11504
11505         * statement.cs (Block.Resolve): Ignore empty statement.
11506
11507 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
11508
11509         * report.cs: Made error/warning methods more strict to avoid
11510         their misuse.
11511
11512         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
11513         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
11514         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
11515         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
11516
11517 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
11518
11519         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
11520         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
11521
11522         * class.cs (TypeContainer.IsComImport): New property.
11523         (Constructor.Define): Create proper ctor for ComImport types.
11524
11525         * expression.cs (New.CheckComImport): Fixed.
11526
11527 2005-11-07  Miguel de Icaza  <miguel@novell.com>
11528
11529         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
11530         that a parameter has been captured does not mean that we do not
11531         have to do the rest of the processing.  This fixes the second part
11532         of #76592.  If there was another anonymous method capturing
11533         values in the past, the Scope would never be set for the second
11534         method that captured the same parameter.
11535
11536         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
11537         properly manipulate the stack.   Second part of fix for #76592.
11538
11539         * expression.cs (New): Add support for invoking "new" on
11540         interfaces that have been flagged with the ComImport attribute and
11541         the CoClass.  Fixes #76637 
11542
11543         * statement.cs (Try.DoEmit): When a variable is captured, do not
11544         try to emit the vi.LocalBuilder variable as it has been captured.
11545         Create a temporary variable and store the results on the
11546         FieldBuilder.  Fixes #76642
11547
11548 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
11549
11550         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
11551
11552         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
11553
11554         * expression.cs (Binary.DoResolve): Added && optimalization.
11555     
11556         * typemanager.cs (AddUserType): Removed useless argument.
11557
11558 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
11559
11560         * statement.cs (Block.variables): Uses ListDictionary.
11561
11562 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
11563
11564         Fix #75969.
11565         * class.cs (PartialContainer.EmitType): Customized to emit
11566         security attributes.
11567         (ClassPart.ApplyAttributeBuilder): Transform security attribute
11568         for partial classes.
11569
11570 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
11571
11572         Fix #76599.
11573         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
11574         access has to be fixed.
11575         
11576         * typemanager.cs (IsUnmanagedType): Wrong common field type.
11577
11578 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
11579
11580         Fix #76590.
11581         * ecore.cs (NullCast.Reduce): Implemented.
11582
11583         * expression.cs (ArrayCreation.CheckIndices): Correcly check
11584         constant type.
11585         
11586         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
11587         properly.
11588         (Foreach.Resolve): Catch null properly.
11589
11590 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
11591  
11592         * cs-tokenizer.cs: Warning text fix.
11593
11594         * driver.cs: AllWarningNumbers exposed on public interface.
11595
11596         * report.cs (): Reviewed warning numbers.
11597         (IsValidWarning): Use binary search.
11598
11599 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
11600  
11601         * driver.cs: Implemeted resource visibility.
11602         (Resources): New class for code sharing between /res: and
11603         /linkres:
11604  
11605 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
11606
11607         Fix #76568.
11608         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
11609         folding.
11610         
11611         * convert (Convert.ImplicitReferenceConversion): NullCast holds
11612         contants only.
11613         
11614         * ecore.cs (NullCast): Child is contant only.
11615         
11616         * literal.cs (NullLiteral.Reduce): null can be converted to any
11617         reference type.
11618
11619 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
11620
11621         * driver.cs: Use Encoding.Default as default code page instead
11622           of ISO-28591.
11623
11624 2005-10-27  Raja R Harinath  <rharinath@novell.com>
11625
11626         Fix #76085.
11627         * expression.cs (Invocation.Error_InvalidArguments): Handle
11628         __arglist parameters.
11629         (Invocation.VerifyArgumentsCompat): Likewise.
11630         * support.cs (ReflectionParameters.GetSignatureForError): Print
11631         __arglist parameters.
11632         (InternalParamters.GetSignatureForError): Likewise.
11633         * parameter.cs (Parameters.GetSignatureForError): Likewise.
11634
11635 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
11636
11637         * attribute.cs (GetPropertyValue): Made public.
11638
11639         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
11640         Resolve.
11641         Add new property WrapNonExceptionThrows to handle 2.0 assembly
11642         attribute.
11643         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
11644         is not defined.
11645         
11646         * driver.cs: Reflect method name change.
11647         
11648         * statement.cs (Try.Resolve): Warn when try has both general
11649         exception handlers.
11650         
11651         * typemanager.cs: runtime_compatibility_attr_type new predefined
11652         type.
11653
11654 2005-10-26  Raja R Harinath  <harinath@gmail.com>
11655
11656         Fix #76419.
11657         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
11658         treat it as an empty parameter list.
11659
11660 2005-10-26  Raja R Harinath  <rharinath@novell.com>
11661
11662         Fix #76271.     
11663         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
11664         ResolveAsTypeStep silent.
11665         * statement.cs (Block.AddConstant): Mark block as used.
11666         (Block.ResolveMeta): Avoid piling on error messages
11667         if a constant initializer resolution fails.
11668
11669 2005-10-25  Raja R Harinath  <rharinath@novell.com>
11670
11671         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
11672         Remove.
11673         (NamespaceEntry.VerifyAllUsing): New.
11674         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
11675         behaviour.  Delegates actual resolution of alias to ...
11676         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
11677         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
11678         Update.
11679         * driver.cs (Driver.MainDriver): Update.
11680         
11681         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
11682         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
11683         property.
11684         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
11685         Remove.
11686         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
11687         RootNamespace.DefineNamespacesForAll.
11688
11689 2005-10-24  Raja R Harinath  <harinath@gmail.com>
11690
11691         * typemanager.cs (assemblies, external_aliases, modules)
11692         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
11693         (ComputeNamespaces, GetRootNamespace): Remove extra staging
11694         overhead.  Move resposibility ...
11695         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
11696         * driver.cs, attribute.cs, codegen.cs: Update to changes.
11697
11698 2005-10-23  Raja R Harinath  <harinath@gmail.com>
11699
11700         * namespace.cs (RootNamespace.all_namespaces): Renamed from
11701         cached_namespaces.  Improve usage.
11702         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
11703         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
11704         Move from GlobalRootNamespace and simplify.
11705         (RootNamespace.Global): Make instance variable.
11706         (RootNamespace.RootNamespace): Add "alias name" parameter.
11707         (GlobalRootNamespace): Simplify drastically.
11708         (Namespace.Lookup): Don't use GetNamespace.
11709         * typemanager.cs (GetRootNamespace): Rename from
11710         ComputeNamespaceForAlias.
11711         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
11712
11713 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
11714
11715         * anonymous.cs (AnonymousContainer): Don't crash when container
11716         doesn't exist.
11717
11718 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
11719
11720         * expression.cs (Binary.DoResolve): Warn when comparing same
11721         values.
11722
11723 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
11724
11725         Fix #76486.
11726         * expression.cs (Binary.DoResolve): It looks like there are no
11727         convetsion rules in enum context.
11728
11729 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
11730
11731         Add support for extern alias qualifiers.
11732         * typemanager.cs: Move some LookupTypeReflection code
11733         to namespace.cs, to have cleaner code. Added some methods
11734         to help us keep track of the extern aliased references.
11735         * driver.cs: Add suport for extern alias assemblies on command
11736         line and check for their warnings/errors. Also keep track of the
11737         extern aliased assemblies.
11738         * namespace.cs: Move the global functionality of Namespace
11739         to GlobalRootNamespace/RootNamespace. Now the global namespace
11740         is GlobalRootNamespace.Globa. Also the code moved from 
11741         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
11742         Finally added LocalAliasEntry (AliasEntry before) and
11743         ExternAliasEntry, to handle alias statements.
11744         * cs-parser.jay: Add support in the grammar for extern alias
11745         statement.
11746         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
11747         Update callings to Namespace (now in GlobalRootNamespace).
11748
11749 2005-10-18  Raja R Harinath  <rharinath@novell.com>
11750
11751         Fix #76371.
11752         * class.cs (TypeContainer.DefineType): Move updating of
11753         topological sort earlier in the code.
11754         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
11755
11756 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
11757
11758         Fix #76273.
11759         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
11760         
11761         * constant.cs (Constant.TryReduce): Moved from Cast class.
11762         (Reduce): Made little bit more OO and fixed missing conversions.
11763         
11764         * ecore.cs (Reduce): Implemented.
11765         (Binary.EnumLiftUp): New method to upgrade values to enum values.
11766         
11767         * literal.cs (Reduce): Implemented.
11768         
11769         * class.cs: Reverted Miguel's wrong commit.
11770
11771 2005-10-14  Miguel de Icaza  <miguel@novell.com>
11772
11773         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
11774
11775 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
11776
11777         * cs-parser.jay, expression.cs : CS0214 was missing error location
11778           for constants. Fixed bug #76404.
11779
11780 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
11781
11782         Fix #76370.
11783         * convert.cs (ExplicitConversionCore): Fixed object->enum
11784         conversion.
11785
11786 2005-10-10  Raja R Harinath  <rharinath@novell.com>
11787
11788         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
11789         InstanceExpression.
11790         (PropertyExpr.EmitCall): Likewise.
11791         * expression.cs (Invocation.EmitArguments): Handle case where
11792         arguments == null.
11793         (Invocation.EmitCall): Avoid allocating temporary variable if
11794         there are no arguments.
11795
11796 2005-10-07  Raja R Harinath  <rharinath@novell.com>
11797
11798         Fix #76323.
11799         * convert.cs (ImplicitConversionStandard): Move conversion of
11800         void* to arbitrary pointer types ...
11801         (ExplicitConversionStandard): .. here.
11802         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
11803         error to always print typenames.
11804
11805 2005-10-07  Raja R Harinath  <rharinath@novell.com>
11806
11807         * convert.cs (GetConversionOperator): Rename from
11808         GetConversionOperators.  Move operator selection code from ...
11809         (UserDefinedConversion): ... here.
11810
11811 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
11812
11813         * convert.cs (ExplicitConversionCore): Removed duplicate enum
11814         conversion.
11815
11816 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
11817
11818         * assign.cs (Assign.DoResolve): Error method changed.
11819
11820         * cfold.cs (DoConstantNumericPromotions): Error method changed.
11821         
11822         * const.cs (ResolveValue): Reset in_transit immediately.
11823         
11824         * constant.cs: Error method changed.
11825         
11826         * convert.cs: Removed useless location parameter.
11827         (ExplicitNumericConversion): Don't do double enum check.
11828         (ExplicitConversionCore): Renamed from ExplicitConversion.
11829         (ExplicitUnsafe): Extracted from ExplicitConversion.
11830         (ExplicitConversion): Uses for error reporting.
11831         
11832         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
11833         error messages.
11834         (ResolveBoolean): Uses common error method.
11835         (CastToDecimal): Get rid of ec.
11836         (CastFromDecimal): Optimized.
11837         (ConvCast): Get rid of ec.
11838         
11839         * enum.cs (ResolveValue): Reset in_transit immediately.
11840         (Emit): Return after first error.
11841         
11842         * expression.cs: Convert changes.
11843         
11844         * literal.cs: Error method changed.
11845         
11846         * statement.cs: Error method changed.
11847
11848 2005-10-03  Raja R Harinath  <rharinath@novell.com>
11849
11850         * support.cs (SeekableStreamReader.Position): Don't error out when
11851         the requested position is just beyond the end of the current
11852         buffered data.
11853
11854 2005-09-28  Raja R Harinath  <rharinath@novell.com>
11855
11856         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
11857         try to keep in sync with the byte count of the underlying Stream.
11858         However, this limits us to a window size of 2048 characters: i.e.,
11859         the maximum lookahead of our lexer/parser can be 2048 characters.
11860
11861 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
11862
11863         Fix #76255.
11864         * driver.cs: Fix compilation files with full root path.
11865
11866 2005-09-25  Miguel de Icaza  <miguel@novell.com>
11867
11868         * report.cs (SymbolRelatedToPreviousError): Format the output so
11869         it does not use an open parenthesis that is never closed. 
11870
11871         * driver.cs: Follow coding guidelines
11872
11873 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
11874
11875         Fix #72930.
11876         * const.cs (Const.ResolveValue): Check for assigning non-null
11877         value to reference type.
11878
11879 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
11880
11881         * anonymous.cs: Implemented ExprClassName.
11882         
11883         * assign.cs (Assign.DoResolve): Don't chrash when type is not
11884         delegate.
11885         
11886         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
11887         check.
11888         
11889         * class.cs (StaticClass.DefineContainerMembers): Report protected
11890         members as error.
11891         
11892         * codegen.cs: if(ed) PRODUCTION.
11893         
11894         * convert.cs (Error_CannotImplicitConversion): Better error
11895         distinction.
11896         
11897         * cs-parser.jay: More error checks.
11898         
11899         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
11900         
11901         * driver.cs (CSCParseOption): Enabled wrong option check.
11902         
11903         * ecore.cs (Expression.ExprClassName): Turned to property.
11904         (MemberExpr.CheckIntermediateModification): For checking boxed
11905         value types     modification.
11906         
11907         * statement.cs (Fixed.Resolve): Expression type must be
11908         convertible to fixed type.
11909         (CollectionForeach.GetEnumeratorFilter,TryType):
11910         Small refactoring for easier error checking.
11911
11912 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
11913
11914         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
11915         attributes.
11916         
11917         * class.cs (GeneratedBaseInitializer): New class for customization
11918         compiler generated initializers.
11919         (MemberBase.DoDefine): Check Obsolete attribute here.
11920         (FieldMember.DoDefine): Ditto.
11921         
11922         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
11923         constants.
11924         
11925         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
11926         (MemberCore.GetObsoleteAttribute): Removed argument.
11927         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
11928         (MemberCore.CheckObsoleteType): New helper.
11929         
11930         * delegate.cs,
11931         * enum.cs,
11932         * statement.cs: Updates after MemberCore changes.
11933         
11934         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
11935         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
11936         
11937         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
11938         obsolete attribute for compiler construct.
11939         (As.DoResolve): Cache result.
11940         
11941         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
11942
11943 2005-09-26  Raja R Harinath  <rharinath@novell.com>
11944
11945         Fix #76133.
11946         * expression.cs (This.VerifyFixed): In a value type T, the type of
11947         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
11948         value type R, 'this' is treated as a value parameter.
11949
11950 2005-09-22  Miguel de Icaza  <miguel@novell.com>
11951
11952         * statement.cs (Lock): Use the TemporaryVariable class instead of
11953         manually using local variables as those do not work when variables
11954         are captured.
11955
11956         * ecore.cs: Moved the TemporaryVariable class from being a nested
11957         class inside Foreach to be a public class that can be employed in
11958         other places. 
11959
11960 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
11961
11962         * cs-parser.jay: interface_accessors replaced by
11963         accessor_declarations.
11964
11965         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
11966         location.
11967         
11968         * statement.cs (GotoCase.Resolve): Convert null constant to
11969         null case.
11970         (SwitchLabel.ResolveAndReduce): Ditto.
11971         (SwitchLabel.NullStringCase): Custom null stamp.
11972         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
11973         
11974         typemanager.cs (CSharpSignature): Don't skip first argument
11975         for full names.
11976
11977 2005-09-18  Miguel de Icaza  <miguel@novell.com>
11978
11979         * driver.cs: Set InEmacs based on the environment variable EMACS. 
11980
11981         * location.cs (InEmacs): in this mode, do not report column
11982         location as it confuses Emacs.
11983
11984 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
11985
11986         * cfold.cs, constant.cs, convert.cs, ecore.cs,
11987         expression.cs, iterators.cs, literal.cs: Store constants and
11988         literals location.
11989         
11990         * class.cs (MemberBase.ShortName): Pass location.
11991         
11992         * cs-parser.jay: Some location fixes.
11993         
11994         * ecore.cs (Expression.Location): Made virtual.
11995
11996 2005-09-05  Miguel de Icaza  <miguel@novell.com>
11997
11998         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
11999         if the underlying types are the same, otherwise we need to produce
12000         code that will do the proper cast.
12001
12002         This was exposed by Marek's constant rewrite which produced
12003         invalid code for the call site:
12004
12005         enum X : long { a }
12006         void Method (X v) {}
12007
12008         Method ((X) 5)
12009
12010         This fixes test-49.cs
12011
12012 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
12013
12014         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
12015           Type/Object should be allowed as well. Fixed bug #75968.
12016
12017 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
12018
12019         * expression.cs : (Binary.DoResolve): when one is enum constant and
12020           another is constant 0, then return enum one *as enum type*.
12021           Fixed bug 74846.
12022
12023 2005-09-02  Raja R Harinath  <rharinath@novell.com>
12024
12025         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
12026         internal.
12027
12028         Fix #75941.
12029         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
12030         flow-branching for LocalVariableReferences in case we were invoked
12031         from a MemberAccess.
12032         * expression.cs (LocalVariableReference.VerifyAssigned): New.
12033         Carved out of ...
12034         (LocalVariableReference.DoResolveBase): ... this.
12035         (MemberAccess.Resolve): Do the check that was disabled during
12036         SimpleNameResolve.
12037
12038 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
12039
12040         * class.cs :
12041           (PartialContainer.Create): check abstract/sealed/static strictly
12042           but abstract/sealed can exist only at one side. Fixed bug #75883.
12043
12044 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
12045
12046         Fix #75945.
12047         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
12048         specified, don't default to UnmanagedType.I4.
12049
12050 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
12051
12052         * expression.cs : conditional operator should check possibly
12053           incorrect assign expression. Fixed bug #75946.
12054
12055 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
12056
12057         * cs-tokenizer.cs, cs-parser.jay, driver.cs, support.cs :
12058           Reverting the change. gmcs is much complex than mcs on this matter.
12059
12060 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
12061
12062         * cs-tokenizer.cs : To read another token ahead of the actual 
12063           consumption, use new SavedToken and cache token instead of moving
12064           back the stream with SeekableStreamReader (it seemed problematic).
12065         * cs-parser.jay,
12066           driver.cs : Thus use StreamReader directly.
12067         * support.cs : Thus removed SeekableStreamReader.
12068
12069 2005-08-30  Raja R Harinath  <rharinath@novell.com>
12070
12071         Fix #75934.
12072         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
12073         (ScopeInfo.EmitScopeType): Use it to construct field names from
12074         names of captured locals.
12075
12076         Fix #75929.
12077         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
12078         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
12079         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
12080         (ExplicitConversion): Remove enum cases already handled by
12081         implicit conversion.  Move implicit conversion check to the beginning.
12082         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
12083         * expression.cs (ArrayCreation.EmitDynamicInitializers):
12084         Don't treat System.Enum as a struct.
12085
12086 2005-08-30  Jb Evain  <jbevain@gmail.com>
12087
12088         * attribute.cs: handles as expression in parameters.
12089
12090 2005-08-30  Raja R Harinath  <rharinath@novell.com>
12091
12092         Fix #75802.
12093         * class.cs (TypeContainer.VerifyClsName): Don't use a
12094         PartialContainer when verifying CLS compliance.
12095         (AbstractPropertyEventMethod): Set Parent here, ...
12096         (PropertyMethod): ... not here.
12097
12098 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
12099
12100         * attribute.cs : escaped attribute name should not be allowed to be
12101           resolved (e.g. @class as classAttribute). Fixed bug #75930.
12102
12103 2005-08-29  Raja R Harinath  <rharinath@novell.com>
12104
12105         Fix #75927.
12106         * convert.cs (ImplicitStandardConversionExists): Allow zero also
12107         when converting a long constant to unsigned long.
12108         * expression.cs (Invocation.OverloadResolve): Add sanity check to
12109         detect where IsApplicable and VerifyArgumentsCompat disagree.
12110
12111 2005-08-29  Raja R Harinath  <rharinath@novell.com>
12112         and Carlos Alberto Cortez  <carlos@unixmexico.org>
12113
12114         Fix #75848.
12115         * class.cs (TypeContainer.CanElideInitializer): New helper.
12116         (TypeContainer.EmitFieldInitializers): Use it to determine if we
12117         can safely emitting the initializer of a field.
12118
12119 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12120
12121         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
12122           allowed inside a switch (without loop). Fixed bug #75433.
12123
12124 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
12125
12126         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
12127         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
12128
12129 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12130
12131         * driver.cs : kinda reverting the default encoding changes (not exact 
12132           revert since I noticed that "codepage:reset" might not work fine).
12133
12134 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12135
12136         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
12137           Location. Now getter and setter store location correctly.
12138           (errors/cs0111-12.cs now reports the expected location.)
12139
12140 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12141
12142         * driver.cs : Use default encoding on the environment.
12143           Removed (now that) extra parameter for SeekableStreamReader.
12144         * support.cs : (SeekableStreamReader) third .ctor() argument for
12145           StreamReader is not required (always true). preamble size could
12146           be acquired in simpler and safe way.
12147
12148 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
12149
12150         * cs-parser.jay: report CS0642 at warning level 3
12151           and report CS0642 for an if else statement also
12152           fixes bug #74745. Patch by John Luke (and a bit
12153           modified by me).
12154           Removed extra CS0642 warning check for "while",
12155           "for" and "fixed".
12156         * statement.cs: In Block.Resolve(), CS0642 check
12157           is reimplemented to check a sequence of an empty
12158           statement and a block.
12159
12160           Both fix bug #66777.
12161
12162 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
12163
12164         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
12165         detection until I fix it.
12166         
12167         * cs-tokenizer.cs: Changed error message.
12168         
12169         * cs-parser.jay: Fixed 2 error locations.
12170         
12171         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
12172         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
12173         properties.
12174         
12175         * enum.cs (GetSignatureForError): Fixed.
12176         
12177         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
12178         method detection.
12179         
12180         * class.cs,
12181         * typemanager.cs (RegisterProperty): Removed.
12182         
12183         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
12184
12185 2005-08-24  Raja R Harinath  <rharinath@novell.com>
12186
12187         Fix #75874.
12188         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
12189         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
12190
12191 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12192
12193         * expression.cs : tiny fix is required for not warning positive ulong.
12194           See test-441.cs.
12195
12196 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12197
12198         * expression.cs : add CS0652 check for constant and integral
12199           expression. Fixed bug #53974.
12200
12201 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12202
12203         * expression.cs : in DoNumericPromotions(), check if there is implicit
12204           conversion overload for string (to check CS0034). Fixed bug #52492.
12205
12206 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12207
12208         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
12209
12210 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12211
12212         * ecore.cs : report location when it is *not* Null.
12213
12214 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12215
12216         * codegen.cs,
12217           ecore.cs,
12218           flowanalysis.cs,
12219           expression.cs:
12220           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
12221           correctly. Fixed bug #75721.
12222
12223 2005-08-23  Raja R Harinath  <rharinath@novell.com>
12224
12225         * support.cs (SeekableStreamReader.Position): Avoid an expensive
12226         loop that performs 'min (pos, char_count)'.
12227
12228         Fix #75862.
12229         * expression.cs (Unary.ResolveOperator): Don't discard implicit
12230         converted value in Operator.OnesComplement.
12231
12232 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
12233
12234         * anonymous.cs: If the anon method is pulled into a helper class,
12235         it needs to be `internal' not `private'. Fixes runtime behavior on
12236         msft. bug #75704
12237
12238 2005-08-20  Martin Baulig  <martin@ximian.com>
12239
12240         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
12241         scope if we don't already have it.
12242
12243         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
12244         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
12245         fixes #75867.
12246
12247 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
12248
12249         Fix #75803
12250         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
12251         is a partial class.
12252
12253 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
12254
12255         The big constants rewrite
12256         Fix #75746, #75685 and more
12257         As a side effect saved 1MB for MWF ;-)
12258         
12259         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
12260         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
12261         enum based for corlib compilation.
12262         
12263         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
12264         subtractions.
12265         
12266         * class.cs (FixedField.Define): Use ResolveAsConstant.
12267         
12268         * const.cs (IConstant): Interface constants and enums.
12269         (Const.ResolveValue): New method for constant resolvning.
12270         (ExternalConstant): Constants from imported assemblies.
12271         
12272         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
12273         conversion; like enums.
12274         (Constant.ToType): Converts this constant to different type.
12275         (Constant.Increment): Adds 1.
12276         
12277         * convert.cs (ImplicitConversionRequired): Simplified.
12278         
12279         * cs-parser.jay: Create EnumMember directly.
12280         
12281         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
12282         
12283         * doc.cs (GenerateEnumDocComment): Removed.
12284         
12285         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
12286         (ConvertIntLiteral): Removed.
12287         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
12288         
12289         * enum.cs (EnumMember): Implement IConstant.
12290         (Enum.IsValidEnumConstant): Removed.
12291         (Enum.GetNextDefaultValue): Removed.
12292         (Enum.FindMembers): Updated.
12293         (Enum.GenerateDocComment): Iterate enum members.
12294         
12295         * expression.cs (Cast.TryReduce): Handle enums correctly.
12296         (New.Constantify): Made public.
12297         (MemberAccess.DoResolve): Removed contant specific if(s).
12298         
12299         * literal.cs (NullLiteral): Implement new abstract methods.
12300         
12301         * statement.cs (GotoCase.Resolve): Use new constant methods.
12302         (SwitchLabel.ResolveAndReduce): Use new constant methods.
12303         
12304         * typemanager.cs (LookupEnum): Removed.
12305         (IsEnumType): Fixed to work with corlib.
12306         (RegisterConstant): Removed.
12307         (LookupConstant): Removed.
12308         (GetConstant): Changed to work with IConstant.
12309
12310 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
12311
12312         * location.cs : Fixed overflown (>255) column number.
12313
12314 2005-08-03  Raja R Harinath  <rharinath@novell.com>
12315
12316         First cut of the qualified-alias-member feature.
12317         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
12318         token.
12319         * cs-parser.jay (DOUBLE_COLON): New token.
12320         (namespace_or_type_name): Add rule for recognizing
12321         qualified-alias-members.
12322         (primary_expression): Likewise.
12323         (element_access): Allow QualifiedAliasMember as a possible
12324         type-bearing expression.
12325         (local_variable_type, local_variable_pointer_type): Likewise.
12326         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
12327         aliases in the current and enclosing namespace declarations.
12328         (NamespaceEntry.UsingAlias): Add CS0440 warning.
12329         * decl.cs (MemberName.is_double_colon): New.
12330         (MemberName.MemberName): Add new constructor for alias-member.
12331         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
12332         * expression.cs (QualifiedAliasMember): New expression type.
12333
12334 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12335
12336         * location.cs : it borked when no argument was specified.
12337
12338 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12339
12340         * location.cs : tiny ToString() format fix.
12341
12342 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12343
12344         * statement.cs : oops, it was missing.
12345
12346 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12347
12348         A set of fixes for precise line/column location.
12349
12350         * location.cs :
12351           "token" field now holds a file/line "delta", a line number offset 
12352           from the segment, and a column number. See also:
12353           http://lists.ximian.com/pipermail/mono-devel-list/2004-
12354           December/009508.html
12355           Removed static IsNull. Use instance IsNull property instead.
12356         * cs-tokenizer.cs :
12357           For some tokens it stores Location. For Identifier it stores
12358           LocatedToken which is a pair of string name and location.
12359           Column numbers are adjusted only at getChar().
12360         * report.cs :
12361           Use Location.ToString() for reporting (it now contains column).
12362         * cs-parser.jay :
12363           Largely modified to use LocatedToken instead of
12364           string (IDENTIFIER), and to acquire Location from some tokens.
12365         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
12366           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
12367           codegen.cs :
12368           Now MemberName holds Location. DeclSpace.ctor() receives Location
12369           as a parameter. Removed extra parameters to all derived classes.
12370           Replaced Location.IsNull() with instance property.
12371         * assign.cs, expression.cs :
12372           Added .ctor() overload that omits Location.
12373         * attribute.cs :
12374           Added "nameEscaped" flag that indicates the identifier was escaped
12375           in the source file. This fixes bug #57047.
12376
12377 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
12378
12379         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
12380         New method, looking for lo-case imported cls type.
12381
12382         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
12383         here.
12384
12385         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
12386
12387         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
12388
12389         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
12390         all_imported_types.
12391         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
12392
12393         Optimized to save 3.5 MB for SWF compilation.
12394
12395 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
12396
12397         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
12398         (PartialContainer.Create): Moved logic AddToContainer.
12399         (PartialContainer.MarkForDuplicationCheck): Shares name.
12400         
12401         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
12402         place.
12403         
12404         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
12405         initialization.
12406         (Namespace.GetSignatureForError): New method.
12407         
12408         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
12409         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
12410
12411 2005-08-01  Raja R Harinath  <rharinath@novell.com>
12412
12413         Fix #75669.
12414         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
12415         member lookup rather than qualifier_type, since qualifier_type can
12416         be null.
12417
12418 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
12419
12420         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
12421         enum member.
12422
12423 2005-07-31  Miguel de Icaza  <miguel@novell.com>
12424
12425         * statement.cs: Copy the local exception into the exception
12426         captured local.  Fixes 75674
12427
12428 2005-07-31  Raja R Harinath  <harinath@gmail.com>
12429
12430         Fix #75658.
12431         * expression.cs (Invocation.OverloadResolve): Don't report error
12432         CS1501 if error CS1502 has been reported.
12433         (New.DoResolve): Delegate CS1501 reporting to
12434         Invocation.OverloadResolve.
12435
12436         Fix #75656.
12437         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
12438         invariant-meaning-in-block property in an enclosing block if
12439         necessary.
12440
12441 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
12442
12443         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
12444         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
12445         (Switch.CheckSwitch): Just save 50kb for SWF.
12446
12447 2005-07-27  Martin Baulig  <martin@ximian.com>
12448
12449         * anonymous.cs (CaptureContext.AddField): Added
12450         `AnonymousContainer am' argument; compute its toplevel scope if
12451         it's not already computed.  Fixes #75649.
12452
12453 2005-07-26  Raja R Harinath  <rharinath@novell.com>
12454
12455         Fix #75628.
12456         * class.cs (Constructor.Emit): Reset block to null if the block
12457         resolve fails.
12458
12459 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
12460
12461         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
12462
12463 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
12464
12465         * class.cs (MethodData.Define): Check whether accessor implementing
12466         interface is public.
12467
12468         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
12469
12470 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
12471
12472         Fix #57245
12473         * namespace.cs (LookupType): Moved same type check to...
12474         
12475         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
12476         with the same name.
12477
12478 2005-07-21  Raja R Harinath  <rharinath@novell.com>
12479
12480         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
12481         already found a typebuilder.
12482         * class.cs (MethodCore.IsDuplicateImplementation): Compare
12483         MemberNames, not strings.
12484
12485         * const.cs (Error_ExpressionMustBeConst): 
12486         Rename from Error_EpressionMustBeConst.
12487         * const.cs, class.cs, statement.cd: Update.
12488
12489 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
12490
12491         Fix #65573
12492
12493         * const.cs (Const.LookupConstantValue): Report missing contant expression
12494         everytime.
12495         (Error_EpressionMustBeConstant): Only one error method.
12496
12497         * class.cs, statement.c: Updated.
12498
12499 2005-07-20  Raja R Harinath  <rharinath@novell.com>
12500
12501         * statement.cs (Block.Flags): Add back HasVarargs.
12502         (Block.flags): Make protected.
12503         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
12504
12505         * typemanager.cs (types, typecontainers, user_types): Remove.
12506         (UserTypes, TypeContainers): Likewise.
12507         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
12508         (CleanUp, Reset): Update.
12509         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
12510         (GetNestedType): Use Type.GetNestedType.
12511         (CoreLookupType): Take two arguments, the namespace and the
12512         basename of the type.  Update to use the Namespace.Lookup
12513         mechanism.
12514         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
12515         (RealMemberLookup): Use IsNestedChildOf instead of playing with
12516         string concatenation and substring matches.
12517         * class.cs, enum.cs, delegate.cs: Update to changes.
12518
12519 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
12520
12521         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
12522         Expression and made virtual.
12523
12524         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
12525         (ImplicitStandardConversionExists): Fixed `byte' typo ?
12526
12527         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
12528
12529         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
12530         error message.
12531
12532         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
12533         change.
12534
12535 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
12536
12537         Fix #57707
12538         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
12539         AssemblyCultureAttribute is not used on executable.
12540
12541         * rootcontext.cs,
12542         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
12543
12544 2005-07-16  Raja R Harinath  <rharinath@novell.com>
12545
12546         Fix #60638.
12547         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
12548         New.  Reports CS0252/CS0253.
12549         Mostly taken from preliminary patch by Duncak Mak.
12550         (Binary.DoResolveOperator): Store results of operator lookup.
12551         Use them to detect if we need to warn about unintended reference
12552         comparisons.
12553
12554 2005-07-15  Raja R Harinath  <rharinath@novell.com>
12555
12556         Fix #72969.
12557         * namespace.cs (Namespace.Lookup): Add back location parameter.
12558         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
12559         * delegate.cs, ecore.cs, expression.cs: Update to changes.
12560
12561         * codegen.cs (EmitContext.DeclSpace): Make readonly.
12562         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
12563         (Namespace.LookupType): ... this.
12564         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
12565         of namespaces.
12566         * typemanager.cs (LookupTypeReflection): Remove buggy code that
12567         purported to handle pointers.
12568         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
12569         CoreLookupType.
12570
12571 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
12572
12573         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
12574         type as namespace.
12575
12576 2005-07-15  Raja R Harinath  <rharinath@novell.com>
12577
12578         * namespace.cs (Namespace.Lookup): Drop location parameter.
12579         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
12580         (NamespaceEntry.Lookup): ... this.
12581         (NamespaceEntry.Error_AmbiguousTypeReference):
12582         Move here from DeclSpace.
12583         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
12584         names ...
12585         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
12586         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
12587         Move to NamespaceEntry.
12588         * delegate.cs, expression.cs: Update to changes.
12589
12590 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
12591
12592         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
12593         CheckAttributeType and refactored.
12594         (Attribute.ResolvePossibleAttributeType): Changed to reuse
12595         ResolveAsTypeTerminal error handling.
12596         (ResolveAsTypeTerminal): Introduced because of global attributes extra
12597         handling.
12598         (GetSignatureForError): Print errors in same way.
12599
12600         * class.cs,
12601         * codegen.cs: Reflect attribute GetSignatureForError change.
12602
12603         * ecore.cs,
12604         * expression.cs: Add silent parameter to ResolveAsTypeStep.
12605
12606         * namespace.cs (UsingEntry): Refactored to make fields private.
12607
12608         * assign.cs,
12609         statement.cs: Error_UnexpectedKind has extra parameter.
12610
12611 2005-07-14  Raja R Harinath  <rharinath@novell.com>
12612
12613         * ecore.cs (IAlias): Remove.
12614         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
12615         that implement the interface.
12616         * namespace.cs (Namespace): Likewise.
12617         (Namespace.declspaces): Renamed from 'defined_names'.
12618         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
12619         DeclSpace instead of an IAlias.
12620         * tree.cs (Tree.AddDecl): Update.
12621
12622 2005-07-12  Raja R Harinath  <rharinath@novell.com>
12623
12624         * statement.cs (Block.Flags); Remove HasVarargs.
12625         (Block.HasVarargs): Move to ToplevelBlock.
12626         (Block.ThisVariable, Block.AddThisVariable): Likewise.
12627         (Block.Variables): Make protected.  Initialize variable hashtable
12628         if necessary.
12629         (Block.AddVariable): Update.
12630         (Block.Resolve): Update to changes.
12631         (ToplevelBlock.HasVarargs): New boolean.
12632         (ToplevelBlock.ThisVariable): Move here from Block.
12633         (ToplevelBlock.AddThisVariable): Likewise.
12634         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
12635         * expression.cs (This.ResolveBase): Update to changes.
12636         (ArglistAccess.DoResolve): Likewise.
12637
12638 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
12639
12640         Fix #75321
12641         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
12642
12643         * class.cs (TypeContainer.VerifyMembers): Distinguish between
12644         not used and not used & assigned.
12645         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
12646
12647 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
12648
12649         Fix #75053
12650         * expression.cs (Is.DoResolve): null is never provided type.
12651
12652 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
12653
12654         Fix #52496
12655         * cs-parser.jay: Less strict event error rule to catch more errors.
12656
12657 2005-07-08  Martin Baulig  <martin@ximian.com>
12658
12659         Fix test-iter-10.cs - distinguish whether we `yield' in a property
12660         gettter (allowed) or setter (not allowed).
12661
12662         * class.cs (Accessor): Implement IIteratorContainer.
12663         (Accessor.Yields): New public field.
12664         (PropertyBase.PropertyMethod.Define): Handle iterators on a
12665         per-accessor basis.
12666
12667         * cs-parser.jay
12668         (get_accessor_declaration, set_accessor_declaration): Set the
12669         `yields' flag on the accessor, not the property.
12670         (property_declaration): Do the iterators check on a per-accessor
12671         basis and not for the whole property.
12672
12673 2005-07-08  Martin Baulig  <martin@ximian.com>
12674
12675         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
12676         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
12677
12678 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
12679
12680         Fix #74975
12681         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
12682         (ExtractSecurityPermissionSet): Cope with self referencing security
12683         attributes properly.
12684
12685         * driver.cs (SetOutputFile): Made public property OutputFile.
12686
12687 2005-07-07  Raja R Harinath  <rharinath@novell.com>
12688
12689         Fix #75486.
12690         * class.cs (TypeContainer.first_nonstatic_field): Rename from
12691         has_nonstatic_fields.  Make into a FieldBase pointer.
12692         (TypeContainer.AddField): Add CS0282 check.
12693         (TypeContainer.EmitType): Update.
12694
12695 2005-07-06  Miguel de Icaza  <miguel@novell.com>
12696
12697         * cs-tokenizer.cs (consume_identifier): Do not create strings to
12698         compare if they start with __.
12699
12700 2005-07-06  Raja R Harinath  <rharinath@novell.com>
12701
12702         * statement.cs (Switch.SwitchGoverningType): Only look at
12703         UserCasts that don't need implicit standard conversions to one of
12704         the allowed switch types (Fixes test-322.cs).
12705         (LocalInfo.Resolve): Re-enable sanity-test.
12706
12707 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
12708
12709         * cs-tokenizer.cs (consume_identifier): Detect double undescores
12710         
12711         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
12712         
12713         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
12714
12715 2005-07-06  Raja R Harinath  <rharinath@novell.com>
12716
12717         Fix #75472.
12718         * ecore.cs (SimpleName.GetSignatureForError): Add.
12719         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
12720         (MemberAccess.GetSignatureForError): Add.
12721
12722 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
12723  
12724         The big error and warning messages review.
12725         
12726         * anonymous.cs,
12727         * assign.cs,
12728         * attribute.cs,
12729         * class.cs,
12730         * codegen.cs,
12731         * convert.cs,
12732         * cs-parser.jay,
12733         * cs-tokenizer.cs,
12734         * decl.cs,
12735         * delegate.cs,
12736         * doc.cs,
12737         * driver.cs,
12738         * ecore.cs,
12739         * enum.cs,
12740         * expression.cs,
12741         * flowanalysis.cs,
12742         * iterators.cs,
12743         * literal.cs,
12744         * location.cs,
12745         * modifiers.cs,
12746         * namespace.cs,
12747         * parameter.cs,
12748         * pending.cs,
12749         * report.cs,
12750         * rootcontext.cs,
12751         * statement.cs,
12752         * support.cs,
12753         * tree.cs,
12754         * typemanager.cs: Updated.
12755         
12756         * class.cs: (MethodCore.SetYields): Moved here to share.
12757         (PropertyMethod.Define): Moved iterator setup here.
12758         
12759         * iterators.cs: Add orig_method to have full access to parent
12760         container.
12761
12762 2005-07-05  Raja R Harinath  <rharinath@novell.com>
12763
12764         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
12765         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
12766         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
12767         variable of struct type.
12768         * expression.cs (Unary.ResolveOperator): Update to change.
12769         (Indirection.VerifyFixed): Likewise.
12770         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
12771         (ParameterReference.VerifyFixed): Value parameters are fixed.
12772         (This.VerifyFixed): Treat 'this' as a value parameter.
12773         * statement.cs (LocalInfo.IsFixed): Remove.
12774
12775 2005-07-01  Martin Baulig  <martin@ximian.com>
12776
12777         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
12778         `ec.EmitThis ()' to get the correct scope.
12779
12780 2005-07-01  Martin Baulig  <martin@ximian.com>
12781
12782         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
12783         instance is a ParameterReference; fixes #75299.
12784
12785 2005-07-01  Martin Baulig  <martin@ximian.com>
12786
12787         Reverted Marek's latest patch (r46725):
12788         - it contains structural changes which are neither mentioned in
12789           the ChangeLog nor explained anywhere; for example the additional
12790           argument of EmitContext's and Iterator's .ctor's and the
12791           TypeContainer.DefineMembers() change.
12792         - structural changes like this should go in in seperate patches
12793           and not be hidden in a huge patch which just seems to affect
12794           warnings and errors.
12795           a big and hard to understand patch.
12796         - it breaks iterators and causes regressions, for instance in
12797           test-iter-03.cs.      
12798
12799 2005-06-30  Raja R Harinath  <rharinath@novell.com>
12800
12801         Fix #75412.
12802         * expression.cs (Indexers.map): Remove.
12803         (Indexers.Append): Filter out inaccessible setters and getters.
12804         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
12805
12806         Fix #75283.
12807         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
12808         Refactored from ...
12809         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
12810         (FieldExpr.Emit, PropertyExpr.Emit): Update.
12811         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
12812         * expression.cs (Invocation.EmitCall): Add CS0120 check.
12813
12814 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
12815
12816         Fix #75322
12817         * class.cs (FieldBase.GetInitializerExpression): One more field
12818         for backup.
12819
12820 2005-06-28  Miguel de Icaza  <miguel@novell.com>
12821
12822         * pending.cs: Do not define a proxy if the base method is virtual,
12823         it will be picked up by the runtime (bug 75270).
12824
12825 2005-06-08  Martin Baulig  <martin@ximian.com>
12826
12827         The big Iterators rewrite :-)
12828
12829         * iterators.cs: Rewrite this to use the anonymous methods framework.
12830
12831         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
12832         before the TypeContainers; see 2test-21.cs.
12833
12834         * class.cs
12835         (TypeContainer.DefineType): Don't create a new EmitContext if we
12836         already have one (this only happens if we're an Iterator).
12837         (TypeContainer.Define): Also call Define() on all our iterators.
12838         (Method.CreateEmitContext): Added support for iterators.
12839
12840         * anonymous.cs
12841         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
12842         (AnonymousContainer.CreateMethodHost): Moved here from
12843         AnonymousMethod and made abstract.
12844         (AnonymousContainer.CreateScopeType): New abstract method.
12845         (AnonymousContainer.IsIterator): New public property.
12846         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
12847         get the ScopeTypeBuilder rather than manually defining it here. 
12848         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
12849         iterators here.
12850
12851         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
12852         before RootContext.DefineTypes().
12853
12854         * codegen.cs (EmitContext.RemapToProxy): Removed.
12855         (EmitContext.CurrentAnonymousMethod): Changed type from
12856         AnonymousMethod -> AnonymousContainer.
12857         (EmitContext.ResolveTopBlock): Protect from being called twice.
12858         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
12859         (EmitContext.EmitThis): Removed the iterators hacks; use the
12860         anonymous methods framework for that.
12861
12862         * statement.cs
12863         (ToplevelBlock.Container): Make this a property, not a field.
12864         (ToplevelBlock.ReParent): New public method; move the
12865         ToplevelBlock into a new container.
12866         (Foreach.TemporaryVariable): Simplify.
12867
12868 2005-06-05  Martin Baulig  <martin@ximian.com>
12869
12870         * statement.cs (LocalInfo.CompilerGenerated): New flag.
12871         (Block.AddTemporaryVariable): New public method; creates a new
12872         `LocalInfo' for a temporary variable.
12873         (Block.EmitMeta): Create the LocalBuilders for all the temporary
12874         variables here.
12875         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
12876         non-iterator variables.
12877
12878 2005-06-05  Martin Baulig  <martin@ximian.com>
12879
12880         * statement.cs (Foreach.TemporaryVariable): Create the
12881         LocalBuilder in the Emit phase and not in Resolve since in some
12882         situations, we don't have an ILGenerator during Resolve; see
12883         2test-19.cs for an example.
12884
12885 2005-06-04  Martin Baulig  <martin@ximian.com>
12886
12887         **** Merged r45395 from GCS ****
12888
12889         The big Foreach rewrite - Part II.
12890
12891         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
12892         with `PropertyInfo ienumerator_getcurrent'.
12893
12894         * codegen.cs (VariableStorage): Removed.
12895
12896         * statement.cs
12897         (Foreach): Derive from Statement, not ExceptionStatement.
12898         (Foreach.CollectionForeach): New nested class.  Moved all the code
12899         dealing with collection foreach here.
12900         (Foreach.ForeachHelperMethods): Removed.
12901         (Foreach.TemporaryVariable): Implement IMemoryLocation.
12902
12903 2005-05-23  Martin Baulig  <martin@ximian.com>
12904
12905         * statement.cs (Try.DoResolve): Don't create a `finally' if we
12906         don't need to.  Fix #75014.
12907
12908 2005-05-20  Martin Baulig  <martin@ximian.com>
12909
12910         Merged r44808 from GMCS.
12911
12912         * class.cs (TypeContainer.CircularDepException): Removed.
12913         (TypeContainer.DefineType): Removed the `InTransit' stuff.
12914         (TypeContainer.CheckRecursiveDefinition): Check for circular class
12915         (CS0146) and interface (CS0529) dependencies here.
12916
12917 2005-06-21  Raja R Harinath  <rharinath@novell.com>
12918
12919         * expression.cs (Invocation.EmitCall): Fix initialization
12920         'this_call' to reflect current behaviour.  Fix indentation.
12921
12922         * convert.cs (FindMostEncompassedType): Add two trivial special
12923         cases (number_of_types == 0 || number_of_types == 1).
12924         (FindMostEncompasingType): Likewise.
12925
12926 2005-06-17  Raja R Harinath  <rharinath@novell.com>
12927
12928         Some cleanups preparing for the fix of #75283.
12929         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
12930         error testing.
12931         (EventExpr.InstanceResolve): Likewise.
12932         (EventExpr.DoResolve): Remove redundant checks.
12933
12934 2005-06-10  Duncan Mak  <duncan@novell.com>
12935
12936         * cs-tokenizer.cs (process_directives): New flag for controlling
12937         the processing of preprocessor directives.
12938         (x_token): After seeing a '#', return Token.NONE instead of going
12939         to handle_preprocessing_directive() when not processing
12940         directives. This avoids unnecessary processing during the token peek in
12941         is_punct().
12942
12943         This fixes #74939.
12944
12945         * cs-tokenizer.cs (handle_preprocessing_directive, xtoken): Use
12946         the existing error reporting methods instead of Report.Error.
12947
12948         * convert.cs (priv_fmt_expr): Remove. It's not needed anymore
12949         after Raja's rewrite.
12950
12951 2005-06-08  Miguel de Icaza  <miguel@novell.com>
12952
12953         * class.cs: Small fix.
12954
12955 2005-06-08  Raja R Harinath  <rharinath@novell.com>
12956
12957         Fix #75160.
12958         * class.cs (GetPartialBases): Fix return value check of
12959         part.GetClassBases.
12960
12961 2005-06-07  Raja R Harinath  <rharinath@novell.com>
12962
12963         Ensure that partial classes are registered in their enclosing
12964         namespace.  Initial part of fix of #75160.
12965         * tree.cs (Tree.RecordDecl): Add new namespace argument.
12966         Register declspace with namespace here, not in
12967         DeclSpace.RecordDecl.
12968         * cs-parser.jay: Pass namespace to RecordDecl.
12969         * class.cs (PartialContainer.Create): Likewise.
12970         (ClassPart.DefineType): New sanity-check.  Throws an exception if
12971         called.
12972         * decl.cs (Declspace.RecordDecl): Remove.
12973         * namespace.cs (NamespaceEntry.DefineName): Remove.
12974
12975 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
12976
12977         * rootcontext.cs: Reset TargetExt as well.
12978
12979 2005-06-03  Raja R Harinath  <rharinath@novell.com>
12980
12981         * ecore.cs (Expression.Resolve): Emit CS0654 error when
12982         -langversion:ISO-1.
12983
12984 2005-06-02  Raja R Harinath  <rharinath@novell.com>
12985
12986         Fix #75080, cs0119.cs.
12987         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
12988         of ...
12989         (Expression.Resolve): ... this.  Use it.  Remove bogus code
12990         allowing ExprClass.Type and ExprClass.Namespace for
12991         ResolveFlags.VariableOrValue.
12992         (Expression.Resolve) [1-argument variant]: Change default resolve
12993         flags based on language version.
12994         (Expression.Error_UnexpectedKind): Use a simple string array
12995         rather than an ArrayList.
12996         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
12997         not ExprClass.Type.
12998         (TypeOfVoid.DoResolve): Likewise.
12999         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
13000         flags argument -- it always has the same value.
13001
13002 2005-05-31  Raja R Harinath  <rharinath@novell.com>
13003
13004         Fix #75081.
13005         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
13006         Use it in the error message.
13007         * assign.cs, expression.cs, statement.cs: Update.
13008
13009 2005-05-30  Raja R Harinath  <rharinath@novell.com>
13010
13011         Fix #75088.
13012         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
13013         the "almostMatchedMember" case too.
13014         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
13015         that failed the accessibility checks to 'almost_match'.
13016
13017 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
13018
13019         * attribute.cs: Use internal MethodBuilder methods to set
13020         ExactSpelling and SetLastError on PInvoke methods, instead
13021         of passing them via charset.  Fixes #75060.
13022
13023 2005-05-27  Raja R Harinath  <rharinath@novell.com>
13024
13025         * parameter.cs (Parameter): Remove TODO comment.
13026         (Parameter.DefineParameter): Remove Location parameter.
13027         (Parameters.LabelParameters): Likewise.
13028         * class.cs (Constructor.Emit): Update to change.
13029         (MethodData.Emit): Likewise.
13030         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
13031         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
13032
13033 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
13034
13035         * parameter.cs,
13036           Removed Parameters.Location and added Parameter.Location instead.
13037           Removed Location parameter from Emit() and GetSignature().
13038         * anonymous.cs,
13039           class.cs,
13040           cs-parser.jay,
13041           delegate.cs,
13042           iterators.cs,
13043           statement.cs :
13044           Modified all related calls.
13045
13046 2005-05-26  Raja R Harinath  <rharinath@novell.com>
13047
13048         Improve user-defined conversion handling.
13049         * convert.cs (GetConversionOperators): Rewrite.  Return only the
13050         applicable operators.
13051         (AddConversionOperators): New.  Helper for GetConversionOperators.
13052         (FindMostEncompassedType, FindMostEncompassingType): Verify that
13053         there is only one most encompassed/encompassing type.
13054         (FindMostSpecificSource, FindMostSpecificTarget): Remove
13055         "applicable operator" handling.
13056         (UserConversion): Move cache here from GetConversionOperators.
13057         Directly cache the chosen operator, rather than the whole
13058         MethodGroup.
13059         (ExplicitNumericConversion): Fix buggy implementation of Decimal
13060         case.  Allow conversion of decimal to sbyte and byte too.
13061         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
13062         New static methods.  Used to avoid allocating EmptyExpressions in
13063         convert.cs.
13064
13065 2005-05-24  Duncan Mak  <duncan@novell.com>
13066
13067         * ecore.cs (CastFromDecimal): New class for casting a decimal to
13068         another class, used in Convert.ExplicitNumericConversion.
13069         (CastToDecimal): New class, similar to above, but casts to
13070         System.Decimal, used in Convert.ImplicitNumericConversion and also
13071         in explicit convesion from double/float to decimal.
13072
13073         * convert.cs (ImplicitNumericConversion): Handle implicit
13074         conversions to System.Decimal.
13075         (ExplicitNumericConversion): handle explicit conversions to
13076         System.Decimal.
13077
13078         This fixes #68711.
13079         
13080 2005-05-20  Miguel de Icaza  <miguel@novell.com>
13081
13082         * typemanager.cs (EnumToUnderlying): Do not throw if we do not
13083         know the type at this stage, just break through.   Fixes #75008 
13084
13085 2005-05-19  Martin Baulig  <martin@ximian.com>
13086
13087         * delegate.cs
13088         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
13089         to disable error reporting.
13090
13091         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
13092         here since we don't want to report an error; see the new test-336.cs.
13093
13094 2005-05-19  Raja R Harinath  <rharinath@novell.com>
13095
13096         * statement.cs (ToplevelBlock.GetParameterReference)
13097         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
13098         Move here from class Block.
13099         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
13100         * expression.cs (ParameterReference.DoResolveBase): Likewise.
13101
13102 2005-05-18  Martin Baulig  <martin@ximian.com>
13103
13104         Fix #74978.
13105
13106         * flowanalysis.cs
13107         (FlowBranching.Reachability): Add non-static public And() and Or()
13108         methods.
13109         (FlowBranchingSwitch): New class; do the `break_origins' thing
13110         like in FlowBranchingLoop.
13111         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
13112         reachability, not just locals and parameters.
13113         (FlowBranching.MergeChild): Remove some of the hacks for loop and
13114         switch; MergeBreakOrigins() now takes care of that.
13115
13116 2005-05-18  Martin Baulig  <martin@ximian.com>
13117
13118         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
13119         a loop and may leave it, reset the barrier; fixes #74974.
13120
13121 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
13122         
13123         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
13124         is back.
13125         
13126         * cs-parser.jay: Catch more lexical errors.
13127         
13128         * report.cs: Add one more Error method.
13129         
13130         * rootcontext.cs,
13131         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
13132
13133 2005-05-17  Martin Baulig  <martin@ximian.com>
13134
13135         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
13136         #70970. 
13137
13138 2005-05-16  Raja R Harinath  <rharinath@novell.com>
13139
13140         Fix test-382.cs.  Emit values of decimal constants.
13141         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
13142         Carved out of ...
13143         (TypeContainer.AddField): ... this.
13144         (TypeContainer.EmitFieldInitializers): Allow the list of fields
13145         with initializers to include 'Const's.
13146         (ClassPart.RegisterFieldForInitialization): Forward to
13147         PartialContainer.
13148         * const.cs (Const.Const): Pass initializer to base class.
13149         (Const.Define): In case of decimal constants, register them for
13150         initialization in a static constructor.
13151
13152 2005-05-14  Martin Baulig  <martin@ximian.com>
13153
13154         * statement.cs (Block.Resolve): Correctly handle unreachable code;
13155         do not call ResolveUnreachable() on unreachable statements in
13156         here, see the comment in the source code.
13157
13158 2005-05-13  Raja R Harinath  <rharinath@novell.com>
13159
13160         Fix #74934.
13161         * expression.cs (BinaryResolveOperator): If one of the operands of
13162         an equality comparison is 'null' and the other is a pointer type,
13163         convert the null to a NullPointer.
13164         * convert.cs (ImplicitReferenceConversion): If the expression is a
13165         NullLiteral and the target type is a pointer type, return a
13166         NullPointer instead.
13167         (ImplicitConversionStandard): Likewise.
13168
13169 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
13170         
13171         * cs-parser.jay: Set readonly context based on special constructs.
13172         
13173         * expression.cs (LocalVariableReference.DoResolveBase): Improved
13174         readonly variable error handling.
13175         
13176         * rootcontext.cs (EmitCode): Don't verify members when error
13177         occurred.
13178         
13179         * statement.cs (LocalInfo): Add reaodnly context information.
13180         (SetReadOnlyContext, GetReadOnlyContext): New methods.
13181
13182 2005-05-13  Raja R Harinath  <rharinath@novell.com>
13183
13184         * statement.cs (Block.Resolve): Revert change below.  Modify fix
13185         for #74041 to initialize 'resolved' to false only for explicit
13186         blocks.  Fixes #74873.
13187
13188 2005-05-12  Raja R Harinath  <harinath@gmail.com>
13189
13190         Fix #74920.
13191         * typemanager.cs (unmanaged_enclosing_types): New.
13192         (IsUnmanagedType): Avoid infloops by using
13193         'unmanaged_enclosing_types' to talk with recursive invocations.
13194
13195 2005-05-13  Martin Baulig  <martin@ximian.com>
13196
13197         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
13198         instance variable, not a local.  Fix #74873.
13199         (Block.ResolveUnreachable): Set it to true here.
13200
13201 2005-05-11  Duncan Mak  <duncan@novell.com>
13202
13203         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
13204         continuing to process for 'arg'.
13205         (handle_preprocessing_directive): Check the argument of the #endif
13206         directive and report error CS1025 if there are any trailing
13207         characters.
13208
13209         According to the C# spec, having even whitespace after the #endif
13210         directive is illegal; however, because we call arg.TrimEnd ()
13211         beforehand, we have the same behavior as csc, allowing whitespace
13212         after the directive.
13213
13214         Fixes #74892.
13215
13216 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
13217
13218         Fix #74863.
13219         
13220         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
13221         (Constructor.GetObsoleteAttribute): Implemented correctly.
13222
13223 2005-05-10  Martin Baulig  <martin@ximian.com>
13224
13225         * support.cs (ReflectionParameters.ParameterModifier): Use
13226         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
13227         and `ParameterAttributes.In'.  Fixes #74884.
13228
13229 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
13230
13231         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
13232         
13233         * expression.cs (Argument.GetParameterModifier): Turned to property.
13234         (Invocation.Error_InvalidArguments): Add more descriptive errors.
13235         
13236         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
13237         its C# equivalent.
13238         
13239 2005-05-09  Raja R Harinath  <rharinath@novell.com>
13240
13241         Fix #74852.
13242         * decl.cs (MemberCache.AddMethods): Register override methods,
13243         rather than non-override methods.
13244         * typemanager.cs (RegisterOverride): New.
13245         (IsOverride): Update.
13246
13247 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
13248
13249         Fix #73105.
13250         
13251         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
13252         recursive declaration.
13253         
13254         * statement.cs (Block.ResolveMeta): Report any error in resolving.
13255         
13256 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
13257
13258         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
13259         
13260         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
13261
13262 2005-05-05  Raja R Harinath  <rharinath@novell.com>
13263
13264         Fix #74797.
13265         * decl.cs (DeclSpace.FamilyAccessible): 
13266         Use TypeManager.IsNestedFamilyAccessible.
13267
13268         Fix reopened #64812.
13269         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
13270         internal'.
13271
13272 2005-05-04  Raja R Harinath  <rharinath@novell.com>
13273             Abin Thomas  <projectmonokochi@rediffmail.com>
13274             Anoob V E  <projectmonokochi@rediffmail.com>
13275             Harilal P R  <projectmonokochi@rediffmail.com>
13276
13277         Fix #64812.
13278         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
13279         allow access to all static members.
13280
13281 2005-05-04  Martin Baulig  <martin@ximian.com>
13282
13283         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
13284
13285 2005-05-04  Martin Baulig  <martin@ximian.com>
13286
13287         Fix #74655.
13288
13289         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
13290         section at the end; make things work if `default' is not the last
13291         section.        
13292
13293 2005-05-04  Martin Baulig  <martin@ximian.com>
13294
13295         Fix #70400.
13296
13297         * statement.cs (Switch): Replaced the `got_default' field with a
13298         `default_section' one.
13299         (Switch.CheckSwitch): Set `default_section' here.
13300         (Switch.Resolve): If we're a constant switch and the constant is
13301         not found, use the default section.
13302
13303 2005-05-03  Martin Baulig  <martin@ximian.com>
13304
13305         * expression.cs (ArrayAccess.EmitGetLength): New public method.
13306
13307         * statement.cs (Foreach.ArrayForeach): New nested class.
13308         (Foreach.TemporaryVariable): New nested class.
13309         (Foreach.EmitArrayForeach): Removed; this is now in the new
13310         ArrayForeach class.
13311
13312 2005-05-03  Raja R Harinath  <rharinath@novell.com>
13313
13314         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
13315         more conservative.
13316         (VerifyPendingMethods): Revert change below.
13317
13318         * typemanager.cs (IsOverride, RegisterNonOverride): New.
13319         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
13320         that used to trigger warning -28.  Remove warning -28.
13321         * expression.cs (Invocation.OverloadResolve): Use
13322         TypeManager.IsOverride to distinguish override methods.
13323
13324         Fix #74773.
13325         * pending.cs (VerifyPendingMethods): If a base type implements the
13326         requested interface, don't bother checking individual methods of
13327         the base type.  As a side-effect, this prevents the creation of
13328         unnecessary proxies.
13329
13330 2005-05-02  Martin Baulig  <martin@ximian.com>
13331
13332         Fix #70182.
13333
13334         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
13335         Also `And' the locals if the old vector is null.
13336         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
13337         null; in this case we basically reset all the variables.        
13338
13339 2005-05-02  Martin Baulig  <martin@ximian.com>
13340
13341         Fix #74529.
13342
13343         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
13344         Added `FlowBranching branching' argument; always `and' the
13345         variables instead of `or'ing them unless we're an infinite loop.
13346
13347         * statement.cs (While.Resolve): Create a new sibling unless we're
13348         infinite.       
13349
13350 2005-05-02  Martin Baulig  <martin@ximian.com>
13351
13352         Fix #70140.
13353
13354         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
13355         arguments; use it instead of creating a new TopLevelBlock.
13356         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
13357         our ConstructorInitializer.
13358
13359         * statement.cs
13360         (TopLevelBlock.TopLevelBranching): New public property.
13361         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
13362         and create our `TopLevelBranching'.
13363
13364         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
13365         anonymous method host, use `block.TopLevelBranching' rather than
13366         creating a new branching.
13367
13368 2005-04-20  Miguel de Icaza  <miguel@novell.com>
13369
13370         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
13371         a ScopeInfo, if any of the current children is a child of the new
13372         entry, move those children there.
13373
13374 2005-04-30  Martin Baulig  <martin@ximian.com>
13375
13376         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
13377         at the beginning of a SwitchSection.  Fix #73335.
13378
13379 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
13380
13381         Fix #74378
13382         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
13383         
13384         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
13385         (FieldExpr.DoResolve): Obsolete members are ignored for field
13386         initializers.
13387         
13388 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
13389
13390         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
13391         of arrays detection.
13392
13393         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
13394         verification.
13395         (Field.VerifyClsCompliance): Volatile fields are not compliant.
13396
13397         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
13398         arrays report.
13399
13400 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
13401
13402         * cs-parser.jay: Use the prefered version of -unsafe in error
13403         message.
13404
13405 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
13406
13407         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
13408         circumstances.
13409
13410 2005-04-20  John Luke  <john.luke@gmail.com>
13411
13412         * driver.cs: fix typo in error message, --outout to --output
13413
13414 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
13415
13416         * codegen.cs (InRefOutArgumentResolving): New field.
13417         
13418         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
13419         fields outside contructor.
13420         
13421         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
13422         
13423 2005-04-19  Miguel de Icaza  <miguel@novell.com>
13424
13425         * anonymous.cs (CaptureContext.EmitParameterInstance): The
13426         parameter code was not completed ever, so it was not as up-to-date
13427         as local variables.  Must finish it.
13428
13429         The bug fix was to compare the Toplevel of the block, not the
13430         current block.  Thanks for Ben for pointing this out. 
13431
13432 2005-04-19  Raja R Harinath  <rharinath@novell.com>
13433
13434         * decl.cs (AddMethods): Use the declaring type of the problem
13435         method to determine if we want to squash a warning.
13436
13437 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
13438
13439         * attribute.cs: Removed debug output.
13440
13441         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
13442         
13443         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
13444         Report.Stderr.
13445         
13446 2005-04-18  Raja R Harinath  <rharinath@novell.com>
13447
13448         Fix #74481.
13449         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
13450         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
13451         all null comparisons against reference types.
13452
13453 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
13454
13455         Fix# 74565
13456         * class.cs (TypeContainer.CircularDepException) New nested
13457         exception class.
13458         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
13459         (TypeContainer.DefineType): Removed error, reset InTransit before
13460         exit.
13461         (Class.DefineType): Throw exception when is in Transit.
13462         Catch exception and report error.
13463         (Struct.DefineType): Throw exception when is in Transit.
13464         Catch exception and report error.
13465         (Interface.DefineType): Throw exception when is in Transit.
13466         Catch exception and report error.
13467
13468         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
13469         handle nested exception handlers.
13470
13471         * flowanalysis.cs (InTryWithCatch): New method, search for try with
13472         a catch.
13473
13474         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
13475         InFinally and InCatch storage.
13476
13477         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
13478         (Catch.Resolve): Set and Restore ec.InCatch.
13479         (Try.Resolve): Set and Restore ec.InFinally.
13480         (Try.HasCatch): True when try has catch.
13481
13482 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
13483
13484         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
13485           for the same event member, so exclude such cases from warning 419.
13486           Fixed bug #74633.
13487
13488 2005-04-16  Miguel de Icaza  <miguel@novell.com>
13489
13490         * expression.cs (Binary.ResolveOperator): Apply patch from John
13491         Luke to fix bug 59864: operators &, | and ^ on enumerations
13492         require that the same enum type on both sides.
13493
13494         * driver.cs: Add warnings to old flag usage, this is to assist
13495         people who produce Makefiles and hope that the Makefiles will be
13496         used on Windows.
13497
13498         * class.cs (TypeContainer.EmitType): Moved the definition of the
13499         special $PRIVATE$ field from the resolve phase to the Emit phase.
13500         During resolve we do not know if we are a struct with
13501         HasExplicitLayout, we know this only after the attributes for the
13502         type are emitted.
13503
13504         Set the FieldOffset to zero on the dummy field that we create for
13505         the class.   Fixes 74590.
13506
13507 2005-04-16  Raja R Harinath  <rharinath@novell.com>
13508
13509         Fix #73834.
13510         * ecore.cs (PropertyExpr.resolved): New.
13511         (DoResolve): Use it to handle a case of double resolution here.
13512         Handle a case of identical-name-and-type-name.
13513         * expression.cs (ArrayCreation.CheckIndices): Avoid double
13514         resolution by storing the results of expression resolution back
13515         into the "probes" array.
13516
13517 2005-04-15  Raja R Harinath  <rharinath@novell.com>
13518
13519         Fix cs0208-7.cs and cs0208-8.cs.
13520         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
13521         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
13522         error reporting to point out the reason a struct is not unmanaged.
13523
13524 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
13525
13526         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
13527           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
13528
13529 2005-04-13  Raja R Harinath  <rharinath@novell.com>
13530
13531         Fix #74528.
13532         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
13533         IdenticalNameAndTypeName here.
13534         (EventExpr.InstanceResolve): Likewise.
13535
13536 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
13537
13538         C# 2.0 DefaultCharSetAttribute implementation
13539         
13540         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
13541         which allows us to set GlobalNamespace for every resolve.
13542         (Attribute.ResolveArguments): Cut from Resolve.
13543         (Attribute.GetCharSetValue): Returns CharSet named argument.
13544         (Attribute.DefinePInvokeMethod): Gets default charset from
13545         module settings.
13546         (GlobalAttribute.ResolveAsTypeStep): Override.
13547         (GlobalAttribute.ResolveArguments): Override.
13548         
13549         * class.cs (TypeAttr): Is protected.
13550         
13551         * codegen.cs (ModuleClass.DefaultCharSet): New member.
13552         (ModuleClass.DefaultCharSetType): New memeber.
13553         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
13554         
13555         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
13556         charset from module.
13557         
13558         * delegate.cs (TypeAttr): Override.
13559         (Delegate.DefineType): Use this TypeAttr.
13560         
13561         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
13562         at very early stage (before types are defined) to resolve model
13563         module attributes. It will probably not work with corlib but it
13564         should be ok.
13565         
13566         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
13567         charset from module.
13568         
13569         * typemanager.cs (default_charset_type): New type.
13570
13571 2005-04-13  Raja R Harinath  <rharinath@novell.com>
13572
13573         * decl.cs (MemberCache.AddMethods): Don't warn if
13574         System.Object.Finalize has buggy MethodAttributes.
13575
13576         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
13577         removed below.
13578
13579 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
13580
13581         * doc.cs : detect ambiguous reference to overloaded members.
13582           Fixed bug #71603. MS 1.1 csc does not detect it.
13583
13584 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
13585
13586         * doc.cs : delegates must not be referenced with parameters.
13587           Fixed bug #71605.
13588
13589 2005-04-12  Miguel de Icaza  <miguel@novell.com>
13590
13591         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
13592
13593 2005-04-10  Miguel de Icaza  <miguel@novell.com>
13594
13595         * driver.cs (MainDriver): Stop processing if the CLS stage found
13596         errors. 
13597
13598         (CompilerCallableEntryPoint.InvokeCompiler): Always
13599         reset after execution;   Take a TextWriter argument for the
13600         output.
13601
13602         * report.cs: Use the error stream instead of hardcoding stderr. 
13603
13604 2005-04-09  Miguel de Icaza  <miguel@novell.com>
13605
13606         * class.cs: Reduce code paths to test, too small of an
13607         optimization to make it worth the extra testing.  Always perform
13608         it. 
13609
13610 2005-04-08  Raja R Harinath  <rharinath@novell.com>
13611
13612         Fix #74510.
13613         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
13614         operators that had errors reported on them.
13615
13616 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
13617
13618         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
13619         argument types.
13620         (Attribute.Resolve): Add named argument type checking.
13621         
13622         * class.cs (FixedField.Define): Use IsPrimitiveType
13623         
13624         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
13625         
13626         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
13627         unsafe parameter types.
13628         
13629         * statement.cs (Using.ResolveExpression): Add better error description.
13630         
13631         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
13632         
13633 2005-04-08  Raja R Harinath  <rharinath@novell.com>
13634
13635         Fix #74484.
13636         * attribute.cs (Attribute.GetAttributeUsage): Resolve
13637         AttributeUsageAttribute in the emitcontext of the attribute class,
13638         not in the emitcontext of the attributable entity it was attached to.
13639         * cs-parser.jay: Use 'current_class', not 'current_container',
13640         when creating a GlobalAttribute.
13641
13642 2005-04-08  Alp Toker  <alp@atoker.com>
13643
13644         * pending.cs: The fix to #58413 failed to compile methods implementing
13645         interfaces with/without params modifiers and vice versa, even though
13646         params modifiers aren't part of the signature. Make the modifier check
13647         less strict as in csc.
13648
13649 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
13650             Anoob V E  <projectmonokochi@rediffmail.com>
13651             Harilal P R  <projectmonokochi@rediffmail.com>
13652
13653         Fix #58413.
13654         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
13655         modifiers of pending methods.
13656         (PendingImplementation.PendingImplementation): Initialize it.
13657         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
13658         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
13659         with ParameterData.  Add check for modifiers.
13660         * class.cs (MethodData.Define): Update to changes.
13661
13662 2005-04-07  Raja R Harinath  <rharinath@novell.com>
13663
13664         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
13665
13666 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
13667
13668         * class.cs (PropertyMethod.Define): Check private accessor in abstract
13669         property.
13670         
13671         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
13672         
13673         * rootcontext.cs,
13674         * typemanager.cs: Registered RequiredAttributeAttribute.
13675         
13676 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
13677
13678         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
13679         Warning CS0169 is back at level 3.
13680         (IMethodData.SetMemberIsUsed): New method.
13681         
13682         * decl.cs (IsUsed): New value; moved from FieldBase.Status
13683         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
13684         
13685         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
13686
13687         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
13688         contants.
13689         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
13690         is used.
13691         
13692         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
13693         is used.
13694         
13695         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
13696         to avoid the problems with nested types.
13697
13698 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
13699             Anoob V.E  <projectmonokochi@rediffmail.com>
13700             Harilal P.R  <projectmonokochi@rediffmail.com>
13701             Raja R Harinath  <rharinath@novell.com>
13702
13703         Fix #73820.
13704         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
13705         attribute.
13706         * typemanager (GetConstructor): Make public.
13707
13708 2005-04-05  John Luke  <john.luke@gmail.com>
13709             Raja R Harinath  <rharinath@novell.com>
13710
13711         Fix #62232.
13712         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
13713         struct too.  Return false quicker in a few cases.
13714         (VerifyUnManaged): Use it.
13715
13716 2005-04-05  Raja R Harinath  <rharinath@novell.com>
13717
13718         Fix #74041.
13719         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
13720         not 'unreachable_seen'.
13721
13722 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
13723
13724         * attribute.cs (Attribute.GetValue): Removed unused.
13725         
13726         * codegen.cs (CodeGen.TrimExt): Removed unused.
13727         
13728         * cs-parser.jay (output): Removed unused.
13729         
13730         * cs-tokenizer.cs (hex_digits): Removed unused.
13731         
13732         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
13733         
13734         * expression.cs (Indirection.LoadExprValue): Removed unused.
13735         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
13736         
13737         * iterators.cs (Iterator.param_types): Removed unused.
13738         
13739         * statement.cs (Goto.block): Removed unused.
13740         (ToplevelBlock.did): Removed unused.
13741         (Switch.ResolveConstantSwitch): Removed unused.
13742
13743 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
13744
13745         * rootcontext.cs: Allow mcs to bootstrap with the compilation
13746         resetting thingy.
13747
13748 2005-04-01  Raja R Harinath  <rharinath@novell.com>
13749
13750         Fix #74232 and cs0208-3.cs.
13751         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
13752         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
13753         unmanaged type.  Don't use FieldBuilders when 't' is a
13754         TypeBuilder.  Use ModFlags and MemberType fields.
13755         * class.cs (MemberBase.member_type): Rename from MemberType.
13756         (MemberBase.MemberType): New property.  Determines member_type on
13757         demand.
13758         (MemberBase.DoDefine): Don't initialize MemberType here.
13759         (FieldMember.Define): Likewise.
13760
13761 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
13762
13763         Fix #74241
13764         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
13765         Attributes are emitted there.
13766         
13767 2005-04-01  Raja R Harinath  <rharinath@novell.com>
13768
13769         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
13770         keyword in 'partial enum' too.
13771         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
13772         is not allowed).
13773         Report from Kamil Skalski <nazgul@omega.pl>.
13774
13775         Fix #74309.
13776         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
13777         have partial containers too.
13778
13779         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
13780         in block' checks to Block.CheckInvariantMeaningInBlock.
13781         * statement.cs (Block.GetKnownVariableInfo): Make private.
13782         (Block.IsVariableUsedInChildBlock): Remove.
13783         (Block.IsVariableUsedInBlock): Likewise.
13784         (Block.CheckInvariantMeaningInBlock): New.  Show location of
13785         conflicting declaration.
13786         (Block.AddVariable): Make error messages less long-winded and more
13787         specific.  Show location of conflicting declaration.
13788         * parameter.cs (Parameters.Location): New readonly property.
13789
13790 2005-03-31  Raja R Harinath  <rharinath@novell.com>
13791
13792         Clean up semantics of invoking ResolveMemberAccess.
13793         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
13794         can have an instance, ensure that we pass in a non-TypeExpression
13795         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
13796         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
13797         argument.  Update to changes and simplify.
13798         (FieldExpr.Emitinstance): Remove CS0120 check.
13799         (PropertyExpr.EmitInstance): Likewise.
13800         * expression.cs (Argument.Resolve): Likewise.
13801         (Invocation.DoResolve): Update to changes in semantics of
13802         InstanceExpression.
13803
13804 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
13805
13806         Fix #74241
13807         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
13808         customization.
13809         
13810         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
13811
13812 2005-03-31  Raja R Harinath  <rharinath@novell.com>
13813
13814         Fix difference in behaviour with commandline invocation.
13815         * driver.cs (Driver.Reset): New.
13816         (CompilerCallableEntryPoint): Call it.
13817
13818         * statement.cs (If.Resolve): Avoid spurious "uninitialized
13819         variable" warnings if the boolean expression failed to resolve.
13820
13821 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
13822
13823         * attribute.cs: Fix the union of several permissions when some of them
13824         are unrestricted (so the result isn't an unrestricted permission set).
13825         Fix #74036.
13826
13827 2005-03-30  Raja R Harinath  <rharinath@novell.com>
13828
13829         * ecore.cs (MemberExpr): New class.  Convert from interface
13830         IMemberExpr.
13831         (MemberExpr.ResolveMemberAccess): Refactor and move here from
13832         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
13833         error checks.
13834         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
13835         (MethodGroupExpr.IsExplicitImpl): Remove.
13836         (Expression.GetFieldFromEvent): Remove.
13837         (SimpleName.MemberStaticCheck): Remove.
13838         (SimpleName.DoSimpleNameResolve): Update to changes.
13839         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
13840         (MemberAccess.IdenticalNameAndTypeName): Remove.
13841         (MemberAccess.error176): Move to MemberExpr.
13842         (MemberAccess.DoResolve): Update to changes.
13843         (BaseAccess.DoResolve): Likewise.
13844
13845 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
13846
13847         C# 2.0 Conditional attribute class implementation
13848         
13849         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
13850         Analyzes class whether it has attribute which has ConditionalAttribute
13851         and its condition is not defined.
13852         
13853         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
13854         (Class.IsExcluded): New method. Search for at least one defined
13855         condition in ConditionalAttribute of attribute class.
13856
13857 2005-03-30  Raja R Harinath  <rharinath@novell.com>
13858
13859         * ecore.cs (PropertyExpr): Derive from Expression, not
13860         ExpressionStatement.
13861         (PropertyExpr.EmitStatement): Remove.
13862
13863 2005-03-29  Raja R Harinath  <rharinath@novell.com>
13864
13865         Fix #74060.
13866         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
13867         internal field "value__" of an enum be private.  The examples for
13868         "value__" that I found on MSDN all used FieldAttributes.Private.
13869
13870         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
13871         Don't mention IL method attribute names.
13872
13873         Fix #47991.  Remove a TODO.
13874         * statement.cs (Block.Toplevel): Make into a field.
13875         (Block.Parameters): Move into ToplevelBlock.
13876         (Block.known_variables): Rename from child_variable_names.
13877         (Block.Block): Remove variants that take Parameters.  Initialize
13878         'Toplevel' with the immediately surrounding toplevel block.
13879         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
13880         LocalInfo parameter.
13881         (Block.GetKnownVariableInfo): New.
13882         (Block.IsVariableNameUsedInChildBlock): Update.
13883         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
13884         the block, even though it may not be in scope.
13885         (Block.AddVariable): Remove Parameters parameter.  Use
13886         Toplevel.Parameters instead.
13887         (Block.AddConstant): Remove Parameters parameter.
13888         (Block.GetParameterReference): Update to use Toplevel.Parameters.
13889         (Block.IsParamaterReference): Likewise.
13890         (Block.IsLocalParameter): Likewise.  Simplify a lot.
13891         (ToplevelBlock.Parameters): New.  Moved from Block.
13892         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
13893         initialize Parameters to a non-null value.
13894         * cs-parser.jay: Update to changes.
13895         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
13896         simple names that mean different things in the same block.  Use
13897         Block.IsVariableNameUsedInBlock.
13898
13899 2005-03-28  Raja R Harinath  <rharinath@novell.com>
13900
13901         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
13902         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
13903         GetTypeHandle.  It is possible for a reflected type to derive from
13904         a TypeBuilder (e.g., int[] derives from the TypeBuilder
13905         System.Array during mscorlib compilation).
13906         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
13907         contain a method_hash, don't create one either.  Don't create a
13908         deep copy of the base cache's method_hash.
13909         (MemberCache.SetupCache): Rename back from DeepCopy.
13910         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
13911         already initialized.  If we see an override function, add its
13912         underlying base virtual function to the member_hash too.
13913
13914         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
13915
13916 2005-03-26  Raja R Harinath  <harinath@acm.org>
13917
13918         Fix #73038.
13919         * assign.cs (Assign.DoResolve): When the RHS of an assignment
13920         fails to resolve, ensure that the LHS is still resolved as an
13921         lvalue.
13922
13923 2005-03-25  Raja R Harinath  <harinath@acm.org>
13924
13925         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
13926         ec.ContainerType.
13927         (Enum.current_ec): Remove.
13928         (Enum.LookupEnumValue): Remove EmitContext argument.
13929         Just uses the one created during DefineType.
13930         (Enum.FindMembers): Update.
13931         * expression.cs (MemberAccess.DoResolve): Update.
13932
13933 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
13934
13935         * assign.cs (Assign.DoResolve): Check for CS1717 when
13936         source and target are same (uses Equals).
13937
13938         * expression.cs (LocalVariableReference, ParameterReference,
13939         This): Implemented Equals, GetHashCode.
13940
13941         * statement.cs (Block.GetParameterReference): Removed useless
13942         local variable.
13943
13944 2005-03-22  Raja R Harinath  <rharinath@novell.com>
13945
13946         Fix cs0128.cs
13947         * statement.cs (Block.AddVariable): Ensure that we skip implicit
13948         blocks before deciding whether the error is cs0136 or cs0128.
13949
13950         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
13951         (using_alias_directive, using_namespace_directive): Pass
13952         MemberName, not an expression to Namespace.UsingAlias and
13953         Namespace.Using.
13954         (MakeName): Use the MemberName of the namespace.
13955         * namespace.cs (Namespace.MemberName): New.
13956         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
13957         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
13958         Likewise.
13959         * decl.cs (MemberName.Name): Make readonly.
13960         (MemberName.FromDotted): New "constructor".
13961         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
13962         (MemberCore.Name): Compute from MemberName on demand.
13963         (MemberCore.SetMemberName): Provide a way to change the
13964         MemberName.
13965         (MemberCore.AddToContainer): Don't take a fullname parameter.
13966         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
13967         fully qualified name of the container to the member name.
13968         (TypeContainer.AddToTypeContainer): Use a fully qualified name
13969         only if the type is a member of the root container.
13970         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
13971         MemberName.Left rather than searching for an embedded ".".
13972         (PartialContainer.CreatePart): Update to changes in RootContext.
13973         (MemberBase.ShortName): Turn into a property.  Use
13974         MemberCore.SetMemberName.
13975         (MemberBase.ExplicitInterfaceName): Remove.
13976         (MemberBase.UpdateMemberName): Remove.
13977         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
13978         (PropertyBase.SetMemberName): New override.
13979         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
13980         (Tree.GetDecl): New.
13981         (Tree.AllDecls): Rename from Decls.
13982         * attribute.cs, enum.cs, report.cs: Update to changes.
13983         * driver.cs (MainDriver): Use MemberName.FromDotted on
13984         RootContext.MainClass.
13985
13986 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
13987
13988         * class.cs (FixedField.Define): Check for CS1664 and more sanity
13989         checks.
13990
13991         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
13992
13993 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
13994
13995         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
13996         property accessor modifiers.
13997
13998         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
13999         fixed buffer attribute (CS1716).
14000         (PropertyMethod.HasCustomAccessModifier): When property accessor
14001         has custom modifier.
14002
14003         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
14004         modifiers.
14005         (PropertyExpr.DoResolveLValue): Add CS0272.
14006
14007 2005-03-17  Miguel de Icaza  <miguel@novell.com>
14008
14009         * convert.cs: When converting to a pointer, use the proper Conv.U
14010         or Conv.I depending on the source data type.
14011
14012         * cs-tokenizer.cs: Make the size for large decimal constants,
14013         fixes #72957.
14014
14015 2005-03-17  Martin Baulig  <martin@ximian.com>
14016
14017         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
14018         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
14019
14020 2005-03-17  Martin Baulig  <martin@ximian.com>
14021
14022         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
14023         to bool so we can return an error condition.
14024         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
14025         returned an error.
14026
14027 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
14028
14029         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
14030         attributes.
14031
14032 2005-03-16  Raja R Harinath  <rharinath@novell.com>
14033
14034         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
14035         Refactor to avoid traversing the list of assemblies, and to avoid
14036         string concatenation.
14037         * typemanager.cs (guid_attr_type): Remove.
14038         (negative_hits, pointers, references): Remove hashes.
14039         (type_hash): New.
14040         (GetConstructedType): New.  Uses type_hash to handle constructed
14041         types (arrays, references, pointers).
14042         (GetReferenceType, GetPointerType): Use it.
14043         (GetNestedType): New.  Uses type_hash to handle nested types of
14044         reflected types.
14045         (LookupType, LookupTypeDirect): Remove.
14046         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
14047         'types' hash and LookupTypeReflection directly.
14048         (params_string, params_object): Use GetConstructedType.
14049         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
14050         top-level types.
14051         (Namespace.Lookup): Use cached_types.
14052         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
14053         provided by old TypeManager.LookupType.
14054         * rootcontext.cs (MakeFQN): Remove.
14055         * decl.cs (DeclSpace.MakeFQN): Likewise.
14056         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
14057         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
14058         TypeManager.GetConstructedType.
14059         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
14060
14061 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
14062
14063         * class.cs (MethodCore.CheckBase): Report CS1715 for properties and
14064         indexers.
14065
14066         * cs-parser.jay: Reports CS1527 for any namespace element.
14067
14068         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
14069         Added CS0407.
14070
14071         * expression.cs (ParameterReference.IsAssigned): Changed error to
14072         CS0269.
14073         (Error_WrongNumArguments): Moved CS0245 detection here.
14074
14075         * statement.cs (Return.Resolve): Add CS1622 report.
14076
14077 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
14078
14079         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
14080
14081 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
14082
14083         * attribute.cs expression.cs: Get rid of some allocations.
14084
14085 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
14086
14087         * doc.cs : just eliminate the latest change.
14088
14089 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14090
14091         * doc.cs : commented out the latest change. It breaks xml-030.cs
14092
14093 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14094
14095         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
14096           fail. So invoke CreateType() in FindDocumentedType().
14097
14098 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14099
14100         * cs-tokenizer.cs : added IsKeyword().
14101         * doc.cs : Detect keyword incorrectly used as identifier.
14102           Allow identifiers prefixed by @.
14103
14104 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
14105
14106         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
14107         It caused exception in namespace resolving (again!).
14108         
14109         * class.cs (Class.ctor): Removed exit.
14110         (PropertyMethod.ctor): ditto.
14111         
14112         * codegen.cs (Codegen.Reset): Reset static data.
14113         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
14114         
14115         * cs-tokenizer.cs (Cleanup): Removed.
14116         
14117         * driver.cs (GetSystemDir): Rewrote to one line command.
14118         It caused problem with unloaded dynamic modules.
14119         (UnixParseOption): Removed Exit.
14120         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
14121         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
14122         Now can be mcs used as library.
14123         
14124         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
14125         empty location.
14126         
14127         * location.cs (Reset): Reset static data.
14128         
14129         * namespace.cs (Reset): Reset static data.
14130         
14131         * report.cs (Report.Reset): Reset static data.
14132         
14133         * rootcontext.cs (RootContext.Reset): Reset static data.
14134         
14135         * tree.cs (RootTypes.ctor): Use Location.Null
14136         
14137         * typemanager.cs (TypeManager.Reset): Reset static data.
14138         (CoreLookupType): Removed Exit.
14139         (TypeHandle.Reset): Reset static data.
14140         
14141 2005-03-10  Raja R Harinath  <rharinath@novell.com>
14142
14143         Fix #73516.
14144         * typemanager.cs (ComputeNamespaces): Import namespaces from
14145         referenced modules too.
14146
14147 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14148
14149         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
14150         than '.'.
14151
14152 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14153
14154         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
14155         enclosing DeclSpace.  This ensures that a name-lookup populates
14156         more caches and there are fewer 'TypeExpression's.  Carve out
14157         nested type lookup into ...
14158         (LookupNestedTypeInHierarchy): ... this.
14159
14160 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14161
14162         Clean up a few partial-class semantics.  
14163         Fixes test-357.cs and cs1618-2.cs.
14164         * cs-parser.jay (struct_declaration): Use 'current_class' as
14165         parent of newly-created struct.  Remove call to Register ().
14166         Use 'pop_current_class' to complete handing the current struct.
14167         (interface_declaration): Likewise.
14168         (class_declaration): Likewise.
14169         (enum_declaration): Use 'current_class' as parent of newly created
14170         enum.
14171         (delegate_declaration): Likewise.
14172         (pop_current_class): New function.  This is used to handle closing
14173         up the 'current_class' and 'current_container', and pointing them
14174         to the enclosing class/container.
14175         (CSharpParser): Initialize 'current_class' too.
14176         * decl.cs (MemberCore): Add check for invariant: a partial
14177         container is not a parsed entity, and thus does not enclose any
14178         parsed members.
14179         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
14180         (DeclSpace.BaseTypeExpr): Use it.
14181         (DeclSpace.LookupType): Add check for invariant.
14182         * class.cs (TypeContainer): Add check for invariant: a nested
14183         class should have the same NamespaceEntry as its enclosing class.
14184         (TypeContainer.EmitFieldInitializers): Make virtual.
14185         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
14186         MemberCore.
14187         (TypeContainer.Register): Remove.
14188         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
14189         null.  Use TypeResolveEmitContext for resolving base types and
14190         interfaces.  Move initialization of Parts.TypeBuilder here from
14191         ...
14192         (TypeContainer.DefineNestedTypes): ... here.
14193         (PartialContainer): Take a Namespace not a NamespaceEntry.
14194         (PartialContainer.Create): Don't use Register.  Call the
14195         appropriate Add... function directly.
14196         (ClassPart): Take both the PartialContainer and the enclosing
14197         class as constructor arguments.
14198         (ClassPart.EmitFieldInitializers): Override.
14199         (ClassPart.PartFindNestedTypes): Remove.
14200         (FieldBase.GetInitializerExpression): Resolve the initializer
14201         expression in the emit context of the enclosing class.
14202         * tree.cs (RootTypes): Remove Register ().
14203         
14204 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
14205
14206         * cs-parser.jay: Removed CS0134.
14207         
14208         * driver.cs: Removed CS1901.
14209         
14210         * expression.cs (SizeOf.DoResolve): Don't report CS0233
14211         for predefined types.
14212
14213 2005-03-07  Duncan Mak  <duncan@novell.com>
14214
14215         * codegen.cs (Save):  Catch UnauthorizedAccessException as
14216         well. Fixes bug #73454.
14217
14218 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
14219
14220         * cs-tokenizer.cs (xtoken): Add CS1035.
14221         
14222         * class.cs (MethodData.Define): Add CS0683.
14223         (FieldMember.ctor): Add CS0681.
14224
14225 2005-03-07  Raja R Harinath  <rharinath@novell.com>
14226
14227         * ecore.cs (SimpleName.DoResolve): Rename from
14228         SimpleName.DoResolveAllowStatic.
14229         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
14230         Pass 'intermediate' flag to MemberStaticCheck.
14231         (SimpleName.MemberStaticCheck): Skip "static check" only in case
14232         of "intermediate" lookups via MemberAccess.
14233         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
14234         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
14235
14236 2005-03-07  Raja R Harinath  <rharinath@novell.com>
14237
14238         Fix #73394.
14239         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
14240         slipped in because of variable names that are identical to a
14241         builtin type's BCL equivalent ('string String;', 'int Int32;').
14242         (PropertyExpr.EmitInstance): Likewise.
14243
14244 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
14245
14246         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
14247         
14248         * report.cs (warning_ignore_table): Made public.
14249
14250 2005-03-04  Raja R Harinath  <rharinath@novell.com>
14251
14252         Fix #73282.
14253         * class.cs (MethodData.Emit): Pass 'container' to
14254         container.GetObsoleteAttribute instead of 'container.Parent'.
14255
14256 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
14257
14258         * cs-parser.jay: Add 1534 error test.
14259
14260         * iterators.cs (Yield.CheckContext): Add error 1629.
14261         (Iterator.ctor): Save unsafe modifier.
14262         (MoveNextMethod.DoEmit): Restore unsafe context.
14263
14264         * namespace.cs (UsingAlias): Better error message.
14265
14266 2005-03-03  Dan Winship  <danw@novell.com>
14267
14268         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
14269         the warning message [#73219]
14270
14271 2005-03-03  Raja R Harinath  <rharinath@novell.com>
14272
14273         Fix compile with MCS 1.0.0.0.
14274         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
14275         w_restore to not depend on string constant folding.
14276
14277 2005-03-03  Raja R Harinath  <rharinath@novell.com>
14278
14279         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
14280         CS0246 check to users who passed 'silent = false'.
14281         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
14282         check.
14283         (SimpleName.SimpleNameResolve): Update.
14284         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
14285         (MemberAccess.IdenticalNameAndTypeName): Update.
14286         * doc.cs (FindDocumentedTypeNonArray): Update.
14287
14288 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
14289
14290         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
14291         * parameters.cs (ComputeAndDefineParameters): Remove.
14292         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
14293         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
14294         Use GetParameterInfo.
14295
14296 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
14297
14298         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
14299
14300 2005-03-02  Raja R Harinath  <rharinath@novell.com>
14301
14302         Unify DeclSpace.LookupType and DeclSpace.FindType.
14303         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
14304         is in charge of defining nested types on demand.
14305         (DeclSpace.LookupType): Use it when the current_type is a
14306         TypeBuilder.  Use LookupTypeDirect for reflected types.
14307         (DeclSpace.FindType): Remove.
14308         (DeclSpace.LookupInterfaceOrClass): Likewise.
14309         (DeclSpace.DefineTypeAndParents): Likewise.
14310         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
14311         DeclSpace.LookupType.
14312         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
14313         * typemanager.cs (LookupType): Simplify.
14314         (AddUserType): Remove type from negative_hits.
14315         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
14316         * class.cs (TypeContainer.FindMembers): Move handling of nested
14317         types ...
14318         (TypeContainer.FindMembers_NestedTypes): ... here.
14319         (TypeContainer.FindNestedType): Implement override.
14320         (ClassPart.FindNestedType): Delegate to PartialContainer.
14321         (ClassPart.PartFindNestedType): Looks up the nested types of the
14322         part alone.
14323
14324 2005-03-02  Martin Baulig  <martin@ximian.com>
14325
14326         * class.cs (TypeContainer.DoDefineMembers): We also need a default
14327         static constructor in static classes.
14328
14329 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
14330
14331         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
14332         sizeParamIndex is not specified.
14333
14334 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
14335
14336         Fix #73117
14337         * report.cs (WarningMessage.IsEnabled): Missing null check.
14338
14339 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14340
14341         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
14342         in the fields and not in the properties.
14343
14344 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
14345
14346         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
14347         fields as well.
14348
14349 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14350
14351         * attribute.cs: Small refactoring (improved robustness).
14352         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
14353         (ValidateGuid): Removed.
14354         (Resolve): Removed referenced to above mentioned.
14355         (GetAttributeUsage): Made private and changed to work without
14356         class assistance.
14357         (GetIndexerAttributeValue): Don't crash.
14358         (GetConditionalAttributeValue): Ditto.
14359         (GetClsCompliantAttributeValue): Ditto.
14360         (ExtractSecurityPermissionSet): All attributes exceptions are
14361         error 648.
14362         (GetPropertyValue): New helper.
14363         (GetMethodImplOptions): New method.
14364         (DefinePInvokeMethod): Reuse common code. Implemented handling of
14365         some missing properties.
14366         
14367         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
14368         (Method.ApplyAttributeBuilder): Updated.
14369         
14370         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
14371         exception.
14372
14373 2005-02-28  Raja R Harinath  <rharinath@novell.com>
14374
14375         Fix #73052.
14376         * report.cs (Report.SymbolRelatedToPreviousError): Handle
14377         non-simple types (array, pointer, reference).
14378
14379 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14380
14381         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
14382
14383         * class.cs (MethodCore.IsDuplicateImplementation): Special error
14384         for operators.
14385         (Method.CheckBase): Catch wrong destructor here.
14386         (MethodData.Define): Add errors 550, 668.
14387
14388         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
14389
14390         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
14391
14392         * pending.cs (VerifyPendingMethods): Add error 551.
14393
14394         * typemanager.cs (CSharpName): Next error report helper.
14395
14396 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
14397
14398         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
14399         attributes. Removed useless attribute double check.
14400         It saves almost 2MBs for corlib.
14401
14402 2005-02-25  Raja R Harinath  <rharinath@novell.com>
14403
14404         Fix #72924.
14405         * statement.cs (ExpressionStatement.Resolve): Make robust to being
14406         called twice in case of error.
14407
14408 2005-02-23  Chris Toshok  <toshok@ximian.com>
14409
14410         Fix compiler portions of #72827.
14411         * statement.cs (Block.Emit): call Begin/EndScope on the
14412         EmitContext instead of the ILGenerator.
14413
14414         * codegen.cs (EmitContext.BeginScope): new method, call
14415         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
14416         we have one.)
14417         (EmitContext.BeginScope): same, but EndScope and CloseScope
14418
14419         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
14420         offset and call the superclass's OpenScope(int) with it.
14421         (SymbolWriter.CloseScope): get the current il
14422         offset and call superclass's CloseScope(int) with it.
14423
14424 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
14425
14426         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
14427         CS1677 for out and ref as well.
14428
14429         * class.cs (Method.Define): Add error CS1599 detection.
14430         
14431         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
14432         
14433         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
14434         
14435         * delegate.cs (Delegate.Define): Add error CS1599 detection.
14436         
14437         * support.cs.cs (ModifierDesc): New helper method.
14438
14439 2005-02-23  Raja R Harinath  <rharinath@novell.com>
14440             Abin Thomas  <projectmonokochi@rediffmail.com>
14441             Anoob V E  <projectmonokochi@rediffmail.com>
14442             Harilal P R  <projectmonokochi@rediffmail.com>
14443
14444         Fix #57851, #72718.
14445         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
14446         MemberLookup (used for error reporting) actually returns a result.
14447         Fix error report number (122, not 112).
14448
14449 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
14450             Anoob V E  <projectmonokochi@rediffmail.com>
14451             Harilal P R  <projectmonokochi@rediffmail.com>
14452
14453         Fix #71134.
14454         * pending.cs (PendingImplementation.GetAbstractMethods):
14455         Find NonPublic members too.
14456
14457 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
14458
14459         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
14460         Fixed error 217.
14461         
14462         * class.cs (MethodCore.CheckMethodAgainstBase):
14463         Add error 239 report.
14464
14465 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14466
14467         Fix #68955.
14468         * expression.cs (Invocation.IsApplicable): Make public.
14469         (Invocation.IsParamsMethodApplicable): Likewise.
14470         * delegate.cs (Delegate.VerifyApplicability): Don't use
14471         Invocation.VerifyArgumentCompat for parameter applicability
14472         testing.  Use Invocation.IsApplicable and
14473         Invocation.IsParamsMethodApplicable.
14474
14475 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
14476
14477         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
14478         
14479         * class.cs (Operator.Define): Add error 217 report.
14480         
14481 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14482
14483         * namespace.cs (UsingEntry.Resolve): Undo change below.
14484
14485 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14486
14487         Fix #72756.
14488         * ecore.cs (Expression.MemberLookupFailed): Add argument to
14489         disable the error message when the extended MemberLookup also
14490         fails.
14491         (Expression.MemberLookupFinal): Update.
14492         (SimpleName.DoSimpleNameResolve): Update.
14493         * expression.cs (MemberAccess.ResolveNamespaceOrType):
14494         Don't use MemberLookupFinal.
14495         (New.DoResolve): Update.
14496         (BaseAccess.CommonResolve): Update.
14497
14498 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14499
14500         Fix #72732.
14501         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
14502         occured previously, don't resolve again.
14503
14504 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
14505
14506         Fix #69949
14507         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
14508         argument. Call ResolveAttributeUsage for unresolved.
14509         when types doesn't match ctor arguments.
14510         
14511         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
14512         for nested attribute classes.
14513         (Class.attribute_usage): Removed.
14514         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
14515         for attribute class.
14516         
14517         * ecore.cs (IsAttribute): Removed.
14518         
14519         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
14520         
14521         * rootcontext.cs (RegisterAttribute): Removed, attributes are
14522         now normal types.
14523         (attribute_types): Removed.
14524         (EmitCode): Global attributes are emited as the latest.
14525
14526 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
14527
14528         * class.cs (EmitFieldInitializers): Don't emit field initializer
14529         for default values when optimilization is on.
14530         
14531         * constant.cs (Constant.IsDefaultValue): New property.
14532         
14533         * driver.cs: Add /optimize handling.
14534         
14535         * constant.cs,
14536         * ecore.cs,
14537         * literal.cs: Implement new IsDefaultValue property.
14538         
14539         * rootcontext.cs (Optimize): New field, holds /optimize option.
14540
14541 2005-02-18  Raja R Harinath  <rharinath@novell.com>
14542
14543         Fix crasher in re-opened #72347.
14544         * namespace.cs (Namespace.Lookup): Return null if
14545         DeclSpace.DefineType returns null.
14546
14547         Fix #72678.
14548         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
14549
14550 2005-02-18  Raja R Harinath  <rharinath@novell.com>
14551
14552         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
14553         now returns null if it cannot resolve to an lvalue.
14554         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
14555         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
14556         returned null.  Remove check for SimpleName.
14557         (EventExpr.DoResolveLValue): New.
14558         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
14559         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
14560         error from ...
14561         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
14562         avoid CS0131 error.
14563         (Unary.ResolveOperator): Move CS0211 check ...
14564         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
14565         CS0131 error.
14566         (Unary.DoResolveLValue): Simplify.
14567         (AddressOf.DoResolveLValue): New.
14568         (ArrayAccess.DoResolveLValue): New.
14569
14570 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
14571
14572         * attribute.cs (Attribute.Resolve): Add arguments casting for
14573         when types doesn't match ctor arguments.
14574
14575 2005-02-16  Raja R Harinath  <rharinath@novell.com>
14576
14577         Fix parts of #63202.
14578         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
14579         lookup of operator in base type.  Ensure that all checks happen
14580         when the operator resolves to an "op_..." method.
14581
14582 2005-02-15  Raja R Harinath  <rharinath@novell.com>
14583
14584         Fix #71992.
14585         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
14586         'ignore_cs0104' parameter.  Pass it to ...
14587         (NamespaceEntry.Lookup): ... this.
14588         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
14589         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
14590         (TypeLookupExpression.DoResolveAsTypeStep): Update.
14591         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
14592         Update.  Request that cs0104 errors be ignored.
14593         (ComposedCast.ResolveAsTypeStep): Update.
14594
14595 2005-02-14  Raja R Harinath  <rharinath@novell.com>
14596
14597         Fix #59209.
14598         * expression.cs (Invocation.BetterFunction): Remove support for
14599         comparing virtual functions and their overrides.
14600         (Invocation.IsOverride): New.
14601         (Invocation.OverloadResolve): Don't consider 'override' functions
14602         during candidate selection.  Store them in a lookaside list.
14603         If the selected method is a 'virtual' function, use the list to
14604         find any overrides that are closer to the LHS type.
14605
14606 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
14607
14608         * expression.cs (New.DoResolve): Add complex core type reduction.
14609         (New.Constantify): Converts complex core type syntax like 'new int ()'
14610         to simple constant.
14611         
14612 2005-02-14  Raja R Harinath  <rharinath@novell.com>
14613
14614         * decl.cs (EntryType.EntryType): New constructor to create an
14615         updated copy of a cache entry.
14616         (MemberCache.AddMethods): Use it.
14617         (MemberCache.ClearDeclaredOnly): Remove.
14618         (MemberCache.MemberCache): Update.
14619
14620 2005-02-11  Miguel de Icaza  <miguel@novell.com>
14621
14622         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
14623         variable.  This one is represents the actual low-level declaration
14624         of the method, as opposed to the semantic level `IsStatic'.   
14625
14626         An anonymous method which is hosted into a static method might be
14627         actually an instance method.  IsStatic would reflect the
14628         container, while MethodIsStatic represents the actual code
14629         generated.
14630
14631         * expression.cs (ParameterReference): Use the new MethodIsStatic
14632         instead of IsStatic.
14633
14634         * anonymous.cs (AnonymousMethod.Compatible): Pass the
14635         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
14636         set on the current EmitContext. 
14637
14638         * expression.cs (Cast): Overload DoResolveLValue so we can pass
14639         resolve our casted expression as an LValue.  This triggers the
14640         proper LValue processing that is later required by Assign.
14641
14642         This fixes 72347.
14643
14644         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
14645
14646 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
14647
14648         C# 2.0 Fixed buffer implementation
14649
14650         * anonymous.cs: Update after RegisterHelperClass renaming.
14651
14652         * attribute.cs (AttributeTester.fixed_buffer_cache):
14653         Cache of external fixed buffers.
14654         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
14655         implementation if field is fixed buffer else null.
14656
14657         * class.cs
14658         (TypeContainer.AddField): Accept FieldMember instead of Field.
14659         (FieldBase.IsFieldClsCompliant): Extracted code from
14660         VerifyClsCompliance descendant customization.
14661         (FixedField): New class handles fixed buffer fields.
14662         (FixedFieldExternal): Keeps information about imported fixed
14663         buffer.
14664         (IFixedField): Make access to internal or external fixed buffer
14665         same.
14666
14667         * cs-parser.jay: Add fixed buffer parsing.
14668
14669         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
14670         buffer.
14671
14672         * expression.cs (Indirection): Extended implementation to accept
14673         fixed buffer field.
14674         (PointerArithmetic.Emit): Get element from fixed buffer as well.
14675         (ElementAccess.MakePointerAccess): Get type as parameter.
14676         (DoResolve): Add fixed buffer field expression conversion.
14677         (DoResolveLValue): Ditto.
14678         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
14679         (ArrayPtr): Derives from FixedBufferPtr.
14680         (ArrayPtr.Emit): Add extra emit for array elements.
14681
14682         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
14683
14684         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
14685         for compiler generated types.
14686         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
14687
14688         * statement.cs (Fixed): Refactored to be easier add fixed buffer
14689         and consume less memory.
14690         (Fixed.Resolve): Add fixed buffer case.
14691
14692         * typemanager.cs (compiler_generated_attr_ctor,
14693         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
14694         (HasElementType): Add our own implementation to work on every
14695         runtime.
14696
14697 2005-02-11  Miguel de Icaza  <miguel@novell.com>
14698
14699         * anonymous.cs (CaptureContext): Track whether `this' has been
14700         referenced.   
14701
14702         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
14703         only captured `this' if it was implicitly done (instance
14704         methods/variables were used). 
14705
14706         * codegen.cs (EmitContext.CaptureThis): New method to flag that
14707         `this' must be captured.
14708
14709 2005-01-30  Miguel de Icaza  <miguel@novell.com>
14710  
14711         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
14712         is null it means that there has been no need to capture anything,
14713         so we just create a sibling.
14714
14715         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
14716
14717         Just a partial fix.  The other half is fairly elusive.
14718         
14719 2005-02-10  Raja R Harinath  <rharinath@novell.com>
14720
14721         Fix #52586, cs0121-4.cs.
14722         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
14723         and return a hashtable.
14724         (MemberCache.ClearDeclaredOnly): New.
14725         (MemberCache.MemberCache): Update to change.  Make a deep copy of
14726         the method_hash of a base type too.
14727         (MemberCache.AddMethods): Adapt to having a deep copy of the base
14728         type methods.  Overwrite entries with the same MethodHandle so
14729         that the ReflectedType is correct.  The process leaves in base
14730         virtual functions and their overrides as distinct entries.
14731         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
14732         matters since it was boxed in a ArrayList before.
14733         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
14734         modifier.
14735         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
14736         case of a virtual function and its override (choose the overload
14737         as better).
14738         (Invocation.OverloadResolve): Avoid 'override' members during
14739         'applicable_type' calculation.
14740
14741 2005-02-09  Raja R Harinath  <rharinath@novell.com>
14742
14743         Combine two near-redundant caches.
14744         * typemanager.cs (method_params): Rename from method_internal_params.
14745         (TypeManager.GetParameterData): New.  Replace
14746         Invocation.GetParameterData.
14747         (TypeManager.LookupParametersByBuilder): Remove.
14748         * expression.cs (Invocation.method_parameter_cache): Remove.
14749         (Invocation.GetParameterData): Remove.
14750         Update to changes.
14751         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
14752         Update to changes.
14753
14754 2005-02-08  Raja R Harinath  <rharinath@novell.com>
14755
14756         Fix #72015.
14757         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
14758         TypeManager.multicast_delegate_type is null, resolve it by looking
14759         up "System.MulticastDelegate".
14760         * rootcontext.cs (RootContext.ResolveCore): Simplify.
14761
14762 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
14763             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
14764             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
14765
14766         Fix cs0164.cs.
14767         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
14768         (LabeledStatement.AddReference): New.  Set 'referenced'.
14769         (Goto.Resolve): Use it.
14770
14771 2005-02-05  John Luke  <john.luke@gmail.com>
14772
14773         * driver.cs: remove duplicate -doc line in Usage ()
14774
14775 2005-02-04  Raja R Harinath  <rharinath@novell.com>
14776
14777         * location.cs (Location.AddFile): Fix CS2002 error report.
14778
14779 2005-02-02  Martin Baulig  <martin@ximian.com>
14780
14781         * delegate.cs (Delegate.DefineType): Report an internal error if
14782         TypeManager.multicast_delegate_type is null.  See bug #72015 for
14783         details.        
14784
14785 2005-02-02  Raja R Harinath  <rharinath@novell.com>
14786
14787         Fix a crasher in a variant of #31984.
14788         * const.cs (Constant.CheckBase): New override that defers the
14789         new-or-override check in case the base type hasn't been populated
14790         yet.
14791         (Constant.Define): Ensure the new-or-override check is performed.
14792
14793 2005-02-01  Duncan Mak  <duncan@ximian.com>
14794
14795         * const.cs (LookupConstantValue): Check that `ce' is not null
14796         before calling GetValue ().
14797
14798 2005-02-01  Raja R Harinath  <rharinath@novell.com>
14799
14800         Fix test-334.cs (#69519).
14801         * cs-parser.jay (using_alias_directive): Pass in an expression to
14802         NamespaceEntry.UsingAlias.
14803         (using_namespace_directive): Pass in an expression to
14804         NamespaceEntry.Using.
14805         (namespace_name): Don't flatten to a string.
14806         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
14807         (NamespaceEntry.AliasEntry.Resolve): Lookup using
14808         ResolveAsTypeStep.
14809         (NamespaceEntry.UsingEntry): Likewise.
14810         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
14811         changes.
14812         (NamespaceEntry.LookupForUsing): Remove.
14813         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
14814         names.
14815         (NamespaceEntry.Lookup): Remove support for dotted names.
14816
14817 2005-02-01  Raja R Harinath  <rharinath@novell.com>
14818
14819         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
14820         split into two.
14821         (NamespaceEntry.ImplicitParent): Compute on demand.
14822         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
14823         parallels the current.
14824         (NamespaceEntry.LookupForUsing): Use it.
14825         (NamespaceEntry.Lookup): If the current namespace-entry is
14826         implicit, don't search aliases and using tables.
14827
14828 2005-02-01  Raja R Harinath  <rharinath@novell.com>
14829
14830         Fix #31984.
14831         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
14832         BaseCache here.
14833         (TypeContainer.BaseCache): Compute on demand.
14834         (TypeContainer.FindMembers): Define constants and types if they're
14835         not already created.
14836         (FieldMember.Define): Move resetting of ec.InUnsafe before error
14837         check.
14838         * const.cs (Constant.Define): Make idempotent.
14839
14840 2005-01-29  Miguel de Icaza  <miguel@novell.com>
14841
14842         * pending.cs: Produce better code (no nops produced by using Ldarg
14843         + value).
14844         
14845         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
14846         i - 1' it should be arg + 1.
14847
14848         Fixes bug #71819.
14849
14850 2005-01-28  Raja R Harinath  <rharinath@novell.com>
14851
14852         * attribute.cs (Attribute.CheckAttributeType): Make private
14853         non-virtual.
14854         (Attribute.ResolveType): Make virtual.
14855         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
14856         handling of RootContext.Tree.Types.
14857
14858 2005-01-27  Raja R Harinath  <rharinath@novell.com>
14859
14860         Update attribute-handling to use the SimpleName/MemberAccess
14861         mechanisms.
14862         * cs-parser.jay (attribute): Pass in an expression to the
14863         constructors of Attribute and GlobalAttribute.
14864         * attribute.cs (Attribute): Take an expression for the name.
14865         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
14866         passed in attribute name expression.
14867         (Attribute.CheckAttributeType): Use it.
14868         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
14869         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
14870         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
14871         argument to prevent error messages if the lookup fails.
14872
14873 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
14874
14875         * expression.cs (Indirection): Implemented IVariable interface
14876         to support indirection in AddressOf operator.
14877         (PointerArithmetic.Emit): Add optimalization for case where
14878         result can be precomputed.
14879
14880 2005-01-26  Martin Baulig  <martin@ximian.com>
14881
14882         * class.cs (TypeContainer.AttributeTargets): Return the correct
14883         AttributeTargets depending on our `Kind' instead of throwing an
14884         exception; fixes #71632.
14885
14886 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
14887
14888         Fix #71257
14889         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
14890         constant members.
14891
14892 2005-01-25  Raja R Harinath  <rharinath@novell.com>
14893
14894         Fix #71602.
14895         * expression.cs (MemberAccess.DoResolve): Don't complain with
14896         cs0572 when the LHS of a member access has identical name and type
14897         name.
14898
14899 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
14900
14901         Fix #71651, #71675
14902         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
14903         CreatePermission.
14904         Create custom PermissionSet only for PermissionSetAttribute.
14905
14906 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
14907
14908         Fix #71649
14909         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
14910         delegates in static class.
14911
14912 2005-01-24  Martin Baulig  <martin@ximian.com>
14913
14914         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
14915         merging an implicit block, just use its reachability.
14916
14917         * statement.cs (Block.Resolve): Make the unreachable code check
14918         work wrt. implicit blocks; see test-337 from #63842.
14919
14920 2005-01-21  Alp Toker  <alp@atoker.com>
14921  
14922         * cs-parser.jay: destructor_declaration's container is PartialContainer
14923         not Class when partial types are used, so use Kind prop instead of
14924         'is'.
14925         
14926 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
14927
14928         * cs-parser.jay: Improve error reporting when an interface
14929         declares new types.
14930
14931 2005-01-20  Dick Porter  <dick@ximian.com>
14932
14933         * support.cs: SeekableStreamReader fix from Sandor Dobos
14934         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
14935         chars are read.  Fixes bug 70369.
14936
14937 2005-01-20  Raja R Harinath  <rharinath@novell.com>
14938
14939         * cs-parser.jay (catch_clause): Simplify current_block handling
14940         somewhat.
14941
14942 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
14943
14944         * convert.cs (ImplicitStandardConversionExists): Synchronize the
14945         code with ImplicitStandardConversion to handle the implicit
14946         conversion of method groups into valid delegate invocations. 
14947
14948         The problem is that in parameter handling we were using this code
14949         path.  Fixes bug #64698
14950
14951 2005-01-19  Raja R Harinath  <rharinath@novell.com>
14952
14953         * cs-parser.jay: Fix several infelicities.
14954         - Avoid assigning to the parser value stack.  Code like 
14955           '$3 = null' is unclean.  Synthesize a value for the code block
14956           instead. 
14957         - Avoid using oob_stack for storing location information.  Use ...
14958         (_mark_): ... this.  New (empty) rule.  Saves the current location
14959         in $$.
14960         (foreach_statement): Avoid using oob_stack for current_block
14961         handling.  Use technique used in for_statement and
14962         using_statement.  Synthesize a value for the code block to store
14963         additional intermediate information.
14964
14965 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
14966
14967         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
14968         of a different type is only allowed to private fields of a
14969         containing type, not on fields of a base class.
14970
14971         See test-174.cs and error cs0122-9.cs
14972
14973 2005-01-13  Raja R Harinath  <rharinath@novell.com>
14974
14975         Fix test-335.cs (bug #58126).
14976         * cs-parser.jay (argument): Split out non-expression parts of the
14977         rule into 'non_simple_argument'.
14978         (invocation_expression): Support parenthesized invocations with
14979         multiple arguments, and with single non-simple arguments.
14980
14981 2005-01-13  Raja R Harinath  <rharinath@novell.com>
14982
14983         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
14984         places.
14985
14986 2005-01-12  Raja R Harinath  <rharinath@novell.com>
14987
14988         Fix cs0038-1.cs, cs1640-6.cs.
14989         * ecore.cs (Expression.Resolve): Remove special-case for
14990         SimpleName in error-handling.
14991         (Expression.almostMatchedMembers): Relax access permission to
14992         protected.
14993         (Expression.MemberLookupFailed): Handle duplicates in
14994         almostMatchedMembers list.
14995         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
14996         * expression.cs (New.DoResolve): Report CS1540 for more cases.
14997         * typemanager.cs (GetFullNameSignature): Use the MethodBase
14998         overload if the passed in MemberInfo is a MethodBase.
14999
15000 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
15001
15002         Fix #70749
15003         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
15004         for non-CAS & merge permission sets properly.
15005
15006 2005-01-11  Raja R Harinath  <rharinath@novell.com>
15007
15008         Improve standard-compliance of simple name and member access 
15009         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
15010         * ecore.cs (FullNamedExpression): New abstract base class 
15011         for Namespaces and TypeExpressions.
15012         (ResolveFlags.SimpleName): Remove.
15013         (SimpleName): Remove support for dotted names.
15014         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
15015         DeclSpace.FindType and DeclSpace.LookupType.
15016         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
15017         (Expression.ExprClassName): Make member function.
15018         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
15019         a namespace.  Remove creation of dotted "SimpleName"s.
15020         (MemberAccess.DoResolve): Likewise.
15021         * decl.cs (DeclSpace.Cache): Make private.
15022         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
15023         (DeclSpace.FindType): Update.
15024         (DeclSpace.LookupType): Move here from RootContext.  Return a 
15025         FullNamedExpression.
15026         * namespace.cs (Namespace): Derive from FullNamedExpression
15027         so that it can be part of expression resolution.
15028         (Namespace.Lookup): Return an FullNamedExpression.
15029         (NamespaceEntry.LookupAlias): Lookup aliases only in current
15030         namespace.
15031         * rootcontext.cs (NamespaceLookup): Remove.
15032         (LookupType): Move to DeclSpace.
15033         * attribute.cs (CheckAttributeType): Update.
15034         * doc.cs (FindDocumentedType): Remove allowAlias argument.
15035         (FindDocumentedTypeNonArray): Likewise.
15036
15037 2005-01-11  Raja R Harinath  <rharinath@novell.com>
15038
15039         Fix cs0509.cs, cs1632.cs.
15040         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
15041         is the same as IsInterface.
15042         (TypeContainer.GetClassBases): Likewise.
15043         * statement.cs (LabeledStatement.ig): New field.
15044         (LabeledStatement.LabelTarget): Save ILGenerator which created the
15045         label.
15046         (LabeledStatement.DoEmit): Check that the label was created with
15047         the same ILGenerator.
15048
15049 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
15050
15051         Fix #71058
15052         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
15053         accessors to its properties.
15054
15055         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
15056         from accessors to property.
15057         
15058 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
15059
15060         Fix #70722
15061         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
15062         only for overrides.
15063         
15064 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
15065
15066         * attribute.cs: Check for null and empty strings.  
15067
15068         I have lost another battle to Paolo.
15069
15070 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
15071
15072         Fix #70942
15073         * class.cs (PropertyMethod): Set Parent field in ctors.
15074         (SetMethod.InternalParameters): Add unsafe switch hack.
15075         Override MarkForDuplicationCheck where it is appropriate.
15076
15077         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
15078         It says whether container allows members with the same name.
15079         Base default is no.
15080         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
15081         Removed is_method parameter.
15082
15083 2005-01-06  Duncan Mak  <duncan@ximian.com>
15084
15085         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
15086         because the previous change led to incorrect reporting of CS1032
15087         ("Cannot define/undefine preprocessor symbols after first token in
15088         file"). Instead of using `tokens_seen' as the only flag that
15089         triggers CS1040, introduce `comments_seen'. This new flag is used
15090         to signify having seen comments on the current line, so it is
15091         unset after a newline.
15092
15093 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
15094
15095         * doc.cs : When searching for a type, find nested type too.
15096           This fixes bug #71040.
15097
15098 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
15099
15100         * doc.cs :
15101           - Warn missing member comment on those classes which also does not
15102             have doc comments. Fixed bug #71041.
15103           - Don't warn missing doc comment on default constructor.
15104             Fixed bug #71042.
15105
15106 2005-01-06  Duncan Mak  <duncan@ximian.com>
15107
15108         * cs-tokenizer.cs (xtoken): After handling traditional C-style
15109         comments, set `tokens_seen' to true. This allows us to detect
15110         misplaced preprocessor directives (i.e. not at the beginning of
15111         the a line, nor after whitespaces). In that case, report error
15112         CS1040. This fixes bug #56460.
15113
15114         * cs-parser.jay (interface_member_declaration): Add checks for
15115         IsExplicitImpl, and report CS0541 error if an interface member is
15116         defined as an explicit interface declaration.
15117
15118 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
15119
15120         Fix #70817
15121         * class.cs (PropertyMethod): Set Parent field in ctors.
15122         (SetMethod.InternalParameters): Add unsafe switch hack.
15123         
15124         * decl.cs (MemberCore.Parent): Cannot be readonly.
15125
15126 2005-01-06  Raja R Harinath  <rharinath@novell.com>
15127
15128         * decl.cs (DeclSpace.ResolveType): Remove.
15129         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
15130         Merge in code from ...
15131         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
15132         * class.cs, enum.cs: Update to changes.
15133
15134 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
15135
15136         * anonymous.cs: Ensure that we init the scope of our parent if it
15137         has not been initialized yet.
15138
15139 2004-12-30  Duncan Mak  <duncan@ximian.com>
15140
15141         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
15142         if field.FieldBuilder is null. Fixes #70758.
15143
15144         * convert.cs: Fixed some typos and updated some of the comments.
15145         (ImplicitStandardConversionExists):
15146         (TryImplicitIntConversion): If `target_type' is an interface and
15147         the type of `ic' implements this interface, return true or a new
15148         BoxedCast instead of null. This fixes #70468.
15149
15150 2004-12-29  Duncan Mak  <duncan@ximian.com>
15151
15152         * expression.cs (Argument.Emit): Check that Expr is
15153         IMemoryLocation before casting to it, and report CS1510 otherwise.
15154
15155         This fixes #70402.
15156
15157 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
15158
15159         * statement.cs (Block.ThisVariable): remove the recursion here, to
15160         make the --profile more sane.
15161
15162 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
15163
15164         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
15165         assembly, by JB Evain.
15166
15167 2004-12-17  Raja R Harinath  <rharinath@novell.com>
15168
15169         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
15170           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
15171         "parent" refers to enclosing type/class.  "base" refers to superclass.
15172
15173 2004-12-17  Raja R Harinath  <rharinath@novell.com>
15174
15175         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
15176         Ensure that we only have GlobalAttributes.
15177         * attribute.cs (Attribute.Emit): Make non-virtual.
15178         (GlobalAttribute.Emit): Remove.
15179         (Attribute.Resolve): Make virtual.
15180         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
15181         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
15182         the argument. Don't create one.
15183         (Attribute.GetObsoleteAttribute): Likewise.
15184         (Attribute.GetClsCompliantAttributeValue): Likewise.
15185         * class.cs, decl.cs: Update to changes.
15186
15187 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
15188
15189         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
15190         
15191         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
15192         
15193         * statement.cs (Foreach.Resolve): Add error 186 report.
15194
15195 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
15196
15197         * expression.cs (Conditional.DoResolve): Add warning 429.
15198         
15199         * statement.cs (If.Resolve): Add warning 665.
15200
15201 2004-12-16  Raja R Harinath  <rharinath@novell.com>
15202
15203         New invariant: RootContext.Tree.Types.NamespaceEntry == null
15204         except when in the parser, and in GlobalAttribute.
15205         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
15206         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
15207         RootContext.Tree.Types.NamespaceEntry once work is done.
15208         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
15209         and resets RootContext.Tree.Types.NamespaceEntry.
15210
15211 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
15212
15213         * cs-parser.jay: Don't create a block for every variable.
15214
15215 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
15216
15217         * location.cs: Provide extra information.
15218
15219         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
15220         variables from the captured environment, it is the ldarg_0.
15221
15222 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
15223
15224         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
15225         find a conclusion.
15226         
15227         * class.cs: Changed warning level for 169 to avoid developer
15228         displeasure from warning flooding. It will be changed back when they
15229         fix most of current BCL warnings.
15230         
15231         * RootContext.cs: Pushed default WarningLevel to 3.
15232         
15233         * statement.cs: Removed unused variable.
15234
15235 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
15236
15237         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
15238         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
15239         Add error 502 report.
15240         (StaticClass.DefineType): Add error 441 report.
15241         (Class.AllowedModifiersProp): New virtual property as temporary
15242         extension to AllowedModifiers.
15243         (Class.DefineType): Add error 418 report. Moved ModFlags check here
15244         to share implementation with StaticClass and don't call virtual
15245         methods from ctor.
15246         
15247         * driver.cs (MainDriver): Add error 1558 test.
15248
15249         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
15250         report. Moved error 36 test here.
15251
15252         * statement.cs (Throw.Resolve): Add error 724 report.
15253
15254         * typemanager.cs: Add out_attribute_type core type.
15255         
15256 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
15257
15258         * class.cs (TypeContainer.VerifyClsCompliance): Add error
15259         3018 report.
15260         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
15261
15262         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
15263         3017 report.
15264         
15265         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
15266
15267         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
15268         Add error 3023 report.
15269         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
15270
15271         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
15272         implementation.
15273
15274 2004-12-12  John Luke  <john.luke@gmail.com>
15275
15276         * driver.cs (AddArgs): take -- into account when
15277         adding arguments, fixes bug 65710 
15278
15279 2004-12-12  Martin Baulig  <martin@ximian.com>
15280
15281         * expression.cs (Unary.TryReduceNegative): Added support for
15282         SByteConstant and ByteConstant.
15283         (Unary.Reduce): Check error values from TryReduceNegative().
15284
15285 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
15286
15287         * attributes.cs (Attribute.Resolve): Avoid multiple error report
15288         and report exception as error 182.
15289
15290 2004-12-10  Raja R Harinath  <rharinath@novell.com>
15291
15292         * driver.cs (Main): Fix message when there are warnings.
15293
15294 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
15295
15296         * delegate.cs: Fixed my fix from yesterday, sorry about that.
15297
15298 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
15299
15300         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
15301         Reduced number of warnings.
15302         
15303         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
15304
15305 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
15306
15307         * driver.cs: Removed message.
15308
15309         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
15310
15311 2004-12-08    <vargaz@freemail.hu>
15312
15313         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
15314
15315 2004-12-08  Martin Baulig  <martin@ximian.com>
15316
15317         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
15318         instead of a CS3002 for properties and indexer.
15319
15320 2004-12-08  Martin Baulig  <martin@ximian.com>
15321
15322         * decl.cs (MemberName.ToString): Make this work again.
15323
15324 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
15325
15326         * attribute.cs (Resolve): Add error 591 detection.
15327
15328         * class.cs (FieldMember.Define): Add error 1547 detection.
15329         (Indexer.Define): Add error 620 detection.
15330         (Operator.Define): Add error 590 detection.
15331
15332         * ecore.cs: Missing argument for error 79.
15333
15334         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
15335         detection.
15336
15337 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
15338
15339         Fix #70106
15340         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
15341         only.
15342
15343 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
15344
15345         * cs-parser.jay : handle doc comments on implicit/explicit operators.
15346           Some operator comments were suppressed.
15347         * doc.cs : Implicit/explicit operator name in doc comments are like
15348           "op_Explicit(type)~returnType", so added suffix handling.
15349
15350 2004-12-07  Martin Baulig  <martin@ximian.com>
15351
15352         * decl.cs
15353         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
15354         (MemberCore.GetClsCompliantAttributeValue): Likewise.
15355         (DeclSpace.ec): New protected field; store the EmitContext here.
15356         (DeclSpace.EmitContext): New public property; moved here from
15357         `TypeContainer'.
15358         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
15359         EmitContext.
15360
15361         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
15362         (Enum.Emit): Don't create a new EmitContext.
15363
15364         * delegate.cs (Delegate.DefineType): Always create the
15365         EmitContext.
15366
15367         * iterators.cs (Iterators.DefineIterator): Create a new
15368         EmitContext and store it in `ec'.
15369
15370 2004-08-24  Martin Baulig  <martin@ximian.com>
15371
15372         * typemanager.cs
15373         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
15374         this for accessibility checks.
15375         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
15376         IsNestedFamilyAccessible.
15377         (TypeManager.IsSubclassOf): New method, do what the name actually
15378         says.   
15379
15380 2004-12-06  Raja R Harinath  <rharinath@novell.com>
15381
15382         Fix crash on cs0657-17.cs.
15383         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
15384         Use RootContext.Tree.Types, not 'new RootTypes ()'.
15385         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
15386         the case where the NamespaceEntry gets overwritten.
15387
15388 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
15389
15390         Fixed #69195, #56821
15391         * ecore.cs (ResolveBoolean): Tiny refactoring.
15392
15393         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
15394         of right expression resolving when left is false constant and
15395         operator is LogicalAnd OR true constant and operator is LogicalOr.
15396
15397         * statement.cs (ResolveUnreachable): Always reports warning.
15398
15399 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
15400
15401         * class.cs: Distinguish between 1721 and 1722 (just a little help
15402         for the programmer).
15403
15404 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
15405
15406         * delegate.cs: Only allow this on new versions of the language. 
15407
15408 2004-12-02  Duncan Mak  <duncan@ximian.com>
15409
15410         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
15411         Expression class.
15412         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
15413         here as a static method. Take an additional bool out parameter
15414         `must_do_cs1540_check' for signaling to InstanceResolve.
15415         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
15416         member field from PropertyExpr class and made it an argument of
15417         the method instead.
15418         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
15419         check for MarshalByRefObject, and report CS0122 instead of CS1540.
15420         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
15421         and `remove_accessor' as well as InstanceResolve: report CS0122
15422         where applicable.
15423
15424         Fixes #70129.
15425
15426 2004-12-03  Raja R Harinath  <rharinath@novell.com>
15427
15428         Fix test-327.cs, test-328.cs, and put in early infrastructure
15429         for eventually fixing #52697.
15430         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
15431         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
15432         from other methods.
15433         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
15434         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
15435         (VerifyUsing, error246): Update.
15436         * rootcontext.cs (RootContext.NamespaceLookup): Just use
15437         'NamespaceEntry.LookupNamespaceOrType'.
15438
15439 2004-12-03  Martin Baulig  <martin@ximian.com>
15440
15441         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
15442         method as our child, call AnonymousMethod.Compatible() on it.
15443
15444 2004-12-03  Raja R Harinath  <rharinath@novell.com>
15445
15446         Disable XML documentation support in 'basic' profile.
15447         * decl.cs, class.cs [BOOTSTRAP_WITH_OLDLIB]: Don't import System.Xml.
15448         Redirect XmlElement to System.Object.
15449         * driver.cs, enum.cs, rootcontext.cs: Don't reference System.Xml.
15450         * doc.cs [BOOTSTRAP_WITH_OLDLIB]: Disable compile.
15451         * mcs.exe.sources: Add doc-bootstrap.cs.
15452         * doc-bootstrap.cs: New file.  Contains empty stub implementation
15453         of doc.cs.
15454
15455 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
15456
15457         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
15458           comments are allowed.
15459
15460 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
15461
15462         * delegate.cs: Add checks for subtypes in paramaters and return values
15463         in VerifyMethod () to add support for Covariance/Contravariance
15464         in delegates.
15465         
15466 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
15467
15468         * report.cs: Remove extra closing parenthesis.
15469
15470         * convert.cs (Error_CannotImplicitConversion): If the name of the
15471         types are the same, provide some extra information.
15472
15473         * class.cs (FieldBase): Use an unused bit field from the field to
15474         encode the `has_offset' property from the FieldMember.  This saves
15475         a couple of Ks on bootstrap compilation.
15476
15477         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
15478         method as our child, return the AnonymousMethod resolved
15479         expression.
15480
15481         * expression.cs (New.DoResolve): Allow return values from
15482         NewDelegate to also include AnonymousMethods.
15483
15484         Fixes #70150.
15485
15486 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
15487
15488         Fix bug #70102
15489         * attribute.cs (Resolve): Improved implementation of params
15490         attribute arguments.
15491
15492         * support.cs (ParameterData): Add HasParams to be faster.
15493
15494 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
15495
15496         all things are for /doc support:
15497
15498         * doc.cs: new file that supports XML documentation generation.
15499         * mcs.exe.sources: added doc.cs.
15500         * driver.cs:
15501           Handle /doc command line option.
15502           Report error 2006 instead of 5 for missing file name for /doc.
15503           Generate XML documentation when required, after type resolution.
15504         * cs-tokenizer.cs:
15505           Added support for picking up documentation (/// and /** ... */),
15506           including a new XmlCommentState enumeration.
15507         * cs-parser.jay:
15508           Added lines to fill Documentation element for field, constant,
15509           property, indexer, method, constructor, destructor, operator, event
15510           and class, struct, interface, delegate, enum.
15511           Added lines to warn incorrect comment.
15512         * rootcontext.cs :
15513           Added Documentation field (passed only when /doc was specified).
15514         * decl.cs:
15515           Added DocComment, DocCommentHeader, GenerateDocComment() and
15516           OnGenerateDocComment() and some supporting private members for
15517           /doc feature to MemberCore.
15518         * class.cs:
15519           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
15520         * delegate.cs:
15521           Added overriden DocCommentHeader.
15522         * enum.cs:
15523           Added overriden DocCommentHeader and GenerateDocComment().
15524
15525 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
15526
15527         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
15528         unwrapping the enumeration values, chain to
15529         DoConstantNumericPromotions again, so we can promote things to the
15530         fundamental types (takes care of enums that are bytes, sbytes).
15531
15532         Fixes bug #62054.
15533
15534 2004-12-01  Raja R Harinath  <rharinath@novell.com>
15535
15536         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
15537         Fix long-standing bug in type-lookup.  Use FindType instead of
15538         LookupType when ec.ResolvingTypeTree.
15539         (Attribute.ResolveType, Attribute.Resolve)
15540         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
15541         Update to changes.
15542         (Attributes.Search): Remove internal version.  Update.
15543         (Attributes.SearchMulti): Update.
15544         (Attributes.GetClsCompliantAttribute): Remove.
15545         (Attributes.GetIndexerNameAttribute): Remove.
15546         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
15547         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
15548         * class.cs (Indexer.Define): Likewise.
15549
15550 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
15551
15552         Fix bug #68790
15553         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
15554         MarshallByReference members access.
15555
15556         * expression.cs: Use CheckMarshallByRefAccess;
15557         Better error CS0197 message.
15558
15559         * report.cs: Print whole related error message.
15560
15561 2004-11-30  Raja R Harinath  <rharinath@novell.com>
15562
15563         * Makefile (mcs.exe) [PROFILE=default]: Keep a copy of mcs.exe in
15564         the current directory to help debugging.
15565
15566 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
15567
15568         * class (GetClassBases): Better error 60 report.
15569         (EventProperty): Disabled warning 67 detection.
15570
15571 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
15572
15573         Fix bug #60324
15574         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
15575
15576         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
15577         precise values.
15578
15579 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
15580
15581         Fix bug #49488
15582         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
15583
15584         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
15585
15586 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
15587
15588         * attribute.cs (Attribute.Resolve): Refine error reporting and
15589         report a cs0117 if the identifier does not exist, to distinguish
15590         from 0617 which is a miss-use of the actual identifier.
15591
15592         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
15593         between cs0070 and cs0079.
15594
15595         * class.cs (MemberBase.DoDefine): When reporting a wrong
15596         accessibility level, we use MethodCore to compare instead of
15597         Method (this was a regression in some refactoring effort).
15598
15599         So now we correctly report cs0056 again.
15600
15601         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
15602         testing the target_type (which was known to be object_type) and
15603         not the source type (which is anonymous_method).
15604
15605         Fixed reporting of error cs1660.
15606
15607         * expression.cs (UserCast.Source): Expose the underlying cast.
15608
15609         * statement.cs (Switch.SwitchGoverningType): Sort the list of
15610         allowed types to find a match to int32 first (most common).
15611
15612         In addition, it ignores any ImplicitUserConversions that did an
15613         internal implicit conversion (as the switch statement allows only
15614         one integral conversion to exist).
15615
15616         * class.cs (PartialContainer.Create): rename `name' to
15617         `member_name' for clarity.  Then replace the string calls with a
15618         call to MemberName.GetPartialName, as now using
15619         MemberName.ToString is an error (this is due to the side effects
15620         it had, that were fixed in the past).
15621
15622         This will restore the error reporting on a number of partial class
15623         errors that were missusing this (and getting an exception as a
15624         results, which is now just a plain textual warning, because
15625         yyparse debug output would crash otherwise).
15626
15627 2004-11-26  Raja R Harinath  <rharinath@novell.com>
15628
15629         * Makefile (PROGRAM_INSTALL_DIR): Remove.
15630
15631 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
15632
15633         * rootcontext.cs (LookupType): Make sure to cache lookups that
15634         don't give us a negative result. This saves about 5% of corlib
15635         compilation time.
15636
15637 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
15638
15639         * report.cs (AbstractMessage.Print): messages are sent to stderr
15640
15641         * class.cs (TypeContainer.GetClassBases): It is an error to have a
15642         non-interface in the list of interfaces (at this point, either
15643         parent was properly set, or a base class is being listed in the
15644         interfaces section).
15645
15646         This flags error 1722, and resolves the crash from bug 69259.
15647
15648 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
15649
15650         * statement.cs (Using.EmitExpressionFinally): make this work right
15651         for valuetypes. Fixes 69926.
15652
15653 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
15654
15655         * const.cs (Const.ChangeType): Cope with the "0 literal can be
15656         converted to an enum" here, before we try to change the underlying
15657         type.  This code exists, but it is a different code path than the
15658         one used while encoding constants.
15659
15660         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
15661         old bug: when converting from the null literal to a pointer,
15662         return an EmptyCast, not the NullLiteral.
15663
15664         This fixes #69921, the recent null_type changes probably made this
15665         bug more prominent.
15666
15667         (ImplicitReferenceConversionExists): In addition, resynchronized
15668         the code here, so it matches the same code in
15669         ImplicitReferenceConversionExists for the `from any class-type S
15670         to any interface-type T'.
15671         
15672
15673 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
15674
15675         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
15676
15677 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
15678
15679         * cs-parser.jay: Use verbosity accordingly. 
15680
15681 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
15682
15683         * expression.cs (Unary.ResolveOperator): Do not report warning;
15684         AddressOf reads from variable.
15685         
15686         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
15687
15688 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
15689
15690         Fix bug #69462
15691
15692         * attribute.cs (Attributable): Removed CheckTargets.
15693         (Attributes.Emit): Explicit attribute targets are tested here.
15694
15695         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
15696         not enabled for interfaces.
15697
15698         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
15699         (GetAssemblyName): Ouch next bug there.
15700
15701 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
15702
15703         * expression.cs: Error 275 added.
15704         
15705 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
15706
15707         Fix bug #69177 (Implemented decimal constant support)
15708
15709         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
15710         (BinaryFold): Add DecimalConstant.
15711
15712         * const.cs (Define): Decimal constant 
15713         (is not constant.
15714         (ChangeType): Add decimal type handling.
15715         (LookupConstantValue): Don't set value for decimal type but
15716         emit DecimalConstantAttribute. Needed for constant optimization.
15717
15718         * constant.cs (ToDecimal): New method.
15719         (ConvertToDecimal): New method.
15720         (IntConstant): Implemented ConvertToDecimal.
15721         (DecimalConstant.Emit): Emit optimized version for decimals in
15722         int range.
15723
15724         * expression.cs (ResolveOperator): Changed order of constant
15725         reduction to work correctly with native types which have
15726         overloaded operators.
15727         (ResolveMemberAccess): Extract constant value from attribute
15728         for decimal type.
15729
15730         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
15731
15732         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
15733         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
15734         (ChangeType): Decimal is special.
15735         (TypeToCoreType): Add decimal type.
15736
15737 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
15738
15739         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
15740         decimal types.
15741
15742 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
15743
15744         * class.cs (EventField.ApplyAttributeBuilder): Fix error
15745         test cs1667-5.cs.
15746
15747 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
15748
15749         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
15750
15751         * pending.cs (PendingImplementation): Grab only interfaces.
15752
15753 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
15754
15755         * statement.cs (ForeachHelperMethods): Add location member and
15756         error 202 detection.
15757
15758 2004-11-19  Raja R Harinath  <rharinath@novell.com>
15759
15760         * Makefile (EXTRA_DISTFILES): Remove mcs.exe.config.  It's
15761         automatically handled by executable.make.
15762         (PROGRAM): Make profile-specific.
15763
15764 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
15765
15766         * expression.cs (DoResolveBase): Fixed wrong warning for out
15767         variables.
15768
15769 2004-11-18  Martin Baulig  <martin@ximian.com>
15770
15771         Merged latest changes into gmcs.  Please keep this comment in
15772         here, it makes it easier for me to see what changed in MCS since
15773         the last time I merged.
15774
15775 2004-11-17  Raja R Harinath  <rharinath@novell.com>
15776
15777         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
15778         (TypeHandle.GetMemberCache): New.
15779         (TypeHandle.TypeHandle): Update.
15780         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
15781         (TypeManager.LookupParentInterfacesCache):
15782         Rename from LookupInterfaceCache.  Optimize slightly.
15783         (TypeManager.MemberLookup_FindMembers): Update.
15784         * decl.cs (MemberCache.MemberCache): Set Container to null in the
15785         multi-type variant.
15786         (AddCacheContents): Rename from AddHashtable.
15787         * class.cs (TypeContainer.parent_container): Remove.
15788         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
15789         (TypeContainer.DoDefineMembers): Don't initialize it.
15790         Update to name changes.
15791         
15792 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
15793
15794         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
15795         that factors the code to check access modifiers on override.  
15796
15797         (PropertyBase): Use the code here.
15798
15799         Patch from Lluis S'anchez, fixes bug #69361.
15800
15801 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
15802
15803         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
15804         routine that is used to report the use of a captured variable
15805         whose address has been taken.
15806
15807         There are two checks: one when variables are being captured and
15808         the other check is when the address of a variable is taken. 
15809         
15810         (because an anonymous methods might be resolved before *or* after
15811         the address has been taken) and 
15812
15813         * expression.cs (Conditional.DoResolve): Remove the special
15814         casing that Martin added to trueExpr and falseExpr being both
15815         NullLiteral.  We get the right behavior now just by introducing
15816         the null_type into the compiler. 
15817
15818         * convert.cs (ExplicitConversion): Change the code to use
15819         null_type instead of testing `expr is NullLiteral'.
15820         (ImplicitConversionStandard): use null_type too.
15821         (ImplicitReferenceConversionExists): use null_type too.
15822         (ImplicitReferenceConversion): use null_type too.
15823
15824         * literal.cs: The type of `NullLiteral' is now null_type instead
15825         of object_type. 
15826         (Resolve): Set the type here.
15827
15828         * typemanager.cs: Introduce null_type.
15829
15830 2004-11-17  Martin Baulig  <martin@ximian.com>
15831
15832         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
15833         direction, like FindMembers() does.  Fixes #69546, testcase is in
15834         test-315.cs.    
15835
15836 2004-11-16  Martin Baulig  <martin@ximian.com>
15837
15838         This is based on a patch from Marek Safar, see bug #69082.
15839         Fixes bugs #63705 and #67130.
15840
15841         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
15842         method; create a MemberCache for an interface type and cache the
15843         result.
15844
15845         * decl.cs (IMemberContainer.ParentContainer): Removed.
15846         (IMemberContainer.ParentCache): New property.
15847         (MemberCache.SetupCacheForInterface): Removed.
15848         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
15849         to create a cache for an interface's "parent".
15850
15851         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
15852         interfaces too.
15853
15854 2004-11-16  Martin Baulig  <martin@ximian.com>
15855
15856         Merged back from gmcs; these changes already went into gmcs a
15857         couple of weeks ago.
15858
15859         * typemanager.cs
15860         (TypeManager.AddUserType): Removed the `ifaces' argument.
15861         (TypeManager.RegisterBuilder): Take a `Type []' instead of a
15862         `TypeExpr []'.
15863         (TypeManager.AddUserInterface): Removed.
15864         (TypeManager.ExpandInterfaces): Return a `Type []' instead of a
15865         `TypeExpr []'.
15866         (TypeManager.GetInterfaces): Likewise.
15867         (TypeManager.GetExplicitInterfaces): Likewise.
15868
15869         * ecore.cs (TypeExpr.GetInterfaces): Removed.
15870
15871         * class.cs (TypeContainer.base_class_type): Replaced with `ptype'.
15872         (TypeContainer.base_inteface_types): Replaced with `ifaces'.
15873
15874 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
15875
15876         * statement.cs: Avoid adding bools to a hashtable.
15877
15878 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
15879
15880         * expression.cs (Invocation.OverloadResolve): Flag error if we are
15881         calling an unsafe method from a safe location.
15882
15883 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
15884
15885         Fix #69167
15886         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
15887
15888 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
15889
15890         * namespace.cs (VerifyUsing): use GetPartialName instead of
15891         ToString. 
15892
15893 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
15894
15895         * statement.cs (Return.Resolve): Fix regression in typo: if
15896         `in_exc', we have to request a NeedReturnLabel, this was a typo
15897         introduced in the anonymous method check-in.  Fixes #69131.
15898
15899         * Indexers were using the ShortName when defining themselves,
15900         causing a regression in the compiler bootstrap when applying the
15901         patch from 2004-11-02 (first part), now they use their full name
15902         and the bug is gone.
15903
15904 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
15905
15906         * driver.cs: Strip the path from the names of embedded resources. Fixes
15907         #68519.
15908
15909 2004-11-04  Raja R Harinath  <rharinath@novell.com>
15910
15911         Fix error message regression: cs0104-2.cs.
15912         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
15913         (AliasEntry.Resolve): Update.
15914         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
15915         'silent' flag.
15916         (RootContext.LookupType): Update.
15917
15918 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
15919
15920         * cs-parser.jay: Add support for handling accessor modifiers
15921         * class: Add support port accessor modifiers and error checking,
15922         define PropertyMethod.Define as virtual (not abstract anymore)
15923         * ecore.cs: Add checking for proeprties access with access modifiers
15924         * iterators.cs: Modify Accessor constructor call based in the modified
15925         constructor
15926 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
15927
15928         * expression.cs (StringConcat): Handle being called twice,
15929         as when we have a concat in a field init with more than two
15930         ctors in the class
15931
15932 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
15933
15934         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
15935         special case explicit implementations, we should always produce
15936         the .property or .event declaration.
15937         
15938         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
15939         since it will not return correct data if people use this
15940         unresolved in the presence of using statements (see test-313).
15941
15942         * class.cs (MethodData.Define): If we are an explicit interface
15943         implementation, set the method name to the full name of the
15944         interface plus the name of the method.  
15945
15946         Notice that using the method.MethodName.GetFullName() does not
15947         work, as it will only contain the name as declared on the source
15948         file (it can be a shorthand in the presence of using statements)
15949         and not the fully qualifed type name, for example:
15950
15951         using System;
15952
15953         class D : ICloneable {
15954                 object ICloneable.Clone ()  {
15955                 }
15956         }
15957
15958         Would produce a method called `ICloneable.Clone' instead of
15959         `System.ICloneable.Clone'.
15960
15961         * namespace.cs (Alias.Resolve): Use GetPartialName.
15962         
15963 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
15964
15965         * cs-parser.jay: Add error 1055 report.
15966
15967 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
15968
15969         * assign.cs (Assign.DoResolve): Only do the transform of
15970         assignment into a New if the types are compatible, if not, fall
15971         through and let the implicit code deal with the errors and with
15972         the necessary conversions. 
15973
15974 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
15975
15976         * cs-parser.jay: Add error 1031 report.
15977
15978         * cs-tokenizer.cs: Add location for error 1038.
15979
15980 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
15981
15982         * cs-parser.jay: Add error 1016 report.
15983
15984 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
15985
15986         * cs-parser.jay: Add errors 1575,1611 report.
15987
15988 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
15989
15990         * cs-parser.jay: Add error 1001 report.
15991
15992 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
15993
15994         Fix #68850
15995         * attribute.cs (GetMarshal): Add method argument for
15996         caller identification.
15997
15998         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
15999         agument for GetMarshal and RuntimeMissingSupport.
16000
16001 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16002
16003         * attribute.cs (ExtractSecurityPermissionSet): Removed
16004         TypeManager.code_access_permission_type.
16005
16006         * typemanager.cs: Removed TypeManager.code_access_permission_type.
16007
16008 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
16009
16010         * expression.cs (LocalVariableReference.DoResolveLValue): Check
16011         for obsolete use of a variable here.   Fixes regression on errors
16012         cs0619-25 and cs0619-26.
16013
16014 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
16015
16016         Fix #62358, implemented security attribute encoding.
16017
16018         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
16019         Tests permitted SecurityAction for assembly or other types.
16020         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
16021         data from SecurityPermissionAttribute to PermisionSet class.
16022
16023         * class.cs (ApplyAttributeBuilder): Added special handling
16024         for System.Security.Permissions.SecurityAttribute based types.
16025
16026         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
16027         special handling for System.Security.Permissions.SecurityAttribute
16028         based types.
16029
16030         * enum.cs (ApplyAttributeBuilder): Added special handling
16031         for System.Security.Permissions.SecurityAttribute based types.
16032
16033         * parameter.cs (ApplyAttributeBuilder): Added special handling
16034         for System.Security.Permissions.SecurityAttribute based types.
16035
16036         * rootcontext.cs: Next 2 core types.
16037
16038         * typemanager.cs (TypeManager.security_permission_attr_type):
16039         Built in type for the SecurityPermission Attribute.
16040         (code_access_permission_type): Build in type.
16041
16042 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
16043
16044         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
16045         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
16046         all of this information into
16047         EmitContext.EmitCapturedVariableInstance.
16048         
16049         * codegen.cs (EmitCapturedVariableInstance): move here the
16050         funcionality of emitting an ldarg.0 in the presence of a
16051         remapping.   This centralizes the instance emit code.
16052
16053         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
16054         then emit a load of this: it means that we have reached the
16055         topmost ScopeInfo: the one that contains the pointer to the
16056         instance of the class hosting the anonymous method.
16057
16058         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
16059         captures to the topmost CaptureContext.
16060
16061 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
16062
16063         * expression.cs (LocalVariableReference): Move the knowledge about
16064         the iterators into codegen's EmitCapturedVariableInstance.
16065
16066 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
16067
16068         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
16069         all code paths return a value from an anonymous method (it is the
16070         same as the 161 error, but for anonymous methods).
16071
16072 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
16073
16074         The introduction of anonymous methods in the compiler changed
16075         various ways of doing things in the compiler.  The most
16076         significant one is the hard split between the resolution phase
16077         and the emission phases of the compiler.
16078
16079         For instance, routines that referenced local variables no
16080         longer can safely create temporary variables during the
16081         resolution phase: they must do so from the emission phase,
16082         since the variable might have been "captured", hence access to
16083         it can not be done with the local-variable operations from the runtime.
16084         
16085         * statement.cs 
16086
16087         (Block.Flags): New flag `IsTopLevel' to indicate that this block
16088         is a toplevel block.
16089
16090         (ToplevelBlock): A new kind of Block, these are the blocks that
16091         are created by the parser for all toplevel method bodies.  These
16092         include methods, accessors and anonymous methods.
16093
16094         These contain some extra information not found in regular blocks:
16095         A pointer to an optional CaptureContext (for tracking captured
16096         local variables and parameters).  A pointer to the parent
16097         ToplevelBlock.
16098         
16099         (Return.Resolve): Catch missmatches when returning a value from an
16100         anonymous method (error 1662).
16101         Invoke NeedReturnLabel from the Resolve phase instead of the emit
16102         phase.
16103
16104         (Break.Resolve): ditto.
16105
16106         (SwitchLabel): instead of defining the labels during the
16107         resolution phase, we now turned the public ILLabel and ILLabelCode
16108         labels into methods called GetILLabelCode() and GetILLabel() that
16109         only define the label during the Emit phase.
16110
16111         (GotoCase): Track the SwitchLabel instead of the computed label
16112         (its contained therein).  Emit the code by using
16113         SwitchLabel.GetILLabelCode ().
16114
16115         (LocalInfo.Flags.Captured): A new flag has been introduce to track
16116         whether the Local has been captured or not.
16117
16118         (LocalInfo.IsCaptured): New property, used to tell whether the
16119         local has been captured.
16120         
16121         * anonymous.cs: Vastly updated to contain the anonymous method
16122         support.
16123
16124         The main classes here are: CaptureContext which tracks any
16125         captured information for a toplevel block and ScopeInfo used to
16126         track the activation frames for various local variables.   
16127
16128         Each toplevel block has an optional capture context associated
16129         with it.  When a method contains an anonymous method both the
16130         toplevel method and the anonymous method will create a capture
16131         context.   When variables or parameters are captured, they are
16132         recorded on the CaptureContext that owns them, for example:
16133
16134         void Demo () {
16135              int a;
16136              MyDelegate d = delegate {
16137                  a = 1;
16138              }
16139         }
16140
16141         Here `a' will be recorded as captured on the toplevel
16142         CapturedContext, the inner captured context will not have anything
16143         (it will only have data if local variables or parameters from it
16144         are captured in a nested anonymous method.
16145
16146         The ScopeInfo is used to track the activation frames for local
16147         variables, for example:
16148
16149         for (int i = 0; i < 10; i++)
16150                 for (int j = 0; j < 10; j++){
16151                    MyDelegate d = delegate {
16152                         call (i, j);
16153                    }
16154                 }
16155
16156         At runtime this captures a single captured variable `i', but it
16157         captures 10 different versions of the variable `j'.  The variable
16158         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
16159         recorded on a child.  
16160
16161         The toplevel ScopeInfo will also track information like the `this'
16162         pointer if instance variables were referenced (this is necessary
16163         as the anonymous method lives inside a nested class in the host
16164         type of the method). 
16165
16166         (AnonymousMethod): Expanded to track the Toplevel, implement
16167         `AnonymousMethod.Compatible' to tell whether an anonymous method
16168         can be converted to a target delegate type. 
16169
16170         The routine now also produces the anonymous method content
16171
16172         (AnonymousDelegate): A helper class that derives from
16173         DelegateCreation, this is used to generate the code necessary to
16174         produce the delegate for the anonymous method that was created. 
16175
16176         * assign.cs: API adjustments for new changes in
16177         Convert.ImplicitStandardConversionExists.
16178
16179         * class.cs: Adjustments to cope with the fact that now toplevel
16180         blocks are of type `ToplevelBlock'. 
16181
16182         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
16183         insteda of standard blocks.
16184
16185         Flag errors if params arguments are passed to anonymous methods.
16186
16187         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
16188         `CurrentAnonymousMethod' which points to the current Anonymous
16189         Method.  The variable points to the AnonymousMethod class that
16190         holds the code being compiled.  It is set in the new EmitContext
16191         created for the anonymous method.
16192
16193         (EmitContext.Phase): Introduce a variable and an enumeration to
16194         assist in enforcing some rules about when and where we are allowed
16195         to invoke certain methods (EmitContext.NeedsReturnLabel is the
16196         only one that enfonces this right now).
16197
16198         (EmitContext.HaveCaptureInfo): new helper method that returns
16199         whether we have a CapturedContext initialized.
16200
16201         (EmitContext.CaptureVariable): New method used to register that a
16202         LocalInfo must be flagged for capturing. 
16203
16204         (EmitContext.CapturedParameter): New method used to register that a
16205         parameters must be flagged for capturing. 
16206         
16207         (EmitContext.CapturedField): New method used to register that a
16208         field must be flagged for capturing. 
16209
16210         (EmitContext.HaveCapturedVariables,
16211         EmitContext.HaveCapturedFields): Return whether there are captured
16212         variables or fields. 
16213
16214         (EmitContext.EmitMethodHostInstance): This is used to emit the
16215         instance for the anonymous method.  The instance might be null
16216         (static methods), this (for anonymous methods that capture nothing
16217         and happen to live side-by-side with the current method body) or a
16218         more complicated expression if the method has a CaptureContext.
16219
16220         (EmitContext.EmitTopBlock): Routine that drives the emission of
16221         code: it will first resolve the top block, then emit any metadata
16222         and then emit the code.  The split is done so that we can extract
16223         any anonymous methods and flag any captured variables/parameters.
16224         
16225         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
16226         during this phase, the ILGenerator should not be used as labels
16227         and local variables declared here might not be accessible to any
16228         code that is part of an anonymous method.  
16229
16230         Exceptions to this include the temporary variables that are
16231         created by some statements internally for holding temporary
16232         variables. 
16233         
16234         (EmitContext.EmitMeta): New routine, in charge of emitting all the
16235         metadata for a cb
16236
16237         (EmitContext.TemporaryReturn): This method is typically called
16238         from the Emit phase, and its the only place where we allow the
16239         ReturnLabel to be defined other than the EmitMeta.  The reason is
16240         that otherwise we would have to duplicate a lot of logic in the
16241         Resolve phases of various methods that today is on the Emit
16242         phase. 
16243
16244         (EmitContext.NeedReturnLabel): This no longer creates the label,
16245         as the ILGenerator is not valid during the resolve phase.
16246
16247         (EmitContext.EmitThis): Extended the knowledge in this class to
16248         work in anonymous methods in addition to iterators. 
16249
16250         (EmitContext.EmitCapturedVariableInstance): This emits whatever
16251         code is necessary on the stack to access the instance to a local
16252         variable (the variable will be accessed as a field).
16253
16254         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
16255         EmitContext.EmitAddressOfParameter): Routines to support
16256         parameters (not completed at this point). 
16257         
16258         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
16259         will also remove the parameters.
16260
16261         * convert.cs (Convert): Define a `ConstantEC' which points to a
16262         null.  This is just to prefity some code that uses
16263         ImplicitStandardConversion code and do not have an EmitContext
16264         handy.
16265
16266         The idea is to flag explicitly that at that point in time, it is
16267         known that the conversion will not trigger the delegate checking
16268         code in implicit conversions (which requires a valid
16269         EmitContext). 
16270
16271         Everywhere: pass new EmitContext parameter since
16272         ImplicitStandardConversionExists now requires it to check for
16273         anonymous method conversions. 
16274
16275         (Convert.ImplicitStandardConversionExists): If the type of an
16276         expression is the anonymous_method_type, and the type is a
16277         delegate, we invoke the AnonymousMethod.Compatible method to check
16278         whether an implicit conversion is possible. 
16279
16280         (Convert.ImplicitConversionStandard): Only do implicit method
16281         group conversions if the language level is not ISO_1.
16282
16283         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
16284         MethodInfo for the Invoke method.  used by Delegate and
16285         AnonymousDelegate.
16286
16287         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
16288         method conversions if the target type is a delegate.
16289
16290         Removed extra debugging nops.
16291
16292         (LocalVariableReference): Turn the `local_info' into a public
16293         field. 
16294
16295         Add `prepared' field, the same hack used for FieldExprs to cope
16296         with composed assignments, as Local variables do not necessarily
16297         operate purely on the stack as they used to: they can be captured
16298         fields. 
16299
16300         Add `temp' for a temporary result, like fields.
16301
16302         Refactor DoResolve and DoResolveLValue into DoResolveBase.
16303
16304         It now copes with Local variables that are captured and emits the
16305         proper instance variable to load it from a field in the captured
16306         case. 
16307
16308         (ParameterReference.DoResolveBase): During the resolve phase,
16309         capture parameters if we are in an anonymous method.
16310
16311         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
16312         anonymous method, use the EmitContext helper routines to emit the
16313         parameter reference.
16314
16315         * iterators.cs: Set RemapToProxy to true/false during the
16316         EmitDispose class.
16317
16318         * parameters.cs (GetParameterByName): New helper method. 
16319
16320         * typemanager.cs (anonymous_method_type) a new type that
16321         represents an anonyous method.  This is always an internal type,
16322         used as a fencepost to test against the anonymous-methodness of an
16323         expression. 
16324         
16325 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
16326
16327         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
16328         561 report.
16329         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
16330
16331 2004-10-18  Martin Baulig  <martin@ximian.com>
16332
16333         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
16334         `Type' directly, but call ResolveType() on it.
16335         (Catch.Resolve): Likewise.
16336         (Foreach.Resolve): Likewise.
16337
16338 2004-10-18  Martin Baulig  <martin@ximian.com>
16339
16340         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
16341         `Type' directly, but call ResolveType() on it.
16342         (Probe.DoResolve): Likewise.
16343         (ArrayCreation.LookupType): Likewise.
16344         (TypeOf.DoResolve): Likewise.
16345         (SizeOf.DoResolve): Likewise.
16346
16347 2004-10-18  Martin Baulig  <martin@ximian.com>
16348
16349         * expression.cs (Invocation.BetterFunction): Put back
16350         TypeManager.TypeToCoreType().
16351
16352 2004-10-18  Raja R Harinath  <rharinath@novell.com>
16353
16354         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
16355         the ResolveType.
16356
16357 2004-10-18  Martin Baulig  <martin@ximian.com>
16358
16359         * parameter.cs (Parameter.Resolve):  Don't access the TypeExpr's
16360         `Type' directly, but call ResolveType() on it.
16361
16362 2004-10-18  Martin Baulig  <martin@ximian.com>
16363
16364         * class.cs (FieldMember.Define): Don't access the TypeExpr's
16365         `Type' directly, but call ResolveType() on it.
16366         (MemberBase.DoDefine): Likewise.
16367
16368         * expression.cs (New.DoResolve): Don't access the TypeExpr's
16369         `Type' directly, but call ResolveType() on it.
16370         (ComposedCast.DoResolveAsTypeStep): Likewise.
16371
16372         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
16373         `Type' directly, but call ResolveType() on it.
16374
16375 2004-10-17  John Luke  <john.luke@gmail.com>
16376
16377         * class.cs (Operator.GetSignatureForError): use CSharpName
16378
16379         * parameter.cs (Parameter.GetSignatureForError): Returns
16380         correct name even if was not defined.
16381
16382 2004-10-13  Raja R Harinath  <rharinath@novell.com>
16383
16384         Fix #65816.
16385         * class.cs (TypeContainer.EmitContext): New property.
16386         (DefineNestedTypes): Create an emitcontext for each part.
16387         (MethodCore.DoDefineParameters): Use container's emitcontext.
16388         Pass type array to InternalParameters.
16389         (MemberBase.DoDefine): Use container's emitcontext.
16390         (FieldMember.Define): Likewise.
16391         (Event.Define): Likewise.
16392         (SetMethod.GetParameterInfo): Change argument to EmitContext.
16393         Pass type array to InternalParameters.
16394         (SetIndexerMethod.GetParameterInfo): Likewise.
16395         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
16396         * delegate.cs (Define): Pass emitcontext to
16397         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
16398         array to InternalParameters.
16399         * expression.cs (ParameterReference.DoResolveBase): Pass
16400         emitcontext to GetParameterInfo.
16401         (ComposedCast.DoResolveAsTypeStep): Remove check on
16402         ec.ResolvingTypeTree.
16403         * parameter.cs (Parameter.Resolve): Change argument to
16404         EmitContext.  Use ResolveAsTypeTerminal.
16405         (Parameter.GetSignature): Change argument to EmitContext.
16406         (Parameters.ComputeSignature): Likewise.
16407         (Parameters.ComputeParameterTypes): Likewise.
16408         (Parameters.GetParameterInfo): Likewise.
16409         (Parameters.ComputeAndDefineParameterTypes): Likewise.
16410         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
16411         * support.cs (InternalParameters..ctor): Remove variant that takes
16412         a DeclSpace.
16413         * typemanager.cs (system_intptr_expr): New.
16414         (InitExpressionTypes): Initialize it.
16415
16416 2004-10-12  Chris Toshok  <toshok@ximian.com>
16417
16418         * cs-parser.jay: fix location for try_statement and catch_clause.
16419
16420 2004-10-11  Martin Baulig  <martin@ximian.com>
16421
16422         * report.cs: Don't make --fatal abort on warnings, we have
16423         -warnaserror for that.
16424
16425 2004-10-07  Raja R Harinath  <rharinath@novell.com>
16426
16427         More DeclSpace.ResolveType avoidance.
16428         * decl.cs (MemberCore.InUnsafe): New property.
16429         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
16430         with newly created EmitContext.
16431         (FieldMember.Define): Likewise.
16432         * delegate.cs (Delegate.Define): Likewise.
16433         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
16434         only if normal name-lookup fails.
16435         (TypeExpr.DoResolve): Enable error-checking.
16436         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
16437         (SizeOf.DoResolve): Likewise.
16438         (ComposedCast.DoResolveAsTypeStep): Likewise.
16439         (StackAlloc.DoResolve): Likewise.
16440         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
16441         (Block.Unsafe): New property.
16442         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
16443         (Unsafe): Set 'unsafe' flag of contained block.
16444         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
16445         (Fixed.Resolve): Likewise.
16446         (Catch.Resolve): Likewise.
16447         (Using.ResolveLocalVariableDecls): Likewise.
16448         (Foreach.Resolve): Likewise.
16449
16450 2004-10-05  John Luke <john.luke@gmail.com>
16451
16452         * cs-parser.jay: add location to error CS0175
16453
16454 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
16455
16456         * ecore.cs (Expression.Constantity): Add support for turning null
16457         into a constant.
16458
16459         * const.cs (Const.Define): Allow constants to be reference types
16460         as long as the value is Null.
16461
16462 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
16463
16464         * namespace.cs (NamespaceEntry.Using): No matter which warning
16465         level is set, check if this namespace name has already been added.
16466
16467 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
16468
16469         * expression.cs: reftype [!=]= null should always use br[true,false].
16470         # 67410
16471
16472 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
16473
16474         Fix #67108
16475         * attribute.cs: Enum conversion moved to 
16476         GetAttributeArgumentExpression to be applied to the all
16477         expressions.
16478
16479 2004-10-01  Raja R Harinath  <rharinath@novell.com>
16480
16481         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
16482         * class.c (TypeContainer.DefineType): Flag error if
16483         base types aren't accessible due to access permissions.
16484         * decl.cs (DeclSpace.ResolveType): Move logic to
16485         Expression.ResolveAsTypeTerminal.
16486         (DeclSpace.ResolveTypeExpr): Thin layer over
16487         Expression.ResolveAsTypeTerminal.
16488         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
16489         Refactor code into NestedAccess.  Use it.
16490         (DeclSpace.NestedAccess): New.
16491         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
16492         argument to silence errors.  Check access permissions.
16493         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
16494         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
16495         (Cast.DoResolve): Likewise.
16496         (New.DoResolve): Likewise.
16497         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
16498         (TypeOf.DoResolve): Likewise.
16499
16500         * expression.cs (Invocation.BetterConversion): Return the Type of
16501         the better conversion.  Implement section 14.4.2.3 more faithfully.
16502         (Invocation.BetterFunction): Make boolean.  Make correspondence to
16503         section 14.4.2.2 explicit.
16504         (Invocation.OverloadResolve): Update.
16505         (Invocation): Remove is_base field.
16506         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
16507         (Invocation.Emit): Likewise.
16508
16509 2004-09-27  Raja R Harinath  <rharinath@novell.com>
16510
16511         * README: Update to changes.
16512
16513 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
16514
16515         * cs-parser.jay: Reverted 642 warning fix.
16516
16517 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16518
16519         Fix bug #66615
16520         * decl.cs (FindMemberWithSameName): Indexer can have more than
16521         1 argument.
16522
16523 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16524
16525         * expression.cs (LocalVariableReference.DoResolveLValue):
16526         Do not report warning 219 for out values.
16527         (EmptyExpression.Null): New member to avoid extra allocations.
16528
16529 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16530
16531         * cs-parser.jay: Fix wrong warning 642 report.
16532
16533         * cs-tokenizer.cs (CheckNextToken): New helper;
16534         Inspect next character if is same as expected.
16535
16536 2004-09-23  Martin Baulig  <martin@ximian.com>
16537
16538         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
16539         (Convert.ImplicitReferenceConversionExists): Likewise.
16540
16541 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16542
16543         * class.cs (Operator.Define): Add error 448 and 559 report.
16544
16545 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
16546
16547         * class.cs (MemberBase.IsTypePermitted): New protected
16548         method for checking error CS0610.
16549
16550 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
16551
16552         * class.cs (TypeContainer.HasExplicitLayout): New property
16553         Returns whether container has StructLayout attribute set Explicit.
16554         (FieldMember): New abstract class for consts and fields.
16555         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
16556         (Field): Reuse FieldMember.
16557
16558         * const.cs (Const): Reuse FieldMember.
16559
16560         * rootcontext.cs: EmitConstants call moved to class.
16561
16562 2004-09-22  Martin Baulig  <martin@ximian.com>
16563
16564         Thanks to Peter Sestoft for this bug report.
16565
16566         * expression.cs (Conditional): If both the `trueExpr' and the
16567         `falseExpr' is a NullLiteral, return a NullLiteral.
16568
16569 2004-09-22  Martin Baulig  <martin@ximian.com>
16570
16571         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
16572         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
16573         for the "get_Current" call.
16574
16575 2004-09-22  Martin Baulig  <martin@ximian.com>
16576
16577         Marek and me just fixed one of our oldest bugs: #28562 :-)
16578
16579         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
16580
16581         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
16582         we're an EnumConstant, just return that.
16583         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
16584         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
16585         to get the value which'll actually be written into the attribute.
16586         However, we have to use GetValue() to access the attribute's value
16587         in the compiler.        
16588
16589 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
16590
16591         * constant.cs (Constant.IsNegative): New abstract property
16592         IsNegative.
16593
16594         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
16595         (StackAlloc.DoResolve): Reused IsNegative.
16596
16597 2004-09-21  Martin Baulig  <martin@ximian.com>
16598
16599         * codegen.cs (VariableStorage): Don't store the ILGenerator here;
16600         if we're used in an iterator, we may be called from different
16601         methods.
16602
16603         * statement.cs (Foreach.EmitFinally): Only emit an `Endfinally' if
16604         we actually have an exception block.
16605
16606 2004-09-20  John Luke <jluke@cfl.rr.com>
16607
16608         * class.cs, cs-parser.jay: Improve the error report for 1520:
16609         report the actual line where the error happens, not where the
16610         class was declared.
16611
16612         * assign.cs, delegate.cs, ecore.cs, expression.cs, statement.cs:
16613         Pass location information that was available elsewhere.
16614
16615 2004-09-19  Sebastien Pouliot  <sebastien@ximian.com>
16616
16617         * codegen.cs: Fix bug #56621. It is now possible to use MCS on the MS
16618         runtime to delay sign assemblies.
16619
16620 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
16621
16622         * cs-parser.jay: Do not report the stack trace, this is barely
16623         used nowadays.
16624
16625 2004-08-22  John Luke  <john.luke@gmail.com>
16626  
16627         * driver.cs : check that a resource id is not already used
16628         before adding it, report CS1508 if it is, bug #63637
16629
16630 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
16631
16632         * ecore.cs: Removed dead code.
16633
16634 2004-09-18  Marek Safar  <marek.safar@seznam.cz>
16635
16636         * class.cs: Do not report warning CS0067 on the interfaces.
16637
16638 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
16639
16640         * cs-parser.jay: Add error 504 report.
16641
16642 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
16643
16644         * rootcontext.cs: WarningLevel is 4 by default now.
16645
16646         * statement.cs (Fixed.Resolve): Do not null
16647         VariableInfo.
16648
16649 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
16650
16651         Fixed bug #55780
16652         * ecore.cs (PropertyExpr.FindAccessors): Do not perform
16653         deep search when property is not virtual.
16654         (PropertyExpr.ResolveAccessors): Make one call for both
16655         accessors.
16656
16657 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
16658
16659         Fixed bug #65766
16660         * statement.cs: Error 152 report constains also location.
16661
16662 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
16663
16664         Fixed bug #65766
16665         * const.cs: Explicitly set constant as static.
16666
16667 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
16668
16669         Fixed bug #64226
16670         * cs-parser.jay: Add error 1017 report.
16671
16672 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
16673
16674         Fixed bug #59980, #64224
16675         * expression.cs (Invocation.DoResolve): Fixed error CS0571 test.
16676
16677         * typemanager.cs (IsSpecialMethod): Simplified
16678
16679 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
16680
16681         * decl.cs (MemberCore.Emit): Resuscitated VerifyObsoleteAttribute
16682         condition with better params.
16683
16684 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
16685
16686         Fixed bug #65238
16687         * attribute.cs (Resolve): Property has to have both
16688         accessors.
16689
16690 2004-09-14  Martin Baulig  <martin@ximian.com>
16691
16692         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
16693
16694 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
16695
16696         Fixed bug #61902
16697         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
16698         called and is obsolete then this member suppress message
16699         when call is inside next [Obsolete] method or type.
16700
16701         * expression.cs: Use TestObsoleteMethodUsage member.
16702
16703 2004-09-14  Martin Baulig  <martin@ximian.com>
16704
16705         * cs-parser.jay: Sync a bit with the GMCS version.
16706
16707 2004-09-14  Martin Baulig  <martin@ximian.com>
16708
16709         * cs-parser.jay (CSharpParser): Don't derive from GenericsParser.
16710         (CSharpParser.yacc_verbose_flag): New public field.
16711
16712         * genericparser.cs: Removed.
16713
16714 2004-09-14  Raja R Harinath  <rharinath@novell.com>
16715
16716         * cs-parser.jay (event_declaration): Re-enable cs0071 error.
16717
16718 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
16719
16720         * class.cs (MethodCore.CheckBase): Fix bug #65757.
16721
16722 2004-09-10  Martin Baulig  <martin@ximian.com>
16723
16724         Backported my MemberName changes from GMCS into MCS.
16725
16726         - we are now using a special `MemberName' class instead of using
16727         strings; in GMCS, the `MemberName' also contains the type
16728         arguments.
16729
16730         - changed the grammar rules a bit:
16731           * the old `member_name' is now a `namespace_or_type_name':
16732             The rule is that we use `namespace_or_type_name' everywhere
16733             where we expect either a "member name" (GetEnumerator) or a
16734             "member name" with an explicit interface name
16735             (IEnumerable.GetEnumerator).
16736             In GMCS, the explicit interface name may include type arguments
16737             (IEnumerable<T>.GetEnumerator).
16738           * we use `member_name' instead of just `IDENTIFIER' for
16739             "member names":
16740             The rule is that we use `member_name' wherever a member may
16741             have type parameters in GMCS.       
16742
16743         * decl.cs (MemberName): New public class.
16744         (MemberCore.MemberName): New public readonly field.
16745         (MemberCore.ctor): Take a `MemberName' argument, not a string.
16746         (DeclSpace): Likewise.
16747
16748         * delegate.cs (Delegate.ctor): Take a MemberName, not a string.
16749         * enum.cs (Enum.ctor): Likewise.
16750
16751         * namespace.cs (AliasEntry.Alias): Changed type from Expression to
16752         MemberName.     
16753         (AliasEntry.ctor): Take a MemberName, not an Expression.
16754         (AliasEntry.UsingAlias): Likewise.
16755
16756         * class.cs (TypeContainer.ctor): Take a MemberName, not a string.
16757         (IMethodData.MemberName): Changed type from string to MemberName.
16758         (MemberBase.ExplicitInterfaceName): Likewise.
16759         (AbstractPropertyEventMethod.SetupName): Make this private.
16760         (AbstractPropertyEventMethod.ctor): Added `string prefix'
16761         argument; compute the member name here.
16762         (AbstractPropertyEventMethod.UpdateName): Recompute the name based
16763         on the `member.MemberName' and the `prefix'.
16764
16765         * cs-parser.jay (attribute_name): Use `namespace_or_type_name',
16766         not `type_name'.
16767         (struct_declaration): Use `member_name' instead of `IDENTIFIER';
16768         thus, we get a `MemberName' instead of a `string'.  These
16769         declarations may have type parameters in GMCS.
16770         (interface_method_declaration, delegate_declaration): Likewise.
16771         (class_declaration, interface_declaration): Likewise.
16772         (method_header): Use `namespace_or_type_name' instead of
16773         `member_name'.  We may be an explicit interface implementation.
16774         (property_declaration, event_declaration): Likewise.
16775         (member_name): This is now just an `IDENTIFIER', not a
16776         `namespace_or_type_name'.
16777         (type_name, interface_type): Removed.
16778         (namespace_or_type_name): Return a MemberName, not an Expression.
16779         (primary_expression): Use `member_name' instead of `IDENTIFIER';
16780         call GetTypeExpression() on the MemberName to get an expression.
16781         (IndexerDeclaration.interface_type): Changed type from string to
16782         MemberName.
16783         (MakeName): Operate on MemberName's instead of string's.
16784
16785 2004-09-13  Raja R Harinath  <rharinath@novell.com>
16786
16787         Fix bug #55770.
16788         * namespace.cs (AliasEntry.Resolve): Implement section 16.3.1.
16789         (NamespaceEntry.Lookup): Add new argument to flag if we want the
16790         lookup to avoid symbols introduced by 'using'.
16791         * rootcontext.cs (NamespaceLookup): Update.
16792
16793 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
16794
16795         * class.cs (TypeContainer.DoDefineMembers): Do not call
16796         DefineDefaultConstructor for static classes.
16797
16798 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
16799
16800         * attribute.cs (Attribute.Resolve): Add error 653 report.
16801
16802         * class.cs (Class.ApplyAttributeBuilder): Add error 641
16803         report.
16804         (Method.ApplyAttributeBuilder): Add error 685 report.
16805         (Operator.Define): Add error 564 report.
16806
16807         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
16808
16809         * expression.cs (Invocation.DoResolve): Add error
16810         245 and 250 report.
16811
16812         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
16813         error 674 report.
16814
16815 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16816
16817         * class.cs (ConstructorInitializer.Resolve):
16818         Wrong error number (515->516).
16819
16820 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16821
16822         * class.cs (Indexer.Define): Add error 631 report.
16823
16824 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16825
16826         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
16827
16828 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16829
16830         * expression.cs (Probe.DoResolve): Add error CS0241 report.
16831
16832 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
16833
16834         * cs-parser.jay: Added error CS0241 report.
16835
16836 2004-09-10  Raja R Harinath  <rharinath@novell.com>
16837
16838         * cs-parser.jay (fixed_statement): Introduce a scope for the
16839         declaration in the 'fixed' statement.
16840
16841 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
16842
16843         * cs-parser.jay: Added CS0230 error report.
16844
16845 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
16846
16847         * cs-parser.jay: Added errors CS0231 and CS0257 report.
16848
16849 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
16850
16851         * expression.cs (Argument.Resolve): Added error CS0192 and
16852         CS0199 report.
16853
16854 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
16855
16856         C# 2.0 #pragma warning feature
16857
16858         * cs-tokenizer.cs (PreProcessPragma): New method; 
16859         Handles #pragma directive.
16860
16861         * report.cs (WarningRegions): New class; Support
16862         class for #pragma warning directive. It tests whether
16863         warning is enabled for a given line.
16864
16865 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
16866
16867         * const.cs: Add more descriptive error report, tahnks to
16868         Sebastien. 
16869
16870 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
16871
16872         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
16873
16874 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
16875
16876         * expression.cs: Apply patch from Ben: Remove dead code from
16877         ArrayCreation, and remove the TurnintoConstant call in const.cs,
16878         as that code just threw an exception anwyays.
16879
16880         * const.cs: Remove the call to the turnintoconstant, for details
16881         see bug: #63144
16882         
16883         * literal.cs: The type of the null-literal is the null type;  So
16884         we use a placeholder type (literal.cs:System.Null, defined here)
16885         for it.
16886
16887         * expression.cs (Conditional.DoResolve): Remove some old code that
16888         is no longer needed, conversions have been fixed.
16889
16890         (ArrayCreationExpression.DoResolve): Return false if we fail to
16891         resolve the inner expression.
16892
16893 2004-09-07  Raja R Harinath  <rharinath@novell.com>
16894
16895         Fix test-290.cs.
16896         * cs-parser.jay (delegate_declaration): Record a delegate
16897         declaration as a type declaration.
16898         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
16899
16900 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
16901
16902         * parameter.cs: Do not crash if the type can not be resolved. 
16903
16904         * expression.cs: Report errors with unsafe pointers, fixes #64896
16905
16906 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
16907
16908         * expression.cs: Pointer arith always needs to do a conv.i
16909         if the operand is a long. fix 65320
16910
16911 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
16912
16913         Fixed cs0619-37.cs, cs0619-38.cs
16914
16915         * enum.cs (GetObsoleteAttribute): Removed.
16916
16917         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
16918         on Enum member is double staged. The first is tested member
16919         and then enum.
16920
16921 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
16922
16923         Fixed #56986, #63631, #65231
16924
16925         * class.cs: (TypeContainer.AddToMemberContainer): New method,
16926         adds member to name container.
16927         (TypeContainer.AddToTypeContainer): New method, adds type to
16928         name container.
16929         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
16930         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
16931         AddOperator): Simplified by reusing AddToMemberContainer.
16932         (TypeContainer.UserDefinedStaticConstructor): Changed to property
16933         instead of field.
16934         (Method.CheckForDuplications): Fixed implementation to test all
16935         possibilities.
16936         (MemberBase): Detection whether member is explicit interface
16937         implementation is now in constructor.
16938         (MemberBase.UpdateMemberName): Handles IndexerName.
16939         (Accessor): Changed to keep also location information.
16940         (AbstractPropertyEventMethod): Is derived from MemberCore.
16941         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
16942         will be emited or not.
16943         (PropertyBase.AreAccessorsDuplicateImplementation):
16944         Tests whether accessors are not in collision with some method.
16945         (Operator): Is derived from MethodCore to simplify common
16946         operations.
16947
16948         * decl.cs (Flags.TestMethodDuplication): Test for duplication
16949         must be performed.
16950         (DeclSpace.AddToContainer): Adds the member to defined_names
16951         table. It tests for duplications and enclosing name conflicts.
16952
16953         * enum.cs (EnumMember): Clean up to reuse the base structures
16954
16955 2004-09-03  Martin Baulig  <martin@ximian.com>
16956
16957         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
16958         into TypeContainer, to make partial classes work again.
16959
16960 2004-09-03  Martin Baulig  <martin@ximian.com>
16961
16962         * rootcontext.cs (RootContext.V2): Removed.
16963
16964 2004-03-23  Martin Baulig  <martin@ximian.com>
16965
16966         * expression.cs (Invocation.OverloadResolve): Added `bool
16967         may_fail' argument and use it instead of the Location.IsNull() hack.
16968
16969 2004-09-03  Martin Baulig  <martin@ximian.com>
16970
16971         Merged latest changes into gmcs.  Please keep this comment in
16972         here, it makes it easier for me to see what changed in MCS since
16973         the last time I merged.
16974
16975 2004-09-03  Raja R Harinath  <rharinath@novell.com>
16976
16977         Fix #61128.
16978         * expression.cs (BetterConversion): Don't allow either conversion 
16979         to be null.  Remove redundant implicit conversion test when 'q ==
16980         null' -- when this function is invoked, we already know that the
16981         implicit conversion exists.
16982         (BetterFunction): Assume that 'best' is non-null.  Remove
16983         redundant reimplementation of IsApplicable when 'best' is null.
16984         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
16985         number of arguments.
16986         (IsAncestralType): Extract from OverloadResolve.
16987         (OverloadResolve): Make robust to the MethodGroupExpr being
16988         unsorted.  Implement all the logic of Section 14.5.5.1, and
16989         support overloading of methods from multiple applicable types.
16990         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
16991
16992         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
16993         (RealError, Warning): Append type of report to related symbol.
16994
16995 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
16996
16997         * enum.cs: Fixed CLS-Compliance checks for enum members.
16998         Error tests cs3008-8.cs, cs3014-8.cs
16999
17000 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
17001
17002         Fixed bug #62342, #63102
17003         * class.cs: ImplementIndexer uses member.IsExplicitImpl
17004         like ImplementMethod.
17005
17006 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
17007
17008         * attribute.cs (Attribute.GetAttributeArgumentExpression):
17009         Fixed bug #65170.
17010
17011 2004-09-02  Martin Baulig  <martin@ximian.com>
17012
17013         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
17014         TypeManager.GetArgumentTypes() rather than calling GetParameters()
17015         on the MethodBase.
17016
17017 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
17018
17019         C# 2.0 Static classes implemented
17020
17021         * class.cs (TypeContainer): instance_constructors,
17022         initialized_fields, initialized_static_fields,
17023         default_constructor, base_inteface_types are protected to be
17024         accessible from StaticClass.
17025         (TypeContainer.DefineDefaultConstructor): New virtual method
17026         for custom default constructor generating
17027         (StaticClass): New class to handle "Static classes" feature.
17028
17029         * cs-parser.jay: Handle static keyword on class like instance
17030         of StaticClass.
17031
17032         * driver.cs: Added "/langversion" command line switch with two
17033         options (iso-1, default).
17034
17035 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
17036
17037         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
17038
17039 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
17040
17041         * delegate.cs: Style.
17042
17043 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
17044
17045         * delegate.cs: Add seperate instance expr field for miguel.
17046
17047 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
17048
17049         * PointerArithmetic (Resolve): make sure we are not doing
17050         pointer arith on void*. Also, make sure we are resolved
17051         by not setting eclass until resolve.
17052
17053         All callers: Make sure that PointerArithmetic gets resolved.
17054
17055 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
17056
17057         * ArrayCreation (LookupType): If the type does not resolve 
17058         to an array, give an error.
17059
17060 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
17061
17062         * statement.cs (Try.Resolve): Fixed bug #64222
17063
17064 2004-08-27  Martin Baulig  <martin@ximian.com>
17065
17066         * class.cs
17067         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
17068         crash here.     
17069
17070 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
17071
17072         * ecore.cs (Constantify): Get underlying type via
17073         System.Enum.GetUnderlyingType to avoid StackOverflow on the
17074         Windows in special cases.
17075
17076 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
17077
17078         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
17079         for obtaining also private methods.
17080         (GetRemoveMethod): Used GetRemoveMethod (true)
17081         for obtaining also private methods.
17082
17083 2004-08-24  Martin Baulig  <martin@ximian.com>
17084
17085         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
17086         MethodAttributes.HideBySig for operators.
17087
17088 2004-08-23  Martin Baulig  <martin@ximian.com>
17089
17090         Back to the old error reporting system :-)
17091
17092         * report.cs (Message): Removed.
17093         (Report.MessageData, ErrorData, WarningData): Removed.
17094         (Report.Error, Warning): Back to the old system.
17095
17096 2004-08-23  Martin Baulig  <martin@ximian.com>
17097
17098         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
17099
17100         * class.cs (TypeContainer.ParentContainer): New public virtual
17101         method; replaces the explicit interface implementation.
17102         (ClassPart.ParentContainer): Override.
17103
17104 2004-08-23  Martin Baulig  <martin@ximian.com>
17105
17106         * statement.cs (Switch): Added support for constant switches; see
17107         #59428 or test-285.cs.
17108
17109 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
17110
17111         Fixed bug #62740.
17112         * statement.cs (GetEnumeratorFilter): Removed useless
17113         logic because C# specs is strict. GetEnumerator must be
17114         public.
17115
17116 2004-08-22  Martin Baulig  <martin@ximian.com>
17117
17118         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
17119         a switch and may break, reset the barrier.  Fixes #59867.
17120
17121 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
17122
17123         CLS-Compliance speed up (~5% for corlib)
17124
17125         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
17126         New method. Tests container for CLS-Compliant names
17127
17128         * class.cs (TypeContainer.VerifyClsName): New method.
17129         Checks whether container name is CLS Compliant.
17130         (Constructor): Implements IMethodData.
17131
17132         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
17133         low-case table for CLS Compliance test.
17134         (MemberCache.VerifyClsParameterConflict): New method.
17135         Checks method parameters for CS3006 error.
17136
17137         * enum.cs (EnumMember): Is derived from MemberCore.
17138         (Enum.VerifyClsName): Optimized for better performance.
17139
17140 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
17141
17142         * report.cs: Renamed Error_T to Error and changed all
17143         references.
17144
17145 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
17146
17147         * class.cs (TypeContainer.IndexerArrayList): New inner class
17148         container for indexers.
17149         (TypeContainer.DefaultIndexerName): New constant for default
17150         indexer name. Replaced all "Item" with this constant.
17151         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
17152
17153         * typemanager.cs (TypeManager.default_member_ctor): Cache here
17154         DefaultMemberAttribute constructor.
17155
17156 2004-08-05  Martin Baulig  <martin@ximian.com>
17157
17158         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
17159         Fix bug #59429.
17160
17161 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
17162
17163         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
17164         multi platforms problem.
17165
17166         * compiler.csproj: Included shared files.
17167
17168 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17169
17170         Fix bug 60333, 55971 in the more general way
17171         * attribute.cs (Attribute.GetAttributeArgumentExpression):
17172         Added arg_type argument for constant conversion.
17173         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
17174
17175 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17176
17177         Fix bug #59760
17178         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
17179         OperatorArrayList, MethodCoreArrayList for typecontainer
17180         containers. Changed class member types to these new types.
17181         (MethodArrayList.DefineMembers): Added test for CS0659.
17182
17183 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
17184
17185         * cfold.cs: Synchronize the folding with the code in expression.cs
17186         Binary.DoNumericPromotions for uint operands.
17187
17188         * attribute.cs: Revert patch from Raja, it introduced a regression
17189         while building Blam-1.2.1 (hard to isolate a test case).
17190
17191 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17192
17193         Fix for #55382
17194         * class.cs:
17195         (TypeContainer.Define): Renamed to DefineContainerMembers because of
17196         name collision.
17197         (MethodCore.parent_method): New member. The method we're overriding
17198         if this is an override method.
17199         (MethodCore.CheckBase): Moved from Method class and made common.
17200         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
17201         private.
17202         (MethodCore.CheckForDuplications): New abstract method. For custom
17203         member duplication search in a container
17204         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
17205         method and its return type.
17206         (Event.conflict_symbol): New member. Symbol with same name in the
17207         parent class.
17208
17209         * decl.cs:
17210         (MemberCache.FindMemberWithSameName): New method. The method
17211         is looking for conflict with inherited symbols.
17212
17213 2004-08-04  Martin Baulig  <martin@ximian.com>
17214
17215         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
17216
17217         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
17218
17219 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17220
17221         * report.cs (Message): New enum for better error, warning reference in
17222         the code.
17223         (MessageData): New inner abstract class. It generally handles printing of
17224         error and warning messages.
17225         Removed unused Error, Warning, Message methods.
17226
17227 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17228
17229         Fix for cs0592-8.cs test
17230         * attribute.cs
17231         (Attributable.ValidAttributeTargets): Made public.
17232         (Attribute.ExplicitTarget): New member for explicit target value.
17233         (Attribute.CheckTargets): Now we translate explicit attribute
17234         target to Target here.
17235
17236 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
17237
17238         * ecore.cs (MethodGroupExpr): new IsBase property.
17239
17240         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
17241
17242         * delegate.cs (DelegateCreation): store a MethodGroupExpr
17243         rather than an instance expr.
17244
17245         (DelegateCreation.Emit): Use the method group rather than
17246         the instance expression. Also, if you have base.Foo as the
17247         method for a delegate, make sure to emit ldftn, not ldftnvirt.
17248
17249         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
17250
17251         (NewDelegate.DoResolve): Only check for the existance of Invoke
17252         if the method is going to be needed. Use MethodGroupExpr.
17253
17254         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
17255
17256         * expression.cs: For pointer arith., make sure to use
17257         the size of the type, not the size of the pointer to
17258         the type.
17259
17260 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17261
17262         Fix for #60722
17263         * class.cs (Class): Added error CS0502 test.
17264
17265 2004-08-03  John Luke  <jluke@cfl.rr.com>
17266             Raja R Harinath  <rharinath@novell.com>
17267
17268         Fix for #60997.
17269         * attribute.cs (Attribute.complained_before): New flag.
17270         (Attribute.ResolveType, Attribute.Resolve),
17271         (Attribute.DefinePInvokeMethod): Set it.
17272         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
17273         
17274 2004-08-03  Martin Baulig  <martin@ximian.com>
17275
17276         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
17277         use a user-defined operator; we still need to do numeric
17278         promotions in case one argument is a builtin type and the other
17279         one has an implicit conversion to that type.  Fixes #62322.
17280
17281 2004-08-02  Martin Baulig  <martin@ximian.com>
17282
17283         * statement.cs (LocalInfo.Flags): Added `IsThis'.
17284         (LocalInfo.IsThis): New public property.
17285         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
17286
17287 2004-08-01  Martin Baulig  <martin@ximian.com>
17288
17289         * class.cs (TypeContainer.GetClassBases): Don't set the default
17290         here since we may get called from GetPartialBases().
17291         (TypeContainer.DefineType): If GetClassBases() didn't return a
17292         parent, use the default one.
17293
17294 2004-07-30  Duncan Mak  <duncan@ximian.com>
17295
17296         * Makefile (mcs2.exe, mcs3.exe): add $(EXTRA_SOURCES).
17297
17298 2004-07-30  Martin Baulig  <martin@ximian.com>
17299
17300         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
17301
17302         * class.cs (SourceMethod): New public class, derive from the
17303         symbol writer's ISourceMethod.
17304         (Method): Use the new symbol writer API.
17305
17306         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
17307         as argument and use the new symbol writer.
17308
17309         * location.cs
17310         (SourceFile): Implement the symbol writer's ISourceFile.
17311         (Location.SymbolDocument): Removed.
17312         (Location.SourceFile): New public property.
17313
17314         * symbolwriter.cs: Use the new symbol writer API.
17315
17316 2004-07-30  Raja R Harinath  <rharinath@novell.com>
17317
17318         * Makefile (install-local): Remove.  Functionality moved to
17319         executable.make.
17320
17321 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
17322
17323         * Makefile: Install mcs.exe.config file together with mcs.exe.
17324         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
17325         correct runtime version.
17326         
17327 2004-07-25  Martin Baulig  <martin@ximian.com>
17328
17329         * class.cs
17330         (TypeContainer.RegisterOrder): Removed, this was unused.
17331         (TypeContainer, interface_order): Removed.
17332         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
17333         TypeContainer as argument since we can also be called with a
17334         `PartialContainer' for a partial class/struct/interface.
17335         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
17336         of checking whether we're an `Interface' - we could be a
17337         `PartialContainer'.
17338         (PartialContainer.Register): Override; call
17339         AddClass()/AddStruct()/AddInterface() on our parent.
17340
17341         * cs-parser.jay (interface_member_declaration): Add things to the
17342         `current_container', not the `current_class'.
17343
17344         * rootcontext.cs (RegisterOrder): The overloaded version which
17345         takes an `Interface' was unused, removed.
17346
17347         * typemanager.cs (TypeManager.LookupInterface): Return a
17348         `TypeContainer', not an `Interface'.
17349         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
17350         contain a `PartialContainer' for an interface, so check it's
17351         `Kind' to figure out what it is.
17352
17353 2004-07-25  Martin Baulig  <martin@ximian.com>
17354
17355         * class.cs (Class.DefaultTypeAttributes): New public constant.
17356         (Struct.DefaultTypeAttributes): Likewise.
17357         (Interface.DefaultTypeAttributes): Likewise.
17358         (PartialContainer.TypeAttr): Override this and add the
17359         DefaultTypeAttributes.
17360
17361 2004-07-25  Martin Baulig  <martin@ximian.com>
17362
17363         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
17364         we can just use the `Parent' field instead.
17365
17366 2004-07-25  Martin Baulig  <martin@ximian.com>
17367
17368         * class.cs (TypeContainer.Emit): Renamed to EmitType().
17369
17370 2004-07-25  Martin Baulig  <martin@ximian.com>
17371
17372         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
17373         our parts before defining any methods.
17374         (TypeContainer.VerifyImplements): Make this virtual.
17375         (ClassPart.VerifyImplements): Override and call VerifyImplements()
17376         on our PartialContainer.
17377
17378 2004-07-25  Martin Baulig  <martin@ximian.com>
17379
17380         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
17381
17382         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
17383         argument, we can just use the `Parent' field instead.
17384
17385         * class.cs
17386         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
17387         (MemberBase.DoDefine): Likewise.
17388
17389 2004-07-24  Martin Baulig  <martin@ximian.com>
17390
17391         * decl.cs (MemberCore.Parent): New public field.
17392         (DeclSpace.Parent): Moved to MemberCore.
17393
17394         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
17395         (MemberBase.ctor): Added TypeContainer argument, pass it to our
17396         parent's .ctor.
17397         (FieldBase, Field, Operator): Likewise.
17398         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
17399         (EventField, Event): Likewise.
17400
17401 2004-07-23  Martin Baulig  <martin@ximian.com>
17402
17403         * class.cs (PartialContainer): New public class.
17404         (ClassPart): New public class.
17405         (TypeContainer): Added support for partial classes.
17406         (TypeContainer.GetClassBases): Splitted some of the functionality
17407         out into GetNormalBases() and GetPartialBases().
17408
17409         * cs-tokenizer.cs (Token.PARTIAL): New token.
17410         (Tokenizer.consume_identifier): Added some hacks to recognize
17411         `partial', but only if it's immediately followed by `class',
17412         `struct' or `interface'.
17413
17414         * cs-parser.jay: Added support for partial clases.
17415
17416 2004-07-23  Martin Baulig  <martin@ximian.com>
17417
17418         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
17419         a `DeclSpace' and also made it readonly.
17420         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
17421         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
17422         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
17423
17424         * cs-parser.jay: Pass the `current_class', not the
17425         `current_container' (at the moment, this is still the same thing)
17426         to a new Method, Property, Event, Indexer or Constructor.
17427
17428 2004-07-23  Martin Baulig  <martin@ximian.com>
17429
17430         * cs-parser.jay (CSharpParser): Added a new `current_class' field
17431         and removed the `current_interface' one.
17432         (struct_declaration, class_declaration, interface_declaration):
17433         Set `current_class' to the newly created class/struct/interface;
17434         set their `Bases' and call Register() before parsing their body.
17435
17436 2004-07-23  Martin Baulig  <martin@ximian.com>
17437
17438         * class.cs (Kind): New public enum.
17439         (TypeContainer): Made this class abstract.
17440         (TypeContainer.Kind): New public readonly field.
17441         (TypeContainer.CheckDef): New public method; moved here from
17442         cs-parser.jay.
17443         (TypeContainer.Register): New public abstract method.
17444         (TypeContainer.GetPendingImplementations): New public abstract
17445         method.
17446         (TypeContainer.GetClassBases): Removed the `is_class' and
17447         `is_iface' parameters.
17448         (TypeContainer.DefineNestedTypes): Formerly known as
17449         DoDefineType().
17450         (ClassOrStruct): Made this class abstract.
17451
17452         * tree.cs (RootTypes): New public type. 
17453
17454 2004-07-20  Martin Baulig  <martin@ximian.com>
17455
17456         * tree.cs (Tree.RecordNamespace): Removed.
17457         (Tree.Namespaces): Removed.
17458
17459         * rootcontext.cs (RootContext.IsNamespace): Removed.
17460
17461         * cs-parser.jay (namespace_declaration): Just create a new
17462         NamespaceEntry here.
17463
17464 2004-07-20  Martin Baulig  <martin@ximian.com>
17465
17466         * statement.cs (ExceptionStatement): New abstract class.  This is
17467         now used as a base class for everyone who's using `finally'.
17468         (Using.ResolveLocalVariableDecls): Actually ResolveLValue() all
17469         our local variables before using them.
17470
17471         * flowanalysis.cs (FlowBranching.StealFinallyClauses): New public
17472         virtual method.  This is used by Yield.Resolve() to "steal" an
17473         outer block's `finally' clauses.
17474         (FlowBranchingException): The .ctor now takes an ExceptionStatement
17475         argument.
17476
17477         * codegen.cs (EmitContext.StartFlowBranching): Added overloaded
17478         version which takes an ExceptionStatement.  This version must be
17479         used to create exception branchings.
17480
17481         * iterator.cs
17482         (Yield.Resolve): "Steal" all `finally' clauses from containing blocks.
17483         (Iterator.EmitMoveNext): Added exception support; protect the
17484         block with a `fault' clause, properly handle 'finally' clauses.
17485         (Iterator.EmitDispose): Run all the `finally' clauses here.
17486
17487 2004-07-20  Martin Baulig  <martin@ximian.com>
17488
17489         * iterator.cs: This is the first of a set of changes in the
17490         iterator code.  Match the spec more closely: if we're an
17491         IEnumerable, then GetEnumerator() must be called.  The first time
17492         GetEnumerator() is called, it returns the current instance; all
17493         subsequent invocations (if any) must create a copy.
17494
17495 2004-07-19  Miguel de Icaza  <miguel@ximian.com>
17496
17497         * expression.cs: Resolve the constant expression before returning
17498         it. 
17499
17500 2004-07-19  Martin Baulig  <martin@ximian.com>
17501
17502         * iterators.cs (Iterator.MapVariable): Don't define fields twice.
17503         (Iterator.MoveNextMethod.DoEmit): Use `TypeManager.int32_type' as
17504         the return type of the new EmitContext.
17505
17506 2004-07-18  Martin Baulig  <martin@ximian.com>
17507
17508         * class.cs (Property.Define): Fix iterators.
17509
17510         * iterators.cs (Iterator.Define): Moved the
17511         `container.AddInterator (this)' call here from the .ctor; only do
17512         it if we resolved successfully.
17513
17514 2004-07-17  Miguel de Icaza  <miguel@ximian.com>
17515
17516         * cs-tokenizer.cs (handle_preprocessing_directive): Do not return
17517         `true' for preprocessing directives that we parse.  The return
17518         value indicates whether we should return to regular tokenizing or
17519         not, not whether it was parsed successfully.
17520
17521         In the past if we were in: #if false ... #line #endif, we would
17522         resume parsing after `#line'.  See bug 61604.
17523
17524         * typemanager.cs: Removed an old hack from Gonzalo to get corlib
17525         building: IsEnumType should return true only for enums, not for
17526         enums or System.Enum itself.  This fixes #61593.
17527
17528         Likely what happened is that corlib was wrong: mcs depended on
17529         this bug in some places.  The bug got fixed, we had to add the
17530         hack, which caused bug 61593.
17531
17532         * expression.cs (ArrayAccess.GetStoreOpCode): Remove an old hack
17533         that was a workaround for the older conditions.
17534
17535 2004-07-16  Ben Maurer  <bmaurer@ximian.com>
17536
17537         * assign.cs: IAssignMethod has a new interface, as documented
17538         inline. All assignment code now uses this new api.
17539
17540         * ecore.cs, expression.cs: All classes which implement
17541         IAssignMethod now use the new interface.
17542
17543         * expression.cs (Invocation): add a hack to EmitCall so that
17544         IndexerAccess can be the target of a compound assignment without
17545         evaluating its arguments twice.
17546
17547         * statement.cs: Handle changes in Invocation api.
17548
17549 2004-07-16  Martin Baulig  <martin@ximian.com>
17550
17551         * iterators.cs: Rewrote this.  We're now using one single Proxy
17552         class for both the IEnumerable and the IEnumerator interface and
17553         `Iterator' derives from Class so we can use the high-level API.
17554
17555         * class.cs (TypeContainer.AddIterator): New method.
17556         (TypeContainer.DoDefineType): New protected virtual method, which
17557         is called from DefineType().
17558         (TypeContainer.DoDefineMembers): Call DefineType() and
17559         DefineMembers() on all our iterators.
17560         (TypeContainer.Emit): Call Emit() on all our iterators.
17561         (TypeContainer.CloseType): Call CloseType() on all our iterators.
17562
17563         * codegen.cs (EmitContext.CurrentIterator): New public field.
17564
17565 2004-07-15  Martin Baulig  <martin@ximian.com>
17566
17567         * typemanager.cs
17568         (TypeManager.not_supported_exception_type): New type.   
17569
17570 2004-07-14  Martin Baulig  <martin@ximian.com>
17571
17572         * iterators.cs: Use real error numbers.
17573
17574 2004-07-14  Martin Baulig  <martin@ximian.com>
17575
17576         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
17577         requires this to be a System.Collection.IEnumerable and not a
17578         class implementing that interface.
17579         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
17580
17581 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
17582
17583         * class.cs: Fixed previous fix, it broke some error tests.
17584
17585 2004-07-12  Martin Baulig  <martin@ximian.com>
17586
17587         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
17588         Fixes #61293.
17589
17590 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
17591
17592         * assign.cs (LocalTemporary): Add new argument: is_address,If
17593         `is_address' is true, then the value that we store is the address
17594         to the real value, and not the value itself.
17595         
17596         * ecore.cs (PropertyExpr): use the new local temporary
17597         stuff to allow us to handle X.Y += z (where X is a struct)
17598
17599 2004-07-08  Martin Baulig  <martin@ximian.com>
17600
17601         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
17602         not always return, just like we're doing in Using.Resolve().
17603
17604 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
17605
17606         * cs-parser.jay (fixed_statement): flag this as Pinned.
17607
17608 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
17609
17610         * typemanager.cs (TypeManager): Removed MakePinned method, this
17611         mechanism is replaced with the .NET 2.x compatible mechanism of
17612         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
17613
17614         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
17615         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
17616         `IsFixed' property which has a different meaning.
17617
17618 2004-07-02  Raja R Harinath  <rharinath@novell.com>
17619
17620         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
17621         visible from inside a nested class, not just the names of the
17622         immediately enclosing class.
17623         Fix for bug #60730.
17624
17625 2004-06-24  Raja R Harinath  <rharinath@novell.com>
17626
17627         * expression.cs (BetterConversion): Remove buggy special-case
17628         handling of "implicit constant expression conversions".  At this
17629         point, we already know that the conversion is possible -- we're
17630         only checking to see which is better.
17631
17632 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
17633
17634         * cs-parser.jay: Added error CS0210 test.
17635
17636 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
17637
17638         * cs-parser.jay: Added error CS0134 test.
17639
17640 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
17641
17642         Fix bug #52507
17643         * cs-parser.jay: Added error CS0145 test.
17644
17645 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
17646
17647         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
17648
17649 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
17650         
17651         * expression.cs (StackAlloc.Resolve): The argument may not
17652         be a constant; deal with this case.
17653         
17654 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
17655
17656         * attribute.cs (IndexerName_GetIndexerName): Renamed to
17657         GetIndexerAttributeValue.
17658         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
17659
17660         * class.cs (Indexer.Define): Added error tests for CS0415,
17661         CS0609.
17662
17663 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
17664
17665         * attribute.cs (Attribute.Resolve): Keep field code in sync with
17666         property code.
17667
17668 2004-06-23  Martin Baulig  <martin@ximian.com>
17669
17670         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
17671         neither return nor throw, reset the barrier as well.  Fixes #60457.
17672
17673 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
17674
17675         * class.cs : EventAttributes is now set to None by default.
17676           This fixes bug #60459.
17677
17678 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
17679
17680         Fix bug #60219
17681         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
17682         Don't throw exception but return null (it's sufficient now).
17683
17684 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
17685
17686         * typemanager.cs (GetArgumentTypes): Faster implementation.
17687
17688 2004-06-18  Martin Baulig  <martin@ximian.com>
17689
17690         * attribute.cs (Attribute.Resolve): Check whether we're an
17691         EmptyCast which a Constant child.  Fixes #60333.
17692
17693 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
17694
17695         * statement.cs (EmitCollectionForeach): Account for the fact that
17696         not all valuetypes are in areas which we can take the address of.
17697         For these variables, we store to a temporary variable. Also, make
17698         sure that we dont emit a `callvirt' on a valuetype method.
17699
17700 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
17701
17702         * expression.cs (StackAlloc.DoReSolve): Added test for
17703         negative parameter (CS0247).
17704
17705 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
17706
17707         Fix bug #59792
17708         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
17709
17710 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
17711
17712         Fix bug #59781
17713         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
17714         ulong.
17715
17716 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
17717
17718         Fix bug #58254 & cs1555.cs, cs1556.cs
17719         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
17720
17721 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
17722
17723         * cs-parser.jay: Added error CS1669 test for indexers.
17724
17725 2004-06-11  Martin Baulig  <martin@ximian.com>
17726
17727         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
17728         call this twice: for params and varargs methods.
17729
17730 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17731
17732         * class.cs:
17733         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
17734
17735 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17736
17737         * attribute.cs (Attribute.GetValidTargets): Made public.
17738
17739         * class.cs: 
17740         (AbstractPropertyEventMethod): New class for better code sharing.
17741         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
17742         CS1667 report.
17743         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
17744
17745 2004-06-11  Raja R Harinath  <rharinath@novell.com>
17746
17747         Fix bug #59477.
17748         * ecore.cs (ResolveFlags): Add new 'Intermediate' flag to tell
17749         that the call to Resolve is part of a MemberAccess.
17750         (Expression.Resolve): Use it for SimpleName resolution.
17751         (SimpleName.SimpleNameResolve, SimpleName.DoResolveAllowStatic):
17752         Add 'intermediate' boolean argument.
17753         (SimpleName.DoSimpleNameResolve): Likewise.  Use it to disable an
17754         error message when the SimpleName can be resolved ambiguously
17755         between an expression and a type.
17756         * expression.cs (MemberAccess.IdenticalNameAndTypeName): Make
17757         public.
17758         (MemberAccess.Resolve): Pass 'Intermediate' flag to the Resolve()
17759         call on the left-side.
17760
17761 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17762
17763         * class.cs:
17764         (MethodCore.VerifyClsCompliance): Added test for error CS3000.
17765
17766 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17767
17768         * attribute.cs (Attribute.Emit): Fixed error CS0579 reporting.
17769
17770 2004-06-11  Martin Baulig  <martin@ximian.com>
17771
17772         * expression.cs (Invocation.EmitCall): Use OpCodes.Callvirt for
17773         varargs methods if applicable.
17774
17775 2004-06-11  Martin Baulig  <martin@ximian.com>
17776
17777         * expression.cs (Invocation.EmitCall): Don't use
17778         `method.CallingConvention == CallingConventions.VarArgs' since the
17779         method could also have `CallingConventions.HasThis'.
17780
17781 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17782
17783         * class.cs (Event.GetSignatureForError): Implemented.
17784         Fixed crash in error test cs3010.cs
17785
17786 2004-06-10  Miguel de Icaza  <miguel@ximian.com>
17787
17788         * cs-tokenizer.cs: Change the way we track __arglist to be
17789         consistent with the other keywords.
17790
17791 2004-06-09  Miguel de Icaza  <miguel@ximian.com>
17792
17793         * codegen.cs: FAQ avoider: turn 1577 into a warning for now until
17794         tomorrow.
17795
17796 2004-06-09  Sebastien Pouliot  <sebastien@ximian.com>
17797
17798         * codegen.cs: Check that all referenced assemblies have a strongname
17799         before strongnaming the compiled assembly. If not report error CS1577.
17800         Fix bug #56563. Patch by Jackson Harper.
17801         * typemanager.cs: Added a method to return all referenced assemblies.
17802         Fix bug #56563. Patch by Jackson Harper.
17803
17804 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
17805
17806         * class.cs:
17807         (Method.ApplyAttributeBuilder): Moved and added conditional
17808         attribute error tests (CS0577, CS0578, CS0243, CS0582, CS0629).
17809
17810         * delegate.cs:
17811         (DelegateCreation.ResolveMethodGroupExpr): Added error CS1618 test.
17812
17813 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
17814
17815         Fixed #59640
17816         * class.cs: (EventField.attribute_targets): Changed default target.
17817
17818 2004-06-08  Martin Baulig  <martin@ximian.com>
17819
17820         * expression.cs (Invocation.EmitCall): Enable varargs methods.
17821
17822 2004-06-08  Martin Baulig  <martin@ximian.com>
17823
17824         * rootcontext.cs (ResolveCore): Added "System.RuntimeArgumentHandle".
17825
17826 2004-06-07  Martin Baulig  <martin@ximian.com>
17827
17828         Added support for varargs methods.
17829
17830         * cs-tokenizer.cs (Token.ARGLIST): New token for the `__arglist'
17831         keyword.
17832
17833         * cs-parser.jay: Added support for `__arglist'.
17834
17835         * decl.cs (MemberCache.AddMethods): Don't ignore varargs methods.
17836
17837         * expression.cs (Argument.AType): Added `ArgList'.
17838         (Invocation): Added support for varargs methods.
17839         (ArglistAccess): New public class.
17840         (Arglist): New public class.
17841
17842         * parameter.cs (Parameter.Modifier): Added `ARGLIST'.
17843
17844         * statement.cs (Block.Flags): Added `HasVarargs'.  We set this on
17845         a method's top-level block if the method has varargs.
17846
17847         * support.cs (ReflectionParameters, InternalParameters): Added
17848         support for varargs methods.    
17849
17850 2004-06-07  Miguel de Icaza  <miguel@ximian.com>
17851
17852         * class.cs: Provide location in indexer error report.
17853
17854         * driver.cs: Use standard names.
17855
17856         * namespace.cs: Catch the use of using after a namespace has been
17857         declared also on using aliases.
17858
17859 2004-06-03  Raja R Harinath  <rharinath@novell.com>
17860
17861         Bug #50820.
17862         * typemanager.cs (closure_private_ok, closure_invocation_type)
17863         (closure_qualifier_type, closure_invocation_assembly)
17864         (FilterWithClosure): Move to ...
17865         (Closure): New internal nested class.
17866         (Closure.CheckValidFamilyAccess): Split out from Closure.Filter.
17867         (MemberLookup, RealMemberLookup): Add new almost_match parameter.
17868         * ecore.cs (almostMatchedMembers): New variable to help report CS1540.
17869         (MemberLookup, MemberLookupFailed): Use it.
17870         * expression.cs (New.DoResolve): Treat the lookup for the
17871         constructor as being qualified by the 'new'ed type.
17872         (Indexers.GetIndexersForTypeOrInterface): Update.
17873
17874 2004-06-03  Marek Safar  <marek.safar@seznam.cz>
17875
17876         * attribute.cs
17877         (GetConditionalAttributeValue): New method. Returns
17878         condition of ConditionalAttribute.
17879         (SearchMulti): New method.  Returns all attributes of type 't'.
17880         Use it when attribute is AllowMultiple = true.
17881         (IsConditionalMethodExcluded): New method.
17882
17883         * class.cs
17884         (Method.IsExcluded): Implemented. Returns true if method has conditional
17885         attribute and the conditions is not defined (method is excluded).
17886         (IMethodData): Extended interface for ConditionalAttribute support.
17887         (PropertyMethod.IsExcluded): Implemented.
17888
17889         * decl.cs
17890         (MemberCore.Flags): Excluded_Undetected, Excluded new caching flags.
17891
17892         * expression.cs
17893         (Invocation.IsMethodExcluded): Checks the ConditionalAttribute
17894         on the method.
17895
17896 2004-06-02 Ben Maurer  <bmaurer@users.sourceforge.net>
17897
17898         * expression.cs (ArrayCreationExpression): Make this just an
17899         `expression'. It can't be a statement, so the code here was
17900         dead.
17901
17902 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
17903
17904         Fixed #59072
17905         * typemanager.cs (GetFullNameSignature): New method for
17906         MethodBase types.
17907
17908 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
17909
17910         Fixed #56452
17911         * class.cs (MemberBase.GetSignatureForError): New virtual method.
17912         Use this method when MethodBuilder is null.
17913         (MethodData.DefineMethodBuilder): Encapsulated code to the new method.
17914         Added test for error CS0626 (MONO reports error for this situation).
17915         (IMethodData.GetSignatureForError): Extended interface.
17916
17917 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
17918
17919         * attribute.cs
17920         (AttributeTester.GetObsoleteAttribute): Returns instance of
17921         ObsoleteAttribute when type is obsolete.
17922
17923         * class.cs
17924         (TypeContainer.VerifyObsoleteAttribute): Override.
17925         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
17926         (MethodCode.VerifyObsoleteAttribute): Override.
17927         (MemberBase.VerifyObsoleteAttribute): Override.
17928
17929         * decl.cs
17930         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
17931         and report proper error.
17932
17933         *delegate.cs
17934         Delegate.VerifyObsoleteAttribute): Override.
17935
17936         * ecore.cs
17937         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
17938         and report proper error.
17939         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
17940
17941         * enum.cs
17942         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
17943         and enum member.
17944
17945         * expression.cs
17946         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
17947         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
17948         Added test for ObsoleteAttribute.
17949
17950         * statement.cs
17951         (Catch): Derived from Statement.
17952
17953 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
17954  
17955         Fixed bug #59071 & cs0160.cs
17956  
17957         * statement.cs (Try.Resolve): Check here whether order of catch
17958         clauses matches their dependencies.
17959
17960 2004-05-31  Miguel de Icaza  <miguel@ximian.com>
17961
17962         * Reverted patch to namespace.cs (Use lookuptypedirect).  This
17963         caused a regression: #59343.  Referencing nested classes from an
17964         assembly stopped working.
17965
17966 2004-05-31  Martin Baulig  <martin@ximian.com>
17967
17968         MCS is now frozen for beta 2.
17969
17970 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
17971
17972         * convert.cs: add a trivial cache for overload operator resolution.
17973
17974 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
17975
17976         * decl.cs: If possible, use lookuptypedirect here. We can only do
17977         this if there is no `.' after the namespace. Avoids using
17978         LookupType, which does lots of slow processing.
17979         (FindNestedType) New method, does what it says :-).
17980         * namespace.cs: use LookupTypeDirect.
17981         * rootcontext.cs: use membercache, if possible.
17982         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
17983
17984 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
17985
17986         * expression.cs:
17987         According to the spec, 
17988
17989         In a member access of the form E.I, if E is a single identifier,
17990         and if the meaning of E as a simple-name (§7.5.2) is a constant,
17991         field, property, localvariable, or parameter with the same type as
17992         the meaning of E as a type-name (§3.8), then both possible
17993         meanings of E are permitted.
17994
17995         We did not check that E as a simple-name had the same type as E as
17996         a type name.
17997
17998         This trivial check gives us 5-7% on bootstrap time.
17999
18000 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18001
18002         * expression.cs (Invocation.OverloadResolve): Avoid the
18003         use of hashtables and boxing here by allocating on demand.
18004
18005 2004-05-30  Martin Baulig  <martin@ximian.com>
18006
18007         * rootcontext.cs (RootContext.LookupType): Don't cache things if
18008         we're doing a silent lookup.  Don't try to lookup nested types in
18009         TypeManager.object_type (thanks to Ben Maurer).
18010
18011 2004-05-30  Martin Baulig  <martin@ximian.com>
18012
18013         Committing a patch from Ben Maurer.
18014
18015         * rootcontext.cs (RootContext.LookupType): Cache negative results.
18016
18017 2004-05-29  Martin Baulig  <martin@ximian.com>
18018
18019         * class.cs (IMethodData.ShouldIgnore): New method.
18020
18021         * typemanager.cs (TypeManager.MethodFlags): Don't take a
18022         `Location' argument, we don't need it anywhere.  Use
18023         `IMethodData.ShouldIgnore ()' instead of
18024         `MethodData.GetMethodFlags ()'.
18025         (TypeManager.AddMethod): Removed.
18026         (TypeManager.AddMethod2): Renamed to AddMethod.
18027
18028 2004-05-29  Martin Baulig  <martin@ximian.com>
18029
18030         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
18031
18032         * convert.cs (Convert.ImplicitReferenceConversion): If we're
18033         converting from a class type S to an interface type and we already
18034         have an object on the stack, don't box it again.  Fixes #52578.
18035
18036 2004-05-29  Martin Baulig  <martin@ximian.com>
18037
18038         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
18039         Added support for `params' parameters.  Fixes #59267.
18040
18041 2004-05-29  Martin Baulig  <martin@ximian.com>
18042
18043         * literal.cs (NullPointer): Provide a private .ctor which sets
18044         `type' to TypeManager.object_type.  Fixes #59048.
18045
18046 2004-05-29  Martin Baulig  <martin@ximian.com>
18047
18048         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
18049         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
18050
18051         * ecore.cs (EventExpr.instance_expr): Make the field private.
18052
18053 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
18054
18055         Fixed bug #50080 & cs0214-2.cs
18056         * expression.cs (Cast.DoResolve): Check unsafe context here.
18057         
18058         * statement.cs (Resolve.DoResolve): Likewise.
18059
18060 2004-05-26  Martin Baulig  <martin@ximian.com>
18061
18062         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
18063
18064         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
18065         (RootContext.LookupType): Pass down the `silent' flag.
18066
18067 2004-05-25  Martin Baulig  <martin@ximian.com>
18068
18069         * expression.cs
18070         (MethodGroupExpr.IdenticalTypeName): New public property.
18071         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
18072         expression actually refers to a type.
18073
18074 2004-05-25  Martin Baulig  <martin@ximian.com>
18075
18076         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
18077         for #56176 and made it actually work.
18078
18079 2004-05-25  Martin Baulig  <martin@ximian.com>
18080
18081         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
18082         (FieldExpr, PropertyExpr): Override and implement
18083         CacheTemporaries.  Fixes #52279.
18084
18085 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
18086
18087         * location.cs: In the new compiler listing a file twice is a
18088         warning, not an error.
18089
18090 2004-05-24  Martin Baulig  <martin@ximian.com>
18091
18092         * enum.cs (Enum.DefineType): For the `BaseType' to be a
18093         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
18094
18095 2004-05-24  Martin Baulig  <martin@ximian.com>
18096
18097         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
18098         walking the `using' list.  Fixes #53921.
18099
18100 2004-05-24  Martin Baulig  <martin@ximian.com>
18101
18102         * const.cs (Const.LookupConstantValue): Added support for
18103         EmptyCast's; fixes #55251.
18104
18105 2004-05-24  Martin Baulig  <martin@ximian.com>
18106
18107         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
18108         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
18109         which does the CS0135 check.  The reason is that we first need to
18110         check whether the variable actually exists.
18111
18112 2004-05-24  Martin Baulig  <martin@ximian.com>
18113
18114         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
18115         than RootContext.LookupType() to find the explicit interface
18116         type.  Fixes #58584.
18117
18118 2004-05-24  Raja R Harinath  <rharinath@novell.com>
18119
18120         * Makefile: Simplify.  Use executable.make.
18121         * mcs.exe.sources: New file.  List of sources of mcs.exe.
18122
18123 2004-05-24  Anders Carlsson  <andersca@gnome.org>
18124
18125         * decl.cs:
18126         * enum.cs:
18127         Use the invariant culture when doing String.Compare for CLS case
18128         sensitivity.
18129         
18130 2004-05-23  Martin Baulig  <martin@ximian.com>
18131
18132         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
18133         don't have any dots.  Fixes #52622, added cs0246-8.cs.
18134
18135         * namespace.cs (NamespaceEntry.Lookup): Likewise.
18136         
18137 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
18138
18139         * class.cs (MemberBase.Define): Reuse MemberType member for 
18140         resolved type. Other methods can use it too.
18141
18142 2004-05-23  Martin Baulig  <martin@ximian.com>
18143
18144         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
18145         the variable also exists in the current block (otherwise, we need
18146         to report a CS0103).  Fixes #58670.
18147
18148 2004-05-23  Martin Baulig  <martin@ximian.com>
18149
18150         * flowanalysis.cs (Reachability.Reachable): Compute this
18151         on-the-fly rather than storing it as a field.
18152
18153 2004-05-23  Martin Baulig  <martin@ximian.com>
18154
18155         * flowanalysis.cs (Reachability.And): Manually compute the
18156         resulting `barrier' from the reachability.      
18157        
18158 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
18159
18160         Fix bug #57835
18161         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
18162         instance of ObsoleteAttribute when symbol is obsolete.
18163
18164         * class.cs
18165         (IMethodData): Extended interface for ObsoleteAttribute support.
18166
18167 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
18168
18169         * attribute.cs: Fix bug #55970
18170
18171 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
18172
18173         Fix bug #52705
18174         * attribute.cs
18175         (GetObsoleteAttribute): New method. Creates the instance of
18176         ObsoleteAttribute.
18177         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
18178         ObsoleteAttribute when member is obsolete.
18179         (AttributeTester.Report_ObsoleteMessage): Common method for
18180         Obsolete error/warning reporting.
18181
18182         * class.cs
18183         (TypeContainer.base_classs_type): New member for storing parent type.
18184
18185         * decl.cs
18186         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
18187         for this MemberCore.
18188
18189 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18190
18191         * attribute.cs, const.cs: Fix bug #58590
18192
18193 2004-05-21  Martin Baulig  <martin@ximian.com>
18194
18195         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
18196         out parameters if the end of the method is unreachable.  Fixes
18197         #58098. 
18198
18199 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18200
18201         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
18202         Hari was right, why extra method.
18203
18204 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18205
18206         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
18207
18208 2004-05-20  Martin Baulig  <martin@ximian.com>
18209
18210         Merged this back from gmcs to keep the differences to a minumum.
18211
18212         * attribute.cs (Attribute.CheckAttributeType): Take an EmitContext
18213         instead of a Declspace.
18214         (Attribute.ResolveType): Likewise.
18215         (Attributes.Search): Likewise.
18216         (Attributes.Contains): Likewise.
18217         (Attributes.GetClsCompliantAttribute): Likewise.
18218
18219         * class.cs (TypeContainer.VerifyMembers): Added EmitContext
18220         argument.
18221         (MethodData.ApplyAttributes): Take an EmitContext instead of a
18222         DeclSpace.
18223
18224 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
18225
18226         Fix bug #58688 (MCS does not report error when the same attribute
18227         is assigned twice)
18228
18229         * attribute.cs (Attribute.Emit): Distinction between null and default.
18230
18231 2004-05-19  Raja R Harinath  <rharinath@novell.com>
18232
18233         * cs-parser.jay (attribute): Create a GlobalAttribute for the case
18234         of a top-level attribute without an attribute target.
18235         * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
18236         Make non-static.
18237         (Attribute.Conditional_GetConditionName), 
18238         (Attribute.Obsolete_GetObsoleteMessage): Update.
18239         (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
18240         part of ScanForIndexerName.
18241         (Attribute.CanIgnoreInvalidAttribute): New function.
18242         (Attribute.ScanForIndexerName): Move to ...
18243         (Attributes.ScanForIndexerName): ... here.
18244         (Attributes.Attrs): Rename from now-misnamed AttributeSections.
18245         (Attributes.Search): New internal variant that can choose not to
18246         complain if types aren't resolved.  The original signature now
18247         complains.
18248         (Attributes.GetClsCompliantAttribute): Use internal variant, with
18249         complaints suppressed.
18250         (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
18251         only if it not useful.
18252         (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
18253         top-level for attributes that are shared between the assembly
18254         and a top-level class.
18255         * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
18256         * class.cs: Update to reflect changes.
18257         (DefineIndexers): Fuse loops.
18258         * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
18259         a couple more variants of attribute names.
18260
18261 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
18262
18263         Fix bug #52585 (Implemented explicit attribute declaration)
18264
18265         * attribute.cs:
18266         (Attributable.ValidAttributeTargets): New abstract method. It gets
18267         list of valid attribute targets for explicit target declaration.
18268         (Attribute.Target): It holds target itself.
18269         (AttributeSection): Removed.
18270         (Attribute.CheckTargets): New method. It checks whether attribute
18271         target is valid for the current element.
18272
18273         * class.cs:
18274         (EventProperty): New class. For events that are declared like
18275         property (with add and remove accessors).
18276         (EventField): New class. For events that are declared like field.
18277         class.cs
18278
18279         * cs-parser.jay: Implemented explicit attribute target declaration.
18280
18281         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
18282         Override ValidAttributeTargets.
18283
18284         * parameter.cs:
18285         (ReturnParameter): Class for applying custom attributes on 
18286         the return type.
18287         (ParameterAtribute): New class. Class for applying custom
18288         attributes on the parameter type.
18289
18290 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
18291
18292         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
18293         definitions. 
18294
18295         (Method): Allow UNSAFE here.
18296
18297         * modifiers.cs: Support unsafe reporting.
18298
18299 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
18300
18301         * decl.cs: Fix bug #58478.
18302
18303 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18304
18305         * statement.cs: When checking for unreachable code on an EmptyStatement,
18306         set the location. Fixes bug #58488.
18307
18308 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
18309
18310         * driver.cs: Add -pkg handling.
18311
18312         From Gonzalo: UseShelLExecute=false
18313
18314 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
18315
18316         * attribute.cs:
18317         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
18318         for attribute.
18319         (Attribute.IsClsCompliaceRequired): Moved to base for better
18320         accesibility.
18321         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
18322         when attribute is AttributeUsageAttribute.
18323         (Attribute.GetValidTargets): Simplified.
18324         (Attribute.GetAttributeUsage): New method returns AttributeUsage
18325         attribute for this type.
18326         (Attribute.ApplyAttributes): Method renamed to Emit and make
18327         non-static.
18328         (GlobalAttributeSection): New class for special handling of global
18329         attributes (assembly, module).
18330         (AttributeSection.Emit): New method.
18331
18332         * class.cs: Implemented Attributable abstract methods.
18333         (MethodCore.LabelParameters): Moved to Parameter class.
18334         (Accessor): Is back simple class.
18335         (PropertyMethod): Implemented Attributable abstract class.
18336         (DelegateMethod): Implemented Attributable abstract class.
18337         (Event): New constructor for disctintion between normal Event
18338         and Event with accessors.
18339
18340         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
18341
18342         * codegen.cs, const.cs, decl.cs, delegate.cs:
18343         (CommonAssemblyModulClass): Implemented Attributable abstract class
18344         and simplified.
18345
18346         * enum.cs: Implement IAttributeSupport interface.
18347         (EnumMember): New class for emum members. Implemented Attributable
18348         abstract class
18349
18350         * parameter.cs:
18351         (ParameterBase): Is abstract.
18352         (ReturnParameter): New class for easier [return:] attribute handling.
18353
18354         * typemanager.cs: Removed builder_to_attr.
18355
18356 2004-05-11  Raja R Harinath  <rharinath@novell.com>
18357
18358         Fix bug #57151.
18359         * attribute.cs (Attribute.GetPositionalValue): New function.
18360         * class.cs (TypeContainer.VerifyMembers): New function.
18361         (TypeContainer.Emit): Use it.
18362         (ClassOrStruct): New base class for Class and Struct.
18363         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
18364         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
18365         class.
18366         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
18367         then each non-static field should have a FieldOffset attribute.
18368         Otherwise, none of the fields should have a FieldOffset attribute.
18369         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
18370         and FieldOffset attributes.
18371         * typemanager.cs (TypeManager.struct_layout_attribute_type)
18372         (TypeManager.field_offset_attribute_type): New core types.
18373         (TypeManager.InitCoreTypes): Initialize them.
18374
18375 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
18376
18377         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
18378         Return correct type.
18379         From bug #58270.
18380
18381 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
18382
18383         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
18384         be implicitly converted to ulong.
18385         
18386         * expression.cs: The logic for allowing operator &, | and ^ worked
18387         was wrong, it worked before because we did not report an error in
18388         an else branch.  Fixes 57895.
18389
18390         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
18391         allow volatile fields to be reference types.
18392
18393 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
18394
18395         * driver.cs: Add support for /debug-
18396
18397 2004-05-07  Raja R Harinath  <rharinath@novell.com>
18398
18399         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
18400         Add a 'complain' parameter to silence errors.
18401         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
18402         silently overlooked type-resolutions.
18403         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
18404         to reflect changes.
18405         (Attributes.Search): New function.
18406         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
18407         (Attributes.GetAttributeFullName): Remove hack.
18408         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
18409         Update to reflect changes.
18410         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
18411         Use Attributes.Search instead of nested loops.
18412
18413 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
18414
18415         * decl.cs:
18416         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
18417         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
18418         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
18419
18420         * report.cs: (Report.Warning): Renamed to Warning_T because of
18421         parameter collision.
18422
18423 2004-05-05  Raja R Harinath  <rharinath@novell.com>
18424
18425         * expression.cs (MemberAccess.ResolveMemberAccess):
18426         Exit with non-zero status after Report.Error.
18427         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
18428         Likewise.
18429         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
18430
18431 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
18432
18433         * support.cs: Don't hang when the file is empty.
18434
18435 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
18436
18437         * support.cs: In SeekableStreamReader, compute the preamble size of the
18438           underlying stream. Position changes should take into account that initial
18439           count of bytes.
18440
18441 2004-05-03  Todd Berman  <tberman@sevenl.net>
18442
18443         * driver.cs: remove unused GetSysVersion function.
18444
18445 2004-05-03  Todd Berman  <tberman@sevenl.net>
18446
18447         * driver.cs: Remove the hack from saturday, as well as the hack
18448         from jackson (LoadAssemblyFromGac), also adds the CWD to the
18449         link_paths to get that bit proper.
18450
18451 2004-05-01  Todd Berman  <tberman@sevenl.net>
18452
18453         * driver.cs: Try a LoadFrom before a Load, this checks the current
18454         path. This is currently a bug in mono that is be fixed, however, this
18455         provides a workaround for now. This will be removed when the bug
18456         is fixed.
18457
18458 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
18459
18460         * CryptoConvert.cs: Updated to latest version. Fix issue with 
18461         incomplete key pairs (#57941).
18462
18463 2004-05-01  Todd Berman  <tberman@sevenl.net>
18464
18465         * driver.cs: Remove '.' from path_chars, now System.* loads properly
18466         from the GAC
18467
18468 2004-04-30  Jackson Harper  <jackson@ximian.com>
18469
18470         * codegen.cs: Open keys readonly.
18471         
18472 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18473
18474         * typemanager.cs: don't report cyclic struct layout when a struct
18475         contains 2 or more fields of the same type. Failed for Pango.AttrShape
18476         which has 2 Pango.Rectangle fields.
18477
18478 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
18479
18480         * expression.cs: Handle IntPtr comparisons with IL code
18481         rather than a method call.
18482
18483 2004-04-29  Martin Baulig  <martin@ximian.com>
18484
18485         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
18486         the list of PropertyInfo's in class hierarchy and find the
18487         accessor.  Fixes #56013.
18488
18489 2004-04-29  Martin Baulig  <martin@ximian.com>
18490
18491         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
18492
18493 2004-04-29  Martin Baulig  <martin@ximian.com>
18494
18495         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
18496
18497         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
18498
18499 2004-04-29  Martin Baulig  <martin@ximian.com>
18500
18501         * class.cs (ConstructorInitializer.Resolve): Check whether the
18502         parent .ctor is accessible.  Fixes #52146.
18503
18504 2004-04-29  Martin Baulig  <martin@ximian.com>
18505
18506         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
18507
18508         * statement.cs (Using.EmitLocalVariableDecls): Use
18509         TypeManager.idisposable_type, not typeof (IDisposable).
18510         (Foreach.EmitCollectionForeach): Added support for valuetypes.
18511
18512 2004-04-29  Martin Baulig  <martin@ximian.com>
18513
18514         * class.cs (Event.Define): Don't emit the field and don't set
18515         RTSpecialName and SpecialName for events on interfaces.  Fixes
18516         #57703. 
18517
18518 2004-04-29  Raja R Harinath  <rharinath@novell.com>
18519
18520         Refactor Attribute.ApplyAttributes.
18521         * attribute.cs (Attributable): New base class for objects that can
18522         have Attributes applied on them.
18523         (Attribute): Make AttributeUsage fields public.
18524         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
18525         (Attribute.IsInternalCall): New property.
18526         (Attribute.UsageAttr): Convert to a public read-only property.
18527         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
18528         (Attribute.ResolveType, Attribute.Resolve)
18529         (Attribute.ScanForIndexerName): Update to reflect changes.
18530         (Attribute.CheckAttributeTarget): Re-format.
18531         (Attribute.ApplyAttributes): Refactor, to various
18532         Attributable.ApplyAttributeBuilder methods.
18533         * decl.cs (MemberCore): Make Attributable.
18534         * class.cs (Accessor): Make Attributable.
18535         (MethodData.ApplyAttributes): Use proper attribute types, not
18536         attribute names.
18537         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
18538         (TypeContainer.ApplyAttributeBuilder)
18539         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
18540         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
18541         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
18542         (Operator.ApplyAttributeBuilder): New factored-out methods.
18543         * const.cs (Const.ApplyAttributeBuilder): Likewise.
18544         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
18545         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
18546         * parameter.cs (ParameterBase): New Attributable base class
18547         that can also represent Return types.
18548         (Parameter): Update to the changes.
18549
18550 2004-04-29  Jackson Harper  <jackson@ximian.com>
18551
18552         * driver.cs: Prefer the corlib system version when looking for
18553         assemblies in the GAC. This is still a hack, but its a better hack
18554         now.
18555         
18556 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
18557
18558         * decl.cs, enum.cs: Improved error 3005 reporting.
18559   
18560         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
18561         (related_symbols): New private member for list of symbols
18562         related to reported error/warning.
18563         
18564         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
18565
18566 2004-04-29  Martin Baulig  <martin@ximian.com>
18567
18568         * ecore.cs (Expression.Constantify): If we're an enum and
18569         TypeManager.TypeToCoreType() doesn't give us another type, use
18570         t.UnderlyingSystemType.  Fixes #56178.  
18571
18572 2004-04-29  Martin Baulig  <martin@ximian.com>
18573
18574         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
18575         interfaces and for each interface, only add members directly
18576         declared in that interface.  Fixes #53255.
18577
18578 2004-04-28  Martin Baulig  <martin@ximian.com>
18579
18580         * expression.cs (ConditionalLogicalOperator): Use a temporary
18581         variable for `left' to avoid that we evaluate it more than once;
18582         bug #52588.
18583
18584 2004-04-28  Martin Baulig  <martin@ximian.com>
18585
18586         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
18587         `void[]' (CS1547).
18588
18589 2004-04-28  Martin Baulig  <martin@ximian.com>
18590
18591         * statement.cs (LocalInfo.Resolve): Check whether the type is not
18592         void (CS1547).
18593
18594         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
18595         whether the type is not void (CS1547).
18596
18597 2004-04-28  Martin Baulig  <martin@ximian.com>
18598
18599         * expression.cs (Unary.DoResolveLValue): Override this and report
18600         CS0131 for anything but Operator.Indirection.
18601
18602 2004-04-28  Martin Baulig  <martin@ximian.com>
18603
18604         Committing a patch from Ben Maurer; see bug #50820.
18605
18606         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
18607         check for classes.
18608
18609         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
18610         classes.        
18611
18612 2004-04-28  Martin Baulig  <martin@ximian.com>
18613
18614         Committing a patch from Ben Maurer; see bug #50820.
18615
18616         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
18617         check for classes.
18618
18619         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
18620         classes.        
18621
18622 2004-04-28  Martin Baulig  <martin@ximian.com>
18623
18624         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
18625         (Block.AddLabel): Call DoLookupLabel() to only search in the
18626         current block.
18627
18628 2004-04-28  Martin Baulig  <martin@ximian.com>
18629
18630         * cfold.cs (ConstantFold.BinaryFold): Added special support for
18631         comparing StringConstants and NullLiterals in Equality and Inequality.
18632
18633 2004-04-28  Jackson Harper  <jackson@ximian.com>
18634
18635         * driver.cs: Attempt to load referenced assemblies from the
18636         GAC. This is the quick and dirty version of this method that
18637         doesnt take into account versions and just takes the first
18638         canidate found. Will be good enough for now as we will not have more
18639         then one version installed into the GAC until I update this method.
18640
18641 2004-04-28  Martin Baulig  <martin@ximian.com>
18642
18643         * typemanager.cs (TypeManager.CheckStructCycles): New public
18644         static method to check for cycles in the struct layout.
18645
18646         * rootcontext.cs (RootContext.PopulateTypes): Call
18647         TypeManager.CheckStructCycles() for each TypeContainer.
18648         [Note: We only need to visit each type once.]
18649
18650 2004-04-28  Martin Baulig  <martin@ximian.com>
18651
18652         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
18653
18654         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
18655         success and added `out object value'.  Use a `bool resolved' field
18656         to check whether we've already been called rather than
18657         `ConstantValue != null' since this breaks for NullLiterals.
18658
18659 2004-04-28  Raja R Harinath  <rharinath@novell.com>
18660
18661         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
18662         setting of this flag, since the 'set' method may be non-public.
18663
18664 2004-04-28  Raja R Harinath  <rharinath@novell.com>
18665
18666         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
18667         check on current_vector.Block.
18668
18669 2004-04-27  Martin Baulig  <martin@ximian.com>
18670
18671         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
18672         a field initializer.  Fixes #56459.
18673
18674 2004-04-27  Martin Baulig  <martin@ximian.com>
18675
18676         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
18677         we're not attempting to use an indexer.  Fixes #52154.
18678
18679 2004-04-27  Martin Baulig  <martin@ximian.com>
18680
18681         * statement.cs (Return): Don't create a return label if we don't
18682         need it; reverts my change from January 20th.  Thanks to Ben
18683         Maurer for this.
18684
18685 2004-04-27  Martin Baulig  <martin@ximian.com>
18686
18687         According to the spec, `goto' can only leave a nested scope, but
18688         never enter it.
18689
18690         * statement.cs (Block.LookupLabel): Only lookup in the current
18691         block, don't recurse into parent or child blocks.
18692         (Block.AddLabel): Check in parent and child blocks, report
18693         CS0140/CS0158 if we find a duplicate.
18694         (Block): Removed this indexer for label lookups.
18695         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
18696         this already does the error reporting for us.
18697
18698         * flowanalysis.cs
18699         (FlowBranching.UsageVector.Block): New public variable; may be null.
18700         (FlowBranching.CreateSibling): Added `Block' argument.
18701         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
18702         label for the target of a `goto' and check whether we're not
18703         leaving a `finally'.
18704
18705 2004-04-27  Martin Baulig  <martin@ximian.com>
18706
18707         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
18708         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
18709         just for returns).
18710
18711 2004-04-27  Martin Baulig  <martin@ximian.com>
18712
18713         * statement.cs (Block.AddLabel): Also check for implicit blocks
18714         and added a CS0158 check.
18715
18716 2004-04-27  Martin Baulig  <martin@ximian.com>
18717
18718         * flowanalysis.cs (FlowBranchingLoop): New class.
18719         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
18720         UsageVector's instead of an ArrayList.
18721         (FlowBranching.Label): Likewise.
18722         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
18723         (FlowBranching.AddBreakVector): New method.
18724
18725 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
18726
18727         * attribute.cs: Small regression fix: only convert the type if we
18728         the type is different, fixes System.Drawing build.
18729
18730 2004-04-27  Martin Baulig  <martin@ximian.com>
18731
18732         * attribute.cs (Attribute.Resolve): If we have a constant value
18733         for a named field or property, implicity convert it to the correct
18734         type.
18735
18736 2004-04-27  Raja R Harinath  <rharinath@novell.com>
18737
18738         * statement.cs (Block.Block): Implicit blocks share
18739         'child_variable_names' fields with parent blocks.
18740         (Block.AddChildVariableNames): Remove.
18741         (Block.AddVariable): Mark variable as "used by a child block" in
18742         every surrounding block.
18743         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
18744         been used in a child block, complain about violation of "Invariant
18745         meaning in blocks" rule.
18746         * cs-parser.jay (declare_local_variables): Don't use
18747         AddChildVariableNames.
18748         (foreach_statement): Don't create an implicit block: 'foreach'
18749         introduces a scope.
18750
18751 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
18752
18753         * convert.cs (ImplicitNumericConversion): 0 is also positive when
18754         converting from 0L to ulong.  Fixes 57522.
18755
18756 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
18757
18758         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
18759         derived class hides via 'new' keyword field from base class (test-242.cs).
18760         TODO: Handle this in the more general way.
18761         
18762         * class.cs (CheckBase): Ditto.
18763
18764 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
18765
18766         * decl.cs (caching_flags): New member for storing cached values
18767         as bit flags.
18768         (MemberCore.Flags): New enum where bit flags for caching_flags
18769         are defined.
18770         (MemberCore.cls_compliance): Moved to caching_flags.
18771         (DeclSpace.Created): Moved to caching_flags.
18772
18773         * class.cs: Use caching_flags instead of DeclSpace.Created
18774         
18775 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
18776
18777         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
18778         if we are only a derived class, not a nested class.
18779
18780         * typemanager.cs: Same as above, but do this at the MemberLookup
18781         level (used by field and methods, properties are handled in
18782         PropertyExpr).   Allow for the qualified access if we are a nested
18783         method. 
18784
18785 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
18786
18787         * class.cs: Refactoring.
18788         (IMethodData): New inteface; Holds links to parent members
18789         to avoid member duplication (reduced memory allocation).
18790         (Method): Implemented IMethodData interface.
18791         (PropertyBase): New inner classes for get/set methods.
18792         (PropertyBase.PropertyMethod): Implemented IMethodData interface
18793         (Event): New inner classes for add/remove methods.
18794         (Event.DelegateMethod): Implemented IMethodData interface.
18795
18796         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
18797         EmitContext (related to class.cs refactoring).
18798
18799 2004-04-21  Raja R Harinath  <rharinath@novell.com>
18800
18801         * delegate.cs (Delegate.VerifyApplicability): If the number of
18802         arguments are the same as the number of parameters, first try to
18803         verify applicability ignoring  any 'params' modifier on the last
18804         parameter.
18805         Fixes #56442.
18806
18807 2004-04-16  Raja R Harinath  <rharinath@novell.com>
18808
18809         * class.cs (TypeContainer.AddIndexer): Use
18810         'ExplicitInterfaceName' to determine if interface name was
18811         explicitly specified.  'InterfaceType' is not initialized at this time.
18812         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
18813         Indexers array is already in the required order.  Initialize
18814         'IndexerName' only if there are normal indexers.
18815         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
18816         (TypeContainer.Emit): Emit DefaultMember attribute only if
18817         IndexerName is initialized.
18818         Fixes #56300.
18819
18820 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
18821
18822         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
18823         Fixes #57007
18824
18825 2004-04-15  Raja R Harinath  <rharinath@novell.com>
18826
18827         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
18828         attributes.
18829         Fix for #56456.
18830
18831         * attribute.cs (Attribute.Resolve): Check for duplicate named
18832         attributes.
18833         Fix for #56463.
18834
18835 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
18836
18837         * iterators.cs (MarkYield): track whether we are in an exception,
18838         and generate code accordingly.  Use a temporary value to store the
18839         result for our state.
18840
18841         I had ignored a bit the interaction of try/catch with iterators
18842         since their behavior was not entirely obvious, but now it is
18843         possible to verify that our behavior is the same as MS .NET 2.0
18844
18845         Fixes 54814
18846
18847 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
18848
18849         * iterators.cs: Avoid creating temporaries if there is no work to
18850         do. 
18851
18852         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
18853         Enumerations, use TypeManager.EnumToUnderlying and call
18854         recursively. 
18855
18856         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
18857         bug #57013
18858
18859         (This.Emit): Use EmitContext.EmitThis to emit our
18860         instance variable.
18861
18862         (This.EmitAssign): Ditto.
18863
18864         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
18865         codepaths, we will move all the functionality into
18866         Mono.CSharp.This 
18867
18868         (FieldExpr.EmitAssign): Ditto.
18869
18870         This fixes several hidden bugs that I uncovered while doing a code
18871         review of this today.
18872
18873         * codegen.cs (EmitThis): reworked so the semantics are more clear
18874         and also support value types "this" instances.
18875
18876         * iterators.cs: Changed so that for iterators in value types, we
18877         do not pass the value type as a parameter.  
18878
18879         Initialization of the enumerator helpers is now done in the caller
18880         instead of passing the parameters to the constructors and having
18881         the constructor set the fields.
18882
18883         The fields have now `assembly' visibility instead of private.
18884
18885 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
18886
18887         * expression.cs (Argument.Resolve): Check if fields passed as ref
18888         or out are contained in a MarshalByRefObject.
18889
18890         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
18891         another compiler type.
18892
18893 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
18894
18895         * class.cs (Indexer.Define): use the new name checking method.
18896         Also, return false on an error.
18897         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
18898         (is_identifier_[start/part]_character): make static.
18899
18900 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
18901
18902         * expression.cs (Binary.ResolveOperator): Do no append strings
18903         twice: since we can be invoked more than once (array evaluation)
18904         on the same concatenation, take care of this here.  Based on a fix
18905         from Ben (bug #56454)
18906
18907 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
18908
18909         * codegen.cs: Fix another case where CS1548 must be reported (when 
18910         delay-sign isn't specified and no private is available #56564). Fix
18911         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
18912         error when MCS is used on the MS runtime and we need to delay-sign 
18913         (which seems unsupported by AssemblyBuilder - see #56621).
18914
18915 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
18916
18917         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
18918         (TypeManager.ComputeNamespaces): Faster implementation for
18919         Microsoft runtime.
18920
18921         * compiler.csproj: Updated AssemblyName to mcs.
18922
18923 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
18924
18925         * rootcontext.cs: Add new types to the boot resolution.
18926
18927         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
18928         MulticastDelegate is not allowed.
18929
18930         * typemanager.cs: Add new types to lookup: System.TypedReference
18931         and ArgIterator.
18932
18933         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
18934         check for TypedReference or ArgIterator, they are not allowed. 
18935
18936         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
18937         makes us properly catch 1510 in some conditions (see bug 56016 for
18938         details). 
18939
18940 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
18941
18942         * CryptoConvert.cs: update from corlib version
18943         with endian fixes.
18944
18945 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
18946
18947         * class.cs (Indexer.Define): Check indexername declaration
18948
18949 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
18950
18951         * attribute.cs (IsClsCompliant): Fixed problem with handling
18952         all three states (compliant, not-compliant, undetected).
18953
18954 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
18955
18956         * attribute.cs (Attribute): Location is now public.
18957         (Resolve): Store resolved arguments (pos_values) in attribute class.
18958         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
18959         (GetClsCompliantAttributeValue): New method that gets
18960         CLSCompliantAttribute value.
18961         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
18962         if exists else null.
18963         (AttributeTester): New class for CLS-Compliant verification routines.
18964
18965         * class.cs (Emit): Add CLS-Compliant verification.
18966         (Method.GetSignatureForError): Implemented.
18967         (Constructor.GetSignatureForError): Implemented
18968         (Constructor.HasCompliantArgs): Returns if constructor has
18969         CLS-Compliant arguments.
18970         (Constructor.Emit): Override.
18971         (Construcor.IsIdentifierClsCompliant): New method; For constructors
18972         is needed to test only parameters.
18973         (FieldBase.GetSignatureForError): Implemented.
18974         (TypeContainer): New member for storing base interfaces.
18975         (TypeContainer.FindMembers): Search in base interfaces too.
18976
18977         * codegen.cs (GetClsComplianceAttribute): New method that gets
18978         assembly or module CLSCompliantAttribute value.
18979         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
18980         for assembly.
18981         (ModuleClass.Emit): Add error 3012 test.
18982
18983         * const.cs (Emit): Override and call base for CLS-Compliant tests.
18984
18985         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
18986         state for all decl types.
18987         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
18988         if CLS-Compliant tests are required.
18989         (IsClsCompliaceRequired): New method. Analyze whether code
18990         must be CLS-Compliant.
18991         (IsExposedFromAssembly): New method. Returns true when MemberCore
18992         is exposed from assembly.
18993         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
18994         value or gets cached value.
18995         (HasClsCompliantAttribute): New method. Returns true if MemberCore
18996         is explicitly marked with CLSCompliantAttribute.
18997         (IsIdentifierClsCompliant): New abstract method. This method is
18998         used to testing error 3005.
18999         (IsIdentifierAndParamClsCompliant): New method. Common helper method
19000         for identifier and parameters CLS-Compliant testing.
19001         (VerifyClsCompliance): New method. The main virtual method for
19002         CLS-Compliant verifications.
19003         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
19004         null. I don't know why is null (too many public members !).
19005         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
19006         and get value of first CLSCompliantAttribute that found.
19007
19008         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
19009         (VerifyClsCompliance): Override and add extra tests.
19010
19011         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
19012         clscheck- disable CLS-Compliant verification event if assembly is has
19013         CLSCompliantAttribute(true).
19014
19015         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
19016         ApllyAttribute is now called in emit section as in the other cases.
19017         Possible future Emit integration.
19018         (IsIdentifierClsCompliant): New override.
19019         (VerifyClsCompliance): New override.
19020         (GetEnumeratorName): Returns full enum name.
19021
19022         * parameter.cs (GetSignatureForError): Implemented.
19023
19024         * report.cs (WarningData): New struct for Warning message information.
19025         (LocationOfPreviousError): New method.
19026         (Warning): New method. Reports warning based on the warning table.
19027         (Error_T): New method. Reports error based on the error table.
19028
19029         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
19030         verifications are done here.
19031
19032         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
19033
19034         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
19035         CLSCompliantAttribute.
19036         (all_imported_types): New member holds all imported types from other
19037         assemblies.
19038         (LoadAllImportedTypes): New method fills static table with exported types
19039         from all referenced assemblies.
19040         (Modules): New property returns all assembly modules.
19041
19042 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
19043
19044         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
19045         throwing a parser error.
19046
19047         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
19048         which removes the hardcoded get_/set_ prefixes for properties, as
19049         IL allows for the properties to be named something else.  
19050
19051         Bug #56013
19052
19053         * expression.cs: Do not override operand before we know if it is
19054         non-null.  Fix 56207
19055
19056 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19057
19058         * typemanager.cs: support for pinned variables.
19059
19060 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19061
19062         * decl.cs, typemanager.cs: Avoid using an arraylist
19063         as a buffer if there is only one result set.
19064
19065 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19066
19067         * expression.cs: Make sure you cant call a static method
19068         with an instance expression, bug #56174.
19069
19070 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
19071
19072         * class.cs (IsDuplicateImplementation): Improve error reporting to
19073         flag 663 (method only differs in parameter modifier).
19074
19075         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
19076         in preprocessor directives.
19077
19078         * location.cs (LookupFile): Allow for the empty path.
19079
19080         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
19081         better approach for some of that patch, but its failing with the
19082         CharSet enumeration.  For now try/catch will do.
19083
19084         * typemanager.cs: Do not crash if a struct does not have fields.
19085         Fixes 56150.
19086
19087 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19088
19089         * expression.cs: cs0213, cant fix a fixed expression.
19090         fixes 50231.
19091
19092 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19093
19094         * cs-parser.jay: detect invalid embeded statements gracefully.
19095         bug #51113.
19096
19097 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19098
19099         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
19100         As a regex:
19101         s/
19102         the invocation type may not be a subclass of the tye of the item/
19103         The type of the item must be a subclass of the invocation item.
19104         /g
19105
19106         Fixes bug #50820.
19107
19108 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
19109
19110         * attribute.cs: Added methods to get a string and a bool from an
19111         attribute. Required to information from AssemblyKeyFileAttribute,
19112         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
19113         * codegen.cs: Modified AssemblyName creation to include support for
19114         strongnames. Catch additional exceptions to report them as CS1548.
19115         * compiler.csproj: Updated include CryptoConvert.cs.
19116         * compiler.csproj.user: Removed file - user specific configuration.
19117         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
19118         Mono.Security assembly. The original class is maintained and tested in
19119         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
19120         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
19121         like CSC 8.0 (C# v2) supports.
19122         * Makefile: Added CryptoConvert.cs to mcs sources.
19123         * rootcontext.cs: Added new options for strongnames.
19124
19125 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
19126
19127         * driver.cs: For --expect-error, report error code `2'
19128         if the program compiled with no errors, error code `1' if
19129         it compiled with an error other than the one expected.
19130
19131 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
19132
19133         * compiler.csproj: Updated for Visual Studio .NET 2003.
19134         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
19135         * compiler.sln: Updated for Visual Studio .NET 2003.
19136
19137 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
19138
19139         * expression.cs: Fix bug #47234. We basically need to apply the
19140         rule that we prefer the conversion of null to a reference type
19141         when faced with a conversion to 'object' (csc behaviour).
19142
19143 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19144
19145         * statement.cs: Shorter form for foreach, eliminates
19146         a local variable. r=Martin.
19147
19148 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19149
19150         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
19151         checks if we can use brtrue/brfalse to test for 0.
19152         * expression.cs: use the above in the test for using brtrue/brfalse.
19153         cleanup code a bit.
19154
19155 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19156
19157         * expression.cs: Rewrite string concat stuff. Benefits:
19158
19159         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
19160         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
19161         rather than a concat chain.
19162
19163         * typemanager.cs: Add lookups for more concat overloads.
19164
19165 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19166
19167         * expression.cs: Emit shorter il code for array init.
19168
19169         newarr
19170         dup
19171         // set 1
19172
19173         // set 2
19174
19175         newarr
19176         stloc.x
19177
19178         ldloc.x
19179         // set 1
19180
19181         ldloc.x
19182         // set 2
19183
19184 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
19185
19186         * statement.cs: Before, two switch blocks would be merged if the
19187         total size of the blocks (end_item - begin_item + 1) was less than
19188         two times the combined sizes of the blocks.
19189
19190         Now, it will only merge if after the merge at least half of the
19191         slots are filled.
19192
19193         fixes 55885.
19194
19195 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
19196
19197         * class.cs : csc build fix for GetMethods(). See bug #52503.
19198
19199 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
19200
19201         * expression.cs: Make sure fp comparisons work with NaN.
19202         This fixes bug #54303. Mig approved this patch a long
19203         time ago, but we were not able to test b/c the runtime
19204         had a related bug.
19205
19206 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
19207
19208         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
19209
19210 2004-03-19  Martin Baulig  <martin@ximian.com>
19211
19212         * class.cs (MemberCore.IsDuplicateImplementation): Report the
19213         error here and not in our caller.
19214
19215 2004-03-19  Martin Baulig  <martin@ximian.com>
19216
19217         * interface.cs: Completely killed this file.
19218         (Interface): We're now a TypeContainer and live in class.cs.
19219
19220         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
19221         argument; we're now also called for interfaces.
19222         (TypeContainer.DefineMembers): Allow this method being called
19223         multiple times.
19224         (TypeContainer.GetMethods): New public method; formerly known as
19225         Interface.GetMethod().  This is used by PendingImplementation.
19226         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
19227         it's now private and non-static.
19228         (Interface): Moved this here; it's now implemented similar to
19229         Class and Struct.
19230         (Method, Property, Event, Indexer): Added `bool is_interface'
19231         argument to their .ctor's.
19232         (MemberBase.IsInterface): New public field.
19233
19234         * cs-parser.jay: Create normal Method, Property, Event, Indexer
19235         instances instead of InterfaceMethod, InterfaceProperty, etc.
19236         (opt_interface_base): Removed; we now use `opt_class_base' instead.
19237         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
19238
19239 2004-03-19  Martin Baulig  <martin@ximian.com>
19240
19241         * class.cs (MethodCore.IsDuplicateImplementation): New private
19242         method which does the CS0111 checking.
19243         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
19244         Use IsDuplicateImplementation().
19245
19246 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
19247
19248         * decl.cs (FindMemberToOverride): New method to find the correct
19249         method or property to override in the base class.
19250         * class.cs
19251             - Make Method/Property use the above method to find the
19252               version in the base class.
19253             - Remove the InheritableMemberSignatureCompare as it is now
19254               dead code.
19255
19256         This patch makes large code bases much faster to compile, as it is
19257         O(n) rather than O(n^2) to do this validation.
19258
19259         Also, it fixes bug 52458 which is that nested classes are not
19260         taken into account when finding the base class member.
19261
19262         Reviewed/Approved by Martin.
19263
19264 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
19265
19266         * interface.cs: In all interface classes removed redundant
19267         member initialization.
19268
19269 2004-03-16  Martin Baulig  <martin@ximian.com>
19270
19271         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
19272
19273 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
19274
19275         * decl.cs (DefineTypeAndParents): New helper method to define a
19276         type's containers before the type itself is defined;  This is a
19277         bug exposed by the recent changes to Windows.Forms when an
19278         implemented interface was defined inside a class that had not been
19279         built yet.   
19280
19281         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
19282
19283         (Check): Loop correctly to report errors modifiers
19284         (UNSAFE was not in the loop, since it was the same as TOP).
19285
19286         * interface.cs: Every interface member now takes a ModFlags,
19287         instead of a "is_new" bool, which we set on the base MemberCore. 
19288
19289         Every place where we called "UnsafeOk" in the interface, now we
19290         call the proper member (InterfaceMethod.UnsafeOK) instead to get
19291         the unsafe settings from the member declaration instead of the
19292         container interface. 
19293
19294         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
19295
19296         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
19297         `set_indexer_name' to the pending bits (one per type).
19298
19299         We fixed a bug today that was picking the wrong method to
19300         override, since for properties the existing InterfaceMethod code
19301         basically ignored the method name.  Now we make sure that the
19302         method name is one of the valid indexer names.
19303
19304 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
19305  
19306         * support.cs (SeekableStreamReader): Keep track of stream byte
19307         positions and don't mix them with character offsets to the buffer.
19308
19309         Patch from Gustavo Giráldez
19310
19311 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
19312
19313         * interface.cs (InterfaceSetGetBase): Removed double member
19314         initialization, base class does it as well.
19315
19316 2004-03-13  Martin Baulig  <martin@ximian.com>
19317
19318         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
19319         when compiling corlib.
19320
19321 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
19322
19323         * convert.cs (ExplicitConversion): We were reporting an error on
19324         certain conversions (object_type source to a value type, when the
19325         expression was `null') before we had a chance to pass it through
19326         the user defined conversions.
19327
19328         * driver.cs: Replace / and \ in resource specifications to dots.
19329         Fixes 50752
19330
19331         * class.cs: Add check for duplicate operators.  Fixes 52477
19332
19333 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
19334
19335         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
19336         that are in the middle of the statements, not only at the end.
19337         Fixes #54987
19338
19339         * class.cs (TypeContainer.AddField): No longer set the
19340         `HaveStaticConstructor' flag, now we call it
19341         `UserDefineStaticConstructor' to diferentiate the slightly
19342         semantic difference.
19343
19344         The situation is that we were not adding BeforeFieldInit (from
19345         Modifiers.TypeAttr) to classes that could have it.
19346         BeforeFieldInit should be set to classes that have no static
19347         constructor. 
19348
19349         See:
19350
19351         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
19352
19353         And most importantly Zoltan's comment:
19354
19355         http://bugzilla.ximian.com/show_bug.cgi?id=44229
19356
19357         "I think beforefieldinit means 'it's ok to initialize the type sometime 
19358          before its static fields are used', i.e. initialization does not need
19359          to be triggered by the first access to the type. Setting this flag
19360          helps the JIT to compile better code, since it can run the static
19361          constructor at JIT time, and does not need to generate code to call it
19362          (possibly lots of times) at runtime. Unfortunately, mcs does not set
19363          this flag for lots of classes like String. 
19364          
19365          csc sets this flag if the type does not have an explicit static 
19366          constructor. The reasoning seems to be that if there are only static
19367          initalizers for a type, and no static constructor, then the programmer
19368          does not care when this initialization happens, so beforefieldinit
19369          can be used.
19370          
19371          This bug prevents the AOT compiler from being usable, since it 
19372          generates so many calls to mono_runtime_class_init that the AOT code
19373          is much slower than the JITted code. The JITted code is faster, 
19374          because it does not generate these calls if the vtable is type is
19375          already initialized, which is true in the majority of cases. But the
19376          AOT compiler can't do this."
19377
19378 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
19379
19380         * class.cs (MethodData.Emit): Refactor the code so symbolic
19381         information is generated for destructors;  For some reasons we
19382         were taking a code path that did not generate symbolic information
19383         before. 
19384
19385 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
19386
19387         * class.cs: Create a Constructor.CheckBase method that
19388         takes care of all validation type code. The method
19389         contains some code that was moved from Define.
19390
19391         It also includes new code that checks for duplicate ctors.
19392         This fixes bug #55148.
19393
19394 2004-03-09  Joshua Tauberer <tauberer@for.net>
19395
19396         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
19397         a { ... }-style array creation invokes EmitStaticInitializers
19398         which is not good for reference-type arrays.  String, decimal
19399         and now null constants (NullCast) are not counted toward
19400         static initializers.
19401
19402 2004-03-05  Martin Baulig  <martin@ximian.com>
19403
19404         * location.cs (SourceFile.HasLineDirective): New public field;
19405         specifies whether the file contains or is referenced by a "#line"
19406         directive.
19407         (Location.DefineSymbolDocuments): Ignore source files which
19408         either contain or are referenced by a "#line" directive.        
19409
19410 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
19411
19412         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
19413         direct access to our parent, so check the method inline there.
19414
19415 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
19416
19417         * expression.cs (Invocation.EmitCall): Miguel's last commit
19418         caused a regression. If you had:
19419
19420             T t = null;
19421             t.Foo ();
19422
19423         In Foo the implict this would be null.
19424
19425 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
19426
19427         * expression.cs (Invocation.EmitCall): If the method is not
19428         virtual, do not emit a CallVirt to it, use Call.
19429
19430         * typemanager.cs (GetFullNameSignature): Improve the method to
19431         cope with ".ctor" and replace it with the type name.
19432
19433         * class.cs (ConstructorInitializer.Resolve): Now the method takes
19434         as an argument the ConstructorBuilder where it is being defined,
19435         to catch the recursive constructor invocations.
19436
19437 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
19438
19439         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
19440         routines to check if a type is an enumerable/enumerator allow
19441         classes that implement the IEnumerable or IEnumerator interfaces.
19442
19443         * class.cs (Property, Operator): Implement IIteratorContainer, and
19444         implement SetYields.
19445
19446         (Property.Define): Do the block swapping for get_methods in the
19447         context of iterators.   We need to check if Properties also
19448         include indexers or not.
19449
19450         (Operator): Assign the Block before invoking the
19451         OperatorMethod.Define, so we can trigger the Iterator code
19452         replacement. 
19453
19454         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
19455         Property and Operator classes are not created when we parse the
19456         declarator but until we have the block completed, so we use a
19457         singleton SimpleIteratorContainer.Simple to flag whether the
19458         SetYields has been invoked.
19459
19460         We propagate this setting then to the Property or the Operator to
19461         allow the `yield' to function.
19462
19463 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
19464
19465         * codegen.cs: Implemented attribute support for modules.
19466         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
19467         Assembly/Module functionality.
19468
19469         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
19470         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
19471         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
19472
19473 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
19474
19475         * interface.cs (FindMembers): The operation is performed on all base
19476         interfaces and not only on the first. It is required for future CLS Compliance patch.
19477
19478 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
19479
19480         * statement.cs, codegen.cs:
19481         This patch deals with patterns such as:
19482
19483         public class List : IEnumerable {
19484
19485                 public MyEnumerator GetEnumerator () {
19486                         return new MyEnumerator(this);
19487                 }
19488
19489                 IEnumerator IEnumerable.GetEnumerator () {
19490                         ...
19491                 }
19492                 
19493                 public struct MyEnumerator : IEnumerator {
19494                         ...
19495                 }
19496         }
19497
19498         Before, there were a few things we did wrong:
19499         1) we would emit callvirt on a struct, which is illegal
19500         2) we emited ldarg when we needed to emit ldarga
19501         3) we would mistakenly call the interface methods on an enumerator
19502         type that derived from IEnumerator and was in another assembly. For example:
19503
19504         public class MyEnumerator : IEnumerator
19505
19506         Would have the interface methods called, even if there were public impls of the
19507         method. In a struct, this lead to invalid IL code.
19508
19509 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
19510
19511         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
19512           renamed to Emit.
19513
19514         * delegate.cs (Define): Fixed crash when delegate type is undefined.
19515
19516 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
19517
19518         * cs-parser.jay: Fix small regression: we were not testing V2
19519         compiler features correctly.
19520
19521         * interface.cs: If the emit context is null, then create one
19522
19523 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
19524
19525         * decl.cs (GetSignatureForError): New virtual method to get full name
19526           for error messages.
19527
19528         * attribute.cs (IAttributeSupport): New interface for attribute setting.
19529           Now it is possible to rewrite ApplyAttributes method to be less if/else.
19530
19531         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
19532           Duplicated members and code in these classes has been removed.
19533           Better encapsulation in these classes.
19534
19535 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
19536
19537         * assign.cs (Assign.DoResolve): When dealing with compound
19538         assignments, there is a new rule in ECMA C# 2.4 (might have been
19539         there before, but it is documented here) that states that in:
19540
19541         a op= b;
19542
19543         If b is of type int, and the `op' is a shift-operator, then the
19544         above is evaluated as:
19545
19546         a = (int) a op b 
19547
19548         * expression.cs (Binary.ResolveOperator): Instead of testing for
19549         int/uint/long/ulong, try to implicitly convert to any of those
19550         types and use that in pointer arithmetic.
19551
19552         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
19553         method to print information for from the type, not from the
19554         null-method we were given.
19555
19556 2004-02-01  Duncan Mak  <duncan@ximian.com>
19557
19558         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
19559         parsing for cmd, fixes bug #53694.
19560
19561 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
19562
19563         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
19564         in the member name duplication tests. Property and operator name duplication
19565         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
19566
19567 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
19568
19569         * interface.cs (PopulateMethod): Fixed crash when interface method
19570         returns not existing type (error test cs0246-3.cs).
19571
19572 2004-02-02  Ravi Pratap M <ravi@ximian.com>
19573
19574         * cs-parser.jay (interface_accessors): Re-write actions to also
19575         store attributes attached to get and set methods. Fix spelling
19576         while at it.
19577
19578         (inteface_property_declaration): Modify accordingly.
19579
19580         (InterfaceAccessorInfo): New helper class to store information to pass
19581         around between rules that use interface_accessors.
19582
19583         * interface.cs (Emit): Apply attributes on the get and set
19584         accessors of properties and indexers too.
19585
19586         * attribute.cs (ApplyAttributes): Modify accordingly to use the
19587         right MethodBuilder when applying attributes to the get and set accessors.
19588
19589 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
19590
19591         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
19592
19593 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
19594
19595         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
19596
19597 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
19598
19599         * cs-parser.jay: Remove YIELD token, instead use the new grammar
19600         changes that treat `yield' specially when present before `break'
19601         or `return' tokens.
19602
19603         * cs-tokenizer.cs: yield is no longer a keyword.
19604
19605 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
19606
19607         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
19608         setting for default constructors.
19609         For default constructors are almost every time set wrong Modifier. The
19610         generated IL code has been alright. But inside mcs this values was
19611         wrong and this was reason why several of my CLS Compliance tests
19612         failed.
19613
19614 2004-01-22  Martin Baulig  <martin@ximian.com>
19615
19616         * cs-parser.jay (namespace_or_type_name): Return an Expression,
19617         not a QualifiedIdentifier.  This is what `type_name_expression'
19618         was previously doing.
19619         (type_name_expression): Removed; the code is now in
19620         `namespace_or_type_name'.
19621         (qualified_identifier): Removed, use `namespace_or_type_name'
19622         instead.
19623         (QualifiedIdentifier): Removed this class.      
19624
19625 2004-01-22  Martin Baulig  <martin@ximian.com>
19626
19627         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
19628         not a string as alias name.
19629
19630 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
19631
19632         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
19633         #52730 bug, and instead compute correctly the need to use a
19634         temporary variable when requesting an address based on the
19635         static/instace modified of the field and the constructor.
19636  
19637 2004-01-21  Martin Baulig  <martin@ximian.com>
19638
19639         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
19640         class and namespace before looking up aliases.  Fixes #52517.
19641
19642 2004-01-21  Martin Baulig  <martin@ximian.com>
19643
19644         * flowanalysis.cs (UsageVector.Merge): Allow variables being
19645         assinged in a 'try'; fixes exception4.cs.
19646
19647 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19648         * class.cs : Implemented parameter-less constructor for TypeContainer
19649
19650         * decl.cs: Attributes are now stored here. New property OptAttributes
19651
19652         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
19653
19654         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
19655
19656 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19657
19658         * typemanager.cs (CSharpSignature): Now reports also inner class name.
19659           (CSharpSignature): New method for indexer and property signature.
19660
19661 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19662
19663         * pending.cs (IsVirtualFilter): Faster implementation.
19664
19665 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19666
19667         * typemanager.cs: Avoid inclusion of same assembly more than once.
19668
19669 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19670
19671         * cs-parser.jay: Fixed problem where the last assembly attribute
19672           has been applied also to following declaration (class, struct, etc.)
19673           
19674 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19675
19676         * class.cs: Added error CS0538, CS0539 reporting.
19677         Fixed crash on Microsoft runtime when field type is void.
19678
19679         * cs-parser.jay: Added error CS0537 reporting.
19680
19681         * pending.cs: Added error CS0535 reporting.
19682         Improved error report for errors CS0536, CS0534.
19683
19684 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
19685
19686         Merge a few bits from the Anonymous Method MCS tree.
19687
19688         * statement.cs (ToplevelBlock): New class for toplevel methods,
19689         will hold anonymous methods, lifted variables.
19690
19691         * cs-parser.jay: Create toplevel blocks for delegates and for
19692         regular blocks of code. 
19693
19694 2004-01-20  Martin Baulig  <martin@ximian.com>
19695
19696         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
19697         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
19698         and `NeedExplicitReturn'; added `IsLastStatement'.
19699         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
19700         have a `ReturnLabel' or we're not unreachable.
19701
19702         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
19703         child's reachability; don't just override ours with it.  Fixes
19704         #58058 (lluis's example).
19705         (FlowBranching): Added public InTryOrCatch(), InCatch(),
19706         InFinally(), InLoop(), InSwitch() and
19707         BreakCrossesTryCatchBoundary() methods.
19708
19709         * statement.cs (Return): Do all error checking in Resolve().
19710         Unless we are the last statement in a top-level block, always
19711         create a return label and jump to it.
19712         (Break, Continue): Do all error checking in Resolve(); also make
19713         sure we aren't leaving a `finally'.
19714         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
19715         statement in a top-level block.
19716         (Block.Flags): Added `IsDestructor'.
19717         (Block.IsDestructor): New public property.
19718
19719 2004-01-20  Martin Baulig  <martin@ximian.com>
19720
19721         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
19722
19723 2004-01-20  Martin Baulig  <martin@ximian.com>
19724
19725         * statement.cs (Statement.ResolveUnreachable): New public method.
19726         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
19727         (Block.Resolve): Resolve unreachable statements.
19728
19729 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
19730
19731         * expression.cs: We need to fix the case where we do
19732         not have a temp variable here.
19733
19734         * assign.cs: Only expression compound assignments need
19735         temporary variables.
19736
19737 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
19738
19739         * flowanalysis.cs: Reduce memory allocation in a few ways:
19740           - A block with no variables should not allocate a bit
19741             vector for itself.
19742           - A method with no out parameters does not need any tracking
19743             for assignment of the parameters, so we need not allocate
19744             any data for it.
19745           - The arrays:
19746                 public readonly Type[] VariableTypes;
19747                 public readonly string[] VariableNames;
19748             Are redundant. The data is already stored in the variable
19749             map, so we need not allocate another array for it.
19750           - We need to add alot of checks for if (params | locals) == null
19751             due to the first two changes.
19752
19753 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
19754
19755         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
19756         implement IMemoryLocation, we store a copy on a local variable and
19757         take the address of it.  Patch from Benjamin Jemlich
19758
19759         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
19760         to use a special "type_name_expression" rule which reduces the
19761         number of "QualifiedIdentifier" classes created, and instead
19762         directly creates MemberAccess expressions.
19763
19764 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
19765
19766         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
19767         that fixes #52853.  Null literal assignment to ValueType
19768
19769         * class.cs (MethodData.Emit): Instead of checking the name of the
19770         method to determine if its a destructor, create a new derived
19771         class from Method called Destructor, and test for that.  
19772
19773         * cs-parser.jay: Create a Destructor object instead of a Method.  
19774
19775         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
19776
19777         Fixes: 52933
19778
19779 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
19780
19781         * expression.cs (Binary.ResolveOperator): Perform an implicit
19782         conversion from MethodGroups to their delegate types on the
19783         Addition operation.
19784
19785         * delegate.cs: Introduce a new class DelegateCreation that is the
19786         base class for `NewDelegate' and `ImplicitDelegateCreation',
19787         factor some code in here.
19788
19789         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
19790         conversion from MethodGroups to compatible delegate types. 
19791
19792         * ecore.cs (Expression.Resolve): Do not flag error 654
19793         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
19794         we allow conversions from MethodGroups to delegate types now.
19795
19796         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
19797         assignments in v2 either.
19798
19799 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
19800
19801         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
19802         static read-only fields in ctors.
19803
19804         Applied patch from Benjamin Jemlich 
19805
19806         * expression.cs (UnaryMutator): Avoid leaking local variables. 
19807
19808 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
19809
19810         * cs-tokenizer.cs (IsCastToken): Allow the various native types
19811         here to return true, as they can be used like this:
19812
19813                 (XXX) int.MEMBER ()
19814
19815         Fixed 49836 and all the other dups
19816
19817 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
19818
19819         * driver.cs: Implement /win32res and /win32icon.
19820
19821 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
19822
19823         * cs-parser.jay: Add a rule to improve error handling for the
19824         common mistake of placing modifiers after the type.
19825
19826 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
19827
19828         * cs-parser.jay (interface_event_declaration): Catch
19829         initialization of events on interfaces, and report cs0068
19830
19831         * cs-parser.jay (interface_event_declaration): Catch
19832         initialization of events. 
19833
19834         * ecore.cs: Better report missing constructors.
19835
19836         * expression.cs (Binary.ResolveOperator): My previous bug fix had
19837         the error reporting done in the wrong place.  Fix.
19838
19839         * expression.cs (Binary.ResolveOperator): Catch the 
19840         operator + (E x, E y) error earlier, and later allow for implicit
19841         conversions in operator +/- (E e, U x) from U to the underlying
19842         type of E.
19843
19844         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
19845         52596, if the container class is abstract, the default constructor
19846         is protected otherwise its public (before, we were always public).
19847
19848         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
19849         fixed statement.
19850
19851         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
19852         Jemlich that fixes bug #52597, MCS was generating invalid code for
19853         idisposable structs.   Thanks to Ben for following up with this
19854         bug as well.
19855
19856 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
19857
19858         * driver.cs: Allow assemblies without code to be generated, fixes
19859         52230.
19860
19861 2004-01-07  Nick Drochak <ndrochak@gol.com>
19862
19863         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
19864
19865 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
19866
19867         * cs-parser.jay: Add rules to improve error reporting if fields or
19868         methods are declared at the namespace level (error 116)
19869
19870         * Add rules to catch event add/remove
19871
19872 2004-01-04  David Sheldon <dave-mono@earth.li>
19873
19874   * expression.cs: Added matching ")" to error message for 
19875   CS0077
19876
19877 2004-01-03 Todd Berman <tberman@gentoo.org>
19878
19879         * ecore.cs, attribute.cs:
19880         Applying fix from #52429.
19881
19882 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
19883
19884         * ecore.cs, expression.cs, statement.cs:
19885         Total rewrite of how we handle branching. We
19886         now handle complex boolean expressions with fewer
19887         jumps. As well if (x == 0) no longer emits a ceq.
19888
19889         if (x is Foo) is much faster now, because we generate
19890         better code.
19891
19892         Overall, we get a pretty big improvement on our benchmark
19893         tests. The code we generate is smaller and more readable.
19894
19895         I did a full two-stage bootstrap. The patch was reviewed
19896         by Martin and Miguel.
19897
19898 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
19899
19900         * cs-parser.jay: Make primary_expression not take a QI.
19901         we dont need this because the member_access rule covers
19902         us here. So we replace the rule with just IDENTIFIER.
19903
19904         This has two good effects. First, we remove a s/r conflict.
19905         Second, we allocate many fewer QualifiedIdentifier objects.
19906
19907 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
19908
19909         * attribute.cs: Handle MarshalAs attributes as pseudo, and
19910         set the correct information via SRE. This prevents
19911         hanging on the MS runtime. Fixes #29374.
19912
19913 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
19914
19915         * convert.cs: correctly handle conversions to value types
19916         from Enum and ValueType as unboxing conversions.
19917
19918         Fixes bug #52569. Patch by Benjamin Jemlich.
19919
19920 2004-01-02  Ravi Pratap  <ravi@ximian.com>
19921
19922         * expression.cs (BetterConversion): Prefer int -> uint
19923         over int -> ulong (csc's behaviour). This fixed bug #52046.
19924
19925 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
19926
19927         * decl.cs (MemberCache.FindMembers): now returns a
19928         MemberInfo [].
19929
19930         * typemanager.cs: In general, go with with ^^.
19931         (CopyNewMethods): take an IList.
19932         (RealMemberLookup): Only allocate an arraylist
19933         if we copy from two sets of methods.
19934
19935         This change basically does two things:
19936         1) Fewer array lists allocated due to CopyNewMethods.
19937         2) the explicit cast in MemberList costed ALOT.
19938
19939 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
19940
19941         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
19942         a hashtable to avoid needless string allocations when an identifier is
19943         used more than once (the common case).
19944
19945 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
19946
19947         * pending.cs: MS's TypeBuilder.GetInterfaces ()
19948         is broken, it will not return anything. So, we
19949         have to use the information we have in mcs to
19950         do the task.
19951
19952         * typemanager.cs: Add a cache for GetInterfaces,
19953         since this will now be used more often (due to ^^)
19954
19955         (GetExplicitInterfaces) New method that gets the
19956         declared, not effective, interfaces on a type
19957         builder (eg, if you have interface IFoo, interface
19958         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
19959         { IBar }.
19960
19961         This patch makes MCS able to bootstrap itself on
19962         Windows again.
19963
19964 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
19965
19966         * expression.cs: Remove the Nop's that Miguel put
19967         in by mistake.
19968
19969 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
19970
19971         * report.cs, codegen.cs: Give the real stack trace to
19972         the error when an exception is thrown.
19973
19974 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
19975
19976         * decl.cs: only allocate hashtables for ifaces if 
19977         it is an iface!
19978
19979 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
19980
19981         * expression.cs: fix the error from cs0121-2.cs
19982         (a parent interface has two child interfaces that
19983         have a function with the same name and 0 params
19984         and the function is called through the parent).
19985
19986 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
19987
19988         * class.cs, rootcontext.cs, typmanager.cs: do not
19989         leak pointers.
19990
19991 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19992
19993         * codegen.cs: remove stack for the ec flow branching.
19994         It is already a linked list, so no need.
19995
19996 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
19997
19998         * Makefile: Allow custom profiler here.
19999
20000 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
20001
20002         * typemanager.cs (LookupType):
20003           - Use a static char [], because split takes
20004             a param array for args, so it was allocating
20005             every time.
20006           - Do not store true in a hashtable, it boxes.
20007
20008 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
20009
20010         * flowanalysis.cs: bytify common enums.
20011
20012 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20013
20014         * modifiers.cs: Add a new set of flags for the
20015         flags allowed on explicit interface impls.
20016         * cs-parser.jay: catch the use of modifiers in
20017         interfaces correctly.
20018         * class.cs: catch private void IFoo.Blah ().
20019
20020         All related to bug #50572.
20021
20022 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20023
20024         * decl.cs: Rewrite the consistant accessability checking.
20025         Accessability is not linear, it must be implemented in
20026         a tableish way. Fixes #49704.
20027
20028 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20029
20030         * expression.cs: Handle negation in a checked context.
20031         We must use subtraction from zero. Fixes #38674.
20032
20033 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
20034
20035         * class.cs: Ignore static void main in DLLs.
20036         * rootcontext.cs: Handle the target type here,
20037         since we are have to access it from class.cs
20038         * driver.cs: account for the above.
20039
20040 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
20041
20042         * report.cs: Give line numbers and files if available.
20043
20044 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
20045
20046         * driver.cs: Implement /addmodule.
20047
20048         * typemanager.cs:  Change 'modules' field so it now contains Modules not
20049         ModuleBuilders.
20050
20051 2003-12-20  Martin Baulig  <martin@ximian.com>
20052
20053         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
20054         (FieldBase.IsAssigned): Removed this field.
20055         (FieldBase.SetAssigned): New public method.
20056         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
20057
20058 2003-12-20  Martin Baulig  <martin@ximian.com>
20059
20060         * expression.cs (LocalVariableReference.DoResolve): Don't set
20061         `vi.Used' if we're called from DoResolveLValue().
20062
20063         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
20064         returns the usage vector it just merged into the current one -
20065         pass this one to UsageWarning().
20066         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
20067         of the `EmitContext', don't call this recursively on our children.
20068
20069 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
20070
20071         * driver.cs: Implement /target:module.
20072
20073 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
20074
20075         * support.cs (CharArrayHashtable): New helper class.
20076
20077         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
20078         char arrays, not strings, so we can avoid creating a string in
20079         consume_identifier if the identifier is a keyword.
20080
20081 2003-12-16  Martin Baulig  <martin@ximian.com>
20082
20083         * statement.cs (LocalInfo.Assigned): Removed this property.
20084         (LocalInfo.Flags): Removed `Assigned'.
20085         (LocalInfo.IsAssigned): New public method; takes the EmitContext
20086         and uses flow analysis.
20087         (Block.UsageWarning): Made this method private.
20088         (Block.Resolve): Call UsageWarning() if appropriate.
20089
20090         * expression.cs (LocalVariableReference.DoResolve): Always set
20091         LocalInfo.Used here.
20092
20093 2003-12-13  Martin Baulig  <martin@ximian.com>
20094
20095         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
20096         any value here; we're now using flow analysis to figure out
20097         whether a statement/block returns a value.
20098
20099 2003-12-13  Martin Baulig  <martin@ximian.com>
20100
20101         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
20102         working again.
20103         (FlowBranching.MergeFinally): Don't call
20104         `branching.CheckOutParameters()' here, this is called in
20105         MergeTopBlock().
20106         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
20107         when adding the `finally' vector.       
20108
20109 2003-12-13  Martin Baulig  <martin@ximian.com>
20110
20111         * flowanalysis.cs
20112         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
20113         actually work and also fix #48962.
20114
20115 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
20116
20117         * decl.cs: Do not check System.Object for nested types,
20118         since we know it does not have any. Big bang for buck:
20119
20120         BEFORE:
20121            Run 1:   8.35 seconds
20122            Run 2:   8.32 seconds
20123            corlib:  17.99 seconds
20124         AFTER:
20125            Run 1:   8.17 seconds
20126            Run 2:   8.17 seconds
20127            corlib:  17.39 seconds
20128
20129 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
20130
20131         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
20132         time we are returning 0 members, so we save alot here.
20133
20134 2003-12-11  Martin Baulig  <martin@ximian.com>
20135
20136         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
20137         `MergeChild()', also just take the `FlowBranching' as argument;
20138         call Merge() on it and return the result.
20139         (FlowBranching.Merge): We don't need to do anything if we just
20140         have one sibling.
20141
20142 2003-12-11  Martin Baulig  <martin@ximian.com>
20143
20144         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
20145         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
20146         Maurer for this idea.
20147
20148 2003-12-11  Martin Baulig  <martin@ximian.com>
20149
20150         * flowanalysis.cs (MergeResult): This class is now gone; we now
20151         use the `UsageVector' for this.  The reason for this is that if a
20152         branching just has one sibling, we don't need to "merge" them at
20153         all - that's the next step to do.
20154         (FlowBranching.Merge): We now return a `UsageVector' instead of a
20155         `MergeResult'.
20156
20157 2003-12-11  Martin Baulig  <martin@ximian.com>
20158
20159         Reworked flow analyis and made it more precise and bug-free.  The
20160         most important change is that we're now using a special `Reachability'
20161         class instead of having "magic" meanings of `FlowReturns'.  I'll
20162         do some more cleanups and optimizations and also add some more
20163         documentation this week.
20164
20165         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
20166         largely reworked this class.
20167         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
20168         the new `Reachability' class instead of having "magic" values here.
20169         (FlowBranching): We're now using an instance of `Reachability'
20170         instead of having separate `Returns', `Breaks' etc. fields.
20171
20172         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
20173         based on flow analysis; ignore the return value of block.Emit ().
20174
20175 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
20176
20177         * driver.cs typemanager.cs: Find the mono extensions to corlib even
20178         if they are private.
20179
20180 2003-12-09  Martin Baulig  <martin@ximian.com>
20181
20182         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
20183         call them directly on the UsageVector.
20184
20185 2003-12-09  Martin Baulig  <martin@ximian.com>
20186
20187         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
20188         Changed return type from `FlowReturns' to `Reachability'.
20189
20190 2003-12-09  Martin Baulig  <martin@ximian.com>
20191
20192         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
20193         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
20194         `Reachable' fields with a single `Reachability' one.
20195
20196 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20197
20198         * class.cs (FindMembers): Remove foreach's.
20199
20200         Bootstrap times:
20201
20202         BEFORE
20203                 Run 1:   8.74 seconds
20204                 Run 2:   8.71 seconds
20205
20206         AFTER
20207                 Run 1:   8.64 seconds
20208                 Run 2:   8.58 seconds
20209
20210
20211 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20212
20213         * cs-parser.jay:
20214         * gen-treedump.cs:
20215         * statement.cs:
20216         This patch does a few things:
20217                 1. EmptyStatement is now a singleton, so it is never reallocated.
20218                 2. All blah is EmptyStatement constructs have been changed to
20219                    blah == EmptyStatement.Value, which is much faster and valid
20220                    now that EmptyStatement is a singleton.
20221                 3. When resolving a block, rather than allocating a new array for
20222                    the non-empty statements, empty statements are replaced with
20223                    EmptyStatement.Value
20224                 4. Some recursive functions have been made non-recursive.
20225         Mainly the performance impact is from (3), however (1) and (2) are needed for
20226         this to work. (4) does not make a big difference in normal situations, however
20227         it makes the profile look saner.
20228
20229         Bootstrap times:
20230
20231         BEFORE
20232         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
20233         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
20234         Total memory allocated: 56397 KB
20235
20236         AFTER
20237         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
20238         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
20239         Total memory allocated: 55666 KB
20240
20241 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20242
20243         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
20244         than the hashtable in a hashtable version
20245
20246         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
20247         we always end up concating a string. This results in a huge perf
20248         loss, because many strings have to be tracked by the GC. In this
20249         patch, we first use a hashtable that works with two keys, so that
20250         the strings do not need to be concat'ed.
20251
20252         Bootstrap times:
20253         BEFORE
20254                 Run 1:   8.74 seconds
20255                 Run 2:   8.71 seconds
20256
20257         AFTER
20258                 Run 1:   8.65 seconds
20259                 Run 2:   8.56 seconds
20260
20261 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20262
20263         * Makefile: Add a new target `do-time' that does a quick and simple
20264         profile, leaving easy to parse output.
20265
20266 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
20267
20268         * codegen.cs (Init): Create the dynamic assembly with 
20269         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
20270
20271 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
20272
20273         * support.cs: Make the PtrHashtable use only one
20274         instance of its comparer.
20275
20276 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
20277
20278         * typemanager.cs: Fix lookup of GetNamespaces.
20279
20280 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
20281
20282         * expression.cs: Removed redundant line.
20283
20284         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
20285         ArrayLists, use for loops with bounds.  
20286
20287         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
20288         arraylist.
20289
20290         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
20291         arraylists, use for loop with bounds.
20292
20293         The above three changes give us a 0.071 second performance
20294         improvement out of 3.294 seconds down to 3.223.  On my machine
20295         the above changes reduced the memory usage by 1,387 KB during
20296         compiler bootstrap.
20297
20298         * cs-parser.jay (QualifiedIdentifier): New class used to represent
20299         QualifiedIdentifiers.  Before we created a new string through
20300         concatenation, and mostly later on, the result would be
20301         manipulated by DecomposeQI through string manipulation.
20302
20303         This reduced the compiler memory usage for bootstrapping from
20304         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
20305         compile times in 0.05 seconds.
20306
20307 2003-11-28  Dick Porter  <dick@ximian.com>
20308
20309         * support.cs: Do string compares with the Invariant culture.
20310
20311         * rootcontext.cs: 
20312         * gen-treedump.cs: 
20313         * expression.cs: 
20314         * driver.cs: 
20315         * decl.cs: 
20316         * codegen.cs: 
20317         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
20318         the comparison is done with the Invariant culture.
20319
20320 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
20321
20322         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
20323         GetEnumerator method.
20324
20325         (ProbeCollectionType): Iterate starting at the most specific type
20326         upwards looking for a GetEnumerator
20327
20328         * expression.cs: Shift count can be up to 31 for int/uint and 63
20329         for long/ulong.
20330
20331 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
20332
20333         * statement.cs (Block.LookupLabel): Also look for the label on the
20334         children blocks.  Use a hash table to keep track of visited
20335         nodes. 
20336
20337         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
20338         we actually did transform the other operand, otherwise fall back
20339         to the common codepath that casts to long.
20340
20341         * cs-tokenizer.cs: Use the same code pattern as the int case.
20342         Maybe I should do the parsing myself, and avoid depending on the
20343         Parse routines to get this done.
20344
20345 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
20346
20347         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
20348         which fixes bug 51347.  This time test it.
20349
20350         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
20351         attributes for example can not tell the difference between these.
20352         The difference was only a syntax feature of the language. 
20353
20354         * attribute.cs: Apply attributes to delegates.
20355
20356         * delegate.cs: Call the apply attributes method.
20357
20358 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
20359
20360         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
20361         comparing 0 vs Byte.MinValue, not the value
20362
20363         (ImplicitConversionRequired): When reporting a conversion error,
20364         use error 31 to print out the constant error instead of the
20365         simpler 29.
20366
20367         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
20368         which fixes bug 51347.
20369
20370 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
20371
20372         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
20373         which fixes the -warnaserror command line option.
20374
20375 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
20376
20377         * cfold.cs (DoNumericPromotions): During constant folding of
20378         additions on UIntConstant, special case intconstants with
20379         IntConstants like we do on the expression binary operator. 
20380
20381 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
20382
20383         * convert.cs (ImplicitReferenceConversion): We were missing a case
20384         (System.Enum are not value types or class types, so we need to
20385         classify them separatedly).
20386
20387         * driver.cs: We do not support error 2007.
20388
20389 2003-11-12 Jackson Harper <jackson@ximian.com>
20390
20391         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
20392         system directory. Also use the full file name so users can
20393         libraries names mscorlib-o-tron.dll in a non system dir.
20394
20395 2003-11-10  Martin Baulig  <martin@ximian.com>
20396
20397         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
20398         (TypeManager.InitCoreTypes): Initialize them here, but instead of
20399         calling `ResolveType()' on them, directly assign their `Type'.
20400
20401 2003-11-08  Martin Baulig  <martin@ximian.com>
20402
20403         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
20404         return value and the `out parent' parameter.
20405         (TypeContainer.DefineType): Moved the CS0644 check into
20406         GetClassBases().  Don't pass the interface types to the
20407         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
20408         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
20409
20410         * ecore.cs (TypeExpr.IsAttribute): New property.
20411         (TypeExpr.GetInterfaces): New method.
20412
20413         * interface.cs (Interface.GetInterfaceTypeByName): Return a
20414         TypeExpr instead of a Type.
20415         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
20416         (Interface.DefineType): Don't pass the interface types to the
20417         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
20418         them later and then call `TypeBulider.AddInterfaceImplementation()'.
20419
20420         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
20421         instead of a `Type[]'.
20422         (TypeManager.RegisterBuilder): Likewise.
20423         (TypeManager.AddUserInterface): Likewise.
20424         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
20425         `Type[]' and also return a `TypeExpr[]'.
20426         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
20427
20428 2003-11-08  Martin Baulig  <martin@ximian.com>
20429
20430         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
20431         Expression.     
20432
20433 2003-11-08  Martin Baulig  <martin@ximian.com>
20434
20435         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
20436         TypeManager.ResolveExpressionTypes().
20437
20438         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
20439         instead of an Expression.
20440         (TypeExpr): This is now an abstract base class for `TypeExpression'.
20441         (TypeExpression): New public class; formerly known as `TypeExpr'.
20442
20443         * expression.cs (ComposedCast): Derive from TypeExpr.
20444
20445         * typemanager.cs (TypeManager.system_*_expr): These are now
20446         TypExpr's instead of Expression's.
20447         (TypeManager.ResolveExpressionTypes): New public static function;
20448         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
20449         of them.        
20450
20451 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
20452
20453         * expression.cs (New.DoResolve): Do not dereference value that
20454         might be a null return.
20455
20456         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
20457         sure that the constant value has the right type.  Fixes an
20458         unreported bug, similar to 50425.
20459
20460         * const.cs (Const.LookupConstantValue): Call
20461         ImplicitStandardConversionExists before doing a conversion to
20462         avoid havng the TypeManager.ChangeType do conversions.
20463
20464         Reduced the number of casts used
20465
20466         (Const.ChangeType): New routine to enable reuse of the constant
20467         type changing code from statement.
20468
20469         * typemanager.cs (ChangeType): Move common initialization to
20470         static global variables.
20471
20472         Fixes #50425.
20473
20474         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
20475         every value type to go through, even if it was void.  Fix that. 
20476
20477         * cs-tokenizer.cs: Use is_identifier_start_character on the start
20478         character of the define, and the is_identifier_part_character for
20479         the rest of the string.
20480
20481 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
20482
20483         * expression.cs (UnaryMutator.EmitCode): When I updated
20484         LocalVariableReference.DoResolve, I overdid it, and dropped an
20485         optimization done on local variable references.
20486
20487 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
20488
20489         * ecore.cs: Convert the return from Ldlen into an int.
20490
20491 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
20492
20493         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
20494         the accessibility, this is a special case for toplevel non-public
20495         classes (internal for instance).
20496
20497 2003-10-20  Nick Drochak <ndrochak@gol.com>
20498
20499         * ecore.cs: Fix typo and build.  Needed another right paren.
20500
20501 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
20502
20503         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
20504         `internal' case regular and protected, but not allowing protected
20505         to be evaluated later.  Bug 49840
20506
20507 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
20508
20509         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
20510         to kb.Nlast, and not the kb.nFirst to isolate the switch
20511         statement.
20512
20513         Extract the underlying type, so enumerations of long/ulong are
20514         treated like long/ulong.
20515
20516 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
20517
20518         * expression.cs (New): Overload the meaning of RequestedType to
20519         track the possible creation of the NewDelegate type, since
20520         DoResolve is invoked more than once for new constructors on field
20521         initialization.
20522
20523         See bugs: #48800 and #37014
20524
20525         * cs-parser.jay (declare_local_constants): Take an arraylist
20526         instead of a single constant.
20527
20528         (local_constant_declaration): It should take a
20529         constant_declarators, not a constant_declarator.  Fixes 49487
20530
20531         * convert.cs: Fix error report.
20532
20533 2003-10-13 Jackson Harper <jackson@ximian.com>
20534
20535         * typemanager.cs (TypeToCoreType): Add float and double this fixes
20536         bug #49611
20537
20538 2003-10-09  Martin Baulig  <martin@ximian.com>
20539
20540         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
20541         to the .ctor.
20542         (MethodCore.DoDefineParameters): Removed the TypeContainer
20543         argument; use the DeclSpace which was passed to the .ctor instead.
20544         (MethodCore.CheckParameter): Take a DeclSpace instead of a
20545         TypeContainer; we only need a DeclSpace here.
20546
20547 2003-10-09  Martin Baulig  <martin@ximian.com>
20548
20549         * class.cs (MethodData): Added additional `DeclSpace ds' argument
20550         to the .ctor.
20551         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
20552         EmitContext's .ctor.    
20553
20554 2003-10-09  Martin Baulig  <martin@ximian.com>
20555
20556         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
20557         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
20558         AsAccessible(), moved them as well.
20559
20560         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
20561
20562 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
20563
20564         * cs-parser.jay : Renamed yyName to yyNames related to jay.
20565
20566 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
20567
20568         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
20569         generation for >=, as spotted by Paolo, bug 48679.  
20570         Patch from David Waite.
20571
20572         * cs-tokenizer.cs: Add handling for #pragma.
20573
20574         * cs-parser.jay: Allow for both yield and yield return in the
20575         syntax.  The anti-cobolization of C# fight will go on!
20576
20577         * class.cs (TypeBuilder.DefineType): Catch error condition here
20578         (Parent.DefineType erroring out and returning null).
20579
20580         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
20581         coping with enumerations variables, we were mistakenly processing
20582         them as a regular value type instead of built-in types.  Fixes the
20583         bug #48063
20584
20585         * typemanager.cs (IsBuiltinOrEnum): New method.
20586
20587 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
20588
20589         * cs-parser.jay: Upgrade: yield now needs the return clause.
20590
20591 2003-09-19  Martin Baulig  <martin@ximian.com>
20592
20593         * decl.cs (MemberCache.SetupCacheForInterface): Take a
20594         `MemberCache parent' argument.  Normally, an interface doesn't
20595         have a parent type except System.Object, but we use this in gmcs
20596         for generic type parameters.
20597
20598 2003-09-18  Martin Baulig  <martin@ximian.com>
20599
20600         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
20601         on `type.IsInterface'; don't check whether the type has a parent
20602         to determine whether it's an interface.
20603
20604 2003-09-15  Martin Baulig  <martin@ximian.com>
20605
20606         * class.cs (TypeContainer.DefineType): Added an error flag to
20607         avoid reporting duplicate CS0146's ("class definition is
20608         circular.").
20609
20610         * driver.cs (Driver.MainDriver): Abort if
20611         RootContext.ResolveTree() reported any errors.
20612
20613 2003-09-07  Martin Baulig  <martin@ximian.com>
20614
20615         * report.cs (Error, Warning): Added overloaded versions which take
20616         a `params object[] args' and call String.Format().
20617
20618 2003-09-07  Martin Baulig  <martin@ximian.com>
20619
20620         * decl.cs (DeclSpace..ctor): Don't call
20621         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
20622         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
20623         (DeclSpace.RecordDecl): New method.
20624
20625         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
20626
20627 2003-09-02  Ravi Pratap  <ravi@ximian.com>
20628
20629         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
20630         value attributes to be applied to ParameterBuilders.
20631
20632         * class.cs (MethodCore.LabelParameters): Make static and more
20633         generic so that it can be used from other places - like interface
20634         methods, for instance.
20635
20636         * interface.cs (Interface.Emit): Call LabelParameters before
20637         emitting attributes on the InterfaceMethod.
20638
20639 2003-08-26  Martin Baulig  <martin@ximian.com>
20640
20641         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
20642         resolving aliases; fixes #47927.
20643
20644 2003-08-26  Martin Baulig  <martin@ximian.com>
20645
20646         * statement.cs (Using.DoResolve): This is internally emitting a
20647         try/finally clause, so we need to set ec.NeedExplicitReturn if we
20648         do not always return.  Fixes #47681.
20649
20650 2003-08-26  Martin Baulig  <martin@ximian.com>
20651
20652         * decl.cs (MemberCore): Moved WarningNotHiding(),
20653         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
20654         into MemberBase.
20655         (AdditionResult): Make this nested in DeclSpace.
20656         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
20657         argument; call NamespaceEntry.Define() unless we're nested in a
20658         class or struct.
20659
20660         * namespace.cs (Namespace.DefineName): New public function.  This
20661         is called from DeclSpace's .ctor to add 
20662         (Namespace.Lookup): Include DeclSpaces in the lookup.
20663
20664         * class.cs (Operator): Derive from MemberBase, not MemberCore.
20665
20666         * const.cs (Const): Derive from MemberBase, not MemberCore.     
20667
20668 2003-08-25  Martin Baulig  <martin@ximian.com>
20669
20670         * convert.cs (Convert.ExplicitReferenceConversion): When
20671         converting from an interface type to a class, unbox if the target
20672         type is a struct type.  Fixes #47822.
20673
20674 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20675
20676         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
20677         #47854.
20678
20679 2003-08-22  Martin Baulig  <martin@ximian.com>
20680
20681         * class.cs (TypeManager.DefineType): When defining a nested type,
20682         call DefineType() on our parent; fixes #47801.
20683
20684 2003-08-22  Martin Baulig  <martin@ximian.com>
20685
20686         * class.cs (MethodData.Define): While checking if a method is an
20687         interface implementation, improve the test a bit more to fix #47654.
20688
20689 2003-08-22  Martin Baulig  <martin@ximian.com>
20690
20691         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
20692         correctly; fixes #47722.
20693
20694 2003-08-22  Martin Baulig  <martin@ximian.com>
20695
20696         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
20697         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
20698
20699         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
20700
20701 2003-08-22  Martin Baulig  <martin@ximian.com>
20702
20703         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
20704         can only be assigned in static constructors.  Fixes #47161.
20705
20706 2003-08-22  Martin Baulig  <martin@ximian.com>
20707
20708         Rewrote and improved the flow analysis code.
20709
20710         * flowbranching.cs (FlowBranching): Make this class abstract.
20711         (FlowBranching.CreateBranching): New static function to create a
20712         new flow branching.
20713         (FlowBranchingBlock, FlowBranchingException): New classes.
20714         (FlowBranching.UsageVector.Type): New public readonly field.
20715         (FlowBranching.UsageVector.Breaks): Removed the setter.
20716         (FlowBranching.UsageVector.Returns): Removed the setter.
20717         (FlowBranching.UsageVector): Added Break(), Return(),
20718         NeverReachable() and Throw() methods to modify the reachability.
20719         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
20720         done by FlowBranching.Merge().
20721         (FlowBranching.UsageVector.MergeChild): New method; merges the
20722         merge result into the current vector.
20723         (FlowBranching.Merge): New abstract method to merge a branching.
20724
20725 2003-08-12  Martin Baulig  <martin@ximian.com>
20726
20727         * expression.cs (Indirection.CacheTemporaries): Create the
20728         LocalTemporary with the pointer type, not its element type.
20729
20730 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
20731
20732         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
20733         token was a keyword or not.
20734
20735         Add `error' options where an IDENTIFIER was expected;  Provide
20736         CheckToken and CheckIdentifierToken convenience error reporting
20737         functions. 
20738
20739         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
20740
20741         * decl.cs: Rename `NamespaceEntry Namespace' public field into
20742         NameSpaceEntry NameSpaceEntry.
20743
20744         (LookupInterfaceOrClass): Avoid creating a full qualified name
20745         from namespace and name: avoid doing lookups when we know the
20746         namespace is non-existant.   Use new Tree.LookupByNamespace which
20747         looks up DeclSpaces based on their namespace, name pair.
20748
20749         * driver.cs: Provide a new `parser verbose' to display the
20750         exception thrown during parsing.  This is turned off by default
20751         now, so the output of a failure from mcs is more graceful.
20752
20753         * namespace.cs: Track all the namespaces defined in a hashtable
20754         for quick lookup.
20755
20756         (IsNamespace): New method
20757
20758 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
20759
20760         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
20761         we know that we need to concatenate (full typename can never be
20762         null). 
20763
20764         * class.cs: ditto.
20765
20766         * statement.cs: Use a bitfield;  Do not initialize to null things
20767         which are done by the constructor by default.
20768
20769         * cs-parser.jay: bug fix, parameter was 4, not 3.
20770
20771         * expression.cs: Just use the property;
20772
20773         * statement.cs: No need for GetVariableInfo method.
20774
20775 2003-08-08  Martin Baulig  <martin@ximian.com>
20776
20777         * flowanalysis.cs (FlowReturns): This is now nested in the
20778         `FlowBranching' class.
20779         (MyBitVector): Moved this here from statement.cs.
20780         (FlowBranching.SiblingType): New enum type.
20781         (FlowBranching.CreateSibling): Added `SiblingType' argument.
20782
20783 2003-08-07  Martin Baulig  <martin@ximian.com>
20784
20785         * flowanalysis.cs (FlowBranchingType): This is now nested in the
20786         `FlowBranching' class and called `BranchingType'.
20787
20788 2003-08-07  Martin Baulig  <martin@ximian.com>
20789
20790         * flowanalysis.cs: Moved all the control flow analysis code into
20791         its own file.
20792
20793 2003-08-07  Martin Baulig  <martin@ximian.com>
20794
20795         * assign.cs (Assign.DoResolve): `target' must either be an
20796         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
20797         #37319.
20798
20799 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
20800
20801         * expression.cs (BinaryMethod): This kind of expression is created by the
20802         Binary class if it determines that the operator has to be handled
20803         by a method.
20804
20805         (BinaryDelegate): This kind of expression is created if we are
20806         dealing with a + or - operator on delegates.
20807
20808         (Binary): remove method, argumetns, and DelegateOperator: when
20809         dealing with methods, 
20810
20811         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
20812
20813         * statement.cs (Block): use bitfields for the three extra booleans
20814         we had in use.   Remove unused topblock parameter.
20815
20816         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
20817
20818         * assign.cs: Drop extra unneeded tests.
20819
20820 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
20821
20822         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
20823
20824         * statement.cs (Foreach): Use VariableStorage instead of
20825         LocalBuilders.   
20826
20827         * codegen.cs (VariableStorage): New class used by clients that
20828         require a variable stored: locals or fields for variables that
20829         need to live across yield.
20830
20831         Maybe provide a convenience api for EmitThis+EmitLoad?
20832
20833         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
20834         these bad boys.
20835
20836 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
20837
20838         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
20839         RemapParameterLValue): New methods that are used to turn a
20840         precomputed FieldInfo into an expression like this:
20841
20842                 instance.FieldInfo
20843
20844         The idea is to use this instead of making LocalVariableReference
20845         have more than one meaning.
20846
20847         * cs-parser.jay: Add error production to BASE.
20848
20849         * ecore.cs: Deal with TypeManager.GetField returning null, which
20850         is now a valid return value.
20851
20852         (FieldExprNoAddress): New expression for Fields whose address can
20853         not be taken.
20854
20855         * expression.cs (LocalVariableReference): During the resolve
20856         phases, create new expressions if we are in a remapping context.
20857         Remove code that dealt with remapping here.
20858
20859         (ParameterReference): same.
20860
20861         (ProxyInstance): New expression, like the `This' expression, but
20862         it is born fully resolved.  We know what we are doing, so remove
20863         the errors that are targeted to user-provided uses of `this'.
20864
20865         * statement.cs (Foreach): our variable is now stored as an
20866         Expression;  During resolution, follow the protocol, dont just
20867         assume it will return this.
20868
20869 2003-08-06  Martin Baulig  <martin@ximian.com>
20870
20871         * support.cs (SeekableStreamReader.cs): New public class.
20872
20873         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
20874         SeekableStreamReader instead of the normal StreamReader.
20875
20876 2003-08-04  Martin Baulig  <martin@ximian.com>
20877
20878         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
20879         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
20880         deambiguate casts and delegate invocations.
20881         (parenthesized_expression): Use the new tokens to ensure this is
20882         not a cast of method invocation.
20883
20884         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
20885         when reading a `)' and Deambiguate_CloseParens () was previously
20886         called.
20887
20888         * expression.cs (ParenthesizedExpression): New class.  This is
20889         just used for the CS0075 test.
20890         (Binary.DoResolve): Check for CS0075.   
20891
20892 2003-07-29  Ravi Pratap  <ravi@ximian.com>
20893
20894         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
20895         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
20896         reference comparison.
20897
20898         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
20899         examine the ReturnType for equality - this is necessary in the
20900         cases of implicit and explicit operators whose signature also
20901         includes the return type.
20902
20903 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
20904
20905         * namespace.cs: Cache the result of the namespace computation,
20906         instead of computing it every time.
20907
20908 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
20909
20910         * decl.cs: Use a global arraylist that we reuse over invocations
20911         to avoid excesive memory consumption.  Reduces memory usage on an
20912         mcs compile by one meg (45 average).
20913
20914         * typemanager.cs (LookupTypeReflection): In .NET pointers are
20915         private, work around that.
20916
20917 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
20918
20919         * literal.cs (IntLiteral): Define Zero and One static literals. 
20920
20921         * cs-parser.jay (integer_literal): use static literals to reduce
20922         memory usage for the most used literals (0, 1 and -1).  211kb
20923         reduced in memory usage.
20924
20925         Replace all calls to `new ArrayList' with `new
20926         ArrayList(4)' which is a good average number for most allocations,
20927         and also requires only 16 bytes of memory for its buffer by
20928         default. 
20929
20930         This reduced MCS memory usage in seven megabytes for the RSS after
20931         bootstrapping.
20932
20933 2003-07-28  Ravi Pratap  <ravi@ximian.com>
20934
20935         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
20936         handle params methods the correct way by forming only one
20937         applicable set with params and normal methods in them. Earlier we
20938         were looking at params methods only if we found no normal methods
20939         which was not the correct thing to do.
20940
20941         (Invocation.BetterFunction): Take separate arguments indicating
20942         when candidate and the best method are params methods in their
20943         expanded form.
20944
20945         This fixes bugs #43367 and #46199.
20946
20947         * attribute.cs: Documentation updates.
20948
20949         (CheckAttribute): Rename to CheckAttributeTarget.
20950         (GetValidPlaces): Rename to GetValidTargets.
20951
20952         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
20953         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
20954
20955         Fixes bug #44468.
20956
20957 2003-07-28  Martin Baulig  <martin@ximian.com>
20958
20959         * class.cs (TypeContainer.DefineMembers): Use the base type's full
20960         name when looking up the base class of a nested class.  Fixes #46977.
20961
20962 2003-07-26  Martin Baulig  <martin@ximian.com>
20963
20964         * expression.cs (Indexers.Indexer): New nested struct; contains
20965         getter, setter and the indexer's type.
20966         (Indexers.Properties): This is now an ArrayList of
20967         Indexers.Indexer's.
20968         (IndexerAccess.DoResolveLValue): Correctly set the type if the
20969         indexer doesn't have any getters.
20970
20971         * assign.cs (Assign.DoResolve): Also do the implicit conversions
20972         for embedded property and indexer assignments.
20973
20974 2003-07-26  Martin Baulig  <martin@ximian.com>
20975
20976         * cs-tokenizer.cs (Tokenizer.xtoken): Report a CS1040 if a
20977         preprocessor directive is not the first non-whitespace character
20978         on a line.
20979
20980 2003-07-26  Martin Baulig  <martin@ximian.com>
20981
20982         * namespace.cs (NamespaceEntry.Lookup): New method; rewrote the
20983         namespace parsing, follow the spec more closely.
20984
20985         * rootcontext.cs (RootContext.NamespaceLookup): Use the new
20986         NamespaceEntry.Lookup().
20987
20988 2003-07-25  Martin Baulig  <martin@ximian.com>
20989
20990         * MethodCore.cs (OverridesSomething): New public field; it's set
20991         from TypeContainer.DefineMembers if this method overrides
20992         something (which doesn't need to be a method).  Fix #39462.
20993
20994 2003-07-25  Ravi Pratap  <ravi@ximian.com>
20995
20996         * typemanager.cs (GetMembers): Ensure that the list of members is
20997         reversed. This keeps things in sync.
20998
20999         * attribute.cs (Attribute.CheckAttribute): Break as soon as we
21000         find an AttributeUsage attribute.
21001
21002         * expression.cs (Invocation.OverloadResolve): Perform the check
21003         which disallows Invoke to be directly called on a Delegate.
21004
21005         (Error_InvokeOnDelegate): Report error cs1533.
21006
21007 2003-07-25  Martin Baulig  <martin@ximian.com>
21008
21009         * expression.cs (Indexers.GetIndexersForType): Only look in the
21010         interface hierarchy if the requested type is already an
21011         interface.  Fixes #46788 while keeping #46502 fixed.
21012
21013 2003-07-25  Martin Baulig  <martin@ximian.com>
21014
21015         * class.cs (TypeContainer.DefineMembers): Check whether all
21016         readonly fields have been assigned and report warning CS0649 if
21017         not.
21018
21019         * statement.cs (LocalInfo.IsFixed): Always return true if this is
21020         a valuetype.
21021
21022 2003-07-24  Ravi Pratap  <ravi@ximian.com>
21023
21024         * decl.cs (MemberCache.AddMethods): Reverse the order of the array
21025         returned from GetMethods to make things consistent with the
21026         assumptions MCS makes about ordering of methods.
21027
21028         This should comprehensively fix bug #45127 and it does :-)
21029
21030         * ecore.cs (MethodGroupExpr.DeclaringType): Correct bug - the
21031         ordering is actually reverse.
21032
21033         * Clean up some debug messages I left lying around.
21034
21035         * interface.cs (Populate*): Get rid of code which emits attributes
21036         since the stage in which we emit attributes is the 'Emit' stage,
21037         not the define stage.
21038
21039         (Emit): Move attribute emission for interface members here.
21040
21041 2003-07-22  Ravi Pratap  <ravi@ximian.com>
21042
21043         * expression.cs (Invocation.OverloadResolve): Follow the spec more
21044         closely: we eliminate methods in base types when we have an
21045         applicable method in a top-level type.
21046
21047         Please see section 14.5.5.1 for an exact description of what goes
21048         on. 
21049
21050         This fixes bug #45127 and a host of other related to corlib compilation.
21051
21052         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
21053         array is the method corresponding to the top-level type (this is
21054         because of the changes made to icall.c) so we change this
21055         accordingly.
21056
21057         (MethodGroupExpr.Name): This too.
21058
21059         * typemanager.cs (GetElementType): New method which does the right
21060         thing when compiling corlib. 
21061
21062         * everywhere: Make use of the above in the relevant places.
21063
21064 2003-07-22  Martin Baulig  <martin@ximian.com>
21065
21066         * cs-parser.jay (invocation_expression): Moved
21067         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
21068         `cast_expression', but create a InvocationOrCast which later
21069         resolves to either an Invocation or a Cast.
21070
21071         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
21072         method; call this before EmitStatement() to make sure that this
21073         expression can be used as a statement.
21074
21075         * expression.cs (InvocationOrCast): New class; resolves to either
21076         an Invocation or a Cast.
21077
21078         * statement.cs (StatementExpression): Call ResolveStatement() on
21079         the ExpressionStatement before emitting it.
21080
21081 2003-07-21  Martin Baulig  <martin@ximian.com>
21082
21083         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
21084         `ref' and `out' attributes match; fixes #46220.
21085         (MemberAccess.ResolveMemberAccess): You can't reference a type
21086         through an expression; fixes #33180.
21087         (Indexers.GetIndexersForType): Don't return the indexers from
21088         interfaces the class implements; fixes #46502.
21089
21090 2003-07-21  Martin Baulig  <martin@ximian.com>
21091
21092         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
21093         CS0661 checks; fixes bug #30442.
21094
21095 2003-07-21  Martin Baulig  <martin@ximian.com>
21096
21097         * decl.cs (AdditionResult): Added `Error'.
21098
21099         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
21100
21101         * typemanager.cs (TypeManager.ChangeType): Catch exceptions;
21102         makes cs0031.cs actually work.
21103
21104 2003-07-20  Martin Baulig  <martin@ximian.com>
21105
21106         * namespace.cs: Fixed that bug which caused a crash when compiling
21107         the debugger's GUI.
21108
21109 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
21110
21111         * typemanager.cs (LookupTypeReflection): Never expose types which
21112         are NotPublic, NestedPrivate, NestedAssembly, or
21113         NestedFamANDAssem.  We used to return these, and later do a check
21114         that would report a meaningful error, but the problem is that we
21115         would not get the real match, if there was a name override.
21116
21117 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
21118
21119         * namespace.cs (Namespace, Name): Do not compute the namespace
21120         name dynamically, compute it in the constructor.  This reduced
21121         memory usage by 1697 KB.
21122
21123         * driver.cs: Use --pause to pause at the end.
21124
21125 2003-07-17  Peter Williams  <peter@newton.cx>
21126
21127         * Makefile: Change the name of the test target so that it doesn't
21128         conflict with the recursive test target.
21129
21130 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
21131
21132         * expression.cs (LocalVariableReference.Emit, EmitAssign,
21133         AddressOf): Do not use EmitThis, that was wrong, use the actual
21134         this pointer.
21135
21136 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
21137
21138         * class.cs (MethodData.Define): While checking if a method is an
21139         interface implementation, improve the test: If we are not public
21140         (use new test here: use the computed MethodAttributes directly,
21141         instead of the parsed modifier flags) check if the `implementing'
21142         method comes from an interface or not.
21143
21144         * pending.cs (VerifyPendingMethods): Slightly better error
21145         message.
21146
21147         * makefile: add test target that does the mcs bootstrap.
21148
21149 2003-07-16  Ravi Pratap  <ravi@ximian.com>
21150
21151         * interface.cs (Define): Do nothing here since there are no
21152         members to populate etc. Move the attribute emission out of here
21153         since this was just totally the wrong place to put it. Attribute
21154         application happens during the 'Emit' phase, not in the 'Define'
21155         phase.
21156
21157         (Emit): Add this method and move the attribute emission here
21158
21159         * rootcontext.cs (EmitCode): Call the Emit method on interface
21160         types too.
21161
21162 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
21163
21164         * expression.cs (OverloadResolve): Report error only if Location
21165         is not 'Null' which means that there was a probe going on.
21166
21167 2003-07-14  Martin Baulig  <martin@ximian.com>
21168
21169         * expression.cs (ConditionalLogicalOperator): New public class to
21170         implement user defined conditional logical operators.
21171         This is section 14.11.2 in the spec and bug #40505.
21172
21173 2003-07-14  Martin Baulig  <martin@ximian.com>
21174
21175         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
21176
21177 2003-07-14  Martin Baulig  <martin@ximian.com>
21178
21179         * codegen.cs (EmitContext.InFixedInitializer): New public field.
21180
21181         * ecore.cs (IVariable.VerifyFixed): New interface method.
21182
21183         * expression.cs (Unary.ResolveOperator): When resolving the `&'
21184         operator, check whether the variable is actually fixed.  Fixes bug
21185         #36055.  Set a variable definitely assigned when taking its
21186         address as required by the spec.
21187
21188         * statement.cs (LocalInfo.IsFixed): New field.
21189         (LocalInfo.MakePinned): Set `IsFixed' to true.
21190
21191 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
21192
21193         * attribute.cs (Attribute.Resolve): While doing a Member lookup
21194         for .ctors, ensure that we only ask for members declared in the
21195         attribute type (BindingFlags.DeclaredOnly).
21196
21197         Fixes bug #43632.
21198
21199         * expression.cs (Error_WrongNumArguments): Report error 1501
21200         correctly the way CSC does.
21201
21202 2003-07-13  Martin Baulig  <martin@ximian.com>
21203
21204         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
21205         lookup on the fully qualified name, to make things like "X.X" work
21206         where "X.X" is a fully qualified type name, but we also have a
21207         namespace "X" in the using list.  Fixes #41975.
21208
21209 2003-07-13  Martin Baulig  <martin@ximian.com>
21210
21211         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
21212         function. If we're a CompoundAssign, we need to create an embedded
21213         CompoundAssign, not an embedded Assign.
21214         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
21215         Fixes #45854.
21216
21217 2003-07-13  Martin Baulig  <martin@ximian.com>
21218
21219         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
21220         work to fix bug #46088.
21221
21222 2003-07-13  Ravi Pratap <ravi@ximian.com>
21223
21224         * class.cs (Operator.Emit): Do not emit attributes here - it is
21225         taken care of by the Method class that we delegate too. This takes
21226         care of bug #45876.
21227
21228 2003-07-10  Martin Baulig  <martin@ximian.com>
21229
21230         * expression.cs (TypeOfVoid): New class.
21231         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
21232
21233 2003-07-10  Martin Baulig  <martin@ximian.com>
21234
21235         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
21236         bug #35957.
21237
21238 2003-07-10  Martin Baulig  <martin@ximian.com>
21239
21240         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
21241         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
21242
21243         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
21244
21245         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
21246
21247 2003-07-10  Martin Baulig  <martin@ximian.com>
21248
21249         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
21250         of decimal.  Fixes #42850.
21251
21252         NOTE: I also fixed the created byte blob, but this doesn't work on
21253         the MS runtime and csc never produces any byte blobs for decimal
21254         arrays.
21255
21256 2003-07-10  Martin Baulig  <martin@ximian.com>
21257
21258         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
21259         structs; fixes #32068.
21260         (Block.AddChildVariableNames): Fixed #44302.
21261
21262 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21263
21264         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
21265
21266 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21267
21268         * attribute.cs: And this test is onger needed.
21269
21270 2003-07-08  Martin Baulig  <martin@ximian.com>
21271
21272         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
21273         inaccessible types.  Fixes #36313.
21274
21275         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
21276
21277         * namespace.cs (NamespaceEntry): Create implicit entries for all
21278         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
21279         implicit entries for N1.N2 and N1.
21280
21281 2003-07-08  Martin Baulig  <martin@ximian.com>
21282
21283         Rewrote the handling of namespaces to fix a lot of the issues
21284         wrt. `using' aliases etc.
21285
21286         * namespace.cs (Namespace): Splitted this class into a
21287         per-assembly `Namespace' and a per-file `NamespaceEntry'.
21288
21289         * typemanager.cs (TypeManager.IsNamespace): Removed.
21290         (TypeManager.ComputeNamespaces): Only compute namespaces from
21291         loaded assemblies here, not the namespaces from the assembly we're
21292         currently compiling.
21293
21294 2003-07-08  Martin Baulig  <martin@ximian.com>
21295
21296         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
21297
21298 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21299
21300         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
21301         already fixed it.  
21302
21303         I thought about the memory savings here, but LookupTypeReflection
21304         is used under already very constrained scenarios.  Compiling
21305         corlib or mcs only exposes one hit, so it would not really reduce
21306         any memory consumption.
21307
21308 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21309
21310         * typemanager.cs: fixes bug #45889 by only adding public types from
21311         other assemblies to the list of known types.
21312
21313 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21314
21315         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
21316         on the type we resolved.
21317
21318 2003-07-05  Martin Baulig  <martin@ximian.com>
21319
21320         * pending.cs (PendingImplementation.ParentImplements): Don't
21321         create the proxy if the parent is abstract.
21322
21323         * class.cs (TypeContainer.DefineIndexers): Process explicit
21324         interface implementations first.  Fixes #37714.
21325
21326 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
21327
21328         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
21329         defined recursively;  but since we modify the input parameters
21330         (left is set to `this' temporarily), we reset this value if the
21331         left_is_explicit is false, which gives the original semantics to
21332         the code.  
21333
21334         * literal.cs (NullPointer): new class used to represent a null
21335         literal in a pointer context.
21336
21337         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
21338         type is a pointer, use a NullPointer object instead of a
21339         NullLiteral.   Closes 43687
21340
21341         (ExplicitConversion): Convert pointer values using
21342         the conv opcode to the proper type.
21343
21344         * ecore.cs (New): change ValueTypeVariable property into a method,
21345         that returns whether the valuetype is suitable for being used.
21346
21347         * expression.cs (Binary.DoNumericPromotions): Only return if we
21348         the int constant was a valid uint, and we can return both left and
21349         right as uints.  If not, we continue processing, to trigger the
21350         type conversion.  This fixes 39018.
21351
21352         * statement.cs (Block.EmitMeta): During constant resolution, set
21353         the CurrentBlock property on the emitcontext, so that we resolve
21354         constants propertly.
21355
21356 2003-07-02  Martin Baulig  <martin@ximian.com>
21357
21358         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
21359         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
21360
21361         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
21362         than emitting it here.
21363
21364         * statement.cs: Fixed some more flow analysis bugs.
21365
21366 2003-07-02  Martin Baulig  <martin@ximian.com>
21367
21368         * class.cs (MethodData.Define): When implementing interface
21369         methods, set Final unless we're Virtual.
21370
21371         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
21372         check work for interface methods.
21373
21374 2003-07-01  Martin Baulig  <martin@ximian.com>
21375
21376         * ecore.cs (EmitContext.This): Replaced this property with a
21377         GetThis() method which takes a Location argument.  This ensures
21378         that we get the correct error location for a CS0188.
21379
21380 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
21381
21382         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
21383         ImplicitStandardConversion.
21384
21385         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
21386
21387 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
21388
21389         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
21390         optimization.
21391
21392 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
21393
21394         * class.cs (Constructor.Define): Turn off initlocals for unsafe
21395         constructors.
21396
21397         (MethodData.Define): Turn off initlocals for unsafe methods.
21398
21399 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
21400
21401         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
21402         complete;  Fixes #37521.
21403
21404         * delegate.cs: Use Modifiers.TypeAttr to compute the
21405         TypeAttributes, instead of rolling our own.  This makes the flags
21406         correct for the delegates.
21407
21408 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
21409
21410         * class.cs (Constructor.Define): Set the private flag for static
21411         constructors as well.
21412
21413         * cs-parser.jay (statement_expression): Set the return value to
21414         null, to avoid a crash when we catch an error.
21415
21416 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
21417
21418         * cs-parser.jay: Applied patch from Jackson that adds support for
21419         extern and unsafe modifiers to destructor declarations.
21420
21421         * expression.cs: Report error 21 if the user is trying to index a
21422         System.Array.
21423
21424         * driver.cs: Add an error message, suggested by the bug report.
21425
21426         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
21427         if we do not have a ": this ()" constructor initializer.  Fixes 45149
21428
21429 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
21430
21431         * namespace.cs: Add some information to reduce FAQs.
21432
21433 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
21434
21435         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
21436         underlying enumeration types.  Fixes #43915.
21437
21438         * expression.cs: Treat ushort/short as legal values to be used in
21439         bitwise operations.
21440
21441 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
21442
21443         * delegate.cs: transfer custom attributes for paramenters from
21444         the delegate declaration to Invoke and BeginInvoke.
21445
21446 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
21447
21448         * attribute.cs: handle custom marshalers and emit marshal info
21449         for fields, too.
21450
21451 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
21452
21453         * makefile.gnu: Added anonymous.cs to the compiler sources.
21454
21455 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
21456
21457         * iterators.cs: Change the name of the proxy class to include two
21458         underscores.
21459
21460         * cs-parser.jay: Update grammar to include anonymous methods.
21461
21462         * anonymous.cs: new file.
21463
21464 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
21465
21466         * class.cs (Field.Define): Add missing test for pointers and
21467         safety. 
21468
21469 2003-05-27  Ravi Pratap  <ravi@ximian.com>
21470
21471         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
21472         we use the stobj opcode.
21473
21474         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
21475         since it wasn't the correct fix. 
21476
21477         It still is puzzling that we are required to use stobj for IntPtr
21478         which seems to be a ValueType.
21479
21480 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
21481
21482         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
21483         during regular simple name resolution.   Now, the trick is that
21484         instead of returning for processing the simplename, we do a
21485         TypeManager.LookupType (ie, a rooted lookup as opposed to a
21486         contextual lookup type).   If a match is found, return that, if
21487         not, return for further composition.
21488
21489         This fixes long-standing 30485.
21490
21491         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
21492         using the address to initialize an object, do an Stobj instead of
21493         using the regular Stelem.
21494
21495         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
21496         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
21497         Because if we are a BaseIndexerAccess that value will be true.
21498         Fixes 43643.
21499
21500         * statement.cs (GotoCase.Resolve): Return after reporting an
21501         error, do not attempt to continue. 
21502
21503         * expression.cs (PointerArithmetic.Emit): If our operand is a
21504         long, convert our constants to match the operand before
21505         multiplying.  Convert to I type before adding.   Fixes 43670.
21506
21507 2003-05-14  Ravi Pratap  <ravi@ximian.com>
21508
21509         * enum.cs (ImplicitConversionExists) : Rename to
21510         ImplicitEnumConversionExists to remove ambiguity. 
21511
21512         * ecore.cs (NullCast): New type of cast expression class which
21513         basically is very similar to EmptyCast with the difference being
21514         it still is a constant since it is used only to cast a null to
21515         something else
21516         (eg. (string) null)
21517
21518         * convert.cs (ImplicitReferenceConversion): When casting a null
21519         literal, we return a NullCast.
21520
21521         * literal.cs (NullLiteralTyped): Remove - I don't see why this
21522         should be around anymore.
21523
21524         The renaming (reported was slightly wrong). Corrections:
21525
21526         ConvertImplicitStandard -> ImplicitConversionStandard
21527         ConvertExplicitStandard -> ExplicitConversionStandard
21528
21529         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
21530         before passing them in !
21531
21532         * convert.cs (ImplicitConversionStandard): When comparing for
21533         equal expr and target types, ensure that expr is not a
21534         NullLiteral.
21535
21536         In general, we must not be checking (expr_type ==
21537         target_type) in the top level conversion methods
21538         (ImplicitConversion, ExplicitConversion etc). This checking is
21539         done in the methods that they delegate to.
21540
21541 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
21542
21543         * convert.cs: Move Error_CannotConvertType,
21544         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
21545         ImplicitNumericConversion, ImplicitConversionExists,
21546         ImplicitUserConversionExists, StandardConversionExists,
21547         FindMostEncompassedType, FindMostSpecificSource,
21548         FindMostSpecificTarget, ImplicitUserConversion,
21549         ExplicitUserConversion, GetConversionOperators,
21550         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
21551         TryImplicitIntConversion, Error_CannotConvertImplicit,
21552         ConvertImplicitRequired, ConvertNumericExplicit,
21553         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
21554         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
21555         its own file.
21556
21557         Perform the following renames:
21558
21559         StandardConversionExists -> ImplicitStandardConversionExists
21560         ConvertImplicit -> ImplicitConversion
21561         ConvertImplicitStandard -> ImplicitStandardConversion
21562         TryImplicitIntConversion -> ImplicitIntConversion
21563         ConvertImplicitRequired -> ImplicitConversionRequired
21564         ConvertNumericExplicit -> ExplicitNumericConversion
21565         ConvertReferenceExplicit -> ExplicitReferenceConversion
21566         ConvertExplicit -> ExplicitConversion
21567         ConvertExplicitStandard -> ExplicitStandardConversion
21568
21569 2003-05-19  Martin Baulig  <martin@ximian.com>
21570
21571         * statement.cs (TypeInfo.StructInfo): Made this type protected.
21572         (TypeInfo): Added support for structs having structs as fields.
21573
21574         * ecore.cs (FieldExpr): Implement IVariable.
21575         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
21576         VariableInfo for the field.
21577
21578 2003-05-18  Martin Baulig  <martin@ximian.com>
21579
21580         * expression.cs (This.DoResolve): Report a CS0027 if we're
21581         emitting a field initializer.
21582
21583 2003-05-18  Martin Baulig  <martin@ximian.com>
21584
21585         * expression.cs (This.ResolveBase): New public function.
21586         (This.DoResolve): Check for CS0188.
21587
21588         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
21589         This.Resolve().
21590
21591         * ecore.cs (MethodGroupExpr.DoResolve): Set the
21592         `instance_expression' to null if we don't have any non-static
21593         methods.
21594
21595 2003-05-18  Martin Baulig  <martin@ximian.com>
21596
21597         Reworked the way how local variables and parameters are handled by
21598         the flow analysis code.
21599
21600         * statement.cs (TypeInfo, VariableMap): New public classes.
21601         (VariableInfo): New public class.  This is now responsible for
21602         checking whether a variable has been assigned.  It is used for
21603         parameters and local variables.
21604         (Block.EmitMeta): Take the InternalParameters as argument; compute
21605         the layout of the flow vectors here.
21606         (Block.LocalMap, Block.ParameterMap): New public properties.
21607         (FlowBranching): The .ctor doesn't get the InternalParameters
21608         anymore since Block.EmitMeta() now computes the layout of the flow
21609         vector.
21610         (MyStructInfo): This class is now known as `StructInfo' and nested
21611         in `TypeInfo'; we don't access this directly anymore.
21612
21613         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
21614         property and removed IsAssigned(), IsFieldAssigned(),
21615         SetAssigned() and SetFieldAssigned(); we now call them on the
21616         VariableInfo so we don't need to duplicate this code everywhere.
21617
21618         * expression.cs (ParameterReference): Added `Block block' argument
21619         to the .ctor.
21620         (LocalVariableReference, ParameterReference, This): The new
21621         VariableInfo class is now responsible for all the definite
21622         assignment stuff.
21623
21624         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
21625         IsParameterAssigned, SetParameterAssigned): Removed.
21626
21627 2003-05-18  Martin Baulig  <martin@ximian.com>
21628
21629         * typemanager.cs (InitCoreTypes): Try calling
21630         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
21631         the 3-args-version.  Corlib now also needs our `void_type'.
21632         (GetMethod): Added overloaded version which takes an optional
21633         `bool report_errors' to allow lookups of optional methods.
21634
21635 2003-05-12  Martin Baulig  <martin@ximian.com>
21636
21637         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
21638         only used for locals and not for parameters.
21639
21640 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
21641
21642         * support.cs (InternalParameters.ParameterType): Return the
21643         ExternalType of the parameter.
21644
21645         * parameter.cs (Parameter.ExternalType): drop the two arguments,
21646         they were unused.
21647
21648 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
21649
21650         * class.cs (MethodData.Define): Do not set the `newslot' on
21651         interface members, if they are also flagged as "override".
21652
21653         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
21654         better code for ++i and i++.  This only works for static fields
21655         and local variables.
21656
21657         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
21658         want to pull the DeclSpace out of the builder_to_declspace instead
21659         of the TypeBuilder (like in TypeContainer.FindMembers).
21660
21661         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
21662         instead of LookupTypeContainer.  Fixes the crash on .NET for
21663         looking up interface members.
21664
21665         * const.cs: Create our own emit context during the Definition
21666         stage, so that constants are evaluated in the proper context, when
21667         a recursive definition happens.
21668
21669 2003-05-11  Martin Baulig  <martin@ximian.com>
21670
21671         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
21672         new block for a switch section.
21673         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
21674         the adding/lookup in the switch block.  Fixes #39828.
21675
21676 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
21677
21678         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
21679         functionality: I needed to convert the data after I had performed
21680         the add/sub operation into the operands type size.
21681
21682         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
21683         pass the type for the box operation, otherwise the resulting
21684         object would have been of type object.
21685
21686         (BoxedCast): Add constructor to specify the type to box as.
21687
21688 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
21689
21690         * iterators.cs: I was reusing the `count' variable inadvertently,
21691         take steps to not allow this to happen.
21692
21693 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
21694
21695         * attribute.cs (Attribute.Resolve): Params attributes are encoded
21696         by creating an array at the point where the params starts and
21697         putting all those arguments there, then adjusting the size of the
21698         array.
21699
21700 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
21701
21702         * expression.cs (New.AddressOf): Implement interface
21703         IMemoryLocation.  This is used when the `new' operator is used in
21704         the context of an invocation to a method on a value type.
21705
21706         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
21707         example. 
21708
21709         * namespace.cs: Also check the using aliases here.
21710
21711         * driver.cs: Move the test for using validity after the types have
21712         been entered, so we do a single pass that also includes the using
21713         aliases. 
21714
21715         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
21716         in the regular case.   CreateSiblingForFinally is doing extra
21717         error checking.
21718
21719         * attribute.cs (GetAttributeArgumentExpression): Store the result
21720         on an out value, and use the return value to indicate failure
21721         instead of using null (which is a valid return for Constant.GetValue).
21722
21723         * statement.cs: Perform the analysis flow for the increment
21724         portion after the statement, because this will be the real flow of
21725         execution.  Fixes #42385
21726
21727         * codegen.cs (EmitContext.EmitArgument,
21728         EmitContext.EmitStoreArgument): New helper functions when the
21729         RemapToProxy flag is set.
21730
21731         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
21732         function.
21733
21734         Add support for remapping parameters. 
21735
21736         * iterators.cs: Propagate parameter values;  Store parameter
21737         values in the proxy classes.
21738
21739 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
21740
21741         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
21742         need a proxy reference;  I do not know what I was thinking
21743
21744         * cs-parser.jay (constructor_initializer): catch another error,
21745         and display nice message.
21746
21747         (field_declaration): catch void field declaration
21748         to flag a better error. 
21749
21750         * class.cs (MemberBase.CheckBase): Report an error instead of a
21751         warning if a new protected member is declared in a struct. 
21752         (Field.Define): catch the error of readonly/volatile.
21753
21754         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
21755
21756         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
21757         volatile variable is taken
21758
21759 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
21760
21761         * statement.cs (Fixed.Resolve): Report an error if we are not in
21762         an unsafe context.
21763
21764 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
21765
21766         * typemanager.cs: reuse the code that handles type clashes for
21767         delegates and enumerations.
21768
21769         * class.cs (Report28): Always report.
21770
21771         * expression.cs (EncodeAsAttribute): Allow nulls here.
21772
21773 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
21774
21775         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
21776         the functionality for testing whether an expression is valid for
21777         an attribute here.  Also handle the case of arrays of elements
21778         being stored. 
21779
21780         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
21781         encoding a linear array into an array of objects that are suitable
21782         to be passed to an CustomAttributeBuilder.
21783
21784         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
21785
21786         * ecore.cs: (FieldExpr): Handle field remapping here.
21787
21788         * iteratators.cs: Pass the instance variable (if the method is an
21789         instance method) to the constructors, so we can access the field
21790         variables on the class.
21791
21792         TODO: Test this with structs.  I think the THIS variable on
21793         structs might have to be a pointer, and not a refenrece
21794
21795 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
21796
21797         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
21798         local variables to fields in a proxy class.
21799
21800         * iterators.cs (PopulateProxy): Rename our internal fields to
21801         <XXX>.  
21802         Create a <THIS> field if we are an instance method, so we can
21803         reference our parent container variables.
21804         (MapVariable): Called back from the EmitContext code to enter a
21805         new variable to field mapping into the proxy class (we just create
21806         a FieldBuilder).
21807
21808         * expression.cs
21809         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
21810         for using the remapped locals to fields.
21811
21812         I placed the code here, because that gives the same semantics to
21813         local variables, and only changes the Emit code.
21814
21815         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
21816         statements inside iterators.
21817         (VariableInfo): Add a FieldBuilder for the cases when we are
21818         remapping local variables to fields in a proxy class
21819
21820         * ecore.cs (SimpleNameResolve): Avoid testing two times for
21821         current_block != null.
21822
21823         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
21824         not cope with strings, as it has been moved to the
21825         TableSwitchEmit.  Fixed bug in switch generation.
21826
21827         * expression.cs (New.DoResolve): Provide more context for the user
21828         when reporting an error.
21829
21830         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
21831         pointers. 
21832
21833         * expression.cs (MemberAccess.DoResolve): When we get a type back,
21834         check the permissions for it.  Note than in a type-resolution
21835         context the check was already present in DeclSpace.ResolveType,
21836         but was missing from the MemberAccess.
21837
21838         (ArrayCreation.CheckIndices): warn if the user has
21839         more nested levels of expressions, but there are no more
21840         dimensions specified.  Avoids crash on bug 41906.
21841
21842 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
21843
21844         * statement.cs (Block): replace Implicit bool, for a generic
21845         flags.   
21846         New flag: `Unchecked'.  This is used during the EmitMeta phase
21847         (which is out-of-line with the regular Resolve/Emit process for a
21848         statement, as this is done ahead of time, but still gets a chance
21849         to call constant resolve).
21850
21851         (Block.Flags): new enum for adding a new flag.
21852
21853         (Block.EmitMeta): track the state of unchecked.
21854
21855         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
21856         to enable constant resolution to work there as well.
21857
21858 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
21859
21860         * typemanager.cs (ienumerable_type): Also look up
21861         System.Collections.IEnumerable. 
21862
21863 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
21864
21865         TODO: Test more than one conditional per method.
21866
21867         * class.cs (Indexer.Define): Report the location where the user is
21868         referencing the unsupported feature.
21869
21870         (MethodData): Overload the use of `conditionals' to
21871         minimize the creation of needless ArrayLists.   This saves roughly
21872         212kb on my machine.
21873
21874         (Method): Implement the new IIteratorContainer interface.
21875         (Method.SetYields): Implement the method by setting the ModFlags
21876         to contain METHOD_YIELDS.
21877
21878         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
21879         which just got set to null.
21880
21881         * iterators.cs: New file.
21882
21883         (Yield, YieldBreak): New statements.
21884
21885         * statement.cs (Return.Resolve): Flag an error if we are used in
21886         an iterator method.
21887
21888         * codegen.cs (InIterator): New flag set if the code is being
21889         compiled in an iterator method.
21890
21891         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
21892         internal modifier, and we just use it to avoid adding extra
21893         fields, as this is seldom used.  
21894
21895         * cs-parser.jay: Add yield_statement (yield and yield break).
21896
21897         * driver.cs: New flag -v2 to turn on version 2 features. 
21898
21899         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
21900         hashtable when v2 is enabled.
21901
21902 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
21903
21904         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
21905         there is already a namespace defined with this name.
21906
21907         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
21908         people upgraded their corlibs.
21909
21910         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
21911         always use fully qualified types, no need to use the compiler
21912         front end.
21913
21914         (TypeManager.IsNamespace): Use binarysearch.
21915
21916         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
21917         AddDelegate): I did not quite use the new IsValid API properly: I
21918         have to pass the short-name and the fullname.  I was passing only
21919         the basename instead of the fullname sometimes. 
21920
21921         (TypeContainer.DefineType): call NamespaceClash.
21922
21923         * interface.cs (Interface.DefineType): use NamespaceClash before
21924         defining the type.
21925
21926         * delegate.cs (Delegate.DefineType): use NamespaceClash before
21927         defining the type.
21928
21929         * enum.cs: (Enum.DefineType): use NamespaceClash before
21930         defining the type.
21931
21932         * typemanager.cs (: 3-line patch that gives us some tasty 11%
21933         speed increase.  First, use the negative_hits cache when we get a
21934         negative.  Second, add the type with its full original name
21935         instead of the new . and + encoded name (reflection uses + to
21936         separate type from a nested type).  Use LookupTypeReflection
21937         directly which bypasses the type->name hashtable (that we already
21938         know does not contain the type.
21939
21940         * decl.cs (DeclSpace.ResolveTypeExpr): track the
21941         location/container type. 
21942
21943         * driver.cs: When passing utf8, use directly the UTF8Encoding.
21944
21945 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
21946
21947         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
21948
21949         * delegate.cs (NewDelegate.Resolve): Test whether an instance
21950         method is being referenced in the method group from a static
21951         context, and report error 120 if so.
21952
21953         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
21954         Error118. 
21955
21956         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
21957         is created, we create the A namespace).
21958
21959         * cs-parser.jay: A namespace also introduces a DeclarationFound.
21960         Fixes #41591
21961
21962 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
21963
21964         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
21965         invocation to ModuleBuilder.GetType with the same values will
21966         return a new type instance, so we need to cache its return
21967         values. 
21968
21969         * expression.cs (Binary.ResolveOperator): Only allow the compare
21970         operators on enums if they are of the same type.
21971
21972         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
21973         types of ValueType on their own case.  Before we were giving them
21974         the same treatment as objects.
21975
21976         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
21977         fullname.  Short name is used to compare against container name.
21978         Fullname is used to check against defined namespace names.
21979
21980         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
21981         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
21982
21983         (Method.CheckBase): Call parent.
21984         (MemberBase.CheckBase): Check for protected members on sealed
21985         classes.
21986         (PropertyBase.CheckBase): Call parent.
21987         (Field.Define): Call parent.
21988
21989         * report.cs: Negative error codes are now mapped to 8000 - code,
21990         so that the display is render more nicely.
21991
21992         * typemanager.cs: Do not use try/catch, instead report a regular
21993         error. 
21994
21995         (GetPointerType, GetReferenceType): These methods provide
21996         mechanisms to obtain the T* and T& from a T.  We had the code
21997         previously scattered around the code base, and it also used
21998         TypeManager.LookupType that would go through plenty of caches.
21999         This one goes directly to the type source.
22000
22001         In some places we did the Type.GetType followed by
22002         ModuleBuilder.GetType, but not in others, so this unifies the
22003         processing as well.
22004
22005         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
22006         statements now that we have namespace information.
22007
22008         * typemanager.cs (IsNamespace): New method, returns whether the
22009         string presented is a namespace or not.
22010
22011         (ComputeNamespaces): New public entry point, computes the list of
22012         available namespaces, using the GetNamespaces API call in Mono, or
22013         the slower version in MS.NET.   
22014
22015         Now before we start the semantic analysis phase, we have a
22016         complete list of namespaces including everything that the user has
22017         provided.
22018
22019         Deleted old code to cache namespaces in .nsc files.
22020
22021 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
22022
22023         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
22024         class/struct location definition Location for the implicit
22025         constructor location.
22026
22027         (Operator.Define): Use the location of the operator for the
22028         implicit Method definition.
22029
22030         (Constructor.Emit): use the constructor location for the implicit
22031         base initializer constructor.
22032
22033         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
22034         and the Expression class now contains two new methods:
22035
22036         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
22037         isolate type lookup from the rest of the resolution process.
22038
22039         Since we use Expressions to hold type definitions due to the way
22040         we parse the input we have historically overloaded Resolve to
22041         perform the Type lookups if a special flag is passed.  Now this is
22042         eliminated and two methods take their place. 
22043
22044         The differences in the two methods between xStep and xTerminal is
22045         that xStep is involved in our current lookup system that uses
22046         SimpleNames to compose a name, while xTerminal is used just to
22047         catch the case where the simplename lookup failed.
22048
22049 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
22050
22051         * expression.cs (ResolveMemberAccess): Remove redundant code.
22052         TypeExpr expressions are always born fully resolved.
22053
22054         * interface.cs (PopulateMethod): Do not lookup the types twice.
22055         We were doing it once during SemanticAnalysis and once during
22056         PopulateMethod.
22057
22058         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
22059         in local variable type definitions, were being returned as a
22060         SimpleName (we decomposed everything into a string), that is
22061         because primary_expression was being used instead of a type in the
22062         grammar (reduce/reduce conflicts).
22063
22064         The part that was wrong is that we converted the expression into a
22065         string (an oversimplification in one hand, compounded with primary
22066         expressions doing string concatenation).
22067
22068         So things like:
22069
22070         A.B.C [] x;
22071
22072         Would return "A.B.C[]" as a SimpleName.  This stopped things like
22073         using clauses from working on this particular context.  And a type
22074         was being matched directly against "A.B.C[]".
22075
22076         We now use the correct approach, and allow for ComposedCast to be
22077         part of the unary expression.  So the "A.B.C []" become a composed
22078         cast of "A.B.C" (as a nested group of MemberAccess with a
22079         SimpleName at the end) plus the rank composition "[]". 
22080
22081         Also fixes 35567
22082
22083 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
22084
22085         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
22086         for the access level checking.
22087
22088         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
22089         `TypeContainer container', because I kept getting confused when I
22090         was debugging this code.
22091
22092         * expression.cs (Indexers): Instead of tracking getters/setters,
22093         we now track them in parallel.  We create one arraylist less, but
22094         most importantly it is possible now for the LValue code to find a
22095         matching get for a set.
22096
22097         (IndexerAccess.DoResolveLValue): Update the code.
22098         GetIndexersForType has been modified already to extract all the
22099         indexers from a type.  The code assumed it did not.
22100
22101         Also make the code set the correct return type for the indexer.
22102         This was fixed a long time ago for properties, but was missing for
22103         indexers.  It used to be void_type.
22104
22105         (Binary.Emit): Test first for doubles instead of
22106         floats, as they are more common.
22107
22108         (Binary.EmitBranchable): Use the .un version of the branch opcodes
22109         when dealing with floats and the <=, >= operators.  This fixes bug
22110         #39314 
22111
22112         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
22113         to load the array value by emitting a load on the foreach variable
22114         type.  This was incorrect.  
22115
22116         We now emit the code to load an element using the the array
22117         variable type, and then we emit the conversion operator.
22118
22119         Fixed #40176
22120
22121 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
22122
22123         * attribute.cs: Avoid allocation of ArrayLists in the common case.
22124
22125 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
22126
22127         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
22128         test for protection before we test for signatures. 
22129
22130         (MethodSignature.ToString): implement.
22131
22132         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
22133         to the case where we reduced into a LongConstant.
22134
22135         * decl.cs (CheckAccessLevel): If the type is an array, we can not
22136         depend on whether the information is acurrate, because the
22137         Microsoft runtime will always claim that the array type is public,
22138         regardless of the real state.
22139
22140         If the type is a pointer, another problem happens: the type is
22141         reported as non-public in Microsoft.  
22142
22143         In both cases we have to call CheckAccessLevel recursively with
22144         the underlying type as the argument to be tested.
22145
22146 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
22147
22148         * assign.cs (Assign.Emit): If we are dealing with a compound
22149         assignment expression, we should use the code path that stores the
22150         intermediate result in a temporary value.  This fixes #40903.
22151
22152         *expression.cs (Indirection.ToString): Provide ToString method for
22153         debugging. 
22154
22155 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
22156
22157         * class.cs: Null out fields holding references to Block objects so
22158         they can be garbage collected.
22159
22160         * expression.cs (OverloadResolve): Remove unused local.
22161
22162 2003-04-07  Martin Baulig  <martin@ximian.com>
22163
22164         * codegen.cs (EmitContext.CurrentFile): New public field.
22165         (EmitContext.Mark): Use the CurrentFile to check whether the
22166         location is in the correct file.
22167         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
22168
22169 2003-04-07  Martin Baulig  <martin@ximian.com>
22170
22171         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
22172
22173         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
22174         location.  [FIXME: The location argument which gets passed to this
22175         method is sometimes wrong!]
22176
22177 2003-04-07  Nick Drochak <ndrochak@gol.com>
22178
22179         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
22180
22181 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
22182
22183         * expression.cs (Indirection.EmitAssign): We were using the
22184         temporary, but returning immediately instead of continuing the
22185         EmitAssing flow.
22186
22187 2003-04-06  Martin Baulig  <martin@ximian.com>
22188
22189         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
22190         if it's a nested child, but also deriving from the outer class.
22191         See test 190.cs.
22192
22193         * typemanager.cs (IsNestedChildOf): Make this work if it's a
22194         nested child, but also deriving from the outer class.  See
22195         test-190.cs.
22196         (FilterWithClosure): We may access private members of the outer
22197         class if we're a nested child and deriving from the outer class.
22198         (RealMemberLookup): Only set `closure_private_ok' if the
22199         `original_bf' contained BindingFlags.NonPublic.
22200
22201 2003-04-05  Martin Baulig  <martin@ximian.com>
22202
22203         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #40670.
22204
22205 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
22206
22207         * class.cs (Event.Define): Do not allow abstract events to have
22208         initializers. 
22209
22210 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
22211
22212         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
22213         block in event declarations.
22214
22215         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
22216         value type, get its address.
22217
22218         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
22219         leaving a class on the stack instead of a boolean value (int
22220         0/1).  Change the code so we compare against null, and then the
22221         result against zero.
22222
22223         * class.cs (TypeContainer.GetClassBases): We were checking for the
22224         parent class being sealed too late.
22225
22226         * expression.cs (Binary.Emit): For <= and >= when dealing with
22227         floating point values, use cgt.un and clt.un instead of cgt and
22228         clt alone.
22229
22230 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
22231
22232         * statement.cs: Apply the same optimization as MS: skip the 
22233         GetEnumerator returning an IEnumerator, and use the one returning a 
22234         CharEnumerator instead. This allows us to avoid the try-finally block 
22235         and the boxing.
22236
22237 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
22238
22239         * cs-parser.jay: Attributes cannot be applied to
22240                          namespaces. Fixes #40473
22241
22242 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22243
22244         * class.cs:
22245         (Add*): check if the name is valid using the full name for constants,
22246         fields, properties and events.
22247
22248 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
22249
22250         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
22251         char constants to be part of the enumeration.
22252
22253         * expression.cs (Conditional.DoResolve): Add support for operator
22254         true. Implements the missing functionality from 14.12
22255
22256         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
22257         operator true/false as required by the spec.
22258
22259         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
22260         implicit conversion to boolean.
22261
22262         * statement.cs (Statement.ResolveBoolean): A boolean expression is
22263         also one where the type implements `operator true'. 
22264
22265         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
22266         get an expression that will invoke operator true based on an
22267         expression.  
22268
22269         (GetConversionOperators): Removed the hack that called op_True
22270         here.  
22271
22272         (Expression.ResolveBoolean): Move this from Statement.
22273
22274 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
22275
22276         * ecore.cs (FieldExpr): do not allow initialization of initonly
22277         fields on derived classes
22278
22279 2003-03-13  Martin Baulig  <martin@ximian.com>
22280
22281         * statement.cs (Block.Emit): Call ig.BeginScope() and
22282         ig.EndScope() when compiling with debugging info; call
22283         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
22284
22285 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
22286
22287         * expression.cs (Indexers): Do not construct immediately, allow
22288         for new members to be appended as we go.  Fixes 38143
22289
22290 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22291
22292         * expression.cs: save/restore context when resolving an unchecked
22293         expression.
22294
22295 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
22296
22297         * cfold.cs: Catch division by zero in modulus operator during
22298         constant folding.
22299
22300 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
22301
22302         * interface.cs (Interface.DefineMembers): Avoid defining members
22303         twice. 
22304
22305 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
22306
22307         * driver.cs: handle the +/- options for -noconfig
22308
22309         * statement.cs (Unckeched.Resolve): Also track the state of
22310         unchecked in the Resolve phase.
22311
22312 2003-02-27  Martin Baulig  <martin@ximian.com>
22313
22314         * ecore.cs (Expression.MemberLookup): Don't create a
22315         MethodGroupExpr for something which is not a method.  Fixes #38291.
22316
22317 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
22318
22319         * class.cs (MemberBase.CheckParameters): Also check that the type
22320         is unmanaged if it is a pointer.
22321
22322         * expression.cs (SizeOf.Resolve): Add location information.
22323
22324         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
22325         a managed type is declared.
22326
22327         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
22328         parameter modifiers as well.  Fixes bug 38606
22329
22330         * class.cs: Very sad.  Am backing out the speed up changes
22331         introduced by the ArrayList -> Array in the TypeContainer, as they
22332         were not actually that much faster, and introduced a bug (no error
22333         reports on duplicated methods).
22334
22335         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
22336         source first, this will guarantee that we have a valid expression
22337         before calling in lower levels functions that will require a
22338         resolved object.  Then use this original_source in the
22339         target.ResolveLValue instead of the original source that was
22340         passed to us.
22341
22342         Another change.  Use target.Resolve instead of LValueResolve.
22343         Although we are resolving for LValues, we will let the Assign code
22344         take care of that (it will be called again from Resolve).  This
22345         basically allows code like this:
22346
22347         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
22348         class Y { void A (X x) { x [0] += o; }
22349
22350         The problem was that the indexer was trying to resolve for
22351         set_Item (idx, object o) and never finding one.  The real set_Item
22352         was set_Item (idx, X).  By delaying the process we get the right
22353         semantics. 
22354
22355         Fixes bug 36505
22356
22357 2003-02-23  Martin Baulig  <martin@ximian.com>
22358
22359         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
22360         while calling DoEmit ().
22361
22362         * codegen.cs (EmitContext.Mark): Don't mark locations in other
22363         source files; if you use the #line directive inside a method, the
22364         compiler stops emitting line numbers for the debugger until it
22365         reaches the end of the method or another #line directive which
22366         restores the original file.
22367
22368 2003-02-23  Martin Baulig  <martin@ximian.com>
22369
22370         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
22371
22372 2003-02-23  Martin Baulig  <martin@ximian.com>
22373
22374         * statement.cs (Block.AddChildVariableNames): We need to call this
22375         recursively, not just for our immediate children.
22376
22377 2003-02-23  Martin Baulig  <martin@ximian.com>
22378
22379         * class.cs (Event.Define): Always make the field private, like csc does.
22380
22381         * typemanager.cs (TypeManager.RealMemberLookup): Make events
22382         actually work, fixes bug #37521.
22383
22384 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
22385
22386         * delegate.cs: When creating the various temporary "Parameters"
22387         classes, make sure that we call the ComputeAndDefineParameterTypes
22388         on those new parameters (just like we do with the formal ones), to
22389         allow them to be resolved in the context of the DeclSpace.
22390
22391         This fixes the bug that Dick observed in Bugzilla #38530.
22392
22393 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
22394
22395         * expression.cs (ResolveMemberAccess): When resolving a constant,
22396         do not attempt to pull a constant if the value was not able to
22397         generate a valid constant.
22398
22399         * const.cs (LookupConstantValue): Do not report more errors than required.
22400
22401 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22402
22403         * expression.cs: fixes bug #38328.
22404
22405 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
22406
22407         * class.cs: Changed all the various members that can be part of a
22408         class from being an ArrayList to be an Array of the right type.
22409         During the DefineType type_list, interface_list, delegate_list and
22410         enum_list are turned into types, interfaces, delegates and enums
22411         arrays.  
22412
22413         And during the member population, indexer_list, event_list,
22414         constant_list, field_list, instance_constructor_list, method_list,
22415         operator_list and property_list are turned into their real arrays.
22416
22417         Although we could probably perform this operation earlier, for
22418         good error reporting we need to keep the lists and remove the
22419         lists for longer than required.
22420
22421         This optimization was triggered by Paolo profiling the compiler
22422         speed on the output of `gen-sample-program.pl' perl script. 
22423
22424         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
22425         not crash in methods like MemberLookupFailed that use this field.  
22426
22427         This problem arises when the compiler fails to resolve a type
22428         during interface type definition for example.
22429
22430 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
22431
22432         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
22433         inherit from System.Object, so we have to stop at null, not only
22434         when reaching System.Object.
22435
22436 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
22437
22438         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
22439         DeclaredOnly because the parent indexer might have had a different
22440         name, but did not loop until the top of the hierarchy was reached.
22441
22442         The problem this one fixes is 35492: when a class implemented an
22443         indexer from an interface, we were getting the interface method
22444         (which was abstract) and we were flagging an error (can not invoke
22445         abstract method).
22446
22447         This also keeps bug 33089 functioning, and test-148 functioning.
22448
22449         * typemanager.cs (IsSpecialMethod): The correct way of figuring
22450         out if a method is special is to see if it is declared in a
22451         property or event, or whether it is one of the predefined operator
22452         names.   This should fix correctly #36804.
22453
22454 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
22455
22456         The goal here is to remove the dependency on EmptyCast.Peel ().
22457         Killing it completely.
22458
22459         The problem is that currently in a number of places where
22460         constants are expected, we have to "probe" for an EmptyCast, and
22461         Peel, which is not the correct thing to do, as this will be
22462         repetitive and will likely lead to errors. 
22463
22464         The idea is to remove any EmptyCasts that are used in casts that
22465         can be reduced to constants, so we only have to cope with
22466         constants. 
22467
22468         This bug hunt was triggered by Bug 37363 and the desire to remove
22469         the duplicate pattern where we were "peeling" emptycasts to check
22470         whether they were constants.  Now constants will always be
22471         constants.
22472
22473         * ecore.cs: Use an enumconstant here instead of wrapping with
22474         EmptyCast.  
22475
22476         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
22477         throwing me off.  By handling this we can get rid of a few hacks.
22478
22479         * statement.cs (Switch): Removed Peel() code.
22480
22481 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
22482
22483         * class.cs: Location information for error 508
22484
22485         * expression.cs (New.DoResolve): Add a guard against double
22486         resolution of an expression.  
22487
22488         The New DoResolve might be called twice when initializing field
22489         expressions (see EmitFieldInitializers, the call to
22490         GetInitializerExpression will perform a resolve on the expression,
22491         and later the assign will trigger another resolution
22492
22493         This leads to bugs (#37014)
22494
22495         * delegate.cs: The signature for EndInvoke should contain any ref
22496         or out parameters as well.  We were not doing this in the past. 
22497
22498         * class.cs (Field.Define): Do not overwrite the type definition
22499         inside the `volatile' group.  Turns out that volatile enumerations
22500         were changing the type here to perform a validity test, which
22501         broke conversions. 
22502
22503 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
22504
22505         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
22506         and structs, we do not want to load the instance variable
22507
22508         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
22509         enum_type has to be handled like an object reference (implicit
22510         conversions exists from this to object), but the regular IsClass
22511         and IsValueType tests will never return true for this one.
22512
22513         Also we use TypeManager.IsValueType instead of type.IsValueType,
22514         just for consistency with the rest of the code (this is only
22515         needed if we ever use the construct exposed by test-180.cs inside
22516         corlib, which we dont today).
22517
22518 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
22519
22520         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
22521         just InternalCall.
22522
22523 2003-02-09  Martin Baulig  <martin@ximian.com>
22524
22525         * namespace.cs (Namespace..ctor): Added SourceFile argument.
22526         (Namespace.DefineNamespaces): New static public method; this is
22527         called when we're compiling with debugging to add all namespaces
22528         to the symbol file.
22529
22530         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
22531         pass it to the Namespace's .ctor.
22532
22533         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
22534         and MethodBase arguments; pass the namespace ID to the symwriter;
22535         pass the MethodBase instead of the token to the symwriter.
22536         (SymbolWriter.DefineNamespace): New method to add a namespace to
22537         the symbol file.
22538
22539 2003-02-09  Martin Baulig  <martin@ximian.com>
22540
22541         * symbolwriter.cs: New file.  This is a wrapper around
22542         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
22543         methods here in near future.
22544
22545 2003-02-09  Martin Baulig  <martin@ximian.com>
22546
22547         * codegen.cs (EmitContext.Mark): Just pass the arguments to
22548         ILGenerator.MarkSequencePoint() which are actually used by the
22549         symbol writer.
22550
22551 2003-02-09  Martin Baulig  <martin@ximian.com>
22552
22553         * location.cs (SourceFile): New public sealed class.  This
22554         contains the name and an index which is used in the location's token.
22555         (Location): Reserve an appropriate number of bits in the token for
22556         the source file instead of walking over that list, this gives us a
22557         really huge performance improvement when compiling with debugging.
22558
22559         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
22560         `SourceFile' argument instead of a string.
22561         (Driver.ProcessFile): Add all the files via Location.AddFile(),
22562         but don't parse/tokenize here, we need to generate the list of all
22563         source files before we do that.
22564         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
22565         the files.
22566
22567         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
22568         instead of a string.
22569
22570         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
22571         of a string.
22572
22573 2003-02-09  Martin Baulig  <martin@ximian.com>
22574
22575         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
22576         filename on `#line default'.
22577
22578 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
22579
22580         * statement.cs: don't clear the pinned var when the fixed statement
22581         returns from the method (fixes bug#37752).
22582
22583 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
22584
22585         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
22586         to IsValueType.
22587
22588 2003-02-07  Martin Baulig  <martin@ximian.com>
22589
22590         * driver.cs: Removed the `--debug-args' command line argument.
22591
22592         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
22593         automatically by the AsssemblyBuilder.
22594         (CodeGen.InitializeSymbolWriter): We don't need to call any
22595         initialization function on the symbol writer anymore.  This method
22596         doesn't take any arguments.
22597
22598 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
22599
22600         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
22601         from referenced assemblies as well.
22602
22603 2003-02-02  Martin Baulig  <martin@ximian.com>
22604
22605         * class.cs (MethodData.Emit): Generate debugging info for external methods.
22606
22607 2003-02-02  Martin Baulig  <martin@ximian.com>
22608
22609         * class.cs (Constructor.Emit): Open the symbol writer before
22610         emitting the constructor initializer.
22611         (ConstructorInitializer.Emit): Call ec.Mark() to allow
22612         single-stepping through constructor initializers.
22613
22614 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
22615
22616         * class.cs: Handle error 549: do not allow virtual methods in
22617         sealed classes. 
22618
22619 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
22620
22621         * decl.cs: Check access levels when resolving types
22622
22623 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
22624
22625         * statement.cs: Add parameters and locals set in catch blocks that might 
22626         return to set vector
22627
22628 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
22629
22630         * class.cs (Operator): Set the SpecialName flags for operators.
22631
22632         * expression.cs (Invocation.DoResolve): Only block calls to
22633         accessors and operators on SpecialName methods.
22634
22635         (Cast.TryReduce): Handle conversions from char constants.
22636
22637
22638 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
22639
22640         * statement.cs: small memory and time optimization in FlowBranching.
22641
22642 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
22643
22644         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
22645         problem that the last fix but in the other sid (Set).
22646
22647         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
22648         access when there is no indexer in the hierarchy.
22649
22650 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
22651
22652         * class.cs: Combine some if statements.
22653
22654 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22655
22656         * driver.cs: fixed bug #37187.
22657
22658 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
22659
22660         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
22661         any indexer, it's needed to build a list with all the indexers in the
22662         hierarchy (AllGetters), else we have problems. Fixes #35653.
22663
22664 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
22665
22666         * class.cs (MethodData.Define): It is wrong for an interface
22667         implementation to be static in both cases: explicit and implicit.
22668         We were only handling this in one case.
22669
22670         Improve the if situation there to not have negations.
22671
22672         * class.cs (Field.Define): Turns out that we do not need to check
22673         the unsafe bit on field definition, only on usage.  Remove the test.
22674
22675 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22676
22677         * driver.cs: use assembly.Location instead of Codebase (the latest
22678         patch made mcs fail when using MS assemblies).
22679
22680 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
22681
22682         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
22683         get the path to *corlib.dll.
22684
22685 2003-01-21  Nick Drochak <ndrochak@gol.com>
22686
22687         * cs-tokenizer.cs:
22688         * pending.cs:
22689         * typemanager.cs: Remove compiler warnings
22690
22691 2003-01-20  Duncan Mak  <duncan@ximian.com>
22692
22693         * AssemblyInfo.cs: Bump the version number to 0.19.
22694
22695 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22696
22697         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
22698
22699 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
22700
22701         * class.cs (Constructor::Emit): Emit debugging info for constructors.
22702
22703 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
22704
22705         * cs-parser.jay: Small fix: we were not comparing the constructor
22706         name correctly.   Thanks to Zoltan for the initial pointer.
22707
22708 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
22709
22710         * cs-tokenizer.cs: Set file name when specified with #line
22711
22712 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
22713
22714         * cs-parser.jay: Only perform the constructor checks here if we
22715         are named like the class;  This will help provider a better
22716         error.  The constructor path is taken when a type definition is
22717         not found, but most likely the user forgot to add the type, so
22718         report that rather than the constructor error.
22719
22720 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
22721
22722         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
22723         allocations.
22724
22725 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
22726
22727         * cs-parser.jay: Add cleanup call.
22728
22729 2003-01-13  Duncan Mak  <duncan@ximian.com>
22730
22731         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
22732         consistent with other methods.
22733
22734 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
22735
22736         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
22737
22738 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
22739
22740         * attribute.cs: only set GuidAttr to true when we have a
22741         GuidAttribute.
22742
22743 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22744
22745         * ecore.cs:
22746         * expression.cs:
22747         * typemanager.cs: fixes to allow mcs compile corlib with the new
22748         Type.IsSubclassOf fix.
22749
22750 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
22751
22752         * expression.cs (LocalVariableReference.DoResolve): Classify a
22753         constant as a value, not as a variable.   Also, set the type for
22754         the variable.
22755
22756         * cs-parser.jay (fixed_statement): take a type instead of a
22757         pointer_type, so we can produce a better error message later.
22758
22759         * statement.cs (Fixed.Resolve): Flag types that are not pointers
22760         as an error.  
22761
22762         (For.DoEmit): Make inifinite loops have a
22763         non-conditional branch back.
22764
22765         (Fixed.DoEmit): First populate the pinned variables, then emit the
22766         statement, then clear the variables.  Before I was emitting the
22767         code once for each fixed piece.
22768
22769
22770 2003-01-08  Martin Baulig  <martin@ximian.com>
22771
22772         * statement.cs (FlowBranching.MergeChild): A break in a
22773         SWITCH_SECTION does not leave a loop.  Fixes #36155.
22774
22775 2003-01-08  Martin Baulig  <martin@ximian.com>
22776
22777         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
22778         lives in the same number space than `param_map'.  Fixes #36154.
22779
22780 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
22781
22782         * cs-parser.jay (constructor_declaration): Set the
22783         Constructor.ModFlags before probing for it.  This makes the
22784         compiler report 514, 515 and 132 (the code was there, but got
22785         broken). 
22786
22787         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
22788         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
22789         (GotoCase.Resolve): Set `Returns' to ALWAYS.
22790
22791 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
22792
22793         * enum.cs: create the enum static fields using the enum type.
22794
22795 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
22796
22797         * class.cs: don't try to create the ParamBuilder for the return
22798         type if it's not needed (and handle it breaking for the ms runtime
22799         anyway).
22800
22801 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
22802
22803         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
22804
22805 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
22806
22807         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
22808         the command.   This showed up while compiling the JANET source
22809         code, which used \r as its only newline separator.
22810
22811 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
22812
22813         * class.cs (Method.Define): If we are an operator (because it
22814         reuses our code), then set the SpecialName and HideBySig.  #36128
22815
22816 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
22817
22818         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
22819         exception, report error 120 `object reference required'.
22820
22821         * driver.cs: Add --pause option, used during to measure the size
22822         of the process as it goes with --timestamp.
22823
22824         * expression.cs (Invocation.DoResolve): Do not allow methods with
22825         SpecialName to be invoked.
22826
22827 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
22828
22829         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
22830         number before adding it.
22831
22832 2002-12-21  Ravi Pratap  <ravi@ximian.com>
22833
22834         * ecore.cs (StandardImplicitConversion): When in an unsafe
22835         context, we allow conversion between void * to any other pointer
22836         type. This fixes bug #35973.
22837
22838 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
22839
22840         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
22841         is not thrown when extensionless outputs are used 
22842
22843 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22844
22845         * rootcontext.cs: fixed compilation of corlib.
22846
22847 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
22848
22849         * attribute.cs (Attributes.Contains): Add new method.
22850
22851         * class.cs (MethodCore.LabelParameters): if the parameter is an
22852         `out' parameter, check that no attribute `[In]' has been passed.
22853
22854         * enum.cs: Handle the `value__' name in an enumeration.
22855
22856 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
22857
22858         * decl.cs: Added special case to allow overrides on "protected
22859         internal" methods
22860
22861 2002-12-18  Ravi Pratap  <ravi@ximian.com>
22862
22863         * attribute.cs (Attributes.AddAttributeSection): Rename to this
22864         since it makes much more sense.
22865
22866         (Attributes.ctor): Don't require a Location parameter.
22867
22868         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
22869
22870         * attribute.cs (ApplyAttributes): Remove extra Location parameters
22871         since we already have that information per attribute.
22872
22873         * everywhere : make appropriate changes.
22874
22875         * class.cs (LabelParameters): Write the code which actually
22876         applies attributes to the return type. We can't do this on the MS
22877         .NET runtime so we flag a warning in the case an exception is
22878         thrown.
22879
22880 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
22881
22882         * const.cs: Handle implicit null conversions here too.
22883
22884 2002-12-17  Ravi Pratap  <ravi@ximian.com>
22885
22886         * class.cs (MethodCore.LabelParameters): Remove the extra
22887         Type [] parameter since it is completely unnecessary. Instead
22888         pass in the method's attributes so that we can extract
22889         the "return" attribute.
22890
22891 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
22892
22893         * cs-parser.jay (parse): Use Report.Error to flag errors instead
22894         of ignoring it and letting the compile continue.
22895
22896         * typemanager.cs (ChangeType): use an extra argument to return an
22897         error condition instead of throwing an exception.
22898
22899 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
22900
22901         * expression.cs (Unary.TryReduce): mimic the code for the regular
22902         code path.  Perform an implicit cast in the cases where we can
22903         implicitly convert to one of the integral types, and then reduce
22904         based on that constant.   This fixes bug #35483.
22905
22906 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22907
22908         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
22909
22910 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22911
22912         * namespace.cs: fixed bug #35489.
22913
22914 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
22915
22916         * class.cs: Remove some dead code.
22917
22918         * cs-parser.jay: Estimate the number of methods needed
22919         (RootContext.MethodCount);
22920
22921         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
22922         numbers instead of StringBuilders.
22923
22924         * support.cs (PtrHashtable): Add constructor with initial size;
22925         We can now reduce reallocations of the method table.
22926
22927 2002-12-10  Ravi Pratap  <ravi@ximian.com>
22928
22929         * attribute.cs (ApplyAttributes): Keep track of the emitted
22930         attributes on a per-target basis. This fixes bug #35413.
22931
22932 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
22933
22934         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
22935         default to the Windows 1252 encoding.
22936
22937         (UnixParseOption): Support version, thanks to Alp for the missing
22938         pointer. 
22939
22940         * AssemblyInfo.cs: Add nice assembly information.
22941
22942         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
22943         (bug 35169).
22944
22945         * cs-parser.jay: Allow a trailing comma before the close bracked
22946         in the attribute_section production.
22947
22948         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
22949         address of the instance was being taken, I will take this out,
22950         because we take the address of the object immediately here.
22951
22952 2002-12-09  Ravi Pratap  <ravi@ximian.com>
22953
22954         * typemanager.cs (AreMultipleAllowed): Take care of the most
22955         obvious case where attribute type is not in the current assembly -
22956         stupid me ;-)
22957
22958 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
22959
22960         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
22961         definitions, instead of doing that afterwards.  
22962
22963         Also we use a nice little hack, depending on the constructor, we
22964         know if we are a "composed" name or a simple name.  Hence, we
22965         avoid the IndexOf test, and we avoid 
22966
22967         * codegen.cs: Add code to assist in a bug reporter to track down
22968         the source of a compiler crash. 
22969
22970 2002-12-07  Ravi Pratap  <ravi@ximian.com>
22971
22972         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
22973         types have been emitted for a given element and flag an error
22974         if something which does not have AllowMultiple set is used more
22975         than once.
22976
22977         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
22978         attribute types and their corresponding AllowMultiple properties
22979
22980         (AreMultipleAllowed): Check the property for a given type.
22981
22982         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
22983         property in the case we have a TypeContainer.
22984
22985         (Attributes.AddAttribute): Detect duplicates and just skip on
22986         adding them. This trivial fix catches a pretty gross error in our
22987         attribute emission - global attributes were being emitted twice!
22988
22989         Bugzilla bug #33187 is now fixed.
22990
22991 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
22992
22993         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
22994         instead of pp_and).
22995
22996         * expression.cs (Binary.ResolveOperator): I can only use the
22997         Concat (string, string, string) and Concat (string, string,
22998         string, string) if the child is actually a concatenation of
22999         strings. 
23000
23001 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
23002
23003         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
23004         context where we need a 2-character lookahead.
23005
23006         * pending.cs (PendingImplementation): Rework so we can keep track
23007         of interface types all the time, and flag those which were
23008         implemented by parents as optional.
23009
23010 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
23011
23012         * expression.cs (Binary.ResolveOperator): Use
23013         String.Concat(string,string,string) or
23014         String.Concat(string,string,string,string) when possible. 
23015
23016         * typemanager: More helper methods.
23017
23018
23019 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
23020
23021         * pending.cs: remove the bogus return from GetMissingInterfaces()
23022         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
23023
23024 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23025
23026         * namespace.cs: avoid duplicated 'using xxx' being added to
23027         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
23028         when we get more than one 'using' statement for the same namespace.
23029         Report a CS0105 warning for it.
23030
23031 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
23032
23033         * cs-tokenizer.cs (consume_identifier): use read directly, instead
23034         of calling getChar/putback, uses internal knowledge of it.    
23035
23036         (xtoken): Reorder tokenizer so most common patterns are checked
23037         first.  This reduces the compilation time in another 5% (from 8.11s
23038         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
23039
23040         The parsing time is 22% of the compilation in mcs, and from that
23041         64% is spent on the tokenization process.  
23042
23043         I tried using a binary search for keywords, but this is slower
23044         than the hashtable.  Another option would be to do a couple of
23045         things:
23046
23047                 * Not use a StringBuilder, instead use an array of chars,
23048                   with a set value.  Notice that this way we could catch
23049                   the 645 error without having to do it *afterwards*.
23050
23051                 * We could write a hand-parser to avoid the hashtable
23052                   compares altogether.
23053
23054         The identifier consumption process takes 37% of the tokenization
23055         time.  Another 15% is spent on is_number.  56% of the time spent
23056         on is_number is spent on Int64.Parse:
23057
23058                 * We could probably choose based on the string length to
23059                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
23060                   computations. 
23061
23062         Another 3% is spend on wrapping `xtoken' in the `token' function.
23063
23064         Handle 0xa0 as whitespace (#34752)
23065
23066 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
23067
23068         * typemanager.cs (IsCLRType): New routine to tell whether a type
23069         is one of the builtin types.  
23070
23071         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
23072         typecode in more places instead of doing pointer comparissions.
23073         We could leverage some knowledge about the way the typecodes are
23074         laid out.
23075
23076         New code to cache namespaces in assemblies, it is currently not
23077         invoked, to be used soon.
23078
23079         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
23080
23081         * expression.cs (Binary.ResolveOperator): specially handle
23082         strings, and do not perform user-defined operator overloading for
23083         built-in types.
23084
23085 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
23086
23087         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
23088         internalcall as it is a pretty simple operation;  Avoid whenever
23089         possible to call Char.IsLetter.
23090
23091         (consume_identifier): Cut by half the number of
23092         hashtable calls by merging the is_keyword and GetKeyword behavior.
23093
23094         Do not short-circuit, because if we do, we
23095         report errors (ie, #if false && true would produce an invalid
23096         directive error);
23097
23098
23099 2002-11-24  Martin Baulig  <martin@ximian.com>
23100
23101         * expression.cs (Cast.TryReduce): If we're in checked syntax,
23102         check constant ranges and report a CS0221.  Fixes #33186.
23103
23104 2002-11-24  Martin Baulig  <martin@ximian.com>
23105
23106         * cs-parser.jay: Make this work for uninitialized variable
23107         declarations in the `for' initializer.  Fixes #32416.
23108
23109 2002-11-24  Martin Baulig  <martin@ximian.com>
23110
23111         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
23112         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
23113
23114 2002-11-24  Martin Baulig  <martin@ximian.com>
23115
23116         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
23117         argument; if true, we also check for user-defined conversions.
23118         This is only needed if both arguments are of a user-defined type.
23119         Fixes #30443, added test-175.cs.
23120         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
23121
23122         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
23123
23124 2002-11-24  Martin Baulig  <martin@ximian.com>
23125
23126         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
23127         function to get the store opcode.
23128         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
23129         only emit the Ldelema if the store opcode is Stobj.  You must run
23130         both test-34 and test-167 to test this.  Fixes #34529.
23131
23132 2002-11-23  Martin Baulig  <martin@ximian.com>
23133
23134         * ecore.cs (Expression.MemberLookup): Added additional
23135         `qualifier_type' argument which is used when we're being called
23136         from MemberAccess.DoResolve() and null if we're called from a
23137         SimpleName lookup.
23138         (Expression.MemberLookupFailed): New method to report errors; this
23139         does the CS1540 check and reports the correct error message.
23140
23141         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
23142         argument for the CS1540 check and redone the way how we're dealing
23143         with private members.  See the comment in the source code for details.
23144         (FilterWithClosure): Reverted this back to revision 1.197; renamed
23145         `closure_start_type' to `closure_qualifier_type' and check whether
23146         it's not null.  It was not this filter being broken, it was just
23147         being called with the wrong arguments.
23148
23149         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
23150         and pass it the correct `qualifier_type'; this also does the error
23151         handling for us.
23152
23153 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
23154
23155         * expression.cs (Invocation.EmitParams): If the we are dealing
23156         with a non-built-in value type, load its address as well.
23157
23158         (ArrayCreation): Use a a pretty constant instead
23159         of the hardcoded value 2.   Use 6 instead of 2 for the number of
23160         static initializers.  
23161
23162         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
23163         because they are not really value types, just glorified integers. 
23164
23165         * driver.cs: Do not append .exe, the CSC compiler does not do it.
23166
23167         * ecore.cs: Remove redundant code for enumerations, make them use
23168         the same code path as everything else, fixes the casting issue
23169         with enumerations in Windows.Forms.
23170
23171         * attribute.cs: Do only cast to string if it is a string, the
23172         validation happens later.
23173
23174         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
23175         people upgrade their corlibs.
23176
23177         * ecore.cs: Oops, enumerations were not following the entire code path
23178
23179 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
23180
23181         * typemanager.cs (FilterWithClosure): Commented out the test for
23182         1540 in typemanager.cs, as it has problems when accessing
23183         protected methods from a parent class (see test-174.cs). 
23184
23185         * attribute.cs (Attribute.ValidateGuid): new method.
23186         (Attribute.Resolve): Use above.
23187
23188 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
23189
23190         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
23191
23192         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
23193         handling for enumerations, as we only needed the TypeContainer
23194         functionality to begin with (this is required for the fix below to
23195         work for enums that reference constants in a container class for
23196         example). 
23197
23198         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
23199
23200         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
23201         a valid TypeBuilder to perform lookups on.o
23202
23203         * class.cs (InheritableMemberSignatureCompare): Use true in the
23204         call to GetGetMethod and GetSetMethod, because we are comparing
23205         the signature, and we need to get the methods *even* if they are
23206         private. 
23207
23208         (PropertyBase.CheckBase): ditto.
23209
23210         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
23211         GotoCase.Resolve): Use Peel on EmpytCasts.
23212
23213         * ecore.cs (EmptyCast): drop child, add Peel method.
23214
23215 2002-11-17  Martin Baulig  <martin@ximian.com>
23216
23217         * ecore.cs (EmptyCast.Child): New public property.
23218
23219         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
23220         label resolved to an EmptyCast.  Fixes #34162.
23221         (GotoCase.Resolve): Likewise.
23222         (Block.EmitMeta): Likewise.
23223
23224 2002-11-17  Martin Baulig  <martin@ximian.com>
23225
23226         * expression.cs (Invocation.BetterConversion): Prefer int over
23227         uint; short over ushort; long over ulong for integer literals.
23228         Use ImplicitConversionExists instead of StandardConversionExists
23229         since we also need to check for user-defined implicit conversions.
23230         Fixes #34165.  Added test-173.cs.
23231
23232 2002-11-16  Martin Baulig  <martin@ximian.com>
23233
23234         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
23235         with the `true' and `false' literals.  Fixes #33151.
23236
23237 2002-11-16  Martin Baulig  <martin@ximian.com>
23238
23239         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
23240         October 22nd; don't do the cs1540 check for static members.
23241
23242         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
23243         now using our own filter here and doing the cs1540 check again.
23244
23245 2002-11-16  Martin Baulig  <martin@ximian.com>
23246
23247         * support.cs (InternalParameters): Don't crash if we don't have
23248         any fixed parameters.  Fixes #33532.
23249
23250 2002-11-16  Martin Baulig  <martin@ximian.com>
23251
23252         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
23253         when looking up static methods to make this work on Windows.
23254         Fixes #33773.
23255
23256 2002-11-16  Martin Baulig  <martin@ximian.com>
23257
23258         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
23259         a setter rather than using PropertyInfo.CanWrite.
23260
23261 2002-11-15  Nick Drochak  <ndrochak@gol.com>
23262
23263         * class.cs: Allow acces to block member by subclasses. Fixes build
23264         breaker.
23265
23266 2002-11-14  Martin Baulig  <martin@ximian.com>
23267
23268         * class.cs (Constructor.Emit): Added the extern/block check.
23269         Fixes bug #33678.
23270
23271 2002-11-14  Martin Baulig  <martin@ximian.com>
23272
23273         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
23274         iteration while looking for indexers, this is needed because the
23275         indexer may have a different name in our base classes.  Fixed the
23276         error reporting (no indexers at all, not get accessor, no
23277         overloaded match).  Fixes bug #33089.
23278         (IndexerAccess.DoResolveLValue): Likewise.
23279
23280 2002-11-14  Martin Baulig  <martin@ximian.com>
23281
23282         * class.cs (PropertyBase.CheckBase): Make this work for multiple
23283         indexers.  Fixes the first part of bug #33089.
23284         (MethodSignature.InheritableMemberSignatureCompare): Added support
23285         for properties.
23286
23287 2002-11-13  Ravi Pratap  <ravi@ximian.com>
23288
23289         * attribute.cs (Attribute.Resolve): Catch the
23290         NullReferenceException and report it since it isn't supposed to
23291         happen. 
23292
23293 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
23294
23295         * expression.cs (Binary.EmitBranchable): Also handle the cases for
23296         LogicalOr and LogicalAnd that can benefit from recursively
23297         handling EmitBranchable.  The code now should be nice for Paolo.
23298
23299 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
23300
23301         * typemanager.cs (LookupType): Added a negative-hit hashtable for
23302         the Type lookups, as we perform quite a number of lookups on
23303         non-Types.  This can be removed once we can deterministically tell
23304         whether we have a type or a namespace in advance.
23305
23306         But this might require special hacks from our corlib.
23307
23308         * TODO: updated.
23309
23310         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
23311         and double which avoids a conversion from an integer to a double.
23312
23313         * expression.cs: tiny optimization, avoid calling IsConstant,
23314         because it effectively performs the lookup twice.
23315
23316 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
23317
23318         But a bogus return here to keep the semantics of the old code
23319         until the Mono runtime is fixed.
23320
23321         * pending.cs (GetMissingInterfaces): New method used to remove all
23322         the interfaces that are already implemented by our parent
23323         classes from the list of pending methods. 
23324
23325         * interface.cs: Add checks for calls after ResolveTypeExpr.
23326
23327 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
23328
23329         * class.cs (Class.Emit): Report warning 67: event not used if the
23330         warning level is beyond 3.
23331
23332         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
23333         being a NullLiteral.
23334
23335         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
23336         specifiers. 
23337
23338         * class.cs (TypeContainer.GetClassBases): Cover a missing code
23339         path that might fail if a type can not be resolved.
23340
23341         * expression.cs (Binary.Emit): Emit unsigned versions of the
23342         operators. 
23343
23344         * driver.cs: use error 5.
23345
23346 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
23347
23348         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
23349
23350 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
23351
23352         * cs-parser.jay (switch_section): A beautiful patch from Martin
23353         Baulig that fixed 33094.
23354
23355 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
23356
23357         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
23358         Check whether the base is abstract and report an error if so.
23359
23360         * expression.cs (IndexerAccess.DoResolveLValue,
23361         IndexerAccess.DoResolve): ditto. 
23362
23363         (Invocation.DoResolve): ditto.
23364
23365         (Invocation.FullMethodDesc): Improve the report string.
23366
23367         * statement.cs (Block): Eliminate IsVariableDefined as it is
23368         basically just a wrapper for GetVariableInfo.
23369
23370         * ecore.cs (SimpleName): Use new 
23371
23372         * support.cs (ReflectionParamter.ParameterType): We unwrap the
23373         type, as we return the actual parameter ref/unref state on a
23374         different call.
23375
23376 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
23377
23378         * support.cs: Return proper flags REF/OUT fixing the previous
23379         commit.  
23380
23381         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
23382         not used to mean `ref' but `ref or out' in ParameterReference
23383
23384         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
23385         full type signature instead of calling TypeManger.CSharpName
23386         ourselves. 
23387
23388         * support.cs (InternalParameters.ParameterDesc): Do not compare
23389         directly to the modflags, because REF/OUT will actually be bitsets
23390         if set. 
23391
23392         * delegate.cs (VerifyMethod): Check also the modifiers.
23393
23394         * cs-tokenizer.cs: Fix bug where floating point values with an
23395         exponent where a sign was missing was ignored.
23396
23397         * driver.cs: Allow multiple assemblies to be specified in a single
23398         /r: argument
23399
23400 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
23401
23402         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
23403         because identifiers after a parenthesis would end up in this kind
23404         of production, and we needed to desamiguate it for having casts
23405         like:
23406
23407                 (UserDefinedType *) xxx
23408
23409 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
23410
23411         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
23412         we should set on the Bindingflags.NonPublic, but not turn on
23413         private_ok.  private_ok controls whether a Private member is
23414         returned (this is chekced on the filter routine), while the
23415         BindingFlags.NonPublic just controls whether private/protected
23416         will be allowed.   This fixes the problem part of the problem of
23417         private properties being allowed to be used in derived classes.
23418
23419         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
23420         so we can call the children DoResolveLValue method (this will
23421         properly signal errors on lvalue assignments to base properties)
23422
23423         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
23424         getter are null, and we have a property info, we know that this
23425         happened because the lookup failed, so we report an error 122 for
23426         protection level violation.
23427
23428         We also silently return if setter and getter are null in the
23429         resolve functions, this condition only happens if we have flagged
23430         the error before.  This is the other half of the problem. 
23431
23432         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
23433         not have accessibility information, that is why we were returning
23434         true in the filter function in typemanager.cs.
23435
23436         To properly report 122 (property is inaccessible because of its
23437         protection level) correctly, we report this error in ResolveAccess
23438         by failing if both the setter and the getter are lacking (ie, the
23439         lookup failed). 
23440
23441         DoResolve and DoLResolve have been modified to check for both
23442         setter/getter being null and returning silently, the reason being
23443         that I did not want to put the knowledge about this error in upper
23444         layers, like:
23445
23446         int old = Report.Errors;
23447         x = new PropertyExpr (...);
23448         if (old != Report.Errors)
23449                 return null;
23450         else
23451                 return x;
23452
23453         So the property expr is returned, but it is invalid, so the error
23454         will be flagged during the resolve process. 
23455
23456         * class.cs: Remove InheritablePropertySignatureCompare from the
23457         class, as we no longer depend on the property signature to compute
23458         whether it is possible to implement a method or not.
23459
23460         The reason is that calling PropertyInfo.GetGetMethod will return
23461         null (in .NET, in Mono it works, and we should change this), in
23462         cases where the Get Method does not exist in that particular
23463         class.
23464
23465         So this code:
23466
23467         class X { public virtual int A { get { return 1; } } }
23468         class Y : X { }
23469         class Z : Y { public override int A { get { return 2; } } }
23470
23471         Would fail in Z because the parent (Y) would not have the property
23472         defined.  So we avoid this completely now (because the alternative
23473         fix was ugly and slow), and we now depend exclusively on the
23474         method names.
23475
23476         (PropertyBase.CheckBase): Use a method-base mechanism to find our
23477         reference method, instead of using the property.
23478
23479         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
23480         routines are gone now.
23481
23482         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
23483         names, they were incorrectly named.
23484
23485         * cs-tokenizer.cs: Return are more gentle token on failure. 
23486
23487         * pending.cs (PendingImplementation.InterfaceMethod): This routine
23488         had an out-of-sync index variable, which caused it to remove from
23489         the list of pending methods the wrong method sometimes.
23490
23491 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
23492
23493         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
23494         CanWrite, because those refer to this particular instance of the
23495         property, and do not take into account the fact that we can
23496         override single members of a property.
23497
23498         Constructor requires an EmitContext.  The resolution process does
23499         not happen here, but we need to compute the accessors before,
23500         because the resolution does not always happen for properties.
23501
23502         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
23503         subclass, before we did not update this flag, but we did update
23504         bindingflags. 
23505
23506         (GetAccessors): Drop this routine, as it did not work in the
23507         presence of partially overwritten set/get methods. 
23508
23509         Notice that this broke the cs1540 detection, but that will require
23510         more thinking. 
23511
23512 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23513
23514         * class.cs:
23515         * codegen.cs:
23516         * driver.cs: issue a warning instead of an error if we don't support
23517         debugging for the platform. Also ignore a couple of errors that may
23518         arise when trying to write the symbols. Undo my previous patch.
23519
23520 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23521
23522         * driver.cs: ignore /debug switch except for Unix platforms.
23523
23524 2002-10-23  Nick Drochak  <ndrochak@gol.com>
23525
23526         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
23527
23528 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
23529
23530         * driver.cs: Do not make mcs-debug conditional, so we do not break
23531         builds that use it.
23532
23533         * statement.cs (UsageVector.MergeChildren): I would like Martin to
23534         review this patch.  But basically after all the children variables
23535         have been merged, the value of "Breaks" was not being set to
23536         new_breaks for Switch blocks.  I think that it should be set after
23537         it has executed.  Currently I set this to the value of new_breaks,
23538         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
23539         conservative, but I do not understand this code very well.
23540
23541         I did not break anything in the build, so that is good ;-)
23542
23543         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
23544
23545 2002-10-20  Mark Crichton  <crichton@gimp.org>
23546
23547         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
23548
23549 2002-10-20  Nick Drochak  <ndrochak@gol.com>
23550
23551         * cfold.cs: Fixed compile blocker.
23552
23553 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
23554
23555         * driver.cs: I was chekcing the key, not the file.
23556
23557 2002-10-19  Ravi Pratap  <ravi@ximian.com>
23558
23559         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
23560         message that we were generating - we just need to silently return
23561         a null.
23562
23563 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
23564
23565         * class.cs (Event.Define): Change my previous commit, as this
23566         breaks the debugger.  This is a temporary hack, as it seems like
23567         the compiler is generating events incorrectly to begin with.
23568
23569         * expression.cs (Binary.ResolveOperator): Added support for 
23570         "U operator - (E x, E y)"
23571
23572         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
23573         y)".
23574
23575         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
23576         init-only variables, but this path did not take into account that
23577         there might be also instance readonly variables.  Correct this
23578         problem. 
23579
23580         This fixes bug 32253
23581
23582         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
23583         delegates as well.
23584
23585         * driver.cs: Change the extension for modules to `netmodule'
23586
23587         * cs-parser.jay: Improved slightly the location tracking for
23588         the debugger symbols.
23589
23590         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
23591         modifiers that were specified instead of the hardcoded value
23592         (FamAndAssem).  This was basically ignoring the static modifier,
23593         and others.  Fixes 32429.
23594
23595         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
23596         fixed a bug in the process (32476)
23597
23598         * expression.cs (ArrayAccess.EmitAssign): Patch from
23599         hwang_rob@yahoo.ca that fixes bug 31834.3
23600
23601 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
23602
23603         * driver.cs: Make the module extension .netmodule.
23604
23605 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
23606
23607         * driver.cs: Report an error if the resource file is not found
23608         instead of crashing.
23609
23610         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
23611         false, like Emit does.
23612
23613 2002-10-16  Nick Drochak  <ndrochak@gol.com>
23614
23615         * typemanager.cs: Remove unused private member.  Also reported mcs
23616         bug to report this as a warning like csc.
23617
23618 2002-10-15  Martin Baulig  <martin@gnome.org>
23619
23620         * statement.cs (Statement.Emit): Made this a virtual method; emits
23621         the line number info and calls DoEmit().
23622         (Statement.DoEmit): New protected abstract method, formerly knows
23623         as Statement.Emit().
23624
23625         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
23626
23627 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
23628
23629         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
23630         have fixed a remaining problem: not every AddXXXX was adding a
23631         fully qualified name.  
23632
23633         Now everyone registers a fully qualified name in the DeclSpace as
23634         being defined instead of the partial name.  
23635
23636         Downsides: we are slower than we need to be due to the excess
23637         copies and the names being registered this way.  
23638
23639         The reason for this is that we currently depend (on the corlib
23640         bootstrap for instance) that types are fully qualified, because
23641         we dump all the types in the namespace, and we should really have
23642         types inserted into the proper namespace, so we can only store the
23643         basenames in the defined_names array.
23644
23645 2002-10-10  Martin Baulig  <martin@gnome.org>
23646
23647         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
23648         from bug #31834, see the bug report for a testcase which is
23649         miscompiled.
23650
23651 2002-10-10  Martin Baulig  <martin@gnome.org>
23652
23653         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
23654         flow analysis code for this.
23655
23656         * statement.cs (Do, While, For): Tell the flow analysis code about
23657         infinite loops.
23658         (FlowBranching.UsageVector): Added support for infinite loops.
23659         (Block.Resolve): Moved the dead code elimination here and use flow
23660         analysis to do it.
23661
23662 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
23663
23664         * class.cs (Field.Define): Catch cycles on struct type
23665         definitions. 
23666
23667         * typemanager.cs (IsUnmanagedtype): Do not recursively check
23668         fields if the fields are static.  We only need to check instance
23669         fields. 
23670
23671         * expression.cs (As.DoResolve): Test for reference type.
23672
23673         * statement.cs (Using.ResolveExpression): Use
23674         ConvertImplicitRequired, not ConvertImplicit which reports an
23675         error on failture
23676         (Using.ResolveLocalVariableDecls): ditto.
23677
23678         * expression.cs (Binary.ResolveOperator): Report errors in a few
23679         places where we had to.
23680
23681         * typemanager.cs (IsUnmanagedtype): Finish implementation.
23682
23683 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
23684
23685         * expression.cs: Use StoreFromPtr instead of extracting the type
23686         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
23687
23688         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
23689         an enumeration value to a System.Enum, but System.Enum is not a
23690         value type, but an class type, so we need to box.
23691
23692         (Expression.ConvertExplicit): One codepath could return
23693         errors but not flag them.  Fix this.  Fixes #31853
23694
23695         * parameter.cs (Resolve): Do not allow void as a parameter type.
23696
23697 2002-10-06  Martin Baulig  <martin@gnome.org>
23698
23699         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
23700         if it's a class type and not a struct.  Fixes #31815.
23701
23702 2002-10-06  Martin Baulig  <martin@gnome.org>
23703
23704         * statement.cs: Reworked the flow analysis code a bit to make it
23705         usable for dead code elimination.
23706
23707 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23708
23709         * cs-parser.jay: allow empty source files. Fixes bug #31781.
23710
23711 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
23712
23713         * expression.cs (ComposedCast.DoResolveType): A quick workaround
23714         to fix the test 165, will investigate deeper.
23715
23716 2002-10-04  Martin Baulig  <martin@gnome.org>
23717
23718         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
23719         finally blocks actually work.
23720         (Try.Resolve): We don't need to create a sibling for `finally' if
23721         there is no finally block.
23722
23723 2002-10-04  Martin Baulig  <martin@gnome.org>
23724
23725         * class.cs (Constructor.Define): The default accessibility for a
23726         non-default constructor is private, not public.
23727
23728 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
23729
23730         * class.cs (Constructor): Make AllowedModifiers public, add
23731         EXTERN.
23732
23733         * cs-parser.jay: Perform the modifiers test here, as the
23734         constructor for the Constructor class usually receives a zero
23735         because of the way we create it (first we create, later we
23736         customize, and we were never checking the modifiers).
23737
23738         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
23739         is a version of LookupTypeReflection that includes the type-name
23740         cache.  This can be used as a fast path for functions that know
23741         the fully qualified name and are only calling into *.GetType() to
23742         obtain a composed type.
23743
23744         This is also used by TypeManager.LookupType during its type
23745         composition.
23746
23747         (LookupType): We now also track the real type name, as sometimes
23748         we can get a quey for the real type name from things like
23749         ComposedCast.  This fixes bug 31422.
23750
23751         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
23752         complete type fullname, it does not have to go through the type
23753         resolution system to obtain the composed version of the type (for
23754         obtaining arrays or pointers).
23755
23756         (Conditional.Emit): Use the EmitBoolExpression to
23757         generate nicer code, as requested by Paolo.
23758
23759         (ArrayCreation.CheckIndices): Use the patch from
23760         hwang_rob@yahoo.ca to validate the array initializers. 
23761
23762 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
23763
23764         * class.cs (ConstructorInitializer.Emit): simplify code by using
23765         Invocation.EmitCall, and at the same time, fix the bugs in calling
23766         parent constructors that took variable arguments. 
23767
23768         * ecore.cs (Expression.ConvertNumericExplicit,
23769         Expression.ImplicitNumericConversion): Remove the code that
23770         manually wrapped decimal (InternalTypeConstructor call is now gone
23771         as well).
23772
23773         * expression.cs (Cast.TryReduce): Also handle decimal types when
23774         trying to perform a constant fold on the type.
23775
23776         * typemanager.cs (IsUnmanagedtype): Partially implemented.
23777
23778         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
23779         that only turned off an error report, and did nothing else. 
23780
23781 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
23782
23783         * driver.cs: Handle and ignore /fullpaths
23784
23785 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
23786
23787         * expression.cs (Binary.ResolveOperator): Catch the case where
23788         DoNumericPromotions returns true, 
23789
23790         (Binary.DoNumericPromotions): Simplify the code, and the tests.
23791
23792 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
23793
23794         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
23795         report error 70.
23796
23797 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
23798
23799         * ecore.cs (ConvertNumericExplicit): It is not enough that the
23800         conversion exists, but it is also required that the conversion be
23801         performed.  This manifested in "(Type64Enum) 2".  
23802
23803         * class.cs (TypeManager.AddMethod): The fix is not to change
23804         AddEnum, because that one was using a fully qualified name (every
23805         DeclSpace derivative does), but to change the AddMethod routine
23806         that was using an un-namespaced name.  This now correctly reports
23807         the duplicated name.
23808
23809         Revert patch until I can properly fix it.  The issue
23810         is that we have a shared Type space across all namespaces
23811         currently, which is wrong.
23812
23813         Options include making the Namespace a DeclSpace, and merge
23814         current_namespace/current_container in the parser.
23815
23816 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
23817
23818         * cs-parser.jay: Improve error reporting when we get a different
23819         kind of expression in local_variable_type and
23820         local_variable_pointer_type. 
23821
23822         Propagate this to avoid missleading errors being reported.
23823
23824         * ecore.cs (ImplicitReferenceConversion): treat
23825         TypeManager.value_type as a target just like object_type.   As
23826         code like this:
23827
23828         ValueType v = 1;
23829
23830         Is valid, and needs to result in the int 1 being boxed before it
23831         is assigned to the value type v.
23832
23833         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
23834         to validate the enumeration name.
23835
23836         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
23837         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
23838         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
23839
23840         * ecore.cs (TryImplicitIntConversion): When doing an
23841         implicit-enumeration-conversion, check if the type is 64-bits and
23842         perform a conversion before passing to EnumConstant.
23843
23844 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
23845
23846         * decl.cs (Error_AmbiguousTypeReference); New routine used to
23847         report ambiguous type references.  Unlike the MS version, we
23848         report what the ambiguity is.   Innovation at work ;-)
23849
23850         (DeclSpace.FindType): Require a location argument to
23851         display when we display an ambiguous error.
23852
23853         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
23854
23855         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
23856
23857         * expression.cs (EmitDynamicInitializers): Apply patch from
23858         hwang_rob@yahoo.ca that fixes the order in which we emit our
23859         initializers. 
23860
23861 2002-09-21  Martin Baulig  <martin@gnome.org>
23862
23863         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
23864         delegate takes no arguments.
23865
23866 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
23867
23868         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
23869         from integers.
23870
23871         * expression.cs: Extract the underlying type.
23872
23873         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
23874
23875         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
23876
23877 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
23878
23879         * class.cs (TypeContainer.DefineType): We can not use the nice
23880         PackingSize with the size set to 1 DefineType method, because it
23881         will not allow us to define the interfaces that the struct
23882         implements.
23883
23884         This completes the fixing of bug 27287
23885
23886         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
23887         means also structs.  This fixes part of the problem. 
23888         (Expresion.ImplicitReferenceConversionExists): ditto.
23889
23890         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
23891         error if there were no errors reported during the type lookup
23892         process, to avoid duplicates or redundant errors.  Without this
23893         you would get an ambiguous errors plus a type not found.  We have
23894         beaten the user enough with the first error.  
23895
23896         (DeclSparce.FindType): Emit a warning if we have an ambiguous
23897         reference. 
23898
23899         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
23900         during the resolution process, stop the lookup, this avoids
23901         repeated error reports (same error twice).
23902
23903         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
23904
23905         * typemanager.cs (LookupType): Redo the type lookup code to match
23906         the needs of System.Reflection.  
23907
23908         The issue is that System.Reflection requires references to nested
23909         types to begin with a "+" sign instead of a dot.  So toplevel
23910         types look like: "NameSpace.TopLevelClass", and nested ones look
23911         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
23912         levels. 
23913
23914 2002-09-19  Martin Baulig  <martin@gnome.org>
23915
23916         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
23917         says that a method always returns or always throws an exception,
23918         don't report the CS0161.
23919
23920         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
23921         set `Returns = new_returns'.
23922
23923 2002-09-19  Martin Baulig  <martin@gnome.org>
23924
23925         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
23926         to an enum constant, check for a CS0176.
23927
23928 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
23929
23930         * class.cs (TypeContainer.CheckPairedOperators): Now we check
23931         for operators that must be in pairs and report errors.
23932
23933         * ecore.cs (SimpleName.DoResolveType): During the initial type
23934         resolution process, when we define types recursively, we must
23935         check first for types in our current scope before we perform
23936         lookups in the enclosing scopes.
23937
23938         * expression.cs (MakeByteBlob): Handle Decimal blobs.
23939
23940         (Invocation.VerifyArgumentsCompat): Call
23941         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
23942         I thought we were supposed to always call this, but there are a
23943         few places in the code where we dont do it.
23944
23945 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
23946
23947         * driver.cs: Add support in -linkres and -resource to specify the
23948         name of the identifier.
23949
23950 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
23951
23952         * ecore.cs (StandardConversionExists): Sync with the conversion
23953         code: allow anything-* to void* conversions.
23954
23955         (FindMostSpecificSource): Use an Expression argument
23956         instead of a Type, because we might be handed over a Literal which
23957         gets a few more implicit conversions that plain types do not.  So
23958         this information was being lost.
23959
23960         Also, we drop the temporary type-holder expression when not
23961         required.
23962
23963 2002-09-17  Martin Baulig  <martin@gnome.org>
23964
23965         * class.cs (PropertyBase.CheckBase): Don't check the base class if
23966         this is an explicit interface implementation.
23967
23968 2002-09-17  Martin Baulig  <martin@gnome.org>
23969
23970         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
23971         different `IndexerName' attributes.
23972
23973         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
23974         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
23975         virtual CommonResolve().
23976
23977 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
23978
23979         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
23980         and convert that to the UnderlyingType.
23981
23982         * statement.cs (Foreach.Resolve): Indexers are just like variables
23983         or PropertyAccesses.
23984
23985         * cs-tokenizer.cs (consume_string): Track line numbers and columns
23986         inside quoted strings, we were not doing this before.
23987
23988 2002-09-16  Martin Baulig  <martin@gnome.org>
23989
23990         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
23991         resolve it.  This is needed for the definite assignment check of the
23992         instance expression, fixes bug #29846.
23993         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
23994
23995 2002-09-16  Nick Drochak  <ndrochak@gol.com>
23996
23997         * parameter.cs: Fix compile error.  Cannot reference static member
23998         from an instance object.  Is this an mcs bug?
23999
24000 2002-09-14  Martin Baulig  <martin@gnome.org>
24001
24002         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
24003         multiple times.  Fixes bug #30295, added test-166.cs.
24004
24005 2002-09-14  Martin Baulig  <martin@gnome.org>
24006
24007         * statement.cs (Block.Emit): Don't emit unreachable code.
24008         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
24009         `break' statements.
24010         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
24011
24012 2002-09-14  Martin Baulig  <martin@gnome.org>
24013
24014         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
24015         is set.
24016
24017 2002-09-14  Martin Baulig  <martin@gnome.org>
24018
24019         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
24020         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
24021         be false on the ms runtime.
24022
24023 2002-09-13  Martin Baulig  <martin@gnome.org>
24024
24025         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
24026         the CS0038 error message.
24027
24028 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
24029
24030         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
24031         constant inside, return it.
24032
24033 2002-09-12  Martin Baulig  <martin@gnome.org>
24034
24035         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
24036         implicit conversion can be done between enum types.
24037
24038         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
24039         check whether an implicit conversion to the current enum's UnderlyingType
24040         exists and report an error if not.
24041
24042         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
24043         without debugging support.
24044
24045         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
24046         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
24047
24048 2002-09-12  Martin Baulig  <martin@gnome.org>
24049
24050         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
24051
24052         * ecore.cs (IMemberExpr.DeclaringType): New property.
24053         (SimpleName.SimpleNameResolve): Check whether we're accessing a
24054         nonstatic member of an outer type (CS0038).
24055
24056 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
24057
24058         * driver.cs: Activate the using-error detector at warning level
24059         4 (at least for MS-compatible APIs).
24060
24061         * namespace.cs (VerifyUsing): Small buglett fix.
24062
24063         * pending.cs (PendingImplementation): pass the container pointer. 
24064
24065         * interface.cs (GetMethods): Allow for recursive definition.  Long
24066         term, I would like to move every type to support recursive
24067         definitions, not the current ordering mechanism that we have right
24068         now.
24069
24070         The situation is this: Attributes are handled before interfaces,
24071         so we can apply attributes to interfaces.  But some attributes
24072         implement interfaces, we will now handle the simple cases
24073         (recursive definitions will just get an error).  
24074
24075         * parameter.cs: Only invalidate types at the end if we fail to
24076         lookup all types.  
24077
24078 2002-09-09  Martin Baulig  <martin@gnome.org>
24079
24080         * ecore.cs (PropertyExpr.Emit): Also check for
24081         TypeManager.system_int_array_get_length so this'll also work when
24082         compiling corlib.  Fixes #30003.
24083
24084 2002-09-09  Martin Baulig  <martin@gnome.org>
24085
24086         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
24087         and throw an exception if we can't get the type's size.  Fixed #30040,
24088         added test-165.cs.
24089
24090 2002-09-09  Martin Baulig  <martin@gnome.org>
24091
24092         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
24093
24094         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
24095         context.  Fixes bug #30027.
24096
24097         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
24098         virtual functions.  Fixes bug #30043, added test-164.cs.
24099
24100 2002-09-08  Ravi Pratap  <ravi@ximian.com>
24101
24102         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
24103
24104 2002-09-08  Nick Drochak  <ndrochak@gol.com>
24105
24106         * driver.cs: Use an object to get the windows codepage since it's not a
24107         static property.
24108
24109 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
24110
24111         * statement.cs (For.Emit): for infinite loops (test == null)
24112         return whether there is a break inside, not always "true".
24113
24114         * namespace.cs (UsingEntry): New struct to hold the name of the
24115         using definition, the location where it is defined, and whether it
24116         has been used in a successful type lookup.
24117
24118         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
24119         strings.
24120
24121         * decl.cs: ditto.
24122
24123 2002-09-06  Ravi Pratap  <ravi@ximian.com>
24124
24125         * attribute.cs : Fix incorrect code which relied on catching
24126         a NullReferenceException to detect a null being passed in
24127         where an object was expected.
24128
24129 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
24130
24131         * statement.cs (Try): flag the catch variable as assigned
24132
24133         * expression.cs (Cast): Simplified by using ResolveType instead of
24134         manually resolving.
24135
24136         * statement.cs (Catch): Fix bug by using ResolveType.
24137
24138 2002-09-06  Ravi Pratap  <ravi@ximian.com>
24139
24140         * expression.cs (BetterConversion): Special case for when we have
24141         a NullLiteral as the argument and we have to choose between string
24142         and object types - we choose string the way csc does.
24143
24144         * attribute.cs (Attribute.Resolve): Catch the
24145         NullReferenceException and report error #182 since the Mono
24146         runtime no more has the bug and having this exception raised means
24147         we tried to select a constructor which takes an object and is
24148         passed a null.
24149
24150 2002-09-05  Ravi Pratap  <ravi@ximian.com>
24151
24152         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
24153         message (1502, 1503) when we can't locate a method after overload
24154         resolution. This is much more informative and closes the bug
24155         Miguel reported.
24156
24157         * interface.cs (PopulateMethod): Return if there are no argument
24158         types. Fixes a NullReferenceException bug.
24159
24160         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
24161         expressions too. Previously we were checking only in one place for
24162         positional arguments leaving out named arguments.
24163
24164         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
24165         type to the enum type is not allowed. Remove code corresponding to
24166         that.
24167
24168         (ConvertNumericExplicit): Allow explicit conversions from
24169         the underlying type to enum type. This precisely follows the spec
24170         and closes a bug filed by Gonzalo.
24171
24172 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24173
24174         * compiler.csproj:
24175         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
24176
24177 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
24178
24179         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
24180         it was important that we stored the right value after the
24181         reduction in `converted'.
24182
24183 2002-09-04  Martin Baulig  <martin@gnome.org>
24184
24185         * location.cs (Location.SymbolDocument): Use full pathnames for the
24186         source files.
24187
24188 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
24189
24190         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
24191         of the expression resolve mechanism, because that will catch the
24192         SimpleName error failures.
24193
24194         (Conditional): If we can not resolve the
24195         expression, return, do not crash.
24196
24197 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24198
24199         * cs-tokenizer.cs:
24200         (location): display token name instead of its number.
24201
24202 2002-08-28  Martin Baulig  <martin@gnome.org>
24203
24204         * expression.cs (Binary.ResolveOperator): Don't silently return
24205         but return an error if an operator cannot be applied between two
24206         enum types.
24207
24208 2002-08-28  Martin Baulig  <martin@gnome.org>
24209
24210         * class.cs (Constructor.Define): Set the permission attributes
24211         correctly instead of making all constructors public.
24212
24213 2002-08-28  Martin Baulig  <martin@gnome.org>
24214
24215         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
24216         for private members before reporting a CS0103; if we find anything,
24217         it's a CS0122.
24218
24219 2002-08-28  Martin Baulig  <martin@gnome.org>
24220
24221         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
24222         to check whether `closure_start_type == closure_invocation_type',
24223         we also need to check whether `m.DeclaringType == closure_invocation_type'
24224         before bypassing the permission checks.  We might be accessing
24225         protected/private members from the base class.
24226         (TypeManager.RealMemberLookup): Only set private_ok if private
24227         members were requested via BindingFlags.NonPublic.
24228
24229         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
24230
24231         * expression.cs (MemberAccess.ResolveMemberAccess): Set
24232         MethodGroupExpr.IsExplicitImpl if appropriate.
24233         (Invocation.DoResolve): Don't report the CS0120 for explicit
24234         interface implementations.
24235
24236 2002-08-27  Martin Baulig  <martin@gnome.org>
24237
24238         * expression.cs (Invocation.DoResolve): If this is a static
24239         method and we don't have an InstanceExpression, we must report
24240         a CS0120.
24241
24242 2002-08-25  Martin Baulig  <martin@gnome.org>
24243
24244         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
24245         `==' between a valuetype and an object.
24246
24247 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
24248
24249         * ecore.cs (TypeExpr): Provide a ToString method.
24250
24251 2002-08-24  Martin Baulig  <martin@gnome.org>
24252
24253         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
24254         now called proggie.dbg and it's a binary file.
24255
24256 2002-08-23  Martin Baulig  <martin@gnome.org>
24257
24258         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
24259
24260 2002-08-23  Martin Baulig  <martin@gnome.org>
24261
24262         * struct.cs (MyStructInfo.ctor): Make this work with empty
24263         structs; it's not allowed to use foreach() on null.
24264
24265 2002-08-23  Martin Baulig  <martin@gnome.org>
24266
24267         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
24268         writer the full pathname of the generated assembly.
24269
24270 2002-08-23  Martin Baulig  <martin@gnome.org>
24271
24272         * statements.cs (FlowBranching.UsageVector.MergeChildren):
24273         A `finally' block never returns or breaks; improved handling of
24274         unreachable code.
24275
24276 2002-08-23  Martin Baulig  <martin@gnome.org>
24277
24278         * statement.cs (Throw.Resolve): Allow `throw null'.
24279
24280 2002-08-23  Martin Baulig  <martin@gnome.org>
24281
24282         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
24283         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
24284         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
24285         MemberLookup would return a wrong event if this is an explicit
24286         interface implementation and the class has an event with the same
24287         name.
24288
24289 2002-08-23  Martin Baulig  <martin@gnome.org>
24290
24291         * statement.cs (Block.AddChildVariableNames): New public method.
24292         (Block.AddChildVariableName): Likewise.
24293         (Block.IsVariableNameUsedInChildBlock): Likewise.
24294         (Block.AddVariable): Check whether a variable name has already
24295         been used in a child block.
24296
24297         * cs-parser.jay (declare_local_variables): Mark all variable names
24298         from the current block as being used in a child block in the
24299         implicit block.
24300
24301 2002-08-23  Martin Baulig  <martin@gnome.org>
24302
24303         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
24304         find the symbol writer.
24305
24306         * driver.cs: csc also allows the arguments to /define being
24307         separated by commas, not only by semicolons.
24308
24309 2002-08-23  Martin Baulig  <martin@gnome.org>
24310
24311         * interface.cs (Interface.GetMembers): Added static check for events.
24312
24313 2002-08-15  Martin Baulig  <martin@gnome.org>
24314
24315         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
24316         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
24317
24318         * ecore.cs (Expression.MemberLookup): Added documentation and explained
24319         why the MethodData.EmitDestructor() change was necessary.
24320
24321 2002-08-20  Martin Baulig  <martin@gnome.org>
24322
24323         * class.cs (TypeContainer.FindMembers): Added static check for events.
24324
24325         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
24326
24327         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
24328         use Type.GetEvents(), not Type.FindMembers().
24329
24330 2002-08-20  Martin Baulig  <martin@gnome.org>
24331
24332         * decl.cs (MemberCache): Added a special method cache which will
24333         be used for method-only searched.  This ensures that a method
24334         search will return a MethodInfo with the correct ReflectedType for
24335         inherited methods.      
24336
24337 2002-08-20  Martin Baulig  <martin@gnome.org>
24338
24339         * decl.cs (DeclSpace.FindMembers): Made this public.
24340
24341 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24342
24343         * delegate.cs: fixed build on windows.
24344         [FIXME:  Filed as bug #29150: MCS must report these errors.]
24345
24346 2002-08-19  Ravi Pratap  <ravi@ximian.com>
24347
24348         * ecore.cs (StandardConversionExists): Return a false
24349         if we are trying to convert the void type to anything else
24350         since that is not allowed.
24351
24352         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
24353         we flag error 70 in the event an event is trying to be accessed
24354         directly from outside the declaring type.
24355
24356 2002-08-20  Martin Baulig  <martin@gnome.org>
24357
24358         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
24359         MemberCache from typemanager.cs to decl.cs.
24360
24361 2002-08-19  Martin Baulig  <martin@gnome.org>
24362
24363         * class.cs (TypeContainer): Implement IMemberContainer.
24364         (TypeContainer.DefineMembers): Create the MemberCache.
24365         (TypeContainer.FindMembers): Do better BindingFlags checking; only
24366         return public members if BindingFlags.Public was given, check
24367         whether members are static.
24368
24369 2002-08-16  Martin Baulig  <martin@gnome.org>
24370
24371         * decl.cs (DeclSpace.Define): Splitted this in Define and
24372         DefineMembers.  DefineMembers is called first and initializes the
24373         MemberCache.
24374
24375         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
24376         DefineMembers() on all our DeclSpaces.
24377
24378         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
24379         but call DefineMembers() on all nested interfaces.  We call their
24380         Define() in our new Define() function.
24381
24382         * interface.cs (Interface): Implement IMemberContainer.
24383         (Interface.Define): Moved all code except the attribute stuf to
24384         DefineMembers().
24385         (Interface.DefineMembers): Initialize the member cache.
24386
24387         * typemanager.cs (IMemberFinder): Removed this interface, we don't
24388         need this anymore since we can use MemberCache.FindMembers directly.
24389
24390 2002-08-19  Martin Baulig  <martin@gnome.org>
24391
24392         * typemanager.cs (MemberCache): When creating the cache for an
24393         interface type, add all inherited members.
24394         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
24395         to `out bool used_cache' and documented it.
24396         (TypeManager.MemberLookup): If we already used the cache in the first
24397         iteration, we don't need to do the interfaces check.
24398
24399 2002-08-19  Martin Baulig  <martin@gnome.org>
24400
24401         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
24402         here from IMemberFinder and don't implement this interface anymore.
24403         (DeclSpace.MemberCache): Moved here from IMemberFinder.
24404
24405         * typemanager.cs (IMemberFinder): This interface is now only used by
24406         classes which actually support the member cache.
24407         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
24408         since we only put DeclSpaces into this Hashtable.
24409         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
24410         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
24411
24412 2002-08-16  Martin Baulig  <martin@gnome.org>
24413
24414         * typemanager.cs (ICachingMemberFinder): Removed.
24415         (IMemberFinder.MemberCache): New property.
24416         (TypeManager.FindMembers): Merged this with RealFindMembers().
24417         This function will never be called from TypeManager.MemberLookup()
24418         so we can't use the cache here, just the IMemberFinder.
24419         (TypeManager.MemberLookup_FindMembers): Check whether the
24420         IMemberFinder has a MemberCache and call the cache's FindMembers
24421         function.
24422         (MemberCache): Rewrote larger parts of this yet another time and
24423         cleaned it up a bit.
24424
24425 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
24426
24427         * driver.cs (LoadArgs): Support quoting.
24428
24429         (Usage): Show the CSC-like command line arguments.
24430
24431         Improved a few error messages.
24432
24433 2002-08-15  Martin Baulig  <martin@gnome.org>
24434
24435         * typemanager.cs (IMemberContainer.Type): New property.
24436         (IMemberContainer.IsInterface): New property.
24437
24438         The following changes are conditional to BROKEN_RUNTIME, which is
24439         defined at the top of the file.
24440
24441         * typemanager.cs (MemberCache.MemberCache): Don't add the base
24442         class'es members, but add all members from TypeHandle.ObjectType
24443         if we're an interface.
24444         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
24445         is the current type.
24446         (MemberCache.CacheEntry.Container): Removed this field.
24447         (TypeHandle.GetMembers): Include inherited members.
24448
24449 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24450
24451         * typemanager.cs: fixed compilation and added a comment on a field that
24452         is never used.
24453
24454 2002-08-15  Martin Baulig  <martin@gnome.org>
24455
24456         * class.cs (ConstructorInitializer.Resolve): In the
24457         Expression.MemberLookup call, use the queried_type as
24458         invocation_type.
24459
24460         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
24461         declared' attribute, it's always true.
24462         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
24463         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
24464         temporary wrapper for FindMembers which tells MemberLookup whether
24465         members from the base classes are included in the return value.
24466         This will go away soon.
24467         (TypeManager.MemberLookup): Use this temporary hack here; once the
24468         new MemberCache is completed, we don't need to do the DeclaredOnly
24469         looping here anymore since the MemberCache will take care of this.
24470         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
24471         (MemberCache): When creating the MemberCache for a class, get
24472         members from the current class and all its base classes.
24473         (MemberCache.CacheEntry.Container): New field.  This is a
24474         temporary hack until the Mono runtime is fixed to distinguish
24475         between ReflectedType and DeclaringType.  It allows us to use MCS
24476         with both the MS runtime and the unfixed Mono runtime without
24477         problems and without accecting performance.
24478         (MemberCache.SearchMembers): The DeclaredOnly looping from
24479         TypeManager.MemberLookup is now done here.      
24480
24481 2002-08-14  Martin Baulig  <martin@gnome.org>
24482
24483         * statement.cs (MyStructInfo.MyStructInfo): Don't call
24484         Type.GetFields on dynamic types but get the fields from the
24485         corresponding TypeContainer.
24486         (MyStructInfo.GetStructInfo): Added check for enum types.
24487
24488         * typemanager.cs (MemberList.IsSynchronized): Implemented.
24489         (MemberList.SyncRoot): Implemented.
24490         (TypeManager.FilterWithClosure): No need to check permissions if
24491         closure_start_type == closure_invocation_type, don't crash if
24492         closure_invocation_type is null.
24493
24494 2002-08-13  Martin Baulig  <martin@gnome.org>
24495
24496         Rewrote TypeContainer.FindMembers to use a member cache.  This
24497         gives us a speed increase of about 35% for the self-hosting MCS
24498         build and of about 15-20% for the class libs (both on GNU/Linux).
24499
24500         * report.cs (Timer): New class to get enhanced profiling.  This
24501         whole class is "TIMER" conditional since it remarkably slows down
24502         compilation speed.
24503
24504         * class.cs (MemberList): New class.  This is an IList wrapper
24505         which we're now using instead of passing MemberInfo[]'s around to
24506         avoid copying this array unnecessarily.
24507         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
24508         (ICachingMemberFinder, IMemberContainer): New interface.
24509         (TypeManager.FilterWithClosure): If `criteria' is null, the name
24510         has already been checked, otherwise use it for the name comparision.
24511         (TypeManager.FindMembers): Renamed to RealMemberFinder and
24512         provided wrapper which tries to use ICachingMemberFinder.FindMembers
24513         if possible.  Returns a MemberList, not a MemberInfo [].
24514         (TypeHandle): New class, implements IMemberContainer.  We create
24515         one instance of this class per type, it contains a MemberCache
24516         which is used to do the member lookups.
24517         (MemberCache): New class.  Each instance of this class contains
24518         all members of a type and a name-based hash table.
24519         (MemberCache.FindMembers): This is our new member lookup
24520         function.  First, it looks up all members of the requested name in
24521         the hash table.  Then, it walks this list and sorts out all
24522         applicable members and returns them.
24523
24524 2002-08-13  Martin Baulig  <martin@gnome.org>
24525
24526         In addition to a nice code cleanup, this gives us a performance
24527         increase of about 1.4% on GNU/Linux - not much, but it's already
24528         half a second for the self-hosting MCS compilation.
24529
24530         * typemanager.cs (IMemberFinder): New interface.  It is used by
24531         TypeManager.FindMembers to call FindMembers on a TypeContainer,
24532         Enum, Delegate or Interface.
24533         (TypeManager.finder_to_member_finder): New PtrHashtable.
24534         (TypeManager.finder_to_container): Removed.
24535         (TypeManager.finder_to_delegate): Removed.
24536         (TypeManager.finder_to_interface): Removed.
24537         (TypeManager.finder_to_enum): Removed.
24538
24539         * interface.cs (Interface): Implement IMemberFinder.
24540
24541         * delegate.cs (Delegate): Implement IMemberFinder.
24542
24543         * enum.cs (Enum): Implement IMemberFinder.
24544
24545         * class.cs (TypeContainer): Implement IMemberFinder.
24546
24547 2002-08-12  Martin Baulig  <martin@gnome.org>
24548
24549         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
24550
24551 2002-08-12  Martin Baulig  <martin@gnome.org>
24552
24553         * ecore.cs (ITypeExpression): New interface for expressions which
24554         resolve to a type.
24555         (TypeExpression): Renamed to TypeLookupExpression.
24556         (Expression.DoResolve): If we're doing a types-only lookup, the
24557         expression must implement the ITypeExpression interface and we
24558         call DoResolveType() on it.
24559         (SimpleName): Implement the new ITypeExpression interface.
24560         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
24561         hack, the situation that we're only looking up types can't happen
24562         anymore when this method is called.  Moved the type lookup code to
24563         DoResolveType() and call it.
24564         (SimpleName.DoResolveType): This ITypeExpression interface method
24565         is now doing the types-only lookup.
24566         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
24567         (ResolveFlags): Added MaskExprClass.
24568
24569         * expression.cs (MemberAccess): Implement the ITypeExpression
24570         interface.
24571         (MemberAccess.DoResolve): Added support for a types-only lookup
24572         when we're called via ITypeExpression.DoResolveType().
24573         (ComposedCast): Implement the ITypeExpression interface.
24574
24575         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
24576         Expression.Resolve() with ResolveFlags.Type instead.
24577
24578 2002-08-12  Martin Baulig  <martin@gnome.org>
24579
24580         * interface.cs (Interface.Define): Apply attributes.
24581
24582         * attribute.cs (Attribute.ApplyAttributes): Added support for
24583         interface attributes.
24584
24585 2002-08-11  Martin Baulig  <martin@gnome.org>
24586
24587         * statement.cs (Block.Emit): Only check the "this" variable if we
24588         do not always throw an exception.
24589
24590         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
24591         whether the property has a set accessor.
24592
24593 2002-08-11  Martin Baulig  <martin@gnome.org>
24594
24595         Added control flow analysis support for structs.
24596
24597         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
24598         with control flow analysis turned off.
24599         (IVariable): New interface.
24600         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
24601         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
24602         (FieldExpr.DoResolve): Resolve the instance expression with flow
24603         analysis turned off and do the definite assignment check after the
24604         resolving when we know what the expression will resolve to.
24605
24606         * expression.cs (LocalVariableReference, ParameterReference):
24607         Implement the new IVariable interface, only call the flow analysis
24608         code if ec.DoFlowAnalysis is true.
24609         (This): Added constructor which takes a Block argument.  Implement
24610         the new IVariable interface.
24611         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
24612         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
24613         This does the definite assignment checks for struct members.
24614
24615         * class.cs (Constructor.Emit): If this is a non-static `struct'
24616         constructor which doesn't have any initializer, call
24617         Block.AddThisVariable() to tell the flow analysis code that all
24618         struct elements must be initialized before control returns from
24619         the constructor.
24620
24621         * statement.cs (MyStructInfo): New public class.
24622         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
24623         argument to this indexer.  If non-zero, check an individual struct
24624         member, not the whole struct.
24625         (FlowBranching.CheckOutParameters): Check struct members.
24626         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
24627         overloaded versions of these methods which take an additional
24628         `int field_idx' argument to check struct members.
24629         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
24630         overloaded versions of these methods which take an additional
24631         `string field_name' argument to check struct member.s
24632         (VariableInfo): Implement the IVariable interface.
24633         (VariableInfo.StructInfo): New public property.  Returns the
24634         MyStructInfo instance of the variable if it's a struct or null.
24635         (Block.AddThisVariable): New public method.  This is called from
24636         Constructor.Emit() for non-static `struct' constructor which do
24637         not have any initializer.  It creates a special variable for the
24638         "this" instance variable which will be checked by the flow
24639         analysis code to ensure that all of the struct's fields are
24640         initialized before control returns from the constructor.
24641         (UsageVector): Added support for struct members.  If a
24642         variable/parameter is a struct with N members, we reserve a slot
24643         in the usage vector for each member.  A struct is considered fully
24644         initialized if either the struct itself (slot 0) or all its
24645         members are initialized.
24646
24647 2002-08-08  Martin Baulig  <martin@gnome.org>
24648
24649         * driver.cs (Driver.MainDriver): Only report an error CS5001
24650         if there were no compilation errors.
24651
24652         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
24653         `UnsafeContext' property to determine whether the parent is in
24654         unsafe context rather than checking the parent's ModFlags:
24655         classes nested in an unsafe class are unsafe as well.
24656
24657 2002-08-08  Martin Baulig  <martin@gnome.org>
24658
24659         * statement.cs (UsageVector.MergeChildren): Distinguish between
24660         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
24661         we return.  Added test17() and test18() to test-154.cs.
24662
24663 2002-08-08  Martin Baulig  <martin@gnome.org>
24664
24665         * typemanager.cs (TypeManager.FilterWithClosure): If we have
24666         Family access, make sure the invoking type isn't a subclass of the
24667         queried type (that'd be a CS1540).
24668
24669         * ecore.cs (Expression.MemberLookup): Added overloaded version of
24670         this method which takes an additional `Type invocation_type'.
24671
24672         * expression.cs (BaseAccess.DoResolve): Use the base type as
24673         invocation and query type.
24674         (MemberAccess.DoResolve): If the lookup failed and we're about to
24675         report a CS0122, try a lookup with the ec.ContainerType - if this
24676         succeeds, we must report a CS1540.
24677
24678 2002-08-08  Martin Baulig  <martin@gnome.org>
24679
24680         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
24681         (MethodGroupExpr): Implement the IMemberExpr interface.
24682
24683         * expression (MemberAccess.ResolveMemberAccess): No need to have
24684         any special code for MethodGroupExprs anymore, they're now
24685         IMemberExprs.   
24686
24687 2002-08-08  Martin Baulig  <martin@gnome.org>
24688
24689         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
24690         Family, FamANDAssem and FamORAssem permissions.
24691         (TypeManager.IsSubclassOrNestedChildOf): New public method.
24692
24693 2002-08-08  Martin Baulig  <martin@gnome.org>
24694
24695         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
24696         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
24697         or loop block.
24698
24699 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
24700
24701         * driver.cs: implemented /resource option to embed managed resources.
24702
24703 2002-08-07  Martin Baulig  <martin@gnome.org>
24704
24705         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
24706         (FieldBase.HasFieldInitializer): New public property.
24707         (FieldBase.GetInitializerExpression): New public method.  Resolves and
24708         returns the field initializer and makes sure it is only resolved once.
24709         (TypeContainer.EmitFieldInitializers): Call
24710         FieldBase.GetInitializerExpression to get the initializer, this ensures
24711         that it isn't resolved multiple times.
24712
24713         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
24714         the resolving process (SimpleName/MemberLookup) that we're currently
24715         emitting a field initializer (which must not access any instance members,
24716         this is an error CS0236).
24717
24718         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
24719         argument, if the `IsFieldInitializer' flag is set, we must report and
24720         error CS0236 and not an error CS0120.   
24721
24722 2002-08-07  Martin Baulig  <martin@gnome.org>
24723
24724         * ecore.cs (IMemberExpr): New public interface.
24725         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
24726         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
24727         if the expression is an IMemberExpr.
24728
24729         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
24730         to be null, implicitly default to `this' if we're non-static in
24731         this case.  Simplified the code a lot by using the new IMemberExpr
24732         interface.  Also fixed bug #28176 here.
24733
24734 2002-08-06  Martin Baulig  <martin@gnome.org>
24735
24736         * cs-parser.jay (SimpleLookup): Removed.  We need to create
24737         ParameterReferences during semantic analysis so that we can do a
24738         type-only search when resolving Cast, TypeOf and SizeOf.
24739         (block): Pass the `current_local_parameters' to the Block's
24740         constructor.
24741
24742         * class.cs (ConstructorInitializer): Added `Parameters parameters'
24743         argument to the constructor.
24744         (ConstructorInitializer.Resolve): Create a temporary implicit
24745         block with the parameters.
24746
24747         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
24748         references here if we aren't doing a type-only search.
24749
24750         * statement.cs (Block): Added constructor which takes a
24751         `Parameters parameters' argument.
24752         (Block.Parameters): New public property.
24753
24754         * support.cs (InternalParameters.Parameters): Renamed `parameters'
24755         to `Parameters' and made it public readonly.
24756
24757 2002-08-06  Martin Baulig  <martin@gnome.org>
24758
24759         * ecore.cs (Expression.Warning): Made this public as well.
24760
24761         * report.cs (Report.Debug): Print the contents of collections.
24762
24763 2002-08-06  Martin Baulig  <martin@gnome.org>
24764
24765         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
24766         used to tell Resolve() which kinds of expressions it may return.
24767         (Expression.Resolve): Added overloaded version of this method which
24768         takes a `ResolveFlags flags' argument.  This can be used to tell
24769         Resolve() which kinds of expressions it may return.  Reports a
24770         CS0118 on error.
24771         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
24772         ResolveFlags.SimpleName.
24773         (Expression.Error118): Added overloaded version of this method which
24774         takes a `ResolveFlags flags' argument.  It uses the flags to determine
24775         which kinds of expressions are allowed.
24776
24777         * expression.cs (Argument.ResolveMethodGroup): New public method.
24778         Resolves an argument, but allows a MethodGroup to be returned.
24779         This is used when invoking a delegate.
24780
24781         * TODO: Updated a bit.
24782
24783 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24784
24785         Fixed compilation with csc.
24786
24787         * ecore.cs: Expression.Error made public. Is this correct? Should
24788         Warning be made public too?
24789
24790         * expression.cs: use ea.Location instead of ea.loc.
24791         [FIXME:  Filed as bug #28607: MCS must report these errors.]
24792
24793 2002-08-06  Martin Baulig  <martin@gnome.org>
24794
24795         * ecore.cs (Expression.loc): Moved the location here instead of
24796         duplicating it in all derived classes.
24797         (Expression.Location): New public property.
24798         (Expression.Error, Expression.Warning): Made them non-static and
24799         removed the location argument.
24800         (Expression.Warning): Added overloaded version which takes an
24801         `int level' argument.
24802         (Expression.Error118): Make this non-static and removed the
24803         expression and location arguments.
24804         (TypeExpr): Added location argument to the constructor.
24805
24806         * expression.cs (StaticCallExpr): Added location argument to
24807         the constructor.
24808         (Indirection, PointerArithmetic): Likewise.
24809         (CheckedExpr, UnCheckedExpr): Likewise.
24810         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
24811         (StringPtr): Likewise.
24812
24813
24814 2002-08-05  Martin Baulig  <martin@gnome.org>
24815
24816         * expression.cs (BaseAccess.DoResolve): Actually report errors.
24817
24818         * assign.cs (Assign.DoResolve): Check whether the source
24819         expression is a value or variable.
24820
24821         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
24822         while resolving the corresponding blocks.
24823
24824         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
24825         an error, don't silently return null.
24826
24827         * statement.cs (Block.AddVariable): Do the error reporting here
24828         and distinguish between CS0128 and CS0136.
24829         (Block.DoResolve): Report all unused labels (warning CS0164).
24830         (LabeledStatement): Pass the location to the constructor.
24831         (LabeledStatement.HasBeenReferenced): New property.
24832         (LabeledStatement.Resolve): Set it to true here.
24833
24834         * statement.cs (Return.Emit): Return success even after reporting
24835         a type mismatch error (CS0126 or CS0127), this is what csc does and
24836         it avoids confusing the users with any consecutive errors.
24837
24838 2002-08-05  Martin Baulig  <martin@gnome.org>
24839
24840         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
24841
24842         * const.cs (Const.LookupConstantValue): Catch circular definitions.
24843
24844         * expression.cs (MemberAccess.DoResolve): Silently return if an
24845         error has already been reported.
24846
24847         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
24848         error has already been reported.
24849
24850 2002-08-05  Martin Baulig  <martin@gnome.org>
24851
24852         * statement.cs (UsageVector): Only initialize the `parameters'
24853         vector if we actually have any "out" parameters.
24854
24855 2002-08-05  Martin Baulig  <martin@gnome.org>
24856
24857         * expression.cs (Binary.ResolveOperator): When combining delegates,
24858         they must have the same type.
24859
24860 2002-08-05  Martin Baulig  <martin@gnome.org>
24861
24862         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
24863         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
24864         work with the ms runtime and we also don't need it: if we're a
24865         PropertyBuilder and not in the `indexer_arguments' hash, then we
24866         are a property and not an indexer.
24867
24868         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
24869         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
24870         since the latter one doesn't work with the ms runtime.
24871
24872 2002-08-03  Martin Baulig  <martin@gnome.org>
24873
24874         Fixed bugs #27998 and #22735.
24875
24876         * class.cs (Method.IsOperator): New public field.
24877         (Method.CheckBase): Report CS0111 if there's already a method
24878         with the same parameters in the current class.  Report CS0508 when
24879         attempting to change the return type of an inherited method.
24880         (MethodData.Emit): Report CS0179 if a method doesn't have a body
24881         and it's not marked abstract or extern.
24882         (PropertyBase): New abstract base class for Property and Indexer.
24883         (PropertyBase.CheckBase): Moved here from Property and made it work
24884         for indexers.
24885         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
24886         the same so we can reuse it there.
24887         (Property, Indexer): Derive from PropertyBase.
24888         (MethodSignature.inheritable_property_signature_filter): New delegate
24889         to find properties and indexers.
24890
24891         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
24892         argument and improved error reporting.
24893
24894         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
24895         EmptyReadOnlyParameters and made it a property.
24896
24897         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
24898         version of this method which takes a `PropertyInfo indexer'.
24899         (TypeManager.RegisterIndexer): New method.
24900
24901         * class.cs: Added myself as author of this file :-)
24902
24903 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24904
24905         * class.cs: fixed compilation on windoze.
24906
24907 2002-08-03  Martin Baulig  <martin@gnome.org>
24908
24909         * interface.cs (Interface.GetInterfaceBases): Check whether all
24910         base interfaces are at least as accessible than the current one.
24911
24912         * class.cs (TypeContainer.GetClassBases): Check whether base types
24913         are at least as accessible than the current type.
24914         (TypeContainer.AsAccessible): Implemented and made non-static.
24915         (MemberBase.CheckParameters): Report errors if the accessibility
24916         checks fail.
24917
24918         * delegate.cs (Delegate.Delegate): The default visibility is
24919         internal for top-level types and private for nested types.
24920         (Delegate.Define): Report errors if the accessibility checks fail.
24921
24922         * enum.cs (Enum.Enum): The default visibility is internal for
24923         top-level types and private for nested types.
24924         (Enum.DefineType): Compute the correct visibility.
24925
24926         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
24927         function which takes a `bool is_toplevel' instead of a TypeContainer.
24928
24929         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
24930         builtin type.
24931
24932 2002-08-02  Martin Baulig  <martin@gnome.org>
24933
24934         * expression.cs (LocalVariableReferenc): Added constructor which
24935         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
24936         (LocalVariableReference.IsReadOnly): New property.
24937         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
24938         variable is readonly, use our own readonly flag to do this; you can
24939         use the new constructor to get a writable reference to a read-only
24940         variable.
24941
24942         * cs-parser.jay (foreach_statement, using_statement): Get a writable
24943         reference to the local variable.
24944
24945 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
24946
24947         * rootcontext.cs (ResolveCore): Also include System.Exception
24948
24949         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
24950         we reach an EmptyStatement.
24951
24952         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
24953         is also fine.
24954
24955         * expression.cs (Binary.ResolveOperator): Check error result in
24956         two places.
24957
24958         use brtrue/brfalse directly and avoid compares to null.
24959
24960 2002-08-02  Martin Baulig  <martin@gnome.org>
24961
24962         * class.cs (TypeContainer.Define): Define all nested interfaces here.
24963         Fixes bug #28407, added test-155.cs.
24964
24965 2002-08-01  Martin Baulig  <martin@gnome.org>
24966
24967         * class.cs (Event.EmitDefaultMethod): Make this work with static
24968         events.  Fixes #28311, added verify-3.cs.
24969
24970 2002-08-01  Martin Baulig  <martin@gnome.org>
24971
24972         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
24973         `is_disposable' fields.
24974         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
24975         `hm.is_disposable' if we're using the collection pattern.
24976         (Foreach.EmitCollectionForeach): Use the correct type for the
24977         enumerator's local variable, only emit the try/finally block if
24978         necessary (fixes #27713).
24979
24980 2002-08-01  Martin Baulig  <martin@gnome.org>
24981
24982         * ecore.cs (Expression.report118): Renamed to Error118 and made
24983         it public static.
24984
24985         * statement.cs (Throw.Resolve): Check whether the expression is of
24986         the correct type (CS0118) and whether the type derives from
24987         System.Exception (CS0155).
24988         (Catch.Resolve): New method.  Do the type lookup here and check
24989         whether it derives from System.Exception (CS0155).
24990         (Catch.CatchType, Catch.IsGeneral): New public properties.
24991
24992         * typemanager.cs (TypeManager.exception_type): Added.
24993
24994 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
24995
24996         * driver.cs: Updated About function.
24997
24998 2002-07-31  Martin Baulig  <martin@gnome.org>
24999
25000         Implemented Control Flow Analysis.
25001
25002         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
25003         (EmitContext.CurrentBranching): Added.
25004         (EmitContext.StartFlowBranching): Added.
25005         (EmitContext.EndFlowBranching): Added.
25006         (EmitContext.KillFlowBranching): Added.
25007         (EmitContext.IsVariableAssigned): Added.
25008         (EmitContext.SetVariableAssigned): Added.
25009         (EmitContext.IsParameterAssigned): Added.
25010         (EmitContext.SetParameterAssigned): Added.
25011         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
25012         Added control flow analysis stuff here.
25013
25014         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
25015         resolve the expression as lvalue.
25016         (LocalVariableReference.DoResolve): Check whether the variable has
25017         already been assigned.
25018         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
25019         the parameter as assigned here.
25020         (ParameterReference.DoResolve): Check whether the parameter has already
25021         been assigned.
25022         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
25023         expression as lvalue.
25024
25025         * statement.cs (FlowBranching): New class for the flow analysis code.
25026         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
25027         (LabeledStatement.IsDefined): New public property.
25028         (LabeledStatement.AddUsageVector): New public method to tell flow
25029         analyis that the label may be reached via a forward jump.
25030         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
25031         flow analysis.
25032         (VariableInfo.Number): New public field.  This is used by flow analysis
25033         to number all locals of a block.
25034         (Block.CountVariables): New public property.  This is the number of
25035         local variables in this block (including the locals from all parent
25036         blocks).
25037         (Block.EmitMeta): Number all the variables.
25038
25039         * statement.cs: Added flow analysis support to all classes.
25040
25041 2002-07-31  Martin Baulig  <martin@gnome.org>
25042
25043         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
25044         To get debugging messages, compile mcs with /define:MCS_DEBUG and
25045         then use this argument.
25046
25047         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
25048
25049         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
25050         use this to specify /define options.
25051
25052 2002-07-29  Martin Baulig  <martin@gnome.org>
25053
25054         * statement.cs (Fixed): Moved all code that does variable lookups
25055         and resolvings from Emit to Resolve.
25056
25057         * statement.cs (For): Moved all code that does variable lookups
25058         and resolvings from Emit to Resolve.
25059
25060         * statement.cs (Using): Moved all code that does variable lookups
25061         and resolvings from Emit to Resolve.
25062
25063 2002-07-29  Martin Baulig  <martin@gnome.org>
25064
25065         * attribute.cs (Attribute.Resolve): Explicitly catch a
25066         System.NullReferenceException when creating the
25067         CustromAttributeBuilder and report a different warning message.
25068
25069 2002-07-29  Martin Baulig  <martin@gnome.org>
25070
25071         * support.cs (ParameterData.ParameterName): Added method to
25072         get the name of a parameter.
25073
25074         * typemanager.cs (TypeManager.IsValueType): New public method.
25075
25076 2002-07-29  Martin Baulig  <martin@gnome.org>
25077
25078         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
25079         is a flag which specifies that it's either ref or out.
25080         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
25081         the out parameter to `out Parameter.Modifier mod', also set the
25082         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
25083
25084         * support.cs (InternalParameters.ParameterModifier): Distinguish
25085         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
25086         Parameter.Modifier.ISBYREF flag if it's either ref or out.
25087
25088         * expression.cs (Argument.GetParameterModifier): Distinguish
25089         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
25090         Parameter.Modifier.ISBYREF flag if it's either ref or out.
25091
25092 2002-07-29  Martin Baulig  <martin@gnome.org>
25093
25094         * expression.cs (ParameterReference.ParameterReference): Added
25095         `Location loc' argument to the constructor.
25096
25097         * cs-parser.jay: Pass location to ParameterReference.
25098
25099 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
25100
25101         * statement.cs (Try): Initialize the location.
25102
25103         * cs-parser.jay: pass location to Try.
25104
25105         * expression.cs (Unary.Reduce): Change the prototype to return
25106         whether a constant fold could be performed or not.  The result is
25107         returned in an out parameters.  In the case of Indirection and
25108         AddressOf, we want to perform the full tests.
25109
25110 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
25111
25112         * statement.cs (Statement.Emit): Flag dead code.
25113
25114 2002-07-27  Andrew Birkett  <andy@nobugs.org>
25115
25116         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
25117
25118 2002-07-27  Martin Baulig  <martin@gnome.org>
25119
25120         * class.cs (MethodData.Define): Put back call to
25121         TypeManager.AddMethod(), accidentally commented this out.
25122
25123         * report.cs (Debug): New public method to print debugging information,
25124         this is `[Conditional ("DEBUG")]'.
25125
25126 2002-07-26  Martin Baulig  <martin@gnome.org>
25127
25128         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
25129         (switch_statement): Push the current_block to the switch_stack and
25130         pop it again when we're done with the switch.
25131         (switch_section): The new block is a child of the current_block.
25132         Fixes bug #24007, added test-152.cs.
25133
25134 2002-07-27  Martin Baulig  <martin@gnome.org>
25135
25136         * expression.cs (Invocation.EmitArguments): When calling a varargs
25137         function with only its fixed arguments, we need to pass an empty
25138         array.
25139
25140 2002-07-27  Martin Baulig  <martin@gnome.org>
25141
25142         Mono 0.13 has been released.
25143
25144 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
25145
25146         * driver.cs: Rename --resource to --linkres, because that is what
25147         we do currently, we dont support --resource yet.
25148
25149         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
25150
25151 2002-07-25  Martin Baulig  <martin@gnome.org>
25152
25153         * class.cs (MethodData): New public class.  This is a `method builder'
25154         class for a method or one accessor of a Property/Indexer/Event.
25155         (MethodData.GetMethodFlags): Moved here from MemberBase.
25156         (MethodData.ApplyAttributes): Likewise.
25157         (MethodData.ApplyObsoleteAttribute): Likewise.
25158         (MethodData.ApplyConditionalAttribute): Likewise.
25159         (MethodData.ApplyDllImportAttribute): Likewise.
25160         (MethodData.CheckAbstractAndExternal): Likewise.
25161         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
25162         (MethodData.Emit): Formerly known as Method.Emit().
25163         (MemberBase): Moved everything which was specific to a single
25164         accessor/method to MethodData.
25165         (Method): Create a new MethodData and call Define() and Emit() on it.
25166         (Property, Indexer, Event): Create a new MethodData objects for each
25167         accessor and call Define() and Emit() on them.
25168
25169 2002-07-25  Martin Baulig  <martin@gnome.org>
25170
25171         Made MethodCore derive from MemberBase to reuse the code from there.
25172         MemberBase now also checks for attributes.
25173
25174         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
25175         (MemberBase.GetMethodFlags): Moved here from class Method and marked
25176         as virtual.
25177         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
25178         `CallingConventions cc' and `Attributes opt_attrs' arguments.
25179         (MemberBase.ApplyAttributes): New virtual method; applies the
25180         attributes to a method or accessor.
25181         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
25182         (MemberBase.ApplyConditionalAttribute): Likewise.
25183         (MemberBase.ApplyDllImportAttribute): Likewise.
25184         (MemberBase.CheckAbstractAndExternal): Likewise.
25185         (MethodCore.ParameterTypes): This is now a property instead of a
25186         method, it's initialized from DoDefineParameters().
25187         (MethodCore.ParameterInfo): Removed the set accessor.
25188         (MethodCore.DoDefineParameters): New protected virtual method to
25189         initialize ParameterTypes and ParameterInfo.
25190         (Method.GetReturnType): We can now simply return the MemberType.
25191         (Method.GetMethodFlags): Override the MemberBase version and add
25192         the conditional flags.
25193         (Method.CheckBase): Moved some code from Define() here, call
25194         DoDefineParameters() here.
25195         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
25196         here to avoid some larger code duplication.
25197         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
25198         ensure that abstract and external accessors don't declare a body.
25199
25200         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
25201         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
25202         lookup in the attribute's parent classes, so we need to abort as soon
25203         as we found the first match.
25204         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
25205         the attribute has no arguments.
25206
25207         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
25208         of a Method.
25209
25210 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25211
25212         * cs-parser.jay: reverted previous patch.
25213
25214 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25215
25216         * cs-parser.jay: fixed bug #22119.
25217
25218 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25219
25220         * attribute.cs: fixed compilation. The error was:
25221         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
25222         be assigned to before control leaves the current method."
25223         [FIXME:  Filed as bug #28186: MCS must report this error.]
25224
25225 2002-07-25  Martin Baulig  <martin@gnome.org>
25226
25227         * attribute.cs (Attribute.Conditional_GetConditionName): New static
25228         method to pull the condition name ouf of a Conditional attribute.
25229         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
25230         the obsolete message and error flag out of an Obsolete attribute.
25231
25232         * class.cs (Method.GetMethodFlags): New public method to get the
25233         TypeManager.MethodFlags for this method.
25234         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
25235         private methods.
25236         (Method.Define): Get and apply the Obsolete and Conditional attributes;
25237         if we're overriding a virtual function, set the new private variable
25238         `parent_method'; call the new TypeManager.AddMethod().
25239
25240         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
25241         the MethodBuilder and the Method in a PtrHashtable.
25242         (TypeManager.builder_to_method): Added for this purpose.
25243         (TypeManager.MethodFlags): Added IsObsoleteError.
25244         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
25245         Obsolete and Conditional arguments in MethodBuilders.  If we discover
25246         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
25247         the message from the attribute.
25248
25249 2002-07-24  Martin Baulig  <martin@gnome.org>
25250
25251         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
25252         preprocessor directives, ensure that the argument to #define/#undef is
25253         exactly one identifier and that it's actually an identifier.
25254
25255         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
25256         did not work ....
25257
25258 2002-07-24  Martin Baulig  <martin@gnome.org>
25259
25260         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
25261         initialize it to TypeManager.object_type in the constructor.
25262         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
25263         of the `hm.get_current' method if we're using the collection pattern.
25264         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
25265         for the explicit conversion to make it work when we're using the collection
25266         pattern and the `Current' property has a different return type than `object'.
25267         Fixes #27713.
25268
25269 2002-07-24  Martin Baulig  <martin@gnome.org>
25270
25271         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
25272         does not match, but don't report any errors.  This method is called in
25273         order for all methods in a MethodGroupExpr until a matching method is
25274         found, so we don't want to bail out if the first method doesn't match.
25275         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
25276         matches, report the 123.  Fixes #28070.
25277
25278 2002-07-24  Martin Baulig  <martin@gnome.org>
25279
25280         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
25281         TypeManager.TypeToCoreType() to the top of the method so the
25282         following equality checks will work.  Fixes #28107.
25283
25284 2002-07-24  Martin Baulig  <martin@gnome.org>
25285
25286         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
25287         operand is of type uint, and the other operand is of type sbyte,
25288         short or int, the operands are converted to type long." -
25289         Actually do what this comment already told us.  Fixes bug #28106,
25290         added test-150.cs.
25291
25292 2002-07-24  Martin Baulig  <martin@gnome.org>
25293
25294         * class.cs (MethodBase): New abstract class.  This is now a base
25295         class for Property, Indexer and Event to avoid some code duplication
25296         in their Define() and DefineMethods() methods.
25297         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
25298         generic methods for Define() and DefineMethods().
25299         (FieldBase): Derive from MemberBase, not MemberCore.
25300         (Property): Derive from MemberBase, not MemberCore.
25301         (Property.DefineMethod): Moved all the code from this method to the
25302         new MethodBase.DefineAccessor(), just call it with appropriate
25303         argumetnts.
25304         (Property.Define): Call the new Property.DoDefine(), this does some
25305         sanity checks and we don't need to duplicate the code everywhere.
25306         (Event): Derive from MemberBase, not MemberCore.
25307         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
25308         accessors, this will also make them work with interface events.
25309         (Indexer): Derive from MemberBase, not MemberCore.
25310         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
25311         (Indexer.Define): Use the new MethodBase functions.
25312
25313         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
25314         argument to the constructor.
25315         (Interface.FindMembers): Added support for interface events.
25316         (Interface.PopluateEvent): Implemented.
25317
25318         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
25319
25320 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
25321
25322         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
25323         but this is required to check for a method name being the same as
25324         the containing class.  
25325
25326         Handle this now.
25327
25328 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25329
25330         * interface.cs: initialize variable.
25331
25332 2002-07-23  Martin Baulig  <martin@gnome.org>
25333
25334         Implemented the IndexerName attribute in interfaces.
25335
25336         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
25337         name if this is an explicit interface implementation.
25338         (Indexer.InterfaceIndexerName): New public variable.  If we're
25339         implementing an interface indexer, this is the IndexerName in that
25340         interface.  Otherwise, it's the IndexerName.
25341         (Indexer.DefineMethod): If we're implementing interface indexer,
25342         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
25343         and Pending.ImplementIndexer methods.
25344         (Indexer.Define): Also define the PropertyBuilder if we're
25345         implementing an interface indexer and this is neither an explicit
25346         interface implementation nor do the IndexerName match the one in
25347         the interface.
25348
25349         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
25350         If a method is defined here, then we always need to create a proxy
25351         for it.  This is used when implementing interface indexers.
25352         (Pending.IsInterfaceIndexer): New public method.
25353         (Pending.ImplementIndexer): New public method.
25354         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
25355         This is used when implementing interface indexers to define a proxy
25356         if necessary.
25357         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
25358         define a proxy if necessary.
25359
25360         * interface.cs (Interface.IndexerName): New public variable.
25361         (Interface.PopulateIndexer): Set the IndexerName.
25362         (Interface.DefineIndexers): New private method.  Populate all the
25363         indexers and make sure their IndexerNames match.
25364
25365         * typemanager.cs (IndexerPropertyName): Added support for interface
25366         indexers.
25367
25368 2002-07-22  Martin Baulig  <martin@gnome.org>
25369
25370         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
25371         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
25372         ret if HasReturnLabel.
25373         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
25374         variables.
25375
25376         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
25377         and set the ec.LoopBeginTryCatchLevel.
25378         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
25379         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
25380         the current ec.TryCatchLevel, the branch goes out of an exception
25381         block.  In this case, we need to use Leave and not Br.
25382
25383 2002-07-22  Martin Baulig  <martin@gnome.org>
25384
25385         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
25386         block unless the block does not always return or it is contained in
25387         another try { ... } catch { ... } block.  Fixes bug #26506.
25388         Added verify-1.cs to the test suite.
25389
25390 2002-07-22  Martin Baulig  <martin@gnome.org>
25391
25392         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
25393         then we do not always return.  Fixes bug #24985.
25394
25395 2002-07-22  Martin Baulig  <martin@gnome.org>
25396
25397         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
25398         lookup on a per-class level; ie. walk up the class hierarchy until we
25399         found at least one applicable method, then choose the best among them.
25400         Fixes bug #24463 and test-29.cs.
25401
25402 2002-07-22  Martin Baulig  <martin@gnome.org>
25403
25404         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
25405         return types of the methods.  The return type is not part of the
25406         signature and we must not check it to make the `new' modifier work.
25407         Fixes bug #27999, also added test-147.cs.
25408         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
25409
25410         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
25411         on the method's return type.
25412
25413 2002-07-21  Martin Baulig  <martin@gnome.org>
25414
25415         * assign.cs: Make this work if the rightmost source is a constant and
25416         we need to do an implicit type conversion.  Also adding a few more tests
25417         to test-38.cs which should have caught this.
25418
25419         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
25420         target in the makefile for this.  The makefile.gnu is primarily intended
25421         for end-users who don't want to debug the compiler.
25422
25423 2002-07-21  Martin Baulig  <martin@gnome.org>
25424
25425         * assign.cs: Improved the Assign class so it can now handle embedded
25426         assignments (X = Y = Z = something).  As a side-effect this'll now also
25427         consume less local variables.  test-38.cs now passes with MCS, added
25428         a few new test cases to that test.
25429
25430 2002-07-20  Martin Baulig  <martin@gnome.org>
25431
25432         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
25433         instructions.  Fixes bug #27977, also added test-146.cs.
25434
25435 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25436
25437         * cs-tokenizer.cs: fixed getHex ().
25438
25439 2002-07-19  Martin Baulig  <martin@gnome.org>
25440
25441         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
25442         not Type.GetType() to lookup the array type.  This is needed when
25443         we're constructing an array of a user-defined type.
25444         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
25445         single-dimensional arrays, but also for single-dimensial arrays of
25446         type decimal.
25447
25448 2002-07-19  Martin Baulig  <martin@gnome.org>
25449
25450         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
25451         this function is called, it's not allowed to share LocalBuilders
25452         among ILGenerators.
25453
25454 2002-07-19  Martin Baulig  <martin@gnome.org>
25455
25456         * expression.cs (Argument.Resolve): Report an error 118 when trying
25457         to pass a type as argument.
25458
25459 2002-07-18  Martin Baulig  <martin@gnome.org>
25460
25461         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
25462         Conv_R_Un for the signed `long' type.
25463
25464 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
25465
25466         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
25467         `expr' for the temporary result, as that will fail if we do
25468         multiple resolves on the same expression.
25469
25470 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
25471
25472         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
25473         ec.TypeContainer for looking up aliases. 
25474
25475         * class.cs (TypeContainer): Remove LookupAlias from here.
25476
25477         * decl.cs (DeclSpace); Move here.
25478
25479 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
25480
25481         * class.cs (FindMembers): Only call filter if the constructor
25482         bulider is not null.
25483
25484         Also handle delegates in `NestedTypes' now.  Now we will perform
25485         type lookups using the standard resolution process.  This also
25486         fixes a bug.
25487
25488         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
25489         This uses Expressions (the limited kind that can be parsed by the
25490         tree) instead of strings.
25491
25492         * expression.cs (ComposedCast.ToString): Implement, used to flag
25493         errors since now we have to render expressions.
25494
25495         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
25496         FormArrayType. 
25497
25498         * ecore.cs (SimpleName.ToString): ditto.
25499
25500         * cs-parser.jay: Instead of using strings to assemble types, use
25501         Expressions to assemble the type (using SimpleName, ComposedCast,
25502         MemberAccess).  This should fix the type lookups in declarations,
25503         because we were using a different code path for this.
25504
25505         * statement.cs (Block.Resolve): Continue processing statements
25506         even when there is an error.
25507
25508 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
25509
25510         * class.cs (Event.Define): Also remove the `remove' method from
25511         the list of pending items.
25512
25513         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
25514         generate more compact code. 
25515
25516 2002-07-17  Martin Baulig  <martin@gnome.org>
25517
25518         * const.cs (Const.LookupConstantValue): Add support for constant
25519         `unchecked' and `checked' expressions.
25520         Also adding test case test-140.cs for this.
25521
25522 2002-07-17  Martin Baulig  <martin@gnome.org>
25523
25524         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
25525         check whether mi.ReturnType implements the IEnumerator interface; the
25526         `==' and the IsAssignableFrom() will fail in this situation.
25527
25528 2002-07-16  Ravi Pratap  <ravi@ximian.com>
25529
25530         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
25531         here too.
25532
25533 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25534
25535         * expression.cs: fixed bug #27811.
25536
25537 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
25538
25539         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
25540         Molaro: when we are a ref, the value already contains a pointer
25541         value, do not take the address of it.
25542
25543 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
25544         * removed mb-parser.jay and mb-tokenizer.cs
25545
25546 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
25547
25548         * expression.cs: check against the building corlib void type.
25549
25550 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
25551
25552         * ecore.cs: fix for valuetype static readonly fields: when 
25553         initializing them, we need their address, not the address of a copy.
25554
25555 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
25556
25557         * typemanager.cs: register also enum_type in corlib.
25558
25559 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
25560
25561         * class.cs: allow calling this (but not base) initializers in structs.
25562
25563 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
25564
25565         * ecore.cs: make sure we compare against the building base types
25566         in GetTypeSize ().
25567
25568 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
25569
25570         * typemanager.cs: fix TypeToCoreType() to handle void and object
25571         (corlib gets no more typerefs after this change).
25572
25573 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
25574
25575         * expression.cs (ArrayCreation.EmitArrayArguments): use
25576         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
25577
25578         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
25579         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
25580         array indexes, the runtime actually forbids them.
25581
25582         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
25583         for array arguments here.
25584
25585         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
25586         instead of the default for ValueTypes.
25587
25588         (New.DoEmit): Use IsValueType instead of
25589         IsSubclassOf (value_type)
25590         (New.DoResolve): ditto.
25591         (Invocation.EmitCall): ditto.
25592
25593         * assign.cs (Assign): ditto.
25594
25595         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
25596         Statements *are* currently doing part of their resolution during
25597         Emit.  
25598
25599         Expressions do always resolve during resolve, but statements are
25600         only required to propagate resolution to their children.
25601
25602 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
25603
25604         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
25605
25606         (LoadAssembly): Do not add the dll if it is already specified
25607
25608         (MainDriver): Add the System directory to the link path at the end,
25609         after all the other -L arguments. 
25610
25611         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
25612         wrong opcode for loading bytes and bools (ldelem.i1 instead of
25613         ldelem.u1) and using the opposite for sbytes.
25614
25615         This fixes Digger, and we can finally run it.
25616
25617         * driver.cs (UnixParseOption): Move the option parsing here.  
25618         (CSCParseOption): Implement CSC-like parsing of options.
25619
25620         We now support both modes of operation, the old Unix way, and the
25621         new CSC-like way.  This should help those who wanted to make cross
25622         platform makefiles.
25623
25624         The only thing broken is that /r:, /reference: and /lib: are not
25625         implemented, because I want to make those have the same semantics
25626         as the CSC compiler has, and kill once and for all the confussion
25627         around this.   Will be doing this tomorrow.
25628
25629         * statement.cs (Unsafe.Resolve): The state is checked during
25630         resolve, not emit, so we have to set the flags for IsUnsfe here.
25631
25632 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
25633
25634         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
25635         not catch the Error_ObjectRefRequired in SimpleName (as it is
25636         possible to have a class/instance variable name that later gets
25637         deambiguated), we have to check this here.      
25638
25639 2002-07-10  Ravi Pratap  <ravi@ximian.com>
25640
25641         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
25642         make static and put into Expression.
25643
25644         (Event.Define): Register the private field of the event with the 
25645         TypeManager so that GetFieldFromEvent can get at it.
25646
25647         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
25648         keep track of the private field associated with an event which
25649         has no accessors.
25650
25651         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
25652         private field.
25653
25654         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
25655
25656 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
25657
25658         * expression.cs (Binary.EmitBranchable): this routine emits the
25659         Binary expression in a branchable context.  This basically means:
25660         we need to branch somewhere, not just get the value on the stack.
25661
25662         This works together with Statement.EmitBoolExpression.
25663
25664         * statement.cs (Statement.EmitBoolExpression): Use
25665         EmitBranchable. 
25666
25667 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
25668
25669         * statement.cs (For): Reduce the number of jumps in loops.
25670
25671         (For): Implement loop inversion for the For statement.
25672
25673         (Break): We can be breaking out of a Try/Catch controlled section
25674         (foreach might have an implicit try/catch clause), so we need to
25675         use Leave instead of Br.
25676
25677         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
25678         now).  If the instace expression supports IMemoryLocation, we use
25679         the AddressOf method from the IMemoryLocation to extract the
25680         address instead of emitting the instance.
25681
25682         This showed up with `This', as we were emitting the instance
25683         always (Emit) instead of the Address of This.  Particularly
25684         interesting when This is a value type, as we dont want the Emit
25685         effect (which was to load the object).
25686
25687 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
25688
25689         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
25690
25691         * statement.cs (Checked): Set the CheckedState during the resolve
25692         process too, as the ConvCast operations track the checked state on
25693         the resolve process, and not emit.
25694
25695         * cs-parser.jay (namespace_member_declaration): Flag that we have
25696         found a declaration when we do.  This is used to flag error 1529
25697
25698         * driver.cs: Report ok when we display the help only.
25699
25700 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
25701
25702         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
25703
25704 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
25705
25706         * cs-tokenizer.cs (define): We also have to track locally the
25707         defines.  AllDefines is just used for the Conditional Attribute,
25708         but we also need the local defines for the current source code. 
25709
25710 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
25711
25712         * statement.cs (While, For, Do): These loops can exit through a
25713         Break statement, use this information to tell whether the
25714         statement is the last piece of code.
25715
25716         (Break): Flag that we break.
25717
25718         * codegen.cs (EmitContexts): New `Breaks' state variable.
25719
25720 2002-07-03  Martin Baulig  <martin@gnome.org>
25721
25722         * class.cs (TypeContainer.MethodModifiersValid): Allow override
25723         modifiers in method declarations in structs.  Otherwise, you won't
25724         be able to override things like Object.Equals().
25725
25726 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
25727
25728         * class.cs (Method, Property, Indexer): Do not allow the public
25729         modifier to be used in explicit interface implementations.
25730
25731         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
25732         override modifiers in method declarations in structs
25733
25734 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
25735
25736         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
25737         integer or real overflow, report an error
25738
25739 2002-07-02  Martin Baulig  <martin@gnome.org>
25740
25741         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
25742         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
25743         to tell the runtime about our newly created System.Object and
25744         System.ValueType types.
25745
25746 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
25747
25748         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
25749         struct instead of Ldarg/Starg.
25750
25751 2002-07-02  Martin Baulig  <martin@gnome.org>
25752
25753         * expression.cs (Indirection.Indirection): Call
25754         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
25755
25756 2002-07-02  Martin Baulig  <martin@gnome.org>
25757
25758         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
25759         ValueType, call TypeManager.TypeToCoreType() on it.
25760         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
25761         the OpCodes.Newarr argument.
25762
25763 2002-07-02  Martin Baulig  <martin@gnome.org>
25764
25765         * expression.cs (Invocation.EmitCall): When compiling corlib,
25766         replace all calls to the system's System.Array type to calls to
25767         the newly created one.
25768
25769         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
25770         System.Array methods.
25771         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
25772         from the system's System.Array type which must be replaced.
25773
25774 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
25775
25776         * typemanager.cs: load unverifiable_code_ctor so we can build
25777         corlib using the correct type. Avoid using GetTypeCode() with
25778         TypeBuilders.
25779         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
25780         TypeManager.object_type to allow building corlib.
25781
25782 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
25783
25784         * ecore.cs: handle System.Enum separately in LoadFromPtr().
25785
25786 2002-07-01  Martin Baulig  <martin@gnome.org>
25787
25788         * class.cs: Make the last change actually work, we need to check
25789         whether `ifaces != null' to avoid a crash.
25790
25791 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
25792
25793         * class.cs: when we build structs without fields that implement
25794         interfaces, we need to add the interfaces separately, since there is
25795         no API to both set the size and add the interfaces at type creation
25796         time.
25797
25798 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
25799
25800         * expression.cs: the dimension arguments to the array constructors
25801         need to be converted if they are a long.
25802
25803 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
25804
25805         * class.cs: don't emit ldarg.0 if there is no parent constructor
25806         (fixes showstopper for corlib).
25807
25808 2002-06-29  Martin Baulig  <martin@gnome.org>
25809
25810         MCS now compiles corlib on GNU/Linux :-)
25811
25812         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
25813         ie. check for MethodImplOptions.InternalCall.
25814
25815         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
25816         and TypeManager.attribute_type are null, so we must explicitly check
25817         whether parent is not null to find out whether it's an attribute type.
25818         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
25819         and SetBuilder, not only if the property is neither abstract nor external.
25820         This is necessary to set the MethodImplOptions on the accessor methods.
25821         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
25822         SetBuilder, see Property.Emit().
25823
25824         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
25825         populate "System.Object", "System.ValueType" and "System.Attribute" since
25826         they've already been populated from BootCorlib_PopulateCoreTypes().
25827
25828 2002-06-29  Martin Baulig  <martin@gnome.org>
25829
25830         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
25831         is the NullLiteral, we also need to make sure that target_type is not
25832         an enum type.   
25833
25834 2002-06-29  Martin Baulig  <martin@gnome.org>
25835
25836         * rootcontext.cs (RootContext.ResolveCore): We must initialize
25837         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
25838         before calling BootstrapCorlib_ResolveDelegate ().
25839
25840 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25841
25842         * statement.cs: fixed build-breaker. All tests passed ok.
25843
25844 2002-06-27  Martin Baulig  <martin@gnome.org>
25845
25846         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
25847         for System.Decimal when compiling corlib.
25848
25849 2002-06-27  Martin Baulig  <martin@gnome.org>
25850
25851         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
25852         switch blocks which contain nothing but a default clause.
25853
25854 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
25855
25856        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
25857
25858 2002-06-27  Martin Baulig  <martin@gnome.org>
25859
25860         * ecore.cs (PropertyExpr.PropertyExpr): Call
25861         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
25862
25863         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
25864         is already a TypeBuilder.
25865
25866 2002-06-27  Martin Baulig  <martin@gnome.org>
25867
25868         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
25869         `target_type == TypeManager.array_type', not IsAssignableFrom() in
25870         the "from an array-type to System.Array" case.  This makes it work
25871         when compiling corlib.
25872
25873 2002-06-27  Martin Baulig  <martin@gnome.org>
25874
25875         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
25876         non-static PropertyExpr, set its InstanceExpression.  This makes
25877         the `ICollection.Count' property work in System/Array.cs.
25878
25879 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
25880
25881         * driver.cs: Made error handling more consistent.  Errors now
25882         tracked by Report class, so many methods which used to return int
25883         now return void.  Main() now prints success/failure and 
25884         errors/warnings message.
25885
25886         Renamed '--probe' compiler argument to '--expect-error'.  Removed
25887         the magic number return values (123 and 124).  Now, if the
25888         expected error occurs, the compiler exits with success (exit value
25889         0).  If the compilation completes without seeing that particular
25890         error, the compiler exits with failure (exit value 1).  The
25891         makefile in mcs/errors has been changed to handle the new behaviour.
25892
25893         * report.cs: Made 'expected error' number a property and renamed
25894         it from 'Probe' to 'ExpectedError'.
25895
25896         * genericparser.cs: Removed error handling support, since it is
25897         now all done by Report class.
25898
25899         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
25900         class, so parse() no longer returns an int.
25901
25902         * namespace.cs: Use Report.Error instead of GenericParser.error
25903
25904 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
25905
25906         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
25907         TypeContainer.AddOperator): At the front of the list put the
25908         explicit implementations, so they get resolved/defined first. 
25909
25910 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
25911
25912         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
25913         interface type is implemented by this TypeContainer.  Used during
25914         explicit interface implementation.
25915
25916         (Property.Define, Indexer.Define, Method.Define): Validate that
25917         the given interface in the explicit implementation is one of the
25918         base classes for the containing type.
25919
25920         Also if we are explicitly implementing an interface, but there is
25921         no match in the pending implementation table, report an error.
25922
25923         (Property.Define): Only define the property if we are
25924         not explicitly implementing a property from an interface.  Use the
25925         correct name also for those properties (the same CSC uses,
25926         although that is really not needed).
25927
25928         (Property.Emit): Do not emit attributes for explicitly implemented
25929         properties, as there is no TypeBuilder.
25930
25931         (Indexer.Emit): ditto.
25932
25933         Hiding then means that we do not really *implement* a pending
25934         implementation, which makes code fail.
25935
25936 2002-06-22  Martin Baulig  <martin@gnome.org>
25937
25938         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
25939         the return value of Object.GetType().  [FIXME: we need to do this whenever
25940         we get a type back from the reflection library].
25941
25942 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
25943
25944         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
25945
25946 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
25947
25948         * attribute.cs: Return null if we can not look up the type.
25949
25950         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
25951         the interface types found.
25952
25953         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
25954         interface types found.
25955
25956         * typemanager.cs (GetInterfaces): Make this routine returns alll
25957         the interfaces and work around the lame differences between
25958         System.Type and System.Reflection.Emit.TypeBuilder in the results
25959         result for GetInterfaces.
25960
25961         (ExpandInterfaces): Given an array of interface types, expand and
25962         eliminate repeated ocurrences of an interface.  This expands in
25963         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
25964         be IA, IB, IC.
25965
25966 2002-06-21  Martin Baulig  <martin@gnome.org>
25967
25968         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
25969         on System.Enum.
25970
25971 2002-06-21  Martin Baulig  <martin@gnome.org>
25972
25973         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
25974         and called with one of the core types, return the corresponding typebuilder for
25975         that type.
25976
25977         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
25978         element type.
25979
25980 2002-06-21  Martin Baulig  <martin@gnome.org>
25981
25982         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
25983         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
25984         (Expression.ConvertReferenceExplicit): Likewise.
25985
25986         * expression.cs (ElementAccess.DoResolve): Likewise.
25987         (ElementAccess.DoResolveLValue): Likewise.
25988
25989 2002-06-10  Martin Baulig  <martin@gnome.org>
25990
25991         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
25992         add the "value" parameter to the parameter list.
25993
25994         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
25995         to our caller.
25996
25997 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
25998
25999         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
26000         the argument to an int, uint, long or ulong, per the spec.  Also
26001         catch negative constants in array creation.
26002
26003 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
26004
26005         * class.cs: do not allow the same interface to appear twice in
26006         the definition list.
26007
26008 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
26009
26010         * ecore.cs: don't use ldlen with System.Array.
26011
26012 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
26013
26014         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
26015
26016 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
26017
26018         * modifiers.cs: produce correct field attributes for protected
26019         internal. Easy fix so miguel can work on ther harder stuff:-)
26020
26021 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
26022
26023         * pending.cs: New file.  Move the code from class.cs here.
26024         Support clearning the pending flag for all methods (when not doing
26025         explicit interface implementation).
26026
26027 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
26028
26029         * rootcontext.cs: added a couple more types needed to bootstrap.
26030
26031 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
26032
26033         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
26034         constructor in the type, instead of any constructor in the type
26035         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
26036         a bug in the Mono runtime when applying the params attribute). 
26037
26038 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
26039         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
26040
26041 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
26042
26043         * expression.cs (Unary.ResolveOperator): Use TypeManager
26044         to resolve the type.
26045
26046 2002-06-13  Ravi Pratap  <ravi@ximian.com>
26047
26048         * cs-parser.jay (enum_member_declaration): Pass in the attributes
26049         attached.
26050
26051         * enum.cs (AddEnumMember): Add support to store the attributes associated 
26052         with each member too.
26053
26054         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
26055         field builders too - this takes care of the enum member case.
26056
26057 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
26058
26059         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
26060         address-of operator on both value types and pointers.
26061
26062 2002-06-10  Martin Baulig  <martin@gnome.org>
26063
26064         * interface.cs (Interface.PopulateIndexer): Add the indexer's
26065         PropertyBuilder to the `property_builders' list.
26066
26067         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
26068         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
26069         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
26070         find any indexers which are inherited from an interface.
26071
26072 2002-06-09  Martin Baulig  <martin@gnome.org>
26073
26074         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
26075         the same type as the constant if necessary.  There's also a test-130.cs
26076         for this.
26077
26078         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
26079
26080         * typemanager.cs (TypeManager.ChangeType): Previously known as
26081         Enum.ChangeEnumType().
26082
26083 2002-06-09  Martin Baulig  <martin@gnome.org>
26084
26085         * expression.cs (Cast.TryReduce): Added support for consts.
26086
26087 2002-06-08  Ravi Pratap  <ravi@ximian.com>
26088
26089         * class.cs (Accessor): Hold attributes information so we can pass
26090         it along.
26091
26092         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
26093         Modify to pass in attributes attached to the methods.
26094
26095         (add_accessor_declaration, remove_accessor_declaration): Ditto.
26096
26097         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
26098         to handle the Accessor kind :-)
26099
26100         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
26101
26102 2002-06-08  Martin Baulig  <martin@gnome.org>
26103
26104         * expression.cs (Unary.TryReduceNegative): Added support for
26105         ULongConstants.
26106
26107 2002-06-08  Martin Baulig  <martin@gnome.org>
26108
26109         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
26110         name can't be found in the `defined_names' - the caller will do a
26111         MemberLookup in this case and thus find methods in System.Enum
26112         such as Enum.IsDefined().
26113
26114 2002-06-08  Martin Baulig  <martin@gnome.org>
26115
26116         * enum.cs (Enum.ChangeEnumType): This is a custom version of
26117         Convert.ChangeType() which works with TypeBuilder created types.
26118         (Enum.LookupEnumValue, Enum.Define): Use it here.
26119
26120         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
26121         `TypeBuilder.BaseType != null' check.
26122         (TypeContainer.FindMembers): Only lookup parent members if we
26123         actually have a parent.
26124         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
26125         (ConstructorInitializer.Resolve): Likewise.
26126
26127         * interface.cs (Interface.FindMembers): Added
26128         `TypeBuilder.BaseType != null' check.
26129
26130         * rootcontext.cs (RootContext.ResolveCore): Added
26131         "System.Runtime.CompilerServices.IndexerNameAttribute" to
26132         classes_second_stage.
26133
26134         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
26135         debug_type and trace_type when compiling with --nostdlib.       
26136
26137 2002-06-07  Martin Baulig  <martin@gnome.org>
26138
26139         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
26140         (AddField): Set it to true when adding a non-static field.
26141         (DefineType): Use `have_nonstatic_fields' to find out whether we
26142         have non-static fields, not `Fields != null'.
26143
26144 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
26145
26146         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
26147         dereferencing a null on the static-field code path)
26148
26149 2002-05-30  Martin Baulig  <martin@gnome.org>
26150
26151         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
26152         to take command line arguments.  Use reflection to call the new
26153         custom `Initialize' function on the symbol writer and pass it the
26154         command line arguments.
26155
26156         * driver.cs (--debug-args): New command line argument to pass command
26157         line arguments to the symbol writer.
26158
26159 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
26160
26161         * assign.cs (DoResolve): Forgot to do the implicit conversion to
26162         the target type for indexers and properties.  Thanks to Joe for
26163         catching this.
26164
26165 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
26166
26167         * typemanager.cs (MethodFlags): returns the method flags
26168         (Obsolete/ShouldIgnore) that control warning emission and whether
26169         the invocation should be made, or ignored. 
26170
26171         * expression.cs (Invocation.Emit): Remove previous hack, we should
26172         not do this on matching a base type, we should do this based on an attribute
26173
26174         Only emit calls to System.Diagnostics.Debug and
26175         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
26176         on the command line.
26177
26178         * rootcontext.cs: Global settings for tracing and debugging.
26179
26180         * cs-tokenizer.cs (define): New utility function to track
26181         defines.   Set the global settings for TRACE and DEBUG if found.
26182
26183 2002-05-25  Ravi Pratap  <ravi@ximian.com>
26184
26185         * interface.cs (Populate*): Pass in the TypeContainer as well as
26186         the DeclSpace as parameters so that we can create EmitContexts and
26187         then use that to apply attributes etc.
26188
26189         (PopulateMethod, PopulateEvent, PopulateProperty)
26190         (PopulateIndexer): Apply attributes everywhere.
26191
26192         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
26193         etc.
26194
26195         (ApplyAttributes): Update accordingly.
26196
26197         We now apply interface attributes for all members too.
26198
26199 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
26200
26201         * class.cs (Indexer.Define); Correctly check if we are explicit
26202         implementation (instead of checking the Name for a ".", we
26203         directly look up if the InterfaceType was specified).
26204
26205         Delay the creation of the PropertyBuilder.
26206
26207         Only create the PropertyBuilder if we are not an explicit
26208         interface implementation.   This means that explicit interface
26209         implementation members do not participate in regular function
26210         lookups, and hence fixes another major ambiguity problem in
26211         overload resolution (that was the visible effect).
26212
26213         (DefineMethod): Return whether we are doing an interface
26214         implementation. 
26215
26216         * typemanager.cs: Temporary hack until we get attributes in
26217         interfaces (Ravi is working on that) and we get IndexerName
26218         support in interfaces.
26219
26220         * interface.cs: Register the indexers as properties.
26221
26222         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
26223         warning, I have verified that this is a bug in the .NET runtime
26224         (JavaScript suffers of the same problem).
26225
26226         * typemanager.cs (MemberLookup): When looking up members for
26227         interfaces, the parent of an interface is the implicit
26228         System.Object (so we succeed in searches of Object methods in an
26229         interface method invocation.  Example:  IEnumerable x;  x.ToString
26230         ()) 
26231
26232 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
26233
26234         * class.cs (Event): Events should also register if they do
26235         implement the methods that an interface requires.
26236
26237         * typemanager.cs (MemberLookup); use the new GetInterfaces
26238         method. 
26239
26240         (GetInterfaces): The code used to lookup interfaces for a type is
26241         used in more than one place, factor it here. 
26242
26243         * driver.cs: Track the errors at the bottom of the file, we kept
26244         on going.
26245
26246         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
26247         instance if the method we are calling is static!
26248
26249 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
26250
26251         * attribute.cs (ApplyAttributes): Make this function filter out
26252         the IndexerName attribute (as that attribute in reality is never
26253         applied) and return the string constant for the IndexerName
26254         attribute. 
26255
26256         * class.cs (TypeContainer.Emit): Validate that all the indexers
26257         have the same IndexerName attribute, and if so, set the
26258         DefaultName attribute on the class. 
26259
26260         * typemanager.cs: The return value might contain other stuff (not
26261         only methods).  For instance, consider a method with an "Item"
26262         property and an Item method.
26263
26264         * class.cs: If there is a problem with the parameter types,
26265         return. 
26266
26267 2002-05-24  Ravi Pratap  <ravi@ximian.com>
26268
26269         * ecore.cs (ImplicitConversionExists): Wrapper function which also
26270         looks at user defined conversion after making a call to 
26271         StandardConversionExists - we need this for overload resolution.
26272
26273         * expression.cs : Update accordingly the various method calls.
26274
26275         This fixes 2 bugs filed against implicit user defined conversions 
26276
26277 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
26278
26279         * statement.cs: Track the result of the assignment.
26280
26281 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
26282
26283         * expression.cs (MemberAccess): Improved error reporting for
26284         inaccessible members.
26285
26286 2002-05-22  Martin Baulig  <martin@gnome.org>
26287
26288         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
26289         itself with debugging support.
26290
26291 2002-05-22  Martin Baulig  <martin@gnome.org>
26292
26293         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
26294         Removed, this isn't needed anymore.
26295
26296 2002-05-20  Martin Baulig  <martin@gnome.org>
26297
26298         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
26299         be underlying type for an enum.
26300
26301 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
26302
26303         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
26304         that splits out the loading of just the core types.
26305
26306         * rootcontext.cs (ResolveCore): Split the struct resolution in
26307         two, so we can load the enumeration underlying types before any
26308         enums are used.
26309
26310         * expression.cs (Is): Bandaid until we fix properly Switch (see
26311         bug #24985 for details).
26312
26313         * typemanager.cs (ImplementsInterface): The hashtable will contain
26314         a null if there are no interfaces implemented.
26315
26316 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
26317
26318         * cs-parser.jay (indexer_declarator): It is fine to have array
26319         parameters
26320
26321 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
26322
26323         * typemanager.cs: (RegisterBuilder): New function used to register
26324         TypeBuilders that implement interfaces.  Since
26325         TypeBuilder.GetInterfaces (as usual) does not work with lame
26326         Reflection.Emit. 
26327         (AddUserType): register interfaces.
26328
26329         (ImplementsInterface): Use the builder_to_ifaces hash if we are
26330         dealing with TypeBuilder.  Also, arrays are showing up as
26331         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
26332         methods can not be invoked on them!
26333
26334         * ecore.cs (ExplicitReferenceConversionExists): Made public.
26335         (ImplicitReferenceConversionExists): Split out from
26336         StandardConversionExists. 
26337
26338         * expression.cs (As): We were only implementing one of the three
26339         cases for the as operator.  We now implement them all.
26340         (Is): Implement the various other cases for Is as well.
26341
26342         * typemanager.cs (CACHE): New define used to control if we want or
26343         not the FindMembers cache.  Seems to have a negative impact on
26344         performance currently
26345
26346         (MemberLookup): Nested types have full acess to
26347         enclosing type members
26348
26349         Remove code that coped with instance/static returns for events, we
26350         now catch this in RealFindMembers.
26351
26352         (RealFindMembers): only perform static lookup if the instance
26353         lookup did not return a type or an event.  
26354
26355 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
26356
26357         * assign.cs (CompoundAssign): We pass more semantic information
26358         now to Compound Assignments than we did before: now we have all
26359         the information at hand, and now we resolve the target *before* we
26360         do the expression expansion, which allows the "CacheValue" method
26361         to have the effect we intended (before, a [x] += 1 would generate
26362         two differen ArrayAccess expressions from the ElementAccess,
26363         during the resolution process).
26364
26365         (CompoundAssign.DoResolve): Resolve target and original_source here.
26366
26367 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
26368
26369         * expression.cs (ArrayAccess): dropped debugging information. 
26370
26371         * typemanager.cs: Small bug fix: I was always returning i_members,
26372         instead of one of i_members or s_members (depending on which had
26373         the content).
26374
26375         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
26376         method is invoked before any code generation takes place, and it
26377         is a mechanism to inform that the expression will be invoked more
26378         than once, and that the method should use temporary values to
26379         avoid having side effects
26380
26381         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
26382
26383         * ecore.cs (Expression.CacheTemporaries): Provide empty default
26384         implementation.
26385
26386         * expression.cs (Indirection, ArrayAccess): Add support for
26387         CacheTemporaries in these two bad boys. 
26388
26389         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
26390         ldobj or ldind_ref.  
26391         (StoreFromPtr): Handle stobj as well.
26392
26393         * expression.cs (UnaryMutator): Share more code.
26394
26395         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
26396         down: I was not tracking the Filter function as well, which
26397         was affecting the results of the cache.
26398
26399 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
26400
26401         * attribute.cs: Remove the hack to handle the CharSet property on
26402         StructLayouts. 
26403
26404 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
26405
26406         * attribute.cs (DoResolve): More uglyness, we now only try to
26407         resolve the attribute partially, to extract the CharSet
26408         information (only if we are a StructLayout attribute).  Otherwise 
26409
26410         (GetExtraTypeInfo): Add some code to conditionally kill in the
26411         future this.   I am more and more convinced that the .NET
26412         framework has special code to handle the attribute setting on
26413         certain elements.
26414
26415         * expression.cs (IsParamsMethodApplicable): Revert my previous
26416         foreach change here, it was wrong.
26417
26418 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
26419
26420         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
26421         (pp_expr): do not abort on unknown input, just return.
26422         (eval): abort if there are pending chars.
26423
26424         * attribute.cs (Attribute.Resolve): Positional parameters are
26425         optional.  Deal with that case.
26426
26427         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
26428         the Ansi/Unicode/Auto information for the type.
26429
26430         (TypeContainer.DefineType): instantiate the EmitContext here, as
26431         we will be using it during the type definition (to resolve
26432         attributes) and during the emit phase.
26433
26434         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
26435         to pull type information out of the attributes
26436
26437         (Attribute.Resolve): track the constructor builder, and allow for
26438         multiple invocations (structs and classes will use this).
26439
26440         * ecore.cs (MemberLookupFinal): new version with all the
26441         parameters customizable.
26442
26443         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
26444         constructors.  Return if the result value is null (as the error
26445         would have been flagged already by MemberLookupFinal)
26446
26447         Do not allow instances of abstract classes or interfaces to be
26448         created.
26449
26450         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
26451         We have to compare the assembly property here when dealing with
26452         FamANDAssem and Assembly access modifiers, because we might be
26453         creating an assembly from *modules* (that means that we are not
26454         getting TypeBuilders for types defined in other modules that are
26455         part of this assembly).
26456
26457         (Method.Emit): If the method is marked abstract and has a body,
26458         emit an error. 
26459
26460         (TypeContainer.DefineMembers): If both the defined member and the
26461         parent name match are methods, then do not emit any warnings: let
26462         the Method.Define routine take care of flagging warnings.  But if
26463         there is a mismatch (method overrides something else, or method is
26464         overriwritten by something, then emit warning).
26465
26466         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
26467         set to null, this means `do not check for the return type on the
26468         signature'. 
26469
26470         (Method.Define): set the return type for the method signature to
26471         null, so that we get methods with the same name and parameters and
26472         different return types.  This is used to flag warning 114 (you are
26473         hiding a method, and you probably want to use the new/override
26474         keywords instead).
26475
26476         * typemanager.cs (MemberLookup): Implemented proper access
26477         control, closing a long standing set of bug reports.  The problem
26478         was that the Framework only has two bits: Public and NonPublic,
26479         and NonPublic includes private and protected methods, but we need
26480         to enforce the FamANDAssem, FamOrAssem and Family. 
26481
26482 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
26483
26484         * statement.cs (GotoCase): Return true: Ammounts to giving up
26485         knowledge on whether we return or not, and letting the other case
26486         be responsible for it.
26487
26488 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
26489
26490         * driver.cs: Do not load directories for each file processed, only
26491         do it if there is a pattern.
26492
26493         * ecore.cs: Report readonly assigns here as well, as we might have
26494         been resolved only by MemberAccess.
26495
26496         (SimpleName.SimpleNameResolve): Also be useful for LValue
26497         resolution.   We need this to propagate assign to local readonly variables
26498
26499         * typemanager.cs: Use a ptrhashtable for the criteria, because we
26500         do not want to reuse potential criteria memory.
26501
26502         * class.cs (MyEventBuilder): Set reflected_type;
26503
26504         * ecore.cs (Constantify): Added support for constifying bools.
26505
26506         (RootContext.LookupType): Added a cache for values looked up in
26507         the declaration space.
26508
26509         * typemanager.cs (FindMembers): Now is a front-end to
26510         RealFindMembers, and provides a two-level hashtable-based cache to
26511         the request.  
26512
26513         15% performance improvement: from 22.5 to 19.2 seconds.
26514
26515         * expression.cs (IsParamsMethodApplicable): use foreach.
26516         (Invocation.DoResolve): ditto.
26517         (New.DoResolve): ditto.
26518         (ArrayCreation.DoResolve): ditto.
26519
26520         * ecore.cs (FindMostEncompassingType): use foreach.
26521
26522         * delegate.cs (NewDelegate.DoResolve): Use foreach
26523
26524         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
26525         (RemoveMethods): use foreach.
26526
26527         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
26528         nested foreach statements instead of for, and also break out of
26529         the inner loop once a match is found.
26530
26531         (Invocation.OverloadResolve): Use foreach, simplify the code. 
26532
26533 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
26534
26535         * cfold.cs (BinaryFold): During an enumeration evaluation context,
26536         we actually unwrap the expression to allow for extra information
26537         to be extracted. 
26538
26539         * expression.cs: Use Shr_Un on unsigned operations. 
26540
26541 2002-05-08  Ravi Pratap  <ravi@ximian.com>
26542
26543         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
26544         applicable operators was not being considered correctly. This closes
26545         the bug Miguel reported.
26546
26547 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
26548
26549         * attribute.cs: check that the type derives from System.Attribute
26550         and report the correct error in that case (moved the duplicate code to
26551         its own method, too).
26552
26553 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
26554
26555         * attribute.cs: lookup attribute type name as the spec says: first the
26556         bare attribute name and then name + "Attribute" (nant compiles with
26557         mcs after this fix).
26558
26559 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
26560
26561         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
26562         Because of the way we parse things, we should try to see if a
26563         UIntConstant can fit in an integer.
26564
26565 2002-05-07  Ravi Pratap  <ravi@ximian.com>
26566
26567         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
26568         when we are in an explicit context.
26569
26570         (ConvertReferenceExplicit): When converting from Iface type S to Class
26571         T make sure the rules are implemented as an OR.
26572
26573         * parameter.cs (ParameterType): Make it a property for now although the
26574         purpose really isn't anything immediate.
26575
26576         * expression.cs (Is*Applicable): Do better checking on the parameter type
26577         of a ref/out parameter. The ones from the system assemblies are already 
26578         marked with the correct type so we don't need to do any correction.
26579
26580         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
26581         the object type is standard too so include that.
26582
26583 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
26584
26585         * ecore.cs (StandardConversionExists): Augment with missing code:
26586         deal with IntConstant, LongConstants and Enumerations.
26587
26588         * assign.cs: Report the error, instead of failing silently
26589
26590         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
26591         typecontainer that they are declared, because the
26592         typecontainer/namespace will have the list of using clauses that
26593         need to be applied.
26594
26595         Assembly Attributes were escaping the normal registration
26596         mechanism. 
26597
26598         (EmitCode): Apply attributes within an EmitContext that represents
26599         the container they were declared on.
26600
26601         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
26602
26603 2002-05-06  Ravi Pratap  <ravi@ximian.com>
26604
26605         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
26606         Revamp completely - make much cleaner as we now operate only
26607         on a set of Types.
26608
26609         (FindMostSpecificSource, FindMostSpecificTarget): New methods
26610         to implement the logic detailed in the spec more correctly.
26611
26612         (UserDefinedConversion): Update accordingly.
26613
26614 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
26615
26616         * statement.cs: Return flow analysis information up.
26617
26618         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
26619         and the default.
26620
26621         (token): Do not consume an extra character before calling
26622         decimal_digits.
26623
26624 2002-05-06  Piers Haken <piersh@friskit.com>
26625
26626         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
26627
26628 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
26629
26630         * class.cs (Constructor.Emit): Set the IsStatic flag in the
26631         EmitContext during the instance constructor initializer
26632         resolution, to stop access to instance variables.
26633
26634         This is mandated by the spec, last paragraph of the `constructor
26635         initializers' section. 
26636
26637 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
26638
26639         * cs-parser.jay, class.cs (Accessor): new class used to represent
26640         an accessor (get or set).  In the past we used `null' to represent
26641         a missing accessor.  But this is ambiguous because there was no
26642         way to tell in abstract indexers/properties if one of them was
26643         specified.
26644
26645         Now there is a way of addressing that.
26646
26647         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
26648         instead of FindMembers.
26649
26650         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
26651         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
26652
26653         * attribute.cs: Treat indexers and properties as the same in terms
26654         of applying attributes
26655
26656         * ecore.cs (FindMostEncompassedType): Use statically initialized
26657         EmptyExpressions()s like we do elsewhere to avoid creating useless
26658         objects (and we take this out of the tight loop).
26659
26660         (GetConversionOperators): Move the code to extract the actual
26661         operators to a separate routine to clean things up.
26662
26663 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
26664
26665         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
26666         events are always registered FieldBuilders.
26667
26668         * class.cs (FieldBase): New class shared by Fields 
26669
26670         * delegate.cs: If we are a toplevel delegate, use our full name.
26671         If we are a nested delegate, then only use our tail name.
26672
26673 2002-05-02  Ravi Pratap  <ravi@ximian.com>
26674
26675         * expression.cs (IsApplicable): Ensure that we add the "&" to
26676         ref/out types before comparing it with the type of the argument.
26677
26678         (IsParamsMethodApplicable): Ditto.
26679
26680         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
26681         silly me ;-)
26682
26683         * delegate.cs : Handle the case when we have more than one applicable
26684         method. Flag an error only when we finish checking all.
26685
26686 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
26687
26688         * expression.cs: Add support for boolean static initializers.
26689
26690 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
26691
26692         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
26693
26694         * parameter.cs (ComputeParameterTypes,
26695         ComputeAndDefineParameterTypes): Better error handling: now we
26696         clear the `types' cache if we fail during any of the type lookups.
26697         We also return the status code correctly to our caller
26698
26699         * delegate.cs: If we fail to define a delegate, abort the extra
26700         steps. 
26701
26702         * expression.cs (Binary.ResolveOperator): for
26703         operator==(object,object) and operator !=(object, object) we also
26704         have to verify that there is an implicit conversion from one to
26705         the other.
26706
26707         (ArrayAccess.DoResolve): Array Access can operate on
26708         non-variables. 
26709
26710 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
26711
26712         * assign.cs (CompoundAssign): A new class used as a "flag" that
26713         the assignment actually is happening as part of a compound
26714         assignment operator.
26715
26716         During compound assignment, a few new rules exist to enable things
26717         like:
26718
26719         byte b |= 1 + 2
26720
26721         From the spec:
26722
26723         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
26724         to the type of x) if y is implicitly convertible to the type of x,
26725         and the operator is a builtin operator and the return type of the
26726         operator is explicitly convertible to the type of x. 
26727
26728         * rootcontext.cs: Reset warning level to 2.  4 catches various
26729         "interesting" features in mcs, we must clean this up at some
26730         point, but currently am trying to kill other bugs ;-)
26731
26732         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
26733         in container classes as well.  
26734
26735         * expression.cs (Binary.ResolveOperator): Handle string case
26736         before anything else (as operator overloading does emit an error
26737         before doing anything else).
26738
26739         This code could go away when we move to a table driven model, but
26740         i could not come up with a good plan last night.
26741
26742 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
26743
26744         * typemanager.cs (CSharpName): reimplementation using regex.
26745         * class.cs: added null check for fields in Emit
26746         * rootcontext.cs: set warninglevel to 4
26747
26748 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
26749
26750         * typemanager.cs (CSharpName): reimplemented with Lupus
26751         suggestion.
26752
26753 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
26754
26755         * statement.cs (If): correclty implement Resolve, because we were
26756         not catching sem errors in there.  The same process is needed
26757         everywhere else. 
26758         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
26759
26760
26761         (Statement.Warning_DeadCodeFound): Factorize code.
26762         (While): Report dead code here too.
26763
26764         (Statement): Added Resolve virtual method to allow
26765         for resolution split from the emit code.
26766
26767 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
26768
26769         * statement.cs (EmitBoolExpression): No longer try to resolve the
26770         expression here.    
26771         (MakeBoolean): New utility function that resolve, implicitly
26772         converts to boolean and tags the expression. 
26773
26774
26775         (If, Do): Implement dead code elimination.
26776         (While): Implement loop inversion
26777
26778         (Do, While, For, If): Resolve the expression prior to calling our
26779         code generation.
26780
26781 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
26782
26783         * class.cs:
26784           - added method Report28 (warning: program has more than one entry point)
26785           - added method IsEntryPoint, implements paragraph 10.1 of the spec
26786           - modified method Method.Define, the part at the end of the method
26787
26788         * rootcontext.cs: added static public Location EntryPointLocation;
26789           
26790         * ../errors/cs0028.cs : Add test case for the above warning.              
26791
26792         * typemanager.cs:
26793           - modified method CSharpName to allow arrays of primitive type to
26794             be printed nicely (e.g. instead of System.Int32[][] it now prints
26795             int[][])
26796           - added method CSharpSignature: returns the signature of a method
26797             in string format to be used in reporting errors, warnings, etc.
26798
26799         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
26800         with String.Empty.
26801
26802 2002-04-26  Ravi Pratap  <ravi@ximian.com>
26803
26804         * delegate.cs (Define): Fix extremely silly bug where I was
26805         setting the type of the 'object' parameter of the BeginInvoke
26806         method to System.IAsyncResult instead of System.Object ;-)
26807
26808 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
26809
26810         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
26811         here. 
26812
26813         (Constructor.Emit): return if we fail to initialize the
26814         constructor.  Another door closed!  
26815
26816         * expression.cs (New.DoResolve): Improve error message (from -6 to
26817         1501).  Use DeclaredOnly lookup to find the exact constructor.
26818
26819         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
26820         loop.  This is useful.
26821
26822         * cs-parser.jay: Adjust the default parameters so that destructors
26823         have the proper signature.
26824
26825 2002-04-26  Martin Baulig  <martin@gnome.org>
26826
26827         * driver.cs (LoadAssembly): If `assembly' contains any characters
26828         which are only valid in path names and not in assembly names
26829         (currently slash, backslash and point), use Assembly.LoadFrom ()
26830         instead of Assembly.Load () on the `assembly' (before iteration
26831         over the link_paths).
26832
26833 2002-04-26  Martin Baulig  <martin@gnome.org>
26834
26835         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
26836
26837 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
26838
26839         * class.cs (Property): use the new typemanager.MemberLookup
26840
26841         (TypeContainer.MemberLookup): Implement using the
26842         TypeManager.MemberLookup now. 
26843
26844         * typemanager.cs: Make MemberLookup a function of the TypeManager,
26845         and return MemberInfos, so that these can be used without an
26846         EmitContext (what we had before).
26847
26848 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
26849
26850         * expression.cs: Fix the case where the argument to params if the
26851         type of the params.  I omitted handling this before.   Fixed
26852
26853 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
26854
26855         * driver.cs: Call BootCorlib_PopulateCoreType
26856
26857         * class.cs (Property.CheckBase): Check for properties only, not
26858         for all members. 
26859
26860         * interface.cs: Temporary hack: try/catch around the
26861         CustomAttributeBuilder, because I am getting an exception that I
26862         do not understand.
26863
26864         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
26865         types whose definitions are required to be there (attributes are
26866         defined before standard types).
26867
26868         Compute definitions as we boot the various types, as they are used
26869         immediately (value_type class will need object_type, but if we do
26870         not initialize object_type, we will pass a null, which will let
26871         the runtime pick the System.Object from the existing corlib, which
26872         is not what we want).
26873
26874 2002-04-22  Patrik Torstensson <totte@labs2.com>
26875
26876         * cs-tokenizer.cs: fixed a number of trim() issues.
26877
26878 2002-04-22  Ravi Pratap  <ravi@ximian.com>
26879
26880         * expression.cs (Argument.Type): Ensure that we return the correct
26881         type when we have out or ref parameters [in which case we 
26882         append a "&"].
26883
26884 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
26885
26886         * class.cs (Property, Indexer): Allow extern modifier in there. 
26887
26888         * typemanager.cs (InitBaseTypes): Initializes object_type and
26889         value_type, since those will be used early on during the bootstrap
26890         process to compile corlib.
26891
26892         (InitCoreTypes): Move code from here to InitBaseTypes.
26893
26894 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
26895
26896         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
26897         single-dimension arrays as using the ldlen opcode.  
26898
26899         Daniel Lewis discovered this optimization.  
26900
26901         * typemanager.cs: Add signature for System.Array::get_Length
26902
26903 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26904
26905         * statement.cs: report the error when the foreach does not apply to an
26906         array nor a collection.
26907
26908 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
26909
26910         * expression.cs: Add implicit conversions to the operator ~.
26911
26912         * constant.cs (DecimalConstant.Emit): Emit decimal value.
26913
26914         * typemanager.cs: Locate the decimal constructor.
26915
26916 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26917
26918         * attribute.cs: use the new property of TypeOf.
26919         * expression.cs: added 'get' property around typearg.
26920
26921         These changes fix a build breaker reported by NickD. Is this the
26922         correct way to fix?  If not, please, revert my changes and make it
26923         work :-).
26924
26925 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
26926
26927         * attribute.cs: Add support for typeof in attribute invocations.
26928         I am not sure that this is right though.
26929
26930 2002-04-14  Duncan Mak  <duncan@ximian.com>
26931
26932         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
26933         Binary.Operator.Division case.
26934
26935 2002-04-13  Ravi Pratap  <ravi@ximian.com>
26936
26937         * class.cs (DefineType): Ensure that we do a proper check on
26938         attribute types and also register it with the TypeManager.
26939
26940         (TypeContainer.Targets): The default for attribute types is
26941         AttributeTargets.All.
26942
26943         * attribute.cs (ApplyAttributes): Registering the attribute type
26944         is done elsewhere, not when we discover we have a Usage attribute.
26945
26946 2002-04-12  Ravi Pratap  <ravi@ximian.com>
26947
26948         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
26949         and get rid of is_delegate parameter.
26950
26951         * everywhere : update.
26952
26953 2002-04-12  Ravi Pratap  <ravi@ximian.com>
26954
26955         * cs-parser.jay (compilation_unit): Revamp completely to use
26956         some new ideas that I got from Rhys' grammar to solve the problems
26957         with assembly level attributes.
26958
26959         (outer_declaration): New grammar production.
26960
26961         (attribute_sections): Add.
26962
26963         (opt_attributes): Base on attribute_sections
26964
26965         (namespace_declaration): Allow opt_attributes to tackle the case
26966         when we have assembly level attributes - we are clever in this
26967         regard now ;-)
26968
26969         * attribute.cs (ApplyAttributes): Do not worry about assembly 
26970         attributes in the non-global context.
26971
26972         * rootcontext.cs (AddGlobalAttributes): Go back to using this
26973         instead of SetGlobalAttributes.
26974
26975         * class.cs, rootcontext.cs : Ensure we define and generate 
26976         attribute types before anything else.
26977
26978         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
26979         and flag the new error -20 for the case when the attribute type
26980         does not have valid targets specified. csc does not catch this.
26981
26982         * ../errors/errors.txt : update for error # -20
26983
26984 2002-04-11  Ravi Pratap  <ravi@ximian.com>
26985
26986         * support.cs (InternalParameters.ParameterModifier): Do some null
26987         checking and return sane values.
26988
26989         * class.cs (Method.Define): If we are a PInvoke method, ensure
26990         that we are static and extern. Report error # 601
26991
26992         * ../errors/cs0601.cs : Add test case for the above error.
26993
26994 2002-04-07  Ravi Pratap  <ravi@ximian.com>
26995
26996         * rootcontext.cs (attribute_types): We need to keep type of
26997         all attribute types separately and emit code for them first.
26998
26999         (RegisterAttribute) : Implement.
27000
27001         * class.cs (DefineType): Check if the current Type is a custom
27002         attribute type and register it accordingly.
27003
27004         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
27005         adding the first attribute twice and rename to
27006
27007         (SetGlobalAttributes): this.
27008
27009         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
27010         lookups.
27011
27012         * attribute.cs (ApplyAttributes): Take an additional argument telling us
27013         if we are processing global arguments. Hmm, I am unsure of this.
27014
27015 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
27016
27017         * expression.cs: added static array of strings to avoid calling
27018         Enum.ToString () for Operator in Binary. Significant recover of
27019         performance.
27020
27021 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
27022
27023         * class.cs (FindMembers): Allow the Builders of the various
27024         members to be null.  If they are skip them.  This only happens
27025         during the PInvoke declaration.
27026
27027 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
27028
27029         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
27030         failure, so we do not keep going afterwards.
27031
27032         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
27033         wanted to pass `false' as the `is_delegate' argument.  If this is
27034         the case, why not use delegate_type == null to mean `is_delegate =
27035         false' and anything else as is_delegate = true.
27036
27037 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
27038
27039         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
27040         code for the section, not the beginning of the tests.
27041
27042 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
27043
27044         * cfold.cs: Handle operator + (Enum x, Underlying x) 
27045
27046         * expression.cs (Binary): same.  Warn about errors where we have
27047         Enum/Enum in operator + as well.
27048
27049 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
27050
27051         * statement.cs:
27052                 - added support for switch(bool)
27053                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
27054                 - add TableSwitchEmit() to handle table-based switch statements
27055
27056 2002-04-05  Ravi Pratap  <ravi@ximian.com>
27057
27058         * expression.cs (Invocation.OverloadResolve): Factor out code which
27059         does parameter compatibility checking with arguments so that we can 
27060         re-use the code even from Delegate.VerifyApplicability
27061
27062         (VerifyArgumentsCompat): Move above code here.
27063
27064         * delegate.cs (VerifyApplicability): Get rid of duplicate code
27065         and instead make a call to the above method.
27066
27067 2002-03-31  Ravi Pratap  <ravi@ximian.com>
27068
27069         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
27070         We use it to keep track of classes which are attribute types.
27071
27072 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
27073
27074         * delegate.cs (Delegate.Define): Correctly define the types in the
27075         presence of fixed and array parameters.
27076
27077         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
27078         doing FindMembers.
27079
27080         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
27081         include NonPublic after the first iteration.
27082
27083         * class.cs (Indexer.CheckBase): Only check if both parents are
27084         non-null. 
27085
27086         * cs-parser.jay (accessor_body): If empty, set to null.
27087
27088         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
27089         same code path here to resolve constants names that we did have in
27090         MemberAccess.DoResolve.  There is too much code duplicated here.
27091
27092 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
27093
27094         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
27095
27096         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
27097         to MakeUnionSet.
27098
27099         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
27100         tokens, numbers and strings.
27101
27102         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
27103         parenthesis.
27104
27105         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
27106         asyncronous parameters and the regular parameters.  
27107
27108         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
27109         specify the target directory.
27110
27111         * expression.cs: (This.DoResolve): Simplify
27112         (As.Emit): Optimize, do not generate IsInst if the expression is
27113         always of the given type.
27114
27115         (Is.DoResolve): Bug fix, we were reporting both always/never for
27116         the is expression.
27117
27118         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
27119         creating too many unnecessary arrays.
27120
27121 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
27122
27123         * class.cs (EmitFieldInitializer): Use Assign expression to assign
27124         fields instead of rolling our own initializer.   Takes care of all
27125         implicit conversions, and drops unnecessary static checks/argument.
27126
27127 2002-03-31  Dick Porter  <dick@ximian.com>
27128
27129         * driver.cs: use the GetDirectories() return values properly, and
27130         use "/" as path separator.
27131
27132 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
27133
27134         * expression.cs (Unary): Optimize - - expr into expr.
27135         (Binary): Optimize a + (-b) into a -b.
27136
27137         * codegen.cs (CodeGen): Made all methods static.
27138
27139 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
27140
27141         * rootcontext.cs: 
27142
27143         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
27144         TypeBuilder property.
27145
27146         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
27147         instead. 
27148
27149         * tree.cs: Removed the various RecordXXXX, and replaced with a
27150         single RecordDecl.  Removed all the accessor methods, and just
27151         left a single access point Type 
27152
27153         * enum.cs: Rename DefineEnum to DefineType.
27154
27155         * decl.cs: New abstract method `DefineType' used to unify the
27156         Defines for Enumerations, Interfaces, TypeContainers and
27157         Delegates.
27158
27159         (FindType): Moved LookupInterfaceOrClass here.  Moved the
27160         LookupBaseClasses method that used to live in class.cs and
27161         interface.cs here, and renamed to FindType.
27162
27163         * delegate.cs: Implement DefineType.  Take advantage of the
27164         refactored pattern for locating the parent builder without taking
27165         the parent_builder argument (which we know does not work if we are
27166         nested, and triggering a toplevel definition).
27167
27168 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27169
27170         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
27171         accessibility of a member has changed during override and report
27172         an error if so.
27173
27174         * class.cs (Method.Define, Property.Define): Only complain on
27175         overrides if the method is private, any other accessibility is
27176         fine (and since we just checked the permission is the same, we are
27177         good to go).
27178
27179         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
27180         and elif are processed always.  The other pre-processing
27181         directives are only processed if we are "taking" the path
27182
27183 2002-03-29  Martin Baulig  <martin@gnome.org>
27184
27185         * class.cs (Method.Emit): Only emit symbolic debugging info if the
27186         current location is not Null.
27187
27188         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
27189         a separate method so we can profile it.
27190
27191         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
27192         `span.Seconds' are just seconds, but no minutes or hours.
27193         (MainDriver): Profile the CodeGen.SaveSymbols calls.
27194
27195 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27196
27197         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
27198         Remove the gratuitous set of Final:
27199
27200                                 // If an interface implementation, then we can set Final.
27201                                 if (((flags & MethodAttributes.Abstract) == 0) &&
27202                                     implementing.DeclaringType.IsInterface)
27203                                         flags |= MethodAttributes.Final;
27204
27205         I do not know what I was smoking when I used that.
27206
27207
27208         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
27209         step into fixing the name resolution issues for delegates and
27210         unifying the toplevel name resolution.
27211
27212 2002-03-28  Martin Baulig  <martin@gnome.org>
27213
27214         * class.cs (Method.Emit): If we have a symbol writer, call its
27215         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
27216         tell it about the current method.
27217
27218         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
27219         writer that we're going to emit the first byte of IL code for a new
27220         statement (a new source line).
27221         (EmitContext.EmitTopBlock): If we have a symbol writer, call
27222         EmitContext.Mark() before emitting any code.
27223
27224         * location.cs (SymbolDocument): Return null when we're Null.
27225
27226         * statement.cs (Statement): Moved the `Location loc' variable here.
27227         (Statement.EmitBoolExpression): If we have a symbol writer, call
27228         ec.Mark() before emitting any code to tell it that we're at the
27229         beginning of a new statement.
27230         (StatementExpression): Added `Location' argument to the constructor.
27231         (Block): Added public readonly variable `StartLocation' and public
27232         variable `EndLocation'.  The latter is to be set using SetEndLocation().
27233         (Block): Added constructor which takes a start and end location.
27234         (Block.SetEndLocation): New method. This sets the end location.
27235         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
27236         local variables we create.
27237         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
27238         each statement and do also mark the begin and end of the block.
27239
27240         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
27241         tell it the current lexer.Location, use Location.Null for the end of the
27242         block.
27243         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
27244         current block, set its end location using SetEndLocation().
27245         (statement_expression): StatementExpression constructor now takes the
27246         lexer.Location as additional argument.
27247         (for_statement, declare_local_variables): Likewise.
27248         (declare_local_variables): When creating a new implicit block, use the
27249         new Block constructor and pass it the lexer.Location.
27250
27251 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27252
27253         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
27254         members also on the parent interfaces recursively.
27255
27256 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
27257
27258         * report.cs: Use new formats, since Gonzalo finished the missing
27259         bits. 
27260
27261         * expression.cs (Binary.ResolveOperator): added missing operator|
27262         operator& and operator^ for bool/bool.
27263
27264         * cs-parser.jay: CheckDef now takes a Location argument that is
27265         used to report errors more precisly (instead of reporting the end
27266         of a definition, we try to track something which is a lot closer
27267         to the source of the problem).
27268
27269         * cs-tokenizer.cs: Track global token use, so we can properly flag
27270         the use of #define/#undef after the first token has been seen.
27271
27272         Also, rename the reportXXXX to Error_DescriptiveName
27273
27274         * decl.cs (DeclSpace.IsTopLevel): Move property here from
27275         TypeContainer, so that Enum and Interface can use this too.
27276
27277         * class.cs (TypeContainer.LookupInterfaceOrClass,
27278         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
27279         `builder' argument.  Typically this was used to pass the parent
27280         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
27281         the definition).  
27282
27283         The problem is that a nested class could trigger the definition of
27284         a toplevel class, and the builder would be obviously wrong in that
27285         case. 
27286
27287         So we drop this argument, and we compute dynamically the
27288         TypeBuilder/ModuleBuilder (the correct information was available
27289         to us anyways from DeclSpace.Parent)
27290
27291         * interface.cs (Interface.DefineInterface): Drop builder
27292         parameter cleanup like class.cs
27293
27294         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
27295         like class.cs
27296
27297         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
27298         values. 
27299
27300         (Try.Emit): Propagate the returns value from the statement.
27301
27302         (Return.Emit): Even if we are leavning 
27303
27304         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
27305
27306         * modifiers.cs: Fix the computation of MethodAttributes flags.
27307
27308 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
27309
27310         * driver.cs: allow compilation of files that start with '/'.
27311         Add a default case when checking the argument of --target.
27312
27313 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
27314
27315         * interface.cs: Implement the same search algorithm for types in
27316         the interface code.
27317
27318         * delegate.cs: Do not allow multiple definition.
27319
27320         * Recovered ChangeLog that got accidentally amputated
27321
27322         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
27323
27324         * rootcontext.cs: Load manually enum to allow core classes to
27325         contain enumerations.
27326
27327         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
27328         Update to new static methods in TypeManager.
27329
27330         * typemanager.cs (GetMethod, GetConstructor): Use our
27331         implementation of FindMembers to find the members, since during
27332         corlib compilation, the types are TypeBuilders and GetMethod and
27333         GetConstructor do not work.
27334
27335         Make all methods in TypeManager static.
27336
27337         (InitCodeHelpers): Split the functionality from
27338         the InitCodeTypes function.
27339
27340         * driver.cs: Call InitCodeHelpers after we have populated the
27341         types. 
27342
27343         * cs-parser.jay (delegate_declaration): we did not used to compute
27344         the delegate name correctly for void delegates.
27345
27346 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
27347
27348         * rootcontext.cs (RootContext): Init the interface_resolve_order
27349         and type_container_resolve_order always.
27350
27351         (ResolveCore, BootstrapCorlib_ResolveClass,
27352         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
27353         compiler when compiling with --nostdlib
27354
27355         * class.cs (TypeContainer.DefineType): Check that our parent is
27356         not null.  This test is most important when we are bootstraping
27357         the core types.
27358
27359         * codegen.cs: Split out the symbol writing code.
27360
27361 2002-03-25  Martin Baulig  <martin@gnome.org>
27362
27363         * driver.cs (-g): Made -g an alias for --debug.
27364
27365 2002-03-24  Martin Baulig  <martin@gnome.org>
27366
27367         * codegen.cs (SymbolWriter): New public variable. Returns the
27368         current symbol writer.
27369         (CodeGen): Added `bool want_debugging_support' argument to the
27370          constructor. If true, tell the ModuleBuild that we want debugging
27371         support and ask it for the ISymbolWriter.
27372         (Save): If we have a symbol writer, call it's Close() method after
27373         saving the assembly.
27374
27375         * driver.c (--debug): New command line argument to create a
27376         debugger information file.
27377
27378         * location.cs (SymbolDocument): New public property. Returns an
27379         ISymbolDocumentWriter object for the current source file or null
27380         if we don't have a symbol writer.
27381
27382 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
27383
27384         * driver.cs (LoadAssembly): Correctly return when all the paths
27385         have been tried and not before.
27386
27387         * statement.cs (Switch.Emit): return the actual coverage for this
27388         statement (returns/not-returns)
27389
27390         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
27391         switch of the statement if we are the last switch section.  That
27392         kills two problems: try/catch problems (we used to emit an empty
27393         nop at the end) and switch statements where all branches would
27394         return. 
27395
27396 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
27397
27398         * driver.cs: Add default assemblies (the equivalent to the
27399         Microsoft CSC.RSP file)
27400
27401         * cs-tokenizer.cs: When updating `cols and setting it to zero,
27402         also update tokens_seen and set it to false.
27403
27404         * driver.cs: Implement --recurse for Mike.
27405
27406         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
27407         correctly splitting out the paths.
27408
27409 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
27410
27411         * interface.cs (Interface.PopulateProperty): Instead of using
27412         `parent' as the declaration space for the set parameters, use
27413         `this' 
27414
27415         * support.cs (InternalParameters): InternalParameters constructor
27416         takes a DeclSpace instead of a TypeContainer.
27417
27418         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
27419         types are being initialized, load the address of it before calling
27420         the function.  
27421
27422         (New): Provide a mechanism to disable the generation of local
27423         value type temporaries when the caller will be providing us with
27424         an address to store it.
27425
27426         (ArrayCreation.EmitDynamicInitializers): Use it.
27427
27428 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
27429
27430         * expression.cs (Invocation.EmitArguments): Only probe for array
27431         property if there is more than one argument.  Sorry about that.
27432
27433         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
27434         empty param arrays.
27435
27436         * class.cs (Method.LabelParameters): Fix incorrect code path that
27437         prevented the `ParamArrayAttribute' from being applied to the
27438         params attribute.
27439
27440 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
27441
27442         * support.cs (ReflectionParameters): Correctly compute whether the
27443         last argument is a params array.  Fixes the problem with
27444         string.Split ('a')
27445
27446         * typemanager.cs: Make the assemblies array always be non-null
27447         (empty, but non-null)
27448
27449         * tree.cs (RecordDecl): New function that abstracts the recording
27450         of names.  This reports error 101, and provides a pointer to the
27451         previous declaration.  Fixes a crash in the compiler.
27452
27453         * cs-parser.jay (constructor_declaration): Update to new grammar,
27454         and provide a constructor_body that can be empty.
27455
27456 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
27457
27458         * driver.cs: Add support for --resources.
27459
27460         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
27461         Make all types for the various array helper methods be integer.
27462
27463         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
27464         CheckState to ConvCast.
27465
27466         (ConvCast): Now it takes a `checked' state argument, to avoid
27467         depending on the emit context for the conversion, and just using
27468         the resolve time setting.
27469
27470         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
27471         instead of Invocation.EmitArguments.  We do not emit the original
27472         arguments, instead we emit those which have been converted to
27473         unsigned int expressions.
27474
27475         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
27476
27477         * codegen.cs: ditto.
27478
27479         * expression.cs (LocalVariableReference): Drop the use of the
27480         Store function that depended on the variable index.
27481
27482         * statement.cs (VariableInfo): Drop the `Idx' property from this
27483         class, as this is not taking into account the indexes for
27484         temporaries tat we generate during the execution, getting the
27485         indexes wrong.
27486
27487         * class.cs: First emit class initializers, then call the parent
27488         constructor. 
27489
27490         * expression.cs (Binary): Fix opcode emision.
27491         (UnaryMutator.EmitCode): Support checked code generation
27492
27493         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
27494         matches for events for both the Static and Instance scans,
27495         pointing to the same element.   Fix that.
27496
27497 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
27498
27499         * rootcontext.cs (ResolveTree): Always set the
27500         interface_resolve_order, because nested interfaces will be calling
27501         into us.
27502
27503         * class.cs (GetInterfaceOrClass): Track the same resolution
27504         process used by TypeManager.LookupType.  This fixes the nested
27505         type lookups in class declarations (separate path from
27506         LookupType). 
27507
27508         (TypeContainer.DefineType): Also define nested interfaces.
27509         (TypeContainer.RegisterOrder): New public function used to
27510         register the order in which child interfaces need to be closed.
27511
27512         Nested interfaces need to be closed after their parents have been
27513         created. 
27514
27515         * interface.cs (InterfaceAttr): Put all the logic for computing
27516         the interface attribute here. 
27517
27518         (DefineInterface): Register our interface order with the
27519         RootContext or with the TypeContainer depending on the case.
27520
27521 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
27522
27523         * cs-parser.jay: rework foreach statement to work with the new
27524         changes to the policy on SimpleNames.
27525
27526         * report.cs: support Stacktrace on warnings as well.
27527
27528         * makefile: drop --unsafe and /unsafe from the compile.
27529
27530 2002-03-13  Ravi Pratap  <ravi@ximian.com>
27531
27532         * ecore.cs (StandardConversionExists): Modify to take an Expression
27533         as the first parameter. Ensure we do null -> reference type conversion
27534         checking.
27535
27536         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
27537         temporary Expression objects.
27538
27539 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
27540
27541         * interface.cs: workaround bug in method overloading resolution
27542         (there is already a bugzilla bug for it).
27543
27544 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
27545
27546         We could also solve this problem by having a separate path for
27547         performing type lookups, instead of DoResolve, we could have a
27548         ResolveType entry point, and only participating pieces of the
27549         production (simplename, deref, array) would implement this. 
27550
27551         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
27552         signal SimpleName to only resolve type names and not attempt to
27553         resolve anything else.
27554
27555         * expression.cs (Cast): Set the flag.
27556
27557         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
27558
27559         * class.cs: Only report 108 if there is no `new' modifier.
27560
27561         * cs-parser.jay: rework foreach statement to work with the new
27562         changes to the policy on SimpleNames.
27563
27564         * report.cs: support Stacktrace on warnings as well.
27565
27566         * makefile: drop --unsafe and /unsafe from the compile.
27567
27568 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
27569
27570         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
27571         lookups here, instead of doing that at parse time.  This means
27572         that our grammar will not introduce `LocalVariableReferences' as
27573         expressions at this point.  That solves the problem of code like
27574         this:
27575
27576         class X {
27577            static void Main ()
27578            { int X = 1;
27579             { X x = null }}}
27580
27581         This is only half the fix.  The full fix requires parameters to
27582         also be handled in this way.
27583
27584         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
27585         makes the use more obvious of the DeclSpace.  The
27586         ec.TypeContainer.TypeBuilder is now only used to pull the
27587         TypeBuilder for it.
27588
27589         My theory is that I can get rid of the TypeBuilder completely from
27590         the EmitContext, and have typecasts where it is used (from
27591         DeclSpace to where it matters).  
27592
27593         The only pending problem is that the code that implements Aliases
27594         is on TypeContainer, and probably should go in DeclSpace.
27595
27596         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
27597         lookups here, instead of doing that at parse time.  This means
27598         that our grammar will not introduce `LocalVariableReferences' as
27599         expressions at this point.  That solves the problem of code like
27600         this:
27601
27602         class X {
27603            static void Main ()
27604            { int X = 1;
27605             { X x = null }}}
27606
27607         This is only half the fix.  The full fix requires parameters to
27608         also be handled in this way.
27609
27610         * class.cs (Property.DefineMethod): When implementing an interface
27611         method, set newslot, when implementing an abstract method, do not
27612         set the flag (before we tried never setting it, or always setting
27613         it, which is the difference).
27614         (Indexer.DefineMethod): same.
27615         (Method.DefineMethod): same.
27616
27617         * ecore.cs: Only set the status used flag if we get back a Field.
27618
27619         * attribute.cs: Temporary hack, so Paolo can keep working.
27620
27621 2002-03-08  Ravi Pratap  <ravi@ximian.com>
27622
27623         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
27624         the unmanaged type in the case we have a MarshalAs attribute.
27625
27626         (Resolve): Handle the case when we are parsing the special MarshalAs
27627         attribute [we need to store the unmanaged type to use later]
27628
27629         * typemanager.cs (marshal_as_attr_type): Built in type for the 
27630         MarshalAs Attribute.
27631
27632         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
27633         on parameters and accordingly set the marshalling info.
27634
27635 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
27636
27637         * class.cs: Optimizing slightly by removing redundant code after
27638         we switched to the `NoTypes' return value.
27639         (Property.DefineMethod): use NoTypes here too.
27640
27641         This fixes the bug I introduced in my last batch of changes.
27642
27643 2002-03-05  Ravi Pratap  <ravi@ximian.com>
27644
27645         * tree.cs (RecordEnum): Add. We now keep track of enums too.
27646
27647         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
27648         Enums since those are types too. 
27649
27650         * cs-parser.jay (enum_declaration): Record enums as we parse them.
27651
27652         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
27653         thanks to a call during the lookup process.
27654
27655 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
27656
27657         * statement.cs (Foreach): Lots of work to accomodate a particular
27658         kind of foreach statement that I had not kept in mind.  It is
27659         possible to have foreachs on classes that provide a GetEnumerator
27660         method that return objects that implement the "pattern" for using
27661         a foreach, there is no need to support GetEnumerator
27662         specifically. 
27663
27664         This is needed to compile nant.
27665
27666         * decl.cs: Only report 114 if the member is not `Finalize' and if
27667         the warning level is at least 2.
27668
27669         * class.cs: Moved the compare function from Method to
27670         MethodSignature. 
27671
27672         (MethodSignature.InheritableMemberSignatureCompare): Add new
27673         filter function that is used to extract inheritable methods from a
27674         class. 
27675
27676         (Method.Define): Use the new `inheritable_method_signature_filter'
27677         delegate
27678
27679         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
27680         command. 
27681
27682 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
27683
27684         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
27685
27686         * cs-parser.jay: Add opt_semicolon to the interface declaration.
27687
27688         * expression.cs: Pass location information to
27689         ConvertImplicitStandard. 
27690
27691         * class.cs: Added debugging code to track return values from
27692         interfaces. 
27693
27694 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
27695
27696         * expression.cs (Is.DoResolve): If either side of the `is' is an
27697         interface, do not flag the warning.
27698
27699         * ecore.cs (ImplicitReferenceConversion): We need a separate test
27700         for interfaces
27701
27702         * report.cs: Allow for --fatal to be used with --probe.
27703
27704         * typemanager.cs (NoTypes): Move the definition for the empty Type
27705         array here. 
27706
27707         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
27708         properties. 
27709         (TypeContainer.DefineProxy): New function used to proxy to parent
27710         implementations when implementing interfaces.
27711         (TypeContainer.ParentImplements): used to lookup if our parent
27712         implements a public function that is required by an interface.
27713         (TypeContainer.VerifyPendingMethods): Hook this up.
27714
27715         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
27716         `modules' and `assemblies' arraylists into arrays.  We only grow
27717         these are the very early start up of the program, so this improves
27718         the speedof LookupType (nicely measured).
27719
27720         * expression.cs (MakeByteBlob): Replaced unsafe code with
27721         BitConverter, as suggested by Paolo.
27722
27723         * cfold.cs (ConstantFold.Binary): Special case: perform constant
27724         folding of string concatenation, but if either side is a string,
27725         and the other is not, then return null, and let the runtime use
27726         the concatenation on the string plus the object (using
27727         `Object.ToString'). 
27728
27729 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
27730
27731         Constant Folding has been implemented now.
27732
27733         * expression.cs (Unary.Reduce): Do not throw an exception, catch
27734         the error instead on types that are not supported in one's
27735         complement. 
27736
27737         * constant.cs (Constant and all children): New set of functions to
27738         perform implict and explicit conversions.
27739
27740         * ecore.cs (EnumConstant): Implement the new functions to perform
27741         conversion by proxying to the child expression.
27742
27743         * codegen.cs: (ConstantCheckState): Constant evaluation has its
27744         own separate setting that can not be turned off from the command
27745         line using --unchecked or --checked and is only controlled using
27746         the checked/unchecked statements and expressions.  This setting is
27747         used by the constant folder to flag errors.
27748
27749         * expression.cs (CheckedExpr, UncheckedExpr): Set the
27750         ConstantCheckState as well.   
27751
27752         During Resolve, they also have to flag the state, because the
27753         constant folder runs completely in the Resolve phase.
27754
27755         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
27756         well.
27757
27758 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
27759
27760         * cfold.cs: New file, this file contains the constant folder.
27761
27762         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
27763         argument to track whether we are using the resulting address to
27764         load or store a value and provide better error messages. 
27765
27766         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
27767         new AddressOf arguments.
27768
27769         * statement.cs (Foreach.EmitCollectionForeach): Update
27770
27771         * expression.cs (Argument.Emit): Call AddressOf with proper
27772         arguments to track usage.
27773
27774         (New.DoEmit): Call AddressOf with new arguments.
27775
27776         (Unary.Emit): Adjust AddressOf call.
27777
27778 2002-03-01  Ravi Pratap  <ravi@ximian.com>
27779
27780         * cs-parser.jay (member_access): Change the case for pre-defined types
27781         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
27782         this suggestion.
27783
27784         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
27785         a method body.
27786
27787         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
27788         essentially like methods and apply attributes like MethodImplOptions to them too.
27789
27790         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
27791         not being null.
27792
27793         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
27794         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
27795         is the DeclSpace.
27796
27797         * Update code everywhere accordingly.
27798
27799         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
27800
27801         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
27802
27803 2002-02-28  Ravi Pratap  <ravi@ximian.com>
27804
27805         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
27806         try performing lookups against those instead of jumping straight into using
27807         the 'using' clauses.
27808
27809         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
27810
27811         (LookupType): Perform lookups in implicit parents too.
27812
27813         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
27814         sequence as RootContext.LookupType. 
27815
27816         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
27817         the various cases of namespace lookups into this method.
27818
27819 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
27820
27821         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
27822         in positional arguments)
27823
27824         * class.cs (Operator): Update the AllowedModifiers to contain
27825         extern. 
27826
27827         * cs-parser.jay: Update operator declaration to allow for the
27828         operator body to be empty.
27829
27830         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
27831         values. 
27832
27833 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
27834
27835         * class.cs (Method.Emit): Label parameters.
27836
27837         * driver.cs: Return 1 or 0 as the program exit code.
27838
27839 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
27840
27841         * expression.cs: Special case the `null' object when trying to
27842         auto-compute the type, as anything can be explicitly converted to
27843         that. 
27844
27845         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
27846         spotting this Paolo.
27847
27848         (Expression.ImplicitNumericConversion): Perform comparissions of
27849         the type using the underlying type in the case of an enumeration
27850         rather than using the enumeration type for the compare.
27851
27852         Cope with the underlying == type case, which is not possible to
27853         catch before. 
27854
27855         (Expression.ConvertNumericExplicit): Perform comparissions of
27856         the type using the underlying type in the case of an enumeration
27857         rather than using the enumeration type for the compare.
27858
27859         * driver.cs: If the user does not supply an extension, assume .exe
27860
27861         * cs-parser.jay (if_statement): Rewrote so that we can track the
27862         location for the if statement.
27863
27864         * expression.cs (Binary.ConstantFold): Only concat strings when
27865         the operation is "+", not everything ;-)
27866
27867         * statement.cs (Statement.EmitBoolExpression): Take a location
27868         argument. 
27869         (If, While, Do): Track location.
27870
27871         * expression.cs (Binary.ResolveOperator): In the object + string
27872         case, I was missing a call to ConvertImplicit
27873
27874 2002-02-25  Ravi Pratap  <ravi@ximian.com>
27875
27876         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
27877         Location arguments. Ensure we use RootContext.LookupType to do our work
27878         and not try to do a direct Type.GetType and ModuleBuilder.GetType
27879
27880         * interface.cs (PopulateMethod): Handle the type of the parameter being
27881         null gracefully.
27882
27883         * expression.cs (Invocation.BetterFunction): Handle the case when we 
27884         have a params method with no fixed arguments and a call is made with no
27885         arguments.
27886
27887 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
27888
27889         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
27890         the verbatim-string-literal
27891
27892         * support.cs (InternalParameters.ParameterModifier): handle null
27893         fixed parameters.
27894         (InternalParameters.ParameterType): ditto.
27895
27896         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
27897         duplicating the name of the variable parameter.
27898         (GetParameterByName): Fix bug where we were not looking up array
27899         paramters if they were the only present (thanks Paolo!).
27900         (GetParameterInfo): We only have an empty set of types if both
27901         fixed and array are set to null.
27902         (GetParameterInfo-idx): Handle FixedParameter == null
27903
27904         * cs-parser.jay: Handle the case where there is no catch
27905         statements (missing null test).
27906
27907 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
27908
27909         * driver.cs (MainDriver): Be conservative on our command line
27910         handling.
27911
27912         Catch DirectoryNotFoundException when calling GetFiles.
27913
27914         (SplitPathAndPattern): Used to split the input specification into
27915         a path and a pattern that we can feed to Directory.GetFiles.
27916
27917 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
27918
27919         * statement.cs (Fixed): Implement the last case of the Fixed
27920         statement (string handling).
27921
27922         * expression.cs (StringPtr): New class used to return a char * to
27923         a string;  Used by the Fixed statement.
27924
27925         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
27926
27927         * expression.cs (Binary.ResolveOperator): Remove redundant
27928         MemberLookup pn parent type.
27929         Optimize union call, we do not need a union if the types are the same.
27930         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
27931         type.
27932
27933         Specialize the use of MemberLookup everywhere, instead of using
27934         the default settings. 
27935
27936         (StackAlloc): Implement stackalloc keyword.
27937
27938         * cs-parser.jay: Add rule to parse stackalloc.
27939
27940         * driver.cs: Handle /h, /help, /?
27941
27942         * expression.cs (MakeByteBlob): Removed the hacks we had in place
27943         before we supported unsafe code.
27944
27945         * makefile: add --unsafe to the self compilation of mcs.
27946
27947 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
27948
27949         * expression.cs (PointerArithmetic): New class that is used to
27950         perform pointer arithmetic.
27951         (Binary.Resolve): Handle pointer arithmetic
27952         Handle pointer comparission.
27953         (ArrayPtr): Utility expression class that is used to take the
27954         address of an array.
27955
27956         (ElementAccess): Implement array access for pointers
27957
27958         * statement.cs (Fixed): Implement fixed statement for arrays, we
27959         are missing one more case before we are done.
27960
27961         * expression.cs (Indirection): Implement EmitAssign and set the
27962         ExprClass to Variable.  This allows pointer dereferences to be
27963         treated as variables, and to have values assigned to them.
27964
27965         * ecore.cs (Expression.StoreFromPtr): New utility function to
27966         store values dereferencing.
27967
27968 2002-02-20  Ravi Pratap  <ravi@ximian.com>
27969
27970         * expression.cs (Binary.ResolveOperator): Ensure that we are
27971         not trying to operate on a void type - this fixes the reported
27972         bug.
27973
27974         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
27975         the parent implementation is sealed.
27976
27977         * ../errors/cs0239.cs : Add.
27978
27979         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
27980
27981         * typemanager.cs (unverifiable_code_type): Corresponds to 
27982         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
27983         which have unsafe code in them.
27984
27985         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
27986         unsafe context.
27987
27988 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
27989
27990         * cs-tokenizer.cs: Add support for @"litreal strings"
27991
27992         Make tokenizer accept pre-processor directives
27993         on any column (remove the old C-like limitation). 
27994
27995         * rootcontext.cs (EmitCode): Emit any global attributes.
27996         (AddGlobalAttributes): Used to keep track of assembly attributes. 
27997
27998         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
27999
28000         * cs-parser.jay: Add support for global attributes.  
28001
28002 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
28003
28004         * expression.cs (Indirection): New helper class.  Unary will
28005         create Indirection classes to be able to implement the
28006         IMemoryLocation interface on it.
28007
28008 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
28009
28010         * cs-parser.jay (fixed_statement): reference the right statement.
28011
28012         * statement.cs (Fixed.Emit): Finish implementing the fixed
28013         statement for the &x case.
28014
28015 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
28016
28017         * class.cs (Property.Define, Method.Define): Remove newslot when
28018         `implementing'.  
28019
28020         * modifiers.cs: My use of NewSlot when `Abstract' was set was
28021         wrong.  NewSlot should only be used if the `new' keyword is present.
28022
28023         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
28024         locating our system dir.  Sorry about this.
28025
28026 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
28027
28028         * driver.cs (GetSystemDir): Compute correctly the location of our
28029         system assemblies.  I was using the compiler directory instead of
28030         the library directory.
28031
28032 2002-02-13  Ravi Pratap  <ravi@ximian.com>
28033
28034         * expression.cs (BetterFunction): Put back in what Miguel commented out
28035         since it is the correct fix. The problem is elsewhere ;-)
28036
28037         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
28038         parameters of the parms method are themselves compatible or not !
28039
28040         (StandardConversionExists): Fix very dangerous bug where we were forgetting
28041         to check that a class implements an interface before saying that an implicit
28042         conversion was allowed. Use ImplementsInterface to do the checking.
28043
28044 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
28045
28046         * class.cs (Method.Define): Track whether we are an explicit
28047         implementation or not.  And only call DefineMethodOverride if we
28048         are an explicit implementation.
28049
28050         (Property.DefineMethod): Ditto.
28051
28052 2002-02-11  Ravi Pratap  <ravi@ximian.com>
28053
28054         * expression.cs (BetterFunction): Catch hideous bug which was
28055          preventing us from detecting ambiguous calls due to implicit casts i.e
28056         cs0121.
28057
28058 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
28059
28060         * support.cs (Pair): Remove un-needed method.  I figured why I was
28061         getting the error in cs-parser.jay, the variable in a foreach loop
28062         is readonly, and the compiler does not really treat this as a variable.
28063
28064         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
28065         instead of EQUALS in grammar.  
28066
28067         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
28068
28069         * expression.cs (Unary.DoResolve): Check whether the argument is
28070         managed or not.
28071
28072 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
28073
28074         * support.cs: Api for Pair to set a value.  Despite the fact that
28075         the variables are public the MS C# compiler refuses to compile
28076         code that accesses the field if the variable is part of a foreach
28077         statement. 
28078
28079         * statement.cs (Fixed): Begin implementation of the fixed
28080         statement.
28081
28082         (Block.AddVariable): Return the VariableInfo on success and null
28083         on failure instead of true/false. 
28084
28085         * cs-parser.jay (foreach): Catch errors on variables already
28086         defined (we were ignoring this value before) and properly unwind
28087         the block hierarchy
28088
28089         (fixed_statement): grammar for the fixed statement.
28090
28091 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
28092
28093         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
28094         pointer types to be incretemented.
28095
28096         (SizeOf): Implement.
28097
28098         * cs-parser.jay (pointer_member_access): Implement
28099         expr->IDENTIFIER production.
28100
28101         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
28102         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
28103         on safe contexts.
28104
28105         (Unary): Implement indirection.
28106
28107         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
28108         use in non-unsafe context).
28109
28110         (SimpleName.DoResolve): Check for pointers in field access on safe
28111         contexts. 
28112
28113         (Expression.LoadFromPtr): Factor the load-indirect code in this
28114         function.  This was duplicated in UnboxCast and ParameterReference
28115
28116 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
28117
28118         * expression.cs (ComposedCast): report an error if a pointer cast
28119         is used in a safe region.
28120
28121         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
28122         pointer type casts in unsafe context.
28123
28124         * codegen.cs (EmitContext): Set up IsUnsafe.
28125
28126         * cs-parser.jay (non_expression_type): Add productions for pointer
28127         casts. 
28128
28129         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
28130         code.  We should not use force into static mode if the method is
28131         not virtual.  Fixes bug in MIS
28132
28133         * statement.cs (Do.Emit, While.Emit, For.Emit,
28134         Statement.EmitBoolExpression): Add support to Do and While to
28135         propagate infinite loop as `I do return' semantics.
28136
28137         Improve the For case to also test for boolean constants.
28138
28139         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
28140         to the list of attributes we can add.
28141
28142         Remove `EmitContext' argument.
28143
28144         * class.cs (Method.Define): Apply parameter attributes.
28145         (Constructor.Define): Apply parameter attributes.
28146         (MethodCore.LabelParameters): Move here the core of labeling
28147         parameters. 
28148
28149         * support.cs (ReflectionParameters.ParameterModifier,
28150         InternalParameters.ParameterModifier): Use IsByRef on the type and
28151         only return the OUT bit for these parameters instead of in/out/ref
28152         flags.
28153
28154         This is because I miss-understood things.  The ParameterInfo.IsIn
28155         and IsOut represent whether the parameter has the [In] and [Out]
28156         attributes set.  
28157
28158 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
28159
28160         * ecore.cs (FieldExpr.Emit): Release temporaries.
28161
28162         * assign.cs (LocalTemporary.Release): new function.
28163
28164         * codegen.cs (EmitContext.GetTemporaryStorage,
28165         EmitContext.FreeTemporaryStorage): Rework the way we deal with
28166         temporary storage.  Now we can "put back" localbuilders when we
28167         are done with them
28168
28169 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
28170
28171         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
28172         need to make a copy of the variable to generate verifiable code.
28173
28174 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
28175
28176         * driver.cs: Compute dynamically the system directory.
28177
28178         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
28179         Slower, but more generally useful.  Used by the abstract
28180         registering implementation. 
28181
28182         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
28183         the rules for the special rule on Type/instances.  First check if
28184         we have the same name, and if so, try that special static path
28185         rather than the instance path.
28186
28187 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
28188
28189         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
28190         for, while and if.
28191
28192         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
28193         Enum, ValueType, Delegate or Array for non-corlib compiles.
28194
28195         * cs-tokenizer.cs: Catch long identifiers (645)
28196
28197         * typemanager.cs (IndexerPropetyName): Ravi never tested this
28198         piece of code.
28199
28200         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
28201         fix, we were returning too early, so we were not registering
28202         pending methods from abstract classes.
28203
28204         Do not register pending methods if the class is abstract.
28205
28206         * expression.cs (Conditional.DoResolve): Report circular implicit
28207         conversions when we neecd to compute it for conditional
28208         expressions. 
28209
28210         (Is.DoResolve): If the expression is always of the provided type,
28211         flag warning 183.  If the expression can not ever be of the
28212         provided type flag warning 184.
28213
28214         * class.cs: Catch 169 as well.
28215
28216         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
28217         read. 
28218
28219 2002-01-18  Nick Drochak  <ndrochak@gol.com>
28220
28221         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
28222
28223 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
28224
28225         * interface.cs: (PopulateMethod): Check for pointers being defined
28226         only if the unsafe context is active.
28227         (PopulateProperty): ditto.
28228         (PopulateIndexer): ditto.
28229
28230         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
28231         specified.  If pointers are present, make sure that they are
28232         present in an unsafe context.
28233         (Constructor, Constructor.Define): ditto.
28234         (Field, Field.Define): ditto.
28235         (Property, Property.Define): ditto.
28236         (Event, Event.Define): ditto.
28237
28238         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
28239         hashtable if there are classes or structs defined.
28240
28241         * expression.cs (LocalVariableReference.DoResolve): Simplify this
28242         code, as the constant resolution moved.
28243
28244         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
28245         the metadata, so we can flag error 133. 
28246
28247         * decl.cs (MemberCore.UnsafeOK): New function to test that a
28248         pointer is being declared in an unsafe context.
28249
28250 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
28251
28252         * modifiers.cs (Modifiers.Check): Require a Location argument.
28253         Report error 227 for Unsafe use.
28254
28255         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
28256
28257         * statement.cs (For.Emit): If the test is null, then report that
28258         we do `return', as we wont reach anything afterwards.
28259
28260         (Switch.SwitchGoverningType): Track the expression that matched
28261         the conversion.
28262
28263         * driver.cs: Allow negative numbers as an error code to flag.
28264
28265         * cs-parser.jay: Handle 1551.
28266
28267         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
28268
28269 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
28270
28271         * cs-parser.jay: Report 1518 (type declaration can only contain
28272         class, struct, interface, enum or delegate)
28273
28274         (switch_label): Report 1523 (keywords `case' or `default' must
28275         preced code)
28276
28277         (opt_switch_sections): Report 1522 (empty switch)
28278
28279         * driver.cs: Report 1515 (response file specified multiple times)
28280         Report 1516 (Source file specified multiple times).
28281
28282         * expression.cs (Argument.Resolve): Signal 1510
28283
28284         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
28285         access not allowed in static code)
28286
28287 2002-01-11  Ravi Pratap  <ravi@ximian.com>
28288
28289         * typemanager.cs (IsPointerType): Utility method which we are going
28290         to need a lot.
28291
28292         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
28293         the object type, so we take care of that.
28294
28295         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
28296
28297         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
28298         added to non-params parameters :-)
28299
28300         * typemanager.cs (CSharpName): Include 'void' type too. 
28301
28302         (void_ptr_type): Include in the set of core types.
28303
28304         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
28305         duplicating code.
28306
28307         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
28308         an unsafe context.
28309
28310         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
28311         completely forgotten about it.
28312
28313 2002-01-10  Ravi Pratap  <ravi@ximian.com>
28314
28315         * cs-parser.jay (pointer_type): Add. This begins our implementation
28316         of parsing rules for unsafe code.
28317
28318         (unsafe_statement): Implement.
28319
28320         (embedded_statement): Modify to include the above.
28321
28322         * statement.cs (Unsafe): Implement new class for unsafe blocks.
28323
28324         * codegen.cs (EmitContext.InUnsafe): Add. This determines
28325         if the current context is an unsafe one.
28326
28327         * cs-parser.jay (local_variable_pointer_type): Since local variable types
28328         are handled differently, we need separate rules for them.
28329
28330         (local_variable_declaration): Update to use local_variable_pointer_type
28331         to allow variable declarations of unmanaged pointer types.
28332
28333         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
28334         in unsafe contexts.
28335
28336         * ../errors/cs0214.cs : Add.
28337
28338 2002-01-16  Nick Drochak  <ndrochak@gol.com>
28339
28340         * makefile: remove 'response' file when cleaning.
28341
28342 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
28343
28344         * cs-parser.jay: Report 1524.
28345
28346 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
28347
28348         * typemanager.cs (RegisterMethod): drop checking if we have
28349         registered this from here
28350
28351 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
28352
28353         * class.cs (Method.EmitDestructor): Implement calling our base
28354         destructor. 
28355
28356         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
28357         value of InFinally.
28358
28359         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
28360         this routine and will wrap the call in a try/catch block.  Deal
28361         with the case.
28362
28363 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
28364
28365         * ecore.cs (Expression.MemberLookup): instead of taking a
28366         parameter `same_type' that was used to tell whether we could
28367         access private members we compute our containing type from the
28368         EmitContext.
28369
28370         (FieldExpr): Added partial support for volatile fields.  This does
28371         not work for volatile fields exposed from assemblies, as I can not
28372         figure out how to extract the modreq from it.
28373
28374         Updated all the source files to use this.
28375
28376         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
28377         because it is referenced by MemberLookup very often. 
28378
28379 2002-01-09  Ravi Pratap  <ravi@ximian.com>
28380
28381         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
28382         TypeBuilder.GetCustomAttributes to retrieve what we need.
28383
28384         Get rid of redundant default_member_attr_type as this is the same as
28385         default_member_type which already exists.
28386
28387         * interface.cs, attribute.cs : Update accordingly.
28388
28389 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
28390
28391         * typemanager.cs: Enable IndexerPropertyName again.  It does not
28392         work for TYpeBuilders though.  Ravi, can you please fix this?
28393
28394         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
28395
28396         * expression.cs (Argument.Emit): Handle the case of ref objects
28397         being passed to ref functions;  
28398
28399         (ParameterReference.EmitLoad): Loads the content of the pointer
28400         without dereferencing.
28401
28402 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
28403
28404         * cs-tokenizer.cs: Implemented the pre-processing expressions.
28405
28406 2002-01-08  Ravi Pratap  <ravi@ximian.com>
28407
28408         * class.cs (Indexer.DefineMethod): Incorporate the interface
28409         type in the name of the method if we are doing explicit interface
28410         implementation.
28411
28412         * expression.cs (ConversionExists): Remove as it is completely obsolete.
28413
28414         (BetterConversion): Fix extremely trivial bug where we were referring to
28415         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
28416         again !
28417
28418         * ../errors/bug16.cs : Add although we have fixed it.
28419
28420 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
28421
28422         * expression.cs (BaseIndexer): Begin implementation.
28423
28424         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
28425
28426         * cs-parser.jay (indexer_declarator): Use qualified_identifier
28427         production directly to remove a shift/reduce, and implement
28428         explicit interface implementation.
28429
28430         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
28431         after a floating point suffix.
28432
28433         * expression.cs (DoNumericPromotions): Improved the conversion for
28434         uint/uint.  If we have a constant, we avoid doing a typecast to a
28435         larger type.
28436
28437         * class.cs (Indexer): Implement explicit interface implementation
28438         for indexers.
28439
28440 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
28441
28442         * class.cs: make the default instance constructor public and hidebysig.
28443
28444 2001-01-03  Ravi Pratap  <ravi@ximian.com>
28445
28446         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
28447         so we can call it from elsewhere.
28448
28449         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
28450         we emit it internally if the class has a defined indexer; otherwise the user
28451         emits it by decorating the class definition with the DefaultMemberAttribute.
28452
28453         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
28454         attribute is not used on a type which defines an indexer.
28455
28456         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
28457         character when we skip whitespace.
28458
28459         * ../errors/cs0646.cs : Add.
28460
28461 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
28462
28463         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
28464         again. 
28465
28466         * makefile: Add practical target `mcs3.exe' which builds the third
28467         generation compiler. 
28468
28469         * expression.cs (New): Fix structures constructor calling.
28470
28471         * class.cs (Property, Method, Indexer): Emit Final flag on the
28472         method if we are an interface implementation and we are not
28473         abstract. 
28474
28475         * ecore.cs (PropertyExpr): New public field `IsBase', tells
28476         whether this property is referencing a `base' method.
28477
28478         * expression.cs (Invocation.EmitCall): take an extra argument:
28479         is_base, this is used to determine whether the `call' or
28480         `callvirt' opcode should be used.
28481
28482
28483         * delegate.cs: update EmitCall.
28484
28485         * class.cs (Method.Define): Set NewSlot for the cases where we are
28486         not implementing an interface method.
28487
28488         (Property.Define): ditto.
28489
28490 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
28491
28492         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
28493         'r'.  Allows mcs to parse itself fully.
28494
28495 2002-01-02  Ravi Pratap  <ravi@ximian.com>
28496
28497         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
28498         of the number of initializers that require the InitializeArray method.
28499
28500         (CheckIndices): Store the Expression in all cases - not the plain value. Also
28501         update the above field where necessary.
28502
28503         (MakeByteBlob): Update accordingly.
28504
28505         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
28506         greater than 2.
28507
28508         (EmitDynamicInitializers): Update in accordance with the new optimization.
28509
28510         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
28511         same OpCode applies.
28512
28513         * cs-parser.jay : Fix some glaring errors I introduced.
28514
28515 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
28516
28517         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
28518         so that we can check for name clashes there too.
28519
28520         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
28521         for interface indexers.
28522
28523         * interfaces.cs (Define): Emit the default member attribute.
28524
28525         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
28526         variable was being referred to while setting the value ;-)
28527
28528 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
28529
28530         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
28531         byte-by-byte information when we know the data is zero.
28532
28533         Make the block always a multiple of 4, because
28534         DefineInitializedData has a bug.
28535
28536         * assign.cs: Fix, we should assign from the temporary, not from
28537         the source. 
28538
28539         * expression.cs (MakeByteBlob): Fix my incorrect code.
28540
28541 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
28542
28543         * typemanager.cs (EnumToUnderlying): This function is used to get
28544         the underlying type from an enumeration, because it does not
28545         always work. 
28546
28547         * constant.cs: Use the I4_S form for values between -128 and 127.
28548
28549         * statement.cs (Block.LookupLabel): Looks up a label.
28550         (Block): Drop support for labeled blocks.
28551
28552         (LabeledStatement): New kind of statement that represents a label
28553         only.
28554
28555         (Goto): Finally implement this bad boy.
28556
28557         * cs-parser.jay: Update to reflect new mechanism to implement
28558         labels.
28559
28560 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
28561
28562         * codegen.cs (EmitContext.This): a codegen property that keeps the
28563         a single instance of this instead of creating many different this
28564         instances. 
28565
28566         * delegate.cs (Delegate.DoResolve): Update to use the property;
28567
28568         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
28569
28570         * expression.cs (BaseAccess.DoResolve): Ditto.
28571
28572 2001-12-29  Ravi Pratap  <ravi@ximian.com>
28573
28574         * typemanager.cs (methodimpl_attr_type): Add to hold the type
28575         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
28576
28577         (InitCoreTypes): Update accordingly.
28578
28579         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
28580         so we can quickly store the state.
28581
28582         (ApplyAttributes): Set the correct implementation flags
28583         for InternalCall methods.
28584
28585 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
28586
28587         * expression.cs (EmitCall): if a method is not virtual, then do
28588         not use callvirt on it.
28589
28590         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
28591         user defined stuff) requires the use of stobj, which takes an
28592         address on the stack instead of an array and an index.  So emit
28593         the Ldelema operation for it.
28594
28595         (EmitStoreOpcode): Use stobj for valuetypes.
28596
28597         (UnaryMutator.EmitCode): Use the right 1 value depending on
28598         whether we are dealing with int64/uint64, float or doubles.
28599
28600         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
28601         constructors that I implemented last night.
28602
28603         (Constructor.IsDefault): Fix to work properly for static
28604         constructors.
28605
28606         * cs-parser.jay (CheckDef): report method signature errors.
28607         Update error number 103 to be 132.
28608
28609         * decl.cs: New AdditionResult enumeration value: MethodExists.
28610         Although we do this check for methods later on in the semantic
28611         analysis, catching repeated default constructors is so easy that
28612         we catch these here. 
28613
28614         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
28615         promotions code.
28616
28617         (ParameterReference.EmitAssign, Emit): handle
28618         bools as bytes.
28619
28620         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
28621         (ArrayAccess.EmitStoreOpcode): ditto.
28622
28623         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
28624
28625         * expression.cs (MakeByteBlob): Complete all the missing types
28626         (uint, short, ushort, byte, sbyte)
28627
28628         * class.cs: Only init instance field initializers on instance
28629         constructors. 
28630
28631         Rename `constructors' to instance_constructors. 
28632
28633         (TypeContainer.AddConstructor): Only add constructors to the list
28634         if it is not static.
28635
28636         Make sure that we handle default_static_constructor independently
28637         everywhere where we handle instance_constructors
28638
28639 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
28640
28641         * class.cs: Do not lookup or create a base initializer for a
28642         static constructor.
28643
28644         (ConstructorInitializer.Resolve): use the proper type to lookup
28645         for constructors.
28646
28647         * cs-parser.jay: Report error 1585 (modifiers between type and name).
28648
28649         * enum.cs, interface.cs: Remove CloseType, this is taken care by
28650         in DeclSpace. 
28651
28652         * decl.cs: CloseType is now an virtual method, the default
28653         implementation just closes this type.
28654
28655 2001-12-28  Ravi Pratap  <ravi@ximian.com>
28656
28657         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
28658         to PreserveSig by default. Also emit HideBySig on such methods.
28659
28660         Basically, set the defaults to standard values.
28661
28662         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
28663         argument, if candidate is better, it can't be worse than the best !
28664
28665         (Invocation): Re-write bits to differentiate between methods being
28666         applicable in their expanded form and their normal form - for params
28667         methods of course.
28668
28669         Get rid of use_standard everywhere as only standard conversions are allowed
28670         in overload resolution. 
28671
28672         More spec conformance.
28673
28674 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
28675
28676         * driver.cs: Add --timestamp, to see where the compiler spends
28677         most of its time.
28678
28679         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
28680         `this' in static code.
28681
28682         (SimpleName.DoResolve): Implement in terms of a helper function
28683         that allows static-references to be passed upstream to
28684         MemberAccess.
28685
28686         (Expression.ResolveWithSimpleName): Resolve specially simple
28687         names when called by MemberAccess to implement the special
28688         semantics. 
28689
28690         (Expression.ImplicitReferenceConversion): Handle conversions from
28691         Null to reference types before others, as Null's type is
28692         System.Object. 
28693
28694         * expression.cs (Invocation.EmitCall): Handle the special case of
28695         calling methods declared on a reference type from a ValueType
28696         (Base classes System.Object and System.Enum)
28697
28698         (MemberAccess.Resolve): Only perform lookups on Enumerations if
28699         the left hand side is a TypeExpr, not on every enumeration. 
28700
28701         (Binary.Resolve): If types are reference types, then do a cast to
28702         object on operators != and == of both arguments.
28703
28704         * typemanager.cs (FindMembers): Extract instance and static
28705         members if requested.
28706
28707         * interface.cs (PopulateProperty): Use void_type instead of null
28708         as the return type for the setter method.
28709
28710         (PopulateIndexer): ditto.
28711
28712 2001-12-27  Ravi Pratap  <ravi@ximian.com>
28713
28714         * support.cs (ReflectionParameters): Fix minor bug where we
28715         were examining the wrong parameter for the ParamArray attribute.
28716
28717         Cope with requests for the type of the parameter at position
28718         greater than the params parameter's. We now return the element
28719         type of the params array as that makes more sense.
28720
28721         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
28722         accordingly as we no longer have to extract the element type
28723         ourselves.
28724
28725         (Invocation.OverloadResolve): Update.
28726
28727 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
28728
28729         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
28730         against IEnumerator, test whether the return value is a descendant
28731         of the IEnumerator interface.
28732
28733         * class.cs (Indexer.Define): Use an auxiliary method to implement
28734         the other bits of the method definition.  Begin support for
28735         explicit interface implementation.
28736
28737         (Property.DefineMethod): Use TypeManager.void_type instead of null
28738         for an empty return value.
28739
28740 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
28741
28742         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
28743         dealing with a FieldExpr which is composed of a FieldBuilder, in
28744         the code path we did extract the constant, but we should have
28745         obtained the underlying value to be able to cast it (otherwise we
28746         end up in an infinite loop, this is what Ravi was running into).
28747
28748         (ArrayCreation.UpdateIndices): Arrays might be empty.
28749
28750         (MemberAccess.ResolveMemberAccess): Add support for section
28751         14.5.4.1 that deals with the special case of E.I when E is a type
28752         and something else, that I can be a reference to a static member.
28753
28754         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
28755         handle a particular array type to create byte blobs, it is just
28756         something we dont generate byteblobs for.
28757
28758         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
28759         arguments. 
28760
28761         * location.cs (Push): remove the key from the hashtable that we
28762         are about to add.   This happens for empty files.
28763
28764         * driver.cs: Dispose files after we have parsed them.
28765
28766         (tokenize): new function that only runs the tokenizer on its
28767         input, for speed testing.
28768
28769 2001-12-26  Ravi Pratap  <ravi@ximian.com>
28770
28771         * class.cs (Event.Define): Define the private field only if there
28772         are no accessors defined.
28773
28774         * expression.cs (ResolveMemberAccess): If there is no associated
28775         field with the event, that means we have an event defined with its
28776         own accessors and we should flag error cs0070 since transforming
28777         ourselves into a field is not valid in that case.
28778
28779         * ecore.cs (SimpleName.DoResolve): Same as above.
28780
28781         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
28782         and charset to sane values.
28783
28784 2001-12-25  Ravi Pratap  <ravi@ximian.com>
28785
28786         * assign.cs (DoResolve): Perform check on events only if they 
28787         are being accessed outside the declaring type.
28788
28789         * cs-parser.jay (event_declarations): Update rules to correctly
28790         set the type of the implicit parameter etc.
28791
28792         (add_accessor, remove_accessor): Set current local parameters.
28793
28794         * expression.cs (Binary): For delegate addition and subtraction,
28795         cast the return value from the method into the appropriate delegate
28796         type.
28797
28798 2001-12-24  Ravi Pratap  <ravi@ximian.com>
28799
28800         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
28801         of these as the workaround is unnecessary.
28802
28803         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
28804         delegate data - none of that is needed at all.
28805
28806         Re-write bits to extract the instance expression and the delegate method
28807         correctly.
28808
28809         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
28810         on delegates too.
28811
28812         * attribute.cs (ApplyAttributes): New method to take care of common tasks
28813         of attaching attributes instead of duplicating code everywhere.
28814
28815         * everywhere : Update code to do attribute emission using the above method.
28816
28817 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
28818
28819         * expression.cs (IsParamsMethodApplicable): if there are not
28820         parameters, return immediately.
28821
28822         * ecore.cs: The 0 literal can be implicity converted to an enum
28823         type. 
28824
28825         (SimpleName.DoResolve): First lookup the type, then lookup the
28826         members. 
28827
28828         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
28829         want to get its address.  If the InstanceExpression is not
28830         addressable, store the result in a temporary variable, then get
28831         the address of it.
28832
28833         * codegen.cs: Only display 219 errors on warning level or above. 
28834
28835         * expression.cs (ArrayAccess): Make it implement the
28836         IMemoryLocation interface.
28837
28838         (Binary.DoResolve): handle the operator == (object a, object b)
28839         and operator != (object a, object b) without incurring into a
28840         BoxedCast (because 5 != o should never be performed).
28841
28842         Handle binary enumerator operators.
28843
28844         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
28845         value type, otherwise use Ldelem_ref.
28846
28847         Use precomputed names;
28848
28849         (AddressOf): Implement address of
28850
28851         * cs-parser.jay (labeled_statement): Fix recursive block
28852         addition by reworking the production.
28853
28854         * expression.cs (New.DoEmit): New has a special case:
28855                 
28856                  If we are dealing with a ValueType, we have a few
28857                  situations to deal with:
28858                 
28859                     * The target of New is a ValueType variable, that is
28860                       easy, we just pass this as the variable reference
28861                 
28862                     * The target of New is being passed as an argument,
28863                       to a boxing operation or a function that takes a
28864                       ValueType.
28865                 
28866                       In this case, we need to create a temporary variable
28867                       that is the argument of New.
28868
28869
28870 2001-12-23  Ravi Pratap  <ravi@ximian.com>
28871
28872         * rootcontext.cs (LookupType): Check that current_type is not null before
28873         going about looking at nested types.
28874
28875         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
28876         not implement the IAssignMethod interface any more.
28877
28878         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
28879         where we tranform them into FieldExprs if they are being resolved from within
28880         the declaring type.
28881
28882         * ecore.cs (SimpleName.DoResolve): Do the same here.
28883
28884         * assign.cs (DoResolve, Emit): Clean up code considerably. 
28885
28886         * ../errors/bug10.cs : Add.
28887
28888         * ../errors/cs0070.cs : Add.
28889
28890         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
28891
28892         * assign.cs : Get rid of EventIsLocal everywhere.
28893
28894 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
28895
28896         * ecore.cs (ConvertIntLiteral): finished the implementation.
28897
28898         * statement.cs (SwitchLabel): Convert the value we are using as a
28899         key before looking up the table.
28900
28901 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
28902
28903         * codegen.cs (EmitTopBlock): Require a Location argument now.
28904
28905         * cs-parser.jay (constructor_declarator): We need to setup
28906         current_local_parameters before we parse the
28907         opt_constructor_initializer, to allow the variables to be bound
28908         to the constructor arguments.
28909
28910         * rootcontext.cs (LookupType): First lookup nested classes in our
28911         class and our parents before we go looking outside our class.
28912
28913         * expression.cs (ConstantFold): Extract/debox the values at the
28914         beginnning. 
28915
28916         * rootcontext.cs (EmitCode): Resolve the constants first before we
28917         resolve the types.  This is not really needed, but it helps debugging.
28918
28919         * statement.cs: report location.
28920
28921         * cs-parser.jay: pass location to throw statement.
28922
28923         * driver.cs: Small bug fix.
28924
28925         * report.cs: Updated format to be 4-zero filled digits.
28926
28927 2001-12-22  Ravi Pratap  <ravi@ximian.com>
28928
28929         * expression.cs (CheckIndices): Fix minor bug where the wrong
28930         variable was being referred to ;-)
28931
28932         (DoEmit): Do not call EmitStaticInitializers when the 
28933         underlying type is System.Object.
28934
28935 2001-12-21  Ravi Pratap  <ravi@ximian.com>
28936
28937         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
28938         and do the usual workaround for SRE.
28939
28940         * class.cs (MyEventBuilder.EventType): New member to get at the type
28941         of the event, quickly.
28942
28943         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
28944
28945         * assign.cs (Assign.DoResolve): Handle the case when the target
28946         is an EventExpr and perform the necessary checks.
28947
28948         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
28949         interface.
28950
28951         (SimpleName.MemberStaticCheck): Include check for EventExpr.
28952
28953         (EventExpr): Set the type in the constructor itself since we 
28954         are meant to be born fully resolved.
28955
28956         (EventExpr.Define): Revert code I wrote earlier.
28957                 
28958         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
28959         instance expression is null. The instance expression is a This in that case
28960         or a null, depending on whether it is a static method or not.
28961
28962         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
28963         refers to more than one method.
28964
28965         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
28966         and accordingly flag errors.
28967
28968 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
28969
28970         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
28971
28972 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
28973
28974         * location.cs (ToString): Provide useful rutine.
28975
28976 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
28977
28978         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
28979         objects, return the actual integral boxed.
28980
28981         * statement.cs (SwitchLabel): define an ILLabel for each
28982         SwitchLabel. 
28983
28984         (Switch.CheckSwitch): If the value is a Literal, extract
28985         the underlying literal.
28986
28987         Also in the unused hashtable we had, add the SwitchLabel so we can
28988         quickly look this value up.
28989
28990         * constant.cs: Implement a bunch of new constants.  Rewrite
28991         Literal based on this.  Made changes everywhere to adapt to this.
28992
28993         * expression.cs (Expression.MakeByteBlob): Optimize routine by
28994         dereferencing array only once, and also copes with enumrations.
28995
28996         bytes are two bytes wide, not one.
28997
28998         (Cast): Perform constant conversions.
28999
29000         * ecore.cs (TryImplicitIntConversion): Return literals instead of
29001         wrappers to the literals here.
29002
29003         * expression.cs (DoNumericPromotions): long literals can converted
29004         to ulong implicity (this is taken care of elsewhere, but I was
29005         missing this spot).
29006
29007         * ecore.cs (Expression.Literalize): Make the return type Literal,
29008         to improve type checking.
29009
29010         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
29011
29012 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
29013
29014         * literal.cs: Revert code from ravi that checked the bounds.  The
29015         bounds are sane by the definition of the type itself. 
29016
29017         * typemanager.cs: Fix implementation of ImplementsInterface.  We
29018         need to actually look up in our parent hierarchy for interfaces
29019         implemented. 
29020
29021         * const.cs: Use the underlying type for enumerations
29022
29023         * delegate.cs: Compute the basename for the delegate creation,
29024         that should fix the delegate test case, and restore the correct
29025         Type Lookup semantics in rootcontext
29026
29027         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
29028         referencing a nested type with the Reflection API is using the "+"
29029         sign. 
29030
29031         * cs-parser.jay: Do not require EOF token at the end.
29032
29033 2001-12-20  Ravi Pratap  <ravi@ximian.com>
29034
29035         * rootcontext.cs (LookupType): Concatenate type names with
29036         a '.' instead of a '+' The test suite passes again.
29037
29038         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
29039         field of the enumeration.
29040
29041         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
29042         the case when the member is an EventExpr.
29043
29044         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
29045         static has an associated instance expression.
29046
29047         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
29048
29049         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
29050
29051         * class.cs (Event.Define): Register event and perform appropriate checks
29052         for error #111.
29053
29054         We define the Add and Remove methods even if the use provides none because
29055         in that case, we provide default implementations ourselves.
29056
29057         Define a private field of the type of the event. This is done by the CSC compiler
29058         and we should be doing it too ;-)
29059
29060         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
29061         More methods we use in code we generate.
29062
29063         (multicast_delegate_type, delegate_type): Two separate types since the distinction
29064         is important.
29065
29066         (InitCoreTypes): Update accordingly for the above.
29067
29068         * class.cs (Event.Emit): Generate code for default accessors that we provide
29069
29070         (EmitDefaultMethod): Do the job in the above.
29071
29072         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
29073         appropriate place.
29074
29075 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
29076
29077         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
29078         builders even if we were missing one.
29079
29080         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
29081         pass the Basename as our class name instead of the Name.  The
29082         basename will be correctly composed for us.
29083
29084         * parameter.cs (Paramters): Now takes a Location argument.
29085
29086         * decl.cs (DeclSpace.LookupType): Removed convenience function and
29087         make all the code call directly LookupType in RootContext and take
29088         this chance to pass the Location information everywhere.
29089
29090         * Everywhere: pass Location information.
29091
29092 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
29093
29094         * class.cs (Constructor.Define): Updated way of detecting the
29095         length of the parameters.
29096
29097         (TypeContainer.DefineType): Use basename as the type name for
29098         nested types.
29099
29100         (TypeContainer.Define): Do not recursively define types here, as
29101         definition is taken care in order by the RootContext.
29102
29103         * tree.cs: Keep track of namespaces in a per-file basis.
29104
29105         * parameter.cs (Parameter.ComputeSignature): Update to use
29106         DeclSpace. 
29107
29108         (Parameters.GetSignature): ditto.
29109
29110         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
29111         instead of a TypeContainer.
29112
29113         (Interface.SemanticAnalysis): Use `this' instead of our parent to
29114         resolve names.  Because we need to be resolve in our context, not
29115         our parents.
29116
29117         * driver.cs: Implement response files.
29118
29119         * class.cs (TypeContainer.DefineType): If we are defined, do not
29120         redefine ourselves.
29121
29122         (Event.Emit): Emit the code for add/remove handlers.
29123         (Event.Define): Save the MethodBuilders for add/remove.
29124
29125         * typemanager.cs: Use pair here too.
29126
29127         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
29128         DictionaryEntry requires the first argument to be non-null.  
29129
29130         (enum_declaration): Compute full name for registering the
29131         enumeration.
29132
29133         (delegate_declaration): Instead of using
29134         formal_parameter_list, use opt_formal_parameter_list as the list
29135         can be empty.
29136
29137         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
29138         (EventParsing): New property that controls whether `add' and
29139         `remove' are returned as tokens or identifiers (for events);
29140
29141 2001-12-19  Ravi Pratap  <ravi@ximian.com>
29142
29143         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
29144         use MyEventBuilder only and let it wrap the real builder for us.
29145
29146         (MyEventBuilder): Revamp constructor etc.
29147
29148         Implement all operations that we perform on EventBuilder in precisely the same
29149         way here too.
29150
29151         (FindMembers): Update to use the EventBuilder member.
29152
29153         (Event.Emit): Update accordingly.
29154
29155 2001-12-18  Ravi Pratap  <ravi@ximian.com>
29156
29157         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
29158         by calling the appropriate methods.
29159
29160         (GetCustomAttributes): Make stubs as they cannot possibly do anything
29161         useful.
29162
29163         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
29164
29165 2001-12-17  Ravi Pratap  <ravi@ximian.com>
29166
29167         * delegate.cs (Delegate.Populate): Check that the return type
29168         and various parameters types are indeed accessible.
29169
29170         * class.cs (Constructor.Define): Same here.
29171
29172         (Field.Define): Ditto.
29173
29174         (Event.Define): Ditto.
29175
29176         (Operator.Define): Check that the underlying Method defined itself
29177         correctly - so it's MethodBuilder should not be null.
29178
29179         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
29180         expression happens to be null.
29181
29182         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
29183         members but as of now we don't seem to be able to do anything really useful with it.
29184
29185         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
29186         not the EventBuilder.
29187
29188 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
29189
29190         * cs-tokenizer.cs: Add support for defines.
29191         Add support for #if, #elif, #else, #endif
29192
29193         (eval_var): evaluates a variable.
29194         (eval): stubbed for evaluating functions.
29195
29196         * cs-parser.jay: Pass the defines information
29197
29198         * driver.cs: Add --define command line option.
29199
29200         * decl.cs: Move MemberCore here.
29201
29202         Make it the base class for DeclSpace.  This allows us to catch and
29203         report 108 and 109 for everything now.
29204
29205         * class.cs (TypeContainer.Define): Extract all the members
29206         before populating and emit the warning 108 (new keyword required
29207         to override) instead of having each member implement this.
29208
29209         (MemberCore.Define): New abstract method, we will be using this in
29210         the warning reporting engine in Populate.
29211
29212         (Operator.Define): Adjust to new MemberCore protocol. 
29213
29214         * const.cs (Const): This does not derive from Expression, it is a
29215         temporary object we use to create fields, it is a MemberCore. 
29216
29217         * class.cs (Method.Define): Allow the entry point to be in a
29218         specific class.
29219
29220         * driver.cs: Rewrite the argument handler to clean it up a bit.
29221
29222         * rootcontext.cs: Made it just an auxiliary namespace feature by
29223         making everything static.
29224
29225         * driver.cs: Adapt code to use RootContext type name instead of
29226         instance variable.
29227
29228         * delegate.cs: Remove RootContext argument.
29229
29230         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
29231         argument. 
29232
29233         * class.cs (Event.Define): The lookup can fail.
29234
29235         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
29236
29237         * expression.cs: Resolve the this instance before invoking the code.
29238
29239 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
29240
29241         * cs-parser.jay: Add a production in element_access that allows
29242         the thing to become a "type" reference.  This way we can parse
29243         things like "(string [])" as a type.
29244
29245         Note that this still does not handle the more complex rules of
29246         casts. 
29247
29248
29249         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
29250
29251         * ecore.cs: (CopyNewMethods): new utility function used to
29252         assemble the list of methods from running FindMembers.
29253
29254         (MemberLookup): Rework FindMembers so that 
29255
29256 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
29257
29258         * class.cs (TypeContainer): Remove Delegates who fail to be
29259         defined.
29260
29261         * delegate.cs (Populate): Verify that we dont get null return
29262         values.   TODO: Check for AsAccessible.
29263
29264         * cs-parser.jay: Use basename to emit error 574 (destructor should
29265         have the same name as container class), not the full name.
29266
29267         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
29268         possible representation.  
29269
29270         Also implements integer type suffixes U and L.
29271
29272 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
29273
29274         * expression.cs (ArrayCreation.DoResolve): We need to do the
29275         argument resolution *always*.
29276
29277         * decl.cs: Make this hold the namespace.  Hold the root context as
29278         well.
29279         (LookupType): Move here.
29280
29281         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
29282
29283         * location.cs (Row, Name): Fixed the code, it was always returning
29284         references to the first file.
29285
29286         * interface.cs: Register properties defined through interfaces.
29287
29288         * driver.cs: Add support for globbing on the command line
29289
29290         * class.cs (Field): Make it derive from MemberCore as well.
29291         (Event): ditto.
29292
29293 2001-12-15  Ravi Pratap  <ravi@ximian.com>
29294
29295         * class.cs (Event::Define): Check that the type of the event is a delegate
29296         type else flag error #66.
29297
29298         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
29299         same.
29300
29301         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
29302         values of EntryPoint, CharSet etc etc.
29303
29304         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
29305
29306         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
29307         be null and we should ignore this. I am not sure if this is really clean. Apparently,
29308         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
29309         which needs this to do its work.
29310
29311         * ../errors/cs0066.cs : Add.
29312
29313 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
29314
29315         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
29316         helper functions.
29317
29318         * class.cs: (MethodSignature.MethodSignature): Removed hack that
29319         clears out the parameters field.
29320         (MemberSignatureCompare): Cleanup
29321
29322         (MemberCore): New base class used to share code between MethodCore
29323         and Property.
29324
29325         (RegisterRequiredImplementations) BindingFlags.Public requires
29326         either BindingFlags.Instace or Static.  Use instance here.
29327
29328         (Property): Refactored code to cope better with the full spec.
29329
29330         * parameter.cs (GetParameterInfo): Return an empty array instead
29331         of null on error.
29332
29333         * class.cs (Property): Abstract or extern properties have no bodies.
29334
29335         * parameter.cs (GetParameterInfo): return a zero-sized array.
29336
29337         * class.cs (TypeContainer.MethodModifiersValid): Move all the
29338         method modifier validation to the typecontainer so we can reuse
29339         this on properties.
29340
29341         (MethodCore.ParameterTypes): return an empty sized array of types.
29342
29343         (Property.Define): Test property modifier validity.
29344
29345         Add tests for sealed/override too.
29346
29347         (Method.Emit): abstract or extern methods have no bodies.
29348
29349 2001-12-14  Ravi Pratap  <ravi@ximian.com>
29350
29351         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
29352         thing.
29353
29354         (Method::Define, ::Emit): Modify accordingly.
29355
29356         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
29357
29358         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
29359
29360         * makefile: Pass in /unsafe.
29361
29362 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
29363
29364         * class.cs (MakeKey): Kill routine.
29365
29366         * class.cs (TypeContainer.Define): Correctly define explicit
29367         method implementations (they require the full interface name plus
29368         the method name).
29369
29370         * typemanager.cs: Deply the PtrHashtable here and stop using the
29371         lame keys.  Things work so much better.
29372
29373         This of course broke everyone who depended on `RegisterMethod' to
29374         do the `test for existance' test.  This has to be done elsewhere.
29375
29376         * support.cs (PtrHashtable): A hashtable that avoid comparing with
29377         the object stupid Equals method (because, that like fails all over
29378         the place).  We still do not use it.
29379
29380         * class.cs (TypeContainer.SetRequiredInterface,
29381         TypeContainer.RequireMethods): Killed these two routines and moved
29382         all the functionality to RegisterRequiredImplementations.
29383
29384         (TypeContainer.RegisterRequiredImplementations): This routine now
29385         registers all the implementations required in an array for the
29386         interfaces and abstract methods.  We use an array of structures
29387         which can be computed ahead of time to reduce memory usage and we
29388         also assume that lookups are cheap as most classes will not
29389         implement too many interfaces.
29390
29391         We also avoid creating too many MethodSignatures.
29392
29393         (TypeContainer.IsInterfaceMethod): Update and optionally does not
29394         clear the "pending" bit if we find that there are problems with
29395         the declaration.
29396
29397         (TypeContainer.VerifyPendingMethods): Update to report errors of
29398         methods that look like implementations but are not.
29399
29400         (TypeContainer.Define): Add support for explicit interface method
29401         implementation. 
29402
29403 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
29404
29405         * typemanager.cs: Keep track of the parameters here instead of
29406         being a feature of the TypeContainer.
29407
29408         * class.cs: Drop the registration of parameters here, as
29409         InterfaceMethods are also interface declarations.
29410
29411         * delegate.cs: Register methods with the TypeManager not only with
29412         the TypeContainer.  This code was buggy.
29413
29414         * interface.cs: Full registation here.
29415
29416 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
29417
29418         * expression.cs: Remove reducer for binary expressions, it can not
29419         be done this way.
29420
29421         * const.cs: Put here the code that used to go into constant.cs
29422
29423         * constant.cs: Put here the code for constants, this is a new base
29424         class for Literals.
29425
29426         * literal.cs: Make Literal derive from Constant.
29427
29428 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
29429
29430         * statement.cs (Return.Emit): Report error 157 if the user
29431         attempts to return from a finally block.
29432
29433         (Return.Emit): Instead of emitting a return, jump to the end of
29434         the function.
29435
29436         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
29437         LocalBuilder to store the result of the function.  ReturnLabel is
29438         the target where we jump.
29439
29440
29441 2001-12-09  Radek Doulik  <rodo@ximian.com>
29442
29443         * cs-parser.jay: remember alias in current namespace
29444
29445         * ecore.cs (SimpleName::DoResolve): use aliases for types or
29446         namespaces
29447
29448         * class.cs (LookupAlias): lookup alias in my_namespace
29449
29450         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
29451         aliases hashtable
29452         (LookupAlias): lookup alias in this and if needed in parent
29453         namespaces
29454
29455 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
29456
29457         * support.cs: 
29458
29459         * rootcontext.cs: (ModuleBuilder) Made static, first step into
29460         making things static.  I need this to avoid passing the
29461         TypeContainer when calling ParameterType.
29462
29463         * support.cs (InternalParameters.ParameterType): Remove ugly hack
29464         that did string manipulation to compute the type and then call
29465         GetType.  Use Parameter.ParameterType instead.
29466
29467         * cs-tokenizer.cs: Consume the suffix for floating values.
29468
29469         * expression.cs (ParameterReference): figure out whether this is a
29470         reference parameter or not.  Kill an extra variable by computing
29471         the arg_idx during emission.
29472
29473         * parameter.cs (Parameters.GetParameterInfo): New overloaded
29474         function that returns whether a parameter is an out/ref value or not.
29475
29476         (Parameter.ParameterType): The type of the parameter (base,
29477         without ref/out applied).
29478
29479         (Parameter.Resolve): Perform resolution here.
29480         (Parameter.ExternalType): The full type (with ref/out applied).
29481
29482         * statement.cs (Using.Emit, Using.EmitExpression): Implement
29483         support for expressions on the using statement.
29484
29485 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
29486
29487         * statement.cs (Using.EmitLocalVariableDecls): Split the
29488         localvariable handling of the using statement.
29489
29490         (Block.EmitMeta): Keep track of variable count across blocks.  We
29491         were reusing slots on separate branches of blocks.
29492
29493         (Try.Emit): Emit the general code block, we were not emitting it. 
29494
29495         Check the type of the declaration to be an IDisposable or
29496         something that can be implicity converted to it. 
29497
29498         Emit conversions if required.
29499
29500         * ecore.cs (EmptyExpression): New utility class.
29501         (Expression.ImplicitConversionExists): New utility function.
29502
29503 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
29504
29505         * statement.cs (Using): Implement.
29506
29507         * expression.cs (LocalVariableReference): Support read only variables.
29508
29509         * statement.cs: Remove the explicit emit for the Leave opcode.
29510         (VariableInfo): Add a readonly field.
29511
29512 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
29513
29514         * ecore.cs (ConvCast): new class used to encapsulate the various
29515         explicit integer conversions that works in both checked and
29516         unchecked contexts.
29517
29518         (Expression.ConvertNumericExplicit): Use new ConvCast class to
29519         properly generate the overflow opcodes.
29520
29521 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
29522
29523         * statement.cs: The correct type for the EmptyExpression is the
29524         element_type, not the variable type.  Ravi pointed this out.
29525
29526 2001-12-04  Ravi Pratap  <ravi@ximian.com>
29527
29528         * class.cs (Method::Define): Handle PInvoke methods specially
29529         by using DefinePInvokeMethod instead of the usual one.
29530
29531         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
29532         above to do the task of extracting information and defining the method.
29533
29534 2001-12-04  Ravi Pratap  <ravi@ximian.com>
29535
29536         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
29537         of the condition for string type.
29538
29539         (Emit): Move that here. 
29540
29541         (ArrayCreation::CheckIndices): Keep string literals in their expression
29542         form.
29543
29544         (EmitDynamicInitializers): Handle strings appropriately.
29545
29546 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
29547
29548         * codegen.cs (EmitContext): Replace multiple variables with a
29549         single pointer to the current Switch statement.
29550
29551         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
29552         EmitContext.
29553
29554 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
29555
29556         * statement.cs 
29557
29558         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
29559         default'.
29560
29561         (Foreach.Emit): Foreach on arrays was not setting
29562         up the loop variables (for break/continue).
29563
29564         (GotoCase): Semi-implented.
29565
29566 2001-12-03  Ravi Pratap  <ravi@ximian.com>
29567
29568         * attribute.cs (CheckAttribute): Handle system attributes by using
29569         Attribute.GetAttributes to examine information we need.
29570
29571         (GetValidPlaces): Same here.
29572
29573         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
29574
29575         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
29576
29577         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
29578
29579         (Method::Define): Set appropriate flags if we have a DllImport attribute.
29580
29581         (Method::Emit): Handle the case when we are a PInvoke method.
29582
29583 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
29584
29585         * expression.cs: Use ResolveWithSimpleName on compound names.
29586
29587 2001-12-02  Ravi Pratap  <ravi@ximian.com>
29588
29589         * constant.cs (EmitConstant): Make sure we resolve the associated expression
29590         before trying to reduce it.
29591
29592         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
29593
29594         * constant.cs (LookupConstantValue): Implement.
29595
29596         (EmitConstant): Use the above in emitting the constant.
29597
29598         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
29599         that are user-defined by doing a LookupConstantValue on them.
29600
29601         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
29602         too, like above.
29603
29604 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
29605
29606         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
29607
29608         (BaseAccess.DoResolve): Implement.
29609
29610         (MemberAccess.DoResolve): Split this routine into a
29611         ResolveMemberAccess routine that can be used independently
29612
29613 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
29614
29615         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
29616         As that share bits of the implementation.  Is returns a boolean,
29617         while As returns the Type that is being probed.
29618
29619 2001-12-01  Ravi Pratap  <ravi@ximian.com>
29620
29621         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
29622         instead of a Literal - much easier.
29623
29624         (EnumInTransit): Remove - utterly useless :-)
29625
29626         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
29627
29628         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
29629
29630         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
29631         chain when we have no associated expression.
29632
29633 2001-11-30  Ravi Pratap  <ravi@ximian.com>
29634
29635         * constant.cs (Define): Use Location while reporting the errror.
29636
29637         Also emit a warning when 'new' is used and there is no inherited
29638         member to hide.
29639
29640         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
29641         populated.
29642
29643         (LookupEnumValue): Implement to lookup an enum member's value and define it
29644         if necessary.
29645
29646         (Populate): Re-write accordingly to use the above routine.
29647
29648 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
29649
29650         * expression.cs (This): Fix prototype for DoResolveLValue to
29651         override the base class DoResolveLValue.
29652
29653         * cs-parser.cs: Report errors cs574 and cs575 (destructor
29654         declarations) 
29655
29656         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
29657         (we need to load the address of the field here).  This fixes
29658         test-22. 
29659
29660         (FieldExpr.DoResolveLValue): Call the DoResolve
29661         function to initialize the Instance expression.
29662
29663         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
29664         correctly the GetEnumerator operation on a value type.
29665
29666         * cs-parser.jay: Add more simple parsing error catches.
29667
29668         * statement.cs (Switch): Add support for string switches.
29669         Handle null specially.
29670
29671         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
29672
29673 2001-11-28  Ravi Pratap  <ravi@ximian.com>
29674
29675         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
29676
29677         (declare_local_constant): New helper function.
29678
29679         * statement.cs (AddConstant): Keep a separate record of constants
29680
29681         (IsConstant): Implement to determine if a variable is a constant.
29682
29683         (GetConstantExpression): Implement.
29684
29685         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
29686
29687         * statement.cs (IsVariableDefined): Re-write.
29688
29689 2001-11-27  Ravi Pratap  <ravi@ximian.com>
29690
29691         * class.cs (TypeContainer::FindMembers): Look for constants
29692         in the case when we are looking for MemberTypes.Field
29693
29694         * expression.cs (MemberAccess::DoResolve): Check that in the
29695         case we are a FieldExpr and a Literal, we are not being accessed
29696         by an instance reference.
29697
29698         * cs-parser.jay (local_constant_declaration): Implement.
29699
29700         (declaration_statement): Implement for constant declarations.
29701
29702 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
29703
29704         * statement.cs (Switch): Catch double defaults.
29705
29706         (Switch): More work on the switch() statement
29707         implementation.  It works for integral values now, need to finish
29708         string support.
29709
29710
29711 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
29712
29713         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
29714         integer literals into other integer literals.  To be used by
29715         switch. 
29716
29717 2001-11-24  Ravi Pratap  <ravi@ximian.com>
29718
29719         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
29720         some memory.
29721
29722         (EmitDynamicInitializers): Cope with the above since we extract data
29723         directly from ArrayData now.
29724
29725         (ExpectInitializers): Keep track of whether initializers are mandatory
29726         or not.
29727
29728         (Bounds): Make it a hashtable to prevent the same dimension being 
29729         recorded for every element in that dimension.
29730
29731         (EmitDynamicInitializers): Fix bug which prevented the Set array method
29732         from being found.
29733
29734         Also fix bug which was causing the indices to be emitted in the reverse
29735         order.
29736
29737 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
29738
29739         * expression.cs (ArrayCreation): Implement the bits that Ravi left
29740         unfinished.  They do not work, because the underlying code is
29741         sloppy.
29742
29743 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
29744
29745         * cs-parser.jay: Remove bogus fixme.
29746
29747         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
29748         on Switch statement.
29749
29750 2001-11-23  Ravi Pratap  <ravi@ximian.com>
29751
29752         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
29753         the same. 
29754
29755         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
29756         parameter. Apparently, any expression is allowed. 
29757
29758         (ValidateInitializers): Update accordingly.
29759
29760         (CheckIndices): Fix some tricky bugs thanks to recursion.
29761
29762         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
29763         I was being completely brain-dead.
29764
29765         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
29766         and re-write acordingly.
29767
29768         (DelegateInvocation): Re-write accordingly.
29769
29770         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
29771
29772         (MakeByteBlob): Handle types more correctly.
29773
29774         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
29775         initialization from expressions but it is incomplete because I am a complete
29776         Dodo :-|
29777
29778 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
29779
29780         * statement.cs (If.Emit): Fix a bug that generated incorrect code
29781         on If.  Basically, we have to return `true' (ie, we do return to
29782         our caller) only if both branches of the if return.
29783
29784         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
29785         short-circuit operators, handle them as short circuit operators. 
29786
29787         (Cast.DoResolve): Resolve type.
29788         (Cast.Cast): Take an expression as the target type.
29789
29790         * cs-parser.jay (cast_expression): Remove old hack that only
29791         allowed a limited set of types to be handled.  Now we take a
29792         unary_expression and we resolve to a type during semantic
29793         analysis.
29794
29795         Use the grammar productions from Rhys to handle casts (this is
29796         not complete like Rhys syntax yet, we fail to handle that corner
29797         case that C# has regarding (-x), but we will get there.
29798
29799 2001-11-22  Ravi Pratap  <ravi@ximian.com>
29800
29801         * class.cs (EmitFieldInitializer): Take care of the case when we have a
29802         field which is an array type.
29803
29804         * cs-parser.jay (declare_local_variables): Support array initialization too.
29805
29806         * typemanager.cs (MakeKey): Implement.
29807
29808         (everywhere): Use the above appropriately.
29809
29810         * cs-parser.jay (for_statement): Update for array initialization while
29811         declaring variables.
29812
29813         * ecore.cs : The error message was correct, it's the variable's names that
29814         were misleading ;-) Make the code more readable.
29815
29816         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
29817         the correct type etc.
29818
29819         (ConvertExplicit): Handle Enum types by examining the underlying type.
29820
29821 2001-11-21  Ravi Pratap  <ravi@ximian.com>
29822
29823         * parameter.cs (GetCallingConvention): Always return
29824         CallingConventions.Standard for now.
29825
29826 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
29827
29828         * expression.cs (Binary.ResolveOperator): Update the values of `l'
29829         and `r' after calling DoNumericPromotions.
29830
29831         * ecore.cs: Fix error message (the types were in the wrong order).
29832
29833         * statement.cs (Foreach.ProbeCollectionType): Need to pass
29834         BindingFlags.Instance as well 
29835
29836         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
29837         implicit int literal conversion in an empty cast so that we
29838         propagate the right type upstream.
29839
29840         (UnboxCast): new class used to unbox value types.
29841         (Expression.ConvertExplicit): Add explicit type conversions done
29842         by unboxing.
29843
29844         (Expression.ImplicitNumericConversion): Oops, forgot to test for
29845         the target type before applying the implicit LongLiterals to ULong
29846         literal cast.
29847
29848 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
29849
29850         * cs-parser.jay (for_statement): Reworked the way For works: now
29851         we declare manually any variables that are introduced in
29852         for_initializer to solve the problem of having out-of-band code
29853         emition (that is what got for broken).
29854
29855         (declaration_statement): Perform the actual variable declaration
29856         that used to be done in local_variable_declaration here.
29857
29858         (local_variable_declaration): Do not declare anything, just pass
29859         the information on a DictionaryEntry
29860
29861 2001-11-20  Ravi Pratap  <ravi@ximian.com>
29862
29863         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
29864         re-write of the logic to now make it recursive.
29865
29866         (UpdateIndices): Re-write accordingly.
29867
29868         Store element data in a separate ArrayData list in the above methods.
29869
29870         (MakeByteBlob): Implement to dump the array data into a byte array.
29871
29872 2001-11-19  Ravi Pratap  <ravi@ximian.com>
29873
29874         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
29875         into CheckIndices.
29876
29877         * constant.cs (Define): Implement.
29878
29879         (EmitConstant): Re-write fully.
29880
29881         Pass in location info.
29882
29883         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
29884         respectively.
29885
29886         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
29887         DictionaryEntry since we need location info too.
29888
29889         (constant_declaration): Update accordingly.
29890
29891         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
29892         code into another method : UpdateIndices.
29893
29894 2001-11-18  Ravi Pratap  <ravi@ximian.com>
29895
29896         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
29897         some type checking etc.
29898
29899 2001-11-17  Ravi Pratap  <ravi@ximian.com>
29900
29901         * expression.cs (ArrayCreation::ValidateInitializers): Implement
29902         bits to provide dimension info if the user skips doing that.
29903
29904         Update second constructor to store the rank correctly.
29905
29906 2001-11-16  Ravi Pratap  <ravi@ximian.com>
29907
29908         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
29909         and try to implement.
29910
29911         * ../errors/cs0150.cs : Add.
29912
29913         * ../errors/cs0178.cs : Add.
29914
29915 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
29916
29917         * statement.cs: Implement foreach on multi-dimensional arrays. 
29918
29919         * parameter.cs (Parameters.GetParameterByName): Also lookup the
29920         name of the params argument.
29921
29922         * expression.cs: Use EmitStoreOpcode to get the right opcode while
29923         initializing the array.
29924
29925         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
29926         we can use this elsewhere.
29927
29928         * statement.cs: Finish implementation of foreach for single
29929         dimension arrays.
29930
29931         * cs-parser.jay: Use an out-of-band stack to pass information
29932         around, I wonder why I need this.
29933
29934         foreach_block: Make the new foreach_block the current_block.
29935
29936         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
29937         function used to return a static Parameters structure.  Used for
29938         empty parameters, as those are created very frequently.
29939
29940         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
29941
29942 2001-11-15  Ravi Pratap  <ravi@ximian.com>
29943
29944         * interface.cs : Default modifier is private, not public. The
29945         make verify test passes again.
29946
29947 2001-11-15  Ravi Pratap  <ravi@ximian.com>
29948
29949         * support.cs (ReflectionParameters): Fix logic to determine
29950         whether the last parameter is a params one. Test 9 passes again.
29951
29952         * delegate.cs (Populate): Register the builders we define with
29953         RegisterParameterForBuilder. Test 19 passes again.
29954
29955         * cs-parser.jay (property_declaration): Reference $6 instead
29956         of $$ to get at the location.
29957
29958         (indexer_declaration): Similar stuff.
29959
29960         (attribute): Ditto.
29961
29962         * class.cs (Property): Register parameters for the Get and Set methods
29963         if they exist. Test 23 passes again.
29964
29965         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
29966         call to EmitArguments as we are sure there aren't any params arguments. 
29967         Test 32 passes again.
29968
29969         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
29970         IndexOutOfRangeException. 
29971
29972         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
29973         Test 33 now passes again.
29974
29975 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
29976
29977         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
29978         broke a bunch of things.  Will have to come up with a better way
29979         of tracking locations.
29980
29981         * statement.cs: Implemented foreach for single dimension arrays.
29982
29983 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
29984
29985         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
29986         an error.  This removes the lookup from the critical path.
29987
29988         * cs-parser.jay: Removed use of temporary_loc, which is completely
29989         broken. 
29990
29991 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
29992
29993         * support.cs (ReflectionParameters.ParameterModifier): Report
29994         whether the argument is a PARAMS argument or not.
29995
29996         * class.cs: Set the attribute `ParamArrayAttribute' on the
29997         parameter argument.
29998
29999         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
30000         and cons_param_array_attribute (ConstructorInfo for
30001         ParamArrayAttribute)., 
30002
30003         * codegen.cs: Emit the return using the `Return' statement, that
30004         way we can report the error correctly for missing return values. 
30005
30006         * class.cs (Method.Emit): Clean up.
30007
30008         * expression.cs (Argument.Resolve): Take another argument: the
30009         location where this argument is used.  Notice that this is not
30010         part of the "Argument" class as to reduce the size of the
30011         structure (we know the approximate location anyways).
30012
30013         Test if the argument is a variable-reference, if not, then
30014         complain with a 206.
30015
30016         (Argument.Emit): Emit addresses of variables.
30017
30018         (Argument.FullDesc): Simplify.
30019
30020         (Invocation.DoResolve): Update for Argument.Resolve.
30021
30022         (ElementAccess.DoResolve): ditto.
30023
30024         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
30025         method should be virtual, as this method is always virtual.
30026
30027         (NewDelegate.DoResolve): Update for Argument.Resolve.
30028
30029         * class.cs (ConstructorInitializer.DoResolve): ditto.
30030
30031         * attribute.cs (Attribute.Resolve): ditto.
30032
30033 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
30034
30035         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
30036
30037         * expression.cs (ParameterReference): Drop IStackStorage and implement
30038         IAssignMethod instead. 
30039
30040         (LocalVariableReference): ditto.
30041
30042         * ecore.cs (FieldExpr): Drop IStackStorage and implement
30043         IAssignMethod instead. 
30044
30045 2001-11-13  Miguel de Icaza <miguel@ximian.com>
30046
30047         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
30048         enumerations that are used in heavily used structures derive from
30049         byte in a laughable and pathetic attempt to reduce memory usage.
30050         This is the kind of pre-optimzations that you should not do at
30051         home without adult supervision.
30052
30053         * expression.cs (UnaryMutator): New class, used to handle ++ and
30054         -- separatedly from the other unary operators.  Cleans up the
30055         code, and kills the ExpressionStatement dependency in Unary.
30056
30057         (Unary): Removed `method' and `Arguments' from this class, making
30058         it smaller, and moving it all to SimpleCall, so I can reuse this
30059         code in other locations and avoid creating a lot of transient data
30060         strucutres when not required.
30061
30062         * cs-parser.jay: Adjust for new changes.
30063
30064 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
30065
30066         * enum.cs (Enum.Populate): If there is a failure during
30067         definition, return
30068
30069         * cs-parser.jay (opt_enum_base): we used to catch type errors
30070         here, but this is really incorrect.  The type error should be
30071         catched during semantic analysis.
30072
30073 2001-12-11  Ravi Pratap  <ravi@ximian.com>
30074
30075         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
30076         current_local_parameters as expected since I, in my stupidity, had forgotten
30077         to do this :-)
30078
30079         * attribute.cs (GetValidPlaces): Fix stupid bug.
30080
30081         * class.cs (Method::Emit): Perform check on applicability of attributes.
30082
30083         (Constructor::Emit): Ditto.
30084
30085         (Field::Emit): Ditto.
30086
30087         (Field.Location): Store location information.
30088
30089         (Property, Event, Indexer, Operator): Ditto.
30090
30091         * cs-parser.jay (field_declaration): Pass in location for each field.
30092
30093         * ../errors/cs0592.cs : Add.
30094
30095 2001-11-12  Ravi Pratap  <ravi@ximian.com>
30096
30097         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
30098
30099         (InitCoreTypes): Update accordingly.
30100
30101         (RegisterAttrType, LookupAttr): Implement.
30102
30103         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
30104         info about the same.
30105
30106         (Resolve): Update to populate the above as necessary.
30107
30108         (Error592): Helper.
30109
30110         (GetValidPlaces): Helper to the above.
30111
30112         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
30113
30114         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
30115
30116 2001-11-12  Ravi Pratap  <ravi@ximian.com>
30117
30118         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
30119
30120         * ../errors/cs0617.cs : Add.
30121
30122 2001-11-11  Ravi Pratap  <ravi@ximian.com>
30123
30124         * enum.cs (Emit): Rename to Populate to be more consistent with what
30125         we expect it to do and when exactly it is called.
30126
30127         * class.cs, rootcontext.cs : Update accordingly.
30128
30129         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
30130         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
30131
30132         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
30133
30134         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
30135         of a fieldinfo using the above, when dealing with a FieldBuilder.
30136
30137 2001-11-10  Ravi Pratap  <ravi@ximian.com>
30138
30139         * ../errors/cs0031.cs : Add.
30140
30141         * ../errors/cs1008.cs : Add.
30142
30143         * ../errrors/cs0543.cs : Add.
30144
30145         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
30146         enum type.
30147
30148         (FindMembers): Implement.
30149
30150         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
30151         enums and delegates too.
30152
30153         (enum_types): Rename to builder_to_enum.
30154
30155         (delegate_types): Rename to builder_to_delegate.
30156
30157         * delegate.cs (FindMembers): Implement.
30158
30159 2001-11-09  Ravi Pratap  <ravi@ximian.com>
30160
30161         * typemanager.cs (IsEnumType): Implement.
30162
30163         * enum.cs (Emit): Re-write parts to account for the underlying type
30164         better and perform checking etc.
30165
30166         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
30167         of the underlying type.
30168
30169         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
30170         value
30171
30172         * enum.cs (error31): Helper to report error #31.
30173
30174         * cs-parser.jay (enum_declaration): Store location of each member too.
30175
30176         * enum.cs (member_to_location): New hashtable. 
30177
30178         (AddEnumMember): Update location hashtable.
30179
30180         (Emit): Use the location of each member while reporting errors.
30181
30182 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
30183
30184         * cs-parser.jay: A for_initializer if is a
30185         local_variable_declaration really ammount to have an implicit
30186         block with the variable declaration and no initializer for for.
30187
30188         * statement.cs (For.Emit): Cope with null initializers.
30189
30190         This fixes the infinite loop on for initializers.
30191
30192 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
30193
30194         * enum.cs: More cleanup.
30195
30196         * ecore.cs: Remove dead code.
30197
30198         * class.cs (Property.Emit): More simplification.
30199         (Event.Emit): ditto.
30200
30201         Reworked to have less levels of indentation.
30202
30203 2001-11-08  Ravi Pratap  <ravi@ximian.com>
30204
30205         * class.cs (Property): Emit attributes.
30206
30207         (Field): Ditto.
30208
30209         (Event): Ditto.
30210
30211         (Indexer): Ditto.
30212
30213         (Operator): Ditto.
30214
30215         * enum.cs (Emit): Ditto.
30216
30217         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
30218         Enums too.
30219
30220         * class.cs (Field, Event, etc.): Move attribute generation into the
30221         Emit method everywhere.
30222
30223         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
30224         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
30225         as we had no way of defining nested enums !
30226
30227         * rootcontext.cs : Adjust code accordingly.
30228
30229         * typemanager.cs (AddEnumType): To keep track of enum types separately.
30230
30231 2001-11-07  Ravi Pratap  <ravi@ximian.com>
30232
30233         * expression.cs (EvalConstantExpression): Move into ecore.cs
30234
30235         * enum.cs (Enum): Rename some members and make them public and readonly
30236         according to our convention.
30237
30238         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
30239         nothing else.
30240
30241         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
30242
30243         (Enum::Emit): Write a simple version for now which doesn't try to compute
30244         expressions. I shall modify this to be more robust in just a while.
30245
30246         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
30247
30248         (TypeContainer::CloseType): Create the Enum types too.
30249
30250         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
30251
30252         * expression.cs (EvalConstantExpression): Get rid of completely.
30253
30254         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
30255         user-defined values and other cases.
30256
30257         (IsValidEnumLiteral): Helper function.
30258
30259         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
30260         out there in the case we had a literal FieldExpr.
30261
30262         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
30263
30264         (Literalize): Revamp a bit to take two arguments.
30265
30266         (EnumLiteral): New class which derives from Literal to wrap enum literals.
30267
30268 2001-11-06  Ravi Pratap  <ravi@ximian.com>
30269
30270         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
30271
30272         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
30273
30274         (Resolve): Use the above to ensure we have proper initializers.
30275
30276 2001-11-05  Ravi Pratap  <ravi@ximian.com>
30277
30278         * expression.cs (Expression::EvalConstantExpression): New method to 
30279         evaluate constant expressions.
30280
30281         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
30282
30283 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
30284
30285         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
30286         in an array.
30287
30288         (Binary.ResolveOperator): Handle operator != (object a, object b)
30289         and operator == (object a, object b);
30290
30291         (Binary.DoNumericPromotions): Indicate whether the numeric
30292         promotion was possible.
30293
30294         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
30295         Implement.  
30296
30297         Made the ArrayAccess implement interface IAssignMethod instead of
30298         IStackStore as the order in which arguments are passed reflects
30299         this.
30300
30301         * assign.cs: Instead of using expr.ExprClass to select the way of
30302         assinging, probe for the IStackStore/IAssignMethod interfaces.
30303
30304         * typemanager.cs: Load InitializeArray definition.
30305
30306         * rootcontext.cs (RootContext.MakeStaticData): Used to define
30307         static data that can be used to initialize arrays. 
30308
30309 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
30310
30311         * expression.cs: Handle operator== and operator!= for booleans.
30312
30313         (Conditioal.Reduce): Implement reducer for the ?: operator.
30314
30315         (Conditional.Resolve): Implement dead code elimination.
30316
30317         (Binary.Resolve): Catch string literals and return a new
30318         concatenated string.
30319
30320         (Unary.Reduce): Implement reduction of unary expressions.
30321
30322         * ecore.cs: Split out the expression core handling here.
30323
30324         (Expression.Reduce): New method used to perform constant folding
30325         and CSE.  This is needed to support constant-expressions. 
30326
30327         * statement.cs (Statement.EmitBoolExpression): Pass true and false
30328         targets, and optimize for !x.
30329
30330 2001-11-04  Ravi Pratap  <ravi@ximian.com>
30331
30332         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
30333         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
30334         set custom atttributes.
30335
30336         * literal.cs (Literal::GetValue): New abstract method to return the actual
30337         value of the literal, cast as an object.
30338
30339         (*Literal): Implement GetValue method.
30340
30341         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
30342         expressions to the arraylist but objects of type Argument.
30343
30344         * class.cs (TypeContainer::Emit): Emit our attributes too.
30345
30346         (Method::Emit, Constructor::Emit): Ditto.
30347
30348         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
30349         to be ignoring earlier.
30350
30351 2001-11-03  Ravi Pratap  <ravi@ximian.com>
30352
30353         * attribute.cs (AttributeSection::Define): Implement to do the business
30354         of constructing a CustomAttributeBuilder.
30355
30356         (Attribute): New trivial class. Increases readability of code.  
30357
30358         * cs-parser.jay : Update accordingly.
30359
30360         (positional_argument_list, named_argument_list, named_argument): New rules
30361
30362         (attribute_arguments): Use the above so that we are more correct.
30363
30364 2001-11-02  Ravi Pratap  <ravi@ximian.com>
30365
30366         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
30367         to perform all checks for a method with a params parameter.
30368
30369         (Invocation::OverloadResolve): Update to use the above method and therefore
30370         cope correctly with params method invocations.
30371
30372         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
30373         params too.
30374
30375         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
30376         constructors in our parent too because we can't afford to miss out on 
30377         protected ones ;-)
30378
30379         * attribute.cs (AttributeSection): New name for the class Attribute
30380
30381         Other trivial changes to improve readability.
30382
30383         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
30384         use the new class names.
30385
30386 2001-11-01  Ravi Pratap  <ravi@ximian.com>
30387
30388         * class.cs (Method::Define): Complete definition for params types too
30389
30390         (Indexer::Define): Ditto.
30391
30392         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
30393         Cope everywhere with a request for info about the array parameter.
30394
30395 2001-11-01  Ravi Pratap  <ravi@ximian.com>
30396
30397         * tree.cs (RecordNamespace): Fix up to check for the correct key.
30398
30399         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
30400         local_variable_type to extract the string corresponding to the type.
30401
30402         (local_variable_type): Fixup the action to use the new helper method.
30403
30404         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
30405         go.
30406
30407         * expression.cs : Clean out code which uses the above.
30408
30409 2001-10-31  Ravi Pratap  <ravi@ximian.com>
30410
30411         * typemanager.cs (RegisterMethod): Check if we already have an existing key
30412         and bale out if necessary by returning a false.
30413
30414         (RegisterProperty): Ditto.
30415
30416         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
30417         and print out appropriate error messages.
30418
30419         * interface.cs (everywhere): Ditto.
30420
30421         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
30422         location to constructor.
30423
30424         * class.cs (Property, Event, Indexer): Update accordingly.
30425
30426         * ../errors/cs111.cs : Added.
30427
30428         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
30429         of a method, as laid down by the spec.
30430
30431         (Invocation::OverloadResolve): Use the above method.
30432
30433 2001-10-31  Ravi Pratap  <ravi@ximian.com>
30434
30435         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
30436         now take a TypeContainer and a Parameters object.
30437
30438         (ParameterData): Modify return type of ParameterModifier method to be 
30439         Parameter.Modifier and not a string.
30440
30441         (ReflectionParameters, InternalParameters): Update accordingly.
30442
30443         * expression.cs (Argument::GetParameterModifier): Same here.
30444
30445         * support.cs (InternalParameters::ParameterType): Find a better way of determining
30446         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
30447         symbol in it at all so maybe this is only for now.
30448
30449 2001-10-30  Ravi Pratap  <ravi@ximian.com>
30450
30451         * support.cs (InternalParameters): Constructor now takes an extra argument 
30452         which is the actual Parameters class.
30453
30454         (ParameterDesc): Update to provide info on ref/out modifiers.
30455
30456         * class.cs (everywhere): Update call to InternalParameters to pass in
30457         the second argument too.
30458
30459         * support.cs (ParameterData): Add ParameterModifier, which is a method 
30460         to return the modifier info [ref/out etc]
30461
30462         (InternalParameters, ReflectionParameters): Implement the above.
30463
30464         * expression.cs (Argument::ParameterModifier): Similar function to return
30465         info about the argument's modifiers.
30466
30467         (Invocation::OverloadResolve): Update to take into account matching modifiers 
30468         too.
30469
30470         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
30471         a new SetFormalParameters object which we pass to InternalParameters.
30472
30473 2001-10-30  Ravi Pratap  <ravi@ximian.com>
30474
30475         * expression.cs (NewArray): Merge into the ArrayCreation class.
30476
30477 2001-10-29  Ravi Pratap  <ravi@ximian.com>
30478
30479         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
30480         NewUserdefinedArray into one as there wasn't much of a use in having
30481         two separate ones.
30482
30483         * expression.cs (Argument): Change field's name to ArgType from Type.
30484
30485         (Type): New readonly property which returns the proper type, taking into 
30486         account ref/out modifiers.
30487
30488         (everywhere): Adjust code accordingly for the above.
30489
30490         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
30491         whether we are emitting for a ref or out parameter.
30492
30493         * expression.cs (Argument::Emit): Use the above field to set the state.
30494
30495         (LocalVariableReference::Emit): Update to honour the flag and emit the
30496         right stuff.
30497
30498         * parameter.cs (Attributes): Set the correct flags for ref parameters.
30499
30500         * expression.cs (Argument::FullDesc): New function to provide a full desc.
30501
30502         * support.cs (ParameterData): Add method ParameterDesc to the interface.
30503
30504         (ReflectionParameters, InternalParameters): Implement the above method.
30505
30506         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
30507         reporting errors.
30508
30509         (Invocation::FullMethodDesc): Ditto. 
30510
30511 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
30512
30513         * cs-parser.jay: Add extra production for the second form of array
30514         creation. 
30515
30516         * expression.cs (ArrayCreation): Update to reflect the above
30517         change. 
30518
30519         * Small changes to prepare for Array initialization.
30520
30521 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
30522
30523         * typemanager.cs (ImplementsInterface): interface might be null;
30524         Deal with this problem;
30525
30526         Also, we do store negative hits on the cache (null values), so use
30527         this instead of calling t.GetInterfaces on the type everytime.
30528
30529 2001-10-28  Ravi Pratap  <ravi@ximian.com>
30530
30531         * typemanager.cs (IsBuiltinType): New method to help determine the same.
30532
30533         * expression.cs (New::DoResolve): Get rid of array creation code and instead
30534         split functionality out into different classes.
30535
30536         (New::FormArrayType): Move into NewBuiltinArray.
30537
30538         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
30539         quite useless.
30540
30541         (NewBuiltinArray): New class to handle creation of built-in arrays.
30542
30543         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
30544         account creation of one-dimensional arrays.
30545
30546         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
30547
30548         (NewUserdefinedArray::DoResolve): Implement.
30549
30550         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
30551
30552         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
30553         we maintain inside the TypeManager. This is necessary to perform lookups on the
30554         module builder.
30555
30556         (LookupType): Update to perform GetType on the module builders too.     
30557
30558         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
30559
30560         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
30561
30562 2001-10-23  Ravi Pratap  <ravi@ximian.com>
30563
30564         * expression.cs (New::DoResolve): Implement guts of array creation.
30565
30566         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
30567
30568 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
30569
30570         * expression.cs: Fix bug I introduced lsat night that broke
30571         Delegates. 
30572
30573         (Expression.Resolve): Report a 246 error (can not resolve name)
30574         if we find a SimpleName in the stream.
30575
30576         (Expression.ResolveLValue): Ditto.
30577
30578         (Expression.ResolveWithSimpleName): This function is a variant of
30579         ResolveName, this one allows SimpleNames to be returned without a
30580         warning.  The only consumer of SimpleNames is MemberAccess
30581
30582 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
30583
30584         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
30585         might arrive here.  I have my doubts that this is correct.
30586
30587         * statement.cs (Lock): Implement lock statement.
30588
30589         * cs-parser.jay: Small fixes to support `lock' and `using'
30590
30591         * cs-tokenizer.cs: Remove extra space
30592
30593         * driver.cs: New flag --checked, allows to turn on integer math
30594         checking. 
30595
30596         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
30597         Threading.Monitor.Exit 
30598
30599 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
30600
30601         * expression.cs (IndexerAccess::DoResolveLValue): Set the
30602         Expression Class to be IndexerAccess.
30603
30604         Notice that Indexer::DoResolve sets the eclass to Value.
30605
30606 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
30607
30608         * class.cs (TypeContainer::Emit): Emit code for indexers.
30609
30610         * assign.cs (IAssignMethod): New interface implemented by Indexers
30611         and Properties for handling assignment.
30612
30613         (Assign::Emit): Simplify and reuse code. 
30614
30615         * expression.cs (IndexerAccess, PropertyExpr): Implement
30616         IAssignMethod, clean up old code. 
30617
30618 2001-10-22  Ravi Pratap  <ravi@ximian.com>
30619
30620         * typemanager.cs (ImplementsInterface): New method to determine if a type
30621         implements a given interface. Provides a nice cache too.
30622
30623         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
30624         method.
30625
30626         (ConvertReferenceExplicit): Ditto.
30627
30628         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
30629         various methods, with correct names etc.
30630
30631         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
30632         Operator.UnaryNegation.
30633
30634         * cs-parser.jay (operator_declarator): Be a little clever in the case where
30635         we have a unary plus or minus operator.
30636
30637         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
30638         UnaryMinus.
30639
30640         * everywhere : update accordingly.
30641
30642         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
30643         respectively.
30644
30645         * class.cs (Method::Define): For the case where we are implementing a method
30646         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
30647         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
30648
30649 2001-10-21  Ravi Pratap  <ravi@ximian.com>
30650
30651         * interface.cs (FindMembers): Implement to work around S.R.E
30652         lameness.
30653
30654         * typemanager.cs (IsInterfaceType): Implement.
30655
30656         (FindMembers): Update to handle interface types too.
30657
30658         * expression.cs (ImplicitReferenceConversion): Re-write bits which
30659         use IsAssignableFrom as that is not correct - it doesn't work.
30660
30661         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
30662         and accordingly override EmitStatement.
30663
30664         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
30665         using the correct logic :-)
30666
30667 2001-10-19  Ravi Pratap  <ravi@ximian.com>
30668
30669         * ../errors/cs-11.cs : Add to demonstrate error -11 
30670
30671 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
30672
30673         * assign.cs (Assign::Resolve): Resolve right hand side first, and
30674         then pass this as a hint to ResolveLValue.
30675
30676         * expression.cs (FieldExpr): Add Location information
30677
30678         (FieldExpr::LValueResolve): Report assignment to readonly
30679         variable. 
30680
30681         (Expression::ExprClassFromMemberInfo): Pass location information.
30682
30683         (Expression::ResolveLValue): Add new method that resolves an
30684         LValue. 
30685
30686         (Expression::DoResolveLValue): Default invocation calls
30687         DoResolve. 
30688
30689         (Indexers): New class used to keep track of indexers in a given
30690         Type. 
30691
30692         (IStackStore): Renamed from LValue, as it did not really describe
30693         what this did.  Also ResolveLValue is gone from this interface and
30694         now is part of Expression.
30695
30696         (ElementAccess): Depending on the element access type
30697
30698         * typemanager.cs: Add `indexer_name_type' as a Core type
30699         (System.Runtime.CompilerServices.IndexerNameAttribute)
30700
30701         * statement.cs (Goto): Take a location.
30702
30703 2001-10-18  Ravi Pratap  <ravi@ximian.com>
30704
30705         * delegate.cs (Delegate::VerifyDelegate): New method to verify
30706         if two delegates are compatible.
30707
30708         (NewDelegate::DoResolve): Update to take care of the case when
30709         we instantiate a delegate from another delegate.
30710
30711         * typemanager.cs (FindMembers): Don't even try to look up members
30712         of Delegate types for now.
30713
30714 2001-10-18  Ravi Pratap  <ravi@ximian.com>
30715
30716         * delegate.cs (NewDelegate): New class to take care of delegate
30717         instantiation.
30718
30719         * expression.cs (New): Split the delegate related code out into 
30720         the NewDelegate class.
30721
30722         * delegate.cs (DelegateInvocation): New class to handle delegate 
30723         invocation.
30724
30725         * expression.cs (Invocation): Split out delegate related code into
30726         the DelegateInvocation class.
30727
30728 2001-10-17  Ravi Pratap  <ravi@ximian.com>
30729
30730         * expression.cs (New::DoResolve): Implement delegate creation fully
30731         and according to the spec.
30732
30733         (New::DoEmit): Update to handle delegates differently.
30734
30735         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
30736         because of which we were printing out arguments in reverse order !
30737
30738         * delegate.cs (VerifyMethod): Implement to check if the given method
30739         matches the delegate.
30740
30741         (FullDelegateDesc): Implement.
30742
30743         (VerifyApplicability): Implement.
30744
30745         * expression.cs (Invocation::DoResolve): Update to accordingly handle
30746         delegate invocations too.
30747
30748         (Invocation::Emit): Ditto.
30749
30750         * ../errors/cs1593.cs : Added.
30751
30752         * ../errors/cs1594.cs : Added.
30753
30754         * delegate.cs (InstanceExpression, TargetMethod): New properties.
30755
30756 2001-10-16  Ravi Pratap  <ravi@ximian.com>
30757
30758         * typemanager.cs (intptr_type): Core type for System.IntPtr
30759
30760         (InitCoreTypes): Update for the same.
30761
30762         (iasyncresult_type, asynccallback_type): Ditto.
30763
30764         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
30765         correct.
30766
30767         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
30768         too.
30769
30770         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
30771         the builders for the 4 members of a delegate type :-)
30772
30773         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
30774         type.
30775
30776         * expression.cs (New::DoResolve): Implement guts for delegate creation.
30777
30778         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
30779
30780 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
30781
30782         * statement.cs (Break::Emit): Implement.   
30783         (Continue::Emit): Implement.
30784
30785         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
30786         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
30787         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
30788         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
30789         end loop
30790
30791         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
30792         properties that track the label for the current loop (begin of the
30793         loop and end of the loop).
30794
30795 2001-10-15  Ravi Pratap  <ravi@ximian.com>
30796
30797         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
30798         use of emitting anything at all.
30799
30800         * class.cs, rootcontext.cs : Get rid of calls to the same.
30801
30802         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
30803
30804         (Populate): Define the constructor correctly and set the implementation
30805         attributes.
30806
30807         * typemanager.cs (delegate_types): New hashtable to hold delegates that
30808         have been defined.
30809
30810         (AddDelegateType): Implement.
30811
30812         (IsDelegateType): Implement helper method.
30813
30814         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
30815
30816         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
30817         and accordingly handle it.
30818
30819         * delegate.cs (Populate): Take TypeContainer argument.
30820         Implement bits to define the Invoke method. However, I still haven't figured out
30821         how to take care of the native int bit :-(
30822
30823         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
30824         Qualify the name of the delegate, not its return type !
30825
30826         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
30827         conversion.
30828
30829         (StandardConversionExists): Checking for array types turns out to be recursive.
30830
30831         (ConvertReferenceExplicit): Implement array conversion.
30832
30833         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
30834
30835 2001-10-12  Ravi Pratap  <ravi@ximian.com>
30836
30837         * cs-parser.jay (delegate_declaration): Store the fully qualified
30838         name as it is a type declaration.
30839
30840         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
30841         readonly.
30842
30843         (DefineDelegate): Renamed from Define. Does the same thing essentially,
30844         as TypeContainer::DefineType.
30845
30846         (Populate): Method in which all the definition of the various methods (Invoke)
30847         etc is done.
30848
30849         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
30850         see.
30851
30852         (CloseDelegate): Finally creates the delegate.
30853
30854         * class.cs (TypeContainer::DefineType): Update to define delegates.
30855         (Populate, Emit and CloseType): Do the same thing here too.
30856
30857         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
30858         delegates in all these operations.
30859
30860 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
30861
30862         * expression.cs: LocalTemporary: a new expression used to
30863         reference a temporary that has been created.
30864
30865         * assign.cs: Handle PropertyAccess back here, so that we can
30866         provide the proper semantic access to properties.
30867
30868         * expression.cs (Expression::ConvertReferenceExplicit): Implement
30869         a few more explicit conversions. 
30870
30871         * modifiers.cs: `NEW' modifier maps to HideBySig.
30872
30873         * expression.cs (PropertyExpr): Make this into an
30874         ExpressionStatement, and support the EmitStatement code path. 
30875
30876         Perform get/set error checking, clean up the interface.
30877
30878         * assign.cs: recognize PropertyExprs as targets, and if so, turn
30879         them into toplevel access objects.
30880
30881 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
30882
30883         * expression.cs: PropertyExpr::PropertyExpr: use work around the
30884         SRE.
30885
30886         * typemanager.cs: Keep track here of our PropertyBuilders again to
30887         work around lameness in SRE.
30888
30889 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
30890
30891         * expression.cs (LValue::LValueResolve): New method in the
30892         interface, used to perform a second resolution pass for LValues. 
30893
30894         (This::DoResolve): Catch the use of this in static methods.
30895
30896         (This::LValueResolve): Implement.
30897
30898         (This::Store): Remove warning, assigning to `this' in structures
30899         is 
30900
30901         (Invocation::Emit): Deal with invocation of
30902         methods on value types.  We need to pass the address to structure
30903         methods rather than the object itself.  (The equivalent code to
30904         emit "this" for structures leaves the entire structure on the
30905         stack instead of a pointer to it). 
30906
30907         (ParameterReference::DoResolve): Compute the real index for the
30908         argument based on whether the method takes or not a `this' pointer
30909         (ie, the method is static).
30910
30911         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
30912         value types returned from functions when we need to invoke a
30913         method on the sturcture.
30914
30915
30916 2001-10-11  Ravi Pratap  <ravi@ximian.com>
30917
30918         * class.cs (TypeContainer::DefineType): Method to actually do the business of
30919         defining the type in the Modulebuilder or Typebuilder. This is to take
30920         care of nested types which need to be defined on the TypeBuilder using
30921         DefineNestedMethod.
30922
30923         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
30924         methods in RootContext, only ported to be part of TypeContainer.
30925
30926         (TypeContainer::GetInterfaceOrClass): Ditto.
30927
30928         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
30929
30930         * interface.cs (Interface::DefineInterface): New method. Does exactly
30931         what RootContext.CreateInterface did earlier, only it takes care of nested types 
30932         too.
30933
30934         (Interface::GetInterfaces): Move from RootContext here and port.
30935
30936         (Interface::GetInterfaceByName): Same here.
30937
30938         * rootcontext.cs (ResolveTree): Re-write.
30939
30940         (PopulateTypes): Re-write.
30941
30942         * class.cs (TypeContainer::Populate): Populate nested types too.
30943         (TypeContainer::Emit): Emit nested members too.
30944
30945         * typemanager.cs (AddUserType): Do not make use of the FullName property,
30946         instead just use the name argument passed in as it is already fully
30947         qualified.
30948
30949         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
30950         to TypeContainer mapping to see if a type is user-defined.
30951
30952         * class.cs (TypeContainer::CloseType): Implement. 
30953
30954         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
30955         the default constructor.
30956
30957         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
30958         twice.
30959
30960         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
30961
30962         * interface.cs (CloseType): Create the type here.
30963
30964         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
30965         the hierarchy.
30966
30967         Remove all the methods which are now in TypeContainer.
30968
30969 2001-10-10  Ravi Pratap  <ravi@ximian.com>
30970
30971         * delegate.cs (Define): Re-write bits to define the delegate
30972         correctly.
30973
30974 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
30975
30976         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
30977
30978         * expression.cs (ImplicitReferenceConversion): handle null as well
30979         as a source to convert to any reference type.
30980
30981         * statement.cs (Return): Perform any implicit conversions to
30982         expected return type.  
30983
30984         Validate use of return statement.  
30985
30986         * codegen.cs (EmitContext): Pass the expected return type here.
30987
30988         * class.cs (Method, Constructor, Property): Pass expected return
30989         type to EmitContext.
30990
30991 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
30992
30993         * expression.cs: Make DoResolve take an EmitContext instead of a
30994         TypeContainer.
30995
30996         Replaced `l' and `location' for `loc', for consistency.
30997
30998         (Error, Warning): Remove unneeded Tc argument.
30999
31000         * assign.cs, literal.cs, constant.cs: Update to new calling
31001         convention. 
31002
31003         * codegen.cs: EmitContext now contains a flag indicating whether
31004         code is being generated in a static method or not.
31005
31006         * cs-parser.jay: DecomposeQI, new function that replaces the old
31007         QualifiedIdentifier.  Now we always decompose the assembled
31008         strings from qualified_identifier productions into a group of
31009         memberaccesses.
31010
31011 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
31012
31013         * rootcontext.cs: Deal with field-less struct types correctly now
31014         by passing the size option to Define Type.
31015
31016         * class.cs: Removed hack that created one static field. 
31017
31018 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
31019
31020         * statement.cs: Moved most of the code generation here. 
31021
31022 2001-10-09  Ravi Pratap  <ravi@ximian.com>
31023
31024         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
31025         seem very right.
31026
31027         (ElementAccess): Remove useless bits for now - keep checks as the spec
31028         says.
31029
31030 2001-10-08  Ravi Pratap  <ravi@ximian.com>
31031
31032         * expression.cs (ElementAccess::DoResolve): Remove my crap code
31033         and start performing checks according to the spec.
31034
31035 2001-10-07  Ravi Pratap  <ravi@ximian.com>
31036
31037         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
31038         rank_specifiers instead.
31039
31040         (rank_specifiers): Change the order in which the rank specifiers are stored
31041
31042         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
31043
31044         * expression.cs (ElementAccess): Implement the LValue interface too.
31045
31046 2001-10-06  Ravi Pratap  <ravi@ximian.com>
31047
31048         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
31049         except that user defined conversions are not included.
31050
31051         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
31052         perform the conversion of the return type, if necessary.
31053
31054         (New::DoResolve): Check whether we are creating an array or an object
31055         and accordingly do the needful.
31056
31057         (New::Emit): Same here.
31058
31059         (New::DoResolve): Implement guts of array creation.
31060
31061         (New::FormLookupType): Helper function.
31062
31063 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
31064
31065         * codegen.cs: Removed most of the code generation here, and move the
31066         corresponding code generation bits to the statement classes. 
31067
31068         Added support for try/catch/finalize and throw.
31069
31070         * cs-parser.jay: Added support for try/catch/finalize.
31071
31072         * class.cs: Catch static methods having the flags override,
31073         virtual or abstract.
31074
31075         * expression.cs (UserCast): This user cast was not really doing
31076         what it was supposed to do.  Which is to be born in fully resolved
31077         state.  Parts of the resolution were being performed at Emit time! 
31078
31079         Fixed this code.
31080
31081 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
31082
31083         * expression.cs: Implicity convert the result from UserCast.
31084
31085 2001-10-05  Ravi Pratap  <ravi@ximian.com>
31086
31087         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
31088         prevented it from working correctly. 
31089
31090         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
31091         merely ConvertImplicit.
31092
31093 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
31094
31095         * typemanager.cs: Make the LookupTypeContainer function static,
31096         and not per-instance.  
31097
31098         * class.cs: Make static FindMembers (the one that takes a Type
31099         argument). 
31100
31101         * codegen.cs: Add EmitForeach here.
31102
31103         * cs-parser.jay: Make foreach a toplevel object instead of the
31104         inline expansion, as we need to perform semantic analysis on it. 
31105
31106 2001-10-05  Ravi Pratap  <ravi@ximian.com>
31107
31108         * expression.cs (Expression::ImplicitUserConversion): Rename to
31109         UserDefinedConversion.
31110
31111         (Expression::UserDefinedConversion): Take an extra argument specifying 
31112         whether we look for explicit user conversions too.
31113
31114         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
31115
31116         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
31117
31118         (ExplicitUserConversion): Make it a call to UserDefinedConversion
31119         with the appropriate arguments.
31120
31121         * cs-parser.jay (cast_expression): Record location too.
31122
31123         * expression.cs (Cast): Record location info.
31124
31125         (Expression::ConvertExplicit): Take location argument.
31126
31127         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
31128         to determine if we are doing explicit conversions.
31129
31130         (UserCast::Emit): Update accordingly.
31131
31132         (Expression::ConvertExplicit): Report an error if everything fails.
31133
31134         * ../errors/cs0030.cs : Add.
31135
31136 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
31137
31138         * modifiers.cs: If the ABSTRACT keyword is present, also set the
31139         virtual and newslot bits. 
31140
31141         * class.cs (TypeContainer::RegisterRequiredImplementations):
31142         Record methods we need.
31143
31144         (TypeContainer::MakeKey): Helper function to make keys for
31145         MethodBases, since the Methodbase key is useless.
31146
31147         (TypeContainer::Populate): Call RegisterRequiredImplementations
31148         before defining the methods.   
31149
31150         Create a mapping for method_builders_to_methods ahead of time
31151         instead of inside a tight loop.
31152
31153         (::RequireMethods):  Accept an object as the data to set into the
31154         hashtable so we can report interface vs abstract method mismatch.
31155
31156 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
31157
31158         * report.cs: Make all of it static.
31159
31160         * rootcontext.cs: Drop object_type and value_type computations, as
31161         we have those in the TypeManager anyways.
31162
31163         Drop report instance variable too, now it is a global.
31164
31165         * driver.cs: Use try/catch on command line handling.
31166
31167         Add --probe option to debug the error reporting system with a test
31168         suite. 
31169
31170         * report.cs: Add support for exiting program when a probe
31171         condition is reached.
31172
31173 2001-10-03  Ravi Pratap  <ravi@ximian.com>
31174
31175         * expression.cs (Binary::DoNumericPromotions): Fix the case when
31176         we do a forcible conversion regardless of type, to check if 
31177         ForceConversion returns a null.
31178
31179         (Binary::error19): Use location to report error.
31180
31181         (Unary::error23): Use location here too.
31182
31183         * ../errors/cs0019.cs : Check in.
31184
31185         * ../errors/cs0023.cs : Check in.
31186
31187         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
31188         case of a non-null MethodInfo object with a length of 0 !
31189
31190         (Binary::ResolveOperator): Flag error if overload resolution fails to find
31191         an applicable member - according to the spec :-)
31192         Also fix logic to find members in base types.
31193
31194         (Unary::ResolveOperator): Same here.
31195
31196         (Unary::report23): Change name to error23 and make first argument a TypeContainer
31197         as I was getting thoroughly confused between this and error19 :-)
31198
31199         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
31200         (::FindMostEncompassedType): Implement.
31201         (::FindMostEncompassingType): Implement.
31202         (::StandardConversionExists): Implement.
31203
31204         (UserImplicitCast): Re-vamp. We now need info about most specific
31205         source and target types so that we can do the necessary conversions.
31206
31207         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
31208         mathematical union with no duplicates.
31209
31210 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
31211
31212         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
31213         in order from base classes to child classes, so that we can in
31214         child classes look up in our parent for method names and
31215         attributes (required for handling abstract, virtual, new, override
31216         constructs: we need to instrospect our base class, and if we dont
31217         populate the classes in order, the introspection might be
31218         incorrect.  For example, a method could query its parent before
31219         the parent has any methods and would determine that the parent has
31220         no abstract methods (while it could have had them)).
31221
31222         (RootContext::CreateType): Record the order in which we define the
31223         classes.
31224
31225 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
31226
31227         * class.cs (TypeContainer::Populate): Also method definitions can
31228         fail now, keep track of this.
31229
31230         (TypeContainer::FindMembers): Implement support for
31231         DeclaredOnly/noDeclaredOnly flag.
31232
31233         (Constructor::Emit) Return the ConstructorBuilder.
31234
31235         (Method::Emit) Return the MethodBuilder. 
31236         Check for abstract or virtual methods to be public.
31237
31238         * rootcontext.cs (RootContext::CreateType): Register all the
31239         abstract methods required for the class to be complete and the
31240         interface methods that must be implemented. 
31241
31242         * cs-parser.jay: Report error 501 (method requires body if it is
31243         not marked abstract or extern).
31244
31245         * expression.cs (TypeOf::Emit): Implement.
31246
31247         * typemanager.cs: runtime_handle_type, new global type.
31248
31249         * class.cs (Property::Emit): Generate code for properties.
31250
31251 2001-10-02  Ravi Pratap  <ravi@ximian.com>
31252
31253         * expression.cs (Unary::ResolveOperator): Find operators on base type
31254         too - we now conform exactly to the spec.
31255
31256         (Binary::ResolveOperator): Same here.
31257
31258         * class.cs (Operator::Define): Fix minor quirk in the tests.
31259
31260         * ../errors/cs0215.cs : Added.
31261
31262         * ../errors/cs0556.cs : Added.
31263
31264         * ../errors/cs0555.cs : Added.
31265
31266 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
31267
31268         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
31269         single integer which is really efficient
31270
31271 2001-10-01  Ravi Pratap  <ravi@ximian.com>
31272
31273         *  expression.cs (Expression::ImplicitUserConversion): Use location
31274         even in the case when we are examining True operators.
31275  
31276         * class.cs (Operator::Define): Perform extensive checks to conform
31277         with the rules for operator overloading in the spec.
31278
31279         * expression.cs (Expression::ImplicitReferenceConversion): Implement
31280         some of the other conversions mentioned in the spec.
31281
31282         * typemanager.cs (array_type): New static member for the System.Array built-in
31283         type.
31284
31285         (cloneable_interface): For System.ICloneable interface.
31286
31287         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
31288         we start resolving the tree and populating types.
31289
31290         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
31291  
31292 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
31293
31294         * expression.cs (Expression::ExprClassFromMemberInfo,
31295         Expression::Literalize): Create literal expressions from
31296         FieldInfos which are literals.
31297
31298         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
31299         type casts, because they were wrong.  The test suite in tests
31300         caught these ones.
31301
31302         (ImplicitNumericConversion): ushort to ulong requires a widening
31303         cast. 
31304
31305         Int32 constant to long requires widening cast as well.
31306
31307         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
31308         for integers because the type on the stack is not i4.
31309
31310 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
31311
31312         * expression.cs (report118): require location argument. 
31313
31314         * parameter.cs: Do not dereference potential null value.
31315
31316         * class.cs: Catch methods that lack the `new' keyword when
31317         overriding a name.  Report warnings when `new' is used without
31318         anything being there to override.
31319
31320         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
31321
31322         * class.cs: Only add constructor to hashtable if it is non-null
31323         (as now constructors can fail on define).
31324
31325         (TypeManager, Class, Struct): Take location arguments.
31326
31327         Catch field instance initialization in structs as errors.
31328
31329         accepting_filter: a new filter for FindMembers that is static so
31330         that we dont create an instance per invocation.
31331
31332         (Constructor::Define): Catch errors where a struct constructor is
31333         parameterless 
31334
31335         * cs-parser.jay: Pass location information for various new
31336         constructs. 
31337
31338         * delegate.cs (Delegate): take a location argument.
31339
31340         * driver.cs: Do not call EmitCode if there were problesm in the
31341         Definition of the types, as many Builders wont be there. 
31342
31343         * decl.cs (Decl::Decl): Require a location argument.
31344
31345         * cs-tokenizer.cs: Handle properly hex constants that can not fit
31346         into integers, and find the most appropiate integer for it.
31347
31348         * literal.cs: Implement ULongLiteral.
31349
31350         * rootcontext.cs: Provide better information about the location of
31351         failure when CreateType fails.
31352
31353 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
31354
31355         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
31356         as well.
31357
31358         * expression.cs (Binary::CheckShiftArguments): Add missing type
31359         computation.
31360         (Binary::ResolveOperator): Add type to the logical and and logical
31361         or, Bitwise And/Or and Exclusive Or code paths, it was missing
31362         before.
31363
31364         (Binary::DoNumericPromotions): In the case where either argument
31365         is ulong (and most signed types combined with ulong cause an
31366         error) perform implicit integer constant conversions as well.
31367
31368 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
31369
31370         * expression.cs (UserImplicitCast): Method should always be
31371         non-null. 
31372         (Invocation::BetterConversion): Simplified test for IntLiteral.
31373
31374         (Expression::ImplicitNumericConversion): Split this routine out.
31375         Put the code that performs implicit constant integer conversions
31376         here. 
31377
31378         (Expression::Resolve): Become a wrapper around DoResolve so we can
31379         check eclass and type being set after resolve.
31380
31381         (Invocation::Badness): Remove this dead function
31382
31383         (Binary::ResolveOperator): Do not compute the expensive argumnets
31384         unless we have a union for it.
31385
31386         (Probe::Emit): Is needs to do an isinst and then
31387         compare against null.
31388
31389         (::CanConvert): Added Location argument.  If the Location argument
31390         is null (Location.Null), then we do not report errors.  This is
31391         used by the `probe' mechanism of the Explicit conversion.  We do
31392         not want to generate an error for something that the user
31393         explicitly requested to be casted.  But the pipeline for an
31394         explicit cast first tests for potential implicit casts.
31395
31396         So for now, if the Location is null, it means `Probe only' to
31397         avoid adding another argument.   Might have to revise this
31398         strategy later.
31399
31400         (ClassCast): New class used to type cast objects into arbitrary
31401         classes (used in Explicit Reference Conversions).
31402
31403         Implement `as' as well.
31404
31405         Reverted all the patches from Ravi below: they were broken:
31406
31407                 * The use of `level' as a mechanism to stop recursive
31408                   invocations is wrong.  That was there just to catch the
31409                   bug with a strack trace but not as a way of addressing
31410                   the problem.
31411
31412                   To fix the problem we have to *understand* what is going
31413                   on and the interactions and come up with a plan, not
31414                   just get things going.
31415
31416                 * The use of the type conversion cache that I proposed
31417                   last night had an open topic: How does this work across
31418                   protection domains.  A user defined conversion might not
31419                   be public in the location where we are applying the
31420                   conversion, a different conversion might be selected
31421                   (ie, private A->B (better) but public B->A (worse),
31422                   inside A, A->B applies, but outside it, B->A will
31423                   apply).
31424
31425                 * On top of that (ie, even if the above is solved),
31426                   conversions in a cache need to be abstract.  Ie, `To
31427                   convert from an Int to a Short use an OpcodeCast', not
31428                   `To convert from an Int to a Short use the OpcodeCast on
31429                   the variable 5' (which is what this patch was doing).
31430
31431 2001-09-28  Ravi Pratap  <ravi@ximian.com>
31432
31433         * expression.cs (Invocation::ConversionExists): Re-write to use
31434         the conversion cache
31435
31436         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
31437         cache all conversions done, not just user-defined ones.
31438
31439         (Invocation::BetterConversion): The real culprit. Use ConversionExists
31440         to determine if a conversion exists instead of acutually trying to 
31441         perform the conversion. It's faster too.
31442
31443         (Expression::ConvertExplicit): Modify to use ConversionExists to check
31444         and only then attempt the implicit conversion.
31445
31446 2001-09-28  Ravi Pratap  <ravi@ximian.com>
31447
31448         * expression.cs (ConvertImplicit): Use a cache for conversions
31449         already found. Check level of recursion and bail out if necessary.
31450
31451 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
31452
31453         * typemanager.cs (string_concat_string_string, string_concat_object_object):
31454         Export standard methods that we expect for string operations.
31455
31456         * statement.cs (Block::UsageWarning): Track usage of variables and
31457         report the errors for not used variables.
31458
31459         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
31460         operator. 
31461
31462 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
31463
31464         * codegen.cs: remove unnneded code 
31465
31466         * expression.cs: Removed BuiltinTypeAccess class
31467
31468         Fix the order in which implicit conversions are
31469         done.  
31470
31471         The previous fixed dropped support for boxed conversions (adding a
31472         test to the test suite now)
31473
31474         (UserImplicitCast::CanConvert): Remove test for source being null,
31475         that code is broken.  We should not feed a null to begin with, if
31476         we do, then we should track the bug where the problem originates
31477         and not try to cover it up here.
31478
31479         Return a resolved expression of type UserImplicitCast on success
31480         rather than true/false.  Ravi: this is what I was talking about,
31481         the pattern is to use a static method as a "constructor" for
31482         objects. 
31483
31484         Also, do not create arguments until the very last minute,
31485         otherwise we always create the arguments even for lookups that
31486         will never be performed. 
31487
31488         (UserImplicitCast::Resolve): Eliminate, objects of type
31489         UserImplicitCast are born in a fully resolved state. 
31490
31491         * typemanager.cs (InitCoreTypes): Init also value_type
31492         (System.ValueType). 
31493
31494         * expression.cs (Cast::Resolve): First resolve the child expression.
31495
31496         (LValue): Add new method AddressOf to be used by
31497         the `&' operator.  
31498
31499         Change the argument of Store to take an EmitContext instead of an
31500         ILGenerator, because things like FieldExpr need to be able to call
31501         their children expression to generate the instance code. 
31502
31503         (Expression::Error, Expression::Warning): Sugar functions for
31504         reporting errors.
31505
31506         (Expression::MemberLookup): Accept a TypeContainer instead of a
31507         Report as the first argument.
31508
31509         (Expression::ResolvePrimary): Killed.  I still want to improve
31510         this as currently the code is just not right.
31511
31512         (Expression::ResolveMemberAccess): Simplify, but it is still
31513         wrong. 
31514
31515         (Unary::Resolve): Catch errors in AddressOf operators.
31516
31517         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
31518         index to a byte for the short-version, or the compiler will choose
31519         the wrong Emit call, which generates the wrong data.
31520
31521         (ParameterReference::Emit, ::Store): same.
31522
31523         (FieldExpr::AddressOf): Implement.
31524
31525         * typemanager.cs: TypeManager: made public variable instead of
31526         property.
31527
31528         * driver.cs: document --fatal.
31529
31530         * report.cs (ErrorMessage, WarningMessage): new names for the old
31531         Error and Warning classes.
31532
31533         * cs-parser.jay (member_access): Turn built-in access to types
31534         into a normal simplename
31535
31536 2001-09-27  Ravi Pratap  <ravi@ximian.com>
31537
31538         * expression.cs (Invocation::BetterConversion): Fix to cope
31539         with q being null, since this was introducing a bug.
31540
31541         * expression.cs (ConvertImplicit): Do built-in conversions first.
31542
31543 2001-09-27  Ravi Pratap  <ravi@ximian.com>
31544
31545         * expression.cs (UserImplicitCast::Resolve): Fix bug.
31546
31547 2001-09-27  Ravi Pratap  <ravi@ximian.com>
31548
31549         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
31550         I had introduced long ago (what's new ?).
31551
31552         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
31553         the work of all the checking. 
31554         (ConvertImplicit): Call CanConvert and only then create object if necessary.
31555         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
31556
31557         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
31558         that is the right way. 
31559
31560         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
31561         overloading resolution. Use everywhere instead of cutting and pasting code.
31562
31563         (Binary::ResolveOperator): Use MakeUnionSet.
31564
31565         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
31566         we have to convert to bool types. Not complete yet.
31567
31568 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
31569
31570         * typemanager.cs (TypeManager::CSharpName): support ushort.
31571
31572         * expression.cs (Expression::TryImplicitIntConversion): Attempts
31573         to provide an expression that performsn an implicit constant int
31574         conversion (section 6.1.6).
31575         (Expression::ConvertImplicitRequired): Reworked to include
31576         implicit constant expression conversions.
31577
31578         (Expression::ConvertNumericExplicit): Finished.
31579
31580         (Invocation::Emit): If InstanceExpression is null, then it means
31581         that we perform a call on this.
31582
31583 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
31584
31585         * expression.cs (Unary::Emit): Remove some dead code.
31586         (Probe): Implement Resolve and Emit for `is'.
31587         (Expression::ConvertImplicitRequired): Attempt to do constant
31588         expression conversions here.  Maybe should be moved to
31589         ConvertImplicit, but I am not sure.
31590         (Expression::ImplicitLongConstantConversionPossible,
31591         Expression::ImplicitIntConstantConversionPossible): New functions
31592         that tell whether is it possible to apply an implicit constant
31593         expression conversion.
31594
31595         (ConvertNumericExplicit): Started work on explicit numeric
31596         conversions.
31597
31598         * cs-parser.jay: Update operator constants.
31599
31600         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
31601         (Parameters::GetSignature): Hook up VerifyArgs here.
31602         (Parameters::VerifyArgs): Verifies that no two arguments have the
31603         same name. 
31604
31605         * class.cs (Operator): Update the operator names to reflect the
31606         ones that the spec expects (as we are just stringizing the
31607         operator names).
31608
31609         * expression.cs (Unary::ResolveOperator): Fix bug: Use
31610         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
31611         previous usage did only work for our methods.
31612         (Expression::ConvertImplicit): Handle decimal implicit numeric
31613         conversions as well.
31614         (Expression::InternalTypeConstructor): Used to invoke constructors
31615         on internal types for default promotions.
31616
31617         (Unary::Emit): Implement special handling for the pre/post
31618         increment/decrement for overloaded operators, as they need to have
31619         the same semantics as the other operators.
31620
31621         (Binary::ResolveOperator): ditto.
31622         (Invocation::ConversionExists): ditto.
31623         (UserImplicitCast::Resolve): ditto.
31624
31625 2001-09-26  Ravi Pratap  <ravi@ximian.com>
31626
31627         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
31628         operator, return after emitting body. Regression tests pass again !
31629
31630         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
31631         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
31632         (Invocation::OverloadResolve): Ditto.
31633         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
31634
31635         * everywhere : update calls to the above methods accordingly.
31636
31637 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
31638
31639         * assign.cs (Assign): Make it inherit from ExpressionStatement.
31640
31641         * expression.cs (ExpressionStatement): New base class used for
31642         expressions that can appear in statements, so that we can provide
31643         an alternate path to generate expression that do not leave a value
31644         on the stack.
31645
31646         (Expression::Emit, and all the derivatives): We no longer return
31647         whether a value is left on the stack or not.  Every expression
31648         after being emitted leaves a single value on the stack.
31649
31650         * codegen.cs (EmitContext::EmitStatementExpression): Use the
31651         facilties of ExpressionStatement if possible.
31652
31653         * cs-parser.jay: Update statement_expression.
31654
31655 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
31656
31657         * driver.cs: Change the wording of message
31658
31659 2001-09-25  Ravi Pratap  <ravi@ximian.com>
31660
31661         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
31662         the type of the expression to the return type of the method if
31663         we have an overloaded operator match ! The regression tests pass again !
31664         (Unary::ResolveOperator): Ditto.
31665
31666         * expression.cs (Invocation::ConversionExists): Correct the member lookup
31667         to find "op_Implicit", not "implicit" ;-)
31668         (UserImplicitCast): New class to take care of user-defined implicit conversions.
31669         (ConvertImplicit, ForceConversion): Take TypeContainer argument
31670
31671         * everywhere : Correct calls to the above accordingly.
31672
31673         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
31674         (ConvertImplicit): Do user-defined conversion if it exists.
31675
31676 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
31677
31678         * assign.cs: track location.
31679         (Resolve): Use implicit conversions on assignment.
31680
31681         * literal.cs: Oops.  Not good, Emit of short access values should
31682         pass (Bytes) or the wrong argument will be selected.
31683
31684         * expression.cs (Unary::Emit): Emit code for -expr.
31685
31686         (Unary::ResolveOperator): Handle `Substract' for non-constants
31687         (substract from zero from the non-constants).
31688         Deal with Doubles as well. 
31689
31690         (Expression::ConvertImplicitRequired): New routine that reports an
31691         error if no implicit conversion exists. 
31692
31693         (Invocation::OverloadResolve): Store the converted implicit
31694         expressions if we make them
31695
31696 2001-09-24  Ravi Pratap  <ravi@ximian.com>
31697
31698         * class.cs (ConstructorInitializer): Take a Location argument.
31699         (ConstructorBaseInitializer): Same here.
31700         (ConstructorThisInitializer): Same here.
31701
31702         * cs-parser.jay : Update all calls accordingly.
31703
31704         * expression.cs (Unary, Binary, New): Take location argument.
31705         Update accordingly everywhere.
31706
31707         * cs-parser.jay : Update all calls to the above to take a location
31708         argument.
31709
31710         * class.cs : Ditto.
31711
31712 2001-09-24  Ravi Pratap  <ravi@ximian.com>
31713
31714         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
31715         (Invocation::BetterConversion): Same here
31716         (Invocation::ConversionExists): Ditto.
31717
31718         (Invocation::ConversionExists): Implement.
31719
31720 2001-09-22  Ravi Pratap  <ravi@ximian.com>
31721
31722         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
31723         Also take an additional TypeContainer argument.
31724
31725         * All over : Pass in TypeContainer as argument to OverloadResolve.
31726
31727         * typemanager.cs (CSharpName): Update to check for the string type and return
31728         that too.
31729
31730         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
31731         a given method.
31732
31733 2001-09-21  Ravi Pratap  <ravi@ximian.com>
31734
31735         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
31736         (Invocation::BetterFunction): Implement.
31737         (Invocation::BetterConversion): Implement.
31738         (Invocation::ConversionExists): Skeleton, no implementation yet.
31739
31740         Okay, things work fine !
31741
31742 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
31743
31744         * typemanager.cs: declare and load enum_type, delegate_type and
31745         void_type. 
31746
31747         * expression.cs (Expression::Emit): Now emit returns a value that
31748         tells whether a value is left on the stack or not.  This strategy
31749         might be reveted tomorrow with a mechanism that would address
31750         multiple assignments.
31751         (Expression::report118): Utility routine to report mismatches on
31752         the ExprClass.
31753
31754         (Unary::Report23): Report impossible type/operator combination
31755         utility function.
31756
31757         (Unary::IsIncrementableNumber): Whether the type can be
31758         incremented or decremented with add.
31759         (Unary::ResolveOperator): Also allow enumerations to be bitwise
31760         complemented. 
31761         (Unary::ResolveOperator): Implement ++, !, ~,
31762
31763         (Invocation::Emit): Deal with new Emit convetion.
31764
31765         * All Expression derivatives: Updated their Emit method to return
31766         whether they leave values on the stack or not.
31767
31768         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
31769         stack for expressions that are statements. 
31770
31771 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
31772
31773         * expression.cs (LValue): New interface.  Must be implemented by
31774         LValue objects.
31775         (LocalVariableReference, ParameterReference, FieldExpr): Implement
31776         LValue interface.
31777
31778         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
31779         interface for generating code, simplifies the code.
31780
31781 2001-09-20  Ravi Pratap  <ravi@ximian.com>
31782
31783         * expression.cs (everywhere): Comment out return statements in ::Resolve
31784         methods to avoid the warnings.
31785
31786 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
31787
31788         * driver.cs (parse): Report error 2001 if we can not open the
31789         source file.
31790
31791         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
31792         not resolve it.
31793
31794         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
31795         object. 
31796
31797         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
31798         otherwise nested blocks end up with the same index.
31799
31800         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
31801
31802         * expression.cs:  Instead of having FIXMEs in the Resolve
31803         functions, throw exceptions so it is obvious that we are facing a
31804         bug. 
31805
31806         * cs-parser.jay (invocation_expression): Pass Location information.
31807
31808         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
31809         Use a basename for those routines because .NET does not like paths
31810         on them. 
31811
31812         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
31813         already defined.
31814
31815 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
31816
31817         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
31818         are loading the correct data types (throws an exception if not).
31819         (TypeManager::InitCoreTypes): Use CoreLookupType
31820
31821         * expression.cs (Unary::ResolveOperator): return the child
31822         expression for expressions which are just +expr.
31823         (Unary::ResolveOperator): Return negative literals for -LITERAL
31824         expressions (otherwise they are Unary {Literal}).
31825         (Invocation::Badness): Take into account `Implicit constant
31826         expression conversions'.
31827
31828         * literal.cs (LongLiteral): Implement long literal class.
31829         (IntLiteral): export the `Value' of the intliteral. 
31830
31831 2001-09-19  Ravi Pratap  <ravi@ximian.com>
31832
31833         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
31834
31835         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
31836         instead of 'Operator'
31837
31838         * expression.cs (Binary::ResolveOperator): Update accordingly.
31839         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
31840         and 'Minus'
31841
31842         * cs-parser.jay (unary_expression): Update to use the new names.
31843
31844         * gen-treedump.cs (GetUnary): Same here.
31845
31846         * expression.cs (Unary::Resolve): Implement.
31847         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
31848         operators are found instead of making noise ;-)
31849         (Unary::ResolveOperator): New method to do precisely the same thing which
31850         Binary::ResolveOperator does for Binary expressions.
31851         (Unary.method, .Arguments): Add.
31852         (Unary::OperName): Implement.   
31853         (Unary::ForceConversion): Copy and Paste !
31854
31855         * class.cs (Operator::Define): Fix a small bug for the case when we have 
31856         a unary operator.
31857
31858         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
31859         for the inbuilt operators. Only overloading works for now ;-)
31860
31861 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
31862
31863         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
31864         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
31865
31866         * expression.cs (This::Emit): Implement. 
31867         (This::Resolve): Implement.
31868         (TypeOf:Resolve): Implement.
31869         (Expression::ResolveSimpleName): Add an implicit this to instance
31870         field references. 
31871         (MemberAccess::Resolve): Deal with Parameters and Fields. 
31872         Bind instance variable to Field expressions.
31873         (FieldExpr::Instance): New field used to track the expression that
31874         represents the object instance.
31875         (FieldExpr::Resolve): Track potential errors from MemberLookup not
31876         binding 
31877         (FieldExpr::Emit): Implement.
31878
31879         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
31880         the last instruction contains a return opcode to avoid generating
31881         the last `ret' instruction (this generates correct code, and it is
31882         nice to pass the peverify output).
31883
31884         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
31885         initializer for static and instance variables.
31886         (Constructor::Emit): Allow initializer to be null in the case of
31887         static constructors.  Only emit initializer for instance
31888         constructors. 
31889
31890         (TypeContainer::FindMembers): Return a null array if there are no
31891         matches.
31892
31893         Also fix the code for the MemberTypes.Method branch, as it was not
31894         scanning that for operators (or tried to access null variables before).
31895
31896         * assign.cs (Assign::Emit): Handle instance and static fields. 
31897
31898         * TODO: Updated.
31899
31900         * driver.cs: Stop compilation if there are parse errors.
31901
31902         * cs-parser.jay (constructor_declaration): Provide default base
31903         initializer for non-static constructors.
31904         (constructor_declarator): Do not provide a default base
31905         initializers if none was specified.
31906         Catch the fact that constructors should not have parameters.
31907
31908         * class.cs: Do not emit parent class initializers for static
31909         constructors, that should be flagged as an error.
31910
31911 2001-09-18  Ravi Pratap  <ravi@ximian.com>
31912
31913         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
31914         Move back code into TypeContainer::Populate.
31915
31916 2001-09-18  Ravi Pratap  <ravi@ximian.com>
31917
31918         * class.cs (TypeContainer::AddConstructor): Fix the check to
31919         compare against Name, not Basename. 
31920         (Operator::OpType): Change Plus and Minus to Add and Subtract.
31921
31922         * cs-parser.jay : Update accordingly.
31923
31924         * class.cs (TypeContainer::FindMembers): For the case where we are searching
31925         for methods, don't forget to look into the operators too.
31926         (RegisterMethodBuilder): Helper method to take care of this for
31927         methods, constructors and operators.
31928         (Operator::Define): Completely revamp.
31929         (Operator.OperatorMethod, MethodName): New fields.
31930         (TypeContainer::Populate): Move the registering of builders into
31931         RegisterMethodBuilder.
31932         (Operator::Emit): Re-write.
31933
31934         * expression.cs (Binary::Emit): Comment out code path to emit method
31935         invocation stuff for the case when we have a user defined operator. I am
31936         just not able to get it right !
31937
31938 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
31939
31940         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
31941         argument. 
31942
31943         (Expression::MemberLookup): Provide a version that allows to
31944         specify the MemberTypes and BindingFlags. 
31945
31946         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
31947         so it was not fetching variable information from outer blocks.
31948
31949         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
31950         Beforefieldinit as it was buggy.
31951
31952         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
31953         that Ravi put here.  
31954
31955         * class.cs (Constructor::Emit): Only emit if block is not null.
31956         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
31957         deal with this by semantically definining it as if the user had
31958         done it.
31959
31960         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
31961         constructors as we now "emit" them at a higher level.
31962
31963         (TypeContainer::DefineDefaultConstructor): Used to define the
31964         default constructors if none was provided.
31965
31966         (ConstructorInitializer): Add methods Resolve and Emit. 
31967
31968         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
31969
31970 2001-09-17  Ravi Pratap  <ravi@ximian.com>
31971
31972         * class.cs (TypeContainer::EmitDefaultConstructor): Register
31973         the default constructor builder with our hashtable for methodbuilders
31974         to methodcores.
31975
31976         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
31977         and argument_count is 0 in which case we have a match.
31978         (Binary::ResolveOperator): More null checking and miscellaneous coding
31979         style cleanup.
31980
31981 2001-09-17  Ravi Pratap  <ravi@ximian.com>
31982
31983         * rootcontext.cs (IsNameSpace): Compare against null.
31984
31985         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
31986
31987         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
31988         and Unary::Operator.
31989
31990         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
31991         accordingly.
31992
31993         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
31994         we have overloaded operators.
31995         (Binary::ResolveOperator): Implement the part which does the operator overload
31996         resolution.
31997
31998         * class.cs (Operator::Emit): Implement.
31999         (TypeContainer::Emit): Emit the operators we have too.
32000
32001         * expression.cs (Binary::Emit): Update to emit the appropriate code for
32002         the case when we have a user-defined operator.
32003
32004 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
32005
32006         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
32007
32008 2001-09-16  Ravi Pratap  <ravi@ximian.com>
32009
32010         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
32011         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
32012         (Constructor::Emit): Implement.
32013         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
32014         if we have no work to do. 
32015         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
32016         Emit method.
32017
32018         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
32019         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
32020
32021         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
32022         of parent.parent.
32023
32024 2001-09-15  Ravi Pratap  <ravi@ximian.com>
32025
32026         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
32027         in the source.
32028         (Tree::RecordNamespace): Method to do what the name says ;-)
32029         (Tree::Namespaces): Property to get at the namespaces hashtable.
32030
32031         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
32032         keep track.
32033
32034         * rootcontext.cs (IsNamespace): Fixed it :-)
32035
32036 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
32037
32038         * class.cs (TypeContainer::FindMembers): Add support for
32039         constructors. 
32040         (MethodCore): New class that encapsulates both the shared aspects
32041         of a Constructor and a Method.  
32042         (Method, Constructor): Factored pieces into MethodCore.
32043
32044         * driver.cs: Added --fatal which makes errors throw exceptions.
32045         Load System assembly as well as part of the standard library.
32046
32047         * report.cs: Allow throwing exceptions on errors for debugging.
32048
32049         * modifiers.cs: Do not use `parent', instead use the real type
32050         container to evaluate permission settings.
32051
32052         * class.cs: Put Ravi's patch back in.  He is right, and we will
32053         have to cope with the
32054
32055 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32056
32057         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
32058         FamORAssem, not FamANDAssem.
32059
32060 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
32061
32062         * driver.cs: Added --parse option that only parses its input files
32063         and terminates.
32064
32065         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
32066         incorrect.  IsTopLevel is not used to tell whether an object is
32067         root_types or not (that can be achieved by testing this ==
32068         root_types).  But to see if this is a top-level *class* (not
32069         necessarly our "toplevel" container). 
32070
32071 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32072
32073         * enum.cs (Enum::Define): Modify to call the Lookup method on the
32074         parent instead of a direct call to GetType.
32075
32076 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32077
32078         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
32079         Modifiers.TypeAttr. This should just be a call to that method.
32080
32081         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
32082         object so that we can determine if we are top-level or not.
32083
32084         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
32085         TypeContainer too.
32086
32087         * enum.cs (Enum::Define): Ditto.
32088
32089         * modifiers.cs (FieldAttr): Re-write.
32090
32091         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
32092         (TypeContainer::HaveStaticConstructor): New property to provide access
32093         to precisely that info.
32094
32095         * modifiers.cs (MethodAttr): Re-write.
32096         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
32097
32098         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
32099         of top-level types as claimed.
32100
32101 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
32102
32103         * expression.cs (MemberLookup): Fruitless attempt to lookup
32104         constructors.  Maybe I need to emit default constructors?  That
32105         might be it (currently .NET emits this for me automatically).
32106         (Invocation::OverloadResolve): Cope with Arguments == null.
32107         (Invocation::EmitArguments): new function, shared by the new
32108         constructor and us.
32109         (Invocation::Emit): Handle static and instance methods.  Emit
32110         proper call instruction for virtual or non-virtual invocations.
32111         (New::Emit): Implement.
32112         (New::Resolve): Implement.
32113         (MemberAccess:Resolve): Implement.
32114         (MethodGroupExpr::InstanceExpression): used conforming to the spec
32115         to track instances.
32116         (FieldExpr::Resolve): Set type.
32117
32118         * support.cs: Handle empty arguments.
32119                 
32120         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
32121         SimpleLookup): Auxiliary routines to help parse a qualifier
32122         identifier.  
32123
32124         Update qualifier_identifier rule.
32125
32126         * codegen.cs: Removed debugging messages.
32127
32128         * class.cs: Make this a global thing, this acts just as a "key" to
32129         objects that we might have around.
32130
32131         (Populate): Only initialize method_builders_to_methods once.
32132
32133         * expression.cs (PropertyExpr): Initialize type from the
32134         PropertyType. 
32135
32136         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
32137         Resolve pattern.  Attempt to implicitly convert value to boolean.
32138         Emit code.
32139
32140         * expression.cs: Set the type for the int32/int32 argument case.
32141         (Binary::ResolveOperator): Set the return type to boolean for
32142         comparission operators
32143
32144         * typemanager.cs: Remove debugging print code.
32145
32146         (Invocation::Resolve): resolve type.
32147
32148         * class.cs: Allocate a MemberInfo of the correct size, as the code
32149         elsewhere depends on the test to reflect the correct contents.
32150
32151         (Method::) Keep track of parameters, due to System.Reflection holes
32152
32153         (TypeContainer::Populate): Keep track of MethodBuilders to Method
32154         mapping here.
32155
32156         (TypeContainer::FindMembers): Use ArrayList and then copy an array
32157         of the exact size and return that.
32158
32159         (Class::LookupMethodByBuilder): New function that maps
32160         MethodBuilders to its methods.  Required to locate the information
32161         on methods because System.Reflection bit us again.
32162
32163         * support.cs: New file, contains an interface ParameterData and
32164         two implementations: ReflectionParameters and InternalParameters
32165         used to access Parameter information.  We will need to grow this
32166         as required.
32167
32168         * expression.cs (Invocation::GetParameterData): implement a cache
32169         and a wrapper around the ParameterData creation for methods. 
32170         (Invocation::OverloadResolve): Use new code.
32171
32172 2001-09-13  Ravi Pratap  <ravi@ximian.com>
32173
32174         * class.cs (TypeContainer::EmitField): Remove and move into 
32175         (Field::Define): here and modify accordingly.
32176         (Field.FieldBuilder): New member.
32177         (TypeContainer::Populate): Update accordingly.
32178         (TypeContainer::FindMembers): Implement.
32179
32180 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
32181
32182         * statement.cs: (VariableInfo::VariableType): New field to be
32183         initialized with the full type once it is resolved. 
32184
32185 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
32186
32187         * parameter.cs (GetParameterInfo): Use a type cache to compute
32188         things only once, and to reuse this information
32189
32190         * expression.cs (LocalVariableReference::Emit): Implement.
32191         (OpcodeCast::Emit): fix.
32192
32193         (ParameterReference::Resolve): Implement.
32194         (ParameterReference::Emit): Implement.
32195
32196         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
32197         that are expressions need to stay as Expressions.
32198
32199         * typemanager.cs (CSharpName): Returns the C# name of a type if
32200         possible. 
32201
32202         * expression.cs (Expression::ConvertImplicit): New function that
32203         implements implicit type conversions.
32204
32205         (Expression::ImplicitReferenceConversion): Implements implicit
32206         reference conversions.
32207
32208         (EmptyCast): New type for transparent casts.
32209
32210         (OpcodeCast): New type for casts of types that are performed with
32211         a sequence of bytecodes.
32212
32213         (BoxedCast): New type used for casting value types into reference
32214         types.  Emits a box opcode.
32215
32216         (Binary::DoNumericPromotions): Implements numeric promotions of
32217         and computation of the Binary::Type.
32218
32219         (Binary::EmitBranchable): Optimization.
32220
32221         (Binary::Emit): Implement code emission for expressions.
32222
32223         * typemanager.cs (TypeManager): Added two new core types: sbyte
32224         and byte.
32225
32226 2001-09-12  Ravi Pratap  <ravi@ximian.com>
32227
32228         * class.cs (TypeContainer::FindMembers): Method which does exactly
32229         what Type.FindMembers does, only we don't have to use reflection. No
32230         implementation yet.
32231
32232         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
32233         typecontainer objects as we need to get at them.
32234         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
32235
32236         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
32237         typecontainer object.
32238
32239         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
32240         of just a Report object.
32241
32242 2001-09-11  Ravi Pratap  <ravi@ximian.com>
32243
32244         * class.cs (Event::Define): Go back to using the prefixes "add_" and
32245         "remove_"
32246         (TypeContainer::Populate): Now define the delegates of the type too.
32247         (TypeContainer.Delegates): Property to access the list of delegates defined
32248         in the type.
32249
32250         * delegates.cs (Delegate::Define): Implement partially.
32251
32252         * modifiers.cs (TypeAttr): Handle more flags.
32253
32254 2001-09-11  Ravi Pratap  <ravi@ximian.com>
32255
32256         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
32257         and not <=
32258         (Operator::Define): Re-write logic to get types by using the LookupType method
32259         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
32260         (Indexer::Define): Ditto.
32261         (Event::Define): Ditto.
32262         (Property::Define): Ditto.
32263
32264 2001-09-10  Ravi Pratap  <ravi@ximian.com>
32265
32266         * class.cs (TypeContainer::Populate): Now define operators too. 
32267         (TypeContainer.Operators): New property to access the list of operators
32268         in a type.
32269         (Operator.OperatorMethodBuilder): New member to hold the method builder
32270         for the operator we are defining.
32271         (Operator::Define): Implement.
32272
32273 2001-09-10  Ravi Pratap  <ravi@ximian.com>
32274
32275         * class.cs (Event::Define): Make the prefixes of the accessor methods
32276         addOn_ and removeOn_ 
32277
32278         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
32279         of the location being passed in too. Ideally, this should go later since all
32280         error reporting should be done through the Report object.
32281
32282         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
32283         (Populate): Iterate thru the indexers we have and define them too.
32284         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
32285         for the get and set accessors.
32286         (Indexer::Define): Implement.
32287
32288 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
32289
32290         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
32291         my previous implementation, did not work.
32292
32293         * typemanager.cs: Add a couple of missing types (the longs).
32294
32295         * literal.cs: Use TypeManager.bool_type instead of getting it.
32296
32297         * expression.cs (EventExpr): New kind of expressions.
32298         (Expressio::ExprClassFromMemberInfo): finish
32299
32300 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
32301
32302         * assign.cs: Emit stores to static fields differently.
32303
32304 2001-09-08  Ravi Pratap  <ravi@ximian.com>
32305
32306         * Merge in changes and adjust code to tackle conflicts. Backed out my
32307         code in Assign::Resolve ;-) 
32308
32309 2001-09-08  Ravi Pratap  <ravi@ximian.com>
32310
32311         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
32312         instead Report.Error and also pass in the location.
32313         (CSharpParser::Lexer): New readonly property to return the reference
32314         to the Tokenizer object.
32315         (declare_local_variables): Use Report.Error with location instead of plain 
32316         old error.
32317         (CheckDef): Ditto.
32318
32319         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
32320         (Operator.CheckBinaryOperator): Ditto.
32321
32322         * cs-parser.jay (operator_declarator): Update accordingly.
32323
32324         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
32325         (CheckBinaryOperator): Same here.
32326
32327         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
32328         on the name without any prefixes of namespace names etc. This is because we
32329         already might have something already fully qualified like 
32330         'System.Console.WriteLine'
32331
32332         * assign.cs (Resolve): Begin implementation. Stuck ;-)
32333
32334 2001-09-07  Ravi Pratap  <ravi@ximian.com>
32335
32336         * cs-tokenizer.cs (location): Return a string which also contains
32337         the file name.
32338
32339         * expression.cs (ElementAccess): New class for expressions of the
32340         type 'element access.'
32341         (BaseAccess): New class for expressions of the type 'base access.'
32342         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
32343         respectively.
32344
32345         * cs-parser.jay (element_access): Implement action.
32346         (base_access): Implement actions.
32347         (checked_expression, unchecked_expression): Implement.
32348
32349         * cs-parser.jay (local_variable_type): Correct and implement.
32350         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
32351
32352         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
32353
32354         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
32355         name and the specifiers.
32356
32357         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
32358
32359         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
32360         making them all public ;-)
32361
32362         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
32363         class anyways.
32364
32365 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
32366
32367         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
32368         PropertyExprs.
32369         (FieldExpr, PropertyExprs): New resolved expressions.
32370         (SimpleName::MemberStaticCheck): Perform static checks for access
32371         to non-static fields on static methods. Maybe this should be
32372         generalized for MemberAccesses. 
32373         (SimpleName::ResolveSimpleName): More work on simple name
32374         resolution. 
32375
32376         * cs-parser.jay (primary_expression/qualified_identifier): track
32377         the parameter index.
32378
32379         * codegen.cs (CodeGen::Save): Catch save exception, report error.
32380         (EmitContext::EmitBoolExpression): Chain to expression generation
32381         instead of temporary hack.
32382         (::EmitStatementExpression): Put generic expression code generation.
32383
32384         * assign.cs (Assign::Emit): Implement variable assignments to
32385         local variables, parameters and fields.
32386
32387 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
32388
32389         * statement.cs (Block::GetVariableInfo): New method, returns the
32390         VariableInfo for a variable name in a block.
32391         (Block::GetVariableType): Implement in terms of GetVariableInfo
32392
32393         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
32394         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
32395
32396 2001-09-06  Ravi Pratap  <ravi@ximian.com>
32397
32398         * cs-parser.jay (operator_declaration): Continue on my quest : update
32399         to take attributes argument.
32400         (event_declaration): Ditto.
32401         (enum_declaration): Ditto.
32402         (indexer_declaration): Ditto.
32403
32404         * class.cs (Operator::Operator): Update constructor accordingly.
32405         (Event::Event): Ditto.
32406
32407         * delegate.cs (Delegate::Delegate): Same here.
32408
32409         * enum.cs (Enum::Enum): Same here.
32410
32411 2001-09-05  Ravi Pratap  <ravi@ximian.com>
32412
32413         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
32414
32415         * ../tests/cs0658.cs : New file to demonstrate error 0658.
32416
32417         * attribute.cs (Attributes): New class to encapsulate all attributes which were
32418         being passed around as an arraylist.
32419         (Attributes::AddAttribute): Method to add attribute sections.
32420
32421         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
32422         (struct_declaration): Update accordingly.
32423         (constant_declaration): Update.
32424         (field_declaration): Update.
32425         (method_header): Update.
32426         (fixed_parameter): Update.
32427         (parameter_array): Ditto.
32428         (property_declaration): Ditto.
32429         (destructor_declaration): Ditto.
32430
32431         * class.cs (Struct::Struct): Update constructors accordingly.
32432         (Class::Class): Ditto.
32433         (Field::Field): Ditto.
32434         (Method::Method): Ditto.
32435         (Property::Property): Ditto.
32436         (TypeContainer::OptAttribute): update property's return type.
32437
32438         * interface.cs (Interface.opt_attributes): New member.
32439         (Interface::Interface): Update to take the extra Attributes argument.
32440
32441         * parameter.cs (Parameter::Parameter): Ditto.
32442
32443         * constant.cs (Constant::Constant): Ditto.
32444
32445         * interface.cs (InterfaceMemberBase): New OptAttributes field.
32446         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
32447         the attributes as a parameter.
32448         (InterfaceProperty): Update constructor call.
32449         (InterfaceEvent): Ditto.
32450         (InterfaceMethod): Ditto.
32451         (InterfaceIndexer): Ditto.
32452
32453         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
32454         pass the attributes too.
32455         (interface_event_declaration): Ditto.
32456         (interface_property_declaration): Ditto.
32457         (interface_method_declaration): Ditto.
32458         (interface_declaration): Ditto.
32459
32460 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
32461
32462         * class.cs (Method::Define): Track the "static Main" definition to
32463         create an entry point. 
32464
32465         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
32466         EntryPoint if we find it. 
32467
32468         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
32469         (EmitContext::ig): Make this variable public.
32470
32471         * driver.cs: Make the default output file be the first file name
32472         with the .exe extension.  
32473
32474         Detect empty compilations
32475
32476         Handle various kinds of output targets.  Handle --target and
32477         rename -t to --dumper.
32478
32479         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
32480         methods inherited from Expression return now an Expression.  This
32481         will is used during the tree rewriting as we resolve them during
32482         semantic analysis.
32483
32484         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
32485         the spec.  Missing entirely is the information about
32486         accessability of elements of it.
32487
32488         (Expression::ExprClassFromMemberInfo): New constructor for
32489         Expressions that creates a fully initialized Expression based on
32490         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
32491         a Type.
32492
32493         (Invocation::Resolve): Begin implementing resolution of invocations.
32494
32495         * literal.cs (StringLiteral):  Implement Emit.
32496
32497 2001-09-05  Ravi Pratap  <ravi@ximian.com>
32498
32499         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
32500         member.
32501
32502 2001-09-04  Ravi Pratap  <ravi@ximian.com>
32503
32504         * cs-parser.jay (attribute_arguments): Implement actions.
32505         (attribute): Fix bug in production. Implement action.
32506         (attribute_list): Implement.
32507         (attribute_target): Implement.
32508         (attribute_target_specifier, opt_target_specifier): Implement
32509         (CheckAttributeTarget): New method to check if the attribute target
32510         is valid.
32511         (attribute_section): Implement.
32512         (opt_attributes): Implement.
32513
32514         * attribute.cs : New file to handle attributes.
32515         (Attribute): Class to hold attribute info.
32516
32517         * cs-parser.jay (opt_attribute_target_specifier): Remove production
32518         (attribute_section): Modify production to use 2 different rules to 
32519         achieve the same thing. 1 s/r conflict down !
32520         Clean out commented, useless, non-reducing dimension_separator rules.
32521
32522         * class.cs (TypeContainer.attributes): New member to hold list
32523         of attributes for a type.
32524         (Struct::Struct): Modify to take one more argument, the attribute list.
32525         (Class::Class): Ditto.
32526         (Field::Field): Ditto.
32527         (Method::Method): Ditto.
32528         (Property::Property): Ditto.
32529
32530         * cs-parser.jay (struct_declaration): Update constructor call to
32531         pass in the attributes too.
32532         (class_declaration): Ditto.
32533         (constant_declaration): Ditto.
32534         (field_declaration): Ditto.
32535         (method_header): Ditto.
32536         (fixed_parameter): Ditto.
32537         (parameter_array): Ditto.
32538         (property_declaration): Ditto.
32539
32540         * constant.cs (Constant::Constant): Update constructor similarly.
32541         Use System.Collections.
32542
32543         * parameter.cs (Parameter::Parameter): Update as above.
32544
32545 2001-09-02  Ravi Pratap  <ravi@ximian.com>
32546
32547         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
32548         (TypeContainer.delegates): New member to hold list of delegates.
32549
32550         * cs-parser.jay (delegate_declaration): Implement the action correctly 
32551         this time as I seem to be on crack ;-)
32552
32553 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
32554
32555         * rootcontext.cs (RootContext::IsNamespace): new function, used to
32556         tell whether an identifier represents a namespace.
32557
32558         * expression.cs (NamespaceExpr): A namespace expression, used only
32559         temporarly during expression resolution.
32560         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
32561         utility functions to resolve names on expressions.
32562
32563 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
32564
32565         * codegen.cs: Add hook for StatementExpressions. 
32566
32567         * class.cs: Fix inverted test for static flag in methods.
32568
32569 2001-09-02  Ravi Pratap  <ravi@ximian.com>
32570
32571         * class.cs (Operator::CheckUnaryOperator): Correct error number used
32572         to make it coincide with MS' number.
32573         (Operator::CheckBinaryOperator): Ditto.
32574
32575         * ../errors/errors.txt : Remove error numbers added earlier.
32576
32577         * ../errors/cs1019.cs : Test case for error # 1019
32578
32579         * ../errros/cs1020.cs : Test case for error # 1020
32580
32581         * cs-parser.jay : Clean out commented cruft.
32582         (dimension_separators, dimension_separator): Comment out. Ostensibly not
32583         used anywhere - non-reducing rule.
32584         (namespace_declarations): Non-reducing rule - comment out.
32585
32586         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
32587         with TypeContainer::AddEnum.
32588
32589         * delegate.cs : New file for delegate handling classes.
32590         (Delegate): Class for declaring delegates.
32591
32592         * makefile : Update.
32593
32594         * cs-parser.jay (delegate_declaration): Implement.
32595
32596 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
32597
32598         * class.cs (Event::Define): Implement.
32599         (Event.EventBuilder): New member.
32600
32601         * class.cs (TypeContainer::Populate): Update to define all enums and events
32602         we have.
32603         (Events): New property for the events arraylist we hold. Shouldn't we move to using
32604         readonly fields for all these cases ?
32605
32606 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
32607
32608         * class.cs (Property): Revamp to use the convention of making fields readonly.
32609         Accordingly modify code elsewhere.
32610
32611         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
32612         the Define method of the Property class.
32613
32614         * class.cs : Clean up applied patch and update references to variables etc. Fix 
32615         trivial bug.
32616         (TypeContainer::Populate): Update to define all the properties we have. Also
32617         define all enumerations.
32618
32619         * enum.cs (Define): Implement.
32620
32621 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
32622
32623         * cs-parser.jay (overloadable_operator): The semantic value is an
32624         enum of the Operator class.
32625         (operator_declarator): Implement actions.
32626         (operator_declaration): Implement.
32627
32628         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
32629         validity of definitions.
32630         (Operator::CheckBinaryOperator): Static method to check for binary operators
32631         (TypeContainer::AddOperator): New method to add an operator to a type.
32632
32633         * cs-parser.jay (indexer_declaration): Added line to actually call the
32634         AddIndexer method so it gets added ;-)
32635
32636         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
32637         already taken care of by the MS compiler ?  
32638
32639 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
32640
32641         * class.cs (Operator): New class for operator declarations.
32642         (Operator::OpType): Enum for the various operators.
32643
32644 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
32645
32646         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
32647         ostensibly handle this in semantic analysis.
32648
32649         * cs-parser.jay (general_catch_clause): Comment out
32650         (specific_catch_clauses, specific_catch_clause): Ditto.
32651         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
32652         (catch_args, opt_catch_args): New productions.
32653         (catch_clause): Rewrite to use the new productions above
32654         (catch_clauses): Modify accordingly.
32655         (opt_catch_clauses): New production to use in try_statement
32656         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
32657         and re-write the code in the actions to extract the specific and
32658         general catch clauses by being a little smart ;-)
32659
32660         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
32661         Hooray, try and catch statements parse fine !
32662
32663 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
32664
32665         * statement.cs (Block::GetVariableType): Fix logic to extract the type
32666         string from the hashtable of variables.
32667
32668         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
32669         I end up making that mistake ;-)
32670         (catch_clauses): Fixed gross error which made Key and Value of the 
32671         DictionaryEntry the same : $1 !!
32672
32673 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
32674
32675         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
32676
32677         * cs-parser.jay (event_declaration): Correct to remove the semicolon
32678         when the add and remove accessors are specified. 
32679
32680 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
32681
32682         * cs-parser.jay (IndexerDeclaration): New helper class to hold
32683         information about indexer_declarator.
32684         (indexer_declarator): Implement actions.
32685         (parsing_indexer): New local boolean used to keep track of whether
32686         we are parsing indexers or properties. This is necessary because 
32687         implicit_parameters come into picture even for the get accessor in the 
32688         case of an indexer.
32689         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
32690
32691         * class.cs (Indexer): New class for indexer declarations.
32692         (TypeContainer::AddIndexer): New method to add an indexer to a type.
32693         (TypeContainer::indexers): New member to hold list of indexers for the
32694         type.
32695
32696 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
32697
32698         * cs-parser.jay (add_accessor_declaration): Implement action.
32699         (remove_accessor_declaration): Implement action.
32700         (event_accessors_declaration): Implement
32701         (variable_declarators): swap statements for first rule - trivial.
32702
32703         * class.cs (Event): New class to hold information about event
32704         declarations.
32705         (TypeContainer::AddEvent): New method to add an event to a type
32706         (TypeContainer::events): New member to hold list of events.
32707
32708         * cs-parser.jay (event_declaration): Implement actions.
32709
32710 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
32711
32712         * cs-parser.jay (dim_separators): Implement. Make it a string
32713         concatenating all the commas together, just as they appear.
32714         (opt_dim_separators): Modify accordingly
32715         (rank_specifiers): Update accordingly. Basically do the same
32716         thing - instead, collect the brackets here.
32717         (opt_rank_sepcifiers): Modify accordingly.
32718         (array_type): Modify to actually return the complete type string
32719         instead of ignoring the rank_specifiers.
32720         (expression_list): Implement to collect the expressions
32721         (variable_initializer): Implement. We make it a list of expressions
32722         essentially so that we can handle the array_initializer case neatly too.
32723         (variable_initializer_list): Implement.
32724         (array_initializer): Make it a list of variable_initializers
32725         (opt_array_initializer): Modify accordingly.
32726
32727         * expression.cs (New::NType): Add enumeration to help us
32728         keep track of whether we have an object/delegate creation
32729         or an array creation.
32730         (New:NewType, New::Rank, New::Indices, New::Initializers): New
32731         members to hold data about array creation.
32732         (New:New): Modify to update NewType
32733         (New:New): New Overloaded contructor for the array creation
32734         case.
32735
32736         * cs-parser.jay (array_creation_expression): Implement to call
32737         the overloaded New constructor.
32738
32739 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
32740
32741         * class.cs (TypeContainer::Constructors): Return member
32742         constructors instead of returning null.
32743
32744 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
32745
32746         * typemanager.cs (InitCoreTypes): Initialize the various core
32747         types after we have populated the type manager with the user
32748         defined types (this distinction will be important later while
32749         compiling corlib.dll)
32750
32751         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
32752         on Expression Classification.  Now all expressions have a method
32753         `Resolve' and a method `Emit'.
32754
32755         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
32756         generation from working.     Also add some temporary debugging
32757         code. 
32758
32759 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
32760
32761         * codegen.cs: Lots of code generation pieces.  This is only the
32762         beginning, will continue tomorrow with more touches of polish.  We
32763         handle the fundamentals of if, while, do, for, return.  Others are
32764         trickier and I need to start working on invocations soon.
32765
32766         * gen-treedump.cs: Bug fix, use s.Increment here instead of
32767         s.InitStatement. 
32768
32769         * codegen.cs (EmitContext): New struct, used during code
32770         emission to keep a context.   Most of the code generation will be
32771         here. 
32772
32773         * cs-parser.jay: Add embedded blocks to the list of statements of
32774         this block.  So code generation proceeds in a top down fashion.
32775
32776 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
32777
32778         * statement.cs: Add support for multiple child blocks.
32779
32780 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
32781
32782         * codegen.cs (EmitCode): New function, will emit the code for a
32783         Block of code given a TypeContainer and its ILGenerator. 
32784
32785         * statement.cs (Block): Standard public readonly optimization.
32786         (Block::Block constructors): Link children. 
32787         (Block::Child): Child Linker.
32788         (Block::EmitVariables): Emits IL variable declarations.
32789
32790         * class.cs: Drop support for MethodGroups here, delay until
32791         Semantic Analysis.
32792         (Method::): Applied the same simplification that I did before, and
32793         move from Properties to public readonly fields.
32794         (Method::ParameterTypes): Returns the parameter types for the
32795         function, and implements a cache that will be useful later when I
32796         do error checking and the semantic analysis on the methods is
32797         performed.
32798         (Constructor::GetCallingConvention): Renamed from CallingConvetion
32799         and made a method, optional argument tells whether this is a class
32800         or a structure to apply the `has-this' bit.
32801         (Method::GetCallingConvention): Implement, returns the calling
32802         convention. 
32803         (Method::Define): Defines the type, a second pass is performed
32804         later to populate the methods.
32805
32806         (Constructor::ParameterTypes): implement a cache similar to the
32807         one on Method::ParameterTypes, useful later when we do semantic
32808         analysis. 
32809
32810         (TypeContainer::EmitMethod):  New method.  Emits methods.
32811
32812         * expression.cs: Removed MethodGroup class from here.
32813
32814         * parameter.cs (Parameters::GetCallingConvention): new method.
32815
32816 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
32817
32818         * class.cs (TypeContainer::Populate): Drop RootContext from the
32819         argument. 
32820
32821         (Constructor::CallingConvention): Returns the calling convention.
32822         (Constructor::ParameterTypes): Returns the constructor parameter
32823         types. 
32824
32825         (TypeContainer::AddConstructor): Keep track of default constructor
32826         and the default static constructor.
32827
32828         (Constructor::) Another class that starts using `public readonly'
32829         instead of properties. 
32830
32831         (Constructor::IsDefault): Whether this is a default constructor. 
32832
32833         (Field::) use readonly public fields instead of properties also.
32834
32835         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
32836         track of static constructors;  If none is used, turn on
32837         BeforeFieldInit in the TypeAttributes. 
32838
32839         * cs-parser.jay (opt_argument_list): now the return can be null
32840         for the cases where there are no arguments. 
32841
32842         (constructor_declarator): If there is no implicit `base' or
32843         `this', then invoke the default parent constructor. 
32844
32845         * modifiers.cs (MethodAttr): New static function maps a set of
32846         modifiers flags into a MethodAttributes enum
32847         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
32848         MethodAttr, TypeAttr to represent the various mappings where the
32849         modifiers are used.
32850         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
32851
32852 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
32853
32854         * parameter.cs (GetParameterInfo): Fix bug where there would be no
32855         method arguments.
32856
32857         * interface.cs (PopulateIndexer): Implemented the code generator
32858         for interface indexers.
32859
32860 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
32861
32862         * interface.cs (InterfaceMemberBase): Now we track the new status
32863         here.  
32864
32865         (PopulateProperty): Implement property population.  Woohoo!  Got
32866         Methods and Properties going today. 
32867
32868         Removed all the properties for interfaces, and replaced them with
32869         `public readonly' fields. 
32870
32871 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
32872
32873         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
32874         initialize their hashtables/arraylists only when they are needed
32875         instead of doing this always.
32876
32877         * parameter.cs: Handle refs and out parameters.
32878
32879         * cs-parser.jay: Use an ArrayList to construct the arguments
32880         instead of the ParameterCollection, and then cast that to a
32881         Parameter[] array.
32882
32883         * parameter.cs: Drop the use of ParameterCollection and use
32884         instead arrays of Parameters.
32885
32886         (GetParameterInfo): Use the Type, not the Name when resolving
32887         types. 
32888
32889 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
32890
32891         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
32892         and instead use public readonly fields.
32893
32894         * class.cs: Put back walking code for type containers.
32895
32896 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
32897
32898         * class.cs (MakeConstant): Code to define constants.
32899
32900         * rootcontext.cs (LookupType): New function.  Used to locate types 
32901
32902
32903 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
32904
32905         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
32906         this System.Reflection code is.  Kudos to Microsoft
32907
32908         * typemanager.cs: Implement a type cache and avoid loading all
32909         types at boot time.  Wrap in LookupType the internals.  This made
32910         the compiler so much faster.  Wow.  I rule!
32911
32912         * driver.cs: Make sure we always load mscorlib first (for
32913         debugging purposes, nothing really important).
32914
32915         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
32916         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
32917
32918         * rootcontext.cs: Lookup types on their namespace;  Lookup types
32919         on namespaces that have been imported using the `using' keyword.
32920
32921         * class.cs (TypeContainer::TypeAttr): Virtualize.
32922         (Class::TypeAttr): Return attributes suitable for this bad boy.
32923         (Struct::TypeAttr): ditto.
32924         Handle nested classes.
32925         (TypeContainer::) Remove all the type visiting code, it is now
32926         replaced with the rootcontext.cs code
32927
32928         * rootcontext.cs (GetClassBases): Added support for structs. 
32929
32930 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
32931
32932         * interface.cs, statement.cs, class.cs, parameter.cs,
32933         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
32934         Drop use of TypeRefs, and use strings instead.
32935
32936 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
32937
32938         * rootcontext.cs: 
32939
32940         * class.cs (Struct::Struct): set the SEALED flags after
32941         checking the modifiers.
32942         (TypeContainer::TypeAttr): new property, returns the
32943         TypeAttributes for a class.  
32944
32945         * cs-parser.jay (type_list): Oops, list production was creating a
32946         new list of base types.
32947
32948         * rootcontext.cs (StdLib): New property.
32949         (GetInterfaceTypeByName): returns an interface by type name, and
32950         encapsulates error handling here.
32951         (GetInterfaces): simplified.
32952         (ResolveTree): Encapsulated all the tree resolution here.
32953         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
32954         types. 
32955
32956         * driver.cs: Add support for --nostdlib, to avoid loading the
32957         default assemblies.
32958         (Main): Do not put tree resolution here. 
32959
32960         * rootcontext.cs: Beginning of the class resolution.
32961
32962 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
32963
32964         * rootcontext.cs: Provide better error reporting. 
32965
32966         * cs-parser.jay (interface_base): set our $$ to be interfaces.
32967
32968         * rootcontext.cs (CreateInterface): Handle the case where there
32969         are no parent interfaces.
32970
32971         (CloseTypes): Routine to flush types at the end.
32972         (CreateInterface): Track types.
32973         (GetInterfaces): Returns an array of Types from the list of
32974         defined interfaces.
32975
32976         * typemanager.c (AddUserType): Mechanism to track user types (puts
32977         the type on the global type hash, and allows us to close it at the
32978         end). 
32979
32980 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
32981
32982         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
32983         RecordInterface instead.
32984
32985         * cs-parser.jay: Updated to reflect changes above.
32986
32987         * decl.cs (Definition): Keep track of the TypeBuilder type that
32988         represents this type here.  Not sure we will use it in the long
32989         run, but wont hurt for now.
32990
32991         * driver.cs: Smaller changes to accomodate the new code.
32992
32993         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
32994         when done. 
32995
32996         * rootcontext.cs (CreateInterface):  New method, used to create
32997         the System.TypeBuilder type for interfaces.
32998         (ResolveInterfaces): new entry point to resolve the interface
32999         hierarchy. 
33000         (CodeGen): Property, used to keep track of the code generator.
33001
33002 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
33003
33004         * cs-parser.jay: Add a second production for delegate_declaration
33005         with `VOID'.
33006
33007         (enum_body): Put an opt_comma here instead of putting it on
33008         enum_body or enum_member_declarations so we can handle trailing
33009         commas on enumeration members.  Gets rid of a shift/reduce.
33010
33011         (type_list): Need a COMMA in the middle.
33012
33013         (indexer_declaration): Tell tokenizer to recognize get/set
33014
33015         * Remove old targets.
33016
33017         * Re-add the parser target.
33018
33019 2001-07-13  Simon Cozens <simon@simon-cozens.org>
33020
33021         * cs-parser.jay: Add precendence rules for a number of operators
33022         ot reduce the number of shift/reduce conflicts in the grammar.
33023
33024 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
33025
33026         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
33027         and put it here.
33028
33029         Get rid of old crufty code.
33030
33031         * rootcontext.cs: Use this to keep track of the parsed
33032         representation and the defined types available to the program. 
33033
33034         * gen-treedump.cs: adjust for new convention.
33035
33036         * type.cs: Split out the type manager, and the assembly builder
33037         from here. 
33038
33039         * typemanager.cs: the type manager will live here now.
33040
33041         * cil-codegen.cs: And the code generator here. 
33042
33043 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
33044
33045         * makefile: Fixed up for easy making.
33046
33047 2001-07-13  Simon Cozens <simon@simon-cozens.org>
33048
33049         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
33050         the 
33051
33052         (unary_expression): Expand pre_increment_expression and
33053         post_decrement_expression to reduce a shift/reduce.
33054
33055 2001-07-11  Simon Cozens
33056
33057         * cs-tokenizer.cs: Hex numbers should begin with a 0.
33058
33059         Improve allow_keyword_as_indent name.
33060
33061 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
33062
33063         * Adjustments for Beta2. 
33064
33065 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
33066
33067         * decl.cs: Added `Define' abstract method.
33068         (InTransit): new property, used to catch recursive definitions. 
33069
33070         * interface.cs: Implement `Define'. 
33071
33072         * modifiers.cs: Map Modifiers.constants to
33073         System.Reflection.TypeAttribute flags.
33074
33075         * class.cs: Keep track of types and user-defined types.
33076         (BuilderInit): New method for creating an assembly
33077         (ResolveType): New function to launch the resolution process, only
33078         used by interfaces for now.
33079
33080         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
33081         that are inserted into the name space. 
33082
33083 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
33084
33085         * ARGH.  I have screwed up my tree so many times due to the use of
33086         rsync rather than using CVS.  Going to fix this at once. 
33087
33088         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
33089         load types.
33090
33091 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
33092
33093         * Experiment successful: Use System.Type rather that our own
33094         version of Type.  
33095
33096 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
33097
33098         * cs-parser.jay: Removed nsAliases from here.
33099
33100         Use new namespaces, handle `using XXX;' 
33101
33102         * namespace.cs: Reimplemented namespace handling, use a recursive
33103         definition of the class.  Now we can keep track of using clauses
33104         and catch invalid using clauses.
33105
33106 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
33107
33108         * gen-treedump.cs: Adapted for all the renaming.
33109
33110         * expression.cs (Expression): this class now has a Type property
33111         which returns an expression Type.
33112
33113         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
33114         `Type', as this has a different meaning now in the base
33115
33116 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
33117
33118         * interface.cs, class.cs: Removed from all the sources the
33119         references to signature computation, as we can not do method
33120         signature computation during the parsing time, as we are not
33121         trying to solve at that point distinguishing:
33122
33123         class X {
33124                 void a (Blah x) {}
33125                 void a (NS.Blah x) {}
33126         }
33127
33128         Which depending on the context might be valid or not, as we do not
33129         know if Blah is the same thing as NS.Blah at that point.
33130
33131         * Redid everything so the code uses TypeRefs now instead of
33132         Types.  TypeRefs are just temporary type placeholders, that need
33133         to be resolved.  They initially have a pointer to a string and the
33134         current scope in which they are used.  This is used later by the
33135         compiler to resolve the reference to an actual Type. 
33136
33137         * DeclSpace is no longer a CIR.Type, and neither are
33138         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
33139         are all DeclSpaces, but no Types. 
33140
33141         * type.cs (TypeRefManager): This implements the TypeRef manager,
33142         which keeps track of all the types that need to be resolved after
33143         the parsing has finished. 
33144
33145 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
33146
33147         * ARGH.  We are going to have to store `foreach' as a class rather
33148         than resolving it, as we need to verify error 1579 after name
33149         resolution.   *OR* we could keep a flag that says `This request to
33150         IEnumerator comes from a foreach statement' which we can then use
33151         to generate the error.
33152
33153 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
33154
33155         * class.cs (TypeContainer.AddMethod): we now add methods to the
33156         MethodGroup instead of the method hashtable.  
33157
33158         * expression.cs: Add MethodGroup abstraction, which gets us one
33159         step closer to the specification in the way we handle method
33160         declarations.  
33161
33162         * cs-parser.jay (primary_expression): qualified_identifier now
33163         tried to match up an identifier to a local variable reference or
33164         to a parameter reference.
33165
33166         current_local_parameters is now a parser global variable that
33167         points to the current parameters for the block, used during name
33168         lookup.
33169
33170         (property_declaration): Now creates an implicit `value' argument to
33171         the set accessor.
33172
33173 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
33174
33175         * parameter.cs: Do not use `param' arguments as part of the
33176         signature, per the spec.
33177
33178 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
33179
33180         * decl.cs: Base class for classes, structs and interfaces.  This
33181         is the "Declaration Space" 
33182
33183         * cs-parser.jay: Use CheckDef for checking declaration errors
33184         instead of having one on each function.
33185
33186         * class.cs: Factor out some code for handling error handling in
33187         accordance to the "Declarations" section in the "Basic Concepts"
33188         chapter in the ECMA C# spec.
33189
33190         * interface.cs: Make all interface member classes derive from
33191         InterfaceMemberBase.
33192
33193 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
33194
33195         * Many things: all interfaces are parsed and generated in
33196         gen-treedump.  Support for member variables, constructors,
33197         destructors, properties, constants is there.
33198
33199         Beginning of the IL backend, but very little done, just there for
33200         testing purposes. 
33201
33202 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
33203
33204         * cs-parser.jay: Fix labeled statement.
33205
33206         * cs-tokenizer.cs (escape): Escape " and ' always.
33207         ref_line, ref_name: keep track of the line/filename as instructed
33208         by #line by the compiler.
33209         Parse #line.
33210
33211 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
33212
33213         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
33214         to match the values in System.CodeDOM.
33215
33216         Divid renamed to Divide.
33217
33218         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
33219         statements. 
33220         (Statements.set): remove.
33221
33222         * System.CodeDOM/CodeCatchClause.cs: always have a valid
33223         statements. 
33224
33225         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
33226         falseStatements always have valid values. 
33227
33228         * cs-parser.jay: Use System.CodeDOM now.
33229