2010-01-20 Zoltan Varga <vargaz@gmail.com>
[mono.git] / mcs / mcs / ChangeLog
1 2010-01-15  Marek Safar  <marek.safar@gmail.com>
2
3         * *.cs: Use only 1 member kind enum.
4
5 2010-01-15  Marek Safar  <marek.safar@gmail.com>
6
7         * *.cs: Add event specification.
8
9 2010-01-14  Marek Safar  <marek.safar@gmail.com>
10
11         * membercache.cs: Extracted from decl.cs.
12         
13         * *.cs: Put more infrastructure in place.
14
15 2010-01-13  Marek Safar  <marek.safar@gmail.com>
16
17         * *.cs: Add property specification, unused yet.
18
19 2010-01-13  Marek Safar  <marek.safar@gmail.com>
20
21         * property.cs: Move all property based declarations into a new file.
22
23 2010-01-13  Marek Safar  <marek.safar at gmail.com>
24
25         * expression.cs (Conditional): Resolve reduced expression.
26
27 2010-01-13  Marek Safar  <marek.safar at gmail.com>
28
29         * *.cs: Introduced non-generic method specification.
30
31 2010-01-07  Marek Safar  <marek.safar@gmail.com>
32
33         * method.cs: Move all method based declarations into a new file.
34
35 2010-01-07  Marek Safar  <marek.safar@gmail.com>
36
37         * *.cs: Extract field specification.
38
39 2009-12-17  Marek Safar  <marek.safar@gmail.com>
40
41         * field.cs: Extracted from class.cs
42
43 2009-12-15  Marek Safar  <marek.safar@gmail.com>
44
45         * attribute.cs (GetFixedBuffer): Work on field definition only.
46
47 2009-12-15  Marek Safar  <marek.safar@gmail.com>
48
49         * *.cs: Clean up NET_4_0 conditional where possible.
50
51 2009-12-14 Rodrigo Kumpera  <rkumpera@novell.com>
52
53         support.cs (DynamicType): Assembly property returns the assembly builder.
54         This is required due to how compiler context works in corlib.
55
56 2009-12-14  Marek Safar  <marek.safar@gmail.com>
57
58         A fix for bug #564376
59         * assign.cs (LocalTemporary): Removed no longer needed special
60         by-ref handling.
61
62 2009-12-11  Marek Safar  <marek.safar@gmail.com>
63
64         * modifiers.cs, decl.cs, iterators.cs, const.cs, anonymous.cs,
65         class.cs, delegate.cs, cs-parser.jay, enum.cs: Turn modifiers into
66         enum for easier debugging.
67
68 2009-12-10  Marek Safar  <marek.safar@gmail.com>
69
70         * decl.cs, anonymous.cs, class.cs: Sealed Define it's now main entry
71         point.
72         
73         * parameter.cs, delegate.cs, dynamic.cs: Don't use builder methods
74         directly.
75
76 2009-12-10  Marek Safar  <marek.safar@gmail.com>
77
78         * cs-parser.jay, statement.cs: Handle parser error in code
79         completition.
80
81 2009-12-10  Marek Safar  <marek.safar@gmail.com>
82
83         * ecore.cs: Ignore base imported methods when they are already
84         in method bag.
85         
86         * eval.cs: Handle non-existent keys.
87         
88         * report.cs, driver.cs: Make fatal work with console printer only.
89
90 2009-12-08 Rodrigo Kumpera  <rkumpera@novell.com>
91
92         * typemanager.cs (MakeGenericMethod): Fix stupid mistake.
93
94 2009-12-08 Rodrigo Kumpera  <rkumpera@novell.com>
95
96         * typemanager.cs: Add MakeGenericMethod that checks if the method
97         is really the generic method definition.
98
99         ecore.cs (MethodGroupExpr:IsApplicable): Use new TypeManager function
100         to inflate generic methods.
101
102 2009-12-08  Marek Safar  <marek.safar@gmail.com>
103
104         A fix for bug #561149
105         * anonymous.cs: Use actual type parameters when checking for generic
106         method host.
107
108 2009-12-08  Marek Safar  <marek.safar@gmail.com>
109
110         A fix for bug #561369
111         * expression.cs (DoNumericPromotion): Fixed typo.
112
113 2009-12-08  Marek Safar  <marek.safar@gmail.com>
114
115         *.cs: Moving to generics world.
116
117         cs-parser.jay: Removed current_array_type.
118
119 2009-12-07  Marek Safar  <marek.safar@gmail.com>
120
121         *.cs: Moving to generics world.
122
123 2009-12-04  Marek Safar  <marek.safar@gmail.com>
124
125         *.cs: Moving to generics world (day 2).
126
127 2009-12-03  Marek Safar  <marek.safar@gmail.com>
128
129         *.cs: Moving to generics world.
130
131 2009-12-02  Marek Safar  <marek.safar@gmail.com>
132
133         * typemanager.cs, parameter.cs, class.cs, delegate.cs, attribute.cs:
134         Encode dynamic type attribute for elements where attributes cannot
135         be used.
136
137 2009-12-01  Marek Safar  <marek.safar@gmail.com>
138
139          argument.cs, assign.cs, expression.cs, cs-parser.jay: Named
140          arguments by ref.
141
142 2009-12-01  Marek Safar  <marek.safar@gmail.com>
143
144         A fix for bug #360455
145         * class.cs: Never report a unused warning for generic events to
146         workaround wrong expression type.
147
148 2009-11-30  Marek Safar  <marek.safar@gmail.com>
149
150         A fix for bug #558305
151         * decl.cs, class.cs: Check partial method definitions using correct
152         flag.
153
154 2009-11-30  Marek Safar  <marek.safar@gmail.com>
155
156         * argument.cs: Don't cache rarely used dynamic flag.
157
158 2009-11-27  Marek Safar  <marek.safar@gmail.com>
159
160         * cs-parser.jay: Use jay global stacks (saves over 3MB for corlib).
161
162 2009-11-27  Marek Safar  <marek.safar@gmail.com>
163
164         * ecore.cs (SimpleName): Removed no longer needed in_transit as
165         Resolve is now non-reentrant (saves ~0.6MB for corlib).
166
167 2009-11-26  Marek Safar  <marek.safar@gmail.com>
168
169         A fix for bug #545081
170         * decl.cs: Check private nested types of nested types recursively.
171
172 2009-11-26  Marek Safar  <marek.safar@gmail.com>
173
174         A fix for bug #558305
175         * location.cs: Ignore self referencing #line directive
176
177 2009-11-26  Marek Safar  <marek.safar@gmail.com>
178
179         A fix for bug #558292
180         * class.cs: Allow single unsafe fixed buffer fields.
181
182 2009-11-26  Marek Safar  <marek.safar@gmail.com>
183
184         * expression: Optimize few more zero-based operations.
185
186 2009-11-26  Marek Safar  <marek.safar@gmail.com>
187
188         * cs-tokenizer.cs, cs-parser.jay: Simplify literal parsing, also
189         avoids boxing of literal values.
190
191 2009-11-26  Marek Safar  <marek.safar@gmail.com>
192
193         * cs-tokenizer.cs, argument.cs, eval.cs, linq.cs, decl.cs,
194         expression.cs, ecore.cs, location.cs, cs-parser.jay, attribute.cs,
195         codegen.cs: LocatedToken redesing to avoid excessive allocation and
196         boxing (saves ~7MB for corlib). Also fixes presise token location.
197
198 2009-11-25  Marek Safar  <marek.safar@gmail.com>
199
200         * ecore.cs, cs-parser.jay: Keep parser structures local. Share
201         common data buckers.
202
203 2009-11-24  Marek Safar  <marek.safar@gmail.com>
204
205         * expression.cs: Lower static array initializer barrier.
206         
207         * support.cs, driver.cs: Share reader buffer.
208
209 2009-11-23  Marek Safar  <marek.safar@gmail.com>
210
211         * cs-tokenizer.cs, support.cs: Some tokenizer optimizations.
212
213 2009-11-23  Marek Safar  <marek.safar@gmail.com>
214
215         * cs-tokenizer.cs, support.cs: Use Dictionary instead of Hashtable,
216         cleanup some obsolete code.
217
218 2009-11-20  Marek Safar  <marek.safar@gmail.com>
219
220         * context.cs, expression.cs, ecore.cs, complete.cs: Cleaned up
221         Expression.Resolve.
222
223 2009-11-20  Marek Safar  <marek.safar@gmail.com>
224
225         * *.cs: Resolved expressions are never resolved again, this helps to
226         uncover some not easy to find bugs and improve the performance.
227
228 2009-11-19  Marek Safar  <marek.safar@gmail.com>
229
230         * *.cs: Made constant expressions fully compatible with any other
231         expression.
232
233 2009-11-19  Marek Safar  <marek.safar@gmail.com>
234
235         * *.cs: DoResolve is a worker method and has to be protected.
236
237 2009-11-18  Marek Safar  <marek.safar@gmail.com>
238
239         * *.cs: More context specific handling.
240
241 2009-11-17  Marek Safar  <marek.safar@gmail.com>
242
243         * *.cs: More context specific handling.
244
245 2009-11-16  Marek Safar  <marek.safar@gmail.com>
246
247         * dynamic.cs, class.cs: Removed few fixed user types conversions.
248         
249         * symbolwriter.cs: Uses public ILOffset.
250
251 2009-11-13  Marek Safar  <marek.safar@gmail.com>
252
253         A fix for bug #553650
254         * generic.cs: Another missing TypeToCoreType, still too many to fix.
255
256 2009-11-13  Marek Safar  <marek.safar@gmail.com>
257
258         A fix for bug #555170
259
260         * class.cs, delegate.cs, enum.cs: Constants have to be available
261         for parameters resolve.
262
263 2009-11-12  Marek Safar  <marek.safar@gmail.com>
264
265         * typemanager.cs, argument.cs, support.cs, delegate.cs: Dynamic
266         arrays.
267
268 2009-11-12  Marek Safar  <marek.safar@gmail.com>
269
270         * argument.cs, context.cs, expression.cs, ecore.cs: Dynamic binding
271         with a statically known candidate set.
272
273 2009-11-11  Scott Peterson  <lunchtimemama@gmail.com>
274
275         * generic.cs: Made type inflation for generic constraint checks
276         recursive. This fixes BGO #553655.
277
278 2009-11-11  Marek Safar  <marek.safar@gmail.com>
279
280         * dynamic.cs, decl.cs, expression.cs, ecore.cs: More dynamic type
281         checks.
282
283 2009-11-10  Marek Safar  <marek.safar@gmail.com>
284
285         * typemanager.cs, generic.cs, parameter.cs, argument.cs, dynamic.cs,
286         linq.cs, rootcontext.cs, ecore.cs, class.cs, delegate.cs,
287         attribute.cs: Add some dynamic error checking.
288
289 2009-11-07  Marek Safar  <marek.safar@gmail.com>
290
291         A fix for bug #553465
292
293         * expression.cs: Fixed mixed version of expression tree anonymous
294         type.
295
296 2009-11-06  Marek Safar  <marek.safar@gmail.com>
297
298         A fix for bug #553031
299
300         * linq.cs, expression.cs, class.cs, cs-parser.jay: Initialize
301         expression tree version of anonymous type with members declaration.
302
303 2009-11-05  Marek Safar  <marek.safar@gmail.com>
304
305         * parameter.cs: Handle nullable parameter default expression.
306         
307         * argument.cs, dynamic.cs, expression.cs, support.cs, ecore.cs,
308         class.cs, attribute.cs: Check for wrong dynamic arguments.
309
310 2009-11-05  Marek Safar  <marek.safar@gmail.com>
311
312         * statement.cs: Dynamic statements.
313
314 2009-11-04  Marek Safar  <marek.safar@gmail.com>
315
316         * dynamic.cs, assign.cs, context.cs, expression.cs, ecore.cs:
317         Compound assignments over dynamic type.
318
319 2009-11-03  Marek Safar  <marek.safar@gmail.com>
320
321         * argument.cs, dynamic.cs, expression.cs, delegate.cs: Dynamic
322         constructor arguments.
323
324 2009-10-30  Marek Safar  <marek.safar@gmail.com>
325
326         * dynamic.cs, convert.cs, assign.cs, constant.cs, expression.cs,
327         codegen.cs: Unary mutator on dynamic member access expression.
328
329 2009-10-29  Marek Safar  <marek.safar@gmail.com>
330
331         A fix for bug #550580   
332         * convert.cs: Don't eliminate explicit precission casts.
333
334 2009-10-28  Marek Safar  <marek.safar@gmail.com>
335
336         A fix for bug #550404
337         
338         * parameter.cs, iterators.cs, context.cs, anonymous.cs,
339         expression.cs, statement.cs, ecore.cs: Quote any nested expression
340         tree.
341
342 2009-10-27  Marek Safar  <marek.safar@gmail.com>
343
344         * constant.cs, nullable.cs: Create nullable-null as LiftedNull
345         constant.
346         
347         * class.cs: Allow nullable binary user operators.
348
349 2009-10-26  Marek Safar  <marek.safar@gmail.com>
350
351         * expression.cs: Move binary expression optimization at the end of
352         resolve.
353
354 2009-10-23  Marek Safar  <marek.safar@gmail.com>
355
356         * constant.cs, nullable.cs, expression.cs, literal.cs, cfold.cs:
357         Separate NullConstant from NullLiteral.
358
359 2009-10-23  Marek Safar  <marek.safar@gmail.com>
360
361         * typemanager.cs, eval.cs, decl.cs, roottypes.cs, context.cs,
362         anonymous.cs, expression.cs, rootcontext.cs, ecore.cs, class.cs,
363         flowanalysis.cs, cs-parser.jay, driver.cs, codegen.cs: Split
364         ModuleContainer. Add common unclosed member check routine.
365
366 2009-10-22  Marek Safar  <marek.safar@gmail.com>
367
368         * argument.cs: Use literal flag for real literals only.
369
370         * dynamic.cs: Use correct return type for custom delegates.
371
372 2009-10-22  Marek Safar  <marek.safar@gmail.com>
373
374         * dynamic.cs, expression.cs: Pass logical binary flag to dynamic
375         resolver.
376
377 2009-10-22  Marek Safar  <marek.safar@gmail.com>
378
379         * dynamic.cs, ecore.cs: Dynamic invocation with void return type.
380
381 2009-10-21  Marek Safar  <marek.safar@gmail.com>
382
383         * dynamic.cs, convert.cs, expression.cs, ecore.cs: Wrap array index
384         conversion.
385
386 2009-10-21  Marek Safar  <marek.safar@gmail.com>
387
388         * typemanager.cs, dynamic.cs, expression.cs: Don't resolve runtime
389         binder flags.
390
391 2009-10-20  Marek Safar  <marek.safar@gmail.com>
392
393         * argument.cs, dynamic.cs, expression.cs: Latest API update.
394
395 2009-10-19  Marek Safar  <marek.safar@gmail.com>
396
397         * typemanager.cs, expression.cs: Dynamic array initializer.
398
399 2009-10-16  Marek Safar  <marek.safar@gmail.com>
400
401         * typemanager.cs, rootcontext.cs: Clear -nostdlib flag when object
402         is imported.
403
404 2009-10-16  Marek Safar  <marek.safar@gmail.com>
405
406         A fix for bug #493523, #507067
407         * convert.cs, nullable.cs, expression.cs: Do implicit and explicit
408         standard nullable conversion using underlying standard conversion
409         and not full conversion.
410
411 2009-10-15  Marek Safar  <marek.safar@gmail.com>
412
413         * dynamic.cs, expression.cs, ecore.cs, delegate.cs: Check return
414         type in VerifyArgumentsCompat.
415
416 2009-10-15  Marek Safar  <marek.safar@gmail.com>
417
418         * nullable.cs, expression.cs, statement.cs, namespace.cs, ecore.cs:
419         Reject variable used with type arguments.
420
421 2009-10-14  Marek Safar  <marek.safar@gmail.com>
422
423         * argument.cs, dynamic.cs, assign.cs, expression.cs, ecore.cs:
424         Implement dynamic expressions assignment.
425
426 2009-10-14  Marek Safar  <marek.safar@gmail.com>
427
428         * expression.cs: Build underlying expression when resolving unary
429         mutators.
430
431 2009-10-14  Marek Safar  <marek.safar@gmail.com>
432
433         * expression.cs: Emit enum array initializer using binary blob.
434
435 2009-10-08  Marek Safar  <marek.safar@gmail.com>
436
437         * typemanager.cs, constant.cs: Optimize decimal constants which fit
438         to long range.
439
440 2009-10-07  Marek Safar  <marek.safar@gmail.com>
441
442         * typemanager.cs: Reset object_type.
443         
444         * assign: Made SimpleAssign public.
445
446 2009-10-06  Marek Safar  <marek.safar@gmail.com>
447
448         * typemanager.cs, decl.cs, namespace.cs, ecore.cs, class.cs: Pass
449         invocation assembly to IsThisOrFriendAssembly.
450
451 2009-10-05  Marek Safar  <marek.safar@gmail.com>
452
453         * expression.cs: Equality comparison of generic parameter with
454         class constraint.
455
456 2009-10-05  Marek Safar  <marek.safar@gmail.com>
457
458         A fix for bug #543570
459         * generic.cs: Import predefined constraints correctly.
460
461 2009-10-02  Marek Safar  <marek.safar@gmail.com>
462
463         * ecore.cs: Don't crash on overloads with optional paremeters where
464         arguments count overflows.
465         
466         * parameter.cs: Import optional parameter constants using optional
467         value type.
468
469 2009-10-01  Marek Safar  <marek.safar@gmail.com>
470
471         * Makefile: Default is gmcs compiler.
472
473 2009-10-01  Marek Safar  <marek.safar@gmail.com>
474
475         * cs-parser.jay: Fixed few NRE.
476
477 2009-10-01  Marek Safar  <marek.safar@gmail.com>
478
479         * cs-parser.jay, driver.cs: Expose parser exception in verbose mode.
480
481 2009-09-30  Marek Safar  <marek.safar@gmail.com>
482
483         * linq.cs, convert.cs, assign.cs, expression.cs, ecore.cs: Add
484         ShimExpression, ImplicitCast.
485
486 2009-09-30  Marek Safar  <marek.safar@gmail.com>
487
488         A fix for bug #542959
489         * delegate.cs: Emit correct delegate instance variable when there
490         are static and non-static overloads.
491
492 2009-09-29  Marek Safar  <marek.safar@gmail.com>
493
494         * dynamic.cs, linq.cs, anonymous.cs, expression.cs, statement.cs,
495         ecore.cs, cs-parser.jay: Unary expression dynamic compiler.
496
497 2009-09-28  Marek Safar  <marek.safar@gmail.com>
498
499         A fix for bug #542487
500         * ecore.cs: Resolve extension methods hidden by properties.
501
502 2009-09-25  Marek Safar  <marek.safar@gmail.com>
503
504         * expression.cs, ecore.cs: More dynamic binary expressions.
505
506 2009-09-22  Marek Safar  <marek.safar@gmail.com>
507
508         * nullable.cs, expression.cs: Fixed null lifted conversion for
509         bitwise enum operations.
510
511 2009-09-22  Marek Safar  <marek.safar@gmail.com>
512
513         * convert.cs, ecore.cs: Fixed explicit unsafe coversion of long
514         values in checked context.
515
516 2009-09-22  Marek Safar  <marek.safar@gmail.com>
517
518         * expression.cs, ecore.cs: Fixed array index constant conversion.
519
520 2009-09-20  Miguel de Icaza  <miguel@novell.com>
521
522         * expression.cs: Do not crash when MemberLookup returns something
523         that is not a MemberExpr here.   Report error 582 instead. 
524
525         Fixes #499988.
526
527 2009-09-18  Marek Safar  <marek.safar@gmail.com>
528
529         * decl.cs, class.cs: Check protected property accessors.
530
531 2009-09-18  Marek Safar  <marek.safar@gmail.com>
532
533         * dynamic.cs, assign.cs: Dynamic compound assignment.
534
535 2009-09-17  Marek Safar  <marek.safar@gmail.com>
536
537         * expression.cs: Fixed compound assignment explicit conversion.
538
539 2009-09-17  Marek Safar  <marek.safar@gmail.com>
540
541         * expression.cs, ecore.cs: Cannot infer variables from method group.
542
543 2009-09-16  Marek Safar  <marek.safar@gmail.com>
544
545         * argument.cs, dynamic.cs, convert.cs, context.cs, anonymous.cs,
546         constant.cs, nullable.cs, expression.cs, literal.cs, ecore.cs,
547         codegen.cs: Dynamic binary operations scaffolding.
548
549 2009-09-15  Marek Safar  <marek.safar@gmail.com>
550
551         * expression.cs: Fixes nullable promotion for enum type variables.
552
553 2009-09-11  Marek Safar  <marek.safar@gmail.com>
554
555         * driver.cs, dynamic.cs: Reset more static variables.
556
557 2009-09-11  Marek Safar  <marek.safar@gmail.com>
558
559         * dynamic.cs, expression.cs, rootcontext.cs, namespace.cs, ecore.cs,
560         driver.cs: Introduced Expression::MakeExpression.
561
562 2009-09-11  Marek Safar  <marek.safar@gmail.com>
563
564         * eval.cs: Exposed MessageOutput instead of cleaning up eval API.
565
566 2009-09-09  Marek Safar  <marek.safar@gmail.com>
567
568         * eval.cs, report.cs: Use Console.Out for all eval error or warning
569         output.
570
571 2009-09-09  Marek Safar  <marek.safar@gmail.com>
572
573         A fix for bug #518707
574         * expression.cs (Is): Optimize only generic parameter type
575         expression probing value type generic parameter.
576
577 2009-09-09  Marek Safar  <marek.safar@gmail.com>
578
579         A fix for bug #532571
580         * ecore.cs: Check for simple name type arguments used with
581         non-generic type.
582
583 2009-09-08  Marek Safar  <marek.safar@gmail.com>
584
585         A fix for bug #497421
586         * generic.cs (CheckConstraint): Don't use buildin types to check for
587         parameterless constructor.
588
589 2009-09-08  Marek Safar  <marek.safar@gmail.com>
590
591         A fix for bug #537402
592         * generic.cs (CheckConstraint): Correctly inflate generic type
593         arguments when checking generic method. 
594
595 2009-09-08  Marek Safar  <marek.safar@gmail.com>
596
597         A fix for bug #536463
598         * decl.cs (AddToContainer): Don't report collision between explicit
599         and parameterless non-explicit members.
600
601 2009-09-08  Marek Safar  <marek.safar@gmail.com>
602
603         * eval.cs: Reset more static stuff.
604
605 2009-09-07  Marek Safar  <marek.safar@gmail.com>
606
607         A fix for bug #324625
608         * expression.cs, ecore.cs: Create nested generic type expression
609         using declaring and not current type.
610
611 2009-09-07  Marek Safar  <marek.safar@gmail.com>
612
613         * *.cs: Changed Report class to accept various output printers and
614         be an instance class. An expression resolver can now use different
615         message reporter for each call and Report.Error can safely throw
616         an exception. Part of ongoing work to turn mcs into proper library.
617
618 2009-09-04  Marek Safar  <marek.safar@gmail.com>
619
620         * statement.cs, ecore.cs: Removed error reporting from emit code.
621
622 2009-09-04  Marek Safar  <marek.safar@gmail.com>
623
624         * cs-parser.jay, parameter.cs: Moved parser check out of constructor
625
626 2009-09-03  Marek Safar  <marek.safar@gmail.com>
627
628         * anonymous.cs, expression.cs, statement.cs, cs-parser.jay: Moved
629         parser checks out of constructors.
630
631 2009-09-02  Marek Safar  <marek.safar@gmail.com>
632
633         * expression.cs, statement.cs, ecore.cs: Use common Report.Error.
634
635 2009-09-02  Marek Safar  <marek.safar@gmail.com>
636
637         A fix for bug #535448
638         * anonymous.cs, class.cs: Copy return label between all contexts.
639
640 2009-09-02  Marek Safar  <marek.safar@gmail.com>
641
642         A fix for bug #535395
643         * namespace.cs: Resolve context can be null.
644
645 2009-08-25  Marek Safar  <marek.safar@gmail.com>
646
647         A fix for bug #533912
648         * generic.cs: Use correct context for constraints resolving.
649
650 2009-08-25  Marek Safar  <marek.safar@gmail.com>
651
652         A fix for bug #532630
653         * driver.cs: Trim conditional symbols.
654
655 2009-08-25  Marek Safar  <marek.safar@gmail.com>
656
657         * context.cs: New file.
658         
659         * *.exe.sources, *.csproj: Updated.
660
661 2009-08-25  Marek Safar  <marek.safar@gmail.com>
662
663         * generic.cs, parameter.cs, decl.cs, statement.cs, namespace.cs,
664         class.cs, generic-mcs.cs, codegen.cs: Add GetSignatureForError to
665         IMembercontext, some small cleanups.
666
667 2009-08-24  Marek Safar  <marek.safar@gmail.com>
668
669         * *.cs: Split ResolveContext and EmitContext.
670
671 2009-08-24  Marek Safar  <marek.safar@gmail.com>
672
673         * *.cs: Only ResolveContext implements IMemberContext.
674
675 2009-08-21  Marek Safar  <marek.safar@gmail.com>
676
677         * *.cs: Renamed IResolveContext to IMemberContext.
678
679 2009-08-21  Marek Safar  <marek.safar@gmail.com>
680
681         * *.cs: Detached ResolveContext from EmitContext.
682
683 2009-08-21  Marek Safar  <marek.safar@gmail.com>
684
685         * codegen.cs: Moved flow-analysis to BlockContext.
686
687 2009-08-21  Marek Safar  <marek.safar@gmail.com>
688
689         * *.cs: Detached BlockContext from EmitContext.
690
691 2009-08-20 Gonzalo Paniagua Javier <gonzalo@novell.com>
692
693         * statement.cs: avoid nullref when the return value of GetEnumerator()
694         does not contain any MoveNext() method.
695
696 2009-08-19  Marek Safar  <marek.safar@gmail.com>
697
698         * *.cs: Removed IResolveContext::GenericDeclContainer.
699
700 2009-08-19  Marek Safar  <marek.safar@gmail.com>
701
702         * class.cs, delegate.cs: Changed Delegate to be TypeContainer based.
703
704 2009-08-19  Marek Safar  <marek.safar@gmail.com>
705
706         * generic.cs, iterators.cs, expression.cs, statement.cs, ecore.cs,
707         cs-parser.jay, attribute.cs, codegen.cs: Better error reports.
708
709 2009-08-18  Marek Safar  <marek.safar@gmail.com>
710
711         * *.cs: Removed boolean fields from EmitContext.
712
713 2009-08-18  Marek Safar  <marek.safar@gmail.com>
714
715         * *.cs: Add IResolveContext::IsStatic.
716
717 2009-08-18  Marek Safar  <marek.safar@gmail.com>
718
719         * *.cs: Moved TopBlock's methods from EmitContext to TopBlock.
720
721 2009-08-17  Marek Safar  <marek.safar@gmail.com>
722
723         * *.cs: Removed DeclContainer from EmitContext.
724
725 2009-08-17  Marek Safar  <marek.safar@gmail.com>
726
727         * *.cs: Add IResolveContext::CurrentTypeParameters.
728
729 2009-08-14  Marek Safar  <marek.safar@gmail.com>
730
731         * *.cs: Removed TypeContainer and ContainerType from EmitContext.
732
733 2009-08-14  Marek Safar  <marek.safar@gmail.com>
734
735         * decl.cs, expression.cs, namespace.cs, ecore.cs, class.cs,
736         codegen.cs: Add IResolveContext::LookupExtensionMethod.
737
738 2009-08-13  Marek Safar  <marek.safar@gmail.com>
739
740         * decl.cs: Look in PartialContainer for parent type parameters.
741
742 2009-08-13  Marek Safar  <marek.safar@gmail.com>
743
744         * decl.cs, namespace.cs, ecore.cs, class.cs, attribute.cs,
745         codegen.cs: Add IResolveContext::LookupTypeParameter.
746
747 2009-08-13  Marek Safar  <marek.safar@gmail.com>
748
749         * lambda.cs, expression.cs, statement.cs, namespace.cs, ecore.cs:
750         Moved resolved logic from Emit to Resolve.
751
752 2009-08-13  Marek Safar  <marek.safar@gmail.com>
753
754         * parameter.cs, decl.cs, roottypes.cs, class.cs, attribute.cs,
755         codegen.cs: Reworked atttributes handling of ResolveContext.
756
757 2009-08-12  Marek Safar  <marek.safar@gmail.com>
758
759         * decl.cs, ecore.cs, class.cs, attribute.cs, codegen.cs: Pushed
760         LookupNamespaceOrType to ResolveContext.
761
762 2009-08-12  Marek Safar  <marek.safar@gmail.com>
763
764         * typemanager.cs, decl.cs, expression.cs, namespace.cs, ecore.cs,
765         class.cs: Removed unused parameters and methods.
766
767 2009-08-11  Marek Safar  <marek.safar@gmail.com>
768
769         * generic.cs, lambda.cs, anonymous.cs, statement.cs, generic-mcs.cs,
770         codegen.cs: Finding the best common type of a set of expressions for
771         lambda statements.
772
773 2009-08-07  Marek Safar  <marek.safar@gmail.com>
774
775         * dynamic.cs, expression.cs: More dynamic conversions.
776
777 2009-08-06  Miguel de Icaza  <miguel@novell.com>
778
779         * generic.cs: This loop was incorrect, it was increment ii, but
780         checking for `i'.  This was a change introduced to fix #327497,
781         now we fix #424012.
782  
783         * class.cs: Catch another case for cs0533 error, fixes #324782.
784
785 2009-08-06 Rodrigo Kumpera  <rkumpera@novell.com>
786
787         * typemanager.cs (GetGenericArguments): SRE returns null for
788         generic methods on type builder instances if they are not generic
789         themselves. For example, for Foo<int>::Bar() it returns null, but
790         not for Foo<int>::Bar<>() or Foo<int>::Bar<double>().
791
792 2009-08-05  Marek Safar  <marek.safar@gmail.com>
793
794         * argument.cs, dynamic.cs, expression.cs, ecore.cs, class.cs,
795         delegate.cs: Work on dynamic binding.
796
797 2009-08-04  Marek Safar  <marek.safar@gmail.com>
798
799         A second fix for bug #525342
800         * class.cs: Attach partial method attributes to method
801         implementation.
802
803 2009-08-03  Marek Safar  <marek.safar@gmail.com>
804
805         * typemanager.cs, parameter.cs, support.cs, class.cs: Dynamic type
806         restrictions.
807         
808         * rootcontext.cs: Default to langversion v4.
809
810 2009-08-03  Marek Safar  <marek.safar@gmail.com>
811
812         * pending.cs: Check return type before member info is set.
813
814 2009-08-03  Marek Safar  <marek.safar@gmail.com>
815
816         * anonymous.cs: Fully initialize generic hoisted field expression.
817
818 2009-08-02  Miguel de Icaza  <miguel@novell.com>
819
820         * cs-parser.jay: Flag variables declared on the interactive shell
821         as used to prevent the 168 warning about local variable not being
822         used. 
823
824 2009-07-31  Marek Safar  <marek.safar@gmail.com>
825
826         * parameter.cs, dynamic.cs, support.cs, class.cs, delegate.cs,
827         attribute.cs: Emit dynamic export attribute.
828
829 2009-07-30  Marek Safar  <marek.safar@gmail.com>
830
831         * expression.cs: More verifier work.
832
833 2009-07-29  Marek Safar  <marek.safar@gmail.com>
834
835         * nullable.cs: Fixed SRE crash during corlib compilation.
836
837 2009-07-29  Marek Safar  <marek.safar@gmail.com>
838
839         * generic.cs, typemanager.cs, decl.cs, iterators.cs, convert.cs,
840         nullable.cs, expression.cs, ecore.cs, class.cs, attribute.cs:
841         More TypeManager.TypeToCoreType needed.
842
843 2009-07-29  Marek Safar  <marek.safar@gmail.com>
844
845         * anonymous.cs: Update after recent SRE fixes.
846
847 2009-07-28  Marek Safar  <marek.safar@gmail.com>
848
849         * typemanager.cs, expression.cs, ecore.cs, delegate.cs: Use correct
850         version of GetFieldHandle for fields of generic types.
851
852 2009-07-27  Marek Safar  <marek.safar@gmail.com>
853
854         * typemanager.cs, argument.cs, convert.cs, assign.cs, expression.cs,
855         ecore.cs: Add TypeManager.IsDynamicType,
856         PredefinedAttributes.Dynamic.
857
858 2009-07-27  Marek Safar  <marek.safar@gmail.com>
859
860         A fix for bug #415375
861         * expression.cs: Fixed object and reference type parameter
862         comparison.
863
864 2009-07-27  Marek Safar  <marek.safar@gmail.com>
865
866         A fix for bug #525342
867         * class.cs: Attach partial method attributes to method
868         implementation.
869
870 2009-07-24  Marek Safar  <marek.safar@gmail.com>
871
872         * argument.cs, dynamic.cs, expression.cs, class.cs, attribute.cs:
873         Dynamic arguments.
874
875 2009-07-24  Marek Safar  <marek.safar@gmail.com>
876
877         * anonymous.cs (MutateField): Add imported types handling.
878
879 2009-07-23  Marek Safar  <marek.safar@gmail.com>
880
881         * expression.cs, delegate.cs: Moved arguments resolve into their
882         counterparts expressions. Removed argument resolve from
883         CollectionElementInitializer.
884
885 2009-07-23  Marek Safar  <marek.safar@gmail.com>
886
887         A fix for bug #523683
888         * convert.cs, delegate.cs: Use common overload mechanism for method
889         group conversion check.
890
891 2009-07-22  Marek Safar  <marek.safar@gmail.com>
892
893         A fix for bug #523899
894         * generics.cs: Exact type inference with other bound types.
895
896 2009-07-22  Raja R Harinath  <harinath@hurrynot.org>
897
898         Don't complain when the same type is implemented by the output
899         assembly as well as multiple referenced assemblies
900         * namespace.cs (RootNamespace.LookupTypeReflection): Add
901         'must_be_unique' flag.
902         (GlobalRootNamespace): Update to changes.
903         (Namespace.LookupType): Pass 'must_be_unique' only when we don't
904         already have a type in hand.
905
906 2009-07-22  Marek Safar  <marek.safar@gmail.com>
907
908         * expression.cs: More verifier instrumentation.
909         
910         * statement.cs: Do proper throw expression conversion.
911
912 2009-07-22  Marek Safar  <marek.safar@gmail.com>
913
914         A fix for bug #522789
915         * expression.cs: Mutate invocation return type.
916
917 2009-07-16  Marek Safar  <marek.safar@gmail.com>
918
919         * anonymous.cs: Split assignable and readonly generated variable
920         references.
921
922 2009-07-16  Marek Safar  <marek.safar@gmail.com>
923
924         A fix for bug #521671
925         * statement.cs: Fixed crash when checking missing type.
926
927 2009-07-16  Marek Safar  <marek.safar@gmail.com>
928
929         * typemanager.cs, generic.cs, argument.cs, linq.cs, convert.cs,
930         assign.cs, expression.cs, statement.cs, support.cs, ecore.cs,
931         class.cs, driver.cs: Work on dynamic binding.
932
933         * dynamic.cs: New file.
934
935         * *.sources, *.proj: Updated.
936
937 2009-07-15  Marek Safar  <marek.safar@gmail.com>
938
939         * expression.cs (Conditional): Avoid double Resolve.
940
941 2009-07-13  Marcus Griep  <marcus@griep.us>
942
943         * ecore.cs: Fix obscure bug with resolving members of interfaces
944         that hide parent interface members. Fixes bug #444388 and corrects
945         bug #323096
946
947 2009-07-13  Marek Safar  <marek.safar@gmail.com>
948
949         * expression.cs (LocalVariableReference): Bounce resolve.
950
951 2009-07-10  Marek Safar  <marek.safar@gmail.com>
952
953         * typemanager.cs, lambda.cs, parameter.cs, convert.cs, anonymous.cs,
954         expression.cs, literal.cs, ecore.cs, complete.cs: Moved internal
955         types to new class.
956         
957         * support.cs: New dynamic type wrapper.
958
959 2009-07-08  Marek Safar  <marek.safar@gmail.com>
960
961         * ecore.cs, cs-parser.jay: Better error reporting for implicitly
962         typed local variable.
963
964 2009-07-06  Marek Safar  <marek.safar@gmail.com>
965
966         A fix for bug #519005
967         * anonymous.cs: Use null_type as no return type placeholder.
968
969 2009-07-02  Marek Safar  <marek.safar@gmail.com>
970
971         * generic.cs: Handle type inference of identical type parameters
972         with different bounds.
973
974 2009-07-01  Marek Safar  <marek.safar@gmail.com>
975
976         * expression.cs, class.cs: Events variance.
977         
978         * cs-parser.jay: Interface events error messages.
979
980 2009-07-01  Marek Safar  <marek.safar@gmail.com>
981
982         * generic.cs, argument.cs: Updated type inference logic to C# 4.0.
983
984 2009-06-29  Marek Safar  <marek.safar@gmail.com>
985
986         * parameter.cs, convert.cs, expression.cs, class.cs: Default
987         parameter expression can be value-type New.
988
989         * cs-parser.jay: Clean up too many parameter modifier boolean flags.
990
991 2009-06-26  Marek Safar  <marek.safar@gmail.com>
992
993         * generic.cs, argument.cs, expression.cs, ecore.cs, cs-parser.jay:
994         Implemented C# 4.0 named arguments.
995
996 2009-06-24  Marek Safar  <marek.safar@gmail.com>
997
998         * typemanager.cs, parameter.cs, iterators.cs, convert.cs,
999         expression.cs, ecore.cs, delegate.cs: Removed unnecessary ArgList
1000         parameter modifier. Also fixes bug #515497.
1001
1002 2009-06-24  Marek Safar  <marek.safar@gmail.com>
1003
1004         * *.cs: Replaced ArrayList with Arguments in need of a nonsequential 
1005         arguments expression to be implemented.
1006         
1007         *.sources: Add argument.cs
1008
1009 2009-06-23  Marek Safar  <marek.safar@gmail.com>
1010
1011         * parameter.cs: Moved GetParameterIndexByName to base class.
1012         
1013         * expression.cs, statement.cs, ecore.cs, delegate.cs: Removed
1014         unused AType. Use argument's version of GetExpressionTree.
1015
1016 2009-06-22  Marek Safar  <marek.safar@gmail.com>
1017
1018         * expression.cs, cs-parser.jay, attribute.cs, codegen.cs: Named
1019         arguments grammar.
1020
1021 2009-06-17  Marek Safar  <marek.safar@gmail.com>
1022
1023         A fix for bug #514096
1024         * class.cs: Allow IntPtr/UIntPtr fields to be volatile.
1025
1026 2009-06-17  Marek Safar  <marek.safar@gmail.com>
1027
1028         * expression.cs: The first multi-dimensional array nested array
1029         initializers was not checked.
1030         
1031         * statement.cs (Switch): Fixed error message to reflect 2.0 changes.
1032
1033 2009-06-17  Marek Safar  <marek.safar@gmail.com>
1034
1035         A fix for bug #513400
1036         * nullable.cs (EmitEquality): Operands emit could be simplified for
1037         built-in types when we now emit user operators differently.
1038
1039 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1040
1041         * ecore.cs: Report inaccessible delegate methods correctly.
1042
1043 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1044
1045         * parameter.cs, expression.cs, ecore.cs, class.cs, delegate.cs,
1046         cs-parser.jay: Implemented C# 4.0 optional parameters.
1047
1048 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1049
1050         * driver.cs: Removed broken DefineManifestResource.
1051
1052 2009-06-16  Raja R Harinath  <harinath@hurrynot.org>
1053
1054         * Makefile [net_2_0_bootstrap]: Don't explicitly mention net_1_1.
1055         Use $(BOOTSTRAP_PROFILE) instead.
1056
1057 2009-06-12  Jb Evain  <jbevain@novell.com>
1058
1059         * rootcontext.cs: add a Platform field.
1060         * driver.cs: handle /platform.
1061         * codegen.cs: pass the proper flags according to
1062         the platform when saving the assembly.
1063
1064 2009-06-11  Marek Safar  <marek.safar@gmail.com>
1065
1066         * parameter.cs, const.cs, report.cs, cs-parser.jay, attribute.cs:
1067         Add optional parameters grammar.
1068
1069 2009-06-10  Marek Safar  <marek.safar@gmail.com>
1070
1071         * eval.cs, anonymous.cs, report.cs, rootcontext.cs, cs-parser.jay,
1072         driver.cs: Split lang version and metadata version.
1073
1074 2009-06-10  Marek Safar  <marek.safar@gmail.com>
1075
1076         * decl.cs: Better overload ctor collision error message.
1077
1078 2009-06-05  Jb Evain  <jbevain@novell.com>
1079
1080         * driver.cs (EmbededResource): avoid using an internal method
1081         in gmcs to embed manifest resources.
1082
1083 2009-06-04  Sebastien Pouliot  <sebastien@ximian.com>
1084
1085         * generic.cs, parameter.cs: Avoid using 'var' so we can bootstrap
1086         the compiler from older mono versions (like moon's bots)
1087
1088 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1089
1090         * namespace.cs (LookupTypeReflection): Ignore collisions between
1091         forwarded types.
1092
1093 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1094
1095         * codegen.cs: Enabled generic type forwarders.
1096
1097 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1098
1099         * dmcs.*: Add another version of SRE compiler.
1100
1101 2009-06-03  Marek Safar  <marek.safar@gmail.com>
1102
1103         * generic.cs, typemanager.cs, parameter.cs, convert.cs,
1104         generic-mcs.cs: Fixed variant type conversions.
1105
1106 2009-06-02  Marek Safar  <marek.safar@gmail.com>
1107
1108         A fix for bug #507863
1109         * codegen.cs: Fixes a crash on invalid string value attribute.
1110
1111 2009-06-01  Marek Safar  <marek.safar@gmail.com>
1112
1113         A fix for bug #508334
1114         * typemanager.cs, parameter.cs, convert.cs, expression.cs, ecore.cs,
1115         cs-parser.jay: Fully import __arglist modifier.
1116
1117 2009-05-29  Marek Safar  <marek.safar@gmail.com>
1118
1119         * generic.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs,
1120         delegate.cs, generic-mcs.cs: Rewrote type variance checks to
1121         actually work with closed generic types.
1122
1123 2009-05-27  Alan McGovern  <amcgovern@novell.com>
1124
1125         * class.cs, decl.cs, delegate.cs, parameter.cs: 
1126         Fix the build by replacing the use of 'var' with the actual type.
1127
1128 2009-05-27  Marek Safar  <marek.safar@gmail.com>
1129
1130         * generic.cs, parameter.cs, decl.cs, ecore.cs, class.cs, delegate.cs
1131     cs-parser.jay, generic-mcs.cs: Report wrong variant types
1132         declarations.
1133           
1134         * driver.cs, rootcontext.cs, report.cs: Add 3.0 language version
1135         filter.
1136
1137 2009-05-26  Rodrigo Kumpera  <rkumpera@novell.com>
1138                         Marek Safar  <marek.safar@gmail.com>
1139
1140         A fix for bug #377509
1141         * parameter.cs: Use predefined and not empty name for implicit
1142         setters.
1143
1144 2009-05-21  Marek Safar  <marek.safar@gmail.com>
1145
1146         * class.cs: Don't report wrong warnings for event fields.
1147
1148 2009-05-21  Marek Safar  <marek.safar@gmail.com>
1149
1150         A fix for bug #504667
1151         * class.cs: Check for static class using parent container instead of
1152         parent type.
1153
1154 2009-05-08  Marek Safar  <marek.safar@gmail.com>
1155
1156         A fix for bug #496922
1157         * expression.cs: Always use temporary variable when using object
1158         initializer.
1159
1160 2009-04-28  Marek Safar  <marek.safar@gmail.com>
1161
1162         A fix for bug #495112
1163         * class.cs (IsUnmanagedType): Handle recursive unmanaged types using
1164         local cache.
1165
1166 2009-04-27  Miguel de Icaza  <miguel@novell.com>
1167
1168         * driver.cs: Add a flag to work as a replacement for CSC in VS.
1169
1170 2009-04-24  Miguel de Icaza  <miguel@novell.com>
1171
1172         * complete.cs: No idea how gonzalo got a null in the list, but
1173         avoid crashing.
1174
1175 2009-04-24  Miguel de Icaza  <miguel@novell.com>
1176
1177         * complete.cs (CompletionElementInitializer): New completion class
1178         to support completing inside a C# 3 element initializer, so this
1179         allows completion for Silverlight situations where it is very
1180         common to do:
1181
1182         new TextBlock () { Fo<TAB>
1183
1184         (CompletionSimpleName): Expose the prefix that was
1185         passed to the simple name.
1186
1187         * cs-parser.jay (object_or_collection_initializer): Add support
1188         for element_initializers.
1189
1190         * expression.cs (CollectionOrObjectInitializers.DoResolve):
1191         special case completion expressions as this method aggressively
1192         collects data before it operates, and errors were being thrown
1193         earlier than we were able to complete.
1194
1195 2009-04-23  Miguel de Icaza  <miguel@novell.com>
1196
1197         * eval.cs: Make getcompletions silent and enable debugging output
1198         if the -v option is passed.
1199
1200         * namespace.cs (NamespaceEntry.CompletionGetTypesStartingWith):
1201         Consider looking up the namespace that matches the prefix being
1202         used. 
1203
1204         This is part of the support for allowing completions like:
1205         `System.Co<TAB>' to complete to System.Console.
1206
1207         * complete.cs (CompletionSimpleName.AppendResults): Make this
1208         routine reusable.
1209
1210 2009-04-21  Raja R Harinath  <harinath@hurrynot.org>
1211
1212         * cs-parser.jay (GetTokenName): Mark GENERATE_COMPLETION and
1213         COMPLETE_COMPLETION as internal.
1214
1215 2009-04-17  Miguel de Icaza  <miguel@novell.com>
1216
1217         * complete.cs: Include namespace resolution in simple names as
1218         well as global types and types in the using scope in the
1219         resolution. 
1220
1221         * namespace.cs: Supporting infrastrcture to provide completions
1222         based on the current using scope. 
1223
1224         * eval.cs: Introduce an entry point that allows for initialization
1225         to return a list of the files passed on the command line.
1226
1227 2009-04-14  Marek Safar  <marek.safar@gmail.com>
1228
1229         A fix for bug #494243
1230         * report.cs (SymbolRelatedToPreviousError): Fixed NRE.
1231
1232 2009-04-13  Marek Safar  <marek.safar@gmail.com>
1233
1234         A fix for bug #493887
1235         * statement.cs: Don't skip string multi-section with default or
1236         null label when populating string hashtable.
1237
1238 2009-04-06  Marek Safar  <marek.safar@gmail.com>
1239
1240         A fix for bug #492329
1241         * expression.cs (New): Load variable when assigning type parameter
1242         to ref variable.
1243
1244 2009-04-06  Marek Safar  <marek.safar@gmail.com>
1245
1246         A fix for bug #488960
1247         * decl.cs: Compare MVAR types using non-null values.
1248
1249 2009-03-27  Marek Safar  <marek.safar@gmail.com>
1250
1251         * typemanager.cs, expression.cs: Removed unused nullable checks.
1252
1253 2009-03-27  Marek Safar  <marek.safar@gmail.com>
1254
1255         * *.cs: Removed some gmcs conditionals.
1256
1257 2009-03-26  Marek Safar  <marek.safar@gmail.com>
1258
1259         * generic.cs, support.cs: Moved generics stuff out of support.cs
1260
1261 2009-03-24  Marek Safar  <marek.safar@gmail.com>
1262
1263         * ecore.cs, expression.cs: Use queried type for MethodGroupExpr
1264         DeclaringType.
1265
1266 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1267
1268         * attribute.cs: Consider all members for error reporting when
1269         checking named arguments.
1270
1271 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1272
1273         A fix for bug #487625
1274         * namespace.cs: Use a warning for all predefined type conflicts.
1275
1276 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1277
1278         A fix for bug #485706
1279         * statement.cs: Explicitly type catch type argument to pass verifier
1280         check.
1281
1282 2009-03-22  Miguel de Icaza  <miguel@novell.com>
1283
1284         Initial support to provide code completion facilities to consumers
1285         of the evaluator API.
1286         
1287         * cs-tokenizer.cs (CompleteOnEOF): this new property is used to
1288         support the completion engine.   When we reach the end of the
1289         input stream instead of returning EOF, when this flag is true the
1290         tokenizer instead produces:
1291
1292                 One GENERATE_COMPLETION token: this token then must be
1293                 handled in the grammar at every point where the user
1294                 would likely request a completion.
1295
1296                 As many COMPLETE_COMPLETION tokens as necessary.   These
1297                 tokens are generated to assist the parser in unwinding and
1298                 producing a valid parse tree.    
1299
1300         The parser rules do not have to be perfect, the parser needs to be
1301         augmented with judicious use of GENERATE_COMPLETION tokens to
1302         improve the areas where we can provide completion and the parser
1303         needs to add support for COMPLETE_COMPLETION tokens in productions
1304         to make them work.
1305
1306         It is common to not have enough support for COMPLETE_COMPLETION
1307         under certain rules and that even if we generated the
1308         GENERATE_COMPLETION token that the resulting tree will be invalid
1309         due to the missing rules that support COMPLETE_COMPLETION.
1310
1311         The final EOF token is produced by having the parser notify the
1312         tokenizer when it reaches the root production that the next token
1313         should be EOF.
1314
1315         * support.cs (CompletionResult): New Exception.   This exception
1316         is thrown to return the completion results when one of the special
1317         completion expressions is reached.
1318
1319         This exception is thrown by the completing ExpressionStatements
1320         classes that live in complete.cs
1321
1322         * complete.cs (CompletingExpression): a new base class for
1323         completing expressions.   This derives from the
1324         ExpressionStatement class and not from Expression as it allows
1325         completion to happen not only where expressions are expected in
1326         the grammar, but also where statements are expected.
1327
1328         (CompletionSimpleName): A new class used to provide completions
1329         for SimpleNames.     This currently only resolves to local
1330         variables from the evaluator context (GetVars call).
1331
1332         (CompletionMemberAccess): Implements support for completing member
1333         access patterns. 
1334
1335         * cs-parser.jay: Add support for completion in a few places. 
1336
1337         * eval.cs (GetCompletions): New public API for the evaluator that
1338         returns a list of possible completions given the input.   The
1339         return value is an array of completions 
1340
1341         * anonymous.cs (Compatible): If the exception thrown from the
1342         resolved expression is a CompletionResult exception let that one
1343         through instead of printing a diagnostic error in the try/catch. 
1344 <       
1345 2009-03-22  Miguel de Icaza  <miguel@novell.com>
1346
1347         * 
1348
1349         * driver.cs (Main): Use Environment.Exit to quit quickly and
1350         prevent the compiler from doing the usual wait for helper thread
1351         to terminate.  
1352
1353         This is to prevent a slowdown that was reported by Gonzalo on
1354         ASP.NET 
1355
1356 2009-03-19  Marek Safar  <marek.safar@gmail.com>
1357
1358         * ecore.cs: Load build-in types directly instead of accessing
1359         an internal field.
1360
1361 2009-03-18  Marek Safar  <marek.safar@gmail.com>
1362
1363         * ecore.cs: Always use unbox.any when available.
1364
1365 2009-03-18  Marek Safar  <marek.safar@gmail.com>
1366
1367         * class.cs: Always set TypeAttributes.BeforeFieldInit conditionally.
1368
1369 2009-03-17  Marek Safar  <marek.safar@gmail.com>
1370
1371         * generic.cs: Removed obsolete version of type inference.
1372
1373 2009-03-16  Marek Safar  <marek.safar@gmail.com>
1374
1375         * typemanager.cs, decl.cs, roottypes.cs, anonymous.cs, nullable.cs,
1376         expression.cs, rootcontext.cs, namespace.cs, ecore.cs, class.cs,
1377         delegate.cs, flowanalysis.cs, cs-parser.jay, driver.cs,
1378         attribute.cs, codegen.cs: Changed RootTypes to be ModuleContainer.
1379
1380 2009-03-11  Marek Safar  <marek.safar@gmail.com>
1381
1382         A fix for bug #482996
1383         * anonymous.cs: Make sure we are not infering return type when
1384         checking type compatibility.
1385
1386 2009-03-11  Marek Safar  <marek.safar@gmail.com>
1387
1388         * typemanager.cs, generic.cs, parameter.cs, decl.cs, const.cs,
1389         rootcontext.cs, namespace.cs, class.cs, delegate.cs, driver.cs,
1390         generic-mcs.cs, attribute.cs, codegen.cs: Maintain predefined
1391         attributes in their own structure. Needed when accessing their
1392         properties before they are resolved.
1393
1394 2009-03-09  Marek Safar  <marek.safar@gmail.com>
1395
1396         * cs-tokenizer.cs: Optimized GetKeyword using an array instead of
1397         hashtable (~10x faster).
1398         
1399         * driver.cs: Removed wrong Reset.
1400
1401 2009-03-08  Marek Safar  <marek.safar@gmail.com>
1402
1403         * class.cs: Use correct common base type for unmanaged delayed
1404         check.
1405
1406         * rootcontext.cs: Wrap unhandled exception.
1407
1408 2009-03-06  Raja R Harinath  <harinath@hurrynot.org>
1409
1410         Make SeekableStreamReader self-tuning and arbitrarily seekable
1411         * support.cs (SeekableStreamReader.ResetStream): New.  Allocates
1412         the buffer.
1413         (SeekableStreamReader.Position.set): Use it.  Simplify logic
1414         which, as a side-effect, makes it arbitrarily-seekable.  Tune the
1415         buffer size when the stream needs to be re-read from the beginning.
1416
1417 2009-03-05  Marek Safar  <marek.safar@gmail.com>
1418
1419         A fix for bug #480100
1420         * parameter.cs: A parameter is not hoisted when used directly as ET.
1421
1422 2009-03-04  Marek Safar  <marek.safar@gmail.com>
1423
1424         * statement.cs: Fixed an issue when using variable is of interface
1425         type.
1426
1427 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1428
1429         A fix for bug #480319
1430         * report.cs, driver.cs: Support -warnaserror-:<warning list> option.
1431
1432 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1433
1434         A fix for bug #480867
1435         * typemanager.cs, expression.cs, ecore.cs: Changed method group
1436         expression to have no valid type.
1437
1438 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1439
1440         A fix for bug #481258
1441         * class.cs: Set extension method flag in partial container.
1442
1443 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1444
1445         * statement.cs, typemanager.cs: Use expression for StringEmitter.
1446         
1447         * attribute.cs: Add sanity check.
1448
1449 2009-02-27  Marek Safar  <marek.safar@gmail.com>
1450
1451         * class.cs: Add external constructor error.
1452
1453 2009-02-26  Marek Safar  <marek.safar@gmail.com>
1454
1455         A fix for bug #475354
1456         * convert.cs, nullable.cs, expression.cs, statement.cs: Emit
1457         correctly user defined nullable equality operators.
1458
1459 2009-02-25  Marek Safar  <marek.safar@gmail.com>
1460
1461         A fix for bug #479532
1462         * expression.cs: Implement NewInitialize::AddressOf.
1463
1464 2009-02-25  Marek Safar  <marek.safar@gmail.com>
1465
1466         A fix for bug #413633
1467         * expression.cs: Iterate all base class-constraint types.
1468
1469 2009-02-24  Marek Safar  <marek.safar@gmail.com>
1470
1471         A fix for bug #479209
1472         * literal.cs: Mutate null underlying type.
1473
1474 2009-02-24  Marek Safar  <marek.safar@gmail.com>
1475
1476         A fix for bug #476295
1477         * convert.cs: Avoid wrapping implicitly convertible reference type.
1478
1479 2009-02-23  Marek Safar  <marek.safar@gmail.com>
1480
1481         * iterators.cs: Create MemberName correctly.
1482
1483 2009-02-23  Marek Safar  <marek.safar@gmail.com>
1484
1485         A fix for bug #478655
1486         * literal.cs: Check also underlying null type conversion.
1487
1488 2009-02-21  Marek Safar  <marek.safar@gmail.com>
1489
1490         * generic.cs, ecore.cs, class.cs: Removed redundant AsAccessible.
1491
1492 2009-02-20  Marek Safar  <marek.safar@gmail.com>
1493
1494         A fix for bug #477447
1495         * statement.cs: Add reference to correct parent storey when this
1496         is accessible from deep children storey (more than 1 level).
1497
1498 2009-02-19  Marek Safar  <marek.safar@gmail.com>
1499
1500         A fix for bug #475860 by David Mitchell <dmitchell@logos.com>
1501         * class.cs: Define base type members before setting up member cache.
1502
1503 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1504
1505         A fix for bug #477378
1506         * nullable.cs, expression.cs, statement.cs: More precise null type
1507         sanity checks.
1508
1509 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1510
1511         A fix for bug #472805
1512         * typemanager.cs, namespace.cs: Import only visible extension method
1513         types.
1514
1515 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1516
1517         A fix for bug #476895
1518         * attribute.cs: Use correct resolve context for attribute type.
1519
1520 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1521
1522         A fix for bug #476266
1523         * anonymous.cs: Mutate multi-dimensional arrays.
1524
1525 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1526
1527         A fix for bug #476400
1528         * statement.cs, expression.cs: Removed wrong Dispose optimization.
1529
1530 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1531
1532         A fix for bug #476811
1533         * generics.cs: Fixed null-literal check.
1534
1535 2009-02-17  Marek Safar  <marek.safar@gmail.com>
1536
1537         * typemanager.cs, convert.cs, flowanalysis.cs, driver.cs,
1538         expression.cs, ecore.cs, rootcontext.cs, eval.cs, class.cs: More
1539         messing with static variables.
1540
1541 2009-02-16  Marek Safar  <marek.safar@gmail.com>
1542
1543         A fix for bug #475965
1544         * generics.cs: Check generic parameter type after extracting from
1545         Expression<T>.
1546
1547 2009-02-16  Marek Safar  <marek.safar@gmail.com>
1548
1549         A fix for bug #475823
1550         * convert.cs, expression.cs, literal.cs, ecore.cs, cfold.cs: Add
1551         typed-null support.
1552
1553 2009-02-14  Marek Safar  <marek.safar@gmail.com>
1554
1555         * modifiers.cs, decl.cs, ecore.cs, class.cs, flowanalysis.cs:
1556         Simplified event field definition using backing field and not
1557         field builder directly.
1558
1559         * expression.cs (EmitLdArg): Optimize fast paths.
1560
1561 2009-02-13  Marek Safar  <marek.safar@gmail.com>
1562
1563         A fix for bug #475327
1564         * expression.cs (ArrayCreation): Don't mutate values optimized away.
1565
1566 2009-02-13  Marek Safar  <marek.safar@gmail.com>
1567
1568         A fix for bug #475342
1569         * cs-parser.jay: Using 'super' instead of 'base' to call base
1570         constructor crashes compiler.
1571
1572 2009-02-13  Marek Safar  <marek.safar@gmail.com>
1573
1574         A fix for bug #475354
1575         * expression.cs (Constantify): Add nullable types.
1576         
1577         * const.cs (EmitDecimalConstant): Avoid explicit cast.
1578
1579 2009-02-12  Marek Safar  <marek.safar@gmail.com>
1580
1581         A fix for bug #475246
1582         * expression.cs: More broken flowanalysis hacking needed.
1583
1584 2009-02-12  Marek Safar  <marek.safar@gmail.com>
1585
1586         * attribute.cs: Compare only ref/out array modifiers. 
1587
1588 2009-02-11  Marek Safar  <marek.safar@gmail.com>
1589
1590         * statement.cs: Use member cache when looking for foreach members.
1591
1592 2009-02-11  Marek Safar  <marek.safar@gmail.com>
1593
1594         * expression.cs: Don't expose internal initializer types.
1595         
1596         * statement.cs: Check also explicit conversions for goto case.
1597
1598 2009-02-11  Marek Safar  <marek.safar@gmail.com>
1599
1600         * convert.cs, statement.cs: Removed usage of IsAssignableFrom.
1601
1602 2009-02-10  Marek Safar  <marek.safar@gmail.com>
1603
1604         * *.cs: Replace null-type with NullLiteral where appropriate.
1605
1606 2009-02-09  Marek Safar  <marek.safar@gmail.com>
1607
1608         * expression.cs: Initializer of reference argument use temporary
1609         variable to be verifiable.
1610         
1611         * parameter.cs: Share EmitLdArg.
1612
1613 2009-02-09  Marek Safar  <marek.safar@gmail.com>
1614
1615         A fix for bug #473559
1616         * class.cs: Fixed: Not reporting error about nested class with the
1617         same name.
1618
1619 2009-02-06  Scott Peterson  <lunchtimemama@gmail.com>
1620
1621         Contributed under the MIT/X11 license.
1622
1623         * generic.cs: Added VerifyVariantTypeParameters which performs new
1624         variance verification logic. The old logic, based on the spec, was
1625         wrong because the spec is full of LIES!
1626
1627         * generic-mcs.cs: Stubbed out the VerifyVariantTypeParameters method.
1628
1629         *typemanager.cs: Moved variance verification logic to GenericTypeExpr.
1630
1631         * class.cs:
1632         * ecore.cs: Added calls to the new variance verification logic.
1633
1634         * parameter.cs:
1635         * delegate.cs: Removed calls to the old variance verification logic.
1636
1637 2009-02-06  Marek Safar  <marek.safar@gmail.com>
1638
1639         * delegate.cs: Use cached Invoke method directly.
1640
1641 2009-02-06  Marek Safar  <marek.safar@gmail.com>
1642
1643         * expression.cs: Emit expression tree for hoisted variable access.
1644
1645 2009-02-04  Marek Safar  <marek.safar@gmail.com>
1646
1647         * namespace.cs: Add better extension class check.
1648
1649 2009-02-05  Scott Peterson  <lunchtimemama@gmail.com>
1650
1651         * generic.cs: Fixed typeo (TypeParameter.Variacne).
1652
1653 2009-02-04  Scott Peterson  <lunchtimemama@gmail.com>
1654
1655         This patch adds initial generic variance support to the compiler.
1656         It is contributed under the MIT/X11 license.
1657
1658         * typemanager.cs: Modified ImplementsInterface to check variance.
1659         Added VerifyVariantTypeParameters which checks the specified type to see
1660         if it uses a variant type parameter as a type argument (which is not
1661         allowed). Added IsVariantOf which determins if the first type is a
1662         variant of the second. NOTE: This only supports reference types at
1663         the moment to conform with the current level of VM support. When the
1664         VM supports value types, this will follow step.
1665
1666         * generic.cs: Added the Variance enum. Added a Variance property to
1667         TypeParameter and added variance support to definition phase. Added a
1668         Variance property to TypeParameterName. Also check to make sure that
1669         no variant types appear in generic method parameters.
1670
1671         * cs-tokenizer.cs: Modified parse_less_than to tokenize the variance
1672         keywords if the langversion supports it.
1673
1674         * parameter.cs: Added Parameter.VerifyNoVariantTypeParameters to ensure
1675         that variant types are only used in legal positions. Also added
1676         ParametersCompiled.VerifyNoVariantTypeParameters to check all of its
1677         parameters.
1678
1679         * decl.cs: Construct TypeParameter with the variance information.
1680
1681         * convert.cs: Checks variance in ImplicitReferenceConversionExists
1682         and ImplicitConversionStandard.
1683
1684         * rootcontext.cs: Added new "Future" language version.
1685
1686         * class.cs: In TypeContainer.DoDefineMembers, ensure that contravariant
1687         type parameters are not used as type arguments in interface inheritance.
1688         In MemberBase.DoMemberDependentChecks, ensure that contravariant type
1689         parameters are not used as method return types. In MemberBase.
1690         ResolveMemberType, ensure that variant type parameters are not used
1691         as type arguments. Also call VerifyNoVariantTypeParameters on every
1692         set of parameters which are resolved.
1693
1694         * delegate.cs: Modified Delegate.Define to ensure that variant
1695         parameters are not used as type arguments and that a contravariant
1696         parameter is not used as the return type. Also call
1697         VerifyNoVariantTypeParameters on the delegate parameters.
1698
1699         * cs-parser.jay: Modified grammar to support "in" and "out" keywords
1700         to specify generic variance.
1701
1702         * driver.cs: Added support for LanguageVersion.Future in the form of
1703         "-langversion:future".
1704
1705         * generic-mcs.cs: Stubbed out new members in generic.cs.
1706
1707 2009-02-03  Marek Safar  <marek.safar@gmail.com>
1708
1709         * class.cs, generic.cs: Emit type parameter constraints for nested
1710         types.
1711
1712 2009-02-02  Marek Safar  <marek.safar@gmail.com>
1713
1714         A fix for bug #471213
1715         * class.cs: Avoid emitting backing field for abstract event fields.
1716
1717 2009-02-01  Marek Safar  <marek.safar@gmail.com>
1718
1719         A fix for bug #359731
1720         * cs-tokenizer.cs, cs-parser.jay: Correctly parse nested query
1721         expressions.
1722
1723 2009-01-30  Marek Safar  <marek.safar@gmail.com>
1724
1725         A fix for bug #470767
1726         * statement.cs: Introduced BlockScopeExpression, needed when 
1727         expression tree conversion has to emit scope variables.
1728
1729 2009-01-29  Marek Safar  <marek.safar@gmail.com>
1730
1731         * class.cs: Remove duplicate CallingConvention.
1732
1733 2009-01-29  Marek Safar  <marek.safar@gmail.com>
1734
1735         *.cs: Rename Parameters to ParametersCompiled and ParametersImported
1736         when I finally found the right naming convention.
1737
1738 2009-01-29  Marek Safar  <marek.safar@gmail.com>
1739
1740         * cs-tokenizer.cs: Put back different open parens optimization.
1741
1742 2009-01-28  Marek Safar  <marek.safar@gmail.com>
1743
1744         A fix for bug #470227
1745         * cs-tokenizer.cs: Remove too agressive parser optimization.
1746
1747 2009-01-28  Marek Safar  <marek.safar@gmail.com>
1748
1749         A fix for bug #324319
1750         * class.cs: Remove too early base type resolve.
1751
1752 2009-01-27  Marek Safar  <marek.safar@gmail.com>
1753
1754         A fix for bug #324319
1755         * ecore.cs: Explicitly type null when assigning to type argument to
1756         make pass verifier check.
1757
1758 2009-01-27  Marek Safar  <marek.safar@gmail.com>
1759
1760         * anonymous.cs: Fixed recent regression when initializing captured 
1761         this.
1762
1763 2009-01-26  Marek Safar  <marek.safar@gmail.com>
1764
1765         A fix for bug #469019
1766         * anonymous.cs: Use all parent type parameters when instantiating
1767         nested generic storey.
1768
1769 2009-01-26  Marek Safar  <marek.safar@gmail.com>
1770
1771         * expression.cs: Check for null instance methodgroup expression.
1772
1773 2009-01-26  Marek Safar  <marek.safar@gmail.com>
1774
1775         A fix for bug #469244
1776         * cs-tokenizer.cs, cs-parser.jay: Fixed parsing of nullable type
1777         instance inside a conditional expression.
1778
1779 2009-01-23  Marek Safar  <marek.safar@gmail.com>
1780
1781         * typemanager.cs, generic.cs, parameter.cs, decl.cs, anonymous.cs,
1782         expression.cs, report.cs, ecore.cs, attribute.cs: Use common 
1783         GetElementType and HasElementType. IsValueType clean up.
1784
1785 2009-01-23  Marek Safar  <marek.safar@gmail.com>
1786
1787         * nullable.cs: Use common EmitCall.
1788         
1789         * expression.cs: Emit constraint. for virtual calls only.
1790
1791 2009-01-23  Marek Safar  <marek.safar@gmail.com>
1792
1793         * typemanager.cs, generic.cs, eval.cs, convert.cs, const.cs, 
1794         expression.cs, statement.cs, rootcontext.cs, ecore.cs, class.cs,
1795         driver.cs, attribute.cs, enum.cs: Split IsValueType and IsStruct
1796         checks.
1797
1798 2009-01-22  Jb Evain  <jbevain@novell.com>
1799
1800         * anonymous.cs: make anonymous types' ToString implementation
1801         match what csc outputs.
1802
1803 2009-01-21  Marek Safar  <marek.safar@gmail.com>
1804
1805         * typemanager.cs, ecore.cs, iterator.cs: TypeLookupExpression clean
1806         up.
1807
1808 2009-01-17  Marek Safar  <marek.safar@gmail.com>
1809
1810         * convert.cs, ecore.cs: Explicitly casts type arguments to pass
1811         verifier checks.
1812
1813 2009-01-16  Marek Safar  <marek.safar@gmail.com>
1814
1815         * nullable.cs (LiftedBinaryOperator): Check for all possible null
1816         expressions.
1817
1818 2009-01-15  Marek Safar  <marek.safar@gmail.com>
1819
1820         A fix for bug #466634
1821         * statement.cs: Add reference for nested storey when only this
1822         is captured.
1823
1824 2009-01-15  Marek Safar  <marek.safar@gmail.com>
1825
1826         A fix for bug #466474
1827         * codegen.cs: Emit SecurityPermissionAttribute when -unsafe option
1828         was specified.
1829
1830 2009-01-15  Marek Safar  <marek.safar@gmail.com>
1831
1832         * iterators.cs, anonymous.cs, expression.cs, statement.cs, ecore.cs:
1833         Fixed nested stories parent referencing process. Also fixes #463985.
1834
1835 2009-01-06  Marek Safar  <marek.safar@gmail.com>
1836
1837         * decl.cs, iterators.cs, expression.cs, statement.cs, doc.cs, 
1838         class.cs, cs-parser.jay, codegen.cs: Clean up destructor
1839         implementation. Also fixes #463108.
1840
1841 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1842
1843         A fix for bug #416109
1844         * decl.cs: Issue correct CLSAttribute warning location.
1845
1846 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1847
1848         A fix for bug #456775
1849         * attribute.cs: Use attribute owner scope when resolving attribute
1850         arguments.
1851
1852 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1853
1854         A fix for bug #457257
1855         * decl.cs: Fixed incorrect member declaring type comparison.
1856
1857 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1858
1859         A fix for bug #460896
1860         * driver.cs: Handle /RES resources as embeddable.
1861
1862 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1863
1864         A fix for bug #462515
1865         * ecore.cs: Report inacessible members upwards.
1866
1867 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1868
1869         A fix for bug #463190, #463192
1870         * decl.cs, namespace.cs: Also import internal extension classes.
1871
1872 2009-01-04  Marek Safar  <marek.safar@gmail.com>
1873
1874         A fix for bug #463415
1875         * generic.cs: Use right index for RemoveDependentTypes.
1876
1877 2009-01-02  Marek Safar  <marek.safar@gmail.com>
1878
1879         A fix for bug #463196
1880         * expression.cs: Fixed enum to null comparison.
1881
1882 2009-01-02  Marek Safar  <marek.safar@gmail.com>
1883
1884         A fix for bug #463121
1885         * nullable.cs: Fixed nullable user equality operator comparison.
1886
1887 2009-01-02  Marek Safar  <marek.safar@gmail.com>
1888
1889         A fix for bug #462950
1890         * class.cs, decl.cs: Use full explicit name when defining automatic
1891         property backing field.
1892
1893 2009-01-02  Marek Safar  <marek.safar@gmail.com>
1894
1895         A fix for bug #462592
1896         * pending.cs: Emit type arguments for generic proxy method.
1897
1898 2008-12-30  Marek Safar  <marek.safar@gmail.com>
1899
1900         * expression.cs (As): Mutate all type arguments.
1901
1902 2008-12-29  Marek Safar  <marek.safar@gmail.com>
1903
1904         A fix for bug #462622
1905         * anonymous.cs: Resolve anonymous type GetHashCode in unchecked
1906         context.
1907
1908 2008-12-29  Marek Safar  <marek.safar@gmail.com>
1909
1910         A fix for bug #450782
1911         * ecore.cs: Consider more variables of form V.I to be fixed.
1912
1913 2008-12-29  Marek Safar  <marek.safar@gmail.com>
1914
1915         A fix for bug #460712
1916         * typemanager.cs: Core types could be imported.
1917
1918 2008-12-28  Marek Safar  <marek.safar@gmail.com>
1919
1920         A fix for bugs #460847, #460772, #458049, #457339, #447807
1921         * generic.cs, parameter.cs, lambda.cs, linq.cs, anonymous.cs
1922         statement.cs, ecore.cs, class.cs, delegate.cs, flowanalysis.cs
1923         cs-parser.jay, driver.cs: LINQ implementation upgrade to deal with
1924         user lambdas used inside query clauses.
1925
1926 2008-12-18  Marek Safar  <marek.safar@gmail.com>
1927
1928         A fix for bug #460229
1929         * cs-tokenizer.cs: Ignore wrongly placed BOM markers.
1930
1931 2008-12-18  Marek Safar  <marek.safar@gmail.com>
1932
1933         A fix for bug #459952
1934         * decl.cs, namespace.cs: Use common CheckAccessLevel.
1935
1936 2008-12-18  Marek Safar  <marek.safar@gmail.com>
1937
1938         A fix for bug #459630
1939         * convert.cs: Enum to valuetype conversion is not allowed.
1940
1941 2008-12-18  Marek Safar  <marek.safar@gmail.com>
1942
1943         A fix for bug #457087
1944         * generic.cs: Don't crash when constraint comes from type
1945         declaration.
1946
1947 2008-12-16  Marek Safar  <marek.safar@gmail.com>
1948
1949         A fix for bug #459221
1950         * anonymous.cs, statement.cs: Delay only captured this
1951         initialization.
1952
1953 2008-12-12  Marek Safar  <marek.safar@gmail.com>
1954
1955         A fix for bug #457489
1956         * anonymous.cs, statement.cs: Split anonymous storey instantiation
1957         and initialization to capture scope initializers correctly.
1958
1959 2008-12-11  Marek Safar  <marek.safar@gmail.com>
1960
1961         * generic.cs, parameter.cs, expression.cs, statement.cs, doc.cs:
1962         ParameterReference refactoring.
1963
1964 2008-12-03  Marek Safar  <marek.safar@gmail.com>
1965
1966         * typemanager.cs, namespace.cs, driver.cs: Allow ExtensionAttribute
1967         to be imported from any assembly.
1968
1969 2008-12-03  Marek Safar  <marek.safar@gmail.com>
1970
1971         * parameter.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs
1972         statement.cs, class.cs, cs-parser.jay: Removed duplicate parameters
1973         from anonymous method and lambda expression.
1974
1975 2008-12-01  Marek Safar  <marek.safar@gmail.com>
1976
1977         A fix for bug #448560
1978         * expression.cs (As): Box any generic type arguments to be
1979         verifiable.
1980
1981 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
1982
1983         Add tripwire for implicit conversion bugs
1984         * ecore.cs (MethodGroupExpr.Error_ArgumentCountWrong): New helper
1985         for CS1501 error.
1986         (MethodGroupExpr.OverloadResolve): Add sanity check between
1987         IsApplicable and VerifyArgumentsCompat.
1988         (VerifyArgumentsCompat): Report CS1501 where appropriate.
1989
1990 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
1991
1992         Fix build break in System.Data_test
1993         * convert.cs (ImplicitConversionExists): Move NullLiteral
1994         conversions ...
1995         (ImplicitStandardConversionExists): ... here.
1996
1997 2008-11-28  Marek Safar  <marek.safar@gmail.com>
1998
1999         * literal.cs: Emit correctly explicit null to nullable cast.
2000
2001 2008-11-28  Marek Safar  <marek.safar@gmail.com>
2002
2003         * ecore.cs, generics.cs: Fixed crash when type arguments fail to
2004         resolve.
2005
2006 2008-11-28  Marek Safar  <marek.safar@gmail.com>
2007
2008         A fix for bug #449005
2009         * convert.cs, nullable.cs: Use only one implicit nullable
2010         conversion.
2011
2012 2008-11-27  Marek Safar  <marek.safar@gmail.com>
2013
2014         * convert.cs, literal.cs: More Convert cleanup is needed.
2015
2016 2008-11-27  Marek Safar  <marek.safar@gmail.com>
2017
2018         * decl.cs, class.cs: Fixed misleading error message.
2019
2020 2008-11-26  Marek Safar  <marek.safar@gmail.com>
2021
2022         A fix for bug #449005
2023         * nullable.cs (EmitEquality): Disable optimization for user operator
2024         operands.
2025
2026 2008-11-25  Marek Safar  <marek.safar@gmail.com>
2027
2028         A fix for bug #447027
2029         * anonymous.cs (HoistedVariable): Cache also outer access to deal
2030         with context variables stored as expression instances.
2031
2032 2008-11-25  Marek Safar  <marek.safar@gmail.com>
2033
2034         A fix for bug #447027
2035         * delegate.cs: Fixed delegate VerifyMethod logic.
2036
2037 2008-11-24  Marek Safar  <marek.safar@gmail.com>
2038
2039         * ecore.cs, delegate.cs: MethodGroup expressions can be applicable
2040         but not verifiable.
2041
2042 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2043
2044         * typemanager.cs, decl.cs, anonymous.cs, class.cs, enum.cs: Rewrote
2045         member type resolve to follow normal flow, instead of random
2046         property access.
2047
2048 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2049
2050         * iterators.cs (GetEnumeratorStatement): Re-use already resolved
2051         type.
2052
2053 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2054
2055         * const.cs: Emit decimal array constant as literal.
2056
2057 2008-11-20  Marek Safar  <marek.safar@gmail.com>
2058
2059         * iterators.cs, ecore.cs: Removed CurrentBlock statement.
2060
2061 2008-11-19  Marek Safar  <marek.safar@gmail.com>
2062
2063         * eval.cs, location.cs, driver.cs (Location.SourceFiles): Turned
2064         into real property (saves 8 MB for corlib compilation).
2065
2066 2008-11-19  Marek Safar  <marek.safar@gmail.com>
2067
2068         * generic.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs,
2069         nullable.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay
2070         generic-mcs.cs: Small cleanup of TypeArguments.
2071
2072 2008-11-18  Marek Safar  <marek.safar@gmail.com>
2073
2074         * generic.cs, iterators.cs, anonymous.cs, nullable.cs, ecore.cs,
2075         expression.cs, namespace.cs, generic-mcs.cs, class.cs: Small cleanup
2076         of ConstructedType expression, renamed to GenericTypeExpr.
2077
2078 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2079
2080         A fix for bug #445303
2081         * location.cs (IsConditionalDefined): Handle undefined global
2082         defines.
2083
2084 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2085
2086         A fix for bug #444678
2087         * expression.cs (TryReduceConstant): Always create new constant
2088         instance.
2089
2090 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2091
2092         A fix for bug #444673
2093         * ecore.cs: Ignore open generic types when used as generic type
2094         instance fields.
2095
2096 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2097
2098         A fix for bug #445458
2099         * expression.cs, cs-parser.jay: Don't crash when an expression
2100         statement is null.
2101
2102 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2103
2104         A fix for bug #445464
2105         * expression.cs, cs-parser.jay: Fixed typeof of non-generic type
2106         inside unbound type.
2107
2108 2008-11-14  Jb Evain  <jbevain@novell.com>
2109
2110         * driver.cs: ignore empty -nowarn argument such as
2111         the one in -nowarn:12,13,,.
2112
2113 2008-11-13  Marek Safar  <marek.safar@gmail.com>
2114
2115         A fix for bug #444271
2116         * anonymous.cs: Rescan parent storeys when best candidate was
2117         undone.
2118
2119 2008-11-13  Marek Safar  <marek.safar@gmail.com>
2120
2121         * generic.cs, expression.cs, ecore.cs, cs-parser.jay: Removed
2122         useless UnboundTypeExpression.
2123         
2124         * attribute.cs: Do check obsolete attribute on generic types.
2125
2126 2008-11-12  Marek Safar  <marek.safar@gmail.com>
2127
2128         A fix for bugs #425680, #400139
2129         * ecore.cs, expression.cs: Trying to do some almost_matched_members
2130         refactoring.
2131
2132 2008-11-11  Marek Safar  <marek.safar@gmail.com>
2133
2134         A fix for bug #435747
2135         * assign.cs, expression.cs: Cleanup New assignment to emit correcly
2136         compound value types assignment. Few micro optimizations added.
2137
2138 2008-11-10  Marek Safar  <marek.safar@gmail.com>
2139
2140         A fix for bug #442610
2141         * anonymous.cs (MutateConstructor): More SRE hacking.
2142
2143 2008-11-10  Marek Safar  <marek.safar@gmail.com>
2144
2145         A fix for bug #442579
2146         * ecore.cs: Also initialize expanded form of a method with 1 params
2147         parameter.
2148
2149 2008-11-06  Marek Safar  <marek.safar@gmail.com>
2150
2151         * expression.cs (UnaryMutator): Do early l-side check.
2152
2153 2008-11-05  Miguel de Icaza  <miguel@novell.com>
2154
2155         * codegen.cs (InitDynamic): also setup Assembly.Name like we do in
2156         Init, otherwise we would crash later on when checking for friend
2157         assemblies. 
2158
2159         * eval.cs: Do not hide errors from invalid calls to LoadAssembly.
2160         Otherwise we never get any meaningful information as to what
2161         failed. 
2162
2163 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2164
2165         A fix for bug #436318
2166         * driver.cs, report.cs: Add -warnaserror:Wn to command line options.
2167
2168 2008-11-05  Miguel de Icaza  <miguel@novell.com>
2169
2170         * namespace.cs: Turns out that it was a really bad idea to hide
2171         the errors for namespaces not found here in eval mode.    
2172
2173         * eval.cs: When we process using clauses, only enter those into
2174         the list of valid using clauses after they have been validated.   
2175
2176         The above change gives the proper semantics: it does not
2177         senselessly report the same errors with broken using statements by
2178         never storing them in the first place when they are invalid.
2179
2180 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2181
2182         A fix for bug #421839
2183         * cs-parser.jay: Remove expression from coalesce rule to force lower
2184         priority than the assignment operator.
2185
2186 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2187
2188         A fix for bug #437875
2189         * nullable.cs: Compile correctly method group operand used with null
2190         coalescing operator.
2191
2192 2008-11-04  Marek Safar  <marek.safar@gmail.com>
2193
2194         A fix for bug #434589
2195         * expression.cs (Binary): Ignore lifted conversions when at least
2196         one operand is of reference type.
2197
2198 2008-11-04  Marek Safar  <marek.safar@gmail.com>
2199
2200         * cs-parser.jay: Better syntax error report.
2201
2202 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2203
2204         A fix for bug #436792
2205         * cs-parser.jay: Use GetLocation to access location.
2206
2207 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2208
2209         A fix for bug #440774
2210         * cs-parser.jay: Also set current_array_type when parsing local
2211         variables types.
2212
2213 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2214
2215         A fix for bug #440785
2216         * expression.cs (As): Don't resolve self modifing expression
2217         multiple times.
2218
2219 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2220
2221         A fix for bug #439447
2222         * cs-tokenizer.cs: Tokenize surrogates only where allowed.
2223
2224 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2225
2226         A fix for bug #437571
2227         * cs-parser.jay: Fixes internal error for invalid expression
2228         statements.
2229
2230 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2231
2232         * ecore.cs: Resolve correctly ambiguous params delegate methods.
2233
2234 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2235
2236         * generic.cs, anonymous.cs: Simplified GetDeclarations.
2237
2238 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2239
2240         * cs-tokenizer.cs: More precise cast parsing.
2241
2242 2008-10-16  Martin Baulig  <martin@ximian.com>
2243
2244         * anonymous.cs (AnonymousMethodStorey): Put back the
2245         `hoisted_locals' hashtable and use it in EmitType().
2246
2247 2008-10-15  Marek Safar  <marek.safar@gmail.com>
2248
2249         * cs-tokenizer.cs, nullable.cs, expression.cs, statement.cs,
2250         cs-parser.jay: Tokenizer optimizations and memory reduction, saves
2251         ~5MB for corlib.
2252
2253 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2254
2255         * cs-tokenizer.cs: Add bool type to the list of valid cast tokens.
2256
2257 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2258
2259         * statement.cs: Mutate scope initializers.
2260
2261 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2262
2263         * expression.cs: Use typeless value for This constant.
2264         
2265         * ecore.cs: Access FieldInfo via GetConstructedFieldInfo.
2266
2267 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2268
2269         * cs-tokenizer.cs, cs-parser.jay: Unify context sensite keyword
2270         tokenizer.
2271
2272 2008-10-13  Marek Safar  <marek.safar@gmail.com>
2273
2274         * cs-tokenizer.cs: Add missing alias qualifier and dotted generic
2275         type to type cast.
2276
2277 2008-10-13  Marek Safar  <marek.safar@gmail.com>
2278
2279         * cs-tokenizer.cs, expression.cs, cs-parser.jay: Reworked parens
2280         parser and tokenizer. Fixes many ambiguities including #433258.
2281
2282 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2283
2284         * cs-parser.jay: Fixed missing accessor recovery.
2285
2286 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2287
2288         A fix for bug #433701
2289         * expression.cs: Better error message.
2290
2291 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2292
2293         * cs-parser.jay, expression.cs: Start reporting real parser errors.
2294         
2295         * Makefile: Disabled unused debug symbols.
2296
2297         Also fixes: #320556, #321097, #321656, #321876, #351316
2298
2299 2008-10-09  Miguel de Icaza  <miguel@novell.com>
2300
2301         * eval.cs: rename "<interactive>" to "{interactive}", to work
2302         around a requirement in the compiler that this be a valid
2303         filename, and in Windows it is not (433886).
2304
2305 2008-10-09  Marek Safar  <marek.safar@gmail.com>
2306
2307         * cs-tokenizer.cs, cs-parser.jay: Fixed more subtle parser problems
2308
2309 2008-10-08  Marek Safar  <marek.safar@gmail.com>
2310
2311         * cs-tokenizer.cs, eval.cs, anonymous.cs, statement.cs, class.cs
2312         cs-parser.jay: Generic type declaration and type arguments cleanup.
2313
2314 2008-10-05  Marek Safar  <marek.safar@gmail.com>
2315
2316         * cs-parser.jay: Allow parsing weird array creation construct.
2317
2318 2008-10-05  Marek Safar  <marek.safar@gmail.com>
2319
2320         * cs-parser.jay: Conflicts reduction.
2321
2322 2008-10-04  Marek Safar  <marek.safar@gmail.com>
2323
2324         * cs-parser.jay: Conflicts reduction.
2325
2326 2008-10-04  Raja R Harinath  <harinath@hurrynot.org>
2327
2328         Fix #398325
2329         * flowanalysis.cs (MyBitvector.MakeShared): Rename from 'Shared'
2330         property.  Add a 'count' hint about the use of the shared vector.
2331         Ensure that we don't leak out dirty bits.
2332         (UsageVector.MergeChild): Throw away information about variables
2333         in child vectors.
2334         Based on patch and analysis by Moritz Kroll <Moritz.Kroll@gmx.de>.
2335
2336 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2337
2338         A fix for bug #431746
2339         * iterators.cs, anonymous.cs: Re-initialize hoisted iterator
2340         parameters when iterator is created.
2341
2342 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2343
2344         A fix for bug #431827
2345         * expression.cs: Fixed right based pointer arithmetic operations
2346         emit.
2347
2348 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2349
2350         A fix for bug #353779
2351         * assign.cs, expression.cs: Fixed compound assignment conversions.
2352
2353 2008-10-02  Marek Safar  <marek.safar@gmail.com>
2354
2355         A fix for bug #375262
2356         * statement.cs: Refactor ArrayForeach to be usable with string
2357         indexer. Optimized single dimentional arrays foreach.
2358
2359 2008-10-02  Marek Safar  <marek.safar@gmail.com>
2360
2361         A fix for bug #431255
2362         * anonymous.cs, expression.cs: Removed broken optimization.
2363
2364 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2365
2366         * anonymous.cs: Use full type parameters of parent generic
2367         containers. Removed unnecessary AddParentStoreyReference call.
2368
2369 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2370
2371         A fix for bug #324702
2372         * class.cs: Use better shorter names for explicit interface member
2373         implementations.
2374
2375         * ecore.cs, typemanager.cs: Convert only mscorlib predefined names.
2376
2377 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2378         
2379         * expression.cs: Use new interface to check fixed expression.
2380
2381 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2382
2383         A fix for bug #421101
2384         * expression.cs, statement.cs, ecore.cs: Use IFixedExpression
2385         interface to check for fixed fixed-buffers.
2386
2387 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2388
2389         A fix for bug #429264
2390         * assign.cs, anonymous.cs, ecore.cs: More type mutators added.
2391         
2392         * delegate.cs: Removed unnecessary casts.
2393
2394 2008-09-30  Marek Safar  <marek.safar@gmail.com>
2395
2396         A fix for bug #352151
2397         * decl.cs, iterators.cs, anonymous.cs, report.cs, namespace.cs,
2398         class.cs: Fixed already defined explicit interface members check.
2399
2400 2008-09-29  Rodrigo Kumpera  <rkumpera@novell.com>
2401
2402         cs-tokenizer.cs: Fix typo.
2403
2404 2008-09-28  Miguel de Icaza  <miguel@novell.com>
2405
2406         * eval.cs (InteractiveBase): The quit command now just sets a
2407         flag, instead of calling Environment.Exit(), it is milder on
2408         embedded hosts. 
2409
2410         CompiledMethod is now in Mono.CSharp, not nested inside
2411         the Evaluator, it was inconvenient to use.
2412
2413 2008-09-27  Miguel de Icaza  <miguel@novell.com>
2414
2415         * eval.cs (Evaluator): Introduce Compile method, to allow compiled
2416         code to be invoked without having to reparse.
2417
2418 2008-09-27  Miguel de Icaza  <miguel@novell.com>
2419
2420         * ecore.cs: The recent changes to FieldExpr broke this as well.
2421         Fixes LINQ queries in the interactive shell.
2422
2423         * Multiple files: indentation fixing for the Mono coding
2424         guidelines for the switch statement.
2425
2426         * eval.cs: Make the Evaluator API thread safe.
2427
2428 2008-09-26  Marek Safar  <marek.safar@gmail.com>
2429
2430         * anonymous.cs, statement.cs, class.cs, cs-parser.jay: Simplified
2431         constructor parsing.
2432
2433 2008-09-26  Marek Safar  <marek.safar@gmail.com>
2434
2435         A fix for bug #325326
2436         * statement.cs: Check possible mistaken empty statement using
2437         explicit blocks only.
2438
2439 2008-09-25  Miguel de Icaza  <miguel@novell.com>
2440
2441         * eval.cs (LoadAssembly, ReferenceAssembly): Call
2442         RootNamespace.ComputeNamespaces to update the internal list of
2443         namespaces, this is no longer done for us.
2444
2445         (InteractiveBase): Use the Evaluator APIs instead of calling into
2446         Driver directly
2447
2448 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2449
2450         A fix for bug #429264
2451         * expression.cs: Missing mutator for access to multidimensional
2452         arrays.
2453
2454 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2455
2456         * class.cs, statement: Emit DebuggerHidden attribute for iterator
2457         entry wrapper.
2458         
2459         * driver.cs: Missing input argument check.
2460
2461 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2462
2463         * typemanager.cs, generic.cs, eval.cs, decl.cs, anonymous.cs,
2464         expression.cs, statement.cs, rootcontext.cs, class.cs, 
2465         cs-parser.jay, driver.cs, generic-mcs.cs, enum.cs: Removed obsolete
2466         DefineMembers.
2467
2468 2008-09-24  Miguel de Icaza  <miguel@novell.com>
2469
2470         * ecore.cs (FieldExpr): Only initialize eclass when we return a
2471         fully constructed FieldExpr, fixes the regression introduced in
2472         the last commit.
2473         
2474         * ecore.cs, expression.cs: Plug back the eclass initialization as
2475         otherwise it regresses `csharp'. 
2476
2477 2008-09-24  Marek Safar  <marek.safar@gmail.com>
2478
2479         * typemanager.cs, decl.cs, convert.cs, assign.cs, expression.cs,
2480         ecore.cs, attribute.cs: Moved obsolete method checks from emit
2481         phase to resolve phase. It resolves problems with expression trees
2482         and fixes bugs #323796, #325156.
2483
2484 2008-09-23  Marek Safar  <marek.safar@gmail.com>
2485
2486         * codegen.cs: Report better error when symbol writer is missing.
2487
2488 2008-09-23  Marek Safar  <marek.safar@gmail.com>
2489
2490         * codegen.cs: Set .NET symbol writer.
2491         
2492         * decl.cs: Guard against null generic arguments.
2493         
2494         * report.cs: Don't report exactly same additional details.
2495
2496 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2497
2498         A fix for bug #324917
2499         * cs-parser.jay: Add missing multidimensional non-expression type
2500         ranks.
2501         
2502 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2503
2504         A fix for bug #428191
2505         * anonymous.cs: Create an outer generic fields also for non-storey
2506         anonymous methods.
2507
2508 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2509
2510         A fix for bug #378294
2511         * class.cs: Make fixed size buffers gmcs feature only.
2512
2513 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2514
2515         A fix for bug #355622, #324993
2516         * assign.cs, const.cs, class.cs: Create new EmitContext for each
2517         field initializer.
2518
2519 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2520
2521         * nullable.cs, expression.cs, namespace.cs, delegate.cs: Duplicate
2522         error reporting.
2523
2524 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2525
2526         A fix for bug #416110
2527         * generic.cs: Struct constraint results in default ctor and
2528         ValueType base type constraint to be set.
2529
2530 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2531
2532         A fix for bug #423791
2533         * generic.cs: Fixed params output type type-inference.
2534
2535 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2536
2537         * cs-parser.jay, expression.cs: Fixed few expression crashes.
2538         
2539 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2540
2541         * cs-tokenizer.cs: Don't break on extra partial modifier.
2542
2543 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2544
2545         A fix for bug #427592
2546         * generic.cs: Use common parameter resolve method.
2547
2548 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2549
2550         A fix for bug #414758
2551         * expression.cs, ecore.cs: Fixed crash when accessing non-static
2552         property.
2553
2554 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2555
2556         * driver.cs, namespace.cs: Read types and namespaces after all
2557         requested assemblies are loaded, fixes issues with System.Core
2558         auto-reference, and #419888.
2559
2560 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2561
2562         A fix for bug #417705
2563         * cs-parser.jay: Fixed as/is operator expression split.
2564
2565 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2566
2567         * const.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay:
2568         Fixed expression tree representation of empty new expression and
2569         new initializer expression.
2570
2571 2008-09-18  Miguel de Icaza  <miguel@novell.com>
2572
2573         * eval.cs: Remove warning, keep reference to driver around.
2574
2575         * Hide fields that do not need to be public.
2576
2577 2008-09-17  Marek Safar  <marek.safar@gmail.com>
2578
2579         A fix for bug #426385
2580         * expression.cs (ImplicitlyTypedArrayCreation): Use full implicit
2581         conversion for array elements.
2582
2583 2008-09-17  Marek Safar  <marek.safar@gmail.com>
2584
2585         * expression.cs, statement.cs, class.cs, cs-parser.jay: Fixed
2586         void parsing conflicts.
2587
2588 2008-09-15  Marek Safar  <marek.safar@gmail.com>
2589
2590         A fix for bug #425601
2591         * driver.cs, typemanager.cs, namespace.cs: Automatically reference
2592         System.Core only when there is no custom ExtensionAttribute
2593         implementation.
2594
2595 2008-09-15  Miguel de Icaza  <miguel@novell.com>
2596
2597         * namespace.cs: Do not report CS0246 (name
2598
2599 2008-09-12  Marek Safar  <marek.safar@gmail.com>
2600
2601         A fix for bug #425669
2602         * generic.cs: Don't cache generic static anonymous method 
2603         containers.
2604
2605 2008-09-12  Marek Safar  <marek.safar@gmail.com>
2606
2607         * generic.cs, class.cs, delegate.cs: Check recursive inherited
2608         conflicting constraints.
2609
2610 2008-09-12  Raja R Harinath  <harinath@hurrynot.org>
2611
2612         * cs-tokenizer.cs (consume_identifier): Allow partial methods in
2613         mcs too.
2614
2615 2008-09-12  Marek Safar  <marek.safar@gmail.com>
2616
2617         * literal.cs, convert.cs, expression.cs, statement.cs: More null
2618         to null pointer conversion fixes.
2619
2620 2008-09-11  Marek Safar  <marek.safar@gmail.com>
2621
2622         * cs-parser.jay, expression.cs: An implicitly typed local variable
2623         declarator cannot use an array initializer.
2624
2625 2008-09-11  Marek Safar  <marek.safar@gmail.com>
2626
2627         * cs-parser.jay: Reduced number of printed tokens, add sorting.
2628
2629 2008-09-11  Marek Safar  <marek.safar@gmail.com>
2630
2631         * generic.cs (InflatedConstraints): Don't crash when constraints
2632         are different.
2633         
2634         * cs-parser.jay: const_declarator is a block.
2635
2636         * constant.cs: Check for not allowed NaN conversions.
2637
2638 2008-09-10  Miguel de Icaza  <miguel@novell.com>
2639
2640         * driver.cs: Drop --shell argument, the compiler is no longer a
2641         REPL. 
2642
2643         * eval.cs: Move most of the code that deals with evaluation into
2644         this file and document the public API from repl.cs
2645
2646         * repl.cs: Remove from here.
2647         
2648 2008-09-10  Marek Safar  <marek.safar@gmail.com>
2649
2650         A fix for bug #424684
2651         * generic.cs: Generic class constraints must come first.
2652
2653 2008-09-09  Miguel de Icaza  <miguel@novell.com>
2654
2655         * cs-parser.jay: Improve error reporting for syntax errors in
2656         statements and expressions, we now report the expected tokens
2657         instead of reporting the useless "; expected".
2658
2659         Drop the strings from the token declaration, it turns out that
2660         they did not do what I thought they did.  Instead they were adding
2661         two sets of tokens to the tables.
2662
2663 2008-09-09  Marek Safar  <marek.safar@gmail.com>
2664
2665         * typemanager.cs, generic.cs, parameter.cs, expression.cs, class.cs,
2666         delegate.cs: Share special type check.
2667
2668 2008-09-09  Marek Safar  <marek.safar@gmail.com>
2669
2670         A fix for bug #423981
2671         * expression.cs (EmitBranchable): Correctly emit inverted float conditions.
2672
2673 2008-09-09  Marek Safar  <marek.safar@gmail.com>
2674
2675         * ecore.cs (ReducedConstantExpression): Implemented ConvertExplicitly and
2676         ConvertImplicitly.
2677
2678 2008-09-09  Marek Safar  <marek.safar@gmail.com>
2679
2680         A fix for bugs: #324750, #335946
2681         * cs-tokenizer.cs, cs-parser.jay, expression.cs: Use a custom 
2682         lookup rule to determine ?-based tokens.
2683
2684 2008-09-08  Miguel de Icaza  <miguel@novell.com>
2685
2686         * repl.cs (OptionalAssign.EmitStatement): It is possible that some
2687         expressions (like event adding or removing) end up here, so we
2688         need to treat those as statements.
2689
2690         Add LoadAssembly method.
2691
2692 2008-09-04  Miguel de Icaza  <miguel@novell.com>
2693
2694         * repl.cs: Add Time method.
2695
2696 2008-09-05  Marek Safar  <marek.safar@gmail.com>
2697
2698         * cs-tokenizer.cs: Fixed swaped UTF-16 surrogates parsing.
2699
2700 2008-09-05  Miguel de Icaza  <miguel@novell.com>
2701
2702         * repl.cs: Add workaround for old compilers.
2703
2704 2008-09-04  Jb Evain  <jbevain@novell.com>
2705
2706         * repl.cs (PrettyPrint): pretty print everything that
2707         implements IDictionary, as well as IEnumerables. Also,
2708         add a quit helper property.
2709
2710 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2711
2712         * constant.cs: Better error reporting for decimal literals.
2713         
2714         * class.cs, attribute.cs, typemanager.cs: Emit more fixed buffer
2715         field attributes.
2716         
2717 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2718                         Miguel de Icaza  <miguel@novell.com>
2719
2720         A fix for bug #422951
2721         * assign.cs (Assign.DoResolve): Perform the type conversions
2722         checks before we attempt to initialize `New' initializers. 
2723
2724 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2725
2726         A fix for bug #422853
2727         * delegate.cs (DelegateCreation): Add special handling for
2728         EmptyExpression.Null instance expression which is just another
2729         hack for undecided member instance exression.
2730
2731 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2732
2733         * expression.cs, ecore.cs: Emit full expression tree for reduced
2734         binary expressions.
2735
2736 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2737
2738         * expression.cs (This): Guard against multi-resolving.
2739         
2740         * ecore.cs, statement.cs (Throw): Simplified.
2741         
2742         * flowanalysis.cs: Also verify event fields.
2743
2744 2008-09-04  Miguel de Icaza  <miguel@novell.com>
2745
2746         * assign.cs (Assign.DoResolve): Perform the type conversions
2747         checks before we attempt to initialize `New' initializers. 
2748
2749         * repl.cs (PrettyPrint): Add Hashtable prettyprint
2750
2751         * anonymous.cs (AnonymousTypeClass): On EvalMode make the class
2752         public. 
2753
2754         * repl.cs: Update help.
2755
2756 2008-09-03  Miguel de Icaza  <miguel@novell.com>
2757
2758         * driver.cs (ProcessDefaultConfig): Now it encapsulates all the
2759         handling of the default config handling, including the special
2760         treatment of System.Core assembly. 
2761
2762         Fixes the REPL processing for LINQ.
2763
2764 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2765
2766         A fix for bug #422507
2767         * expression.cs (UnboxCast): Add missing child expression mutator.
2768
2769 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2770
2771         * driver.cs: Don't self reference System.Core assembly.
2772
2773 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2774
2775         A fix for bug #422507
2776         * expression.cs (StringConcat): Add missing type mutator.
2777
2778 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2779
2780         * generic.cs (TypeInferenceContext): Follow equality rule for
2781         constructed type lower bound type inference.
2782
2783 2008-09-02  Miguel de Icaza  <miguel@novell.com>
2784
2785         * getline.cs (CmdRefresh): Apply patch from Douglas S. Blank
2786         <dblank@cs.brynmawr.edu> which updates the cursor position on
2787         refresh.
2788         
2789 2008-09-02  Marek Safar  <marek.safar@gmail.com>
2790
2791         A fix for bug #367145
2792         * driver.cs: Fixed import of extension methods when using -noconfig
2793         option.
2794
2795 2008-09-02  Marek Safar  <marek.safar@gmail.com>
2796
2797         * iterator.cs: Don't emit GetEnumerator method twice but call a generic
2798         version from non-generic implementation instead.
2799
2800 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2801
2802         A fix for bug #418908
2803         * class.cs: Use AddScopeStatement for field initializers.
2804
2805 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2806
2807         A fix for bug #415385
2808         * ecore.cs, convert.cs: Do method group conversion for equal group types.
2809
2810 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2811
2812         A fix for bug #421736
2813         * iterators.cs: Don't crash on unreachable iterators.
2814
2815 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2816
2817         A fix for bug #421628
2818         * parameter.cs, attribute.cs: Clone also parameter attributes.
2819
2820 2008-08-30  Miguel de Icaza  <miguel@novell.com>
2821
2822         * namespace.cs (LookupType): In EvalMode, try to replace
2823         the TypeBuilder from our cache with a Type as Reflection.Emit does
2824         not  like to mix code from older assemblies emitted and new
2825         assemblies emitted. 
2826
2827         This sounds like a serious Mono bug that prevents multiple
2828         assemblies to be generated and consumed at the same time.
2829
2830         * cs-parser.jay (push_current_class): Do not make interactive
2831         classes internal or private, make them public as we currently
2832         generate each new class in a new assembly.   
2833
2834 2008-08-29  Miguel de Icaza  <miguel@novell.com>
2835
2836         * decl.cs, roottypes.cs, class.cs:: Add an infrastructure to
2837         remove types that are entered into the global namespace during
2838         parsing so that we can remove them on failure.
2839  
2840         * cs-parser.jay: Parsing: we now keep track of types that are
2841         entered into global variables and queue those in case the parsing
2842         or resolution fail.
2843  
2844         This happens in a few situations: during partial-input, we invoke
2845         the parser repeatedly for example with the string "class X", this
2846         would cause X to be registed, and we need to remove this
2847         registration so that another parse attempt later with say "class X {"
2848         would actually work.
2849  
2850         Additionally, if there is an error in the resolution phase, for
2851         example: "class X : NonExistant {}" th
2852         
2853         * cs-parser.jay: Be more precise with the errors being raised,
2854         instead of flagging all exceptions during parsing to be attributed
2855         to the parsing process, distinguish those from errors happening in
2856         the actions and hint that using -v would produce the actual
2857         exception. 
2858
2859         * repl.cs: Do not load all compiler references on each reset,
2860         doing the partial reset takes care of this.
2861         
2862 2008-08-28  Miguel de Icaza  <miguel@novell.com>
2863
2864         * repl.cs: Add support for loading all the files from
2865         ~/.config/csharp/*cs as startup scripts and ~/.config/csharp/*.dll
2866         as shell libraries.
2867
2868         Introduce a micro-parser that is able to deambiguate on its input
2869         whether we are dealing with a compilation unit (namespace, class,
2870         interface, struct, delegate) declaration or a statement.   This
2871         allows both declarations and statements to be entered. 
2872
2873         Set history size by default to 300 lines.
2874
2875         Instead of distinguishing based on the parser.InteractiveResult,
2876         have only two cases: statements were parsed, or a compilation unit
2877         was.   Always pull the Using statement additions from the
2878         compilation unit parse.
2879         
2880         * cs-tokenizer.cs: Rename tokens to better describe their intent
2881         (EvalStatementParserCharacter and EvalCompilationUnitParserCharacter).
2882         
2883         * rootcontext.cs: Split EvalMode into EvalMode and StatementMode.
2884         EvalMode is used to trigger the lookup of global variables while
2885         StatementMode is used turn variable declarations into static
2886         fields.
2887
2888         * getline.cs: Allow history size to be set.
2889         
2890 2008-08-29  Marek Safar  <marek.safar@gmail.com>
2891
2892         A fix for bug #360755
2893         * ecore.cs (SimpleName): Exclude indexers from simple name resolve.
2894
2895 2008-08-29  Marek Safar  <marek.safar@gmail.com>
2896
2897         * generic.cs, iterators.cs, codegen.cs: Removed unused variable.
2898         
2899         * typemanager.cs, statement.cs, ecore.cs, enum.cs: Don't reconstruct enum
2900         member name, it is too confusing
2901         
2902         * decl.cs, class.cs: Don't report unused fields with attached attribute.
2903         
2904         * rootcontext.cs: Finally default to warning level 4.
2905
2906 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2907
2908         * class.cs (CheckBase): Ignore overloaded operators.
2909
2910 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2911
2912         A fix for bug #420830
2913         * expression.cs, cs-parser.jay: Put back InvocationOrCast expression.
2914
2915 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2916
2917         A fix for bug #420832
2918         * anonymous.cs, iterators.cs: Also clone hoisted this iterator variable.
2919
2920 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2921
2922         A fix for bug #420386
2923         * nullables.cs: Fixed logic of nullable user comparison operators involving
2924         null values.
2925
2926 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2927         
2928         * attribute (IsClsCompliant): Use FALSE value for pointer types.
2929
2930 2008-08-27  Miguel de Icaza  <miguel@novell.com>
2931
2932         * repl.cs: Add support for aborting the running code with C-c. 
2933
2934 2008-08-27  Raja R Harinath  <harinath@hurrynot.org>
2935
2936         * cs-parser.jay (CS1002): Dump 'yyToken' with Report.ExtraInformation.
2937
2938 2008-08-27  Miguel de Icaza  <miguel@novell.com>
2939
2940         * cs-parser.jay (interactive_statement_list): A new set of rules
2941         for hosting statements that uses the "interactive_" prefix.   
2942
2943         * repl.cs: Add support for parsing `using' as a statement or as a
2944         directive.  Deambiguating before passing this to the parser.
2945
2946         We need to distinguish statement_expressions that occur at the
2947         toplevel vs those that occur embedded into expressions.
2948
2949         * getline.cs: Applied patch from Stuart Carnie <stuart.carnie@gmail.com> 
2950         that fixes the cursor key handling, and a history bug.
2951         
2952 2008-08-26  Miguel de Icaza  <miguel@novell.com>
2953
2954         * Makefile: Drop BOOTSTRAP_COMPILER as that was masking the
2955         limitations in Console, instead the 2.0 bootstrap libraries now
2956         include the Console bits.
2957
2958         Also, remove the use of Nullables from getline.cs
2959
2960         ------------
2961         
2962         Interactive support for the C# compiler.   Use gmcs --shell to
2963         enter a read-eval-print loop shell.
2964
2965         Docs: http://www.mono-project.com/CsharpRepl
2966         
2967         * sources: include repl.cs here and getline.cs for gmcs.exe,
2968         everything else is getline.cs impaired.
2969
2970         * Makefile: when bootstrapping pass a special flag
2971         BOOTSTRAP_COMPILER which we use to prevent failures in compilation
2972         as we use NET_2_0 define to pull 2.0 APIs from System.Console.
2973         This distinguishes those two cases.
2974
2975         * repl.cs: Support for a read-eval-print loop.   Will be soon
2976         refactored into eval support and then REPL on top of it.
2977
2978         * ecore.cs: If a simplename lookup fails, before erroring out,
2979         if we are in EvalMode to resolve the name to a declaration in the
2980         Eval-land.    
2981
2982         This means that variable declarations that happened in previous
2983         classes (as repl puts every statement in a separate class) are
2984         made visible in this way.
2985
2986         * cs-parser.jay: UnexpectedEOF, a new flag that is set if we
2987         triggered an error due to the end of file being reached.   This is
2988         used to do multi-line input, and notify the caller that the user
2989         needs to provide more text before a successful parse.
2990
2991         Add new grammar rules after the INTERACTIVE_PARSER token is seen
2992         to drive the evaluation with a custom wrapper. 
2993
2994         * driver.cs: Add support for --shell, and refactor some code to be
2995         reused from repl.cs
2996         
2997         * namespace.cs: Add support for serializing the contents of the
2998         namespaces and reloading them.  
2999
3000         * getline.cs: A managed implementation of ReadLine under
3001         X11/Apache2 license terms.  Easy to embed in other applications as
3002         well.
3003
3004         * namespace.cs: Add some functions to save and restore the
3005         namespace state.
3006
3007         * rootcontext.cs: New public field.
3008
3009         * cs-tokenizer.cs: Add support for one of the possible characters
3010         we introduce into the token stream.  
3011
3012         This patch does not affect the regular tokenization process, the
3013         only performance hit would happen if there is an invalid character
3014         on the input string.
3015
3016         * support.cs: Move isatty helper routine here.
3017
3018         * codegen.cs: Small cleanup, and add a mechanism to initialize the
3019         code generator for in-memory assemblies.
3020
3021 2008-08-26  Marek Safar  <marek.safar@gmail.com>
3022
3023         * generic.cs, ecore.cs, delegate.cs, cs-parser.jay, expression.cs: A type
3024         parameter cannot be always used as a type.
3025
3026 2008-08-21  Marek Safar  <marek.safar@gmail.com>
3027
3028         * convert.cs, expression.cs: Use single ExplicitReferenceConversion routine.
3029
3030 2008-08-21  Marek Safar  <marek.safar@gmail.com>
3031
3032         * convert.cs: Implement explicit array to IList<T> conversion.
3033
3034 2008-08-20  Marek Safar  <marek.safar@gmail.com>
3035
3036         A fix for bug #362740
3037         * cs-tokenizer.cs: Handle UTF-16 surrogates.
3038
3039 2008-08-20  Marek Safar  <marek.safar@gmail.com>
3040         
3041         * generic.cs, support.cs, typemanager.cs, lambda.cs, parameter.cs,
3042         pending.cs, ecore.cs, linq.cs, class.cs, decl.cs, delegate.cs,
3043         flowanalysis.cs, iterators.cs, cs-parser.jay, convert.cs, anonymous.cs,
3044         expression.cs, attribute.cs, statement.cs, doc.cs: Refactored parameters
3045         handling to use just one type of infrastructure and deal with generics
3046         more effectivelly.
3047
3048 2008-07-23  Martin Baulig  <martin@ximian.com>
3049
3050         *** Merged this from trunk revision 108527 ***
3051
3052         * statement.cs
3053         (ExplicitBlock.EmitSymbolInfo): Moved to `ToplevelBlock'.
3054         (ToplevelBlock.EmitSymbolInfo): Tell the symbol writer about the
3055         scope variable.
3056
3057 2008-08-15  Marek Safar  <marek.safar@gmail.com>
3058         
3059         * ecore.cs, linq.cs, const.cs, expression.cs, statement.cs: More robust
3060         error checks.
3061
3062 2008-08-15  Marek Safar  <marek.safar@gmail.com>
3063         
3064         * delegate.cs: Fixed compiler crash when creating delegate using partial
3065         method.
3066         
3067         * typemanager.cs: MulticastDelegate is not a delegate.
3068
3069 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3070         
3071         * expression.cs, ecore.cs, anonymous.cs, class.cs: Fixed missing error
3072         checks.
3073
3074 2008-08-14  Raja R Harinath  <harinath@hurrynot.org>
3075
3076         * cs-parser.jay (type): Allow 'var' in mcs too.
3077         (local_variable_type): Likewise.
3078
3079 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3080         
3081         * driver.cs: Removed broken -noconfig variants.
3082
3083 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3084         
3085         A fix for bug #417078
3086         * expression.cs: Emit correctly left side pointer operators.
3087
3088 2008-08-13  Marek Safar  <marek.safar@gmail.com>
3089
3090         * generic.cs, lambda.cs: Inflate method generic arguments only.
3091
3092 2008-08-12  Marek Safar  <marek.safar@gmail.com>
3093
3094         * class.cs: Fixed struct layout check regression.
3095
3096 2008-08-12  Marek Safar  <marek.safar@gmail.com>
3097
3098         * cs-parser.jay, enum.cs: Simplified enum parsing.
3099         
3100         * decl.cs: Check all type parameters conflicts.
3101         
3102         * expression.cs, statement.cs, attribute.cs: More expression checks.
3103
3104 2008-08-11  Marek Safar  <marek.safar@gmail.com>
3105
3106         * generic.cs: Add type inference types restriction.
3107         
3108         * parameter.cs, class.cs, delegate.cs, iterators.cs, cs-parser.jay,
3109         anonymous.cs, expression.cs: Allocate less accessor parameters.
3110
3111 2008-08-08  Marek Safar  <marek.safar@gmail.com>
3112
3113         * typemanager.cs, ecore.cs: Ambiguous operators can come from different
3114         classes.
3115
3116 2008-08-08  Marek Safar  <marek.safar@gmail.com>
3117
3118         * convert.cs, delegate.cs: Fixed delegate compatibility conversion. 
3119
3120 2008-08-07  Marek Safar  <marek.safar@gmail.com>
3121
3122         * class.cs, decl.cs, iterator.cs, ecore.cs: Refactor base type resolving.
3123         Also fixes #362146 and #381592.
3124
3125 2008-08-07  Marek Safar  <marek.safar@gmail.com>
3126
3127         * ecore.cs: Reduced constant cannot be used as an attribute value.
3128         
3129         * cs-parser.jay: Base expression has to be a type.
3130         
3131         * expression.cs (Conditional): Uses ReducedExpression.
3132
3133 2008-08-06  Marek Safar  <marek.safar@gmail.com>
3134
3135         A fix for bug #376826
3136         * parameter.cs, ecore.cs, anonymous.cs, expression.cs, statement.cs: An
3137         address of hoisted local variable or parameter cannot be taken.
3138
3139 2008-08-05  Marek Safar  <marek.safar@gmail.com>
3140
3141         * ecore.cs, constant.cs, expression.cs, statement.cs: Resolve correctly 
3142         anonymous method inside checked/unchecked expression.
3143
3144 2008-08-05  Marek Safar  <marek.safar@gmail.com>
3145
3146         * typemanager.cs (IsEqual): Guard against null.
3147         
3148         * ecore.cs, class.cs, convert.cs, const.cs, constant.cs, expression.cs,
3149         attribute.cs, enum.cs, statement.cs: Pass EmitContext to constant conversion
3150         routine. Fixed few misleading conversion errors.
3151
3152 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3153
3154         * class.cs: Consider generics when checking cycles in struct layout.
3155
3156 2008-08-04  Raja R Harinath  <harinath@hurrynot.org>
3157
3158         * cs-tokenizer.cs (get_cmd_arg): Simplify.  Don't be too pedantic.
3159
3160 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3161
3162         A fix for bug #414165
3163         * anonymous.cs: Use same anonymous implementation method for all anonymous
3164         method emits.
3165
3166 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3167
3168         * generic.cs, anonymous.cs, statement.cs: Emit inherited anonymous method
3169         constraints.
3170
3171 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3172
3173         * cs-parser.jay: Typeof argument has to be a type expression.
3174         
3175         * namespace.cs: Check alias and namespace definitions collisions.
3176         
3177         * class.cs, pending.cs: Moved explicit interface accessor implementation
3178         check.
3179         
3180         * delegate.cs, expression.cs: Verify special name invocations.
3181         
3182 2008-08-01  Marek Safar  <marek.safar@gmail.com>
3183
3184         * cs-parser.jay: Don't choke on empty generic type arguments.
3185         
3186         * cs-tokenizer.cs: Handle escaped preprocessor directives.
3187         
3188         * expression.cs, ecore.cs: Minor expressions bugs.
3189
3190 2008-08-01  Marek Safar  <marek.safar@gmail.com>
3191
3192         * cs-parser.jay: Removed duplicate interface declaration (fixes 2 conflicts)
3193         and added more error handling.
3194         
3195         * class.cs, iterators.cs, anonymous.cs: Removed useless interface parameter.
3196         
3197         *  modifiers.cs, enum.cs: Fixed.
3198
3199 2008-07-31  Jb Evain  <jbevain@novell.com>
3200
3201         * driver.cs: remove -pkg ability of smcs.
3202
3203 2008-07-30  Marek Safar  <marek.safar@gmail.com>
3204
3205         * statement.cs (Switch): Correctly set empty default target for single
3206         blocks.
3207
3208 2008-07-30  Marek Safar  <marek.safar@gmail.com>
3209
3210         * typemanager.cs, assign.cs, driver.cs, expression.cs, statement.cs: Rewrote
3211         string switch statement implementation to use string dictionary which
3212         significantly (2-8x) improves performance of generated code.
3213
3214 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3215
3216         A fix for bug #412880 by Atsushi Enomoto <atsushi@ximian.com>
3217         * modifiers.cs (GetDescription): Fixed FamANDAssem case.
3218         
3219 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3220
3221         A fix for bug #412595
3222         * typemanager.cs, convert.cs, expression.cs: Some types are never
3223         convertible to each other.
3224
3225 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3226
3227         * nullable.cs (CreateNullConstant): An error messages update.
3228
3229 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3230
3231         A fix for bug #412595
3232         * cfold.cs: Don't cast undefined bool constant.
3233
3234 2008-07-29  Martin Baulig  <martin@ximian.com>
3235
3236         * symbolwriter.cs
3237         (SymbolWriter.Reset): New public static method.
3238
3239         * driver.cs
3240         (CompilerCallableEntryPoint.Reset): Call SymbolWriter.Reset().
3241
3242 2008-07-28  Marek Safar  <marek.safar@gmail.com>
3243
3244         * cs-tokenizer.cs (IsLambdaOpenParens): Optimized using more stop tokens.
3245         
3246         * expression.cs (ElementAccess): Exact size allocation.
3247
3248 2008-07-26  Marek Safar  <marek.safar@gmail.com>
3249
3250         * driver.cs: Replaced outdated UnixParseOption with CSCParseOption.
3251
3252 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3253
3254         * flowanalysis.cs (StructInfo): Fixed detection of dynamic types.
3255         
3256         * class.cs: Removed $PRIVATE$ field hack which caused problems during
3257         flow analysis.
3258
3259 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3260
3261         A fix for bug #412217
3262         * assign.cs: Mutate also assignment type.
3263
3264 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3265
3266         A fix for bug #323644
3267         * typemanager.cs (IsValidProperty): Verify DefaultMemberName when checking
3268         indexers.
3269
3270 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3271
3272         A fix for bug #412134
3273         * expression.cs (ResolveOperatorEnum): Do implicit conversion of
3274         non-enumerable operands when overloading equality or bitwise operators.
3275
3276 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3277
3278         * anonymous.cs: Cache closed generic anonymous method delegates.
3279
3280 2008-07-24  Marek Safar  <marek.safar@gmail.com>
3281
3282         * lambda.cs, linq.cs, class.cs, iterators.cs, cs-parser.jay, assign.cs, 
3283         anonymous.cs, statement.cs: Always emit anonymous method as static method
3284         when is instance free. Use nesting for nested anynomous methods blocks.
3285         
3286 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3287
3288         * anonymous.cs (MutateGenericMethod): Added extra code path for imported
3289         types.
3290
3291 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3292
3293         * expression.cs: Removed MakeSimpleCall.
3294
3295 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3296
3297         A fix for bug #323012
3298         * class.cs, pending.cs: Emit proxy for indexers when they differ in name.
3299         Base method implementing interface has to be public.
3300
3301 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3302
3303         * cs-parser.jay: Don't break on missing argument.
3304
3305 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3306
3307         A fix for bug #320993
3308         * report.cs, parameter.cs, class.cs, decl.cs, delegate.cs, attribute.cs,
3309           enum.cs, codegen.cs: Report CLS compliance errors as warnings.
3310
3311 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3312
3313         A fix for bug #320748
3314         * convert.cs: Implicit user operators cannot convert to interfaces
3315
3316 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3317
3318         A fix for bug #312686
3319         * driver.cs: Ignore empty assembly references.
3320
3321 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3322
3323         A fix for bug #387040
3324         * ecore.cs: Skip constrains check for an explicit implementation.
3325
3326 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3327
3328         A fix for bug #409045
3329         * cs-tokenizer.cs, rootcontext.cs, class.cs, location.cs, delegate.cs,
3330           cs-parser.jay, driver.cs, expression.cs, attribute.cs: Conditional
3331           identifiers are file specific unless passed as input arguments.
3332
3333 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3334
3335          * typemanager.cs, parameter.cs, class.cs, attribute.cs: Use an attribute
3336          to emit UnmanagedMarshal data under 2.0 profile.
3337
3338 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3339
3340         A fix for bug #410369
3341         * parameter.cs: Clone correctly ParamsParameter.
3342
3343 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3344
3345         * expression.cs (Argument): Always report type for type based expressions
3346         errors.
3347
3348 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3349
3350         A fix for bug #410666
3351         * anonymous.cs: Correctly initialize generic storey reference.
3352
3353 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3354
3355         * convert.cs: Don't box same type arguments.
3356
3357 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3358
3359         * ecore.cs, linq.cs, delegate.cs, constant.cs, nullable.cs, expression.cs:
3360         Finished missing generic type mutators.
3361
3362 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3363
3364         * iterators.cs, statement.cs: Finished statements CloneTo.
3365
3366 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3367
3368         * anonymous.cs: ExpressionTreeProxy is of Value type expression.
3369         
3370         * expression.cs: Emit optimized default value expressions in expression tree
3371         array initializer.
3372
3373 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3374
3375         * ecore.cs, cs-parser.jay, statement.cs: Error reporting fixes.
3376
3377 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3378
3379         A fix for bug #367536
3380         * cs-parser.jay: Check static constructor of generic types for an access
3381         modifier.
3382
3383 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3384
3385         A fix for bug #353800
3386         * lambda.cs: Emit ret for contextual statements.
3387         
3388         * codegen.cs: Keep both resolved and unreachable flags, otherwise we end
3389         up emitting redundant ret for all anonymous methods with return.
3390
3391 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3392
3393         A fix for bug #365188
3394         * ecore.cs, anonymous.cs, expression.cs, codegen.cs, statement.cs: Don't
3395         create anonymous method storey in unreachable block.
3396
3397 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3398
3399         * generic.cs, typemanager.cs, cs-tokenizer.cs, parameter.cs, namespace.cs,
3400         class.cs, delegate.cs, flowanalysis.cs, iterators.cs, anonymous.cs,
3401         driver.cs, nullable.cs, expression.cs, attribute.cs, codegen.cs,
3402         statement.cs: Fixed relevant defects found by Gendarme.
3403
3404 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3405
3406         A fix for bug #325291
3407         * modifiers.cs, class.cs, cs-parser.jay, anonymous.cs, codegen.cs, 
3408         statement.cs: Replaced IAnonymousHost with top level block flag.
3409
3410 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3411
3412         * cs-parser.jay: Clean up unused open_parens.
3413
3414 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3415
3416         * ecore.cs: Custom error message for a range variable assignment.
3417
3418 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3419
3420         * constant.cs, typemanager.cs: Emit empty string ("") as string.Empty field
3421         load.
3422
3423 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3424
3425         * literal.cs: Null literal is of object type.
3426
3427 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3428
3429         * nullable.cs (LiftedBinaryOperator): Always lift unwrapped nullable
3430         expression of nullable equality comparison.
3431
3432 2008-07-15  Marek Safar  <marek.safar@gmail.com>
3433
3434         * expression.cs(PointerArithmetic): Removed redundant assignment.
3435
3436 2008-07-15  Marek Safar  <marek.safar@gmail.com>
3437
3438         * decl.cs (GetSignatureForError): Report full namespace name for containers.
3439
3440 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3441
3442         A fix for bug #408361
3443         * anonymous.cs (MutateGenericMethod): Store generic type arguments before
3444         they are replaced by GetMethod.
3445
3446 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3447
3448         A fix for bug #408721 by jeremie.laval@gmail.com
3449         * expression.cs (Indirection): Implemented CloneTo.
3450
3451 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3452
3453         * statement.cs (AssignableSlots): Temporary disabled variable initialization
3454         assert check.
3455
3456 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3457
3458         * report.cs (EnableReporting): Don't reinitialize 0-based values.
3459
3460 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3461
3462         * linq.cs: Reset tranparent parameter counter in probing mode.
3463
3464 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3465
3466         * anonymous.cs: Mutate anonymous method type.
3467
3468 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3469
3470         * ecore.cs, anonymous.cs: Mutate field expressions.
3471
3472 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3473
3474         A fix for bug #369670
3475         * linq.cs, statement.cs: Use explicit block for query expressions variables.
3476
3477 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3478
3479         * report.cs, ecore.cs: Flush recorder only when silent mode is off.
3480
3481 2008-07-10  Raja R Harinath  <harinath@hurrynot.org>
3482
3483         Fix bug #314902
3484         * cs-tokenizer.cs (is_punct): If a generic lookahead is looking
3485         only one '>', and finds a '>>', abort the generic lookahead.
3486
3487 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3488
3489         A fix for bug #319902
3490         * cs-tokenizer.cs: Always look-ahed for `>='  when tokenizing `>'.
3491
3492 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3493
3494         A fix for bug #406371
3495         * statement.cs: Moved EmitSymbolInfo to Block.
3496
3497 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3498
3499         * ecore.cs: Report better error for extension method overload failures.
3500
3501 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3502
3503         * expression.cs (Is): No need to box reference values.
3504
3505 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3506
3507         * class.cs: Use event resolve context when initializing CreateEmitContext.
3508
3509 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3510
3511         A fix for bug #394436
3512         * anonymous.cs, class.cs, expression.cs, lambda.cs: Emit correctly extension
3513         method used inside expression trees. Added more LINQ to expression tree
3514         conversions.
3515
3516 2008-07-08  Marek Safar  <marek.safar@gmail.com>
3517
3518         A fix for bug #378189, #370577
3519         * lambda.cs, ecore.cs: Implemented 3.0 enhancement to better conversion
3520         from expression.
3521
3522 2008-07-08  Marek Safar  <marek.safar@gmail.com>
3523
3524         * anonymous.cs, class.cs, decl.cs: Emit CompilerGenerated attribute
3525         hierarchically.
3526
3527 2008-07-08  Marek Safar  <marek.safar@gmail.com>
3528
3529         A fix for bug #406702
3530         * anonymous.cs: Always park anonymous method in the nearest parent storey.
3531
3532 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3533
3534         A fix for bug #406648
3535         * cs-parser.jay: Report nullable use in mcs for some cases.
3536
3537 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3538
3539         * ecore.cs: Improved argument mismatch error messages.
3540
3541 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3542
3543         * anonymous.cs: Don't cache generic delegates when reference MVAR argument.
3544
3545 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3546
3547         * expression.cs (TypeOf): Mutate type argument.
3548
3549 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3550
3551         * class.cs: Report missing partial modifier for correct type.
3552
3553 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3554
3555         * ecore.cs, expression.cs (VariableReference): Variable property is 
3556         protected.
3557
3558 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3559
3560         * ecore.cs, convert.cs: Made OpcodeCast more memory efficient.
3561         
3562 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3563
3564         * anonymous.cs, class.cs, lambda.cs, iterator.cs: Cache static anonymous
3565         method delegates.
3566
3567 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3568
3569         * anonymous.cs, class.cs, expression.cs, iterator.cs, statement.cs: Reduce
3570         anonymous method storey to an instance method when only "this" is hoisted.
3571
3572 2008-07-03  Marek Safar  <marek.safar@gmail.com>
3573
3574         A fix for bug #321615
3575         * expression.cs: Pointer comparisons use unsigned operator.
3576
3577 2008-07-03  Marek Safar  <marek.safar@gmail.com>
3578
3579         * expression.cs: Fixed native pointer conversions. Also fixes #321615.
3580
3581 2008-07-02  Marek Safar  <marek.safar@gmail.com>
3582
3583         A fix for bug #404905
3584         * class.cs: Always initialize local unsafe variables.
3585
3586 2008-06-30  Marek Safar  <marek.safar@gmail.com>
3587
3588         A fix for bug #396987
3589         * expression.cs (NewInitialize): Clear local temporary variable for next run
3590
3591 2008-06-27  Marek Safar  <marek.safar@gmail.com>
3592
3593         A fix for bug #401020
3594         * ecore.cs: Both types and modifiers have to match for ref and out arguments
3595
3596 2008-06-27  Marek Safar  <marek.safar@gmail.com>
3597
3598         A fix for bug #398319
3599         * cs-parser.jay: Implemented undocumented base access expression inside
3600         anonymous types.
3601
3602 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3603
3604         A fix for bug #404227
3605         * cs-parser.jay: Parse namespace declaration using qualified identifier.
3606
3607 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3608
3609         A fix for bug #404227
3610         * convert.cs: Fixed explicit array to interface cast.
3611
3612 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3613
3614         A fix for bug #403894
3615         * delegate.cs: Mutate DelegateInvocation type.
3616
3617 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3618
3619         A fix for bug #379348
3620         * delegate.cs: Box a load of generic parameters.
3621
3622 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3623
3624         * expression.cs: Add an array creation arguments mutate.
3625
3626 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3627
3628         A fix for bug #386068
3629         * anonymous.cs, expression.cs: Emit correctly hoisted expression tree
3630         parameter.
3631
3632 2008-06-25  Marek Safar  <marek.safar@gmail.com>
3633
3634         * ecore.cs, expression.cs: Fixed broken TypeCast clone, implemented few more
3635         CloneTo.
3636
3637 2008-06-25  Marek Safar  <marek.safar@gmail.com>
3638
3639         A fix for bug #403518
3640         * delegate.cs: Type correctly anonymous method new invocation.
3641
3642 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3643
3644         A fix for bug #394826
3645         * anonymous.cs: Fully qualify members when resolving anonymous type internal
3646         calls.
3647
3648 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3649
3650         A fix for bug #394826
3651         * anonymous.cs, iterators.cs: Construct generic storey only when is really
3652         needed.
3653
3654 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3655
3656         * class.cs: Clone indexer parameters for localized capturing.
3657
3658 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3659
3660         A fix for bug #402379
3661         * expression.cs: Don't crash when an object initializer resolve fails.
3662
3663 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3664
3665         A fix for bug #402888
3666         * expression.cs: Mutate conditional expression.
3667
3668 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3669
3670         A fix for bug #401012
3671         * class.cs: Keep StructLayout in shared container.
3672
3673 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3674
3675         A fix for bug #400438
3676         * decl.cs, class.cs: Only properties can be automatically implemented.
3677
3678 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3679
3680         * statement.cs (ChangeToIterator): Copy also labels.
3681
3682 2008-06-23  Marek Safar  <marek.safar@gmail.com>
3683
3684         * ecore.cs: Pass type argument details to parent extension method.
3685
3686 2008-06-23  Marek Safar  <marek.safar@gmail.com>
3687
3688         A fix for bug #375966
3689         * delegate.cs: Fixed IsTypeCovariant generic type conversions.
3690
3691 2008-06-23  Raja R Harinath  <harinath@hurrynot.org>
3692
3693         * Makefile (bootstrap-libs): Pass NO_DIR_CHECK to sub-make.
3694
3695 2008-06-22  Marek Safar  <marek.safar@gmail.com>
3696
3697         A fix for bug #394347
3698         * anonymous.cs: Cache compatible delegates as compatibility check produces
3699         a new method every time.
3700
3701 2008-06-20  Marek Safar  <marek.safar@gmail.com>
3702
3703         * anonymous.cs: Propagate storey reference for single references.
3704
3705 2008-06-20  Marek Safar  <marek.safar@gmail.com>
3706
3707         A fix for bug #387615
3708         * assign.cs, expression.cs: Correctly clone compound assignment.
3709
3710 2008-06-19  Marek Safar  <marek.safar@gmail.com>
3711
3712         A fix for bug #359611, #359604
3713         * anonymous.cs: Mutate all types of hoisted parameters.
3714
3715 2008-06-19  Marek Safar  <marek.safar@gmail.com>
3716
3717         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, linq.cs, class.cs
3718         delegate.cs, iterators.cs, cs-parser.jay, assign.cs, anonymous.cs, driver.cs
3719         expression.cs, codegen.cs, statement.cs
3720         
3721         Fixes bugs: #318652, #323223, #234779, #325069, #325476, #332532, #334465,
3722         #345907, #349190, #353276, #355256, #359617, #378542, #384584, #396530
3723         
3724         ** Anonymous methods, lambda expressions rewrite **
3725         
3726         Anonymous expressions are now resolved when an explicit block is resolved 
3727         and they don't require any registration procedure anymore. Further,
3728         anonymous methods are defined when explicit block is emitted which allows
3729         better control of whole process and opens possibilities for more
3730         optimizations as well as alternative to reverse whole process.
3731         
3732         A concept of `MutateHoistedGenericType' was introduced to keep the resolve
3733         process consistent and to correctly emit hoisted generic methods when they
3734         have at least 1 hoisted variable.
3735         
3736 2008-06-17  Martin Baulig  <martin@ximian.com>
3737
3738         * class.cs: Also emit the `[DebuggerHidden]' attribute on the main
3739         iterator method.
3740         (AbstractPropertyEventMethod.IsDebuggerHidden): New protected
3741         virtual property; check it in Emit().
3742         (PropertyMethod.IsDebuggerHidden): Override, check whether we're
3743         an iterator.
3744         (MethodOrOperator.ResolveMethods): Set `DEBUGGER_HIDDEN' if we're
3745         an iterator.
3746         (Indexer.Define): Likewise.
3747
3748 2008-06-17  Marek Safar  <marek.safar@gmail.com>
3749
3750         * convert.cs: Don't use IsInterface on type arguments.
3751         
3752         * delegate.cs: DelegateInvocation uses MethodInfo.
3753         
3754         * parameter.cs: Removed IsTypeParameter.
3755         
3756         * generic-mcs.cs: More missing stuff.
3757
3758 2008-06-16  Martin Baulig  <martin@ximian.com>
3759
3760         * modifiers.cs
3761         (Modifiers.DEBUGGER_HIDDEN): New public const.
3762
3763         * typemanager.cs
3764         (TypeManager.GetDebuggerHiddenAttribute): New public static method.
3765
3766         * class.cs
3767         (MethodOrOperator.Emit): Check `Modifiers.DEBUGGER_HIDDEN'.
3768         (AbstractPropertyEventMethod): Likewise.
3769         (Constructor.Emit): Likewise.
3770         (SourceMethod.SetCompilerGenerated): Removed.
3771
3772         * iterator.cs: Set `Modifiers.DEBUGGER_HIDDEN' everywhere except
3773         on MoveNext().
3774
3775         * anonymous.cs
3776         (RootScopeInfo.DoDefineMembers): Set `Modifiers.DEBUGGER_HIDDEN'
3777         if we're an `IteratorHost'.
3778         (AnonymousMethodMethod..ctor): Don't set
3779         `Modifiers.COMPILER_GENERATED'; csc only sets this on the class,
3780         not on the method.
3781
3782 2008-06-16  Marek Safar  <marek.safar@gmail.com>
3783
3784         * statement.cs: Clean-up foreach statements.
3785
3786 2008-06-12  Marek Safar  <marek.safar@gmail.com>
3787
3788         * class.cs: Stop using public method which should not exist
3789         (MethodBuilder.SetGenericMethodSignature).
3790
3791 2008-06-11  Martin Baulig  <martin@ximian.com>
3792
3793         * location.cs
3794         (Location.LookupFile): Add `CompilationUnit' argument; when given
3795         a relative file name, make it relative to the directory the .cs
3796         file is located in instead of using the current directory.
3797
3798 2008-06-11  Martin Baulig  <martin@ximian.com>
3799
3800         * class.cs
3801         (IMethodData.EmitExtraSymbolInfo): Added `SourceMethod' argument.
3802         (MethodOrOperator.EmitExtraSymbolInfo): Likewise.
3803         (SourceMethod.SetRealMethodName): Moved here from the symbol writer.
3804         (SourceMethod.SetCompilerGenerated): Likewise.
3805
3806 2008-06-11  Marek Safar  <marek.safar@gmail.com>
3807
3808         * codegen.cs, driver: Only write symbol file when it's asked for.
3809
3810 2008-06-11  Marek Safar  <marek.safar@gmail.com>
3811
3812         * codegen.cs: Don't use assembly writer error handling for symbol writer.
3813
3814 2008-06-10  Martin Baulig  <martin@ximian.com>
3815
3816         * symbolwriter.cs: Reflect latest MarkSequencePoint() API changes.
3817
3818 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3819
3820         A fix for bug #316290
3821         * expression.cs: Include decimal operators in predefined table.
3822         
3823         * parameters.cs: More readonlyness.
3824
3825 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3826
3827         A fix for bug #397213
3828         * cs-parser.jay: One more missing current_local_parameters reset.
3829
3830 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3831
3832         A fix for bug #396633
3833         * class.cs: Host backing field in partial container.
3834
3835 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3836
3837         A fix for bug #397068
3838         * expression.cs: Check both operand types when predefined operator is used.
3839
3840 2008-06-05  Martin Baulig  <martin@ximian.com>
3841
3842         Merged the `debugger-kahalo' branch.
3843
3844         * class.cs
3845         (MethodData.Emit): Call SymbolWriter.SetCompilerGenerated() if
3846         we're an iterator method.
3847         (SourceMethod): Reflect latest symbol writer changes;
3848         SymbolWriter.OpenMethod() now takes a `ICompileUnit' argument and
3849         now `start_row' and `end_row'.
3850         (Constructor.Emit): Fix the logic whether to emit symbol information.
3851
3852         * iterator.cs: Call SymbolWriter.SetCompilerGenerated() on all the
3853         generated methods.
3854
3855         * location.cs
3856         (CompilationUnit): New public class; derives from `SourceFile'.
3857         (SourceFileEntry.DefineSymbolInfo): New public method.
3858         (SourceFileEntry.SetChecksum): New public method.
3859         (Location): Encode hidden line numbers by using `column == 255';
3860         the .ctor now accepts `column == -1' to mark a hidden line number.
3861         (Location.Hidden): New public property.
3862         (Location.CheckPoint): Add `CompilationUnit'.
3863         (Location.SourceFiles): Change return type to `CompilationUnit[]'.
3864         (Location.Push): Add `CompilationUnit compile_unit' argument.
3865         (Location.CompilationUnit): New public property.
3866
3867         * statement.cs
3868         (ToplevelBlock.Emit): Add `ec.Mark (EndLocation)'.
3869
3870         * cs-parser.jay: `SourceFile' -> `CompilationUnit'.
3871
3872         * driver.cs: `SourceFile' -> `CompilationUnit'.
3873
3874         * cs-tokenizer.cs: `SourceFile' -> `CompilationUnit'.
3875
3876         * namespace.cs: `SourceFile' -> `CompilationUnit'.
3877
3878         * cs-tokenizer.cs: Add support for `#pragma checksum' and
3879         `#line hidden'.
3880
3881         * symbolwriter.cs
3882         (SymbolWriter.MarkSequencePoint): Take a `Location' and use the
3883         new symbol writer API to also pass the file.
3884
3885 2008-06-05  Marek Safar  <marek.safar@gmail.com>
3886
3887         * statement.cs: Emit catch variable assignment using variable expression.
3888         
3889 2008-06-05  Marek Safar  <marek.safar@gmail.com>
3890
3891         * ecore.cs, expression.cs, statement.cs: Make TemporaryVariable compatible
3892         with other variable types.
3893
3894 2008-06-04  Marek Safar  <marek.safar@gmail.com>
3895
3896         * ecore.cs, expression.cs, statement.cs, typemanager.cs: Removed custom
3897         GetLength method emit, it breaks resolve rules.
3898         
3899 2008-06-02  Atsushi Enomoto  <atsushi@ximian.com>
3900             Marek Safar  <marek.safar@gmail.com>
3901                         
3902         A fix for bug #395542
3903         * cs-parser.jay: The trailing comma is allowed in anonymous type member
3904         declaration.
3905         
3906 2008-06-02  Marek Safar  <marek.safar@gmail.com>
3907
3908         A fix for bug #395287
3909         * class.cs, modifiers.cs: Automatic properties method base modifiers checks.
3910
3911 2008-05-31  Marek Safar  <marek.safar@gmail.com>
3912
3913         A fix for bug #395845
3914         * class.cs, nullable.cs: User unary operator is allowed to have nullable and
3915         non-nullable parameter type.
3916         
3917 2008-05-31  Marek Safar  <marek.safar@gmail.com>
3918
3919         * class.cs: Handle contructor initializer as a statement in top-level block.
3920
3921 2008-05-30  Marek Safar  <marek.safar@gmail.com>
3922
3923         * attribute.cs: Don't mix old and new corlib types when emitting corlib
3924         security attributes.
3925
3926 2008-05-24  Marek Safar  <marek.safar@gmail.com>
3927
3928         * ecore.cs, expression.cs: Small IVariable refactoring.
3929
3930 2008-05-22  Marek Safar  <marek.safar@gmail.com>
3931
3932         * assign.cs (LocalTemporary): Implemented CreateExpressionTree.
3933
3934 2008-05-21  Marek Safar  <marek.safar@gmail.com>
3935
3936         * cs-parser.jay: Removed redundant catch type check.
3937
3938 2008-05-21  Marek Safar  <marek.safar@gmail.com>
3939
3940         A fix for bug #390372
3941         * nullable.cs: Set correct return type.
3942
3943 2008-05-21  Marek Safar  <marek.safar@gmail.com>
3944
3945         A fix for bug #391062
3946         * typemanager.cs: Fixed crash when comparing null types.
3947
3948 2008-05-21  Marek Safar  <marek.safar@gmail.com>
3949
3950         A fix for bug #391871
3951         * cs-parser.jay: Better error handling for invalid catch type.
3952
3953 2008-05-20  Marek Safar  <marek.safar@gmail.com>
3954
3955         A fix for bug #392155
3956         * cs-tokenizer.cs: Fixed casting of byte and decimal expression.
3957
3958 2008-05-15  Marek Safar  <marek.safar@gmail.com>
3959
3960         A fix for bug #390666
3961         * ecore.cs (BetterExpressionConversion): Unwrap each Expression<T>
3962         expressions.
3963
3964 2008-05-15  Marek Safar  <marek.safar@gmail.com>
3965
3966         * class.cs, expression.cs, statement.cs: Removed a hack, setting block flag
3967         in getter.
3968
3969 2008-05-13  Marek Safar  <marek.safar@gmail.com>
3970
3971         A fix for bug #389625
3972         * delegate.cs, generic.cs: Some progress on method group return type
3973         inference.
3974
3975 2008-05-13  Marek Safar  <marek.safar@gmail.com>
3976
3977         A fix for bug #378419
3978         * namespace.cs: Inspect also parent namespaces not only namespace entries.
3979
3980 2008-05-12  Marek Safar  <marek.safar@gmail.com>
3981
3982         * class.cs (Constructor): Added IsCompilerGenerated.
3983
3984 2008-05-12  Marek Safar  <marek.safar@gmail.com>
3985
3986         * expression.cs: Enum binary operators can accept non-enum operand only when
3987         is implicitly convertible to underlying type.
3988
3989 2008-05-12  Marek Safar  <marek.safar@gmail.com>
3990
3991         A fix for bug #389272
3992         * support.cs: Workaround System.InvalidOperationException for enums.
3993
3994 2008-05-12  Marek Safar  <marek.safar@gmail.com>
3995
3996         A fix for bug #389073
3997         * convert.cs: More undocumented explicit IntPtr/UIntPtr conversions.
3998
3999 2008-05-10  Marek Safar  <marek.safar@gmail.com>
4000
4001         * driver.cs: Split Parse.
4002         
4003         * location.cs (LookupFile): Uses string.Empty.
4004
4005 2008-05-07  Marek Safar  <marek.safar@gmail.com>
4006
4007         * expression.cs, parameter.cs: Small ParameterReference clean up.
4008
4009 2008-05-07  Marek Safar  <marek.safar@gmail.com>
4010
4011         * anonymous.cs, codegen.cs, convert.cs, ecore.cs: Removed uber ugly TempEc
4012         hack. Fixes #387502.
4013
4014 2008-05-06  Martin Baulig  <martin@ximian.com>
4015
4016         * class.cs (Constructor.Emit): Fix the logic whether to emit
4017         symbol information.
4018
4019 2008-05-06  Raja R Harinath  <harinath@hurrynot.org>
4020
4021         Fix #385503
4022         * iterators.cs (Iterator.CurrentBlock.DoEmit): Don't emit
4023         InvalidOperationException when the iterator is before the start or
4024         after the end.
4025
4026 2008-05-06  Marek Safar  <marek.safar@gmail.com>
4027
4028         * nullable.cs (NullCoalescingOperator): Result is underlying type of left,
4029         when left is nullable type.
4030
4031 2008-05-06  Marek Safar  <marek.safar@gmail.com>
4032
4033         A fix for bug #386628
4034         * expression.cs (LocalVariableReference): Continue in resolving when
4035         variable is not assigned.
4036
4037 2008-05-05  Marek Safar  <marek.safar@gmail.com>
4038
4039         * nullable.cs, statement.cs (Unwrap): Store non-variable expression in all
4040         nullable operations.
4041
4042 2008-05-04  Marek Safar  <marek.safar@gmail.com>
4043
4044         * nullable.cs, statement.cs (Unwrap): Don't duplicate variable expressions,
4045         it saves many redundant temporary variables for nullable operations.
4046
4047 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4048
4049         * assign.cs: EventAddOrRemove is a statement and cannot have a type.
4050         
4051         * cfold.cs, constant.cs, expression.cs: Share Error_OperatorCannotBeApplied
4052         method.
4053         
4054         * nullable.cs: Constant coalescing operator optimizations.
4055
4056 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4057
4058         * constant.cs: Use unsigned conversion for values which are unsigned only.
4059
4060 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4061
4062         * convert.cs, literal.cs, nullabel.cs, typemanager.cs: Implemeted null 
4063         coalescing operator as it should be.
4064
4065 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4066
4067         A fix for bug #371016
4068         * expression.cs: All predefined delegate operators require implicit method
4069         group conversion.
4070         
4071 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4072
4073         * constant.cs: Emit long constant as uint when fits the range.
4074         
4075         * convert.cs, expression.cs: Fixed few unsafe conversions.
4076
4077 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4078
4079         * convert.cs, literal.cs: Don't wrap implicit reference conversion to object
4080
4081 2008-05-02  Raja R Harinath  <harinath@hurrynot.org>
4082
4083         Fix #385758
4084         * convert.cs (ImplicitNumericConversion): Don't modify the type of
4085         'expr'.
4086         * ecore.cs (EmptyCast.Create): Flatten nested EmptyCasts.
4087
4088 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4089
4090         * constant.cs, literal.cs: IsLiteral property for error reporting.
4091         
4092         * ecore.cs, expression.cs: Implemented Property expression.
4093
4094 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4095
4096         * class.cs, modifiers.cs, flowanalysis.cs: New BACKING_FIELD flag.
4097         
4098         * nullable.cs: Implemented nullable coalescing null operator.
4099
4100         * ecore.cs, expression.cs: Expression trees work.
4101
4102 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4103
4104         * ecore.cs: CreateExpressionTree is finally abstract.
4105
4106         * expression.cs, linq.cs: Updated.
4107
4108 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4109
4110         * expression.cs, ecore.cs: Block base access expression inside expression
4111         tree.
4112
4113 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4114
4115         A fix for bug #385058
4116         * expression.cs: User-defined operator implementations always take
4117         precedence over predefined operator implementations.
4118
4119 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4120
4121         * assign.cs, anonymous.cs, lambda.cs, nullable.cs, ecore.cs, linq.cs,
4122         class.cs, iterators.cs, expression.cs, attribute.cs: Filled a few more
4123         expression tree conversions.
4124         
4125 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4126
4127         * typemanager.cs, ecore.cs, class.cs, expression.cs, doc.cs: Merged all
4128         operators method details to Operator class.
4129
4130 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4131
4132         * anonymous.cs: Pass unsafe flags to anonymous container.
4133         
4134         * ecore.cs, expression.cs, statement.cs: Block unsafe pointer operations
4135         inside expression tree.
4136
4137 2008-04-29  Martin Baulig  <martin@ximian.com>
4138
4139         * cs-tokenizer.cs (Tokenizer.Position): Added `line'.
4140         (Tokenizer.PopPosition): Also restore the `line'.
4141
4142 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4143
4144         * delegate.cs: Implemented Invoke expression.
4145
4146 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4147
4148         * expression.cs: Fixed equality reference comparison regression.
4149
4150 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4151
4152         * ecore.cs: Clean up EmptyCast hack.
4153         
4154         * expression.cs, nullable.cs: Implemented enum binary and unary operations
4155         using correct conversion rules. Also fixes #383993.
4156
4157 2008-04-28  Martin Baulig  <martin@ximian.com>
4158
4159         * class.cs (Constructor.Emit): Don't emit debugging information
4160         for generated default .ctor's.
4161
4162 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4163
4164         * convert.cs: Empty-cast ushort to int conversion.
4165
4166 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4167
4168         A fix for bug #384191
4169         * ecore.cs, expression.cs: Fixed expression cloning.
4170
4171 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4172
4173         * ecore.cs, delegate.cs, assign.cs: Few tweaks for recent changes.
4174
4175 2008-04-28  Raja R Harinath  <harinath@hurrynot.org>
4176
4177         Fix #381559, test-638.cs, test-639.cs
4178         * assign.cs (CompoundAssign.Helper): New wrapper.
4179         (CompoundAssign.DoResolve): Use it to wrap the nested 'target'
4180         access.
4181         * ecore.cs (MethodGroupExpr.VerifyArgumentsCompat) <params arguments>:
4182         Pass unconverted expressions to the params array creation expression.
4183         (FieldExpr.EmitAssign): Don't special-case StringConcat.
4184         (PropertyExpr.EmitAssign): Likewise.
4185         * expression.cs (ArrayCreation.ResolveArrayElement): Keep track of the
4186         element if it is of kind CompoundAssign.Helper.
4187         (ArrayCreation.Emit): If we saw a CompoundAssign.Helper, emit it
4188         first before anything else.
4189         (ArrayAccess.EmitAssign): Don't special-case StringConcat.
4190         (ArrayAccess.LoadArrayAndArguments): Simplify.
4191
4192 2008-04-27  Marek Safar  <marek.safar@gmail.com>
4193
4194         * expression.cs: Fixed cloning of typeof(void).
4195
4196 2008-04-27  Raja R Harinath  <harinath@hurrynot.org>
4197
4198         * assign.cs (Assign.DoResolve): Remove support for EventExprs.
4199         (Assign.Emit): Likewise.  Move it to ...
4200         (CompoundAssign.DoResolve): ... here and ...
4201         (CompoundAssign.Emit): ... here.
4202         (EventAddOrRemove): New helper to handle += and -= on events, and
4203         avoid the use of BinaryDelegates.
4204         * ecore.cs (EventExpr.DoResolveLValue): Emit CS0070 unconditionally.
4205         (EventExpr.EmitAddOrRemove): Improve.
4206         * delegate.cs (DelegateInvocation.DoResolve): Simplify slightly.
4207
4208         * cs-parser.jay (type) <namespace_or_type_name variant>: Don't
4209         create VarExprs for 'foo.bar.var'.
4210         * ecore.cs (VarExpr.InferType): Rename from DoResolveLValue, which
4211         is a highly inappropriate name for its functionality.
4212
4213 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
4214
4215         Simplify handling of multiple assignments
4216         * assign.cs (Assign): Clear out all 'embedded assign' gunk.  Make
4217         inheritable-only.
4218         (SimpleAssign): New.  Class to be used for normal assignments.
4219         * anonymous.cs, class.cs, cs-parser.jay: Update to changes.
4220         * expression.cs, parameter.cs, statement.cs: Likewise.
4221
4222 2008-04-25  Marek Safar  <marek.safar@gmail.com>
4223
4224         * ecore.cs, expression.cs, nullable.cs: Implemeted enum binary add operation
4225         for incompatible underlying types, more to come, uff.
4226
4227 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
4228
4229         Fix gtest-388.cs
4230         * expression.cs (VariableReference.EmitAssign) <source is NewInstance>:
4231         Handle 'leave_copy'.
4232
4233 2008-04-25  Marek Safar  <marek.safar@gmail.com>
4234
4235         * expression.cs, nullable.cs: Implemented UnaryPlus expression.
4236
4237 2008-04-24  Raja R Harinath  <harinath@hurrynot.org>
4238
4239         Fix test-636.cs.  Sprinkle a few more 'EmitSideEffect's around
4240         * expression.cs (Unary.TryReduceConstant): Unwrap SideEffectConstant.
4241         * statement.cs (While, Do, For): Allow test to have side effects.
4242         (For.DoEmit): Always emit InitStatement.
4243
4244         Fix test-635.cs
4245         * expression.cs (Binary.DoResolve) <BitwiseAnd with zero constant>:
4246         Always create SideEffectConstant.
4247         (Binary.EnumLiftUp): Don't assume that the enumeration constant is
4248         of type EnumConstant.
4249
4250         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
4251         Handle 'right' being SideEffectConstant of type 'bool'.
4252
4253         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
4254         Use left.EmitBranchable instead of open coding it, so as to
4255         improve optimization opportunities.
4256
4257         * constant.cs (SideEffectConstant.EmitSideEffect): Simplify slightly.
4258
4259         * ecore.cs (Expression.EmitBranchable): Document some non-obvious
4260         assumptions.
4261         (Expression.EmitSideEffect): Document.
4262
4263 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4264
4265         * expression.cs: Implemented NewArrayBounds, TypeIs, and TypeAs expressions.
4266
4267 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4268
4269         * constant.cs, statement.cs: Use EmitSideEffect for constant if statement.
4270
4271 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4272
4273         * ecore.cs, expression.cs, delegate.cs: Implemeted delegate instantiation
4274         conversion to expression tree.
4275
4276 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4277
4278         * ecore.cs: Removed unused expression.
4279
4280 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4281
4282         * expression.cs: Implemented NegateChecked and New expressions.
4283
4284 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4285
4286         * convert.cs, nullable.cs, expression.cs: Implemented Negate expression.
4287
4288 2008-04-22  Raja R Harinath  <harinath@hurrynot.org>
4289
4290         Fix #351102
4291         * anonymous.cs (AnonymousMethodExpression.DoResolve): Mark as
4292         needing final 'ret' instruction.
4293
4294 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4295
4296         * expression.cs: Disabled lifted binary conversion on ISO-1 profiles.
4297
4298 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4299
4300         * expression.cs: Emit ldnull and not null expression as an instance argument
4301          of static method expression calls.
4302
4303 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4304
4305         A fix for bug #378200
4306         * expression.cs: Fixed crash when creating parameterless expression tree
4307         method call.
4308
4309 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4310
4311         A fix for bug #375297
4312         * anonymous.cs: Fixed crash when inferring from null argument anonymous
4313         method.
4314
4315 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4316
4317         A fix for bug #377596
4318         * decl.cs, class.cs: Emit delegate type argument attributes.
4319
4320 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4321
4322         A fix for bug #365314
4323         * generic.cs, ecore.cs: Type parameter declaration cannot be of generic type
4324         
4325 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4326
4327         * cs-parser.jay, expression.cs: ComposedCast can work with type expressions
4328         only.
4329
4330 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4331
4332         * generic.cs (TypeParameter): Removed redundant location.
4333
4334 2008-04-19  Marek Safar  <marek.safar@gmail.com>
4335
4336         * generic.cs, parameter.cs, namespace.cs, ecore.cs, class.cs, decl.cs,
4337         delegate.cs, iterators.cs, cs-parser.jay, const.cs, enum.cs: Use
4338         FullNamedExpression in all declaration type expression, statements will come
4339         later.
4340
4341 2008-04-18  Marek Safar  <marek.safar@gmail.com>
4342
4343         * generic.cs, namespace.cs, ecore.cs, class.cs, decl.cs, generic-mcs.cs,
4344         nullable.cs, expression.cs, enum.cs, doc.cs: Cleaning up type expressions.
4345
4346 2008-04-18  Marek Safar  <marek.safar@gmail.com>
4347
4348         * parameter.cs, delegate.cs, cs-parser.jay, expression.cs: Removed unused
4349         code.
4350
4351 2008-04-17  Marek Safar  <marek.safar@gmail.com>
4352
4353         * decl.cs, class.cs, generic.cs: Verify partial parts type parameters and
4354         constraints.
4355
4356 2008-04-17  Marek Safar  <marek.safar@gmail.com>
4357
4358         * decl.cs, class.cs, cs-parser.jay, ecore.cs, expression.cs: Unify all type
4359         name expressions.
4360         Also fixes #340463.
4361
4362 2008-04-17  Raja R Harinath  <harinath@hurrynot.org>
4363
4364         Hook up 'EmitSideEffect'
4365         * constant.cs (Constant.EmitSideEffect): New.
4366         (SideEffectConstant.Emit): Simplify.  Use EmitSideEffect.
4367         (SideEffectConstant.EmitSideEffect): New.
4368         * ecore.cs (BoxedCast.EmitBranchable): Remove.  We can't use an
4369         unconditional branch in EmitBranchable.
4370         (FieldExpr.EmitBranchable): New.
4371         * expression.cs (Unary.EmitSideEffect): New.
4372         (Binary.EmitSideEffect): New.
4373         (VariableReference.EmitSideEffect): New.  Do nothing.
4374
4375 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
4376
4377         Introduce 'EmitSideEffect'
4378         * ecore.cs (Expression.EmitSideEffect): New.
4379         (TypeCast): Rename from EmptyCast.
4380         (EmptyCast): New.
4381         (EmptyCast.EmitBranchable, EmptyCast.EmitSideEffect): Implement.
4382         (BoxedCast.EmitBranchable, BoxedCast.EmitSideEffect): Implement.
4383         * convert.cs, nullable.cs: Update to changes.
4384
4385 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4386
4387         * class.cs, cs-parser.jay: Early check for base types expression.
4388
4389 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4390
4391         * decl.cs (MemberName): Declare PrettyName as obsolete.
4392
4393 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4394
4395         * namespace.cs: Use MemberName comparison.
4396
4397 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
4398
4399         Fix build break
4400         * decl.cs (MemberName.PrettyName): New.  Replaces the misnamed
4401         FullName.
4402         (MemberName.MethodName, MemberName.GetSignatureForError): Improve.
4403         (MemberName.FullyQualifiedName): New.  Provides the functionality
4404         that users assume FullName would have.
4405         * ecore.cs, namespace.cs: Update to changes.
4406
4407         * statement.cs (Using.assign): Make into ExpressionStatement.
4408         (Using.EmitPreTryBody): Simplify.
4409
4410 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4411
4412         * report.cs: ColorFormat is protected.
4413         
4414         * rootcontext.cs: Unused fields clean-up.
4415         
4416         * namespace.cs: Made UsingEntry name private.
4417
4418 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4419
4420         * cs-tokenizer.cs, location.cs: Removed unused field.
4421
4422 2008-04-16  Jan Oravec <jan.oravec@6com.sk>
4423             Raja R Harinath  <harinath@hurrynot.org>
4424
4425         Fix #379822
4426         * constant.cs (SideEffectConstant.value): Rename from 'left'.
4427         (SideEffectConstant.side_effect): Rename from 'right'.
4428         (SideEffectConstant..ctor): Normalize 'side_effect'.
4429         (SideEffectConstant.Emit): Emit 'value', not 'side_effect' as the
4430         value of this constant.
4431         * cfold.cs: Update to changes.
4432
4433 2008-04-15  Marek Safar  <marek.safar@gmail.com>
4434
4435         * cs-paser.jay: Removed unused variable.
4436         
4437         * driver.cs: Made Compile instance method.
4438
4439 2008-04-15  Raja R Harinath  <harinath@hurrynot.org>
4440
4441         * flowanalysis.cs (FlowBranching.MergeChild): Simplify.
4442
4443 2008-04-15  Marek Safar  <marek.safar@gmail.com>
4444
4445         * cs-paser.jay, namespace.cs: Simplified handling of namespace imports. 
4446
4447 2008-04-13  Jb Evain  <jbevain@novell.com>
4448
4449         * namespace.cs: update the System.Core fullname for 2.1
4450         * driver.cs: update the list of required assemblies for 2.1.
4451         Merged from the Moonlight 2 branch.
4452
4453 2008-04-11  Marek Safar  <marek.safar@gmail.com>
4454
4455         * assign.cs, ecore.cs, expression.cs, nullable.cs: More work on nullable
4456         types and user defined operators. User operators arguments has to be checked
4457         for null value before invocation, which also means no operator is called
4458         when any argument is not convertible to unwrapped nullable type.
4459         
4460 2008-04-09  Marek Safar  <marek.safar@gmail.com>
4461
4462         * convert.cs, ecore.cs, expression.cs, nullable.cs: Initial refactoring
4463         of Unary expressions to follow operator overloading rules precisely.
4464         Also fixes #321794, #323794
4465         
4466 2008-04-08  Marek Safar  <marek.safar@gmail.com>
4467
4468         * cs-parser.jay, expression.cs: Don't wrap Indirection expression in Unary
4469         expression.
4470         
4471 2008-04-08  Marek Safar  <marek.safar@gmail.com>
4472
4473         * expression.cs, ecore.cs: Implemented MemberInit expression.
4474         
4475 2008-04-08  Raja R Harinath  <harinath@hurrynot.org>
4476
4477         Fix mono/tests/exception4.cs
4478         * statement.cs (ExceptionStatement, TryCatch): Revert to using
4479         ec.NeedReturnLabel () rather emitting a 'nop'.
4480
4481         * statement.cs (ExceptionStatement.SomeCodeFollows): A hook for a
4482         simple heuristic.
4483         (TryCatch.SomeCodeFollows): Likewise.
4484         * flowanalysis.cs (FlowBranchingException): Call 'SomeCodeFollows'
4485         for 'break', 'continue' and 'return' statements inside a try.
4486         We're fairly sure that the generated IL stream will have more
4487         instructions textually following the try.
4488         (FlowBranchingTryCatch): Likewise.
4489
4490         * statement.cs (Throw.Resolve): Move CS0156 and CS0724 testing ...
4491         * flowanalysis.cs (FlowBranching.CheckRethrow): ... here and to its
4492         overrides.
4493
4494         * statement.cs (CollectionForeach.DisposableWrapper): Make a true
4495         wrapper -- forward everything to CollectionForeach.
4496         (CollectionForeach.NonDisposableWrapper): New.
4497         (CollectionForeach.EmitFinallyBody): Use 'endfinally' instruction
4498         instead of a pop + branch to end.
4499
4500 2008-04-07  Marek Safar  <marek.safar@gmail.com>
4501
4502         A fix for bug #377485
4503         * assign.cs, expression.cs, decl.cs, class.cs, ecore.cs, namespace.cs: 
4504         Propagate location for extension method groups. Report conversion failure at
4505         right place.
4506
4507 2008-04-07  Marek Safar  <marek.safar@gmail.com>
4508
4509         * anonymous.cs, expression.cs, ecore.cs, typemanager.cs: Implemented
4510         ListInit and Field expressions.
4511
4512 2008-04-06  Raja R Harinath  <harinath@hurrynot.org>
4513
4514         * iterators.cs (Iterator.EmitMoveNext): Remove try/fault wrapper.
4515         Since $PC is always -1 inside the body of MoveNext, the fault
4516         handler is a no-op.
4517         * flowanalysis.cs (FlowBranchingException.EmitFinally): Kill.
4518         * statement.cs (ExceptionStatement.emit_finally): Likewise.
4519         (ExceptionStatement.ResolveFinally): Drop 'branching' argument.
4520
4521         The denouement!  Fix #324708
4522         * iterators.cs (Iterator.EmitMoveNext): Reset $PC to -1 on entry.
4523         (Iterator.EmitYieldBreak): We no longer need to reset $PC.
4524         * statement.cs (ExceptionStatement.DoEmit): Actually emit the
4525         'finally' inside the finally clause.
4526
4527         * statement.cs (ExceptionStatement.DoEmit): Emit try/finally block
4528         inside an iterator.  Don't emit the body of the 'finally' inside
4529         the finally clause yet.
4530
4531         Use the ResumableStatement infrastructure for MoveNext ()
4532         * iterators.cs (Iterator.EmitMoveNext_NoResumePoints): New.
4533         (Iterator.EmitMoveNext): Use 'resume_points'.  Get rid of
4534         'old_resume_points'.  Move dispatcher upfront.
4535         (Iterator.MarkYield): Mark the 'resume_point' of a Yield.
4536         * statement.cs (ExceptionStatement.DoEmit): Emit a dispatcher if
4537         in an enumerator.  This encodes the main fix in this patch series
4538         -- we can only jump into the first instruction of a try from the
4539         outside, but we want to emit try/finally regions in iterators and
4540         resume in the middle of them.
4541
4542 2008-04-05  Raja R Harinath  <harinath@hurrynot.org>
4543
4544         * statement.cs (ExceptionStatement.ResolveFinally): Move setting
4545         of NeedReturnLabel here.
4546
4547         Introduce a common point for emitting try/finally to IL
4548         * statement.cs (ExceptionStatement.DoEmit): New.  Combines all the
4549         features of the various subclasses, which are now driven by ...
4550         (ExceptionStatement.EmitPreTryBody): ... this and ...
4551         (ExceptionStatement.EmitTryBody): ... this and the original
4552         EmitFinallyBody.
4553         (TryFinally, Lock, Using, UsingTemporary, DisposableWrapper):
4554         Remove DoEmit and update to follow above protocol.
4555
4556         * statement.cs (ExceptionStatement.EmitForDispose): If all labels
4557         of the dispatcher are the same, skip emitting the 'switch'.
4558         * iterator.cs (Iterator.EmitDispose): Update to changes.
4559
4560         Clean up handling of 'using' statement
4561         * statement.cs (UsingTemporary): New.  Carved out of ...
4562         (Using): ... this.  Simplify drastically.  Handle exactly
4563         one variable.
4564         * cs-parser.jay (using_statement): Split.  Create UsingTemporary
4565         or Using as appropriate.  If there are multiple variable declared,
4566         create nested Using statements.
4567         (resource_acquisition): Kill.
4568
4569         * statement.cs (ExceptionStatement.EmitForDispose): Use
4570         EmitFinallyBody, not EmitFinally.
4571
4572         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Remove.
4573         * iterator.cs: Update to changes.
4574
4575         Start using the ResumableStatement infrastructure
4576         * statement.cs (ResumeableStatement.PrepareForDispose): New.
4577         (ResumableStatement.EmitForDispose): New.
4578         (ExceptionStatement): Override them.
4579         * iterators.cs (Iterator.EmitDispose): Use PrepareForDispose and
4580         EmitForDispose to create the body of the Dispose method.  Don't
4581         use OldResumePoint.
4582
4583         * iterator.cs (Iterator.AddResumePoint): Move here from ...
4584         * statement.cs (Toplevel.AddResumePoint): ... here.
4585         (Toplevel.MoveNextStatement.Resolve): Create FlowBranchingIterator.
4586         * flowanalysis.cs (FlowBranchingIterator): New.
4587         * codegen.cs (EmitContext): Update to changes.
4588
4589         * iterators.cs (Iterator.OldResumePoint): Rename from ResumePoint.
4590         (Iterator.old_resume_points): Rename from 'resume_points'.
4591         (Iterator.MoveNextStatement): Remove unused class.
4592
4593         New infrastructure for try/finally in iterators (still unused)
4594         * flowanalysis.cs (FlowBranching.AddResumePoint): New.
4595         (FlowBranchingToplevel.AddResumePoint): Hook into
4596         ToplevelBlock.AddResumePoint.
4597         (FlowBranchingTryCatch): Move CS01626 and CS01631 checks here.
4598         (FlowBranchingException): Hook into ExceptionBlock.AddResumePoint.
4599         * statement.cs (ToplevelBlock.AddResumePoint): New.  Collect
4600         resume points and assign program-counter values.
4601         (ExceptionBlock.AddResumePoint): Collect resume points for
4602         de-muxer at the top of try block.
4603         * iterators.cs (Yield.CheckContext): Simplify.
4604         (Yield.Resolve): Use FlowBranching.AddResumePoint.
4605
4606 2008-04-04  Raja R Harinath  <harinath@hurrynot.org>
4607
4608         * flowanalysis.cs (FlowBranching.AddReturnOrigin): Change Location
4609         argument to an ExitStatement.
4610         (FlowBranchingException): Refactor saved origins code.
4611         * statement.cs (ExitStatement): Update to cahges.
4612         * iterator.cs (YieldBreak): Likewise.
4613
4614         * statement.cs (ResumableStatement): New.  Common base class for
4615         YieldReturn and ExceptionStatement.
4616         (ExitStatement): New.  Common base class for Return and YieldBreak.
4617         (Return): Update to changes.
4618         * iterator.cs (YieldBreak): Likewise.
4619         * lambda.cs (ContextualReturn): Likewise.
4620
4621         Fix #377028
4622         * ecore.cs (Expression.ResolveAsTypeStep): If '!silent' attempt to
4623         emit a meaningful error message.
4624
4625         Fix #324765, #319508
4626         * flowanalysis.cs (VariableInfo.IsEverAssigned): New.
4627         (VariableInfo.SetAssigned): Set it.
4628         * statement.cs (Block.UsageWarning): Use 'IsEverAssigned' to
4629         determine if CS0219 or CS0168 is appropriate.  Don't use
4630         flow-analysis information.
4631         (Block.Resolve): Use ec.EndFlowBranching, not ec.DoEndFlowBranching.
4632         * codegen.cs (EmitContext.DoEndFlowBranching): Kill.  Inline into ...
4633         (EmitContext.EndFlowBranching): ... this.
4634
4635 2008-04-03  Marek Safar  <marek.safar@gmail.com>
4636
4637         * class.cs, typemanager.cs: Emit volatile field with IsVolatile modifier.
4638
4639 2008-04-03  Marek Safar  <marek.safar@gmail.com>
4640
4641         A fix for bug #376508
4642         * convert.cs, expression.cs: Fixed difference between ImplicitConversion and
4643         ImplicitConversionExists.
4644
4645 2008-04-03  Marek Safar  <marek.safar@gmail.com>
4646
4647         * expression.cs (Binary): Added remaining binary operators to expression
4648         tree builder.
4649
4650         * nullable.cs: Optimize shift with null argument.
4651
4652 2008-04-03  Raja R Harinath  <harinath@hurrynot.org>
4653
4654         Fix minor IL regression
4655         * statement.cs (TryCatch..ctor): Add 'inside_try_finally' argument.
4656         (TryCatch.DoEmit): Use it to avoid creating another ExceptionBlock.
4657         * cs-parser.jay (try_statement): Update to changes.
4658
4659         * statement.cs (TryFinally.need_exc_block): Delete.
4660         (TryFinally): Update to changes.
4661
4662         Now all ExceptionStatements are unconditional
4663         * statement.cs (CollectionForeach.DisposableWrapper): New.
4664         Extract out the try/finally code into a new wrapper.
4665         (CollectionForeach.Resolve): Use it to simplify the code.
4666
4667 2008-04-02  Raja R Harinath  <harinath@hurrynot.org>
4668
4669         Start at simplifying ExceptionStatement semantics a bit
4670         * statement.cs (TryCatch, TryFinally): Split 'Try' into two pieces.
4671         * cs-parser.jay (try_statement): Update to changes.
4672         (opt_catch_clauses): Remove.
4673         * flowanalysis.cs: Update to changes.
4674         (FlowBranching.BranchingType.TryCatch): New.
4675         (FlowBranchingTryCatch): New.
4676
4677         * flowanalysis.cs (FlowBranching.BranchingType.SwitchSection): Kill.
4678         (FlowBranching.CreateBranching): Update to changes.
4679         (FlowBranchingBlock.AddSibling): Add sanity check.
4680         * codegen.cs (EmitContext.StartFlowBranching) <Block variant>:
4681         Update to changes.
4682
4683         * iterators.cs (Iterator.MarkFinally): Remove.
4684         * statement.cs (ExceptionStatement): Update to changes.
4685
4686         Add support for skipping over finally blocks at runtime.  First
4687         in a series to fix #324708
4688         * iterators.cs (Iterator.SkipFinally): New LocalBuilder.
4689         (Iterator.EmitMoveNext): Initialize it.
4690         * statement.cs (ExceptionStatement.EmitFinally): Use it to emit a
4691         branch over the body of the 'finally' clause.
4692
4693 2008-03-31  Raja R Harinath  <harinath@hurrynot.org>
4694
4695         Avoid lopsided use of Foo/DoFoo names
4696         * statement.cs (ExpressionStatement.EmitFinallyBody):
4697         Rename from EmitFinally.
4698         (ExpressionStatement.EmitFinally): Rename from DoEmitFinally.
4699         * iterator.cs: Update to changes.
4700
4701 2008-04-02  Marek Safar  <marek.safar@gmail.com>
4702
4703         * ecore.cs, expression.cs, nullable.cs: ConditionalLogicalOperator is now
4704         based on UserOperatorCall. More binary nullable operators clean up.
4705
4706 2008-04-02  Martin Baulig  <martin@ximian.com>
4707
4708         * symbolwriter.cs: Remove the `#if !DISABLE_TERRANIA_CHANGES' conditionals.
4709
4710 2008-04-02  Marek Safar  <marek.safar@gmail.com>
4711
4712         * nullable.cs: Merge user and empty conversions when lifting expression
4713         trees.
4714         
4715         * expression.cs (StringConcat): Implemented expression tree representation.
4716
4717 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4718
4719         * nullable.cs: When lifting null literal and a user operator exists, no call 
4720         is made.
4721         
4722 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4723
4724         * nullable.cs, ecore.cs, expression.cs: Convert null arithmetic to lifted
4725         null.
4726
4727 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4728
4729         * nullable.cs, expression.cs: Use namespace instead heavily nested
4730         monster abstract class.
4731
4732 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4733
4734         * ecore.cs, convert.cs, constant.cs, nullable.cs, expression.cs: Implemented
4735         lifting of null literal and user operators. Clean up of some temporary
4736         nullable hacks.
4737
4738 2008-03-30  Raja R Harinath  <harinath@hurrynot.org>
4739
4740         Fix #368224, test-629.cs
4741         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Return true
4742         if it crossed an unwind-protect boundary.
4743         * iterators.cs (Yield.CheckContext): Relax check for 'yield break'.
4744         (Yield.Resolve, Yield.DoEmit): Track whether the yield occurs
4745         inside an unwind-protected region.
4746         (YieldBreak.Resolve, YieldBreak.DoEmit): Likewise.
4747         (Iterator.MarkYield): Add 'unwind_protect' parameter.  Emit a
4748         'leave' instead of a 'br' if unwind-protected.
4749         (Iterator.EmitYieldBreak): Likewise.
4750
4751 2008-03-29  Gert Driesen  <drieseng@users.sourceforge.net>
4752
4753         * driver.cs: Only define versioninfo resources if no win32 resource
4754         file was specified.
4755
4756 2008-03-28  Marek Safar  <marek.safar@gmail.com>
4757
4758         A fix for bug #372375
4759         * convert.cs: Fixed boxing of nullable types.
4760
4761 2008-03-28  Marek Safar  <marek.safar@gmail.com>
4762
4763         * typemanager.cs: Initialize InternalsVisibleTo as the very first optional
4764         type.
4765
4766 2008-03-28  Marek Safar  <marek.safar@gmail.com>
4767
4768         A fix for bug #374619
4769         * nullable.cs: Fixed guarding of EmitBitwiseBoolean.
4770         
4771 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4772
4773         * lambda.cs: Check return type only for invocation.
4774         
4775 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4776
4777         A fix for bug #374214
4778         * ecore.cs: Correctly report argument type mismatch.
4779
4780 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4781
4782         * convert.cs (ImplicitReferenceConversionCore): Correctly compare enum type
4783         and not rely on broken IsEnum.
4784
4785 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4786
4787         * nullable.cs: New file, extracted from generic.cs.
4788         
4789         * generic.cs, generic-mcs.cs, *.csproj, *.sources: Updated.
4790
4791 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4792
4793         * generic.cs, convert.cs, generic-mcs.cs, expression.cs: Added lifting of
4794         predefined comparison operators and null literals.
4795         
4796         * report.cs: New warning ID.
4797         
4798 2008-03-25  Marek Safar  <marek.safar@gmail.com>
4799
4800         A fix for bug #370577
4801         * lambda.cs: Check return type too.
4802
4803 2008-03-25  Marek Safar  <marek.safar@gmail.com>
4804
4805         A fix for bug #372846
4806         * class.cs: Automatic properties can be declared as unsafe.
4807
4808 2008-03-20  Marek Safar  <marek.safar@gmail.com>
4809
4810         * location.cs: Use string based concatenation.
4811         
4812         * expression.cs: LiftedBinaryOperator is gmcs only.
4813         
4814 2008-03-20  Marek Safar  <marek.safar@gmail.com>
4815
4816         * generic.cs, literal.cs, ecore.cs, expression.cs: Ongoing work on nullable
4817         conversions rules and expression trees.
4818
4819 2008-03-19  Marek Safar  <marek.safar@gmail.com>
4820
4821         * delegate.cs: Use extension method source as delegate target.
4822
4823 2008-03-19  Marek Safar  <marek.safar@gmail.com>
4824
4825         * generic.cs, generic-mcs.cs, expression.cs, ecore.cs: Rewrote nullable
4826         binary operations to be purely based on binary operations and optimized
4827         emitted code (30% less in some cases). Introduced ReducedExpression for ETs
4828         and other ET refactoring.
4829         
4830         * typemanager.cs: Fixed warning.
4831         
4832 2008-03-17  Marek Safar  <marek.safar@gmail.com>
4833
4834         * class.cs, decl.cs, delegate.cs: Do protected modifier check on each member
4835         
4836         * symbolwriter.cs: Fixed.
4837
4838 2008-03-17  Marek Safar  <marek.safar@gmail.com>
4839
4840         * anonymous.cs, driver.cs: Reset anonymous types counters.
4841
4842 2008-03-17  Marek Safar  <marek.safar@gmail.com>
4843
4844         * ecore.cs (MethodGroupExpr): Skip first candidate, it's already the best.
4845         
4846         * class.cs: Use fullname for all type member definitions.
4847         
4848 2008-02-19  Martin Baulig  <martin@ximian.com>
4849
4850         * class.cs
4851         (IMethodData.EmitExtraSymbolInfo): New interface method.
4852         (MethodData.Emit): Call method.EmitExtraSymbolInfo().
4853         (MethodOrOperator.EmitExtraSymbolInfo): Implement this new
4854         interface method here as an empty public virtual method.
4855
4856         * anonymous.cs
4857         (AnonymousMethodMethod.ctor): Added `string real_name' argument.
4858         (AnonymousMethodMethod.EmitExtraSymbolInfo): Override and call
4859         CodeGen.SymbolWriter.SetRealMethodName().       
4860
4861 2008-02-18  Martin Baulig  <martin@ximian.com>
4862
4863         * anonymous.cs
4864         (ScopeInfo.EmitType): Override this and emit debugging
4865         information for captured variables.
4866         (RootScopeInfo.EmitType): Override this and emit symbol
4867         information for a captured `this'.
4868
4869 2008-02-15  Martin Baulig  <martin@ximian.com>
4870
4871         * iterators.cs: Emit debugging info.
4872
4873         * codegen.cs
4874         (EmitContext.Flags): Add `OmitDebuggingInfo'.
4875         (EmitContext.OmitDebuggingInfo): New public property.
4876
4877         * statement.cs
4878         (While): Override Emit() and don't emit symbol info there; do it
4879         inside DoEmit() instead.
4880         (Block.Emit): Omit symbol information while emitting the scope
4881         initializers; don't ec.Mark() the `EndLocation'.  Fix the lexical
4882         block logic.
4883         (ExplicitBlock.IsIterator): Moved here from `ToplevelBlock'.
4884         (ToplevelBlock.MakeIterator): Pass the `flags' to `ExplicitBlock's
4885         .ctor to make `IsIterator' work.
4886
4887 2008-03-14  Martin Baulig  <martin@ximian.com>
4888
4889         * symbolwriter.cs: Added the new symbol writer function from the
4890         debugger's `terrania' branch; temporarily enclose them inside
4891         `#if !DISABLE_TERRANIA_CHANGES' conditionals until I'm back from
4892         my vacations.
4893
4894 2008-03-14  Martin Baulig  <martin@ximian.com>
4895
4896         * symbolwriter.cs
4897         (SymbolWriter): Make this a public static class.
4898
4899         * codegen.cs
4900         (CodeGen.SymbolWriter): Removed; use the new static `SymbolWriter'
4901         class instead of using `if (CodeGen.SymbolWriter != null)' everywhere.
4902
4903 2008-03-14  Marek Safar  <marek.safar@gmail.com>
4904
4905         A fix for bug #370577
4906         * statement.cs, lambda.cs: Added extra limitations when dealing with void
4907         return type.
4908         
4909 2008-03-14  Marek Safar  <marek.safar@gmail.com>
4910
4911         * typemanager.cs (CSharpName): Made 250 times faster.
4912
4913 2008-03-13  Marek Safar  <marek.safar@gmail.com>
4914
4915         * ecore.cs, expression.cs: Emit conversion for ET shift argument.
4916         
4917 2008-03-12  Marek Safar  <marek.safar@gmail.com>
4918
4919         * generic.cs, typemanager.cs, enum.cs, codegen.cs, statement.cs: Try not to
4920         crash when predefined field does not exist.
4921         
4922 2008-03-12  Marek Safar  <marek.safar@gmail.com>
4923
4924         * ecore.cs (PropertyExpr): Fixed IsSingleDimensionalArrayLength regression.
4925         
4926 2008-03-12  Marek Safar  <marek.safar@gmail.com>
4927
4928         * class.cs (FixedField): Don't crash when contructors are missing.
4929
4930 2008-03-11  Marek Safar  <marek.safar@gmail.com>
4931
4932         * typemanager.cs, namespace.cs, literal.cs, ecore.cs, class.cs, decl.cs,
4933         convert.cs, constant.cs, expression.cs, statement.cs: Use same method to
4934         check internal types accessibility for internal and external types.
4935         Replaced EnumToUnderlying by GetEnumUnderlyingType.
4936
4937 2008-03-11  Marek Safar  <marek.safar@gmail.com>
4938
4939         * support.cs, typemanager.cs, pending.cs, ecore.cs, class.cs, delegate.cs
4940         convert.cs, const.cs, anonymous.cs, constant.cs, expression.cs,
4941         attribute.cs, statement: Use corect instance of predefined types (work
4942         related to #364674).
4943
4944 2008-03-07  Marek Safar  <marek.safar@gmail.com>
4945
4946         * expression.cs (TypeOfVoid): Fixed predefined method initialization.
4947         
4948 2008-03-07  Marek Safar  <marek.safar@gmail.com>
4949
4950         * generic.cs, typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, 
4951         class.cs, delegate.cs, iterators.cs, const.cs, constant.cs, driver.cs,
4952         expression.cs, attribute.cs, codegen.cs, statement.cs: TypeManager optional
4953         predefined types clean up, delayed predefined types members initialization
4954         (work related to #364674).
4955
4956 2008-03-05  Marek Safar  <marek.safar@gmail.com>
4957
4958         * typemanager.cs (IsFriendAssembly): InternalsVisibleTo is not mandatory.
4959         
4960 2008-03-05  Marek Safar  <marek.safar@gmail.com>
4961
4962         * typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, class.cs, decl.cs,
4963         delegate.cs, convert.cs, driver.cs, attribute.cs, codegen.cs: TypeManager
4964         predefined types clean up (work related to #364674).
4965
4966 2008-03-04  Marek Safar  <marek.safar@gmail.com>
4967
4968         * ecore.cs: Print an error message instead of throwing exception.
4969         
4970 2008-03-04  Marek Safar  <marek.safar@gmail.com>
4971
4972         * generic.cs, typemanager.cs, literal.cs, convert.cs, cfold.cs, constant.cs,
4973         expression.cs, statement.cs: Unififed null literal representation.
4974
4975 2008-03-03  Marek Safar  <marek.safar@gmail.com>
4976
4977         * anonymous.cs, cfold.cs, convert.cs, delegate.cs, doc.cs, ecore.cs,
4978         expression.cs: Refactored binary operators resolve phase and improved speed.
4979         The nullable code is still missing and won't work correctly, more fixes
4980         required.
4981
4982         It also fixes #323726, #324312, #324248, and many other unreported issues.
4983
4984 2008-02-29  Zoltan Varga  <vargaz@gmail.com>
4985
4986         * report.cs (FeatureIsNotAvailable): Use 'mcs1' instead of 'mcs', and 'mcs' 
4987         instead of 'gmcs'.
4988
4989 2008-02-27  Marek Safar  <marek.safar@gmail.com>
4990
4991         * ecore.cs: Clean-up and split BetterConversion.
4992         
4993 2008-02-25  Raja R Harinath  <harinath@hurrynot.org>
4994
4995         Fix #363791
4996         * enum.cs (EnumMember.Value): Only access 'value' if
4997         ResolveValue says it's ok.
4998         (EnumMember.DoResolveValue): Don't set prev_member.value.
4999         (Enum.GetDefinition): Reverse arguments of Equals --
5000         EnumMember.Value can return 'null'.
5001
5002         * statement.cs (Switch.Error_AlreadyOccurs): Fix typo in name.
5003
5004 2008-02-22  Marek Safar  <marek.safar@gmail.com>
5005
5006         * generic.cs, expression.cs: More ongoing work on expression trees.
5007         
5008 2008-02-21  Marek Safar  <marek.safar@gmail.com>
5009
5010         * class.cs, typemanager.cs: Rewrote operator matching logic to correctly
5011         handle missing matches when mutiple operators exist.
5012         
5013 2008-02-20  Marek Safar  <marek.safar@gmail.com>
5014
5015         A fix for bug #363218
5016         * expression.cs (ArrayCreation.Clone): Deal with multi-dimensional
5017         initializers.
5018         
5019 2008-02-20  Marek Safar  <marek.safar@gmail.com>
5020
5021         * expression.cs, constant.cs, cfold.cs: Yet another side-effect constant
5022         update. This time to deal correctly with SideEffectConstant expression used
5023         as an argument for another constant folding.
5024
5025 2008-02-20  Raja R Harinath  <harinath@hurrynot.org>
5026
5027         * typemanager.cs (DropGenericMethodArguments): Ensure we get an underlying
5028         MethodBuilder.
5029
5030 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5031
5032         * constant.cs, cfold.cs: SideEffectConstant results can apply for folding.
5033
5034 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5035
5036         A fix for bug #328136
5037         * expression.cs: Do not fold immediately LogicalAnd operators when the left
5038         side is a false constant, because we still need to evaluate the right-hand
5039         side.
5040
5041         * statement.cs (If): Emit two types of boolean constants (simple constant,
5042         side-effect constant).
5043
5044 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5045
5046         * constant.cs (SideEffectConstant): Don't emit boolean constant.
5047
5048         * expression.cs: Fold immediately LogicalAnd operators when both sides are
5049         constants.
5050
5051 2008-02-18  Marek Safar  <marek.safar@gmail.com>
5052
5053         A fix for bug #361457
5054         * ecore.cs (IsApplicable): Params methods have lower priority.
5055
5056         * support.cs: Return correct parameter modifier for params types.
5057
5058 2008-02-18  Marek Safar  <marek.safar@gmail.com>
5059
5060         * generic.cs (TypeParameter): Cache attribute target name.
5061
5062         * support.cs: Removed unused variable.
5063
5064         * typemanager.cs: Removed debugging leftover.
5065
5066         * ecore.cs: Use local type instead of a property;
5067
5068         * class.cs (VerifyMembers): Consider also parent to test whether type member
5069         is local or public.
5070
5071         * expression.cs (FullMethodDesc): Removed.
5072
5073         * attribute.cs (IsValidArgumentType): Made static.
5074
5075 2008-02-17  Raja R Harinath  <harinath@hurrynot.org>
5076
5077         Cleanup to be more readable.
5078         * Makefile (GMCS_PROFILE): Remove.
5079         (COMPILER_NAME): New helper.
5080
5081 2008-02-15  Miguel de Icaza  <miguel@novell.com>
5082
5083         * cs-tokenizer.cs: if a conditional expression happens inside a
5084         (...) this also means that we do not need to de-ambiguate between
5085         an parenthesized expression and a cast.
5086
5087         Fixes 346484.
5088
5089         * constant.cs (SideEffectConstant): a constant value that happens
5090         to have a side effect.
5091
5092         Fixes the build regressions introduced by the fix for #359789
5093
5094 2008-02-14  Rodrigo Kumpera  <rkumpera@novell.com>
5095
5096         * expression.cs (Conditional.Emit): when emitting the ternary
5097         operator, use local variables to generate code verifiable code.
5098
5099         The verifier cannot infer that the type on stack before the
5100         stloc.0 is executed is of type ParentB. This happens because the
5101         stack merge algorithm uses only parent types when deciding which
5102         is the common type.  This is described in Part III 1.8.1.3 of ECMA
5103         335.
5104
5105         This code compiled with mcs is not verifiable under MS. The MS
5106         verifier picks the first common interface of Foo and Bar, which is
5107         wrong, but doesn't use a full join type of the 2 interfaces.
5108
5109         CSC uses a clever hack to compile such code in a verifiable
5110         way. It stores the intermediate values in a local variable with
5111         the expected type.
5112
5113         Fixes: #358102
5114
5115 2008-02-14  Miguel de Icaza  <miguel@novell.com>
5116
5117         * expression.cs: Do not fold BitwiseAnd operators when the left
5118         side is a false constant, because we still need to evaluate the
5119         right-hand side.
5120
5121         Fixes #359789
5122
5123         * support.cs: Instead of throwing an InternalErrorException when
5124         the position of the stream is outside the boundary of our buffer,
5125         reset the state of the reader, and restart the reading from the
5126         beginning of the file.
5127
5128 2008-02-14  Marek Safar  <marek.safar@gmail.com>
5129
5130         * generic.cs (TypeParameter.GetMembers): Is not supported operation.
5131
5132 2008-02-14  Marek Safar  <marek.safar@gmail.com>
5133
5134         A fix for bug #361686
5135         * decl.cs: A protected types used inside a private class which parents
5136         derives from the protected class are accessible.
5137
5138 2008-02-13  Marek Safar  <marek.safar@gmail.com>
5139
5140         * generic.cs (ConstraintChecker): Use cached member lookup when looking for
5141         the parameterless constructor.
5142
5143 2008-02-13  Marek Safar  <marek.safar@gmail.com>
5144
5145         * generic.cs, typemanager.cs, iterators.cs, codegen.cs: Refactored core
5146         lookup methods to use standard member cache when doing member lookup.
5147
5148 2008-02-12  Marek Safar  <marek.safar@gmail.com>
5149
5150         * driver.cs: Don't report full path for referenced module as assembly error.
5151
5152 2008-02-12  Marek Safar  <marek.safar@gmail.com>
5153
5154         * Makefile: Fixed `qh' target to work on all machines.
5155
5156         * report.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs, anonymous.cs,
5157         expression.cs, codegen.cs, statement.cs, doc.cs: Replaced type IsSubclassOf
5158         and HasElementType with TypeManager implementation.
5159
5160 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5161
5162         A fix for bugs #325134, #359749
5163         * expression.cs, ecore.cs: Try to resolve an extension method even if the
5164         first binds point to non-method member expression.
5165
5166 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5167
5168         * cs-parser.jay: Null coalescing operator is not part of ISO-1.
5169
5170 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5171
5172         A fix for bugs #321394, #323028
5173         * generic.cs, parameter.cs, ecore.cs, class.cs, decl.cs, delegate.cs:
5174         Reworked naive IsAccessibleAs implementation to handle nested types.
5175
5176 2008-02-05  Jb Evain  <jbevain@novell.com>
5177
5178         * class.cs: use generic type comparison for parameters
5179         as well.
5180
5181 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5182
5183         A fix for bug #325372
5184         * class.cs: Use generic type comparison when testing method signatures.
5185
5186 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5187
5188         A fix for bug #357047
5189         * ecore.cs: Applied C# 3.0 changes to better conversion.
5190
5191 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5192
5193         A fix for bug #358374
5194         * cs-parser.jay: Correctly set modifiers for all constructor types.
5195
5196 2008-02-04  Marek Safar  <marek.safar@gmail.com>
5197
5198         A fix for bug #355251
5199         * generic.cs: Added base class constraint based type inference.
5200
5201 2008-02-01  Marek Safar  <marek.safar@gmail.com>
5202
5203         A fix for bug #357255
5204         * decl.cs: One more missing visibility check.
5205
5206 2008-02-01  Marek Safar  <marek.safar@gmail.com>
5207
5208         * support.cs: Fixed broken return.
5209
5210 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5211
5212         * report.cs: Correctly reset warnings count after probing.
5213
5214 2008-01-25  Martin Baulig  <martin@ximian.com>
5215
5216         * namespace.cs
5217         (NamespaceEntry.SymbolFileID): Make this work again after
5218         MemberName.ToString() is gone.
5219
5220 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5221
5222         * expression.cs: Implemented Divide, Equal, ExclusiveOr, GreaterThanOrEqual
5223         expressions.
5224
5225 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5226
5227         * generic.cs: Use full implicit conversion for type inference fixing.
5228
5229 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5230
5231         * ecore.cs, expression.cs, generic.cs: Implemented Convert, ConvertChecked.
5232         Fixed user operator conversions.
5233
5234 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5235
5236         * generic.cs: Do nullable type to null comparison optimization during
5237         resolve phase.
5238
5239 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5240
5241         A fix for bug #355163
5242         * generic.cs: Enabled l-value resolve on nullable expressions.
5243
5244 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5245
5246         A fix for bug #353986
5247         * class.cs: Ingore static ctors with parameters for any further checks.
5248
5249 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5250
5251         A fix for bug #354310
5252         * namespace.cs: Removed redundant check.
5253
5254 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5255
5256         A fix for bug #354928
5257         * expression.cs: ElementInitializers can be resolved only once.
5258
5259 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5260
5261         * convert.cs, ecore.cs, expression.cs, generic.cs: Implemented Coalesce and
5262         Condition expressions.
5263
5264 2008-01-23  Marek Safar  <marek.safar@gmail.com>
5265
5266         * codegen.cs: Fixed AssemblyBuilder initialization on other platforms.
5267
5268 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5269
5270         * ecore.cs, expression.cs, generic.cs: Implicit bool? to bool conversion is
5271         not allowed.
5272
5273         * generic.cs: Implemented coalesce expression.
5274
5275 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5276
5277         A fix for bug #355145
5278         * anonymous.cs, convert.cs, ecore.cs, generic.cs, lambda.cs: Implemented
5279         expression tree type inference.
5280
5281 2008-01-22  Raja R Harinath  <harinath@hurrynot.org>
5282
5283         Fix #354663
5284         * expression.cs (Binary.IsUnsignedType): Fix typo.
5285
5286 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5287
5288         * ecore.cs, expression.cs, generic.cs: Implemented NewArrayInit expression.
5289
5290 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5291
5292         A fix for bug #355161
5293         * ecore.cs, expression.cs: Wider range of extension method supported
5294         expressions.
5295
5296 2008-01-22  Gert Driesen  <drieseng@users.sourceforge.net>
5297
5298         * codegen.cs: Use magic value for AssemblyBuilderAccess to instruct
5299         AssemblyBuilder to operate in compiler context. Fixes mcs part of
5300         bug #354970.
5301
5302 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5303
5304         A fix for bug #355148
5305         * ecore.cs, expression.cs: Correctly report misused ref and out modifiers.
5306
5307 2008-01-22  Miguel de Icaza  <miguel@novell.com>
5308
5309         * expression.cs (CreateExpressionTree): Add support for or and
5310         logical or, and indent following the coding conventions.
5311
5312         * typemanager.cs (LinqExpression): renamed from
5313         ExpressionTreeManager, for a shorter name.
5314
5315         Use TypeManager.CoreLookupType to lookup types from our core
5316         assemblies and turn those into "Type" variables.
5317
5318         Consumers that previously used "Namespace" and "Type" from this
5319         class should instead use the TypeExpression which is a type that
5320         is fully resolved (without involving the regular C# resolution
5321         rules). 
5322
5323         This typically looks like this:
5324
5325         TypeExpression texpr = new TypeExpression (LinqExpression.expression_type, loc);
5326         new MemberAccess (texpr, name, type_arguments, loc)
5327
5328         This avoids the problem in: #355178
5329
5330 2008-01-21  Marek Safar  <marek.safar@gmail.com>
5331
5332         * cs-parser.jay, expression.cs: Check `namespace alias qualifier' language
5333         feature in parser only as we do in other cases.
5334         
5335 2008-01-21  Marek Safar  <marek.safar@gmail.com>
5336
5337         * attribute.cs, ecore.cs, class.cs, delegate.cs, expression.cs, linq.cs,
5338         typemanager.cs: A refactoring of params arguments to reuse existing
5339         expressions (params -> array initializer) to emit params argument instead
5340         of specialized handling.
5341         It was required by expression tree implementation and it has other benefits
5342         as well, we now apply same optimization for params arguments as we do for
5343         array initializers.
5344         
5345 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5346
5347         A fix for bug #353526
5348         * generic.cs: A type inference of params arguments may not required any
5349         temporary array creation.
5350         
5351 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5352
5353         A fix for bug #353534
5354         * generic.cs, ecore.cs, expression.cs: A method group type inference is
5355         supported for delegates only.
5356         
5357 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5358
5359         * generic.cs: Fixed 3.0 type inference fixing phase to determine a unique
5360         type for more than 1 candidates.
5361         
5362 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5363
5364         * typemanager.cs, ecore.cs, expression.cs: Implemented ArrayLength and Call
5365         expressions.
5366         
5367 2008-01-16  Marek Safar  <marek.safar@gmail.com>
5368
5369         * generic.cs, typemanager.cs, lambda.cs, parameter.cs, ecore.cs, constant.cs,
5370         expression.cs: Implemented Add, And, AndAlso, and ArrayIndex (without unary
5371         operator) expressions. 
5372                 
5373 2008-01-16  Zoltan Varga  <vargaz@gmail.com>
5374
5375         * statement.cs: Avoid declaring an IL variable for this_variable since it is
5376         not accessed from the generated IL.
5377
5378 2008-01-14  Marek Safar  <marek.safar@gmail.com>
5379
5380         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, class.cs, delegate.cs,
5381         iterators.cs, convert.cs, assign.cs, anonymous.cs, expression.cs,
5382         statement.cs: The first expression tree implementation drop, mostly
5383         infrastructure work.
5384
5385 2008-01-14  Marek Safar  <marek.safar@gmail.com>
5386
5387         * ecore.cs (IsNestedChild): Refactored.
5388
5389 2008-01-11  Marek Safar  <marek.safar@gmail.com>
5390
5391         * lambda.cs: Don't use a cast on unknown expression statement.
5392
5393 2008-01-10  Geoff Norton  <gnorton@novell.com>
5394
5395         * cs-tokenizer.cs: One more token to distinguish between method and lambda
5396         arguments
5397
5398 2008-01-09  Marek Safar  <marek.safar@gmail.com>
5399
5400         * doc.cs: Report better /doc crash details.
5401         
5402 2008-01-09  Marek Safar  <marek.safar@gmail.com>
5403
5404         A fix for bug #352536
5405         * ecore.cs, assign.cs, codegen.cs: Check event assignments.
5406
5407 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5408
5409         A fix for bug #352287
5410         * ecore.cs, expression.cs: Do `this' access checking in all member access
5411         expressions.
5412         
5413 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5414
5415         * rootcontext.cs, driver.cs: Switch to linq mode by default.
5416         
5417         * report.cs: Reset message stacks.
5418         
5419 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5420
5421         * generic.cs (InferInPhases): Correctly calculate params position.
5422         
5423 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5424
5425         * cs-tokenizer.cs: No need to parse full string when parsing lambda
5426         arguments.
5427
5428 2008-01-07  Marek Safar  <marek.safar@gmail.com>
5429
5430         * cs-tokenizer.cs: Enabled lambda arguments micro-parser for all profiles.
5431         
5432         * decl.cs (LookupNamespaceOrType): Don't cache names which caused an error.
5433         
5434         * driver.cs: Updated --help option.
5435         
5436 2008-01-07  Marek Safar  <marek.safar@gmail.com>
5437
5438         * generic.cs (InferParamsTypeArguments): Removed.
5439         (InferInPhases): Add params type inference.
5440         (LowerBoundInference): Fixed scoring mechanism.
5441         
5442         * cs-tokenizer.cs (PreProcessPragma): Use Location instead of line.
5443         
5444 2008-01-06  Gert Driesen  <drieseng@users.sourceforge.net>
5445
5446         * typemanager.cs: On 2.0 profile, GetPublicKeyToken returns an empty
5447         byte array for unsigned "baked" assemblies.
5448
5449 2008-01-05  Gert Driesen  <drieseng@users.sourceforge.net>
5450
5451         * codegen.cs: AssemblyName.GetPublicKey returns a zero-length byte
5452         array for assemblies that are not strongnamed.
5453
5454 2008-01-04  Marek Safar  <marek.safar@gmail.com>
5455
5456         A fix for bug #351481
5457         * expression.cs (MemberAccess.ResolveNamespaceOrType): Use correct
5458         declaring type for nested generic types.
5459         
5460 2008-01-04  Marek Safar  <marek.safar@gmail.com>
5461
5462         * namespace.cs, class.cs, decl.cs, cs-parser.jay: Use GetSignatureForError
5463         instead of ToString.
5464         
5465 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5466
5467         A fix for bug #351047
5468         * expression.cs (Binary.ResolveOperator): Allow equality operators between
5469         null and structs only when equality and inequality operators are defined
5470         either as an user-operators or predefined operators.
5471         
5472 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5473
5474         A fix for bug #351047
5475         * generic.cs, typemanager.cs, class.cs: New IsReferenceType helper method.
5476         
5477 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5478
5479         A fix for bug #351257
5480         * cs-tokenizer.cs: Advance line number for '\r' correctly.
5481         
5482 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5483
5484         A fix for bug #351157
5485         * class.cs (Using): Fixed yet another broken cloning.
5486         
5487         (Block): Put back more sensible default value for statements.
5488         
5489 2008-01-01  Gert Driesen  <drieseng@users.sourceforge.net>
5490
5491         * codegen.cs: Allow AssemblyVersion with only major version component.
5492         Fixes bug #351055.
5493
5494 2007-12-29  Marek Safar  <marek.safar@gmail.com>
5495
5496         A fix for bug #324654
5497         * class.cs: Use FullName property as member name.
5498
5499 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5500
5501         A fix for bug #342117
5502         * generic.cs (ConstraintChecker): Struct constraint also satisfies default
5503         constructor constraint.
5504
5505 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5506
5507         A fix for bug #338273
5508         * class.cs (ProbertyBase): Access modifier checks are required for overrides
5509         only.
5510
5511 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5512
5513         A fix for bug #350839
5514         * ecore.cs (MethodroupExpr): Probing hacks are no longer required.
5515
5516 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
5517
5518         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
5519         GHOP:
5520         
5521         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
5522
5523         * statement.cs: Changed some Hashtables to use HybridDictionaries
5524         instead. It was observed that some HashTables only contained a few
5525         items in the vast majority of cases. Since HybridDictionary is
5526         more efficient on small sets (<10 elements), "known_variables"
5527         from class ExplicitBlock as well as "labels" and "constants " from
5528         class Block were changed to HybridDictionaries. 
5529
5530         Atsai results: (56216kb->54987kb)
5531
5532         Miguel results (bootstrap of mcs): 59819kb -> 59290kb
5533
5534
5535 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
5536
5537         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
5538         GHOP:
5539         
5540         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
5541         
5542         * expression.cs: foreach loop to for loop, saved on allocation of
5543         enumerator (59333kb->59141kb)
5544
5545         * statement.cs. Changed foreach loops to for loops, saved on
5546         allocation of enumerator (59141kb->59006kb)
5547
5548         * decl.cs: ArrayLists in .NET 1.1 allocate 16 elements by default
5549         when constructed with no specified capacity. This was causing a
5550         few ArrayLists to allocate more memory than they would potentially
5551         need in the Block class and MemberCache class. Setting the
5552         ArrayLists to construct with a capacity of 1 saves some
5553         memory. (56216kb->55585kb)
5554
5555 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5556
5557         A fix for bug #347189 (2nd issue)
5558         * expression.cs (MemberAccess): Nested type can be found in base non-generic
5559         type.
5560
5561 2007-12-27  Miguel de Icaza  <miguel@novell.com>
5562         
5563         * report.cs: Do not use colors if stdout and stderr are not a
5564         terminal.
5565
5566 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5567
5568         A fix for bug #346998
5569         * ecore.cs (MethodGroupExpr): Implemented override filter for generic
5570         overloads.
5571
5572 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5573
5574         A fix for bug #343465
5575         * class.cs: Explicit method name for nested types uses dots only.
5576
5577 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5578
5579         A fix for bug #343707
5580         * cs-tokenizer.cs: Advance line number for mixed CR/LF files correctly.
5581
5582 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5583
5584         * ecore.cs: Report type inference errors only when arguments count matches
5585         parameter count.
5586         
5587         * generic.cs (NullCoalescingOperator): Cannot be applied to null.
5588         
5589         * expression.cs, report.cs: New warning.
5590         
5591         * typemanager.cs: Catch anonymous method type too.
5592
5593 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5594
5595         A fix for bug #346379
5596         * expression.cs (UnaryMutator): Emit size of type for pointer mutator.
5597
5598 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5599
5600         A fix for bug #347359
5601         * expression.cs (Invocation): Don't resolve already resolved expression.
5602
5603 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5604
5605         A fix for bug #347189
5606         * class.cs (FixedField): Use non-dependent code only in the define phase.
5607
5608 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5609
5610         A fix for bug #348076
5611         * ecore.cs (FieldExpr.DoResolve): Allow any variable based expression.
5612
5613 2007-12-22  Marek Safar  <marek.safar@gmail.com>
5614
5615         * ecore.cs (MethodGroupExpr.OverloadResolve): Set type arguments for
5616         discovered extension methods.
5617
5618 2007-12-22  Marek Safar  <marek.safar@gmail.com>
5619
5620         * ecore.cs, namespace.cs, expression.cs: Removed broken ResolveGeneric
5621         method.
5622
5623 2007-12-21  Miguel de Icaza  <miguel@novell.com>
5624
5625         * report.cs (ErrorMessage): Add support for using colors on
5626         terminals that support it. 
5627
5628 2007-12-21  Marek Safar  <marek.safar@gmail.com>
5629
5630         * ecore.cs: Use information about expanded params for error reporting.
5631
5632 2007-12-21  Marek Safar  <marek.safar@gmail.com>
5633
5634         * ecore.cs, generic.cs, delegate.cs: Refactoring of method overloading code
5635         and logic for params overloads.
5636         
5637 2007-12-15  Miguel de Icaza  <miguel@novell.com>
5638
5639         * generic.cs (NullCoalescingOperator.CloneTo): implement this one,
5640         as this is also created from the parser.  Fixes #349034
5641
5642 2007-12-12  Miguel de Icaza  <miguel@novell.com>
5643
5644         * statement.cs (Throw.CloneTo): it is valid to have empty
5645         expressions for throw. 
5646
5647 2007-12-03  Marek Safar  <marek.safar@gmail.com>
5648
5649         * cs-parser.jay: Set delegate constraint parsing region correctly.
5650
5651 2007-12-03  Marek Safar  <marek.safar@gmail.com>
5652
5653         A fix for bug #345467
5654         * typemanager.cs (IsEqual): Compare generic parameters position only.
5655         
5656 2007-11-28  Marek Safar  <marek.safar@gmail.com>
5657
5658         * expression.cs (BaseAccess): Type arguments can be null.
5659
5660 2007-11-27  Raja R Harinath  <harinath@gmail.com>
5661
5662         * statement.cs (Block.Resolve): Ensure flow-branching tree is
5663         consistent even when an error has occured.
5664         (Switch.Resolve): Likewise.
5665
5666 2007-11-22  Marek Safar  <marek.safar@gmail.com>
5667
5668         A fix for bug #334505
5669         * class.cs: Don't ignore InternalsVisibleTo attribute for internal
5670         overrides.
5671         
5672 2007-11-22  Marek Safar  <marek.safar@gmail.com>
5673
5674         * ecore.cs, typemanager.cs, delegate.cs, expression.cs: The first of 
5675         refactorings required to resolve extension methods correctly when mixing
5676         generics and non-generics members.
5677         
5678 2007-11-20  Marek Safar  <marek.safar@gmail.com>
5679
5680         A fix for bug #342584
5681         * convert.cs: Added not documented explicit IntPtr/UIntPtr to enum
5682         conversion.
5683         
5684 2007-11-19  Marek Safar  <marek.safar@gmail.com>
5685
5686         A fix for bug #342512
5687         * delegate.cs: Use delegate argument expression when is available. Don't
5688         emit virtual call when class is sealed.
5689         
5690 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5691
5692         A fix for bug #325423
5693         * assign.cs (FieldInitializer): Use resolved expression for emit.
5694         
5695         * class.cs: Print less confusing error message.
5696         
5697 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5698
5699         * cs-tokenizer.cs: Removed GMCS ifdefs.
5700         
5701         * rootcontext.cs, report.cs: Report unavailable gmcs features used by
5702         mcs.
5703         
5704         * cs-parser.jay: Disabled nullable check.
5705         
5706         * generic-mcs: Copied more generic stuff.
5707                 
5708 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5709
5710         * gcs-parser.jay: Merged to cs-parser.jay.
5711         
5712         * generic.cs, typemanager.cs, cs-tokenizer.cs, linq.cs, Makefile
5713         * *.csproj, *.sources: Updated to use only jay parser file.
5714
5715 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5716
5717         * gcs-parser.jay: Added nullable and default expression feature checks.
5718         
5719 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5720
5721         * gcs-parser.jay, cs-parser.jay, class.cs: Unified parameters parsing, 
5722         it fixes many TODOs and hidden bugs.
5723         
5724         * expression: Removed duplicate error check.
5725
5726 2007-11-15  Marek Safar  <marek.safar@gmail.com>
5727
5728         * gcs-parser.jay, statement.cs, decl.cs, ecore.cs: Try to resolve an
5729         implicitly type local variable only when it is used in a declaration.
5730
5731 2007-11-15  Marek Safar  <marek.safar@gmail.com>
5732
5733         * attribute.cs: Use CS0612 for empty strings.
5734
5735 2007-11-14  Marek Safar  <marek.safar@gmail.com>
5736
5737         * lambda.cs, statement.cs: Contextual return may act as a statement.
5738
5739 2007-11-14  Marek Safar  <marek.safar@gmail.com>
5740
5741         A fix for a regression cause by #324222
5742         * class.cs: Don't report unused even when it implements an interface.
5743         
5744 2007-11-13  Marek Safar  <marek.safar@gmail.com>
5745
5746         A fix for bug #341205
5747         * ecore.cs, expression.cs: Method group expression cannot do static
5748         method access with an instance reference check before overloading takes
5749         a place.
5750         
5751 2007-11-13  Marek Safar  <marek.safar@gmail.com>
5752
5753         A fix for bug #325359
5754         * class.cs: Use predictable name for automatically generated property.
5755         
5756 2007-11-12  Marek Safar  <marek.safar@gmail.com>
5757
5758         A fix for bug #324996
5759         * expression.cs (Is): Handle case where D is nullable and T is not
5760         correctly.
5761         
5762         * generics.cs (Nullable.HasValue): Nullable HasValue expression.
5763         
5764 2007-11-12  Marek Safar  <marek.safar@gmail.com>
5765
5766         * generic.cs, literal.cs, ecore.cs, class.cs, delegate.cs, const.cs,
5767         anonymous.cs, expression.cs, attribute.cs, codegen.cs, statement.cs:
5768         Flush small error reporting changes.
5769         
5770 2007-11-09  Marek Safar  <marek.safar@gmail.com>
5771
5772         A fix for bug #324996
5773         * expression.cs: Rewrote Is expression implementation to work with
5774         generics, nullable types, anonymous method. A const result expression 
5775         uses existing infrastructure instead of custom not fully-featured one.
5776         
5777 2007-11-08  Marek Safar  <marek.safar@gmail.com>
5778
5779         A fix for bug #340202
5780         * class.cs: Consider generics for volatile field.
5781
5782 2007-11-08  Marek Safar  <marek.safar@gmail.com>
5783
5784         A fix for bug #335594
5785         * expression.cs: Use conversion rules when handling string addition.
5786         
5787 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5788
5789         A fix for bug #336651
5790         * expression.cs: Fixed a crash when probing is on.
5791         
5792 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5793
5794         A fix for bug #324242
5795         * covert.cs: Added a conversion from any nullable-type with an 
5796         underlying enum-type to the type System.Enum.
5797         
5798 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5799
5800         A fix for bug #324222
5801         * class.cs: Report all non-used event fields.
5802         
5803 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5804
5805         A fix for bug #325161
5806         * cs-parser.jay, gcs-parser.jay, decl.cs: Implemented namespace alias
5807         qualifier for generic types.
5808         
5809 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5810
5811         A fix for bug #322971
5812         * expression.cs, ecore.cs: Added intermediate result value check for
5813         indexers. 
5814         
5815 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5816
5817         A fix for bug #324754
5818         * cs-parser.jay, gcs-parser.jay, class.cs: Try to create an interator
5819         when it was requested.
5820
5821 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5822
5823         A fix for bug #325101
5824         * expression.cs: Do type not value comparison for `is' expression.
5825
5826 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5827
5828         A fix for bug #320236
5829         * convert.cs: Don't apply user conversion on underlying target type.
5830
5831 2007-11-06  Marek Safar  <marek.safar@gmail.com>
5832
5833         * expression.cs: Don't use unresolved expression for error reporting.
5834  
5835 2007-11-06  Marek Safar  <marek.safar@gmail.com>
5836
5837         A fix for bugs #337712, #324490
5838         * ecore.cs (MethodGroupExpr): Refactored to handle delegate method
5839         overloading resolution too.
5840         
5841         * delegate.cs: Uses MethodGroupExpr for overloading resolution. It makes
5842         the process consistent and more robust.
5843         
5844         * expression.cs, linq.cs, report.cs: Update.
5845
5846 2007-11-02  Marek Safar  <marek.safar@gmail.com>
5847
5848         A fix for bug #332909
5849         * attribute.cs: Resolve attributes in correct context using error
5850         handling procedure.
5851         
5852         * rootcontext.cs: Define Obsolete attribute members as core members.
5853         
5854 2007-11-02  Marek Safar  <marek.safar@gmail.com>
5855
5856         * statement.cs: Removed unused methods.
5857         
5858 2007-10-31  Wade Berrier  <wberrier@novell.com>
5859
5860         * Makefile:  reenable copy of gmcs.exe.config, but include it in EXTRA
5861         DIST (it doesn't get included because PROGRAM isn't defined to be gmcs
5862         during 'make dist')
5863
5864 2007-10-31  Marek Safar  <marek.safar@gmail.com>
5865
5866         A fix for bug #338102
5867         * decl.cs (CheckExistingMembersOverloads): Workaround issue with generic
5868         methods registered as non-generics.
5869         
5870 2007-10-31  Marek Safar  <marek.safar@gmail.com>
5871
5872         A fix for bugs #337712, #324490
5873         * delegate.cs: Delegate covariance and contravariance is not allowed for
5874         value types.
5875         
5876 2007-10-31  Marek Safar  <marek.safar@gmail.com>
5877
5878         A fix for bug #337719 
5879         * cs-tokenizer.cs: Restore identifier buffer when parsing contextual
5880         `from' keyword.
5881         
5882 2007-10-30  Marek Safar  <marek.safar@gmail.com>
5883  
5884         * Makefile (net_2_0_bootstrap/mcs.exe.config): Reverted copy gmcs.exe.config.
5885
5886 2007-10-29  Marek Safar  <marek.safar@gmail.com>
5887  
5888         * cs-tokenizer.cs, gcs-parser.jay, driver.cs: Fixed parsing of nested
5889         query expressions.
5890
5891 2007-10-29  Raja R Harinath  <rharinath@novell.com>
5892
5893         * Makefile (net_2_0_bootstrap/mcs.exe.config): Copy gmcs.exe.config.
5894
5895 2007-10-29  Marek Safar  <marek.safar@gmail.com>
5896  
5897         A fix for bug #334652
5898         * ecore.cs (MethodGroupExpr.OverloadResolve): Do also lookup for
5899         extension methods when we have not found the best candidate in normal
5900         container.
5901
5902 2007-10-27  Marek Safar  <marek.safar@gmail.com>
5903
5904         * AssemblyInfo.cs: Keep up-to-date.
5905
5906 2007-10-27  Marek Safar  <marek.safar@gmail.com>
5907
5908         * Makefile: Fixed generics compiler name.
5909         
5910 2007-10-27  Marek Safar  <marek.safar@gmail.com>
5911
5912         * lambda.test: removed, lambda parsing is done differently.
5913         
5914         * gen-il.cs, gen-treedump.cs, old-code.cs : Obsolete.
5915
5916 2007-10-27  Gert Driesen  <drieseng@users.sourceforge.net>
5917
5918         * Makefile: Removed dependency on gmcs.exe.config. Fixes build.
5919
5920 2007-10-27  Marek Safar  <marek.safar@gmail.com>
5921
5922         * Makefile, *.sources : All C# compilers are in mcs folder.
5923         
5924         * *.cs: Use existing 2_1 define for smcs.
5925
5926 2007-10-26  Marek Safar  <marek.safar@gmail.com>
5927
5928         A fix for bug #335847
5929         * assign.cs, expression.cs: Couple of changes to avoid creating a
5930         temporary variable for each object initializer assignment statement. It
5931         simplifies struct initialization too, otherwise two temporary variables
5932         would be required.
5933         Implemented optimization of redundant default element initializers.
5934         
5935 2007-10-25  Marek Safar  <marek.safar@gmail.com>
5936
5937         A fix for bug #336766
5938         * expression.cs (Class.CheckBase): Use generic name when method is
5939         generic.
5940         
5941 2007-10-25  Marek Safar  <marek.safar@gmail.com>
5942
5943         A fix for bug #334737
5944         * expression.cs (IndexerAccess.EmitAssign): Emit local temporary
5945         variable and not variable argument for prepared copies.
5946
5947 2007-10-24  Marek Safar  <marek.safar@gmail.com>
5948
5949         A fix for bug #325110
5950         * class.cs, expression.cs, attribute.cs: Use open generic method when
5951         checking conditional attribute.
5952         
5953 2007-10-24  Marek Safar  <marek.safar@gmail.com>
5954
5955         * report.cs, cs-tokenizer.cs, class.cs, cs-parser.jay, anonymous.cs, 
5956         expression.cs, statement.cs: Renamed method FeatureIsNotISO to
5957         FeatureIsNotAvailable.
5958
5959 2007-10-24  Marek Safar  <marek.safar@gmail.com>
5960
5961         ** C# 3.0 Partial methods
5962         
5963         * cs-tokenizer.cs, support.cs, class.cs, decl.cs: Implemented partial
5964         methods support. Because of member cache issue with generics only
5965         non-generics partial methods are fully supported.
5966         
5967 2007-10-23  Marek Safar  <marek.safar@gmail.com>
5968         
5969         * class.cs, decl.cs: Rewrote member overloads check to cope with 
5970         generics and to use member cache for member checking. It also improves
5971         performance and fixes remaining overloads issues.
5972         
5973 2007-10-20  Marek Safar  <marek.safar@gmail.com>
5974         
5975         * class.cs, const.cs, decl.cs, delegate.cs, enum.cs, generic.cs,
5976         roottypes.cs, typemanager.cs:
5977                 
5978         A member cache creation logic changed to add members immediately and
5979         not rely on fallback. The member cache is now only prefered way
5980         how to access and find type declaration members. It saves 5 MB of memory
5981         during MWF compilation and makes code ready for more optimizations and
5982         clean-ups, it's also a pre-requirement for partial methods.
5983         
5984 2007-10-18  Raja R Harinath  <harinath@gmail.com>
5985
5986         * ecore.cs (Expression.Error_ValueCannotBeConverted): Add special
5987         handling for generic parameters.
5988
5989 2007-10-15  Marek Safar  <marek.safar@gmail.com>
5990         
5991         * class.cs (FixedField): Removed redundant volatile check.
5992         
5993 2007-10-15  Marek Safar  <marek.safar@gmail.com>
5994         
5995         * class.cs, decl.cs: Fixed overload members verification to do only one
5996         check per possible collision.
5997         
5998 2007-10-13  Marek Safar  <marek.safar@gmail.com>
5999         
6000         A fix for bug #325478
6001         * anonymous.cs (AnonymousContainer.Compatible): Merge are flags together
6002         and create only one disposable flags container.
6003         
6004 2007-10-12  Marek Safar  <marek.safar@gmail.com>
6005         
6006         A fix for bug #332442 by Alexandre Gomes <alexmipego@gmail.com>
6007         * statement.cs (Fixed): Fixed variables cloning.
6008         
6009 2007-10-12  Marek Safar  <marek.safar@gmail.com>
6010         
6011         A fix for bug #333342
6012         * class.cs (EventField): Don't mark value type event as synchronized. 
6013         
6014 2007-10-12  Marek Safar  <marek.safar@gmail.com>
6015         
6016         * ecore.cs, anonymous.cs (MethodGroupExpr): Use score from type
6017         inference to identify best candidate method correctly.
6018         (ProperyExpr): A range variable is read only and cannot be modified.
6019         
6020 2007-10-11  Marek Safar  <marek.safar@gmail.com>
6021         
6022         * ecore.cs, delegate.cs (MethodGroupExpr): Refactored best candidate
6023         logic to identify best candidate method correctly.
6024         
6025 2007-10-11  Marek Safar  <marek.safar@gmail.com>
6026         
6027         * location.cs (Equals, GetHashCode): Removed.
6028         
6029 2007-10-11  Marek Safar  <marek.safar@gmail.com>
6030         
6031         * report.cs: Implemented message recorder. It is used mainly for lambda
6032         expressions to capture otherwise swallowed error messages.
6033         
6034         * anonymous.cs, lambda.cs.cs: Do full parameters check.
6035
6036         * ecore.cs (ExtensionMethodGroup): Report binding failure at the botton
6037         and not at the top.
6038         (MethodGroupExpr.DoResolve): Use message recorder for error handling.
6039                 
6040         * expression.cs (MemberAccess): Always report lookup failure.
6041         
6042         * location.cs: Implemented Equals, GetHashCode.
6043         
6044         * statement.cs (Return.DoResolve): Fixed hardcoded error argument.
6045         
6046 2007-10-10  Jb Evain  <jbevain@novell.com>
6047
6048         * codegen.cs: re-enable assembly version check.
6049
6050 2007-10-09  Marek Safar  <marek.safar@gmail.com>
6051         
6052         * report.cs, anonymous.cs, driver.cs, expression.cs: Added few ISO-2
6053         checks.
6054         
6055         * namespace.cs (UsingAlias): Do correct version check.
6056         
6057 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6058         
6059         * expresison.cs, ecore.cs: Issue extension method error message when
6060         appropriate.
6061         
6062         * rootcontext.cs: Added ISO_2 compiler mode option.
6063
6064 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6065         
6066         * expresison.cs (UnaryMutator.ResolveOperator): Print more useful error
6067          message.
6068         
6069 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6070         
6071         * attribute.cs (GetString, GetBoolean): Work with both literal and
6072         constant.
6073         
6074         * ecore.cs, expresison.cs, delegate.cs (Invocation, MethodGroupExpr):
6075         Moved method overload specific methods to MethodGroupExpr.
6076         
6077         (IndexerAccess): Re-wrote resolving mechanism, fixed many issues and
6078         it should be less memory consuming.
6079         
6080 Mon Oct 8 09:29:15 CEST 2007 Paolo Molaro <lupus@ximian.com>
6081
6082         * codegen.cs: remove the assembly version check until the buildbot is
6083         fixed.
6084
6085 2007-10-07  Jb Evain  <jbevain@novell.com>
6086
6087         * attribute.cs (Attribute.GetString): if the value
6088         expression is a StringConstant, return its string value.
6089
6090 2007-10-07  Jb Evain  <jbevain@novell.com>
6091
6092         * typemanager.cs: add `assembly_version_attribute_type`.
6093         * codegen.cs: on attribute emission, check that the
6094         AssemblyVersionAttribute doesn't overflow.
6095
6096 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6097         
6098         A fix for bug #324677
6099         * anonymous.cs, decl.cs: Yes another anonymous container hack. Overwrite
6100         parent container of a scope container with currently resolved one. 
6101         
6102 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6103         
6104         A fix for bug #325534
6105         * class.cs (Invocation.DoResolve): Check invocation of object finalizer
6106         only.
6107         
6108 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6109         
6110         A fix for bug #327504
6111         * class.cs (Operator.Define): Refactored implicit and explicit user
6112         operator conversion rules.
6113         
6114 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6115         
6116         A fix for bug #327520
6117         * ecore.cs (ExtensionMethodGroupExpr): Emit resolved extension argument.
6118         
6119 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6120         
6121         A fix for bug #328022
6122         * class.cs (MethodData.Define): Use correct method to check whether
6123         a method implementents an accessor.
6124         
6125 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6126         
6127         A fix for bug #330069
6128         * statement.cs (Fixed.Resolve): Read the first array element only when
6129         an array is instantiated. 
6130         
6131 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6132         
6133         * expression.cs, assign.cs, generics.cs: Print correct operator when
6134         compound assignment is used.
6135         
6136 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6137         
6138         A fix for bug #325841
6139         * expression.cs (ArrayAccess): Use full argument cloning only for
6140         string compound concatenation.
6141         
6142 2007-10-03  Marek Safar  <marek.safar@gmail.com>
6143         
6144         A fix for bug #328774
6145         * ecore.cs (FieldExpr.EmitAssign): Fixed string concatenation compound
6146         assignment.
6147         (PropertyExpr.EmitAssign): Fixed string concatenation compound
6148         assignment.
6149
6150 2007-10-03  Raja R Harinath  <rharinath@novell.com>
6151
6152         Fix #328490
6153         * ecore.cs (SimpleName.DoSimpleNameResolve): Handle Property and
6154         Event accessibility checks here.  Remove some bogus code that
6155         accidently made GenericMethods work.
6156         (PropertyExpr.IsAccessibleFrom, EventExpr.IsAccessibleFrom): New.
6157
6158 2007-09-25  Marek Safar  <marek.safar@gmail.com>
6159         
6160         * expression.cs (ArrayCreation): Fixed cloning of an implicit types.
6161         
6162         * statement.cs (Block): Refactored AddVariable to allow error handling
6163         customization.
6164         
6165         * generic.cs: New stub.
6166         
6167 2007-09-23  Marek Safar  <marek.safar@gmail.com>
6168         
6169         * anonymous.cs, codegen.cs: Changed InferReturnType to be EmitContext
6170         flag.
6171         
6172 2007-09-17  Marek Safar  <marek.safar@gmail.com>
6173
6174         * class.cs: Use partial container to record whether any partial part
6175         contains static field initializer and therefore default contructor has
6176         to be defined.
6177         
6178 2007-09-14  Marek Safar  <marek.safar@gmail.com>
6179
6180         * class.cs (TypeContainer.AddPartial): Fixed an issue reported on
6181         mono-list when only one of two partial parts has defined accessibility
6182         modifier.
6183         
6184 2007-09-14  Marek Safar  <marek.safar@gmail.com>
6185
6186         A fix for bug #82845
6187         
6188         * class.cs (TypeContainer): Set correct resolve context for all field
6189         initializers.
6190         
6191 2007-09-13  Marek Safar  <marek.safar@gmail.com>
6192
6193         * assign.cs: Fixed a crash when field is resolved twice with an error.
6194         
6195         * codegen.cs: Changed InFieldInitializer to be flag.
6196         
6197         * anonymous.cs, ecore.cs, expression.cs: Update after
6198         IsInFieldInitializer rename.
6199         
6200         * const.cs: Removed unused parameter.
6201         
6202         * class.cs: Changed the way how we resolve and emit field initializers.
6203         The field initilizers have to have access to contructor block to emit
6204         compiler generated code.
6205
6206 2007-09-13  Marek Safar  <marek.safar@gmail.com>
6207
6208         * expression.cs (MemberAccess.DoResolve): DeclSpace is broken by
6209         generics use TypeContainer instead.
6210         
6211 2007-09-12  Marek Safar  <marek.safar@gmail.com>
6212         
6213         * generic.cs (TypeInferenceContext.InflateGenericArgument): Stub.
6214
6215         * lambda.cs (ResolveParameters): Use more powerful
6216         InflateGenericArgument.
6217         
6218         * parameters.cs: Better exception message.
6219                 
6220 2007-09-10  Marek Safar  <marek.safar@gmail.com>
6221
6222         * anonymous.cs (AnonymousMethodExpression.CompatibleChecks): Report
6223         correct expression block type. 
6224         
6225         * ecore.cs (Expression.Error_MemberLookupFailed): Made virtual.
6226         
6227         * expression.cs (Invocation): Extracted method group resolve to
6228         DoResolveOverload.
6229         
6230 2007-09-07  Marek Safar  <marek.safar@gmail.com>
6231
6232         * ecore.cs (Expression.MemberLookupFinal): Removed unused loc parameter.
6233         (MethodGroupExpr.ResolveGeneric): Use existing method group instance.
6234         
6235         * expression.cs (MemberAccess.DoResolve): Uses generic resolver for
6236         generic extension methods.
6237
6238 2007-09-06  Marek Safar  <marek.safar@gmail.com>
6239
6240         A fix for bug #82676 (Do I get it right now?)
6241         * convert.cs (Binary.ResolveOperator): An interface is converted to the
6242         object before a standard conversion is applied.
6243         
6244 2007-09-06  Marek Safar  <marek.safar@gmail.com>
6245
6246         * convert.cs (ImplicitReferenceConversionCore): Reverted wrong fix of
6247         #82676.
6248         
6249 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6250
6251         A fix for bug #82676
6252         * convert.cs (ImplicitReferenceConversionCore): Check both sides for
6253         non-generic interface types.
6254         
6255 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6256
6257         A fix for bug #82690
6258         * ecore.cs (PropertyExpr.EmitAssign): Leave a copy does just that.
6259         
6260 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6261
6262         A fix for bug #82571
6263         * anonymous.cs (AnonymousMethod.DoCreateMethodHost): Use internal 
6264         modifier for container based methods.
6265         
6266 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6267
6268         A fix for bug #82676
6269         * convert.cs (ImplicitReferenceConversionCore): From any class-type S to
6270         any interface-type T means to any of interface type T.
6271
6272 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6273
6274         * namespace.cs: We have 2 versions of System.Core assembly.
6275
6276 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6277
6278         A fix for bug #82652
6279         * class.cs (Class.GetClassBases): Compare types and not expressions.
6280
6281 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6282
6283         A fix for bug #82620
6284         * expression.cs (Invocation.EmitArguments): Duplicate params arguments
6285         actually never worked before.
6286         (IndexerAccess): Emit prepared arguments before they are modified.
6287         
6288 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6289
6290         A fix for bug #82563
6291         * assign.cs: Revert wrong fix.
6292         
6293         * expression.cs (VariableReference.EmitAssign): Handle ref reference
6294         correctly.
6295         (ArrayAccess): Changed the way we emit compound (prepared) assignments.
6296         Instead of ldelema/stdind we have to use temporary variables to handle
6297         cases like String.Concat (params string[]).
6298         
6299 2007-08-31  Marek Safar  <marek.safar@gmail.com>
6300
6301         * class.cs: EmitAttributes to Emit rename.
6302         
6303         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Parent can be
6304         null.
6305         (MemberCore.HasClsCompliantAttribute): Don't depend on 
6306         GetClsCompliantAttributeValue execution.
6307         
6308 2007-08-31  Marek Safar  <marek.safar@gmail.com>
6309
6310         * anonymous.cs: Use shorter type prefix.
6311         
6312         * ecore.cs (SimpleName.DoSimpleNameResolve): Use transparent identifiers
6313         when exist.
6314         
6315         * expression.cs (LocalVariableReference.DoResolveBase): Don't capture
6316         variables when probing is on.
6317         
6318         * statement.cs (LocaLInfo.Clone): Clone correctly resolved and 
6319         unresolved variables.
6320         (TopLevelBlock.GetTransparentIdentifier): Default implementation doesn't
6321         handle transparent identifiers.
6322         
6323 2007-08-26  Marek Safar  <marek.safar@gmail.com>
6324
6325         * attribute.cs (IsClsCompliant): Add nullable types test.
6326         
6327 2007-08-24  Atsushi Enomoto  <atsushi@ximian.com>
6328
6329         * doc.cs : catch other types of exception than XmlException to
6330           report CS1570. Fixed bug #82565.
6331
6332 2007-08-23  Marek Safar  <marek.safar@gmail.com>
6333
6334         * anonymous.cs (AnonymousMethodExpressin.ExplicitTypeInference): 
6335         The number of delegate parameters has to match.
6336         (AnonymousMethodExpressin.VerifyParameterCompatibility): Handles generic
6337         arrays.
6338
6339 2007-08-21  Marek Safar  <marek.safar@gmail.com>
6340
6341         * anonymous.cs (AnonymousMethod): Generate private anonymous method
6342         to fix problem with private arguments.
6343
6344 2007-08-20  Marek Safar  <marek.safar@gmail.com>
6345
6346         * anonymous.cs (AnonymousTypeClass): An anonymous type can be empty.
6347         
6348         * decl.cs (MemberName): Ignore generic type with no generic arguments. 
6349         
6350         * expression.cs (AnonymousTypeDeclaration): An anonymous type can be
6351         empty. Add cloning suport.
6352         
6353         * roottypes.cs (GetAnonymousType): Fixed argument comparison logic.
6354
6355 2007-08-20  Marek Safar  <marek.safar@gmail.com>
6356
6357         * convert.cs, ecore.cs, expression.cs, literal.cs: Use factory method 
6358         to create EmptyCast. It handles EmptyConstantCast specialization for
6359         constants.
6360         
6361 2007-08-18  Marek Safar  <marek.safar@gmail.com>
6362
6363         * expression.cs (Binary.is_unsigned): Handle unsafe types too.
6364         (EmitArrayArgument): One routine for array arguments.
6365         (ArrayCreation.MakeByteBlob): Fixed an array alignment. 
6366         
6367 2007-08-17  Marek Safar  <marek.safar@gmail.com>
6368
6369         * cs-tokenizer.cs (GetKeyword): Handle from keyword in a different way.
6370
6371 2007-08-17  Marek Safar  <marek.safar@gmail.com>
6372
6373         * anonymous.cs: MemberLookupFinal update.
6374
6375         * class.cs (ConstructorInitializer): Is expression based.
6376         
6377         * delegate.cs: MethodGroupExpr update.
6378         
6379         * ecore.cs  (Error_MemberLookupFailed): Improved to report better error
6380         messages.
6381         (Error_MemberLookupFailed): Customizable error override.
6382         (MethodGroupExpr): Keep queried type for later usage.
6383         (MethodGroupExpr.OverloadResolve): Catch errors related to overload
6384         resolve.
6385         
6386         * expression.cs: Error_MemberLookupFailed refactoring.
6387         (New.DoResolve): Resolve as much as possible.
6388         (ElementInitializer.Error_MemberLookupFailed): Object initializer
6389         customization for invalid member types.
6390
6391         * statement.cs: MethodGroupExpr update.
6392         
6393 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6394
6395         * modifier.cs (Check): Check all modifiers and not only accessibility
6396         ones.
6397
6398 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6399
6400         * ecore.cs (Expression.Error_ValueCannotBeConverted): Report always a
6401         type and not an expression.
6402
6403 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6404
6405         * statement.cs (Catch.Clone): Type and variable can be null.
6406
6407 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6408
6409         A fix for bug #81979
6410         * assign.cs (Assign.Emit): Prepare arguments for string concatenation.
6411         I am really not sure whether this is the best fix.
6412         
6413         * expression.cs (VariableReference.EmitAssign): Do prepare_load test
6414         only once.
6415         
6416 2007-08-14  Marek Safar  <marek.safar@gmail.com>
6417
6418         ** C# 3.0 Object and collection initializers (major re-write)
6419         
6420         * assign.cs (DoResolve): Initializers are not assign related.
6421         
6422         * codegen.cs (EmitContext.CurrentInitializerVariable): Holds a varible
6423         used during collection or object initialization.
6424         
6425         * expression.cs (Error_InvalidArguments): Add initializers specific
6426         messages. More will come later because it requires some general
6427         refactoring.
6428         (New.DoResolve): Better error handling for unsafe types.
6429         (EmptyExpressionStatement): New class.
6430         (ElementInitializer): An object initializer expression.
6431         (CollectionElementInitializer): A collection initializer expression.
6432         (CollectionOrObjectInitializers): A block of object or collection
6433         initializers.
6434         (NewInitialize): New expression with element/object initializers.
6435         
6436         * statement.cs: Reverted object/collection initializer hacks.
6437         
6438         * typemanager.cs (CSharpName): Filter __arglist type.
6439         
6440 2007-08-09  Marek Safar  <marek.safar@gmail.com>
6441
6442         ** C# 3.0 Anonymous Types (update to the latest standard)
6443         
6444         * expression.cs (Binary.ResolveOperator): Threat all null based types
6445         same.
6446         (AnonymousTypeDeclaration): Renamed from AnonymousType and simplified.
6447         (AnonymousTypeParameter): Updated.
6448         
6449         * anonymous.cs (CompilerGeneratedClass): Add custom name overload.
6450         (AnonymousTypeClass): New anonymous type container.
6451         
6452         * class.cs (AddField): Return operation result.
6453         
6454         * generic.cs: Another empty TypeArguments overload.
6455         
6456         * roottypes.cs (AddAnonymousType, GetAnonymousType): Anonymous types
6457         are stored at top of normal hierarchy.
6458         
6459         * typemanager.cs (CSharpName): Filter anonymous types.
6460         
6461 2007-08-09  Marek Safar  <marek.safar@gmail.com>
6462
6463         * expression.cs (StringConcat.Append): Handle 3 and more concatenation
6464         as single Concat call. How could we miss that :-(
6465         
6466 2007-08-08  Marek Safar  <marek.safar@gmail.com>
6467
6468         * expression.cs (ArrayCreation.CloneTo): Allocate exact size.
6469         
6470 2007-08-07  Miguel de Icaza  <miguel@novell.com>
6471
6472         * expression.cs: Fix the previous commit, the creation of the
6473         arguments array list needs also to be conditional on the arguments
6474         not being null.
6475
6476         * class.cs: Add a little bit of help to help narrow down problems.
6477
6478         * expression.cs (ArrayCreation.CloneTo): Argument can be null, do
6479         not try to copy in that case. 
6480
6481         * driver.cs: When building SMCS, include a new different set of
6482         default assemblies here.   Do this here so we can control whether
6483         to include the default assemblies with /noconfig.
6484
6485 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6486
6487         A fix for bug #81979
6488         * expression.cs (TypeOf.GetAttributableValue): Check for type arguments
6489         only.
6490
6491 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6492
6493         A fix for bug #82300
6494
6495         * anonymous.cs (AnonymousContainer.Define): Don't define anything when
6496         we are in probing scope.
6497
6498 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6499
6500         A fix for bug #82301
6501
6502         * statement.cs (Catch.CloneTo): Clone blocks in the right order.
6503         (Statement.CloneTo): Clone and not map children blocks.
6504
6505 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6506
6507         A fix for bug #82299
6508
6509         * expression.cs (LocalVariableReference.CloneTo): Remap local info
6510         variable too.
6511         
6512         * statement.cs (Statement.CloneTo): Clone variables before statements
6513         to allow remaping of local variables.
6514
6515 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6516
6517         A fix for bug #82296
6518
6519         * anonymous.cs,
6520         * report.cs: Log crash details for future clone problems.
6521         
6522         * statement.cs (Return.Clone): Don't clone non-existent expression.
6523
6524 2007-08-03  Raja R Harinath  <harinath@gmail.com>
6525
6526         * class.cs (TypeContainer.AddBasesForPart): Make virtual.
6527         (Class.AddBasesForPart): Move CS0537 check here from ...
6528         * cs-parser.jay (class_declaration): ... here.  Move calling of
6529         'AddBasesForPart' to ...
6530         (class_bases): ... here.
6531         (struct_declaration, interface_declaration): Update to changes.
6532
6533 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6534
6535         A fix for bug #81923
6536
6537         * statement.cs (Using.ResolveLocalVariableDecls): Only non-user implicit
6538         conversion is allowed.
6539
6540 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6541
6542         A fix for bug #81564
6543
6544         * ecore.cs (EventExpr): Add IsBase handling.
6545
6546         * expression.cs (BaseAccess.CommonResolve): Events can use base accessor
6547         too.    
6548         
6549 2007-08-02  Raja R Harinath  <harinath@gmail.com>
6550
6551         Reduce some differences between cs-parser.jay in mcs/ and gmcs/.
6552         * cs-parser.jay: Some whitespace cleanups.
6553         (current_delegate): New.
6554         (type_name): New.
6555         (struct_declaration): Make similar to gmcs/cs-parser.jay -- add
6556         a dummy code block, and use 'type_name' instead of 'member_name'.
6557         (interface_declaration, class_declaration): Likewise.
6558         (delegate_declaration): Likewise.  Rearrange slightly and use
6559         'current_delegate'.
6560         * cs-tokenizer.cs (handle_where): Rename from handle_constraints.
6561         (GetKeyword): Update to change.  Use '!foo' instead of 'foo == false'.
6562
6563 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6564
6565         A fix for bug #82039
6566
6567         * ecore.cs (TypeLookup.GetSignatureForError): Use name when type is not
6568         available.
6569
6570         * typemanager.cs (CSharpName): Split to string overload.
6571
6572 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6573
6574         * expression.cs,
6575         * report.cs: Updated warning CS0472.
6576
6577 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6578
6579         A fix for bug #82181
6580         * cs-parser.jay,
6581         * cs-tokenizer.cs: Ignore partial keyword inside block expression.
6582
6583 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6584
6585         A fix for bug #82277
6586         * statememnt.cs (Block.Clone): Don't clone explicit blocks twice.
6587
6588 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6589
6590         ** C# 3.0 Type Inference (major bits are working)
6591         
6592         * anonymous.cs (AnonymousMethodExpression): Removed refactored fields.
6593         (.ImplicitStandardConversionExists): Uses compatible.
6594         (.ExplicitTypeInference): Infers type arguments based on explicit arguments
6595         (.InferReturnType): New method.
6596         (.Compatible): Refactored.
6597         (.ResolveParameters): Uses factory to create resolved parameters.
6598         (.CompatibleMethod): Add probing mode support.
6599         (AnonymousContainer): Removed unused fields. Split Define and Resolve to
6600         clearly distinguish between 2 different operations.
6601         (LambdaMethod): Moved to lambda.cs.
6602         (AnonymousMethod): Removed unused fields and methods.
6603         (AnonymousDelegate): Simplified.
6604         
6605         * codegen.cs (ResolveTopBlock): Updated renamed Resolve to Define.
6606         
6607         * convert. cs (ImplicitConversionStandard): Compatible works differently.
6608         
6609         * delegate.cs (Delegate): New mehods to reduce code duplication.
6610         (.GetConstructor): New method.
6611         (.GetInvokeMethod): New method.
6612         (DelegateCreation): Updated.
6613         
6614         * ecore.cs (ResolveOverloadExtensions): Don't crash when extension method
6615         does not exist.
6616         (OverloadResolve): Made probing little bit faster.
6617         
6618         * expression.cs (ParameterReference.DoResolveLValue): Reference can be null
6619         when probing is on.
6620         
6621         * generic.cs (TypeInferenceContext): Dummy implementation.
6622         
6623         * iterators.cs: Updated after Resolve/Define rename.
6624         
6625         * lambda.cs (LambdaExpression)
6626         (.ResolveParameters): Handles both type of arguments and type inference too.
6627         
6628         * parameter.cs (ImplicitLambdaParameter.Resolve): Sanity check.
6629         (InflateTypes): Updated.
6630         
6631         * support.cs (InflateTypes): Changed signature and updated.
6632         
6633         * typemanager.cs (LookupMemberCache): Better dynamic type check.
6634         (MemberLookup_FindMembers): More MS tricks.
6635         (GetParameterData): Ditto.
6636         (GetDelegateParameters): Uses quick path for dynamic types.
6637         
6638 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6639
6640         * class.cs (MethodData.Define): EmitContext is required for generic stuff
6641         only.
6642
6643 2007-07-31  Marek Safar  <marek.safar@gmail.com>
6644
6645         * statement.cs (ProcessParameters): Don't crash when parameters have wrong
6646         syntax.
6647         
6648 2007-07-26  Jb Evain  <jbevain@novell.com>
6649
6650         * typemanager.cs (TypeManager.GetConstructor): Add a method overload
6651         which takes a boolean 'report_errors', similar to the GetMethod.
6652         (InitCodeHelpers): StructLayoutAttribute.ctor(int16) is not visible
6653         in .net 2.1, do not report errors here.
6654
6655         * typemanager.cs (TypeManager.InitCoreTypes): System.ArgIterator,
6656         System.Runtime.CompilerServices.RequiredAttributeAttribute and
6657         System.Runtime.CompilerServices.TypeForwardedToAttribute are internal
6658         in .net 2.1.
6659
6660         * typemanager.cs (TypeManager.InitCoreTypes): Move the resolution
6661         of the type InternalsVisibleToAttribute before the first call
6662         to CoreLookupType which is allowed to fail (third boolean parameter
6663         to true). Because, during the resolution for a type that is not
6664         immediately found, we try to check if the type is not defined in
6665         a friend assembly, and to do so, we need the
6666         InternalVisibleToAttribute.
6667
6668 2007-07-23  Miguel de Icaza  <miguel@novell.com>
6669
6670         * expression.cs (Binary): Add support for the brain-dead CSC 2.x
6671         feature that allows structs to be compared against null and inline
6672         the result as true or false.
6673
6674         Notice that the same code is not permitted inside a generic block
6675         of code that would do:
6676
6677         class Foo<T> where T : struct {
6678             bool Eval (T x)
6679             {
6680                  return x == null;
6681             }
6682         }
6683
6684         It is only allowed if the type of T is not bound (no where
6685         clause).   In my opinion, this CSC 2 behavior is broken but people
6686         seem to be using it (IronRuby does, a few bug reports on bugzilla
6687         have it and some people have complained about it).
6688
6689         All of the users that depend on this behavior have code that is
6690         very likely broken. 
6691         
6692         * report.cs (Warning, Error): make these take object arguments,
6693         not strings, as that allows us to take advantage of Format.
6694
6695 2007-07-20  William Holmes  <billholmes54@gmail.com>
6696
6697         * decl.cs: Changed MemberName.CountTypeArguments to also check the 
6698           Left member variable for the Count.
6699         * doc.cs: Changed DocUtil.GetMethodDocCommentName to call 
6700           MemberName.CountTypeArguments to avoid a NRE. 
6701
6702         This code is contributed under the MIT X11 license
6703
6704 2007-07-18  Marek Safar  <marek.safar@gmail.com>
6705
6706         * cs-tokenizer.cs: Improved lambda parsing and removed old code.
6707
6708 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
6709
6710         * doc.cs : generic method arguments are written as ``x while generic
6711           type arguments are `x. Combined with the previous change, fixed bug
6712           #79706.
6713
6714 2007-07-18  Raja R Harinath  <rharinath@novell.com>
6715
6716         Fix #82120
6717         * expression.cs (Binary.ResolveOperator): When converting
6718         'a + (- b)' to 'a - b', ensure that the unary '-' is discarded.
6719
6720 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
6721
6722         * doc.cs : when T: or whatever x: is specified, it does not really
6723           check the doc comment's syntax correctness. Fixed bug #82006.
6724
6725 2007-07-18  Marek Safar  <marek.safar@gmail.com>
6726
6727         * anonymous.cs (AnonymouseMethodExpression): Refactored to work with
6728         LambdaExpression better.
6729         
6730         * cs-tokenizer.cs: Changed a way how we detect lambda parameters.
6731         
6732         * driver.cs (LambdaTypeParseTest): Removed, tested method is gone.
6733         
6734         * ecore.cs (Expression.MemberLookupFailed): Don't show currect context
6735         as it can be generated.
6736         
6737         * expression.cs (Invocation.Error_InvalidArguments): Show correct
6738         modifiers.
6739         
6740         * lambda.cs (LambdaExpression): Refactored to share same code with
6741         AnonymousMethodExpression.
6742         
6743 2007-07-17  Marek Safar  <marek.safar@gmail.com>
6744
6745         * anonymous.cs (MakeName): Include host name for easier debugging.
6746         (LambdaMethod): New class for lambda spcecific stuff.
6747         
6748         * attribute.cs: Set EmitContext return type.
6749
6750         * class.cs: Set EmitContext return type.
6751         
6752         * codegen.cs (EmitContext): Return type cannot be null to stop messing
6753         with null/void meaning.
6754         
6755         * iterators.cs (ContainerType): Implemented.
6756         
6757         * rootcontext.cs: Set value of TypeManager.bool_type at early stage.
6758         
6759         * statement.cs (Return): Updated to lambda expressions.
6760         (Block.CloneTo): Parent can be null.
6761                 
6762 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6763
6764         A fix for bug #81917
6765         * attribute.cs (AttributeTester.GetFixedBuffer): More robust testing.
6766         
6767         * class.cs (FixedField): Check whether field is in unsafe scope.
6768
6769         * ecore.cs (FieldExpr.DoResolve): Create fixed buffer expression here.
6770         (FieldExpr.Emit): Fixed buffers cannot be volatile.
6771
6772         * expression.cs (ElementAccess.Resolve): Move fixed buffers resolve to
6773         FieldExpr.
6774         
6775         * statement.cs (Fixed.Resolve): Simplified fixed buffers.
6776                 
6777 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6778
6779         * cs-tokenizer.cs, class.cs, decl.cs, driver.cs, namespace.cs,
6780         rootcontext.cs, expression.cs, statement.cs: Updated to use WarningLevel
6781         from Report class.
6782
6783 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6784
6785         * ecore.cs (FieldExpr.AddressOf): Less confusing warning message.
6786         
6787 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6788
6789         * anonymous.cs (AnonymousMethodExpression): Parameters are r/o.
6790         (AnonymousContainer.ResolveNoDefine): Another ec to aec flag conversion.
6791         
6792         * codegen.cs(EmitContext): Add ProbingMode flag.
6793         
6794         * delegate.cs (DelegateInvocation): Set few instance variables as r/o.
6795         
6796         * driver.cs: For now set both warning values.
6797         
6798         * ecore.cs (SimpleName): Name is readonly.
6799         (MethodGroup.OverloadResolve): One quick path for probing.
6800         
6801         * expression.cs (Unary): Set Oper r/o.
6802         (Binary): Set Oper r/o.
6803         (ParameterReference): Set few instance variables as r/o.
6804         (ParameterReference.DoResolveBase): Don't capture aruments when 
6805         the probing is on.
6806         (Invocation.CloneTo): Fixed typo, looks easy, yeah.
6807         (Arglist): arguments are private.
6808         (SizeOf): type is private and r/o.
6809         (MemberAccess): arguments are private.
6810
6811         * report.cs: Enhanced reporting on/off capabilities.
6812         
6813         * lambda.cs: Uses ec.IsInProbingMode.
6814         (ContextualReturn): Derives from return.
6815         
6816         * rootcontext.cs: For now set both warning values.
6817         
6818         * statement.cs (CloneContext.RemapBlockCopy): Remaps block to cloned
6819         copy if one exists.
6820         (Return.Resolve): Don't die immediately.
6821         (Block.Resolve): Speed-up probing.
6822         (Block.CloneTo): Clone only child blocks.
6823
6824 Fri Jul 13 11:19:28 CEST 2007 Paolo Molaro <lupus@ximian.com>
6825
6826         * iterators.cs: reverted Miguel's latest change (r81925) as it
6827         breaks the build in System.
6828
6829 2007-07-13  Miguel de Icaza  <miguel@novell.com>
6830
6831         * iterators.cs (Yield.CheckContext): Check for the iterator type
6832         also here as we can call into Yield even in codepaths that are not
6833         directly checked by
6834         (MethodOrOperator is the only path that was checked).
6835
6836         In addition to the standard check, use a more specific check for
6837         constructors to report a more verbose error. 
6838
6839 2007-07-12  Miguel de Icaza  <miguel@novell.com>
6840
6841         * ecore.cs (FieldExpr.AddressOf): Do not stop processing here,
6842         report the warning and continue 
6843
6844         * statement.cs (Using.EmitLocalVariableDecls): We were leaving
6845         values on the stack on the call to Emit.   Use EmitStatement if
6846         possible, or using Emit + Pop if not possible.   Fixes #82064
6847
6848 2007-07-12  Raja R Harinath  <rharinath@novell.com>
6849
6850         * expression.cs (Invocation.IsApplicable): Reorganize slightly to
6851         avoid try...finally in some cases.
6852
6853 2007-07-10  Marek Safar  <marek.safar@gmail.com>
6854
6855         * attribute.cs (Attribute.ResolveConstructor): Uses method group.
6856         
6857         * class.cs (ConstructorInitializer.Resolve): Use and keep method group
6858         instead of method. Re-use standard error handling.
6859         (ConstructorInitializer.Emit): Simplified.
6860         
6861         * delegate.cs: Updated after Invocation.EmitCall change.
6862         
6863         * ecore.cs (GetOperatorTrueOrFalse): Uses MethodGroupExpr only.
6864         (SimpleName.SimpleNameResolve): Set and reset in_transit flag correctly.
6865         (ExtensionMethodGroupExpr): Refactored to use same OverloadResolve
6866         method and don't permanently changing input arguments.
6867         (MethodGroupExpr): Introduced resolved best_candidate, when method group
6868         is resolved it has one of the candidates is the best one which is later
6869         used to emit. Removed a few unused method.
6870         (MethodGroupExpr.MakeUnionSet): Moved from Invocation, it belongs here.
6871
6872         * expression.cs (StaticCallExpr.MakeSimpleCall): Uses method group.
6873         (Binary.ResolveOperator): Ditto.
6874         (ConditionalLogicalOperator.DoResolve): Ditto.
6875         (Invocation): Uses method group.
6876         (Invocation.DoResolve): Simplified.
6877         (Invocation.EmitCall): Removed useless is_static.
6878         (Invocation.Emit): Delegate to method group.
6879         (Invocation.EmitStatement): Simplified.
6880         (New): Uses method group.
6881         (MemberAccess.DoResolve): Don't destroy original expression.
6882         
6883         * statement.cs (ForEach.Resolve): Use null for no method arguments.
6884         
6885 2007-07-04  Marek Safar  <marek.safar@gmail.com>
6886
6887         * ecore.cs (VarExpr.DoResolveLValue): More restriction checks.
6888         
6889         * anonymous.cs,
6890         * lambda.cs: Add custom error message type.
6891
6892 2007-07-03  Marek Safar  <marek.safar@gmail.com>
6893
6894         * lambda.cs: Simplified little bit.
6895         
6896         * parameter.cs: Introduced ImplicitLambdaParameter.
6897         (Parameters.CreateFullyResolved): New factory instead of ctor.
6898         
6899         * anonymous.cs,
6900         * class.cs,
6901         * delegate.cs: Updated parameter creation.
6902         
6903 2007-07-03  Marek Safar  <marek.safar@gmail.com>
6904
6905         *  ecore.cs (SimpleName.GetSignatureForError): Display correctly generic
6906         arguments.
6907         
6908         * generic.cs: Synchronized with gmcs.
6909         
6910 2007-07-03  Marek Safar  <marek.safar@gmail.com>
6911
6912         * class.cs (Indexer): Check return type as soon as possible.
6913         
6914         * cs-parser.jay: Initialize implicit_value_parameter_type for interface
6915         members too.
6916         
6917         * ecore.cs (VarExpr.DoResolveLValue): Set eclass value.
6918         
6919         * expression.cs (Invocation.Error_InvalidArguments): Show type only.
6920         
6921         * parameter.cs (Parameter): Use expression type when it is available.
6922         
6923         * support.cs (ReflectionParameters.ParameterDesc): Show an extension
6924         method modifier for the first parameter only.
6925
6926 2007-06-24  Marek Safar  <marek.safar@gmail.com>
6927
6928         A fix for bug #81938
6929         * typemanager.cs (ChangeType): Fixed couple of char conversions.
6930         
6931         * constant.cs: Tide up an exception message.
6932
6933 2007-06-22  Marek Safar  <marek.safar@gmail.com>
6934
6935         * ecore.cs (SimpleName.DoSimpleNameResolve): Better error reporting when
6936         an uninitialized variable is used.
6937         
6938         * expression.cs (LocalVariableReference.DoResolve): Ditto.
6939
6940 2007-06-22  Marek Safar  <marek.safar@gmail.com>
6941
6942         * ecore.cs (SimpleName.TypeOrNamespaceNotFound): Allow to override type
6943         not found error handling.
6944
6945         * expression.cs (ArrayCreation): Removed redundant fields and little bit
6946         simplified.
6947         (ArrayCreation.ResolveArrayElement): To be ready to customization.
6948         (ArrayCreation.DoResolve): Simplified.
6949         (ImplicitlyTypedArrayCreation.DoResolve): Implicitly typed arrays have
6950         its own resolve process.
6951         (ImplicitlyTypedArrayCreation.ResolveArrayElement): Conversion magic.
6952
6953 2007-06-20  Marek Safar  <marek.safar@gmail.com>
6954
6955         * namespace.cs (NamespaceEntry.Error_AmbiguousTypeReference): Print
6956         more error details.
6957         
6958 2007-06-20  Marek Safar  <marek.safar@gmail.com>
6959
6960         * cs-tokenizer.cs: Removed var related stuff.
6961         
6962         * ecore.cs (Expression.ResolveAsContextualType): Introduced new method.
6963         (VarExpr): Changed to derive from SimpleName. VarExpr now behaves as
6964         a type and a keyword at same time.
6965         
6966         * decl.cs (MembeName.GetTypeExpression): Create VarExpr when type name
6967         matches to "var".
6968         
6969         * expression.cs (ImplicitlyTypedArrayCreation): New empty class for
6970         implicitly typed arrays, more changes will follow.
6971         
6972         * statement.cs (LocalInfo.Resolve): Resolve type as contextual type.
6973         
6974 2007-06-19  Marek Safar  <marek.safar@gmail.com>
6975
6976         * ecore.cs (VarExpr): Removed Handled field.
6977         
6978         * statement.cs (Using.ResolveLocalVariableDecls): Refactored to use
6979         build-in assign functionality.
6980         (ForEach.Resolve): Removed all implicitly typed local variable code and
6981         simplified.
6982         (ArrayForeach.Resolve): Infer implicitly typed local variable here.
6983         (CollectionForeach.Resolve): Infer implicitly typed local variable here.
6984
6985 2007-06-18  Marek Safar  <marek.safar@gmail.com>
6986
6987         * assign.cs: Removed implicitly typed local variable check.
6988         
6989         * expression.cs (LocalVariableReference.DoResolve): Add check for self
6990         referencing implicitly typed local variable.
6991         (LocalVariableReference.DoResolveLValue): Infer implicitly typed local
6992         variable here.
6993         
6994         * statement.cs (Fixed): Removed unsupported implicitly typed local
6995         variable code.
6996
6997 2007-06-15  Marek Safar  <marek.safar@gmail.com>
6998
6999         * decl.cs (MemberName): Moved all Unbound stuff to parser.
7000
7001 2007-06-14  Marek Safar  <marek.safar@gmail.com>
7002
7003         A fix for bugs #81855 and #76274
7004         * attribute.cs (AttachTo): Always set owner for global attributes to
7005         prefined owner.
7006         
7007         * ecore.cs (Error_TypeDoesNotContainDefinition): A type location can be
7008         usefull too.
7009         
7010         * cs-parser.jay: Assembly and module attributes must precede all other
7011         elements except using clauses and extern alias declarations.
7012
7013 2007-06-13  Marek Safar  <marek.safar@gmail.com>
7014
7015         A fix for bug #81748
7016         * cs-tokenizer.cs,
7017         * expression.cs: More checks for non ISO-1 features.
7018
7019 2007-06-12  Marek Safar  <marek.safar@gmail.com>
7020
7021         A fix for bug #81807
7022         * statement.cs(Switch.TableSwitchEmit): Define null label when it's not
7023         present inside switch statement and it is required by nullable check.
7024
7025 2007-06-12  Marek Safar  <marek.safar@gmail.com>
7026
7027         A fix for bug #81840
7028         * ecore.cs (SimpleName.ResolveAsTypeStep): Look for non-generic type
7029         when type matching fails.
7030         
7031         * namespace.cs: Tiny error message change.
7032
7033 2007-06-12  Marek Safar  <marek.safar@gmail.com>
7034
7035         * decl.cs (CheckAbstractAndExtern): Moved to MemberCore for easier error
7036         reporting. Added automatic property check.
7037         
7038         * class.cs: Updated after CheckAbstractAndExtern relocation.
7039         (AEventPropertyAccessor.GetSignatureForError): Customized.
7040         
7041 2007-06-11  Marek Safar  <marek.safar@gmail.com>
7042
7043         * class.cs (DefineBaseTypes): Base type can be undefined.
7044         
7045         * ecore.cs (TypeLookup): Minor refactoring.
7046         (DoResolveAsTypeStep): Removed redundant check.
7047
7048         * namespace.cs (Lookup): Removed redundant check.
7049                 
7050         * rootcontext.cs (BootstrapCorlib_ResolveType): Uses normal 
7051         ResolveAsTypeTerminal step.
7052         (BootstrapCorlib_*): Simplified.
7053         (PopulateCoreType): Core types can be now external.
7054
7055 2007-06-07  Marek Safar  <marek.safar@gmail.com>
7056
7057         * anonymous.cs (VerifyExplicitParameterCompatibility): Add flag to do
7058          verification only.
7059          (InferTypeArguments): Infers anonymous expression type arguments.
7060          (Compatible): Split to Compatible and InferTypeArguments. 
7061         
7062         * lambda.cs: Updated.
7063
7064 2007-06-08  Marek Safar  <marek.safar@gmail.com>
7065
7066         * anonymous.cs (AnonymousContainer): Marked as compiler generated.
7067
7068 2007-06-07  Raja R Harinath  <harinath@gmail.com>
7069
7070         Fix #80477, cs0135-2.cs, cs0135-3.cs
7071         * statement.cs (ToplevelBlock.ProcessParameters): Add parameter
7072         names to the "known" variables list.
7073         (Block.CheckInvariantMeaningInBlock): Handle the fact the
7074         parameter names are also "known".
7075         (Block.CheckError136): Remove.
7076         (ExplicitBlock.CloneTo): New.  Set 'known_variables' in target to
7077         null.
7078
7079 2007-06-07  Marek Safar  <marek.safar@gmail.com>
7080
7081         * ecore.cs (MethodGroupExpr.OverloadResolve): Print full method definition.
7082
7083 2007-06-06  Marek Safar  <marek.safar@gmail.com>
7084
7085         * ecore.cs (SimpleName.Emit): Emitting unresolved simple name is
7086         internal error not an user error.
7087          
7088         * expression.cs (IsApplicable): Refactored to make debugging easier.
7089
7090         * support.cs: More tricks for non-mono runtimes.
7091         
7092         * typemanager.cs (CoreLookupType): Made public.
7093         (InitSystemCore): All linq specific stuff moved to linq.cs
7094
7095 2007-06-05  Marek Safar  <marek.safar@gmail.com>
7096
7097         * typemanager.cs (CSharpSignature): One more missing build-in types
7098         replacement.
7099         More tricks for non-mono runtime.
7100
7101 2007-06-05  Raja R Harinath  <harinath@gmail.com>
7102
7103         * statement.cs (Block.CheckError136_InParents): Remove.
7104         (Block.AddVariable): Use GetParameterInfo instead.
7105         (ToplevelBlock.ProcessArguments): Likewise.
7106
7107 2007-06-04  Raja R Harinath  <rharinath@novell.com>
7108
7109         * statement.cs (ToplevelBlock.CloneTo): New.  Copy over parameter
7110         information too.
7111         (ToplevelBlock.GetParameterInfo): Split out of ...
7112         (ToplevelBlock.GetParameterRefernce): ... this.
7113         (ToplevelBlock.ParameterMap): Remove.
7114         * expression.cs (ParameterReference): Update to use
7115         ToplevelParameterInfo.
7116
7117         * statement.cs (ToplevelBlock.ProcessParameters): Workaround some
7118         regression.
7119
7120         * flowanalysis.cs (FlowBranching.CheckOutParameters): Move ...
7121         * statement.cs (ToplevelBlock.CheckOutParameters): ... here.
7122
7123         * statement.cs (ToplevelBlock.ResolveMeta): Move CS0136 checks ...
7124         (ToplevelBlock.ProcessParameters) ... here.
7125         (ToplevelBlock..ctor): Invoke it.
7126
7127         * statement.cs (ToplevelBlock.ResolveMeta): Add sanity checks for
7128         new parameters.
7129
7130         * statement.cs (IKnownVariable): New interface.
7131         (LocalInfo): Implement it.
7132         (ToplevelParameterInfo): New class.
7133         (ExplicitBlock.AddKnownVariable): Use IKnownVariable.
7134         (ExplicitBlock.GetKnownVariable): Likewise.  Rename from
7135         GetKnownVariableInfo.
7136
7137 2007-06-03  Raja R Harinath  <harinath@gmail.com>
7138
7139         Partly speed up CS0136 error checks.
7140         * statement.cs (ExplicitBlock.GetKnownVariableInfo): Remove
7141         'recurse' parameter.
7142         (Block.DoCheckError136): Only check errors in parameters.  Move
7143         local variable checks ...
7144         (Block.AddVariable): ... here, and ...
7145         (ToplevelBlock.ResolveMeta): ... here.
7146
7147 2007-06-02  Raja R Harinath  <harinath@gmail.com>
7148
7149         * statement.cs (Block.IsChildOf): Remove.
7150
7151         * statement.cs (Statement.Clone): Move special case code ...
7152         (Block.CloneTo): ... here.
7153
7154 2007-05-29  Raja R Harinath  <rharinath@novell.com>
7155
7156         * statement.cs (ToplevelBlock.container): Remove field.  It's
7157         redundant with 'Parent'.
7158         (ToplevelBlock.ContainerBlock): Remove accessor.
7159         (ToplevelBlock..ctor): Update to changes.  Register anonymous
7160         child with parent here, ...
7161         * cs-parser.jay (end_anonymous): ... not here.  Don't modify
7162         current_block.
7163         (start_anonymous): Don't save current_block.
7164         (top_current_block): Remove.
7165
7166         * statement.cs (Block.Flags): Remove IsExplicit and IsToplevel flags.
7167         (Block.Resolve): Update to changes.
7168         (Block..ctor): Move setting of "correct" 'Toplevel'
7169         and 'Explicit' fields to ...
7170         (ExplicitBlock..ctor, ToplevelBlock..ctor): ... here.
7171
7172 2007-05-27  Raja R Harinath  <harinath@gmail.com>
7173
7174         Kill Block.Implicit
7175         * statement.cs (Block.Implicit): Remove.
7176         (Block): Update to changes.
7177         * flowanalysis.cs: Likewise.
7178
7179         Mildly speed up CheckInvariantMeaningInBlock
7180         * statement.cs (ExplicitBlock.AddKnownVariable): Move here from Block.
7181         Recursively call AddKnownVariable to all enclosing blocks.
7182         (ExplicitBlock.GetKnownVariableInfo): Move here from Block.
7183         Remove recursive calls.
7184         (Block): Update to changes.
7185
7186         New ExplicitBlock invariants
7187         * statement.cs (Block.Explicit): New field.  It points to the
7188         immediately enclosing non-implicit block.
7189         (Block..ctor): Maintain the invariant.
7190         * cs-parser.jay: Take advantage of invariant.
7191
7192         Introduce ExplicitBlock
7193         * statement.cs (ExplicitBlock): New.
7194         (ToplevelBlock): Derive from it.
7195         (Block.Flags.IsExplicit): Rename from '...Implicit' and invert
7196         sense of flag.
7197         (Block.Implicit): Update to changes.
7198         * cs-parser.jay: Update to changes.
7199
7200         Remove unused field
7201         * codegen.cs (EmitContext.IsLastStatement): Remove.
7202         * statement.cs (Block.DoEmit): Update to changes.
7203
7204 2007-05-25  Raja R Harinath  <rharinath@novell.com>
7205
7206         * cs-parser.jay: Use 'start_block' and 'end_block' rather than
7207         modifying current_block directly.
7208
7209 2007-05-23  Scott Peterson  <lunchtimemama@gmail.com>
7210         
7211         * class.cs: Implemented automatic properties (C# 3.0)
7212           Thanks to Marek for the help.
7213
7214 2007-05-23  Raja R Harinath  <rharinath@novell.com>
7215
7216         * flowanalysis.cs (VariableInfo.SetAssigned): When noting a
7217         variable as assigned, note also that all its components are
7218         assigned too.
7219         (MyBitVector.SetRange): New.  Function to set multiple bits to true.
7220
7221 2007-05-19  Marek Safar  <marek.safar@gmail.com>
7222
7223         * anonymous.cs, class.cs: Emit Compiler generated attribute when
7224         member is marked as compiler generated.
7225         
7226         * decl.cs (MemberCore): Refactored ModFlags into property.
7227
7228         * modifiers.cs: Add new modifier (COMPILER_GENERATED).
7229         (Check): Check only accessibility modifiers.
7230
7231 2007-05-18  Raja R Harinath  <rharinath@novell.com>
7232
7233         Track all assignable slots in one bit array
7234         * statement.cs (ToplevelBlock.ParameterMap): Convert into array.
7235         (ToplevelBlock.ResolveMeta): Don't create a VariableMap.  Move
7236         logic from VariableMap constructor here.  Use the same 'offset'
7237         variable that's later used for computing offsets of local
7238         variables.
7239         * flowanalysis.cs (UsageVector.parameters): Remove.
7240         (UsageVector): Update to changes.
7241         (VariableMap): Remove.
7242
7243         Avoid creating ParameterMap in every block
7244         * statement.cs (Block.ParameterMap): Move ...
7245         (ToplevelBlock.ParameterMap): ... here.
7246         (ToplevelBlock.ResolveMeta): Create VariableMap for parameters
7247         only once.
7248         * flowanalysis.cs (FlowBranching.param_map): Remove.
7249         (FlowBranching.UsageVector): Update to changes.
7250         (FlowBranchingToplevel.CheckOutParameters): Likewise.
7251
7252         * statement.cs (Block.CloneTo): Clone Toplevel field too.
7253
7254         * expression.cs (ParameterReference): Distinguish between block
7255         where parameter was referenced and declared.
7256
7257 2007-05-18  Marek Safar  <marek.safar@gmail.com>
7258
7259         * flowanalysis.cs, statement.cs: Put back improved error handling.
7260
7261 2007-05-15  Scott Peterson  <lunchtimemama@gmail.com>
7262         
7263         * assign.cs:
7264         * expression.cs:
7265           Imporved object and collection initialization (C# 3.0).
7266
7267 2007-05-15  Marek Safar  <marek.safar@gmail.com>
7268
7269         A fix for bug #81380
7270         * expression.cs (Is.DoResolve): Only value types have constant `is'
7271         behaviour.
7272
7273 2007-05-15  Raja R Harinath  <rharinath@novell.com>
7274
7275         * statement.cs (ToplevelBlock.child): Remove.
7276
7277 2007-05-15  Raja R Harinath  <harinath@gmail.com>
7278
7279         Rationalize ResolveMeta: refactoring
7280         (Block.ResolveMeta): Remove wrong or superfluous comments.  Carve
7281         out constant handling code into ...
7282         (Block.DoResolveConstants): ... this.
7283
7284         Rationalize ResolveMeta: kill local_map
7285         * statement.cs (Block.local_map, Block.LocalMap): Remove.
7286         (Block.AssignableSlots): New.
7287         (Block.ResolveMeta): Make protected.  Don't create a VariableMap
7288         for locals -- move code from VariableMap here.  Avoid unnecessary
7289         allocations.
7290         * flowanalysis.cs (FlowBranching.local_map): Remove.
7291         (FlowBranching..ctor): Use Block.AssignableSlots.
7292         (VariableMap): Remove unused constructors.
7293
7294 2007-05-11  Raja R Harinath  <rharinath@novell.com>
7295
7296         * Makefile [PROFILE=net_2_0_bootstrap]: Add special-case rules.
7297
7298 2007-05-11  Marek Safar  <marek.safar@gmail.com>
7299
7300         * typemanager.cs (IsFriendAssembly): Should not be called for building
7301         assembly.
7302
7303 2007-05-09  Marek Safar  <marek.safar@gmail.com>
7304
7305         * literal.cs (NullConstant): Print null in all cases.
7306         
7307         * expression.cs (Binary.ResolveOperator): Implemented delegate
7308          comparison based on C# 2.0 changes.
7309
7310 2007-04-28  Scott Peterson  <lunchtimemama@gmail.com>
7311
7312         This code is contributed under the MIT X11 license
7313         
7314         The following enables support for several C# 3.0 language features:
7315         
7316         * cs-tokenizer.cs: Added support for the "var" keyword.
7317         
7318         * ecore.cs: Refactored TypeLookupExpression.DoResolveAsTypeStep().
7319           Added VarExpr class to facilitate type inferencing.
7320         
7321         * class.cs: Added IDictionary field AnonymousTypes to TypeContainer
7322           to support anonymous types.
7323         
7324         * assign.cs: Added support for type inferencing and initialization.
7325         
7326         * anonymous.cs: Added AnonymousClass class to enable anonymous types.
7327         
7328         * expression.cs: Added implicit array support to ArrayCreation.
7329           Added 5 types and 1 interface:
7330           
7331           IInitializable                Implementing classes can inject initializing
7332                                         statements after object instantiation.
7333           
7334           Initializer                   Stores data for object initialization.
7335           
7336           AnonymousType                 An expression for anonymous types.
7337           
7338           AnonymousTypeParameter        Stores data about an anonymous type's field.
7339           
7340           NewInitialize                 An expression for object initialization.
7341           
7342           CollectionInitialize          An expression for collection initialization.
7343         
7344         * statement.cs: Added "var" keyword support to the foreach, using, and fixed
7345           statements.
7346
7347 2007-05-06  Marek Safar  <marek.safar@gmail.com>
7348
7349         A fix for bug #81500
7350         * cs-tokenizer.cs: Add special handling for coalescing operator.
7351
7352 2007-05-06  Marek Safar  <marek.safar@gmail.com>
7353
7354         A fix for bug #81529
7355         * attribute.cs (GetAttributeUsage): AttributeUsage attribute inherits
7356         its value from base class until it is redefined.
7357
7358 2007-05-02  Raja R Harinath  <rharinath@novell.com>
7359
7360         Fix regression in cs0631-3.cs
7361         * cs-parser.jay (operator_declarator): Add opt_attributes to error
7362         fallback.  Make error fallback catch more cases.
7363
7364 2007-05-01  Miguel de Icaza  <miguel@novell.com>
7365
7366         * cs-parser.jay: Allow parameters in operator declarations to have
7367         attributes. 
7368
7369 2007-04-27  Miguel de Icaza  <miguel@novell.com>
7370
7371         * statement.cs (If.CloneTo): Only clone the FalseStatement if it
7372         exists. 
7373
7374         * lambda.cs (ContextualReturn.Resolve): An expression is valid
7375         inside the ContextualReturn, it does not have to be an
7376         ExpressionStatement. 
7377
7378 2007-04-24  Miguel de Icaza  <miguel@novell.com>
7379
7380         * lambda.cs (ContextualReturn.Resolve): if the return type is not
7381         set, set it.
7382
7383 2007-04-23  Miguel de Icaza  <miguel@novell.com>
7384
7385         * anonymous.cs (AnonymousContainer): split the virtual Resolve
7386         method in two methods: ResolveNoDefine and Resolve.
7387
7388         ResolveNoDefine will stop just after ResolveTopBlock has been
7389         called.   
7390
7391         Resolve will then continue by creating a method and issuing the
7392         call to method.Define ().
7393
7394         (AnonymousMethod): Split and implement the new Resolve and
7395         ResolveNoDefine as well.
7396
7397         * lambda.cs (LambdaExpression): Split the anonymous method
7398         resolution code into a separate routine (CoreCompatibilityTest)
7399         from DoCompatibleTest.
7400
7401         (LambdaExpression.TryBuild): New method, this method tries to
7402         build the LambdaExpression with the given set of types to be used
7403         as the types for the various parameters of the lambda expression. 
7404
7405         If the compilation succeed with the given types, the infered type
7406         of the Anonymous method is returned, otherwise null is returned.
7407
7408 2007-04-23  Marek Safar  <marek.safar@gmail.com>
7409
7410         A fix for bug #81414
7411         * delegate.cs: Better fix, moved ApplyAttributes from Define to Emit.
7412
7413 2007-04-22  Miguel de Icaza  <miguel@novell.com>
7414
7415         * cs-tokenizer.cs: Change various identifiers here from the
7416         camelCasing to the recommended Linux-like style for instance
7417         variables from the Coding Guidelines. 
7418
7419 2007-04-19  Martin Baulig  <martin@ximian.com>
7420
7421         * convert.cs
7422         (Convert.ImplicitReferenceConversionCore): Allow conversions from
7423         System.Enum to System.ValueType.
7424
7425 2007-04-13  Martin Baulig  <martin@ximian.com>
7426
7427         Rewrote implicit reference conversions.  We need to distinguish
7428         between implicit reference conversions (13.1.4) and implicit
7429         boxing conversions (13.1.5).
7430
7431         According to the spec, there's an an implicit conversion
7432         "From a one-dimensional array-type S[] to IList<T> and base
7433         interfaces of this interface, provided there is an implicit
7434         reference conversion from S to T."  Note that this does not
7435         include boxing conversions.
7436
7437         * convert.cs
7438         (Convert.ImplicitTypeParameterBoxingConversion): New method.
7439         (Convert.ImplicitReferenceConversion): Split into
7440         ImplicitReferenceConversionCore() and
7441         ImplicitBoxingConversionExist().
7442         (Convert.ImplicitReferenceConversionExists): Use the new
7443         ImplicitReferenceConversionCore() and ImplicitBoxingConversionExists().
7444
7445 2007-04-12  Martin Baulig  <martin@ximian.com>
7446
7447         * convert.cs (Convert.ImplicitReferenceConversion): Move the
7448         `TypeManager.null_type' checks up to the top of the method.
7449
7450 2007-04-11  Marek Safar  <marek.safar@gmail.com>
7451
7452         A fix for bug #81350
7453         * class.cs, decl.cs, ecore.cs, namespace.cs: The optimization for private
7454         extension methods.
7455
7456 2007-04-11  Martin Baulig  <martin@ximian.com>
7457
7458         * statement.cs (Foreach.CollectionForeach.ProbeCollectionType):
7459         Use `TypeManager.GetInterfaces(t)' rather than `t.GetInterfaces()'
7460         to make this work for generic classes; fixes #79561.
7461
7462 2007-04-11  Martin Baulig  <martin@ximian.com>
7463
7464         * expression.cs (As): Add support for nullable types; fixes #79371.
7465
7466 2007-04-11  Martin Baulig  <martin@ximian.com>
7467
7468         * doc.cs (DocUtil.GetSignatureForDoc): Don't crash if
7469         `type.FullName' is null; fixes #80243.
7470
7471 2007-04-11  Martin Baulig  <martin@ximian.com>
7472
7473         * expression.cs (Invocation.IsApplicable): Don't modify the method
7474         if type inference succeeded, but the method was not applicable.
7475         Fixes #81250.
7476
7477 2007-04-10  Marek Safar  <marek.safar@gmail.com>
7478
7479         A fix for bug #81324
7480         * namespace.cs (Namespace.LookupExtensionMethod): Always inspect both
7481         internal and external namespaces containers.
7482
7483 2007-04-10  Martin Baulig  <martin@ximian.com>
7484
7485         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Use
7486         TypeManager.DropGenericMethodArguments() so we also call
7487         IMethodData.SetMemberIsUsed() for generic methods.  Fixes #80357.
7488
7489 2007-04-10  Martin Baulig  <martin@ximian.com>
7490
7491         * iterators.cs (Iterator.CreateIterator): Don't crash if
7492         `method.ReturnType' is null.  This happens if something went wrong
7493         while resolving that typ (we already reported an error in this case).
7494
7495 2007-04-10  Martin Baulig  <martin@ximian.com>
7496
7497         * expression.cs (New.DoResolve): Don't call CheckComImport() on
7498         generic interfaces; report the CS0144 directly.
7499
7500 2007-04-10  Martin Baulig  <martin@ximian.com>
7501
7502         * ecore.cs (MemberExpr.ResolveMemberExpr): If `left' is a
7503         `TypeExpr', call ResolveAsTypeTerminal() on it; fixes #81180.
7504
7505 2007-04-10  Martin Baulig  <martin@ximian.com>
7506
7507         * expression.cs (New.DoEmitTypeParameter): Fix #81109.
7508
7509 2007-04-09  Raja R Harinath  <rharinath@novell.com>
7510
7511         A better fix
7512         * flowanalysis.cs (UsageVector.MergeChild): Handle child.Block == null.
7513         * statement.cs: Use KillFlowBranching only in ResolveUnreachable.
7514
7515         Fix #81338
7516         * statement.cs (For.Resolve): If resolution fails, use
7517         KillFlowBranching.
7518
7519 2007-04-08  Marek Safar  <marek.safar@gmail.com>
7520
7521         * anonymous.cs (MakeName): Make faster and zero-based.
7522         (VerifyExplicitParameterCompatibility): Back to mode where generic
7523         parameter is ignored.
7524         (AnonymousMethodMethod.Emit): Decorate method as compiler generated.
7525
7526         * class.cs (EmitType): Method can emit another new method.
7527
7528         * cs-tokenizer.cs (IsLinqEnabled): Fixes static cctor race.
7529
7530         * driver.cs: Updated.
7531
7532         * lambda.cs: Reuse predefined empty parameters.
7533
7534         * parameter.cs: Updated
7535
7536         * support.cs: Implemented InflateTypes.
7537
7538         * typemanager.cs (GetFullName): Don't use FullName as it can be null.
7539         (InitSystemCore): Introduced to isolate 3.0 dependencies.
7540
7541 2007-04-03  Martin Baulig  <martin@ximian.com>
7542
7543         Fix #80632.
7544
7545         * statement.cs (Foreach.CollectionForeach.TryType): Use a custom
7546         version of TypeManager.IsOverride() which also works with generic
7547         types.  
7548
7549 2007-04-03  Martin Baulig  <martin@ximian.com>
7550
7551         Fix #81044.
7552
7553         * convert.cs
7554         (Convert.ExplicitReferenceConversion): We need to cast when
7555         converting from IList<T> to S[].
7556
7557 2007-04-01  Marek Safar  <marek.safar@gmail.com>
7558
7559         * decl.cs (FindExtensionMethods): Consider all candidates with same name
7560         at this level.
7561         
7562         * expression.cs (MemberAccess.DoResolve): Cache resolved expression.
7563
7564 2007-03-31  Marek Safar  <marek.safar@gmail.com>
7565
7566         * anonymous.cs (AnonymousMethodExpression.Compatible): Handles both
7567         argument and return type inferring.
7568
7569         * codegen.cs (InferReturnType): Flag whether return can be inferred.
7570         (ReturnType): Turned to property.
7571
7572         * statement.cs (Return): Implemented return type inferring.
7573
7574         * support.cs (ReflectionParameters): Use local types if possible.
7575
7576 2007-03-30  Raja R Harinath  <rharinath@novell.com>
7577
7578         * flowanalysis.cs (FlowBranching.Reachability): Remove.
7579         (FlowBranching.UsageVector): Update to changes.
7580
7581         Prepare to kill 'Reachability'
7582         * flowanalysis.cs (UsageVector): Remove 'Reachability' from
7583         argument of constructor.
7584
7585 2007-03-29  Raja R Harinath  <rharinath@novell.com>
7586
7587         Prepare to kill 'Reachability'
7588         * flowanalysis.cs (UsageVector.is_unreachable): New.
7589         (UsageVector): Update to maintain 'is_unreachable' in parallel to
7590         'reachability', and verify they're consistent.
7591
7592         Fix #81121
7593         * expression.cs (New.EmitStatement): Handle type parameters here too.
7594
7595 2007-03-29  Martin Baulig  <martin@ximian.com>
7596
7597         Fix #79148.
7598
7599         * anonymous.cs
7600         (ScopeInfo.ctor): Use `Modifiers.PUBLIC' if we're a nested
7601         CompilerGeneratedClass.
7602         (ScopeInfo.EmitScopeInstance): Make this protected.
7603         (CapturedVariable.EmitInstance): Use `Ldarg_0' if
7604         `ec.CurrentAnonymousMethod.Scope == Scope'.
7605
7606         * statement.cs (Block.ScopeInfo): Make this a property.
7607
7608 2007-03-27  Raja R Harinath  <harinath@gmail.com>
7609
7610         Prepare to kill 'Reachability'
7611         * flowanalysis.cs (FlowBranching.Reachability): Make class private.
7612         (FlowBranching.UsageVector.Reachability): Remove property.
7613         (FlowBranching.UsageVector.IsUnreachable): New property.
7614         (FlowBranching.UsageVector.ResetBarrier): New.
7615         (FlowBranching.UsageVector, FlowBranchingLabeled): Update to changes.
7616         * codegen.cs, statement.cs: Update to changes.
7617
7618 2007-03-27  Martin Baulig  <martin@ximian.com>
7619
7620         Fix #81209.
7621
7622         * decl.cs
7623         (DeclSpace.LookupNestedTypeInHierarchy): Correctly handle nested
7624         generic types.
7625
7626 2007-03-26  Raja R Harinath  <rharinath@novell.com>
7627
7628         * flowanalysis.cs (FlowBranching.Reachability): Use a boolean
7629         instead of TriState.  Remove all mention of TriState.
7630
7631         * flowanalysis.cs (FlowBranching.Reachability): Prepare to be
7632         replaced by a boolean.  Add boolean 'is_unreachable' field, check
7633         and maintain invariants.
7634
7635 2007-03-25  Marek Safar  <marek.safar@gmail.com>
7636
7637         * anonymous.cs: Restored checks disabled for uninflated anonymous methods.
7638
7639 2007-03-25  Marek Safar  <marek.safar@gmail.com>
7640
7641         * expression.cs: Stop using obsolete 2.0 opcodes.
7642
7643 2007-03-25  Marek Safar  <marek.safar@gmail.com>
7644
7645         * enum.cs (EnumMember.Define): Fixed regression and slowdown caused by
7646         one of the latests Martin's fixes.
7647
7648 2007-03-23  Miguel de Icaza  <miguel@novell.com>
7649
7650         * expression.cs: On BigEndian systems, swap the bytes, temporary
7651         solution until we get a new bitconverter class.
7652
7653 2007-03-23  Martin Baulig  <martin@ximian.com>
7654
7655         Fix #81158.
7656
7657         * decl.cs (MemberCache.AddMembers): Add generic methods both as
7658         "Method" and "Method`1".  Normally, a cache lookup is done on the
7659         "Method" form (ie. without the generic arity), but this one makes
7660         lookups on the full form work as well.
7661
7662 2007-03-22  Raja R Harinath  <rharinath@novell.com>
7663
7664         * flowanalysis.cs (Reachability): Reorganize slightly, and remove
7665         unused properties.
7666
7667 2007-03-20  Bill Holmes  <billholmes54@gmail.com>
7668         * class.cs: 
7669         Added 2 MemberCoreArrayList objects, ordered_explicit_member_list and
7670         ordered_member_list, to TypeBuilder to store members to be defined
7671         in the order they were parsed in.
7672         - ordered_explicit_member_list contains all properties indexers
7673           and methods that are defined as explicit implementation of an
7674           interface or base class.
7675         - ordered_member_list contains all properties indexers and methods
7676           that are not defined as explicit implementation of an interface
7677           or base class.
7678
7679         Removed MethodArrayList and IndexerArrayList from TypeBuilder.  The 
7680         functionality in these removed classes has been replaced with 
7681         ComputeIndexerName, EmitIndexerName, HasEqualss, HasGetHashCode, and 
7682         CheckEqualsAndGetHashCode members defined and called in the TypeBuilderClass.
7683
7684         Adding CheckForDuplications to PropertyBase.PropertyMethod and calls
7685         to CheckForDuplications inside GetMethod and SetMethod Define Method
7686         to handle method property and indexer name conflicts.
7687
7688         Fixes #79434
7689
7690         All code is contributed under the MIT/X11 license.
7691
7692 2007-03-20  Martin Baulig  <martin@ximian.com>
7693
7694         * class.cs (TypeContainer.Interfaces): Removed; they're now
7695         included in `TypeContainer.Types'.
7696
7697 2007-03-20  Martin Baulig  <martin@ximian.com>
7698
7699         Fix #77963, #80314 and #81019.  Added gtest-317, ..., gtest-320.
7700
7701         * class.cs (TypeContainer.CreateType): New public method.  This is
7702         now called before DefineType() to create the TypeBuilders.
7703         (TypeContainer.DefineType): Don't create the TypeBuilder here; it
7704         has already been created by CreateType().
7705         (TypeContainer.DefineTypeBuilder): Renamed into CreateTypeBuilder();
7706         don't resolve our base classes here; this has been moved into
7707         DefineBaseTypes().  We're now called from CreateType().
7708         (TypeContainer.DefineBaseTypes): New private method; resolve our
7709         base classes here.  We're now called from DefineType().
7710
7711         * rootcontext.cs
7712         (RootContext.ResolveTree): Call TypeContainer.CreateType() on all
7713         our types first to create all the TypeBuilders.  After that, call
7714         TypeContainer.DefineType() on all the types which'll resolve their
7715         base classes and setup the resolve order.
7716
7717 2007-03-20  Martin Baulig  <martin@ximian.com>
7718
7719         * class.cs (TypeContainer.Enums): Removed; they're now included in
7720         `TypeContainer.Types'.  
7721
7722 2007-03-20  Martin Baulig  <martin@ximian.com>
7723
7724         * class.cs
7725         (TypeContainer.DefineType): Don't call ResolveMembers() here.
7726         (TypeContainer.DoResolveMembers): Call DefineType() on our
7727         `compiler_generated' classes; moved here from DefineNestedTypes().
7728
7729         * rootcontext.cs
7730         (RootContext.ResolveTree): Call ResolveMembers() on all
7731         TypeContainer's in the `type_container_resolve_order'.
7732
7733 2007-03-19  Marek Safar  <marek.safar@gmail.com>
7734
7735         * class.cs: Use corlib to handle InternalMethodImplAttribute.
7736
7737 2007-03-17  Marek Safar  <marek.safar@gmail.com>
7738
7739         * class.cs (EventFieldAccessor.EmitMethod): Don't override existing
7740         implementation flags.
7741
7742 2007-03-17  Marek Safar  <marek.safar@gmail.com>
7743
7744         * class.cs: More optimizations for type parameters.
7745
7746 2007-03-15  Marek Safar  <marek.safar@gmail.com>
7747
7748         * anonymous.cs (AnomymousMethod): Can be now hosted in generic container.
7749
7750         * ecore.cs, parameter.cs: More common code for both corlibs.
7751
7752         * typemanager.cs (IsGenericMethod): Simplified.
7753
7754 2007-03-15  Raja R Harinath  <rharinath@novell.com>
7755
7756         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
7757         'returns'.
7758         * statement.cs, iterators.cs, lambda.cs: Update to changes.
7759
7760         * statement.cs (Lock.Resolve): Invoke 'ec.NeedReturnLabel'
7761         unconditionally.  Simplify explanation.
7762         (Try.Resolve, Using.Resolve): Likewise.
7763
7764 2007-03-15  Martin Baulig  <martin@ximian.com>
7765
7766         Fix #80731.
7767
7768         * decl.cs (DeclSpace): If we're a partial class, use our
7769         `PartialContainer's `TypeParameters' and `CurrentTypeParameters'.
7770
7771 2007-03-15  Raja R Harinath  <rharinath@novell.com>
7772
7773         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
7774         'throws'.
7775         (FlowBranching.UsageVector): Update to changes.
7776         (FlowBranching.MergeSiblings): Likewise.
7777         * statement.cs: Likewise.
7778
7779 2007-03-15  Martin Baulig  <martin@ximian.com>
7780
7781         Fix #79302.
7782
7783         * decl.cs
7784         (MemberCache): Added a special .ctor for type parameters.
7785
7786         * typemanager.cs
7787         (TypeManager.MemberLookup_FindMembers): `TypeParameter' now has a
7788         `MemberCache'.  
7789
7790 2007-03-09  Martin Baulig  <martin@ximian.com>
7791
7792         * enum.cs (Enum): Make this a TypeContainer.
7793         (EnumMember): Derive from `Const'.
7794
7795         * const.cs
7796         (Const.DoResolveValue): New protected virtual method; move most of
7797         the functionality of ResolveValue() here so we can override it in
7798         `EnumMember'.
7799         (Const.CreateConstantReference): Make this virtual.
7800
7801         * class.cs (Kind): Add `Kind.Enum'.
7802         (TypeContainer.Emit): Don't emit the enums here; they're already
7803         in the `RootContext.typecontainer_resolve_order'.
7804
7805         * rootcontext.cs (RootContext.EmitCode): Don't emit the enums
7806         here; they're already in the `typecontainer_resolve_order'.
7807
7808         * ecore.cs (EnumConstant.ConvertImplicitly): Add
7809         TypeManager.DropGenericTypeArguments().
7810
7811         * typemanager.cs
7812         (TypeManager.CSharpEnumValue): Add DropGenericTypeArguments().
7813         (TypeManager.IsEnumType): Likewise.
7814         (TypeManager.EnumToUnderlying): Likewise.
7815         (TypeManager.IsEqual): Add support for enums.
7816
7817 2007-03-12  Raja R Harinath  <rharinath@novell.com>
7818
7819         * typemanager.cs (InitCoreTypes) [NET_2_0]: Allow
7820         DefaultParameterValueAttribute to be undefined, say if System.dll
7821         is not referenced.
7822
7823 2007-03-11  Marek Safar  <marek.safar@gmail.com>
7824
7825         * ecore.cs, parameter.cs, typemanager.cs: Another gmcs fix to work with
7826         any mscorlib.
7827
7828 2007-03-10  Marek Safar  <marek.safar@gmail.com>
7829
7830         * class.cs, parameter.cs: Unified parameters verification.
7831
7832 2007-03-08  Martin Baulig  <martin@ximian.com>
7833
7834         * cs-parser.jay (constructor_header): Pass the location to the
7835         newly created TopLevelBlock.
7836
7837 2007-03-07  Martin Baulig  <martin@ximian.com>
7838
7839         * statement.cs (Block.Resolve): Don't crash on error; bug #80715.
7840
7841 2007-03-06  Miguel de Icaza  <miguel@novell.com>
7842
7843         * convert.cs (ExplicitReferenceConversionExists): Sync this method
7844         with the changes from David, fixes the build.
7845
7846 2007-03-05  David Mitchell  <dmitchell@logos.com>
7847
7848         * convert.cs: Implement From System.Collecitons.Generic.IList<T>
7849         and its base interfaces to a one-dimensional array type S[],
7850         provided there is an implicit or explicit reference conversion
7851         from S to T.
7852
7853 2007-03-03  Marek Safar  <marek.safar@gmail.com>
7854
7855         * cs-tokenizer.cs: Implemented basic linq grammar.
7856
7857         * driver.cs: Set linq lang version on demand.
7858
7859 2007-02-26  Marek Safar  <marek.safar@gmail.com>
7860
7861         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
7862
7863 2007-02-25  Marek Safar  <marek.safar@gmail.com>
7864
7865         * attribute.cs: Replaced DefinePInvoke in favor of S.R.E implementation
7866         (Fixes #80455)
7867
7868         * class.cs (InterfaceMemberBase): Share common `extern' modifier checks
7869         here.
7870         Check property and event extern attributes.
7871
7872         * codegen.cs (ModuleClass): HasDefaultCharSet when module defined global
7873         charset.
7874
7875 2007-02-24  Marek Safar  <marek.safar@gmail.com>
7876
7877         A fix for bug #80407
7878         * ecore.cs: Don't report ambiguity error when methods have same parent.
7879
7880 2007-02-23  Marek Safar  <marek.safar@gmail.com>
7881
7882         A fix for bug #80878
7883         * class.cs, cs-parser.jay: Event property can host anonymous methods.
7884
7885 2007-02-22  Marek Safar  <marek.safar@gmail.com>
7886
7887         * attribute.cs: Enable ExtensionAttribute presence test.
7888
7889 2007-02-22  Marek Safar  <marek.safar@gmail.com>
7890
7891         * class.cs: Warn about missing GetHashCode only when Equals is override.
7892
7893         * decl.cs: Check accessibility of type arguments.
7894
7895         * typemanager.cs: Correctly report nullable array.
7896
7897 2007-02-20  Marek Safar  <marek.safar@gmail.com>
7898
7899         * class.cs, report.cs: Capture more details when things go wrong.
7900
7901 2007-02-20  Marek Safar  <marek.safar@gmail.com>
7902
7903         A fix for bug #80650
7904         * cs-parser.jay: Anonymous container starts at constructor declaration
7905         and not at block beginning because it has to be usable in constructor
7906         initializer.
7907
7908         * statement.cs: Use context location and not block one for error reporting.
7909
7910 2007-02-18  Marek Safar  <marek.safar@gmail.com>
7911
7912         A fix for bug #78712
7913         * class.cs.cs, decl.cs, ecore.cs: LookupAnyGeneric inspects nested types
7914         too.
7915
7916 2007-02-18  Marek Safar  <marek.safar@gmail.com>
7917
7918         A fix for bug #80493 by Atsushi Enomoto
7919         * cs-parser.jay: Ignore invalid attribute target.
7920
7921 2007-02-18  Marek Safar  <marek.safar@gmail.com>
7922  
7923         * cs-tokenizer.cs: Ignore '\0' as white space character.
7924
7925 2007-02-17  Miguel de Icaza  <miguel@novell.com>
7926
7927         * cs-parser.jay: Add support for lambda expressions to the mcs
7928         compiler as well.
7929
7930         * lambda.cs: Only clone when we are probing, not on the final call
7931         (Compatible is the final call). 
7932
7933         * statement.cs (CloneContext): Introduce class to provide block
7934         remapping during clone.
7935
7936         All statements Clone themselves now.
7937
7938         (Clone): special handling for blocks, when we clone a block, we
7939         register the block inside this routine, as children of the block
7940         might trigger a lookup. 
7941         
7942         * expression.cs: Add support for CloneContext in all expressions. 
7943         
7944 2007-02-17  Marek Safar  <marek.safar@gmail.com>
7945  
7946         A fix for bug #80493
7947         * statement.cs: Report ambiguous warning when interfaces are not related.
7948
7949 2007-02-15  Marek Safar  <marek.safar@gmail.com>
7950
7951         C# 3.0 extension methods.
7952
7953         * attribute.cs (Error_MisusedExtensionAttribute): Extension attribute
7954         cannot be used directly.
7955
7956         * class.cs (Class.Emit): Emit extension attribute if any class method
7957         is extension method.
7958         (Method.Define): Add basic extension method validation conditions.
7959         (Method.Emit): Emit extension attribute for method.
7960
7961         * codegen.cs (AssemblyClass): Emit extension attribute if at least one
7962         extension method exists. Currently we follow same approach as Microsoft
7963         does, emit even if a method or a class are private but this can change
7964         later.
7965
7966         * cs-parser.jay: Add handling of `this' keyword in method parameters
7967         context.
7968
7969         * decl.cs (DeclSpace.IsStaticClass): New property.
7970         (MemberCache.FindExtensionMethods): Looks for extension methods with
7971         defined name and extension type.
7972
7973         * doc.cs: Updated after OverloadResolve changes.
7974
7975         * driver.cs: Add new soft reference to System.Core.dll.
7976
7977         * ecore.cs (MethodLookup): Can return only MethodGroupExpr.
7978         (ExtensionMethodGroupExpr): Represents group of extension methods.
7979
7980         * expression.cs (Invocation): Moved methods BetterConversion, MoreSpecific,
7981         BetterFunction, IsOverride, IsAncestralType, OverloadResolve
7982         to MethodGroupExpr and made non-static for easier customization.
7983         (Invocation.DoResolve): Add extension method lookup when no standard
7984         method was found.
7985         (MemberAccess.DoResolve): Try extension methods if no member exists.
7986
7987         * modifiers.cs: Add METHOD_EXTENSION modifier.
7988
7989         * namespace.cs (RegisterExtensionMethodClass): Register class namespace
7990         as well as candidate extension type.
7991         (ComputeNamespaces): When assembly constains extension methods registers
7992         them.
7993         (Namespace.RegisterExternalExtensionMethodClass): Register type for later
7994         extension method lookup.
7995         (Namespace.LookupExtensionMethod): Looks for extension method in this
7996         namespace.
7997         (NamespaceEntry.LookupExtensionMethod): Does extension methods lookup to
7998         find a method which matches name and extensionType.
7999
8000         * parameter.cs (Parameter): Add This modifer.
8001         (HasExtensionMethodModifier): New property.
8002         (Resolve): Add extension parameter check.
8003         (ModFlags): turned to property to exclude this modifier as it is not real
8004         parameter modifier.
8005         (Parameters): Implemented ExtensionMethodType and HasExtensionMethodType.
8006
8007         * support.cs (ParameterData): Add ExtensionMethodType.
8008         (ReflectionParameters): Implemented ExtensionMethodType interface property.
8009
8010         * typemanager.cs: Add type and ctor extension attribute type.
8011
8012 2007-02-15  Miguel de Icaza  <miguel@novell.com>
8013
8014         * report.cs (DisableErrors, EnableErrors): used to prevent error
8015         output when we are "trying" to compile various methods with
8016         different types. 
8017
8018         * ecore.cs (Expression): Add Clone method that calls the virtual
8019         CloneTo method.  The current CloneTo method in Expression throws
8020         an exception so we can track down all the places where this must
8021         be implemented (not using abstract, because that would be a lot of
8022         up-front-work before we can start testing the implementation
8023         idea). 
8024
8025         Important: we only need Clone capabilities for expressions created
8026         by the parser, as the expressions we will be cloning are
8027         expressions in the pre-resolved state.   This vastly simplifies
8028         the work required. 
8029         
8030         (SimpleName): Add CloneTo that does nothing.
8031         (EmptyCast): Add CloneTo.
8032         
8033         * expression.cs (Binary): Implement CloneTo.
8034         (Invocation.IsApplicable): Store the current ec in
8035         EmitContext.TempEc and restore it on return.  This is used so we
8036         do not have to sprinkle hundres of methods with an extra
8037         EmitContext, we know that the only user is the lambda expression
8038         ImplicitConversionExists code. 
8039         
8040         (Argument): Add Cloning capabilities.
8041         (LocalVariableReference, ParenthesizedExpression, Unary, Probe,
8042         Cast, Conditional, ArrayCreation, InvocationOrCast, Invocation,
8043         ArglistAccess, ArgList, TypeOf, SizeOf, CheckedExpr,
8044         UnCheckedExpr, ElementAccess, BaseAccess, BaseIndexerAccess,
8045         IndexerAccess): Add Clone capability.
8046
8047         (LocalVariableReference, This): TODO: needs cloned Block mapping.
8048
8049         (Argument): Add cloning capability.
8050
8051         * assign.cs (Assign): Implement CloneTo.
8052
8053         * anonymous.cs (ImplicitStandardConversionExists): Make virtual.
8054         
8055         * lambda.cs (ImplicitStandardConversionExists): Implement lambda
8056         version by calling Convert with the EmitContext (that we are
8057         currently storing in ec, this is not great, but will do for now,
8058         to avoid passing EmitContext parameters to hundreds of functions
8059         that do not need them now).
8060
8061         (SetExpression): Remove, it is not needed.
8062         
8063         (ContextualReturn): Implement CloneTo.
8064
8065         * statement.cs (Statement): Implement cloning infrastructure,
8066         similar to expressions.
8067
8068         (Block): Partial implementation of Clone for statements.
8069
8070         (Return): Implement clone.
8071         
8072         * constant.cs (Constant.CloneTo): New method, does nothing.
8073
8074         * codegen.cs (TempEc): Add a static EmitContext as a temporary
8075         solution, until we decide how to exactly do this.  
8076         
8077 2007-02-14  Marek Safar  <marek.safar@gmail.com>
8078  
8079         A fix for bug #80493
8080         * class.cs (FindOutBaseMethod): When the base accessor does not exist and
8081         a property is override we need to use second accessor.
8082
8083 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8084  
8085         A fix for bug #80418
8086         * attribute.cs, class.cs: Use correct calling conventions for pinvoke
8087         methods.
8088
8089 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8090
8091         Another fix for bug #80749
8092         * pending.cs: Abstract class has priority over interfaces.
8093
8094 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8095
8096         Another fix for bug #80749
8097         * pending.cs: Abstract class has priority over interfaces.
8098
8099 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8100
8101         Another fix for bug #80749
8102         * pending.cs: Abstract class has priority over interfaces.
8103
8104 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8105
8106         Another fix for bug #80749
8107         * pending.cs: Abstract class has priority over interfaces.
8108
8109 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8110
8111         * class.cs Better error message.
8112
8113         * driver.cs: Add shorter versions of -optimize option.
8114
8115 2007-02-13  Martin Baulig  <martin@ximian.com>
8116
8117         * class.cs (Constructor.Emit): Check the return value of
8118         ec.ResolveTopBlock() and return on error.
8119
8120 2007-02-13  Raja R Harinath  <rharinath@novell.com>
8121
8122         * ecore.cs (Error_InvalidExpressionStatement): Add a comma to error
8123         message to fix error message regression.
8124
8125 2007-02-12  Marek Safar  <marek.safar@gmail.com>
8126
8127         * delegate.cs: Delegate creation expression cannot be of Nullable type.
8128
8129 2007-02-12  Marek Safar  <marek.safar@gmail.com>
8130
8131         A fix for bug #80749
8132         * assign.cs (FieldInitializer): FieldInitializer has to keep track of
8133         its parent container.
8134
8135         * class.cs (DefineFieldInitializers): Each initializer can has different
8136         resolve context.
8137
8138         * const.cs: Updated.
8139
8140 2007-02-11  Miguel de Icaza  <miguel@novell.com>
8141
8142         * lambda.cs (LambdaExpression.Compatible): Remove some early code,
8143         now all the heavy lifting to check that embedded statements or
8144         expressions have the right form is done in the ContextualReturn.
8145
8146         (ContextualReturn): New class.  
8147
8148         * ecore.cs (Error_InvalidExpressionStatement): Make a helper
8149         method that can be invoked to report 201, so we do not replicate
8150         this everywhere.
8151
8152         * cs-parser.jay: Reuse Error_InvalidExpressionStatement.
8153         
8154         * cs-tokenizer.cs (xtoken): Correctly compute the column, it was
8155         treating tabs as spaces. 
8156
8157 2007-02-09  Marek Safar  <marek.safar@gmail.com>
8158
8159         A fix for bug #80315 by martin.voelkle@gmail.com (Martin Voelkle)
8160         * assign.cs: Use full implicit conversion for right side check.
8161
8162 2007-02-09  Marek Safar  <marek.safar@gmail.com>
8163
8164         * statement.cs (Switch): Switch over boolean type is not standardized.
8165
8166 2007-02-08  Marek Safar  <marek.safar@gmail.com>
8167
8168         A fix for bug #80755
8169         * decl.cs (FindBaseEvent): Don't use method cache for events.
8170
8171 2007-02-07  Marek Safar  <marek.safar@gmail.com>
8172
8173         * cs-parser.jay: Better syntax error handling.
8174
8175         * ecore.cs, enum.cs, statement.cs, typemanager.cs: Print enum member name
8176         instead of underlying type value.
8177
8178 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8179
8180         * driver.cs: Check define identifier before is registered.
8181
8182         * namespace.cs: Use existing error message.
8183
8184         * report.cs: New warning.
8185
8186 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8187
8188         A fix for bug #80742
8189         * expression.cs: Delegate Invoke method can be called directly.
8190
8191 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8192
8193         A fix for bug #80676
8194         * class.cs (IsEntryPoint): The Main method can have params modifier.
8195
8196 2007-02-04  Miguel de Icaza  <miguel@novell.com>
8197
8198         * parameter.cs (Parameter, Parameters): Add Clone method.
8199
8200         * anonymous.cs (Compatible): Turn method into virtual method, so
8201         LambdaExpression can implement a different behavior.
8202
8203         (CompatibleChecks, VerifyExplicitParameterCompatibility): Factor
8204         out the basic checking here, so it can be used by
8205         LambdaExpressions.
8206         
8207         * lambda.cs: Introduce "Compatible" function that will do the
8208         heavy lifting.
8209
8210 2007-02-02  Marek Safar  <marek.safar@gmail.com>
8211
8212         * attribute.cs: Unified one error message.
8213
8214         * class.cs (Class): Use type attributes and not properties to test static
8215         class.
8216         (IsEntryPoint): Don's pass local variable.
8217
8218         * convert.cs: Removed duplicate check.
8219
8220         * decl.cs, doc.cs, ecore.cs (LookupType): Renamed to LookupNamespaceOrType.
8221
8222         * driver.cs: Don't crash when soft reference does not exist.
8223
8224         * namespace.cs (EnsureNamespace): Renamed to RegisterNamespace.
8225         (UsingEntry): Removed redundant allocation.
8226
8227         * parameter.cs: Add fast path for type parameters.
8228
8229         * support.cs: Don't allocate attribute when it's not used.
8230
8231 2007-01-30  Miguel de Icaza  <miguel@novell.com>
8232
8233         * anonymous.cs
8234         (AnonymousMethodExpression.ImplicitStandardConversionExists): turn
8235         this into a virtual method, so we can override it in LambdaExpression.
8236
8237         * driver.cs: Improve diagnostics in case of failure. 
8238
8239         * cs-tokenizer.cs: Instead of trying to parse a type and a name,
8240         write a function that is slightly more complex and that parses:
8241
8242         type identifier [, type identifier]* )
8243
8244         The old function would return incorrectly a OPEN_PARENS_LAMBDA for
8245         this expression:
8246
8247                 (canEmpty ? i >= 0 : i > 0)
8248
8249 2007-01-30  Raja R Harinath  <rharinath@novell.com>
8250
8251         * cs-tokenizer.cs (parse_namespace_or_typename): Don't throw an
8252         exception on possibly valid code.
8253
8254 2007-01-29  Raja R Harinath  <rharinath@novell.com>
8255
8256         * cs-tokenizer.cs (is_punct) ['<']: Update to changes in
8257         Push/PopPosition.
8258         (parse_opt_type_arguments): Remove.  It's almost the same as
8259         parse_less_than.
8260         (parse_namespace_or_typename): Use parse_less_than.
8261
8262 2007-01-28  Miguel de Icaza  <miguel@novell.com>
8263
8264         * cs-tokenizer.cs: Typo fix, its not GMCS_SOURCES but GMCS_SOURCE,
8265         this bug took a few hours to find, because the state saved and
8266         restored by PushPosition and PopPosition was ignoring the state of
8267         parse_generic_less_than.
8268
8269         I can also now remove the handling of OP_LT and OP_GT, this solves
8270         the big mistery.
8271         
8272         * cs-tokenizer.cs: store the location for the ARROW token, we use
8273         that in the parser.
8274
8275         (PushPosition, PopPosition): save/restore also `current_token',
8276         restore `parse_generic_less_than' (was missing).
8277
8278         (parse_opt_type_arguments): use parse_type, not
8279         parse_namespace_or_typename to parse types.
8280
8281         * lambda.cs: Empty new file, will eventually have the lambda
8282         expression implementation.
8283
8284         * lambda.test: used to test the internal tokenizer. 
8285
8286         * report.cs (FeatureIsNotISO1): Rename from
8287         FeatureIsNotStandardized, because it was about the language level
8288         (1 vs 2) it was not about standarization.
8289
8290         (FeatureRequiresLINQ): New.
8291
8292         * support.cs (SeekableStreamReader): Only require that the reader
8293         is a TextReader, not a StreamReader, so we can plug StringReader. 
8294
8295         * cs-tokenizer.cs (parse_type_and_parameter): Returns true if at a
8296         given position in the input stream the following tokens can be
8297         parsed as a type followed by an identifier.
8298
8299         (is_punct): after a '(' if parse_type_and_parameter returns true,
8300         then return a special token OPEN_PARENS_LAMBDA which is used to
8301         avoid reduce/reduce errors in the grammar for the
8302         lambda_expression rules.
8303
8304         (parse_type): implement a type parser inside the
8305         tokenizer, the parser only returns true or false depending on
8306         whether the input at a given position can be parsed as a type.
8307
8308         (peek_token): new method used during type parsing.
8309
8310 2007-01-28  Raja R Harinath  <rharinath@novell.com>
8311
8312         Fix #80531
8313         * anonymous.cs (ScopeInfo.InflateParameters): New.
8314         (AnonymousContainer.Resolve): Use it to redirect types of
8315         delegate parameters.
8316
8317 2007-01-27  Raja R Harinath  <rharinath@novell.com>
8318
8319         Fix #80530
8320         * expression.cs (Error_InvalidArguments): Don't use two different
8321         messages for CS1503.  Use ExtraInformation and
8322         SymbolRelatedToPreviousError instead.
8323
8324         Fix #80358
8325         * decl.cs (DeclSpace.initialize_type_params): Don't access
8326         'type_params' of a partial class directly.
8327
8328 2007-01-26  Miguel de Icaza  <miguel@novell.com>
8329
8330         * constant.cs: Removed a handful of out-of-range checks that were
8331         not necessary. 
8332
8333 2007-01-25  Marek Safar  <marek.safar@gmail.com>
8334
8335         * expression.cs (CheckUselessComparison): Add additional check for char
8336         constants.
8337
8338         * namespace.cs: Fixed typo.
8339
8340 2007-01-23  Miguel de Icaza  <miguel@novell.com>
8341
8342         * constant.cs: Bloat removal, CheckRange and CheckUnsigned are
8343         gone, instead we inline the test, preventing the needless casts to
8344         longs, ulongs and doubles for the parameters, avoiding calls to
8345         methods that overchecked stuff, and instead inlined things
8346         nicely. 
8347
8348 2007-01-20  Marek Safar  <marek.safar@gmail.com>
8349
8350         * cs-parser.jay: Better parameter error handling.
8351
8352 2007-01-17  Marek Safar  <marek.safar@gmail.com>
8353
8354         A fix for bug #80368, #80522
8355         * expression.cs (ArrayCreation.only_constant_initializers): Indicates
8356         whether array initializer contains constants only.
8357         (ArrayCreation.Emit): Use better formula to decide when
8358         are array initializers for static initialization.
8359         (ArrayCreation.EmitDynamicInitializers): When the array is small enough we
8360         have to emit even constants otherwise they are pre-initialized.
8361
8362 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
8363             Raja R Harinath  <rharinath@novell.com>
8364
8365         Fix emit order of 'get' vs. 'set'.
8366         * support.cs (Accessors): New.
8367         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
8368         Note the order in which accessors are declared in the source.
8369         * class.cs (PropertyBase.DefineGet, PropertyBase.DefineSet): New.
8370         Refactored from Property.Define and Indexer.Define.
8371         (PropertyBase.DefineAccessors): New helper that calls the above in
8372         appropriate order as noted by the parser.
8373         (Property.Define, Indexer.Define): Update to changes.
8374         (PropertyBase.SetMethod.PropertyInfo): Don't return a null.
8375
8376 2007-01-17  Raja R Harinath  <rharinath@novell.com>
8377
8378         Fix cs0029-6.cs and gcs0029-2.cs (regression)
8379         * ecore.cs (EmptyConstantCast.ConvertImplicitly): Check that
8380         there's an implicit conversion from the current type to the target
8381         type before converting the underlying constant.
8382
8383 2007-01-16  Marek Safar  <marek.safar@gmail.com>
8384
8385         * const.cs (ResolveValue): Updated after constant conversion was made more
8386         generic.
8387
8388         * constant.cs (GetAttributableValue): constant to object conversion is
8389         used for attributes only.
8390         (IntConstant.ConvertImplicitly): Moved from convert to be used in all
8391         constant conversions.
8392         (LongConstant.ConvertImplicitly): Ditto.
8393
8394         * convert.cs (ImplicitNumericConversion): Extracted constant bussiness.
8395         (ImplicitConversionStandard): Handle constant conversion as extra step.
8396         It solves the issue when constant conversion was called indirectly like
8397         inside array initializer and constant folding was skipped.
8398
8399         * literal.cs (NullLiteral.ConvertImplicitly): Fixed an issue exposed by
8400         this change.
8401
8402         * statement.cs(ImplicitConversionStandard): Updated after constant
8403         conversion was made more generic.
8404
8405 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
8406
8407         * expression.cs (As.DoResolve): Use GenericConstraints instead of
8408         Constraints, solves the problem where the compiler incorrectly
8409         reported that a type parameter was not constrained to a class (Bug
8410         80518)
8411
8412 2007-01-14  Marek Habersack  <grendello@gmail.com>
8413
8414         * doc-bootstrap.cs: Fix a compilation problem in the bootstrap phase.
8415
8416 2007-01-14  Marek Safar  <marek.safar@gmail.com>
8417
8418         A fix for bug #80368
8419         * assign.cs (FieldInitializer): New class implements field
8420         initializer statement.
8421
8422         * attribute.cs: Update after FieldMember rename.
8423
8424         * class.cs (PropertyBasedMember): New common class for property based
8425         types.
8426         (InterfaceMemberBase): New base class for all members which can be used as
8427         an interface members.
8428         (MethodCore): Moved really common code to InterfaceMemberBase.
8429         (Method.Define): Equal and GetHasCode detection is relevant for methods
8430         only.
8431         (MethodData.Define): Don't assume that public event implements an
8432         interface automatically.
8433         (MethodData.DefineMethodBuilder): Issue an error even if only extern
8434         modifier is used.
8435         (MemberBase): Moved all interface speficic code to InterfaceMemberBase.
8436         (FieldMember): Merged with FieldBase.
8437         (EventProperty.AEventPropertyAccessor): New specialization to check whether
8438         event extern modifier can be used.
8439         (EventField.EventFieldAccessor): Moved event field specific code here.
8440         (Event.AllowedModifiers): Even event can be extern.
8441         (Event.FindOutBaseMethod): New override specific to events.
8442         (Indexer.parameters): Reintroduce parameters because base class holds
8443         only properties common data.
8444         (Indexer.CheckForDuplications): Indexers are threated as methods so we
8445         need do extra parameters check.
8446
8447         * const.cs: Update after FieldMember rename.
8448
8449         * decl.cs (MemberCache.FindBaseEvent): New method.
8450
8451         * doc.cs (GetMethodDocCommentName): Accept parameters as extra argument
8452         to reflect that indexer is now derived from PropertyBased.
8453
8454         * ecore.cs (GetMemberType): Made public.
8455         (EventExpr.ResolveMemberAccess): Use right event cache and checks for
8456         obsolete event.
8457
8458         * flowanalysis.cs, statement.cs: Update after FieldMember rename.
8459         
8460         * typemanager.cs (CSharpSignature): Correctly print event accessors.
8461         (RegisterEvent): Removed.
8462         (RegisterPrivateFieldOfEvent): Renamed to RegisterEventField.
8463         (GetPrivateFieldOfEvent): Renamed to GetEventField.
8464
8465 2007-01-11  Raja R Harinath  <rharinath@novell.com>
8466
8467         Fix #80249
8468         * statement.cs (CollectionForeach.TryType): Prefer generic
8469         GetEnumerator over non-generic variant.  Fix code to follow comments.
8470
8471 2007-01-09  Raja R Harinath  <rharinath@novell.com>
8472
8473         Fix #80446
8474         * support.cs (ReflectionParameter): Don't use an invalid index on
8475         the generic parameter data.
8476
8477 2007-01-08  Miguel de Icaza  <miguel@novell.com>
8478
8479         * driver.cs: Just add a tiny bit of infrastructure.
8480
8481 2007-01-02  Marek Safar  <marek.safar@gmail.com>
8482
8483         * class.cs (VerifyMembers): Fixed an crash reported on mono mailing list
8484         where field type is struct from current assembly.
8485         
8486         * ecore.cs (EnumConstant.AsString): Report an enum member name whenever
8487         it is possible.
8488
8489 2007-01-02  Marek Safar  <marek.safar@gmail.com>
8490
8491         A fix for bug #80381
8492         * attribute.cs (AttributeTester.RegisterNonObsoleteType): Registers
8493         the core types.
8494
8495         * namespace.cs (GlobalRootNamespace.LookupTypeReflection): Better error
8496         messages.
8497         (Namespace.LookupType): Always use core types from corlib when speficied.
8498
8499         * report.cs: A new warning.
8500
8501         * rootcontext.cs (BootstrapCorlib_ResolveInterface,
8502         BootstrapCorlib_ResolveClass): Register type as non-obsolete type.
8503         (ResolveCore): Add missing System.Runtime.InteropServices._Attribute.
8504
8505         * typemanager.cs (CoreLookupType): Register type as non-obsolete type.
8506         (InitCoreTypes): Set expression type of object_type and value_type
8507         immediately after lookup.
8508
8509 2007-01-01  Miguel de Icaza  <miguel@novell.com>
8510
8511         * cs-tokenizer.cs: Accept Pc class characters (Connector
8512         Punctuation) as valid identifiers.  Fixes #78259
8513
8514         * expression.cs (Invocation.DoResolve): Moved the check for the
8515         use of `this' for doing method calls to the Invocation resolution
8516         step, after overload resolution has taken place instead of doing
8517         the check at the low-level `This.DoResolve' level.
8518
8519         The `This.DoResolve'(appens before overload resolution, so it has
8520         no way of knowing if the method that will be called will be
8521         instace or static, triggering an erroneous report for cs0188 (Bug
8522         78113).
8523
8524         We now do the check for instance method invocations after we know
8525         what method will be called.
8526
8527         (This.CheckThisUsage): Move the actual use of this structure
8528         checking into its own method and expose it. 
8529
8530         * Everywhere that called Error_ValueCannotBeConverted: pass a new
8531         EmitContext.
8532
8533         Exceptions: Null.ConvertImplicitly,
8534         Constant.ImplicitConversionRequired as there are too many call
8535         sites for passing the ec. 
8536
8537         * ecore.cs (Expression.Error_ValueCannotBeConverted): Take an
8538         EmitContext, if the value is null, then we do not try to provide
8539         the extra information from the error (If a userdefined conversion
8540         exists, as UserDefinedConversion requires a non null-EmitContext).
8541
8542         Fixes: #80347
8543
8544 2006-12-30  Raja R Harinath  <rharinath@novell.com>
8545
8546         * flowanalysis.cs (MyBitVector): Document some invariants.
8547         (MyBitVector.Or, MyBitVector.And): Reimplement the optimizations
8548         introduced below, and add a couple of others, 
8549
8550 2006-12-30  Marek Safar  <marek.safar@gmail.com>
8551
8552         * attribute.cs (GetMethodObsoleteAttribute): Uses new
8553         GetPropertyFromAccessor and GetEventFromAccessor.
8554         
8555         * class.cs (MethodCore.CheckBase): A new warning when obsolete member
8556         overrides non-obsolete one.
8557         (Indexer.Define): Error message has been moved to the parser.
8558
8559         * cs-parser.jay: Better syntax errors handling.
8560
8561         * delegate.cs (NewDelegate.DoResolve): Issue less confusing error message
8562         when an invocation has no arguments.
8563
8564         * ecore.cs: Removed not used caching.
8565
8566         * expression.cs (IsSpecialMethodInvocation): Reuses TypeManager
8567         implementation.
8568
8569         * report.cs: Add a new warning.
8570
8571         * support.cs (ReflectionParameters): Implements Equals, GetHashCode.
8572
8573         * typemanager.cs (enumeration_type): Removed.
8574         (CSharpSignature): Reuses IsSpecialMethod.
8575         (IsEqual): Hack for MS BCL.
8576         (GetPropertyFromAccessor): New method.
8577         (GetEventFromAccessor): New method.
8578         (IsSpecialMethod): Fixed to handle more cases.
8579
8580 2006-12-30  Marek Safar  <marek.safar@gmail.com>
8581
8582         * cs-tokenizer.cs (PreProcessDefinition, handle_preprocessing_directive):
8583         Made white spaces array static.
8584
8585         * ecore.cs (RemoveGenericArity): Optimized.
8586
8587         * flowanalysis.cs (MyBitVector.Or, MyBitVector.And): Optimized (up to
8588         10 times faster).
8589         (MyBitVector.initialize_vector): Simplified.
8590
8591 2006-12-22  Miguel de Icaza  <miguel@novell.com>
8592
8593         * ecore.cs: Am not entirely happy with this hack, but it seems to
8594         address the issue in 80257 (a small test case for
8595         CreativeDocs.NET). 
8596
8597         I set the MethodGroupExpr.Type to an internal compiler type
8598         (itself in this case) to force the resolution to take place.   Why
8599         it does not take place with a null is beyond me.
8600
8601 2006-12-20  Marek Safar  <marek.safar@gmail.com>
8602
8603         A fix for bug #80288
8604         * expression.cs (ResolveOperator): Consider user defined conversion for
8605         logical and operator too.
8606         (EmitBranchable): Optimization for logical and when full constant folding
8607         could not be applied but one operand is constant.
8608
8609 2006-12-19  Marek Safar  <marek.safar@gmail.com>
8610
8611         * class.cs (GetClassBases): Write 5 times every day, will never use
8612         FullName for error reporting.
8613
8614         * decl.cs (AsAccessible, CheckAccessLevel): Always unpack arrays first.
8615
8616 2006-12-19  Martin Baulig  <martin@ximian.com>
8617
8618         * statement.cs (LocalInfo.EmitSymbolInfo): New public method; emit
8619         the symbol file info here.
8620
8621 2006-12-18  Marek Safar  <marek.safar@gmail.com>
8622
8623         * cs-tokenizer.cs (handle_preprocessing_directive): When previous section
8624         of `elseif' is taking then following sections are not taking.
8625         Fixes an issue reported on mono mailing list.
8626
8627 2006-12-18  Marek Safar  <marek.safar@gmail.com>
8628
8629         A fix for bug #80300
8630         * cs-tokenizer.cs (PreProcessDefinition): Do no define/undefine when
8631         a caller is not taking.
8632
8633 2006-12-18  Raja R Harinath  <rharinath@novell.com>
8634
8635         * anonymous.cs: Change several TypeContainer declarations to DeclSpace.
8636         (CompilerGeneratedClass): Use parent.PartialContainer unconditionally.
8637         (RootScopeInfo, AnonymousMethodMethod): Update to changes.
8638         * iterator.cs: Change several TypeContainer declarations to DeclSpace.
8639         * class.cs: Update to changes.
8640
8641 2006-12-17  Marek Safar  <marek.safar@gmail.com>
8642
8643         A fix for bug #79934
8644         * anonymous.cs (CompilerGeneratedClass): Register class in a shared
8645         partial container.
8646
8647         * class.cs (ResolveMembers): Register an iterator in current container and
8648         not in shared one.
8649
8650 2006-12-16  Raja R Harinath  <rharinath@novell.com>
8651
8652         Fix test-543.cs
8653         * expression.cs (VerifyArgumentsCompat): Allow zero arguments to
8654         satisfy a params annotated parameter.
8655
8656 2006-12-16  Marek Safar  <marek.safar@gmail.com>
8657
8658         A fix for bug #77014
8659         * expression.cs (Invocation.BetterFunction): Fixed to cope with dynamic
8660         paramters correctly and not rely on hacks in Parameters class.
8661         (Invocation.IsParamsMethodApplicable): Changed to accept params parameter
8662         at any possition.
8663         (Invocation.VerifyArgumentsCompat): Ditto.
8664         (Invocation.EmitArguments): Changed to correctly emit params arguments at
8665         any possition.
8666
8667         * parameter.cs (HasParams): Don't assume that params is the last one.
8668
8669         * support.cs (ReflectionParameters.ctor): Look for params attribute
8670         correctly.
8671         (ReflectionParameters.ParameterType): Removed hack when we returned last
8672         parameter for out of range parameters.
8673         (ParameterName, ParameterModifier): Ditto.
8674
8675 2006-12-14  Marek Safar  <marek.safar@gmail.com>
8676
8677         A fix for bug #79987
8678         * decl.cs (DeclSpace.VerifyClsCompliance): External names cache is null
8679         when assembly is not CLS compliant but type is. I have no idea why is this
8680         allowed.
8681
8682         * typemanager.cs (Reset): Invalidate AllClsTopLevelTypes cache.
8683
8684 2006-12-13  Miguel de Icaza  <miguel@novell.com>
8685
8686         * class.cs (ConstructorInitializer.Resolve): Allow for ":this()"
8687         in struct constructors, they are basically no-ops.
8688
8689 2006-12-12  Marek Safar  <marek.safar@gmail.com>
8690
8691         * cs-tokenizer.cs (Position): Save preprocessor status too.
8692
8693 2006-12-12  Marek Safar  <marek.safar@gmail.com>
8694
8695         A fix for bug #77794
8696         * cs-tokenizer.cs (consume_identifier): Check for correct partial context.
8697
8698 2006-12-12  Marek Safar  <marek.safar@gmail.com>
8699
8700         * cs-tokenizer.cs (get_cmd_arg): Support CR as the line terminator.
8701         Fixes #69299.
8702         (pp_expr): Report error for an invalid expression.
8703         (handle_preprocessing_directive): Simplified; add more error checking.
8704
8705 2006-12-11  Marek Safar  <marek.safar@gmail.com>
8706
8707         A fix for bug #74939
8708         * cs-tokenizer.cs (is_punct): We cannot simply disable preprocessor
8709         directives handling.
8710
8711 2006-12-10  Marek Safar  <marek.safar@gmail.com>
8712
8713         A fix for bugs #80093, and #75984
8714         * cs-tokenizer.cs (handle_preprocessing_directive): Fixed #if/#else/#endif
8715         logic, it seems to me as it worked before "by coincidence".
8716         (xtoken): Simplified to use reworked handle_preprocessing_directive.
8717         (cleanup): Enabled endif check.
8718
8719 2006-12-09  Marek Safar  <marek.safar@gmail.com>
8720
8721         A fix for bug #80162
8722         * statement.cs (CollectionForeach.TryType): Generics and non-generics
8723         enumerators are never ambiguous.
8724
8725 2006-12-08  Raja R Harinath  <rharinath@novell.com>
8726
8727         Fix #80060
8728         * cs-tokenizer.cs (parse_less_than): Recognize double-colons too.
8729
8730 2006-12-06  Marek Safar  <marek.safar@gmail.com>
8731
8732         A fix for bug #80144
8733         * class.cs (EventProperty.Define): Explicit implementation means
8734         that an even is used.
8735
8736 2006-12-06  Marek Safar  <marek.safar@gmail.com>
8737
8738         Fixes the operators implementation (part II)
8739
8740         * cfold.cs (DoConstantNumericPromotions): Renamed to
8741         DoBinaryNumericPromotions and simplified.
8742         (BinaryFold): Couple of conversion fixes; simplified.
8743
8744         * constant.cs, ecore.cs, literal.cs
8745         (ToType): Renamed to ConvertImplicitly.
8746         (Reduce): Renamed to ConvertExplicitly.
8747
8748         * class.cs, convert.cs: Updated.
8749
8750         * expression.cs: TryReduce doesn't throw an exception.
8751
8752 2006-12-01  Marek Safar  <marek.safar@gmail.com>
8753
8754         A fix for bug #80108
8755         * ecore.cs (EventExpr.EmitAddOrRemove): Don't crash when right side is not
8756         compatible.
8757
8758 2006-11-30  Marek Safar  <marek.safar@gmail.com>
8759
8760         Fixes unary operators implementation (part I)
8761         Also fixes #80026
8762
8763         * cfold.cs (Error_CompileTimeOverflow): Made internal
8764
8765         * const.cs (IConstant): Changed to use reference to constant and
8766         not constant itself.
8767         Updated IConstant implementations.
8768
8769         * constant.cs (CreateConstant): New factory method.
8770         Updated IConstant implementation.
8771
8772         * convert.cs (ImplicitStandardConversionExists): Uses compiler Equals.
8773
8774         * ecore.cs: Updated to use CreateConstantReference.
8775
8776         * enum.cs: Reflects IConstant changes.
8777
8778         * expression.cs (Unary): Reimplemented +,-,~ to conform C# standard.
8779
8780         * literal.cs (NullConstant): Change to be independently usable.
8781
8782 2006-11-29  Martin Baulig  <martin@ximian.com>
8783
8784         * class.cs (Constructor.Emit): Correctly handle anonymous methods;
8785         we need to emit the scope initializer before calling the base .ctor.
8786
8787         * anonymous.cs: Merged back from the new anonymous methods branch.
8788         (AnonymousMethodHost): Renamed to `RootScopeInfo'.
8789
8790         * expression.cs (ParameterReference.DoResolveBase): Create a
8791         "normal" ScopeInfo when capturing parameters rather than using the
8792         root scope; this makes things work with anonymous methods having
8793         parameters.
8794
8795         * statement.cs
8796         (ToplevelBlock.AnonymousMethodHost): Renamed into `RootScope'.
8797
8798 2006-11-22  Marek Safar  <marek.safar@gmail.com>
8799
8800         A fix for bug #79987
8801         * class.cs (VerifyClsCompliance): Move redundant CLS compliance attribute
8802         check to a base class.
8803         * decl.cs (VerifyClsCompliance): Warn that CLS compliance cannot be tested
8804         only when assembly has missing attribute.
8805         * report.cs: Update.
8806
8807 2006-11-21  Marek Safar  <marek.safar@gmail.com>
8808
8809         * cs-tokenizer.cs: Merged with gmcs version.
8810
8811 2006-11-20  Marek Safar  <marek.safar@gmail.com>
8812
8813         * cs-tokenizer.cs,
8814         * cs-parser.jay: Better error message when partial keyword is misplaced.
8815
8816 2006-11-19  Gert Driesen  <drieseng@users.sourceforge.net>
8817
8818         A fix for bug #79810
8819         report.cs: CS1058 only applies to 2.0 profile (gmcs).
8820         codegen.cs: on 2.0 profile, non-exception throwables are wrapped in
8821         a RuntimeWrappedException by default.
8822
8823 2006-11-18  Marek Safar  <marek.safar@gmail.com>
8824
8825         A fix for bug #79843
8826         * delegate.cs (Delegate.VerifyMethod): Fixed covariance and contravariance
8827         implementation.
8828         (DelegateCreation.Error_NoMatchingMethodForDelegate): Ditto.
8829
8830 2006-11-18  Marek Safar  <marek.safar@gmail.com>
8831
8832         * driver.cs, namespace.cs: Uses faster IndexOf version.
8833
8834 2006-11-17  Marek Safar  <marek.safar@gmail.com>
8835
8836         A fix for bug #79941
8837         * class.cs (MemberCore.IsDuplicateImplementation): Add more tricks for
8838         operators.
8839         (Operator.Define): Implicit/Explicit operator of same type is duplicate
8840         even if internal name is different.
8841         * convert.cs (GetConversionOperator): Replaced EmitContext with parentType.
8842         (UserDefinedConversion): Simplified as the operators cannot be internal.
8843         * ecore.cs (Error_ValueCannotBeConverted): Take account of user
8844         conversions.
8845         (MethodLookup): Replaced EmitContext with parentType.
8846         * expression.cs: Updated.
8847
8848 2006-11-09  Raja R Harinath  <rharinath@novell.com>
8849
8850         * driver.cs (BadAssembly): Handle all the ugliness of
8851         DefineDynamicAssembly.
8852
8853 2006-11-08  Raja R Harinath  <rharinath@novell.com>
8854
8855         Address parts of #58244 -- most of what's left is in the runtime
8856         * driver.cs (LoadAssembly): Simplify slightly.  Add CS0009 and
8857         CS1509 error checks, and handle them for all assembly loads, not
8858         just the first invocation.
8859         (LoadModule): Likewise.  Move handling of 'adder_method' ...
8860         * codegen.cs (AssemblyClass.AddModule): ... here.
8861
8862 2006-11-02  Marek Safar  <marek.safar@gmail.com>
8863
8864         * statement.cs.cs (CollectionForeach.TryType): Issue a error when
8865         IEnumerable<T> is ambiguous.
8866
8867 2006-10-31  Marek Safar  <marek.safar@gmail.com>
8868
8869         A fix for bug #67689
8870         * statement.cs.cs (CollectionForeach.TryType): Issue a warning when
8871         GetEnumerator is ambiguous.
8872
8873         * report.cs: Add new warning.
8874
8875 2006-10-29  Marek Safar  <marek.safar@gmail.com>
8876
8877         A fix for bug #78602
8878         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
8879         to protected member can be nested type.
8880
8881 2006-10-28  Marek Safar  <marek.safar@gmail.com>
8882
8883         A fix for bug #78965
8884         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
8885         to protected member must derive from current type.
8886
8887 2006-10-27  Marek Safar  <marek.safar@gmail.com>
8888
8889         assign.cs: Reuses error method.
8890
8891         ecore.cs (Expression.Error_ValueCannotBeConverted): Report a value
8892         instead of type for constants.
8893         (Expression.Error_ValueAssignment): Common error method.
8894
8895         * expression.cs (UnaryMutator.ResolveOperator): Value cannot be used
8896         for any assignment.
8897
8898 2006-10-27  Marek Safar  <marek.safar@gmail.com>
8899
8900         A fix for bug #79081
8901         * expression.cs (MemberAccess.DoResolve): Check nested type
8902         accessibility.
8903
8904 2006-10-27  Atsushi Enomoto  <atsushi@ximian.com>
8905
8906         * doc.cs : nested delegates were not handled. Fixed bug #79754.
8907
8908 2006-10-26  Marek Safar  <marek.safar@gmail.com>
8909
8910         A fix for bug #76591
8911         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous method.
8912
8913 2006-10-26  Marek Safar  <marek.safar@gmail.com>
8914
8915         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Don't allow to have
8916         type forwarder of the same type multiple times.
8917
8918 2006-10-26  Raja R Harinath  <rharinath@novell.com>
8919
8920         Fix #78820
8921         * ecore.cs (PropertyExpr.InstanceResolve): Always resolve the
8922         instance as an rvalue, even when we later resolve as an lvalue.
8923
8924 2006-10-25  Martin Baulig  <martin@ximian.com>
8925
8926         * anonymous.cs: Fix #79673.
8927
8928 2006-10-24  Marek Safar  <marek.safar@seznam.cz>
8929
8930         A fix for bug #79666
8931         expression.cs (ArrayCreation.GetAttributableValue): An initializer can be
8932         ignored when is optimized (= default value) as its value is already set.
8933
8934 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
8935
8936         A fix for bug #79724
8937         * report.cs (SymbolRelatedToPreviousError): Uses DeclSpace instead of
8938         TypeContainer for type lookup.
8939
8940 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
8941
8942         A fix for bug #79231
8943         * ecore.cs (ResolveAsBaseTerminal): Removed redundant error test.
8944         * expression.cs (OverloadResolve): Always convert type name for
8945         an error message.
8946         (ResolveNamespaceOrType): Don't confuse a nested type with any 
8947         other member.
8948
8949 2006-10-18  Martin Baulig <martin@ximian.com>
8950
8951         * anonymous.cs: Propagate the IsStatic state, fixes the crasher in banshee.
8952
8953 2006-10-17  Miguel de Icaza  <miguel@novell.com>
8954
8955         * convert.cs: Fix typo, fixes the test-535.cs, we were casting to
8956         an int32, but requesting an int64 from the conversion
8957
8958 2006-10-12  Martin Baulig  <martin@ximian.com>
8959
8960         * anonymous.cs
8961         (AnonymousContainer.Resolve): Inflate the `ReturnType'.  Fixes #79592.
8962         
8963 2006-10-12  Martin Baulig  <martin@ximian.com>
8964
8965         * statement.cs
8966         (Using.EmitLocalVariableDeclFinally): Small fix for iterators.
8967
8968 2006-10-11  Miguel de Icaza  <miguel@novell.com>
8969
8970         * convert.cs: Remove broken code: I was doing the "Existance"
8971         tests for Implicit conversions.
8972
8973 2006-10-10  Miguel de Icaza  <miguel@novell.com>
8974
8975         * convert.cs: Added one missing case in
8976         ImplicitStandardConversionExists uint64 to intptr.
8977
8978         Fixes #59800
8979         
8980         * typemanager.cs (uintptr_type): another core known type.   
8981
8982         * ecore.cs (OperatorCast): routine used to do cast operations that
8983         depend on op_Explicit.  We could change some of the Decimal
8984         conversions to use this.
8985
8986         This one has a probe mechanism that checks both types for an op_
8987         which it coudl be used to eliminate two classes: CastToDecimal
8988         and CastFromDecimal.
8989
8990         * convert.cs: Implement the conversions documented in #59800
8991         
8992 2006-10-10  Martin Baulig  <martin@ximian.com>
8993
8994         * iterators.cs (Iterator.Resolve): Call RootScope.ResolveType()
8995         before RootScope.ResolveMembers().
8996
8997         * anonymous.cs (ScopeInfo.CapturedScope.ctor): Use the child's
8998         `CurrentType' if appropriate.
8999
9000 2006-10-09  Marek Safar  <marek.safar@seznam.cz>
9001
9002         A fix for bug #78568
9003         * cs-tokenizer.cs (Deambiguate_CloseParens): Expression cannot be cast
9004         when contains binary operators.
9005         * cs-parser.jay: Updated.
9006
9007 2006-10-09  Martin Baulig  <martin@ximian.com>
9008
9009         * delegate.cs
9010         (Delegate.DefineType): Don't call TypeParameter.Resolve() here;
9011         moved that into Define() and also do the other type parameter
9012         checks there.  Fixes #79094.  Added gtest-292.cs.
9013
9014         * expression.cs
9015         (ArrayCreation.EmitDynamicInitializers): Use `etype.IsValueType'
9016         since that doesn't include type parameters; don't use `Ldelema'
9017         for type parameters.  Fixes #78980.  Added gtest-293.cs.
9018
9019 2006-10-08  Marek Safar  <marek.safar@seznam.cz>
9020
9021         A fix for #77796
9022         * convert.cs (ExplicitReferenceConversion): Only enum to enum value
9023         conversion is allowed.
9024
9025 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
9026
9027         * ecore.cs (Expression.MemberLookup): Don't register any symbol for
9028         error reporting when no error occurs.
9029
9030 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
9031
9032         * cfold.cs (ConstantFold.BinaryFold): Report an error when the conversion
9033         does not exist.
9034
9035 2006-10-06  Raja R Harinath  <rharinath@novell.com>
9036
9037         Fix #79584
9038         * class.cs (DefineTypeBuilder): Check circular dependencies before
9039         setting the parent of the TypeBuilder.
9040         (CheckRecursiveDefinition): Don't use 'BaseType', since
9041         it may not be valid until after DefineTypeBuilder.  Use
9042         'base_type' instead.
9043
9044 2006-10-04  Martin Baulig  <martin@ximian.com>
9045
9046         Merged the Anonymous Methods patch.
9047
9048         * anonymous.cs, iterators.cs: The new anonymous methods code.
9049
9050         * statement.cs (Variable): New public abstract class.
9051         (LocalInfo.Variable): New public property.
9052         (LocalInfo.ResolveVariable): New public method.
9053         (Block.Flags): Add `IsIterator'.
9054         (Block.AddVariable): Improved the CS0136 check.
9055         (Block.AnonymousChildren): New public property.
9056         (Block.AddAnonymousChild): New public method.
9057         (ToplevelBlock): Update to use the new anonymous method framework.
9058         (ToplevelBlock.ctor): `container' is now a `Block' and not a
9059         `ToplevelBlock'; this is required to correctly implement the
9060         CS0136 check.
9061         (Fixed, Using): Use `TemporaryVariable' instead of directly
9062         creating the `LocalBuilder'.
9063
9064         * parameter.cs (Parameter.ResolveVariable): New public method.
9065         (Parameters.ResolveVariable): Likewise.
9066
9067         * ecore.cs (TemporaryVariable): Use the new `Variable' framework.
9068
9069         * class.cs (TypeContainer): Replaced the `iterators' list and
9070         corresponding methods with a list of `CompilerGeneratedClass'es.
9071         (TypeContainer.ResolveMembers): New public method.
9072         (Method): `IIteratorContainer' has been replaced by
9073         `IAnonymousHost'.
9074
9075         * expression.cs (VariableReference): New public abstract base
9076         class for `LocalVariableReference', `ParameterReference' and
9077         `This'.
9078
9079         * codegen.cs (EmitContext): Removed `capture_context',
9080         `HaveCaptureInfo', `EmitScopeInitFromBlock()' and `Capture*()'.
9081         (EmitContext.EmitThis): Removed.
9082
9083         * cs-parser.jay: Replace `iterator_container' with
9084         `anonymous_host'.       
9085
9086 2006-10-04  Martin Baulig  <martin@ximian.com>
9087
9088         * generic.cs (GenericMethod): Don't make this abstract.
9089         (Constraints.Clone): Added dummy implementation.
9090
9091 2006-10-04  Raja R Harinath  <harinath@gmail.com>
9092
9093         Fix #79577
9094         * namespace.cs (LookForAnyGenericType): Avoid nullref on
9095         'declspaces'.  Avoid allocating arrays willy-nilly.
9096
9097         Fix #79553
9098         * cfold.cs (BinaryFold): Move boolean Equality and Inequality
9099         cases out of the switch.
9100
9101 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
9102
9103         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Better error
9104         message when non-generic type is used with the type arguments.
9105         * expression.cs: Updated.
9106
9107 2006-09-28  Raja R Harinath  <rharinath@novell.com>
9108
9109         Fix #79013
9110         * convert.cs (Convert.ImplicitStandardConversionExists): Avoid infloop.
9111         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
9112         Change semantics slightly.  Don't insist on having only one
9113         temporary EmptyExpression -- just throttle the creation of new ones.
9114
9115         Fix #79451
9116         * ecore.cs (Expression.MemberLookup): Enable CS0229 errors for
9117         non-interfaces too.  If no methods are found, don't try to create
9118         a MethodGroupExpr.
9119
9120 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
9121
9122         * ecore.cs (ResolveAsTypeStep): Print better error when type can be
9123         generic type.
9124
9125         * namespace.cs (Namespace.LookForAnyGenericType): New method to help
9126         us produce better error message.
9127
9128 2006-09-27  Marek Safar  <marek.safar@seznam.cz>
9129
9130         * expression.cs (Binary.ResolveOperator): Warn about a side effect
9131         of the `|' operator.
9132
9133         * report.cs: A new warning added.
9134
9135 2006-09-27  Martin Baulig  <martin@ximian.com>
9136
9137         * generic.cs (GenericMethod): Don't make this abstract.
9138
9139 2006-09-27  Martin Baulig  <martin@ximian.com>
9140
9141         * report.cs
9142         (InternalErrorException): Added overloaded ctor taking a params array.
9143
9144 2006-09-26  Marek Safar  <marek.safar@seznam.cz>
9145
9146         * class.cs, codegen.cs, const.cs, cs-tokenizer.cs, driver.cs, ecore.cs:
9147         Fixed the cases when same error was reported twice.
9148
9149         * report.cs (SymbolRelatedToPreviousError): Simplified as all our messages
9150         now report symbol information.
9151
9152 2006-09-25  Martin Baulig  <martin@ximian.com>
9153
9154         * class.cs: Completely unified with the gmcs version.
9155
9156 2006-09-25  Martin Baulig  <martin@ximian.com>
9157
9158         * typemanager.cs (TypeManager.IsNullableType): New public function.
9159         (TypeManager.IsNullableTypeOf): Likewise.
9160         (TypeManager.IsNullableValueType): Likewise.
9161
9162         * class.cs (MethodCore): Added the `GenericMethod' argument from
9163         gmcs and also unified all classes derived from `MethodCore' with gmcs.
9164
9165 2006-09-24  Raja R Harinath  <harinath@gmail.com>
9166
9167         * convert.cs: Unify with gmcs version.
9168
9169 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9170
9171         * decl.cs (DeclSpace.VerifyClsCompliance): When type has type parameters
9172         verify them as well.
9173
9174         * report.cs: New warning.
9175
9176 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9177
9178         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
9179         for anonymous block with out argument.
9180
9181 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9182
9183         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
9184         not used private events only.
9185
9186 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
9187
9188         * cfold.cs (BinaryFold): On the guest to unify empty constant cast.
9189
9190         * const.cs (Const.Define): Check for constant type.
9191         (Const.IsConstantTypeValid): Looks for valid constant types.
9192
9193         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
9194
9195         * ecore.cs (EmptyConstantCast): New common class for all constant based
9196         EmptyCast(s).
9197
9198         * expression.cs (Is.DoResolve): Handle null constant especially.
9199         (New.DoResolve): Check for new void().
9200         (MemberAccess.DoResolve): Cope with all kind of nulls.
9201
9202         * literal.cs (NullConstant): Uses EmptyConstantCast.
9203         (NullDefault): Based on EmptyConstantCast.
9204         (NullLiteral): Uses EmptyConstantCast.
9205
9206         * statement.cs (Block.ResolveMeta): Check for constant type.
9207
9208 2006-09-22  Martin Baulig  <martin@ximian.com>
9209
9210         * delegate.cs, attribute.cs: Merged with the gmcs versions.
9211
9212 2006-09-22  Raja R Harinath  <rharinath@novell.com>
9213
9214         * literal.cs (NullDefault): The type of default(IFoo) is 'IFoo',
9215         not the null type.
9216
9217         Fix part of #79451
9218         * typemanager.cs (Closure.Filter): Consider PrivateScope attributes.
9219         * decl.cs (DeclSpace.FindMemberToOverride): Likewise.  Reorganize
9220         code slightly.
9221
9222 2006-09-22  Martin Baulig  <martin@ximian.com>
9223
9224         * ecore.cs: Merged with the gmcs version.
9225
9226         * generic.cs (ConstructedType): New dummy class.
9227         (TypeArguments): Don't make this abstract.
9228
9229         * typemanager.cs
9230         (TypeManager.IsGenericTypeDefinition): New method.
9231         (TypeManager.GetGenericFieldDefinition): Moved here from gmcs.
9232
9233 2006-09-22  Raja R Harinath  <rharinath@novell.com>
9234
9235         * expression.cs (ComposedCast): Check for arrays of TypedReference
9236         before creating the type, not after.
9237
9238 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
9239
9240         * cfold.cs, const.cs, enum.cs, statement.cs: Updated
9241         after ToType change.
9242
9243         * constant.cs (Constant.ImplicitConversionRequired): Designed to used
9244         when constant must be implicitly convertible.
9245
9246         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
9247
9248         * ecore.cs (NullCast): Derives from NullConstant.
9249
9250         * expression.cs (Is.DoResolve): Removed useless variables.
9251         (Conditional.DoResolve): Quick hack for `Foo () ? null : null'.
9252         (New.Constantify): Add enum support.
9253         (MemberAccess.DoResolve): Add warning when accessing null constant or
9254         variable.
9255
9256         * generic.cs (GenericConstraints.IsReferenceType): Another dummy
9257         property.
9258
9259         * literal.cs (NullConstant): New abstract class with common
9260         functionality for all null specializations.
9261         (NullDefault): Represents default(X) when result can be
9262         reduced to null.
9263         (NullLiteral): Updated.
9264
9265         * report.cs: Add new warning.
9266
9267 2006-09-21  Martin Baulig  <martin@ximian.com>
9268
9269         * generic.cs (GenericTypeParameterBuilder): Removed this ugly hack.
9270
9271 2006-09-21  Martin Baulig  <martin@ximian.com>
9272
9273         * generic.cs (GenericConstraints): New dummy class.
9274         (Constraints): Likewise.
9275         (TypeParameter): Likewise.
9276         (TypeParameterName): Likewise.
9277         (GenericMethod): Likewise.
9278
9279         * typemanager.cs (TypeManager.GetGenericArguments): New method.
9280
9281         * decl.cs: Merged with the gmcs version.
9282
9283 2006-09-21  Raja R Harinath  <rharinath@novell.com>
9284
9285         * generic.cs (TypeParameter): Implement IMemberContainer.
9286         (GenericTypeParameterBuilder): New.  An abominable repugnant hack.
9287
9288         * rootcontext.cs: Unify with gmcs version.
9289
9290         * report.cs: Unify with gmcs version.
9291         * typemanager.cs (AddTypeParameter, LookupTypeParameter): Move
9292         from gmcs/generics.cs.
9293         * generics.cs (TypeParameter): New dummy class.
9294
9295         * support.cs: Unify with gmcs version.
9296
9297 2006-09-20  Raja R Harinath  <rharinath@novell.com>
9298
9299         * ecore.cs (MethodGroupExpr.ResolveGeneric): New dummy method.
9300         * expression.cs (MemberAccess, BaseAccess): Remove GMCS_SOURCE #ifdef.
9301
9302         * decl.cs (MemberName): Unify with gmcs, except for GetTypeExpression.
9303         * generic.cs (TypeArguments): New dummy class to help avoid #ifdefs.
9304         * mcs.exe.sources: Add generic.cs.
9305
9306         * codegen.cs: Unify with gmcs version.
9307
9308         * codegen.cs (IResolveContent.GenericDeclContainer): Copy from gmcs.
9309         (EmitContext): Add GenericDeclContainer implementation.
9310         * decl.cs (MemberCore, DeclSpace): Likewise.
9311         * namespace.cs: Remove #ifdef GMCS_SOURCE.
9312
9313         * namespace.cs (GetTypeInAssembly): Remove #ifdef GMCS_SOURCE.
9314         MCS TypeManager has a corresponding dummy method.
9315
9316 2006-09-19  Martin Baulig  <martin@ximian.com>
9317
9318         * expression.cs: Completely merged with the gmcs version.
9319
9320 2006-09-19  Martin Baulig  <martin@ximian.com>
9321
9322         * expression.cs (Invocation): Merged with the gmcs version.
9323         (ArrayAccess.GetStoreOpcode): Likewise.
9324
9325 2006-09-19  Martin Baulig  <martin@ximian.com>
9326
9327         * typemanager.cs
9328         (TypeManager.IsGenericMethod): Moved here from ../gmcs/generic.cs.
9329         (TypeManager.IsGenericMethodDefinition): Likewise.
9330
9331 2006-09-19  Martin Baulig  <martin@ximian.com>
9332
9333         * typemanager.cs
9334         (TypeManager.IsEqual): Moved the gmcs implementation here.
9335         (TypeManager.DropGenericTypeArguments): Likewise.
9336         (TypeManager.DropGenericMethodArguments): Likewise.
9337         (TypeManager.GetTypeArguments): Moved here from gmcs.
9338         (TypeManager.HasGenericArguments): Likewise.
9339
9340 2006-09-19  Martin Baulig  <martin@ximian.com>
9341
9342         * expression.cs (Binary): Merged with the gmcs version.
9343
9344 2006-09-19  Martin Baulig  <martin@ximian.com>
9345
9346         * expression.cs (Probe, As, Is): Merged with the gmcs version.
9347
9348 2006-09-19  Martin Baulig  <martin@ximian.com>
9349
9350         * typemanager.cs: Merged with the gmcs version.
9351
9352 2006-09-16  Raja R Harinath  <rharinath@novell.com>
9353
9354         * AssemblyInfo.cs [GMCS_SOURCE]: Unify with gmcs source.
9355         * driver.cs: Likewise.
9356
9357 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
9358
9359         A fix for #79401
9360         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
9361         only if parent type is class.
9362         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
9363         update.
9364
9365 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
9366
9367         * cs-parser.jay,
9368         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
9369         keywords are used.
9370         * typemanager.cs(CSharpName): Converts NullType to null.
9371
9372 2006-09-15  Martin Baulig  <martin@ximian.com>
9373
9374         * typemanager.cs
9375         (TypeManager.GetMethodName): Added mcs implementation.
9376         (TypeManager.IsEqual): Likewise.
9377
9378         * ecore.cs
9379         (SimpleName.RemoveGenericArity): Added dummy implementation.
9380
9381         * pending.cs: Merged with the gmcs version.     
9382
9383 2006-09-15  Martin Baulig  <martin@ximian.com>
9384
9385         * statement.cs: Merge with the gmcs version.
9386
9387 2006-09-15  Martin Baulig  <martin@ximian.com>
9388
9389         * statement.cs (Switch): Merge with the gmcs implementation
9390         (without nullables), which is newer.
9391
9392 2006-09-15  Martin Baulig  <martin@ximian.com>
9393
9394         * statement.cs (Block.Variables): Make this public.
9395         (ToplevelBlock.Parameters): Make this a property.
9396         (Throw.Resolve): Use `TypeManager.IsSubclassOf ()'.
9397
9398 2006-09-15  Martin Baulig  <martin@ximian.com>
9399
9400         * namespace.cs: Merge with the gmcs version.
9401
9402 2006-09-15  Martin Baulig  <martin@ximian.com>
9403
9404         * decl.cs (MemberName): Minor code cleanups.
9405
9406 2006-09-15  Martin Baulig  <martin@ximian.com>
9407
9408         * parameter.cs: Merge with the gmcs version.
9409
9410 2006-09-15  Martin Baulig  <martin@ximian.com>
9411
9412         * enum.cs: Merge with the gmcs version: 3005 is a warning in gmcs
9413         and an error in mcs.
9414
9415 2006-09-15  Martin Baulig  <martin@ximian.com>
9416
9417         * flowanalysis.cs: Merged from GMCS; added the generics code into
9418         a `GMCS_SOURCE' conditional so we can share this file.
9419
9420 2006-09-08  Martin Baulig  <martin@ximian.com>
9421
9422         * typemanager.cs (TypeManager.interlocked_type): New public field.
9423         (TypeManager.int_interlocked_compare-exchange): New public field.
9424         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
9425         enumerator types here and call InitGenericCoreTypes().
9426         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
9427         after calling InitEnumUnderlyingTypes().
9428
9429         * rootcontext.cs
9430         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
9431         `classes_second_stage'. 
9432
9433 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
9434
9435         * assign.cs, ecore.cs, expression.cs: Share error message text.
9436         * class.cs (FieldMember.Define): Check for varible of static type.
9437         * driver.cs (LoadAssembly): Uses error output for errors.
9438         * statement.cs: Updated.
9439
9440 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
9441
9442         * expression.cs (Error_OperatorCannotBeApplied): Report type instead of
9443         type instance.
9444
9445 2006-09-07  Martin Baulig  <martin@ximian.com>
9446
9447         * driver.cs
9448         (MainDriver): Revert r62663 from Marek; see #70506 for details.
9449
9450 2006-08-29  Miguel de Icaza  <miguel@novell.com>
9451
9452         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
9453         
9454 2006-08-17  Miguel de Icaza  <miguel@novell.com>
9455
9456         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
9457         #52019 and #79064, the use of the \uXXXX sequence in source code
9458         to represent unicode characters.
9459
9460 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
9461
9462         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
9463         support.
9464         * class.cs, ecore.cs, statement.cs: Merged to one error message.
9465
9466 2006-08-13  Miguel de Icaza  <miguel@novell.com>
9467
9468         * assign.cs: Catch attempts to assign to a method groups in += and
9469         report as 1656
9470
9471 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
9472
9473         A fix for #79056
9474         * cs-parser.jay: Don't destroy current array type by typeof of array's.
9475
9476 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
9477
9478         * class.cs (Method.Define): Issue a warning when generic method looks like
9479         an entry point.
9480         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
9481         as well.
9482
9483 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
9484  
9485         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
9486         looking for ctor.
9487         * decl.cs (MemberCache.FindMembers): When container is interface we need to
9488         search all base interfaces as a member can be ambiguous.
9489         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
9490         Constructor member type filter. 
9491         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
9492         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
9493         reporting for returned memberinfos.
9494         * report.cs: Updated.
9495         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
9496         version to work on all runtimes.
9497         (TypeManager.RealMemberLookup): Removed members filtering.
9498
9499 2006-08-08  Raja R Harinath  <rharinath@novell.com>
9500
9501         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
9502         (PropertyExpr.EmitAssign): Likewise.
9503         * expression.cs (Indirection.EmitAssign): Likewise.
9504         (LocalVariableReference.EmitAssign): Likewise.
9505         (ParameterReference.EmitAssign): Likewise.
9506         (Invocation.EmitArguments): Likewise.
9507         (ArrayAccess.EmitAssign): Likewise.
9508         (IndexerAccess.EmitAssign): Likewise.
9509         (This.EmitAssign): Likewise.
9510         (ConditionalLogicalOperator.Emit): Likewise.
9511
9512         Fix #79026
9513         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
9514         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
9515         leave it in after returning it.
9516         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
9517
9518 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
9519
9520         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
9521         message.
9522
9523 2006-08-03  Raja R Harinath  <rharinath@novell.com>
9524
9525         Fix cs0146-3.cs and cs0146-4.cs.
9526         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
9527         enclosing types don't depend on the current type.
9528
9529 2006-08-02  Raja R Harinath  <rharinath@novell.com>
9530
9531         Fix #77963
9532         * class.cs (TypeContainer.DoDefineMembers): Use
9533         FindBaseMemberWithSameName on Parent, since we're interested in
9534         whether we hide inherited members or not.
9535         (FindBaseMemberWithSameName): Make slightly more robust.
9536
9537         Fix the non-generic testcase from #77396
9538         * decl.cs (DeclSpace.DeclContainer): Remove override.
9539
9540         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
9541         declspaces for doppelgangers too.
9542         (UsingEntry): Implement IResolveContext.
9543         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
9544         'this' as the resolve context.
9545         (LocalAliasEntry): Likewise.
9546
9547         Implement parts of #77403
9548         * roottypes.cs (RootDeclSpace): New.  Used to represent the
9549         toplevel declaration space.  Each namespace declaration introduces
9550         a "partial" root declaretion space.
9551         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
9552         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
9553         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
9554         from 'current_namespace.SlaveDeclSpace'.
9555         (namespace_declaration): Likewise.
9556         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
9557         check.  It can't happen now.
9558         * decl.cs (DeclSpace.LookupType): Likewise.
9559         * driver.cs (MainDriver): Sanity check.
9560
9561 2006-08-01  Raja R Harinath  <rharinath@novell.com>
9562
9563         * decl.cs (DeclSpace.FindNestedType): Remove.
9564         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
9565         LookupTypeContainer to get the container of the nested type.
9566         * class.cs (TypeContainer.FindNestedType): Make non-override.
9567
9568 2006-07-31  Raja R Harinath  <rharinath@novell.com>
9569
9570         * decl.cs (DeclSpace.PartialContainer): Move field from ...
9571         * class.cs (TypeContainer.PartialContainer): ... here.
9572         (TypeContainer.AddBasesForPart): New helper.
9573         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
9574         instead.
9575         * cs-parser.jay (current_class): Convert to DeclSpace.
9576         (struct_declaration, interface_declaration, class_declaration):
9577         Use AddBasesForPart instead of .Bases directly.
9578         * const.cs, iterators.cs: Update to changes.
9579
9580 2006-07-28  Raja R Harinath  <rharinath@novell.com>
9581
9582         * class.cs (TypeContainer.AddMemberType): Rename from
9583         AddToTypeContainer.
9584         (TypeContainer.AddMember): Rename from AddToMemberContainer.
9585         (AddTypeContainer): New.  Combine AddClassOrStruct and
9586         AddInterface.
9587         (AddPartial): Update.  Add 'is_partial' argument.
9588         * roottypes.cs: Update to changes.
9589         * cs-parser.jay (push_current_class): New helper for handling
9590         current_container and current_class.
9591         (struct_declaration, interface_declaration, class_declaration):
9592         Use it.
9593
9594 2006-07-26  Raja R Harinath  <rharinath@novell.com>
9595
9596         * roottypes.cs: Rename from tree.cs.
9597
9598         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
9599         * tree.cs (Tree, ITreeDump): Remove types.
9600         * rootcontext.cs (tree, Tree): Remove fields.
9601         (root, ToplevelTypes): New.
9602         * *.cs: Update to rename.
9603
9604         * tree.cs (Tree.RecordDecl): Remove.
9605         (RootTypes.AddToTypeContainer): Record the toplevel type in its
9606         namespace here.
9607         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
9608
9609 2006-07-23  Raja R Harinath  <harinath@gmail.com>
9610
9611         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
9612         DoFlowAnalysis and OmitStructFlowAnalysis here.
9613         (ec.With): Rename from WithUnsafe and generalize.
9614         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
9615         (ec.WithFlowAnalyis): New.
9616         * ecore.cs, expression.cs, statement.cs: Update.
9617
9618 2006-07-22  Raja R Harinath  <harinath@gmail.com>
9619
9620         * statement.cs (Block.ResolveMeta): Simplify slightly.
9621
9622         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
9623         multiple boolean fields.  Convert InUnsafe, constant_check_state,
9624         check_state to flags.
9625         (CheckState, ConstantCheckState): Update.
9626         (InUnsafe): New read-only property.
9627         (FlagsHandle): Rename from CheckStateHandle and convert to handle
9628         arbitrary flags.
9629         (WithUnsafe): New helper similar to WithCheckState.
9630         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
9631         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
9632
9633 2006-07-21  Raja R Harinath  <rharinath@novell.com>
9634
9635         Make comparisons use the same IL irrespective of whether they're
9636         in a 'checked' or 'unchecked' context: one of the issues in #78899
9637         * codegen.cs (EmitContext.CheckState): Make read-only property.
9638         (EmitContext.ConstantCheckState): Likewise.
9639         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
9640         helper that implement a save/restore stack for CheckState
9641         values.  This is the only way to change check-state.
9642         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
9643         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
9644         (CheckedExpr.EmitBranchable): New forwarding method.
9645         (UnCheckedExpr): Likewise.
9646         * statement.cs (Block.ResolveMeta): Use WithCheckState.
9647         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
9648         (Checked.Resolve, checked.DoEmit): Likewise.
9649
9650 2006-07-20  Miguel de Icaza  <miguel@novell.com>
9651
9652         * anonymous.cs: Cache the resolved anonymous delegate, and return
9653         this so that the ResolveTopBlock is only triggered once, not
9654         twice.
9655
9656         Currently we trigger ResolvetopBlock twice due to a first pass of
9657         argument check compatibility, and a second pass that does the
9658         actual resolution.   
9659         
9660 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
9661
9662         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
9663         modifiers.
9664         * rootcontext.cs (Reset): Add helper_classes.
9665
9666 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
9667
9668         A fix for #78860
9669         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
9670         correctly.
9671
9672 2006-07-13  Miguel de Icaza  <miguel@novell.com>
9673
9674         * statement.cs (Lock): Handle expressions of type
9675         TypeManager.null_type specially.  Fixes #78770
9676
9677 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
9678
9679         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
9680         to an event.
9681
9682 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
9683
9684         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
9685         for accessors as well.
9686         * ecore.cs (EventExpr): Add AccessorTable.
9687
9688 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
9689
9690         A fix for #78738
9691         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
9692         for CS0122 where appropriate.
9693         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
9694         level attributes.
9695         (Filter): Assembly can be null in the case of top level attributes.
9696
9697 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
9698
9699         A fix for #78690
9700
9701         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
9702         is done at global level.
9703
9704 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
9705
9706         A fix for #77002, Implemented TypeForwarder support.
9707
9708         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
9709         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
9710         * typemanager.cs (): Add type_forwarder_attr_type.
9711
9712 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
9713
9714         * report.cs: Add CS0469 warning.
9715
9716 2006-06-21  Martin Baulig  <martin@ximian.com>
9717
9718         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
9719         the `try'-block, so we also report CS0016 etc. there.
9720
9721 2006-06-21  Martin Baulig  <martin@ximian.com>
9722
9723         * delegate.cs
9724         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
9725
9726 2006-06-21  Martin Baulig  <martin@ximian.com>
9727
9728         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
9729         also report CS1686 for parameters.
9730
9731 2006-06-21  Martin Baulig  <martin@ximian.com>
9732
9733         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
9734         instead of an error if the value is not implicitly convertible to
9735         the switch types; fixes #77964.
9736
9737 2006-06-21  Raja R Harinath  <rharinath@novell.com>
9738
9739         Fix #78673
9740         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
9741         FieldBuilder is null.
9742
9743         Fix #78662
9744         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
9745         'left' and 'right' before error-checking.
9746
9747 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
9748
9749         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
9750         Fixed bug #78601.
9751         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
9752         (FieldExpr.DoResolve): likewise.
9753         (PropertyExpr.InstanceResolve): likewise.
9754         (EventExpr.InstanceResolve): likewise. 
9755
9756 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
9757
9758         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
9759         attribute applicable tests for attribute argument.
9760
9761 2006-06-02  Raja R Harinath  <rharinath@novell.com>
9762
9763         Fix #78079
9764         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
9765         (Binary.OverloadResolve_PredefinedIntegral): New.
9766         (Binary.OverloadResolve_PredefinedFloating): New.
9767         (Binary.OverloadResolve_PredefinedString): New.
9768         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
9769         Follow the standard more closely, and treat numeric promotions in
9770         terms of overload resolution.
9771         (Binary.CheckShiftArguments): Simplify.
9772
9773 2006-06-01  Raja R Harinath  <rharinath@novell.com>
9774
9775         * flowanalysis.cs (MyBitVector): Simplify representation.
9776         (MyBitVector.Clone): Avoid allocating BitArray.
9777         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
9778         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
9779         (*): Update.  Change all references to MyBitVector.And and
9780         MyBitVector.Or to &= and |=.
9781
9782 2006-05-29  Raja R Harinath  <rharinath@novell.com>
9783
9784         Fix cs0231-[34].cs.
9785         * cs-parser.jay (formal_parameter_list): Extend the pattern below
9786         to param arguments too.
9787
9788 2006-05-26  Miguel de Icaza  <miguel@novell.com>
9789
9790         * cs-parser.jay: Catch another parsing form for arglist being
9791         followed by other arguments.  Fixes #78313.
9792
9793 2006-05-24  Raja R Harinath  <rharinath@novell.com>
9794
9795         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
9796         checking of out parameters to ...
9797         (FlowBranchingToplevel.Merge): ... here.
9798         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
9799         set, propagate the origin upward, and only complain if there was
9800         no other error.
9801         (FlowBranchingException.AddContinueOrigin): Likewise.
9802         (FlowBranchingException.AddReturnOrigin): Likewise.
9803         (FlowBranchingException.AddGotoOrigin): Likewise.       
9804
9805 2006-05-23  Raja R Harinath  <rharinath@novell.com>
9806
9807         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
9808         unreachable, skip it.
9809         (FlowBranchingException.Merge): Always propagate jumps, even if
9810         the finally block renders subsequent code unreachable.
9811
9812 2006-05-18  Raja R Harinath  <rharinath@novell.com>
9813
9814         Fix #77601
9815         * statement.cs (Goto.Resolve): Move responsibility for resolving
9816         'goto' to FlowBranching.AddGotoOrigin.
9817         (Goto.SetResolvedTarget): New.  Callback to set the
9818         LabeledStatement that's the target of the goto.
9819         (Goto.DoEmit): Use Leave instead of Br when crossing an
9820         unwind-protect boundary.
9821         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
9822         LookupLabel and adjust to new semantics.
9823         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
9824         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
9825         Goto.SetResolvedTarget to update target.
9826         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
9827         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
9828         AddBreakOrigin & co.  Delay propagation until ...
9829         (FlowBranchingException.Merge): ... this.
9830
9831         * statement.cs (Block.Resolve): Always depend on flow-branching to
9832         determine unreachability.  Kill workaround that originally emitted
9833         only one statement after an "unreachable" label (see infloop in
9834         test-515.cs).
9835
9836         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
9837         This is still "wrong", but anything better would probably need a
9838         multi-pass algorithm.
9839         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
9840         usage vector.  Force current usage vector to be reachable, to
9841         optimistically signify backward jumps.
9842         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
9843         detected.
9844         (FlowBranchingLabeled.Merge): New.  If no backward jump was
9845         detected, return the original salted-away usage vector instead,
9846         updated with appropriate changes.  Print unreachable warning if
9847         necessary.
9848         * statement.cs (Block.Resolve): Don't print unreachable warning on
9849         a labeled statement.
9850
9851 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
9852
9853         * driver.cs: Pass filename without path to AssemblyBuilder's 
9854         AddResourceFile. Fixes bug #78407.
9855
9856 2006-05-17  Raja R Harinath  <rharinath@novell.com>
9857
9858         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
9859         * flowanalysis.cs (FlowBranchingLabeled): ... here.
9860         (FlowBranching.MergeChild): Overwrite
9861         reachability information from Labeled branchings too.
9862
9863 2006-05-16  Raja R Harinath  <rharinath@novell.com>
9864
9865         * statement.cs (Goto.Resolve): Merge jump origins here ...
9866         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
9867
9868         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
9869         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
9870         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
9871         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
9872         here, ...
9873         * statement.cs (Goto.Resolve): ... not here.
9874         (Goto.Emit): Remove CS1632 check.
9875
9876 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
9877
9878         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
9879         error message.
9880
9881 2006-05-11  Raja R Harinath  <rharinath@novell.com>
9882
9883         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
9884         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
9885         (FlowBranchingException.Label): Likewise.
9886
9887         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
9888         given value.
9889         (MyBitVector.Or): Use it to avoid losing information (Count).
9890         (FlowBranching.MergeOrigins): Likewise.
9891
9892         * flowanalysis.cs (UsageVector.IsDirty): Remove.
9893         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
9894         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
9895         (UsageVector.ToString): Simplify.
9896         (UsageVector.MergeSiblings): Move here from ...
9897         (FlowBranching.Merge): ... here.
9898         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
9899         not a MyBitVector.
9900
9901 2006-05-10  Raja R Harinath  <rharinath@novell.com>
9902
9903         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
9904         null bitvector is treated as all-true.
9905
9906         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
9907         (MyBitVector): Rationalize invariants.  'vector != null' implies
9908         that we have our own copy of the bitvector.  Otherwise,
9909         'InheritsFrom == null' implies all inherited bits are true.
9910
9911 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
9912
9913         * statement.cs (LocalInfo): Add IsConstant.
9914         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
9915         local variable for constants.
9916
9917 2006-05-09  Raja R Harinath  <rharinath@novell.com>
9918
9919         * flowanalysis.cs (MyBitVector.Empty): New.
9920         (MyBitVector): Don't allow InheritedFrom to be null.
9921         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
9922         (UsageVector, FlowBranching): Update to changes.
9923
9924         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
9925         recursion.  The 'Parent == null' condition isn't sufficient for
9926         anonymous methods.
9927         (FlowBranching.AddBreakOrigin): Likewise.
9928         (FlowBranching.AddContinueOrigin): Likewise.
9929         (FlowBranching.AddReturnOrigin): Likewise.
9930         (FlowBranching.StealFinallyClauses): Likewise.
9931         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
9932         (FlowBranching.CheckOutParameters): Likewise.
9933         (FlowBranchingToplevel): Terminate all the above recursions here.
9934         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
9935         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
9936
9937         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
9938         toplevel block.
9939         (FlowBranchingToplevel): New.  Empty for now.
9940         (FlowBranching.MergeTopBlock): Update.
9941         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
9942         branching for the anonymous delegate.
9943         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
9944
9945         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
9946         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
9947         information at the start of the merge.  Reorganize.
9948
9949 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
9950
9951         * class.cs (MethodData.Define): Method cannot implement interface accessor.
9952
9953 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
9954
9955         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
9956         to newly introduced ctor.
9957
9958         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
9959         message to one place.
9960         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
9961         global namespace.
9962
9963 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
9964
9965         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
9966
9967         * ecore.cs (Expression.ResolveAsConstant): Updated.
9968
9969         * statement.cs (ResolveMeta): Updated.
9970
9971 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
9972
9973         * cs-parser.jay: __arglist cannot be used in initializer.
9974
9975 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
9976
9977         A fix for #77879
9978         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
9979         private types.
9980
9981 2006-05-05  Raja R Harinath  <rharinath@novell.com>
9982
9983         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
9984         (LabeledStatement): Add 'name' parameter.
9985         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
9986         (Block.AddLabel): Update to changes.
9987         * cs-parser.jay (labeled_statement): Likewise.
9988
9989         * flowanalysis.cs (BranchingType.Labeled): New.
9990         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
9991         (FlowBranchingLabeled): New.  Does nothing for now, but will
9992         eventually handle 'goto' flows.
9993         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
9994         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
9995         that's terminated ...
9996         (Block.Resolve): ... here.
9997
9998         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
9999         (UsageVector.MergeFinallyOrigins): Likewise.
10000         (FlowBranching.InTryOrCatch): Likewise.
10001         (FlowBranching.AddFinallyVector): Likewise.
10002         (FlowBranchingException): Update to changes.
10003
10004         Fix #78290
10005         * statement.cs (Return.Resolve): Move error checking to ...
10006         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
10007         (FlowBranchingException): Handle return origins like break and
10008         continue origins.
10009         (FlowBranching.UsageVector.CheckOutParameters): Remove.
10010
10011 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
10012
10013         A fix for #76122
10014         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
10015         filter.
10016
10017 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
10018
10019         A fix for #77543
10020         * class.cs (MethodData.Define): Do public accessor check only when method
10021         implements an interface.
10022
10023 2006-05-04  Raja R Harinath  <rharinath@novell.com>
10024
10025         Remove special handling of 'break'
10026         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
10027         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
10028         (UsageVector.Break): Remove.
10029         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
10030         reachability.
10031         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
10032
10033         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
10034         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
10035
10036 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
10037
10038         A fix for #75726
10039         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
10040         be the interface member.
10041
10042 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
10043
10044         A fix for #60069
10045         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
10046         for emitting small (int) values.
10047
10048 2006-05-03  Raja R Harinath  <rharinath@novell.com>
10049
10050         Fix #59427
10051         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
10052         control-flow passes through the 'finally' after merging-in all the
10053         control-flows from 'try' and the 'catch' clauses.
10054
10055         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
10056         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
10057         always true at the only non-recursive entry point.
10058         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
10059         FlowBranchingBreakable.
10060         (FlowBranchingLoop): Remove.
10061         * statement.cs (Return.DoResolve): Update to changes.
10062
10063         Fix #76471, #76665
10064         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
10065         (FlowBranching.CreateBranching): Handle it: create a
10066         FlowBranchingContinuable.
10067         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
10068         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
10069         except that it handles the 'continue' command.
10070         (FlowBranching.UsageVector.MergeOrigins): Rename from
10071         MergeBreakOrigins.
10072         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
10073         except that it overrides AddContinueOrigin.
10074         (FlowBranchingException): Override AddContinueOrigin, similar to
10075         AddBreakOrigin.
10076         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
10077         Create a new branching around the embedded statement.
10078         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
10079         control flow after the embedded statement.
10080         (Continue.Resolve): Move all error checking to AddContinueOrigin.
10081
10082         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
10083         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
10084         FlowBranchingBreakable.
10085         (FlowBranchingSwitch): Remove.
10086
10087         Fix test-503.cs
10088         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
10089         error reporting to ...
10090         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
10091         Rename from 'AddBreakVector'.  Add new location argument.  Return
10092         a bool indicating whether the 'break' crosses an unwind-protect.
10093         (FlowBranchingException.AddBreakOrigin): Add.
10094         (FlowBranchingException.Merge): Propagate 'break's to surrounding
10095         flowbranching after updating with the effects of the 'finally'
10096         clause.
10097         (FlowBranchingBreakable): New common base class for
10098         FlowBranchingLoop and FlowBranchingSwitch.
10099
10100         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
10101         embedded statement.
10102         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
10103
10104 2006-05-02  Raja R Harinath  <rharinath@novell.com>
10105
10106         * statement.cs (Do.Resolve): If the loop is infinite, set the
10107         barrier.
10108         (While.Resolve, For.Resolve): Set a barrier after the embedded
10109         statement.  There's no direct control flow that goes from the end
10110         of the embedded statement to the end of the loop.
10111         * flowanalysis.cs (FlowBranching.Infinite): Remove.
10112         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
10113         above ensure that the reachability is correctly computed.
10114
10115         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
10116         (UsageVector.MergeBreakOrigins): If the current path is
10117         unreachable, treat it as if all parameters/locals are initialized.
10118         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
10119         infinite loops before merging-in break origins.
10120
10121         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
10122         (Reachability.Reachable): Split part into ...
10123         (Reachability.Unreachable): ... this.  Simplify.
10124         (Reachability.IsUnreachable): Use 'Unreachable' instead.
10125
10126         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
10127         (Reachability.SetThrowsSometimes): Likewise.
10128         (FlowBranchingBlock.MergeTopBlock): Don't compare against
10129         TriState.Always, use corresponding property.
10130         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
10131         (Block.Resolve): Likewise.  Remove some redundant checks.
10132
10133 2006-05-02  Raja R Harinath  <harinath@gmail.com>
10134
10135         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
10136         (Reachability.Meet): Don't bother checking AlwaysThrows --
10137         barrier is always set.
10138         (FlowBranchingBlock.Merge): Likewise.
10139
10140 2006-05-01  Raja R Harinath  <harinath@gmail.com>
10141
10142         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
10143         checks for unreachable.
10144
10145 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
10146
10147         A fix for #77980
10148         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
10149
10150         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
10151         whether field is really assigned.
10152
10153 2006-04-30  Raja R Harinath  <harinath@gmail.com>
10154
10155         * flowanalysis.cs (Reachability): Make 4-argument constructor
10156         private.
10157         (Reachability.Meet): Rename from 'And'.  Remove static variant.
10158         (Reachability.Always): Rename from the highly misleading
10159         'Reachability.Never'.
10160         (FlowBranching.Merge): Update to changes.  Mark an impossible
10161         situation with a 'throw'.
10162         (*): Update to changes.
10163
10164 2006-04-29  Raja R Harinath  <harinath@gmail.com>
10165
10166         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
10167         Remove 'Undefined'.
10168         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
10169         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
10170         (*): Update to changes.
10171         * statement.cs: Update to changes.
10172
10173 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
10174
10175         A fix for #78049
10176         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
10177
10178 2006-04-28  Raja R Harinath  <harinath@gmail.com>
10179
10180         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
10181         dummy UsageVector.
10182
10183         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
10184         argument to two arguments: an usage-vector and a bool.  Move call
10185         to FlowBranching.Merge () ...
10186         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
10187
10188         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
10189         handling of loop and switch reachability to ...
10190         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
10191
10192 2006-04-27  Raja R Harinath  <harinath@gmail.com>
10193
10194         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
10195         handling to FlowBranchingLoop.InLoop.
10196         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
10197
10198 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
10199
10200         A fix for #78115
10201         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
10202         anonymous method is allowed from AnonymousContainer here.
10203
10204         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
10205
10206 2006-04-24  Raja R Harinath  <rharinath@novell.com>
10207
10208         Fix #78156
10209         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
10210
10211 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
10212
10213         A fix for #49011.
10214         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
10215         (DoubleConstant.Reduce): Ditto.
10216
10217 2006-04-23  Raja R Harinath  <rharinath@novell.com>
10218
10219         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
10220         Remove 'lvalue_right_side' argument.  Move parts to ...
10221         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
10222         (LocalVariable.DoResolveLValue): ... these.
10223
10224 2006-04-21  Raja R Harinath  <rharinath@novell.com>
10225
10226         Fix cs1655.cs
10227         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
10228         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
10229         (LocalVariableReference.DoResolveBase): Use it to implement new
10230         CS1655 check.
10231         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
10232         (Argument.Resolve): Simplify.  Move CS1510 check ...
10233         * ecore.cs (Expression.ResolveLValue): ... here.
10234         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
10235         (PropertyExpr.DoResolveLValue): Likewise.
10236         (FieldExpr.Report_AssignToReadonly): Likewise.
10237         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
10238         LValueMemberAccess or LValueMemberOutAccess on instance depending
10239         on it.
10240         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
10241         DoResolve as appropriate.
10242
10243 2006-04-20  Raja R Harinath  <rharinath@novell.com>
10244
10245         Fix #75800
10246         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
10247         implicit conversions on 'out' and 'ref' arguments.
10248
10249         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
10250         improve clarity.  Remove dead code.
10251
10252         Fix #66031
10253         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
10254         (Catch.Resolve): Resolve VarBlock if it exists.
10255
10256 2006-04-19  Miguel de Icaza  <miguel@novell.com>
10257
10258         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
10259         twice, this was some residual code, the enumerator was emitted
10260         properly in the two branche of if later.
10261
10262 2006-04-19  Raja R Harinath  <rharinath@novell.com>
10263
10264         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
10265         cast is never an lvalue.
10266         (Cast.DoResolve, Cast.ResolveRest): Combine.
10267         (Argument.Emit): Simplify slightly.  Move 'Expr is
10268         IMemoryLocation' check ...
10269         (Argument.Resolve): ... here.
10270         (Argument.Error_LValueRequired): Remove.  Inline into only user.
10271
10272         Simplifications.  Fix cs0191-2.cs
10273         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
10274         CS1649 and CS1651 to ...
10275         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
10276         the actual selection of the error code and message to a lookup
10277         table.  Add a dummy return value to simplify callsites.
10278         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
10279         readonly fields of other instances of the same type.  Move CS0197
10280         warning from ...
10281         * expression.cs (Argument.Resolve): ... here.  Simplify code.
10282         Ensure that ec.InRefOutArgumentResolving is only set during LValue
10283         resolution of an out or ref argument.  The code simplification
10284         above uses this invariant.
10285
10286 2006-04-18  Raja R Harinath  <rharinath@novell.com>
10287
10288         Possibly fix #77752.  Fix cs1690-[4-7].cs.
10289         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
10290         CheckMarshallByRefAccess.  Drop parameter.
10291         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
10292         warning.
10293         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
10294         InstanceExpression.
10295         * report.cs (AllWarnings): Add CS1690.
10296         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
10297         for ref access too.
10298         (LocalVariableReference.DoResolveBase): Update.
10299
10300 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10301
10302         * class.cs (MethodOrOperator): Moved common parts from method class.
10303         detect obsolete attributes.
10304         (Method.Define): Simplified as it reuses code from base.
10305         (Constructor.ValidAttributeTargets): Fixed issue found during
10306         refactoring.
10307         (Destructor.ValidAttributeTargets): Fixed issue found during
10308         refactoring.
10309         (Operator): Finished refactoring set off by #78020. Operator class is now
10310         ordinary method class.
10311
10312         * anonymous.cs: Updated.
10313
10314         * decl.cs (DeclSpace): Add IsGeneric
10315
10316 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10317
10318         * class.cs (Constructor.Emit): Don't emit the attributes twice.
10319
10320 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10321
10322         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
10323         detect obsolete attributes.
10324         (Method.CreateEmitContext): Moved to MethodOrOperator.
10325
10326 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10327
10328         A fix for #78048.
10329         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
10330         customized exception to make crash detection easier.
10331         (MethodOrOperator): Started to work on new base class for methods and
10332         operators.
10333         (Method): Derives from MethodOrOperator.
10334         (Constructor.Emit): Emits its own attributes.
10335         (AbstractPropertyEventMethod.Emit): Ditto.
10336         (Operator): Derives from MethodOrOperator, will refactor fully in extra
10337         patch.
10338         (Operator.Emit): It's temporary more tricky than should be.
10339         
10340         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
10341
10342         * report.cs (InternalErrorException): Add ctor with inner exception.
10343
10344 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
10345
10346         A fix for #76744.
10347         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
10348         only not visible.
10349
10350 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
10351
10352         A fix for #77916.
10353         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
10354         array.
10355
10356 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
10357
10358         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
10359         attribute is present and Guid not.
10360         (Interface.ApplyAttributeBuilder): Ditto.
10361
10362         * attribute.cs: Add error message.
10363
10364 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
10365
10366         A fix for #78020.
10367
10368         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
10369         sources (it's composite) so hold them in extra array as they are used in
10370         Emit phase only. It worked in the previous versions by mistake.
10371         (Attribute.Emit): Emit attribute for more owners when exist.
10372
10373         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
10374         it has now different behaviour.
10375
10376 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
10377
10378         * constant.cs (Constant.IsDefaultInitializer): New method.
10379
10380         * class.cs: Updated.
10381
10382         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
10383         re-initialize default values. It saves KBs almost for every assembly.
10384         Thanks Zoltan for the idea.
10385         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
10386         (ArrayCreation.DoResolve): Resolve only once.
10387         (ArrayCreation.Emit): Emit static initializer only when it is faster.
10388         (ArrayCreation.GetAttributableValue): Cope with optimized values.
10389
10390 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
10391
10392         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
10393         From #77961.
10394
10395 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
10396
10397         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
10398         in an embedded statement too.
10399
10400 2006-04-01  Raja R Harinath  <rharinath@novell.com>
10401
10402         Fix #77958
10403         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
10404
10405 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
10406
10407         A fix for #77966.
10408
10409         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
10410         was not specified.
10411
10412         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
10413
10414 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
10415
10416         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
10417         phase.
10418
10419         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
10420         LocalTemporary change.
10421
10422         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
10423         TypeContainer.
10424         (ClassOrStruct.DefineFieldInitializers): Implemented static field
10425         initializers optimization.
10426         (ClassOrStruct.TypeAttr): Moved from modifiers.
10427         (Constructor.CheckBase): Don't crash when static ctor has parameters.
10428         (FieldBase.ResolveInitializer): Resolves initializer.
10429         (FieldBase.HasDefaultInitializer): New property.
10430
10431         * cs-parser.jay: Removed message.
10432
10433         * expression.cs (CompilerGeneratedThis): New specialization.
10434
10435         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
10436
10437 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
10438
10439         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
10440
10441 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
10442
10443         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
10444         be now EnumConstants only.
10445
10446 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
10447
10448         * attribute.cs, driver.cs: Reset more caches.
10449
10450 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10451
10452         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
10453
10454 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10455
10456         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
10457         for easier reuse. Updated all overrides.
10458         (IntegralConstant): New base class for all integral constants.
10459         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
10460         of the constant range, report custom error.
10461         (UIntConstant.Reduce): Fixed uint conversion.
10462
10463         * ecore.cs, literal.cs: Reduce updates.
10464
10465 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10466
10467         A fix for #75813.
10468
10469         * class.cs (Constructor.Define): Removed extra if for default ctors.
10470         A patch from Atsushi Enomoto.
10471
10472 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10473
10474         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
10475         GetAttributableValue.
10476
10477         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
10478         when required.
10479
10480         * convert.cs (ImplicitConversionRequired): Error message moved to
10481         DoubleLiteral.
10482
10483         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
10484         automatic implicit conversion of an output value.
10485         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
10486
10487         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
10488         conversion.
10489         (TypeOf.GetAttributableValue): Add extra handling for object type.
10490
10491         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
10492         special error message.
10493
10494 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
10495
10496         * class.cs (Constructor.Emit): Don't crash when struct ctor is
10497         InternalCall.
10498         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
10499         compatible with MS runtime.
10500
10501 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
10502
10503         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
10504         attribute arguments here.
10505
10506         * class.cs (Indexer.Define): The check was moved to attribute class.
10507
10508 2006-03-22  Marek Safar  <marek.safar@seznam.cz>
10509
10510         * assign.cs, class.cs, codegen.cs, convert.cs, decl.cs, ecore.cs,
10511         expression.cs, typemanager.cs: Minor changes from gmcs to make merging
10512         easier.
10513
10514 2006-03-22  Raja R Harinath  <rharinath@novell.com>
10515
10516         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
10517         mcs to keep code differences small.
10518         * attribute.cs (Attribute.GetParameterDefaultValue): New.
10519         * typemanager.cs (parameter_default_value_attribute_type): New.
10520         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
10521         CS1908 check.
10522
10523 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
10524
10525         * expression.cs (StringConcat.Append): Reverted back to no warning state.
10526
10527 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
10528
10529         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
10530
10531         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
10532         the blocks too.
10533
10534 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
10535
10536         * doc-bootstrap.cs : fix build.
10537
10538 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
10539
10540         * expression.cs (StringConcat.Append): Issue a warning when empty string
10541         is going to append.
10542
10543 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
10544
10545         * assign.cs (CompoundAssign.ResolveSource): Removed.
10546
10547         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
10548         clean up.
10549
10550         * class.cs (TypeContainer.FindMethods): Removed.
10551         (TypeContainer.CheckMemberUsage): Made static.
10552
10553         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
10554
10555         * constant.cs (CheckRange): Removed unused type argument.
10556         (CheckUnsigned): Removed unused type argument.
10557
10558         * cs-parser.jay: Updated after MemberAccess clean up.
10559         Uses Length for empty string test.
10560
10561         * cs-tokenizer.cs: Uses Length for empty string test.
10562         (IsCastToken): Made static.
10563         (is_hex): Made static.
10564         (real_type_suffix): Made static.
10565
10566         * decl.cs (SetupCache): Made static.
10567         (OnGenerateDocComment): Removed unused ds argument.
10568
10569         * delegate.cs (VerifyDelegate): Removed unused argument.
10570
10571         * doc.cs: Uses Length for empty string test.
10572
10573         * driver.cs: Uses Length for empty string test.
10574
10575         * enum.cs (IsValidEnumType): Made static
10576
10577         * expression.cs (EnumLiftUp): Removed unused argument.
10578         (ResolveMethodGroup): Ditto.
10579         (BetterConversion): Ditto.
10580         (GetVarargsTypes): Ditto.
10581         (UpdateIndices): Ditto.
10582         (ValidateInitializers): Ditto.
10583         (MemberAccess.ctor): Ditto.
10584         (GetIndexersForType): Ditto.
10585
10586         * flowanalysis.cs: (MergeFinally): Removed unused argument.
10587
10588         * iterators.cs: Updated after MemberAccess clean up.
10589
10590         * location.cs: Uses Length for empty string test.
10591
10592         * namespace.cs: Uses Length for empty string test.
10593
10594          * report.cs (CheckWarningCode): Made static.
10595
10596         * statement.cs (LabeledStatement): Removed unused argument.
10597
10598         * typemanager.cs (FilterNone): Removed.
10599
10600 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10601
10602         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
10603         obsolete.
10604
10605         * class.cs: Updated.
10606
10607 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10608
10609         * cs-parser.jay.cs: __arglist is not allowed for delegates.
10610
10611 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10612
10613         A fix for #77822.
10614
10615         * expression.cs (VerifyArgumentsCompat): Reverted to double error
10616         reporting, it's more tricky than I thought.
10617
10618 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10619
10620         A fix for #77816.
10621
10622         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
10623         host container.
10624         (AnonymousMethod.ImplicitStandardConversionExists): New method.
10625         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
10626         Add more error reporting; Fixed issue with params.
10627
10628         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
10629
10630         * cs-parser.jay: AnonymousMethod requires host container.
10631
10632         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
10633
10634 2006-03-18  Raja R Harinath  <harinath@gmail.com>
10635
10636         * class.cs: Change 'TypeContainer ds' constructor argument to
10637         'DeclSpace parent'.  Some classes were missed below due to
10638         different naming convention.
10639
10640         * class.cs (MemberCore.Parent): Delete.  This makes the
10641         ParentContainer changes below enforceable by the compiler.
10642
10643         Treat pointers to enclosing declaration space as 'DeclSpace', not
10644         'TypeContainer'.
10645         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
10646         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
10647
10648         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
10649         of TypeContainer.
10650         (Block.AddThisVariable): Likewise.
10651         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
10652         (AbstractPropertyEventMethod.Emit): Likewise.
10653         (AbstractPropertyEventMethod.EmitMethod): Likewise.
10654         (GetMethod.Define, SetMethod.Define): Likewise.
10655         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
10656         (DelegateMethod.EmitMethod): Likewise.
10657
10658         Fix regression test-partial-13.cs.
10659         Rationalize use of PartialContainer.  Ensure that the partial
10660         class semantics can be tied to type-correctness, i.e., any
10661         violation will cause a compile error.
10662         * class.cs, const.cs: Access all fields that belong to class
10663         TypeContainer via ParentContainer.  Arguments of EmitContexts and
10664         Resolve()-like functions still use 'Parent'.
10665
10666         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
10667         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
10668         (PropertyMethod.CheckModifiers): Remove unused argument.
10669         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
10670         DeclSpace.
10671
10672 2006-03-17  Raja R Harinath  <harinath@gmail.com>
10673
10674         Make semantics of PartialContainer simpler.
10675         * decl.cs (DeclSpace.IsPartial): Remove.
10676         * class.cs (TypeContainer.IsPartial): Likewise.
10677         (TypeContainer..ctor): Set PartialContainer to point to self.
10678         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
10679         (TypeContainer.FindNestedType): Likewise.
10680         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
10681
10682 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
10683
10684         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
10685
10686 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
10687
10688         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
10689         classes.
10690
10691 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
10692
10693         * class.cs (Operator.Define): An error for base conversion was not
10694         reported correctly.
10695
10696 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
10697
10698         * iterator.cs : yield break is allowed in try statement which has
10699           catch clauses. Fixed bug #77767.
10700
10701 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
10702
10703         A fix for #77593, #77574.
10704
10705         * class.cs (MethodCore.CheckBase): Another if for operator.
10706
10707 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
10708
10709         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
10710         were not resolved
10711
10712         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
10713         (DelegateCreation.ImplicitStandardConversionExists): New method for just
10714         conversion test.
10715         
10716         *ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
10717         not needed.
10718
10719         * assign.cs, constant.cs, convert.cs, delegate.cs, expression.cs:
10720         Updated after another emitcontext usage was clean up. It should help us to
10721         synchronize with gmcs easier.
10722
10723 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
10724
10725         A fix for #77353.
10726
10727         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
10728         (Event.Define): ditto
10729         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
10730
10731         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
10732         Removed redundant code and set NewSlot for Invoke method too.
10733
10734         * parameter.cs (Parameters.ctor): Add custom, type ctor.
10735         (Parameters.MergeGenerated): New method. Use this method when you merge
10736         compiler generated argument with user arguments.
10737
10738 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
10739
10740         * attribute.cs (ResolveAsTypeTerminal): Removed.
10741
10742         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
10743         specialization for predefined types; 30% speed up.
10744         Finally placed obsolete check to right place.
10745         (Expression.ResolveType): Removed.
10746
10747         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
10748         Updated after ResolveType was removed.
10749
10750         * expression.cs (Cast.ctor): Check void cast.
10751         (Binary.ResolveAsTypeTerminal): Is never type.
10752         (Conditional.ResolveAsTypeTerminal): Is never type.
10753
10754         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
10755
10756 2006-03-01  Raja R Harinath  <rharinath@novell.com>
10757
10758         Fix #77679.
10759         * expression.cs (ParameterReference.DoResolveBase): Change return
10760         type to bool.
10761         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
10762         Update.
10763
10764         Fix #77628.
10765         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
10766
10767         Fix #77642.
10768         * typemanager.cs (GetFullNameSignature): Don't nullref on
10769         protected accessors.
10770
10771 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
10772
10773         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
10774         these two separated members to simplify the code.
10775         (Attribute.Resolve): Refactored to use new fields and methods.
10776         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
10777         implemented obsolete attribute checking.
10778         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
10779         implemented obsolete checking again. It look line never ending quest ;-)
10780         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
10781
10782         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
10783
10784         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
10785
10786         *class.cs (Property.Define): Add RegisterProperty call.
10787
10788         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
10789         argument groups (only 2).
10790
10791         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
10792         encoding expression to arguments.
10793         (Expression.ExprClassToResolveFlags): Just turned to property.
10794
10795         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
10796         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
10797         optimized as well as implemented support for zero-length attributes.
10798
10799         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
10800         Add caching of PropertyInfo's.
10801
10802 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
10803
10804         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
10805         error multiple times.
10806
10807 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
10808
10809         New partial class implementation.
10810         A fix for #77027, #77029, #77403
10811
10812         * attribute.cs (Attributable): Made attributes protected.
10813
10814         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
10815         the replacements of ClassPart and PartialContainer.
10816         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
10817         (TypeContainer.AddInterface): Ditto.
10818         (TypeContainer.AddPartial): The main method for partial classes. It checks
10819         for errors and merges ModFlags and attributes. At the end class is added to
10820         partial_parts list.
10821         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
10822         required here.
10823         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
10824         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
10825         from the rest of partial classes.
10826         (TypeContainer.GetClassBases): Simplified.
10827         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
10828         DefineType.
10829         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
10830         (TypeContainer.HasExplicitLayout): Uses Flags now.
10831         (PartialContainer): Removed.
10832         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
10833         (StaticClass): Was merged with Class.
10834         (Class.GetClassBases): class and static class bases are verified here.
10835         (Class.TypeAttr): Added static attributes when class is static.
10836         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
10837         (MemberBase): In some cases we need to call parent container for partial
10838         class. It should be eliminated but it's not easy now.
10839
10840         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
10841
10842         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
10843         partial classed to accumulate class comments.
10844         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
10845
10846         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
10847
10848         * driver.cs (MainDriver): Tree.GetDecl was removed.
10849
10850         * modifiers.cs (Modifiers): Add partial modifier.
10851
10852         * tree.cs (Tree.decl): Removed.
10853         (RootTypes): Started to use this class more often for root types
10854         specializations.
10855
10856 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
10857
10858         A fix for #77615
10859
10860         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
10861         external interface does not have an attribute.
10862
10863 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
10864
10865         Another prerequisites for new partial classs implementation.
10866         
10867         * attribute.cs (Attribute.Equal): Implemented.
10868         (Attribute.Emit): Changed as attributes can be applied more than twice.
10869         (Attributes.Emit): Check for duplicate attributes here.
10870
10871         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
10872         as a parameter, clean-up.
10873
10874 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
10875
10876         A fix for #77485
10877
10878         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
10879         contains obsolete attribute check which can in some cases look for base
10880         type of current class which is not initialized yet.
10881         (TypeContainer.BaseType): Replacement of ptype.
10882
10883         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
10884
10885 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
10886
10887         First of prerequisites for new partial classs implemention.
10888         
10889         * attribute.cs (Attributable): Extended by ResolveContext;
10890         Attributes finally have correct context for resolving in all cases.
10891         (AttachTo): Attribute owner is assigned here.
10892
10893         * codegen.cs (IResolveContext): Introduce new interface to hold
10894         all information needed in resolving phase.
10895         (EmitContext): Implements IResolveContext; more clean-up needed here.
10896         
10897         * decl.cs (MemberCore): Implemented IResolveContext.
10898
10899         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
10900         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
10901         parameter.cs, statement.cs, tree.cs, typemanager.cs:
10902         Refactored to use new IResolveContext instead of EmitContext; cleanup
10903
10904 2006-02-06  Miguel de Icaza  <miguel@novell.com>
10905
10906         * codegen.cs (EmitScopeInitFromBlock): check here the
10907         capture_context, there is no need to make two calls to the
10908         EmitContext. 
10909
10910         * anonymous.cs: Add some debugging messages that might help me
10911         track other instances of this problem in the future (the
10912         regression of test 467).
10913
10914         * cs-parser.jay: track the variable block, as we need to initalize
10915         any captured variables declared in this block for the "catch"
10916         portion of the "Try" statement.
10917
10918         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
10919         scope initialization for captured variables. 
10920
10921         Also, move the emit for the variables after the block location has
10922         been marked.
10923
10924 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
10925
10926         * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
10927
10928 2006-02-02  Miguel de Icaza  <miguel@novell.com>
10929
10930         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
10931         commit yesterday, the initialization for the roots is necessary.
10932         What is not necessary is the scope activation.
10933
10934 2006-02-02  Raja R Harinath  <rharinath@novell.com>
10935
10936         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
10937         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
10938         CS0206 checks.
10939         (Argument.Resolve): Remove CS0206 checks.
10940
10941 2006-02-01  Miguel de Icaza  <miguel@novell.com>
10942
10943         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
10944         scopes for all the roots, the scopes will now be emitted when the
10945         Blocks are entered.   [This change was wrong, fixed on 2006-02-02]
10946
10947         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
10948         code.  This reduces a lot of existing cruft.
10949         
10950         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
10951         that the ScopeInfo is generated as we enter the scope, not at the
10952         time of use, which is what we used to do before.
10953
10954         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
10955         every time a Block is about to be emitted if we have a
10956         CaptureContext. 
10957
10958 2006-02-01  Raja R Harinath  <rharinath@novell.com>
10959
10960         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
10961         (Reset): Update.
10962         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
10963
10964         * typemanager.cs (cons_param_array_attribute): Make private.
10965         (Reset): Set it to null.
10966         (InitCoreHelpers): Don't initialize it.
10967         (ConsParamArrayAttribute): New.  Initialize it as needed.
10968         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
10969
10970 2006-01-31  Miguel de Icaza  <miguel@novell.com>
10971
10972         * expression.cs: There might be errors reported during the
10973         selection of applicable methods.  If there are errors, do not
10974         continue execution as it will lead the compiler to crash.
10975
10976 2006-01-30  Miguel de Icaza  <miguel@novell.com>
10977
10978         * expression.cs: Member access is not allowed on anonymous
10979         methods.  Fixes #77402.
10980
10981 2006-01-30  Raja R Harinath  <rharinath@novell.com>
10982
10983         Fix #77401
10984         * cs-parser.jay (VariableDeclaration): Don't set
10985         current_array_type to null.
10986         (field_declaration, event_declaration, declaration_statement):
10987         Set it to null here.
10988
10989 2006-01-28  Raja R Harinath  <harinath@gmail.com>
10990
10991         * typemanager.cs (GenericParameterPosition): New.
10992         * doc.cs: Use it.
10993
10994 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
10995
10996         * doc.cs : To process "include" elements, first we should create
10997           another list than XmlNodeList, because it could result in node
10998           removal, which could result in that the XmlNodeList gives up
10999           yielding next node.
11000
11001           (Also made code identical to gmcs again.)
11002
11003 2006-01-25  Miguel de Icaza  <miguel@novell.com>
11004
11005         * ecore.cs: Introduce an error report that we were not catching
11006         before, if not silent, we must report the error.  Gonzalo ran into
11007         it.
11008
11009 2006-01-23  Miguel de Icaza  <miguel@novell.com>
11010
11011         A fix for bug: #76957
11012         
11013         * iterators.cs (MoveNextMethod.CreateMethodHost): call
11014         ComputeMethodHost before creating the method, this is a new
11015         requirement. 
11016
11017         * anonymous.cs (AnonymousContainer): Now we track all the scopes
11018         that this method references (RegisterScope).  The actual scope
11019         where the method is hosted is computed with the ComputeMethodHost
11020         before we create the method.
11021
11022         Moved the Deepest routine here.
11023
11024         (AnonymousContainer.ComputeMethodHost): New routine used to
11025         compute the proper ScopeInfo that will host the anonymous method.
11026
11027         (ScopeInfo): Deal with multiple roots.  The problem was that we
11028         did not have a unique root where all ScopeInfos could be hanged
11029         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
11030         of roots.  
11031
11032         Remove AdjustMethodScope which is now computed at the end.  Remove
11033         LinkScope which did a partial link, instead link all ScopeInfos
11034         before code generation from the new "LinkScopes" routine. 
11035
11036         Simplify all the Add* routines as they no longer need to maintain
11037         the tree, they just need to record that they are using variables
11038         from a ScopeInfo.
11039
11040         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
11041         routines to produce the forest of ScopeInfo trees.
11042
11043         * class.cs (TypeContainer.AppendMethod): This is just like
11044         AddMethod, but ensures that an interface implementation method
11045         (IEnumerable.XXX) is not inserted at the beginning of the queue of
11046         methods, but at the end.
11047
11048         We use this functionality to ensure that the generated MoveNext
11049         method in the iterator class is resolved/emitted before the
11050         enumerator methods created.   
11051
11052         This is required because the MoveNext method computes the right
11053         ScopeInfo for the method.  And the other methods will eventually
11054         need to resolve and fetch information computed from the anonymous
11055         method. 
11056
11057 2006-01-21  Raja R Harinath  <harinath@gmail.com>
11058             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
11059
11060         Fix rest of #76995.
11061         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
11062         the 'aliases' hash.
11063         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
11064         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
11065
11066 2006-01-18  Raja R Harinath  <rharinath@novell.com>
11067
11068         Fix #76656, cs0231-2.cs.
11069         * cs-parser.jay (formal_parameter_list): Make error case catch
11070         more issues.
11071         (parenthesized_expression_0): Add CS1026 check.
11072         (invocation_expression): Remove unused { $$ = lexer.Location }.
11073
11074 2006-01-17  Raja R Harinath  <rharinath@novell.com>
11075
11076         Fix #76824.
11077         * cs-parser.jay (statement_expression): Don't list out the
11078         individual statement-expressions.  Convert syntax error into
11079         CS0201 check.
11080
11081 2006-01-16  Raja R Harinath  <rharinath@novell.com>
11082
11083         Fix #76874.
11084         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
11085         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
11086         CheckIntermediateModification.
11087         (FieldExpr.DoResolve): Add new two-argument version that
11088         allows us to resolve the InstanceExpression as an lvalue.
11089         The one-argument variant is now just a wrapper.
11090         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
11091         Resolve the lhs as an lvalue if the it has a value type.
11092         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
11093         from Assign.DoResolve.
11094         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
11095         resolved as an lvalue.
11096         (PropertyExpr.DoResolve): Update.
11097         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
11098         has a value type.  Move CS1612 check here from
11099         CheckIntermediateModification.
11100         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
11101         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
11102         'right_side' of a ResolveLValue on an 'out' argument.
11103         (EmptyExpression.LValueMemberAccess): New.  Used as the
11104         'right_side' of a propagated ResolveLValue on a value type.
11105         (LocalVariableReference.DoResolveBase): Recognize
11106         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
11107         Add CS1654 check.
11108         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
11109         EmptyExpression.Null.
11110
11111 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
11112
11113         * typemanager.cs : added IsGenericParameter(). In mcs it always
11114           return false.
11115         * doc.cs : for generic parameters, use GenericParameterPosition,
11116           not FullName.
11117
11118 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
11119
11120         * expression.cs: Fix Console.WriteLine ((this = x).foo);
11121
11122 2006-01-12  Miguel de Icaza  <miguel@novell.com>
11123
11124         This fixes the problem where we used ldfld instead of ldflda to
11125         load the "THIS" pointer on captured parameters, when THIS is a
11126         value type.  See bug #77205.
11127         
11128         * iterators.cs (CapturedThisReference.Emit): Pass false to
11129         EmitThis (we do not need the address).
11130
11131         * codegen.cs (EmitThis): it needs to know whether we need the
11132         address of `this' or not.  This is used by value types.  
11133
11134         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
11135         every other call passes false.
11136
11137 2006-01-12  Raja R Harinath  <rharinath@novell.com>
11138
11139         Fix #77221.
11140         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
11141         GetOverride.
11142         * expression.cs (Invocation.OverloadResolve): Update.
11143         (Invocation.DoResolve): Avoid double resolution of invocation.
11144
11145 2006-01-11  Raja R Harinath  <rharinath@novell.com>
11146
11147         Fix #77180.
11148         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
11149         unary negation of floating point types as 0-expr; negation cannot
11150         overflow in floating point types.
11151
11152         Fix #77204.
11153         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
11154         on operands of 'void' type.
11155
11156         Fix #77200.
11157         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
11158         and ExclusiveOr for boolean constants too.
11159
11160 2006-01-09  Raja R Harinath  <rharinath@novell.com>
11161
11162         Fix #75636.
11163         * expression.cs (Invocation.OverloadResolve): Replace reflected
11164         override methods with their base virtual methods, rather than
11165         skipping over them.
11166         * typemanager.cs (TypeManager.GetOverride): New.
11167
11168 2006-01-05  Jb Evain  <jbevain@gmail.com>
11169
11170         * class.cs (Property.Define, Indexer.Define): do not tag the
11171         properties as SpecialName | RTSpecialName.
11172
11173 2006-01-04  Miguel de Icaza  <miguel@novell.com>
11174
11175         * class.cs (MethodCore.IsDuplicateImplementation): This method was
11176         doing a low-level comparission of parameter types.  It was lacking
11177         a check for __argslist. 
11178
11179 2005-12-30  Miguel de Icaza  <miguel@novell.com>
11180
11181         * expression.cs (ParameterReference.DoResolveBase): Allow
11182         reference parameters if they are local to this block. 
11183
11184         This allows the ref and out parameters of a delegate to be used in
11185         an anonymous method, for example:
11186
11187         delegate void set (out int x);
11188
11189         set s = delegate (out int x){
11190                 x = 0;
11191         };
11192
11193         This is used by functionality introduced late in the C# language.
11194         
11195         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
11196         method that take ref and out parameters. 
11197
11198         Fixes #77119 which was a late change in the spec.
11199
11200 2005-12-23  Miguel de Icaza  <miguel@novell.com>
11201
11202         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
11203         parent if its the same scope.  Fixes #77060.
11204
11205 2005-12-21  Miguel de Icaza  <miguel@novell.com>
11206
11207         * driver.cs: Report the case of no source files and no -out:
11208         argument provided.
11209
11210 2005-12-20  Raja R Harinath  <rharinath@novell.com>
11211
11212         Fix #77035.
11213         * expression.cs (ComposedCast.GetSignatureForError): Define.
11214
11215 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
11216
11217         Fix #76995
11218
11219         * namespace.cs (NamespaceEntry): Add extern_aliases as a
11220         ListDictionary, to contain the ExternAliasEntry entries (in
11221         addition to the NamespaceEntry.aliases hashtable). This field is
11222         shared between the original entry and its doppelganger (bodyless 
11223         copy of it).
11224         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
11225         extern_aliases field.
11226         (NamespaceEntry.Lookup): Move the IsImplicit check after the
11227         lookup in extern_aliases.
11228
11229 2005-12-16  Raja R Harinath  <rharinath@novell.com>
11230
11231         Fix #77006.
11232         * class.cs (TypeContainer.Mark_HasEquals): New.
11233         (TypeContainer.Mark_HasGetHashCode): New.
11234         (ClassPart): Override them.
11235         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
11236
11237         Fix #77008.
11238         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
11239         'parent' argument to the base constructor.
11240
11241         Remove all mention of TypeContainer from decl.cs.
11242         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
11243         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
11244         (DeclSpace.DeclSpace): Likewise.
11245         (DeclSpace.DefineMembers): Remove unused argument.
11246         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
11247         debugging check -- we don't care if the debug code throws an
11248         InvalidCastException instead of an InternalErrorException.
11249         * class.cs (TypeContainer.DefineMembers): Update to changes.
11250         (TypeContainer.DoDefineMembers): Likewise.
11251         (TypeContainer.GetMethods): Likewise.
11252         (PropertyMember.Define): Likewise.
11253         (MemberBase.Parent): New property that forwards to
11254         MemberCore.Parent, but ensures that we get a TypeContainer.
11255         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
11256         (RootContext.PopulateTypes): Likewise.  Remove special case code
11257         for !RootContext.StdLib: DefineMembers is idempotent.
11258
11259 2005-12-14  Miguel de Icaza  <miguel@novell.com>
11260
11261         * convert.cs (ExplicitConversionCore): Check the return value from
11262         ExplicitConversionCore which can return null on failure.  Fixes #76914
11263
11264 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
11265
11266         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
11267
11268 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
11269
11270         * doc.cs : The search for referenced namespace was insufficient to
11271           get global one as it used to do. Fixed bug #76965.
11272
11273 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
11274
11275         * doc.cs : check name in cref in the last phase that whether it is
11276           namespace or not.
11277
11278 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11279
11280         * cs-tokenizer.cs : reverted the latest change: it somehow broke
11281           Mono.C5.
11282
11283 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11284
11285         * doc.cs : so it turned out that we cannot skip override check for 
11286           interface members. Fixed bug #76954.
11287
11288 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11289
11290         * cs-tokenizer.cs : fixed bug #75984:
11291           - #warning and #error should not be handled when the source line
11292             is disabled.
11293           - #line is not checked strictly when the source line is disabled.
11294           - #define and #undef is on the other hand checked strictly at any
11295             state.
11296
11297 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
11298
11299         * cs-tokenizer.cs : missing Location (actually, filename) in one of
11300           CS1027 report.
11301
11302 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11303
11304         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
11305
11306         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
11307         event initializers.
11308         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
11309         (FieldBase.Initializer): Initializer is now optional.
11310         (EventField.Define): Only event field can have initializer.
11311
11312         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
11313
11314         * const.cs (Const): Reuse initializer.
11315
11316         * cs-parser.jay: Updated after FieldBase changes.
11317         Added current_array_type to simplify array initializers.
11318
11319         * ecore.cs (NullCast.IsDefaultValue): Implemented.
11320
11321         * expression.cs, iterators.cs: Updated.
11322
11323         * namespace.cs (NamespaceEntry): Made UsingFound private.
11324
11325 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11326
11327         * parameterCollection.cs: Obsolete, removed.
11328         * parser.cs: Obsolete, removed.
11329
11330 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11331
11332         Fix #76849.
11333         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
11334
11335         * enum.cs (Enum.Define): Set obsolete context here.
11336
11337 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
11338
11339         * doc.cs :
11340           - FindDocumentedMember() now expects 1) paramList as null
11341             when "we don't have to check the number of parameters" and
11342             2) Type.EmptyTypes when "there is no arguments".
11343           - Introduced FoundMember struct to hold the exact type which was
11344             used to find the documented member (the above change broke
11345             test-xml-044; it might be better just to use DeclaringType than
11346             what MS does, like this change does, but it depends on usage.)
11347
11348 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
11349
11350         * doc.cs : documented member might be from DeclaringType for nested
11351           types. Fixed bug #76782.
11352
11353 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
11354
11355         * anonymous.cs: Have the param code handle leaving copies on the
11356         stack etc. Allows anonymous params to take part in the assignment
11357         code (++, +=, etc). Fixes bug #76550
11358
11359         * expression.cs: Handle the prepare_for_load/leave_copy by passing
11360         it down to the anon code.
11361
11362         * iterators.cs: Use dummy var here
11363
11364         * codegen.cs: Handle new vars
11365
11366 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
11367
11368         Fix #76849.
11369         * class.cs (MethodData.Define): Set proper Obsolete context.
11370
11371         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
11372         obsolete context.
11373         (FieldExpr.DoResolve): Ditto.
11374
11375 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
11376
11377         Fix #76849.
11378         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
11379         parent is not obsolete.
11380
11381 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
11382
11383         * doc.cs : (FindDocumentedMember) find parameterless members first
11384           and get CS0419 in the early stage. Fixed first case of bug #76727.
11385
11386 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
11387
11388         Fix #76859.
11389         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
11390         no error was reported.
11391
11392         *expression.cs (Binary.DoResolve): left can be null.
11393
11394 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
11395
11396         Fix #76783.
11397         * class.cs (MethodData.Emit): Parameters should be labeled first.
11398
11399 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
11400
11401         Fix #76761.
11402         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
11403
11404 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
11405
11406         * attribute.cs (AreParametersCompliant): Moved to Parameter.
11407
11408         * class.cs (MethodCore): Parameter clean up.
11409         (IMethodData): Added ParameterInfo.
11410         (MethodData): Parameter clean up.
11411         (Indexer.Define): Parameter clean up.
11412
11413         * anonymous.cs,
11414         * codegen.cs,
11415         * cs-parser.jay,
11416         * decl.cs,
11417         * doc.cs,
11418         * ecore.cs,
11419         * flowanalysis.cs,
11420         * iterators.cs,
11421         * pending.cs,
11422         * statement.cs,
11423         * typemanager.cs: Parameter clean up.
11424
11425         * delegate.cs (Define): Get rid of duplicated code.
11426
11427         * expression.cs (ParameterReference): Removed useless parameters
11428         and simplified.
11429         (Invocation): Ditto.
11430
11431         * parameter.cs (ParamsParameter): New class, params specialization.
11432         (ArglistParameter): Attemp to separate arglist.
11433         (Parameter): Refactored to be reusable and faster.
11434         (Parameter.Modifier): Made understandable.
11435         (Parameters): Changed to be used as a class for `this' assembly
11436         parameters. Refactored to use new specialized classes.
11437
11438         * support.cs (ParameterData): Added Types property.
11439         (InternalParameters): Deleted.
11440
11441 2005-08-20  Martin Baulig  <martin@ximian.com>
11442
11443         Merging this patch from GMCS to fix #75867.
11444
11445         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
11446         scope if we don't already have it.
11447
11448 2005-11-17  Martin Baulig  <martin@ximian.com>
11449
11450         * anonymous.cs
11451         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
11452         inherit the scope from our parent.  Fixes #76653.
11453
11454 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11455
11456         * doc.cs : the previous patch does not actually fix the bug.
11457           PropertyInfo override check is now implemented and really fixed it.
11458         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
11459
11460 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11461
11462         * doc.cs : apply "override filter" also to properties.
11463           Fixed bug #76730.
11464
11465 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11466
11467         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
11468           no need to check overrides. For classes, omit those results from 
11469           interfaces since they must exist in the class. Fixed bug #76726.
11470
11471 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11472
11473         * typemanager.cs : (GetFullNameSignature) differentiate indexers
11474           with different parameters. Fixed the second problem in #76685.
11475
11476 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11477
11478         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
11479           get expected 'protected' access in CheckValidFamilyAccess()).
11480           Fixed bug #76692.
11481
11482 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11483
11484         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
11485           Fixed bug #76705.  CS1569 was incorrectly commented out.
11486
11487 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
11488
11489         * doc.cs : use Invocation.IsOverride() to do real override check.
11490         * expression.cs : made Invocation.IsOverride() internal.
11491
11492 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
11493
11494         * doc.cs : use TypeManager.FindMembers() instead of (possible)
11495           TypeBuilder.FindMembers() and filter overriden base members out.
11496           Fixed bug #76990.
11497
11498 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11499
11500         * doc.cs : ref/out parameters are represented as '@' (instead of
11501           '&' in type FullName). Fixed bug #76630 (additionally crefs).
11502
11503 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11504
11505         * doc.cs : when there was no '.' in cref to methods in doc comment,
11506           then parameters were missing in the output. Fixed bug #76691.
11507
11508 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11509
11510         * driver.cs : don't output docs when there is an error.
11511           Fixed bug #76693.
11512
11513 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11514
11515         * doc.cs :
11516           Now it should detect indexers. Fixed primary concern in bug #76685.
11517           Fixed CS0419 message to not show the identical member signature in
11518           the message.
11519
11520 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11521
11522         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
11523           instead of Type.FindMembers() since it does not handle events.
11524           Fixed bug #71604.
11525
11526 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
11527
11528         * codegen.cs: Fixed typo (speficied -> specified).
11529
11530 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
11531
11532         Fix #76369.
11533         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
11534
11535 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
11536
11537         * attribute.cs: Changed error message.
11538
11539         * cs-tokenizer.cs: One more check.
11540
11541 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
11542
11543         * statement.cs (Block.Resolve): Ignore empty statement.
11544
11545 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
11546
11547         * report.cs: Made error/warning methods more strict to avoid
11548         their misuse.
11549
11550         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
11551         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
11552         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
11553         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
11554
11555 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
11556
11557         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
11558         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
11559
11560         * class.cs (TypeContainer.IsComImport): New property.
11561         (Constructor.Define): Create proper ctor for ComImport types.
11562
11563         * expression.cs (New.CheckComImport): Fixed.
11564
11565 2005-11-07  Miguel de Icaza  <miguel@novell.com>
11566
11567         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
11568         that a parameter has been captured does not mean that we do not
11569         have to do the rest of the processing.  This fixes the second part
11570         of #76592.  If there was another anonymous method capturing
11571         values in the past, the Scope would never be set for the second
11572         method that captured the same parameter.
11573
11574         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
11575         properly manipulate the stack.   Second part of fix for #76592.
11576
11577         * expression.cs (New): Add support for invoking "new" on
11578         interfaces that have been flagged with the ComImport attribute and
11579         the CoClass.  Fixes #76637 
11580
11581         * statement.cs (Try.DoEmit): When a variable is captured, do not
11582         try to emit the vi.LocalBuilder variable as it has been captured.
11583         Create a temporary variable and store the results on the
11584         FieldBuilder.  Fixes #76642
11585
11586 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
11587
11588         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
11589
11590         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
11591
11592         * expression.cs (Binary.DoResolve): Added && optimalization.
11593     
11594         * typemanager.cs (AddUserType): Removed useless argument.
11595
11596 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
11597
11598         * statement.cs (Block.variables): Uses ListDictionary.
11599
11600 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
11601
11602         Fix #75969.
11603         * class.cs (PartialContainer.EmitType): Customized to emit
11604         security attributes.
11605         (ClassPart.ApplyAttributeBuilder): Transform security attribute
11606         for partial classes.
11607
11608 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
11609
11610         Fix #76599.
11611         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
11612         access has to be fixed.
11613         
11614         * typemanager.cs (IsUnmanagedType): Wrong common field type.
11615
11616 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
11617
11618         Fix #76590.
11619         * ecore.cs (NullCast.Reduce): Implemented.
11620
11621         * expression.cs (ArrayCreation.CheckIndices): Correcly check
11622         constant type.
11623         
11624         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
11625         properly.
11626         (Foreach.Resolve): Catch null properly.
11627
11628 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
11629  
11630         * cs-tokenizer.cs: Warning text fix.
11631
11632         * driver.cs: AllWarningNumbers exposed on public interface.
11633
11634         * report.cs (): Reviewed warning numbers.
11635         (IsValidWarning): Use binary search.
11636
11637 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
11638  
11639         * driver.cs: Implemeted resource visibility.
11640         (Resources): New class for code sharing between /res: and
11641         /linkres:
11642  
11643 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
11644
11645         Fix #76568.
11646         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
11647         folding.
11648         
11649         * convert (Convert.ImplicitReferenceConversion): NullCast holds
11650         contants only.
11651         
11652         * ecore.cs (NullCast): Child is contant only.
11653         
11654         * literal.cs (NullLiteral.Reduce): null can be converted to any
11655         reference type.
11656
11657 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
11658
11659         * driver.cs: Use Encoding.Default as default code page instead
11660           of ISO-28591.
11661
11662 2005-10-27  Raja R Harinath  <rharinath@novell.com>
11663
11664         Fix #76085.
11665         * expression.cs (Invocation.Error_InvalidArguments): Handle
11666         __arglist parameters.
11667         (Invocation.VerifyArgumentsCompat): Likewise.
11668         * support.cs (ReflectionParameters.GetSignatureForError): Print
11669         __arglist parameters.
11670         (InternalParamters.GetSignatureForError): Likewise.
11671         * parameter.cs (Parameters.GetSignatureForError): Likewise.
11672
11673 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
11674
11675         * attribute.cs (GetPropertyValue): Made public.
11676
11677         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
11678         Resolve.
11679         Add new property WrapNonExceptionThrows to handle 2.0 assembly
11680         attribute.
11681         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
11682         is not defined.
11683         
11684         * driver.cs: Reflect method name change.
11685         
11686         * statement.cs (Try.Resolve): Warn when try has both general
11687         exception handlers.
11688         
11689         * typemanager.cs: runtime_compatibility_attr_type new predefined
11690         type.
11691
11692 2005-10-26  Raja R Harinath  <harinath@gmail.com>
11693
11694         Fix #76419.
11695         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
11696         treat it as an empty parameter list.
11697
11698 2005-10-26  Raja R Harinath  <rharinath@novell.com>
11699
11700         Fix #76271.     
11701         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
11702         ResolveAsTypeStep silent.
11703         * statement.cs (Block.AddConstant): Mark block as used.
11704         (Block.ResolveMeta): Avoid piling on error messages
11705         if a constant initializer resolution fails.
11706
11707 2005-10-25  Raja R Harinath  <rharinath@novell.com>
11708
11709         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
11710         Remove.
11711         (NamespaceEntry.VerifyAllUsing): New.
11712         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
11713         behaviour.  Delegates actual resolution of alias to ...
11714         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
11715         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
11716         Update.
11717         * driver.cs (Driver.MainDriver): Update.
11718         
11719         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
11720         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
11721         property.
11722         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
11723         Remove.
11724         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
11725         RootNamespace.DefineNamespacesForAll.
11726
11727 2005-10-24  Raja R Harinath  <harinath@gmail.com>
11728
11729         * typemanager.cs (assemblies, external_aliases, modules)
11730         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
11731         (ComputeNamespaces, GetRootNamespace): Remove extra staging
11732         overhead.  Move resposibility ...
11733         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
11734         * driver.cs, attribute.cs, codegen.cs: Update to changes.
11735
11736 2005-10-23  Raja R Harinath  <harinath@gmail.com>
11737
11738         * namespace.cs (RootNamespace.all_namespaces): Renamed from
11739         cached_namespaces.  Improve usage.
11740         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
11741         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
11742         Move from GlobalRootNamespace and simplify.
11743         (RootNamespace.Global): Make instance variable.
11744         (RootNamespace.RootNamespace): Add "alias name" parameter.
11745         (GlobalRootNamespace): Simplify drastically.
11746         (Namespace.Lookup): Don't use GetNamespace.
11747         * typemanager.cs (GetRootNamespace): Rename from
11748         ComputeNamespaceForAlias.
11749         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
11750
11751 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
11752
11753         * anonymous.cs (AnonymousContainer): Don't crash when container
11754         doesn't exist.
11755
11756 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
11757
11758         * expression.cs (Binary.DoResolve): Warn when comparing same
11759         values.
11760
11761 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
11762
11763         Fix #76486.
11764         * expression.cs (Binary.DoResolve): It looks like there are no
11765         convetsion rules in enum context.
11766
11767 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
11768
11769         Add support for extern alias qualifiers.
11770         * typemanager.cs: Move some LookupTypeReflection code
11771         to namespace.cs, to have cleaner code. Added some methods
11772         to help us keep track of the extern aliased references.
11773         * driver.cs: Add suport for extern alias assemblies on command
11774         line and check for their warnings/errors. Also keep track of the
11775         extern aliased assemblies.
11776         * namespace.cs: Move the global functionality of Namespace
11777         to GlobalRootNamespace/RootNamespace. Now the global namespace
11778         is GlobalRootNamespace.Globa. Also the code moved from 
11779         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
11780         Finally added LocalAliasEntry (AliasEntry before) and
11781         ExternAliasEntry, to handle alias statements.
11782         * cs-parser.jay: Add support in the grammar for extern alias
11783         statement.
11784         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
11785         Update callings to Namespace (now in GlobalRootNamespace).
11786
11787 2005-10-18  Raja R Harinath  <rharinath@novell.com>
11788
11789         Fix #76371.
11790         * class.cs (TypeContainer.DefineType): Move updating of
11791         topological sort earlier in the code.
11792         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
11793
11794 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
11795
11796         Fix #76273.
11797         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
11798         
11799         * constant.cs (Constant.TryReduce): Moved from Cast class.
11800         (Reduce): Made little bit more OO and fixed missing conversions.
11801         
11802         * ecore.cs (Reduce): Implemented.
11803         (Binary.EnumLiftUp): New method to upgrade values to enum values.
11804         
11805         * literal.cs (Reduce): Implemented.
11806         
11807         * class.cs: Reverted Miguel's wrong commit.
11808
11809 2005-10-14  Miguel de Icaza  <miguel@novell.com>
11810
11811         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
11812
11813 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
11814
11815         * cs-parser.jay, expression.cs : CS0214 was missing error location
11816           for constants. Fixed bug #76404.
11817
11818 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
11819
11820         Fix #76370.
11821         * convert.cs (ExplicitConversionCore): Fixed object->enum
11822         conversion.
11823
11824 2005-10-10  Raja R Harinath  <rharinath@novell.com>
11825
11826         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
11827         InstanceExpression.
11828         (PropertyExpr.EmitCall): Likewise.
11829         * expression.cs (Invocation.EmitArguments): Handle case where
11830         arguments == null.
11831         (Invocation.EmitCall): Avoid allocating temporary variable if
11832         there are no arguments.
11833
11834 2005-10-07  Raja R Harinath  <rharinath@novell.com>
11835
11836         Fix #76323.
11837         * convert.cs (ImplicitConversionStandard): Move conversion of
11838         void* to arbitrary pointer types ...
11839         (ExplicitConversionStandard): .. here.
11840         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
11841         error to always print typenames.
11842
11843 2005-10-07  Raja R Harinath  <rharinath@novell.com>
11844
11845         * convert.cs (GetConversionOperator): Rename from
11846         GetConversionOperators.  Move operator selection code from ...
11847         (UserDefinedConversion): ... here.
11848
11849 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
11850
11851         * convert.cs (ExplicitConversionCore): Removed duplicate enum
11852         conversion.
11853
11854 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
11855
11856         * assign.cs (Assign.DoResolve): Error method changed.
11857
11858         * cfold.cs (DoConstantNumericPromotions): Error method changed.
11859         
11860         * const.cs (ResolveValue): Reset in_transit immediately.
11861         
11862         * constant.cs: Error method changed.
11863         
11864         * convert.cs: Removed useless location parameter.
11865         (ExplicitNumericConversion): Don't do double enum check.
11866         (ExplicitConversionCore): Renamed from ExplicitConversion.
11867         (ExplicitUnsafe): Extracted from ExplicitConversion.
11868         (ExplicitConversion): Uses for error reporting.
11869         
11870         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
11871         error messages.
11872         (ResolveBoolean): Uses common error method.
11873         (CastToDecimal): Get rid of ec.
11874         (CastFromDecimal): Optimized.
11875         (ConvCast): Get rid of ec.
11876         
11877         * enum.cs (ResolveValue): Reset in_transit immediately.
11878         (Emit): Return after first error.
11879         
11880         * expression.cs: Convert changes.
11881         
11882         * literal.cs: Error method changed.
11883         
11884         * statement.cs: Error method changed.
11885
11886 2005-10-03  Raja R Harinath  <rharinath@novell.com>
11887
11888         * support.cs (SeekableStreamReader.Position): Don't error out when
11889         the requested position is just beyond the end of the current
11890         buffered data.
11891
11892 2005-09-28  Raja R Harinath  <rharinath@novell.com>
11893
11894         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
11895         try to keep in sync with the byte count of the underlying Stream.
11896         However, this limits us to a window size of 2048 characters: i.e.,
11897         the maximum lookahead of our lexer/parser can be 2048 characters.
11898
11899 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
11900
11901         Fix #76255.
11902         * driver.cs: Fix compilation files with full root path.
11903
11904 2005-09-25  Miguel de Icaza  <miguel@novell.com>
11905
11906         * report.cs (SymbolRelatedToPreviousError): Format the output so
11907         it does not use an open parenthesis that is never closed. 
11908
11909         * driver.cs: Follow coding guidelines
11910
11911 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
11912
11913         Fix #72930.
11914         * const.cs (Const.ResolveValue): Check for assigning non-null
11915         value to reference type.
11916
11917 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
11918
11919         * anonymous.cs: Implemented ExprClassName.
11920         
11921         * assign.cs (Assign.DoResolve): Don't chrash when type is not
11922         delegate.
11923         
11924         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
11925         check.
11926         
11927         * class.cs (StaticClass.DefineContainerMembers): Report protected
11928         members as error.
11929         
11930         * codegen.cs: if(ed) PRODUCTION.
11931         
11932         * convert.cs (Error_CannotImplicitConversion): Better error
11933         distinction.
11934         
11935         * cs-parser.jay: More error checks.
11936         
11937         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
11938         
11939         * driver.cs (CSCParseOption): Enabled wrong option check.
11940         
11941         * ecore.cs (Expression.ExprClassName): Turned to property.
11942         (MemberExpr.CheckIntermediateModification): For checking boxed
11943         value types     modification.
11944         
11945         * statement.cs (Fixed.Resolve): Expression type must be
11946         convertible to fixed type.
11947         (CollectionForeach.GetEnumeratorFilter,TryType):
11948         Small refactoring for easier error checking.
11949
11950 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
11951
11952         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
11953         attributes.
11954         
11955         * class.cs (GeneratedBaseInitializer): New class for customization
11956         compiler generated initializers.
11957         (MemberBase.DoDefine): Check Obsolete attribute here.
11958         (FieldMember.DoDefine): Ditto.
11959         
11960         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
11961         constants.
11962         
11963         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
11964         (MemberCore.GetObsoleteAttribute): Removed argument.
11965         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
11966         (MemberCore.CheckObsoleteType): New helper.
11967         
11968         * delegate.cs,
11969         * enum.cs,
11970         * statement.cs: Updates after MemberCore changes.
11971         
11972         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
11973         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
11974         
11975         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
11976         obsolete attribute for compiler construct.
11977         (As.DoResolve): Cache result.
11978         
11979         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
11980
11981 2005-09-26  Raja R Harinath  <rharinath@novell.com>
11982
11983         Fix #76133.
11984         * expression.cs (This.VerifyFixed): In a value type T, the type of
11985         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
11986         value type R, 'this' is treated as a value parameter.
11987
11988 2005-09-22  Miguel de Icaza  <miguel@novell.com>
11989
11990         * statement.cs (Lock): Use the TemporaryVariable class instead of
11991         manually using local variables as those do not work when variables
11992         are captured.
11993
11994         * ecore.cs: Moved the TemporaryVariable class from being a nested
11995         class inside Foreach to be a public class that can be employed in
11996         other places. 
11997
11998 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
11999
12000         * cs-parser.jay: interface_accessors replaced by
12001         accessor_declarations.
12002
12003         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
12004         location.
12005         
12006         * statement.cs (GotoCase.Resolve): Convert null constant to
12007         null case.
12008         (SwitchLabel.ResolveAndReduce): Ditto.
12009         (SwitchLabel.NullStringCase): Custom null stamp.
12010         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
12011         
12012         typemanager.cs (CSharpSignature): Don't skip first argument
12013         for full names.
12014
12015 2005-09-18  Miguel de Icaza  <miguel@novell.com>
12016
12017         * driver.cs: Set InEmacs based on the environment variable EMACS. 
12018
12019         * location.cs (InEmacs): in this mode, do not report column
12020         location as it confuses Emacs.
12021
12022 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
12023
12024         * cfold.cs, constant.cs, convert.cs, ecore.cs,
12025         expression.cs, iterators.cs, literal.cs: Store constants and
12026         literals location.
12027         
12028         * class.cs (MemberBase.ShortName): Pass location.
12029         
12030         * cs-parser.jay: Some location fixes.
12031         
12032         * ecore.cs (Expression.Location): Made virtual.
12033
12034 2005-09-05  Miguel de Icaza  <miguel@novell.com>
12035
12036         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
12037         if the underlying types are the same, otherwise we need to produce
12038         code that will do the proper cast.
12039
12040         This was exposed by Marek's constant rewrite which produced
12041         invalid code for the call site:
12042
12043         enum X : long { a }
12044         void Method (X v) {}
12045
12046         Method ((X) 5)
12047
12048         This fixes test-49.cs
12049
12050 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
12051
12052         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
12053           Type/Object should be allowed as well. Fixed bug #75968.
12054
12055 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
12056
12057         * expression.cs : (Binary.DoResolve): when one is enum constant and
12058           another is constant 0, then return enum one *as enum type*.
12059           Fixed bug 74846.
12060
12061 2005-09-02  Raja R Harinath  <rharinath@novell.com>
12062
12063         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
12064         internal.
12065
12066         Fix #75941.
12067         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
12068         flow-branching for LocalVariableReferences in case we were invoked
12069         from a MemberAccess.
12070         * expression.cs (LocalVariableReference.VerifyAssigned): New.
12071         Carved out of ...
12072         (LocalVariableReference.DoResolveBase): ... this.
12073         (MemberAccess.Resolve): Do the check that was disabled during
12074         SimpleNameResolve.
12075
12076 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
12077
12078         * class.cs :
12079           (PartialContainer.Create): check abstract/sealed/static strictly
12080           but abstract/sealed can exist only at one side. Fixed bug #75883.
12081
12082 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
12083
12084         Fix #75945.
12085         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
12086         specified, don't default to UnmanagedType.I4.
12087
12088 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
12089
12090         * expression.cs : conditional operator should check possibly
12091           incorrect assign expression. Fixed bug #75946.
12092
12093 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
12094
12095         * cs-tokenizer.cs, cs-parser.jay, driver.cs, support.cs :
12096           Reverting the change. gmcs is much complex than mcs on this matter.
12097
12098 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
12099
12100         * cs-tokenizer.cs : To read another token ahead of the actual 
12101           consumption, use new SavedToken and cache token instead of moving
12102           back the stream with SeekableStreamReader (it seemed problematic).
12103         * cs-parser.jay,
12104           driver.cs : Thus use StreamReader directly.
12105         * support.cs : Thus removed SeekableStreamReader.
12106
12107 2005-08-30  Raja R Harinath  <rharinath@novell.com>
12108
12109         Fix #75934.
12110         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
12111         (ScopeInfo.EmitScopeType): Use it to construct field names from
12112         names of captured locals.
12113
12114         Fix #75929.
12115         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
12116         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
12117         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
12118         (ExplicitConversion): Remove enum cases already handled by
12119         implicit conversion.  Move implicit conversion check to the beginning.
12120         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
12121         * expression.cs (ArrayCreation.EmitDynamicInitializers):
12122         Don't treat System.Enum as a struct.
12123
12124 2005-08-30  Jb Evain  <jbevain@gmail.com>
12125
12126         * attribute.cs: handles as expression in parameters.
12127
12128 2005-08-30  Raja R Harinath  <rharinath@novell.com>
12129
12130         Fix #75802.
12131         * class.cs (TypeContainer.VerifyClsName): Don't use a
12132         PartialContainer when verifying CLS compliance.
12133         (AbstractPropertyEventMethod): Set Parent here, ...
12134         (PropertyMethod): ... not here.
12135
12136 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
12137
12138         * attribute.cs : escaped attribute name should not be allowed to be
12139           resolved (e.g. @class as classAttribute). Fixed bug #75930.
12140
12141 2005-08-29  Raja R Harinath  <rharinath@novell.com>
12142
12143         Fix #75927.
12144         * convert.cs (ImplicitStandardConversionExists): Allow zero also
12145         when converting a long constant to unsigned long.
12146         * expression.cs (Invocation.OverloadResolve): Add sanity check to
12147         detect where IsApplicable and VerifyArgumentsCompat disagree.
12148
12149 2005-08-29  Raja R Harinath  <rharinath@novell.com>
12150         and Carlos Alberto Cortez  <carlos@unixmexico.org>
12151
12152         Fix #75848.
12153         * class.cs (TypeContainer.CanElideInitializer): New helper.
12154         (TypeContainer.EmitFieldInitializers): Use it to determine if we
12155         can safely emitting the initializer of a field.
12156
12157 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12158
12159         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
12160           allowed inside a switch (without loop). Fixed bug #75433.
12161
12162 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
12163
12164         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
12165         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
12166
12167 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12168
12169         * driver.cs : kinda reverting the default encoding changes (not exact 
12170           revert since I noticed that "codepage:reset" might not work fine).
12171
12172 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12173
12174         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
12175           Location. Now getter and setter store location correctly.
12176           (errors/cs0111-12.cs now reports the expected location.)
12177
12178 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12179
12180         * driver.cs : Use default encoding on the environment.
12181           Removed (now that) extra parameter for SeekableStreamReader.
12182         * support.cs : (SeekableStreamReader) third .ctor() argument for
12183           StreamReader is not required (always true). preamble size could
12184           be acquired in simpler and safe way.
12185
12186 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
12187
12188         * cs-parser.jay: report CS0642 at warning level 3
12189           and report CS0642 for an if else statement also
12190           fixes bug #74745. Patch by John Luke (and a bit
12191           modified by me).
12192           Removed extra CS0642 warning check for "while",
12193           "for" and "fixed".
12194         * statement.cs: In Block.Resolve(), CS0642 check
12195           is reimplemented to check a sequence of an empty
12196           statement and a block.
12197
12198           Both fix bug #66777.
12199
12200 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
12201
12202         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
12203         detection until I fix it.
12204         
12205         * cs-tokenizer.cs: Changed error message.
12206         
12207         * cs-parser.jay: Fixed 2 error locations.
12208         
12209         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
12210         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
12211         properties.
12212         
12213         * enum.cs (GetSignatureForError): Fixed.
12214         
12215         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
12216         method detection.
12217         
12218         * class.cs,
12219         * typemanager.cs (RegisterProperty): Removed.
12220         
12221         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
12222
12223 2005-08-24  Raja R Harinath  <rharinath@novell.com>
12224
12225         Fix #75874.
12226         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
12227         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
12228
12229 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12230
12231         * expression.cs : tiny fix is required for not warning positive ulong.
12232           See test-441.cs.
12233
12234 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12235
12236         * expression.cs : add CS0652 check for constant and integral
12237           expression. Fixed bug #53974.
12238
12239 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12240
12241         * expression.cs : in DoNumericPromotions(), check if there is implicit
12242           conversion overload for string (to check CS0034). Fixed bug #52492.
12243
12244 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12245
12246         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
12247
12248 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12249
12250         * ecore.cs : report location when it is *not* Null.
12251
12252 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12253
12254         * codegen.cs,
12255           ecore.cs,
12256           flowanalysis.cs,
12257           expression.cs:
12258           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
12259           correctly. Fixed bug #75721.
12260
12261 2005-08-23  Raja R Harinath  <rharinath@novell.com>
12262
12263         * support.cs (SeekableStreamReader.Position): Avoid an expensive
12264         loop that performs 'min (pos, char_count)'.
12265
12266         Fix #75862.
12267         * expression.cs (Unary.ResolveOperator): Don't discard implicit
12268         converted value in Operator.OnesComplement.
12269
12270 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
12271
12272         * anonymous.cs: If the anon method is pulled into a helper class,
12273         it needs to be `internal' not `private'. Fixes runtime behavior on
12274         msft. bug #75704
12275
12276 2005-08-20  Martin Baulig  <martin@ximian.com>
12277
12278         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
12279         scope if we don't already have it.
12280
12281         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
12282         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
12283         fixes #75867.
12284
12285 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
12286
12287         Fix #75803
12288         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
12289         is a partial class.
12290
12291 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
12292
12293         The big constants rewrite
12294         Fix #75746, #75685 and more
12295         As a side effect saved 1MB for MWF ;-)
12296         
12297         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
12298         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
12299         enum based for corlib compilation.
12300         
12301         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
12302         subtractions.
12303         
12304         * class.cs (FixedField.Define): Use ResolveAsConstant.
12305         
12306         * const.cs (IConstant): Interface constants and enums.
12307         (Const.ResolveValue): New method for constant resolvning.
12308         (ExternalConstant): Constants from imported assemblies.
12309         
12310         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
12311         conversion; like enums.
12312         (Constant.ToType): Converts this constant to different type.
12313         (Constant.Increment): Adds 1.
12314         
12315         * convert.cs (ImplicitConversionRequired): Simplified.
12316         
12317         * cs-parser.jay: Create EnumMember directly.
12318         
12319         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
12320         
12321         * doc.cs (GenerateEnumDocComment): Removed.
12322         
12323         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
12324         (ConvertIntLiteral): Removed.
12325         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
12326         
12327         * enum.cs (EnumMember): Implement IConstant.
12328         (Enum.IsValidEnumConstant): Removed.
12329         (Enum.GetNextDefaultValue): Removed.
12330         (Enum.FindMembers): Updated.
12331         (Enum.GenerateDocComment): Iterate enum members.
12332         
12333         * expression.cs (Cast.TryReduce): Handle enums correctly.
12334         (New.Constantify): Made public.
12335         (MemberAccess.DoResolve): Removed contant specific if(s).
12336         
12337         * literal.cs (NullLiteral): Implement new abstract methods.
12338         
12339         * statement.cs (GotoCase.Resolve): Use new constant methods.
12340         (SwitchLabel.ResolveAndReduce): Use new constant methods.
12341         
12342         * typemanager.cs (LookupEnum): Removed.
12343         (IsEnumType): Fixed to work with corlib.
12344         (RegisterConstant): Removed.
12345         (LookupConstant): Removed.
12346         (GetConstant): Changed to work with IConstant.
12347
12348 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
12349
12350         * location.cs : Fixed overflown (>255) column number.
12351
12352 2005-08-03  Raja R Harinath  <rharinath@novell.com>
12353
12354         First cut of the qualified-alias-member feature.
12355         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
12356         token.
12357         * cs-parser.jay (DOUBLE_COLON): New token.
12358         (namespace_or_type_name): Add rule for recognizing
12359         qualified-alias-members.
12360         (primary_expression): Likewise.
12361         (element_access): Allow QualifiedAliasMember as a possible
12362         type-bearing expression.
12363         (local_variable_type, local_variable_pointer_type): Likewise.
12364         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
12365         aliases in the current and enclosing namespace declarations.
12366         (NamespaceEntry.UsingAlias): Add CS0440 warning.
12367         * decl.cs (MemberName.is_double_colon): New.
12368         (MemberName.MemberName): Add new constructor for alias-member.
12369         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
12370         * expression.cs (QualifiedAliasMember): New expression type.
12371
12372 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12373
12374         * location.cs : it borked when no argument was specified.
12375
12376 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12377
12378         * location.cs : tiny ToString() format fix.
12379
12380 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12381
12382         * statement.cs : oops, it was missing.
12383
12384 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12385
12386         A set of fixes for precise line/column location.
12387
12388         * location.cs :
12389           "token" field now holds a file/line "delta", a line number offset 
12390           from the segment, and a column number. See also:
12391           http://lists.ximian.com/pipermail/mono-devel-list/2004-
12392           December/009508.html
12393           Removed static IsNull. Use instance IsNull property instead.
12394         * cs-tokenizer.cs :
12395           For some tokens it stores Location. For Identifier it stores
12396           LocatedToken which is a pair of string name and location.
12397           Column numbers are adjusted only at getChar().
12398         * report.cs :
12399           Use Location.ToString() for reporting (it now contains column).
12400         * cs-parser.jay :
12401           Largely modified to use LocatedToken instead of
12402           string (IDENTIFIER), and to acquire Location from some tokens.
12403         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
12404           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
12405           codegen.cs :
12406           Now MemberName holds Location. DeclSpace.ctor() receives Location
12407           as a parameter. Removed extra parameters to all derived classes.
12408           Replaced Location.IsNull() with instance property.
12409         * assign.cs, expression.cs :
12410           Added .ctor() overload that omits Location.
12411         * attribute.cs :
12412           Added "nameEscaped" flag that indicates the identifier was escaped
12413           in the source file. This fixes bug #57047.
12414
12415 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
12416
12417         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
12418         New method, looking for lo-case imported cls type.
12419
12420         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
12421         here.
12422
12423         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
12424
12425         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
12426
12427         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
12428         all_imported_types.
12429         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
12430
12431         Optimized to save 3.5 MB for SWF compilation.
12432
12433 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
12434
12435         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
12436         (PartialContainer.Create): Moved logic AddToContainer.
12437         (PartialContainer.MarkForDuplicationCheck): Shares name.
12438         
12439         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
12440         place.
12441         
12442         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
12443         initialization.
12444         (Namespace.GetSignatureForError): New method.
12445         
12446         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
12447         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
12448
12449 2005-08-01  Raja R Harinath  <rharinath@novell.com>
12450
12451         Fix #75669.
12452         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
12453         member lookup rather than qualifier_type, since qualifier_type can
12454         be null.
12455
12456 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
12457
12458         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
12459         enum member.
12460
12461 2005-07-31  Miguel de Icaza  <miguel@novell.com>
12462
12463         * statement.cs: Copy the local exception into the exception
12464         captured local.  Fixes 75674
12465
12466 2005-07-31  Raja R Harinath  <harinath@gmail.com>
12467
12468         Fix #75658.
12469         * expression.cs (Invocation.OverloadResolve): Don't report error
12470         CS1501 if error CS1502 has been reported.
12471         (New.DoResolve): Delegate CS1501 reporting to
12472         Invocation.OverloadResolve.
12473
12474         Fix #75656.
12475         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
12476         invariant-meaning-in-block property in an enclosing block if
12477         necessary.
12478
12479 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
12480
12481         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
12482         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
12483         (Switch.CheckSwitch): Just save 50kb for SWF.
12484
12485 2005-07-27  Martin Baulig  <martin@ximian.com>
12486
12487         * anonymous.cs (CaptureContext.AddField): Added
12488         `AnonymousContainer am' argument; compute its toplevel scope if
12489         it's not already computed.  Fixes #75649.
12490
12491 2005-07-26  Raja R Harinath  <rharinath@novell.com>
12492
12493         Fix #75628.
12494         * class.cs (Constructor.Emit): Reset block to null if the block
12495         resolve fails.
12496
12497 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
12498
12499         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
12500
12501 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
12502
12503         * class.cs (MethodData.Define): Check whether accessor implementing
12504         interface is public.
12505
12506         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
12507
12508 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
12509
12510         Fix #57245
12511         * namespace.cs (LookupType): Moved same type check to...
12512         
12513         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
12514         with the same name.
12515
12516 2005-07-21  Raja R Harinath  <rharinath@novell.com>
12517
12518         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
12519         already found a typebuilder.
12520         * class.cs (MethodCore.IsDuplicateImplementation): Compare
12521         MemberNames, not strings.
12522
12523         * const.cs (Error_ExpressionMustBeConst): 
12524         Rename from Error_EpressionMustBeConst.
12525         * const.cs, class.cs, statement.cd: Update.
12526
12527 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
12528
12529         Fix #65573
12530
12531         * const.cs (Const.LookupConstantValue): Report missing contant expression
12532         everytime.
12533         (Error_EpressionMustBeConstant): Only one error method.
12534
12535         * class.cs, statement.c: Updated.
12536
12537 2005-07-20  Raja R Harinath  <rharinath@novell.com>
12538
12539         * statement.cs (Block.Flags): Add back HasVarargs.
12540         (Block.flags): Make protected.
12541         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
12542
12543         * typemanager.cs (types, typecontainers, user_types): Remove.
12544         (UserTypes, TypeContainers): Likewise.
12545         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
12546         (CleanUp, Reset): Update.
12547         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
12548         (GetNestedType): Use Type.GetNestedType.
12549         (CoreLookupType): Take two arguments, the namespace and the
12550         basename of the type.  Update to use the Namespace.Lookup
12551         mechanism.
12552         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
12553         (RealMemberLookup): Use IsNestedChildOf instead of playing with
12554         string concatenation and substring matches.
12555         * class.cs, enum.cs, delegate.cs: Update to changes.
12556
12557 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
12558
12559         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
12560         Expression and made virtual.
12561
12562         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
12563         (ImplicitStandardConversionExists): Fixed `byte' typo ?
12564
12565         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
12566
12567         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
12568         error message.
12569
12570         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
12571         change.
12572
12573 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
12574
12575         Fix #57707
12576         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
12577         AssemblyCultureAttribute is not used on executable.
12578
12579         * rootcontext.cs,
12580         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
12581
12582 2005-07-16  Raja R Harinath  <rharinath@novell.com>
12583
12584         Fix #60638.
12585         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
12586         New.  Reports CS0252/CS0253.
12587         Mostly taken from preliminary patch by Duncak Mak.
12588         (Binary.DoResolveOperator): Store results of operator lookup.
12589         Use them to detect if we need to warn about unintended reference
12590         comparisons.
12591
12592 2005-07-15  Raja R Harinath  <rharinath@novell.com>
12593
12594         Fix #72969.
12595         * namespace.cs (Namespace.Lookup): Add back location parameter.
12596         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
12597         * delegate.cs, ecore.cs, expression.cs: Update to changes.
12598
12599         * codegen.cs (EmitContext.DeclSpace): Make readonly.
12600         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
12601         (Namespace.LookupType): ... this.
12602         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
12603         of namespaces.
12604         * typemanager.cs (LookupTypeReflection): Remove buggy code that
12605         purported to handle pointers.
12606         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
12607         CoreLookupType.
12608
12609 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
12610
12611         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
12612         type as namespace.
12613
12614 2005-07-15  Raja R Harinath  <rharinath@novell.com>
12615
12616         * namespace.cs (Namespace.Lookup): Drop location parameter.
12617         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
12618         (NamespaceEntry.Lookup): ... this.
12619         (NamespaceEntry.Error_AmbiguousTypeReference):
12620         Move here from DeclSpace.
12621         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
12622         names ...
12623         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
12624         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
12625         Move to NamespaceEntry.
12626         * delegate.cs, expression.cs: Update to changes.
12627
12628 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
12629
12630         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
12631         CheckAttributeType and refactored.
12632         (Attribute.ResolvePossibleAttributeType): Changed to reuse
12633         ResolveAsTypeTerminal error handling.
12634         (ResolveAsTypeTerminal): Introduced because of global attributes extra
12635         handling.
12636         (GetSignatureForError): Print errors in same way.
12637
12638         * class.cs,
12639         * codegen.cs: Reflect attribute GetSignatureForError change.
12640
12641         * ecore.cs,
12642         * expression.cs: Add silent parameter to ResolveAsTypeStep.
12643
12644         * namespace.cs (UsingEntry): Refactored to make fields private.
12645
12646         * assign.cs,
12647         statement.cs: Error_UnexpectedKind has extra parameter.
12648
12649 2005-07-14  Raja R Harinath  <rharinath@novell.com>
12650
12651         * ecore.cs (IAlias): Remove.
12652         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
12653         that implement the interface.
12654         * namespace.cs (Namespace): Likewise.
12655         (Namespace.declspaces): Renamed from 'defined_names'.
12656         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
12657         DeclSpace instead of an IAlias.
12658         * tree.cs (Tree.AddDecl): Update.
12659
12660 2005-07-12  Raja R Harinath  <rharinath@novell.com>
12661
12662         * statement.cs (Block.Flags); Remove HasVarargs.
12663         (Block.HasVarargs): Move to ToplevelBlock.
12664         (Block.ThisVariable, Block.AddThisVariable): Likewise.
12665         (Block.Variables): Make protected.  Initialize variable hashtable
12666         if necessary.
12667         (Block.AddVariable): Update.
12668         (Block.Resolve): Update to changes.
12669         (ToplevelBlock.HasVarargs): New boolean.
12670         (ToplevelBlock.ThisVariable): Move here from Block.
12671         (ToplevelBlock.AddThisVariable): Likewise.
12672         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
12673         * expression.cs (This.ResolveBase): Update to changes.
12674         (ArglistAccess.DoResolve): Likewise.
12675
12676 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
12677
12678         Fix #75321
12679         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
12680
12681         * class.cs (TypeContainer.VerifyMembers): Distinguish between
12682         not used and not used & assigned.
12683         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
12684
12685 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
12686
12687         Fix #75053
12688         * expression.cs (Is.DoResolve): null is never provided type.
12689
12690 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
12691
12692         Fix #52496
12693         * cs-parser.jay: Less strict event error rule to catch more errors.
12694
12695 2005-07-08  Martin Baulig  <martin@ximian.com>
12696
12697         Fix test-iter-10.cs - distinguish whether we `yield' in a property
12698         gettter (allowed) or setter (not allowed).
12699
12700         * class.cs (Accessor): Implement IIteratorContainer.
12701         (Accessor.Yields): New public field.
12702         (PropertyBase.PropertyMethod.Define): Handle iterators on a
12703         per-accessor basis.
12704
12705         * cs-parser.jay
12706         (get_accessor_declaration, set_accessor_declaration): Set the
12707         `yields' flag on the accessor, not the property.
12708         (property_declaration): Do the iterators check on a per-accessor
12709         basis and not for the whole property.
12710
12711 2005-07-08  Martin Baulig  <martin@ximian.com>
12712
12713         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
12714         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
12715
12716 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
12717
12718         Fix #74975
12719         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
12720         (ExtractSecurityPermissionSet): Cope with self referencing security
12721         attributes properly.
12722
12723         * driver.cs (SetOutputFile): Made public property OutputFile.
12724
12725 2005-07-07  Raja R Harinath  <rharinath@novell.com>
12726
12727         Fix #75486.
12728         * class.cs (TypeContainer.first_nonstatic_field): Rename from
12729         has_nonstatic_fields.  Make into a FieldBase pointer.
12730         (TypeContainer.AddField): Add CS0282 check.
12731         (TypeContainer.EmitType): Update.
12732
12733 2005-07-06  Miguel de Icaza  <miguel@novell.com>
12734
12735         * cs-tokenizer.cs (consume_identifier): Do not create strings to
12736         compare if they start with __.
12737
12738 2005-07-06  Raja R Harinath  <rharinath@novell.com>
12739
12740         * statement.cs (Switch.SwitchGoverningType): Only look at
12741         UserCasts that don't need implicit standard conversions to one of
12742         the allowed switch types (Fixes test-322.cs).
12743         (LocalInfo.Resolve): Re-enable sanity-test.
12744
12745 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
12746
12747         * cs-tokenizer.cs (consume_identifier): Detect double undescores
12748         
12749         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
12750         
12751         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
12752
12753 2005-07-06  Raja R Harinath  <rharinath@novell.com>
12754
12755         Fix #75472.
12756         * ecore.cs (SimpleName.GetSignatureForError): Add.
12757         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
12758         (MemberAccess.GetSignatureForError): Add.
12759
12760 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
12761  
12762         The big error and warning messages review.
12763         
12764         * anonymous.cs,
12765         * assign.cs,
12766         * attribute.cs,
12767         * class.cs,
12768         * codegen.cs,
12769         * convert.cs,
12770         * cs-parser.jay,
12771         * cs-tokenizer.cs,
12772         * decl.cs,
12773         * delegate.cs,
12774         * doc.cs,
12775         * driver.cs,
12776         * ecore.cs,
12777         * enum.cs,
12778         * expression.cs,
12779         * flowanalysis.cs,
12780         * iterators.cs,
12781         * literal.cs,
12782         * location.cs,
12783         * modifiers.cs,
12784         * namespace.cs,
12785         * parameter.cs,
12786         * pending.cs,
12787         * report.cs,
12788         * rootcontext.cs,
12789         * statement.cs,
12790         * support.cs,
12791         * tree.cs,
12792         * typemanager.cs: Updated.
12793         
12794         * class.cs: (MethodCore.SetYields): Moved here to share.
12795         (PropertyMethod.Define): Moved iterator setup here.
12796         
12797         * iterators.cs: Add orig_method to have full access to parent
12798         container.
12799
12800 2005-07-05  Raja R Harinath  <rharinath@novell.com>
12801
12802         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
12803         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
12804         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
12805         variable of struct type.
12806         * expression.cs (Unary.ResolveOperator): Update to change.
12807         (Indirection.VerifyFixed): Likewise.
12808         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
12809         (ParameterReference.VerifyFixed): Value parameters are fixed.
12810         (This.VerifyFixed): Treat 'this' as a value parameter.
12811         * statement.cs (LocalInfo.IsFixed): Remove.
12812
12813 2005-07-01  Martin Baulig  <martin@ximian.com>
12814
12815         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
12816         `ec.EmitThis ()' to get the correct scope.
12817
12818 2005-07-01  Martin Baulig  <martin@ximian.com>
12819
12820         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
12821         instance is a ParameterReference; fixes #75299.
12822
12823 2005-07-01  Martin Baulig  <martin@ximian.com>
12824
12825         Reverted Marek's latest patch (r46725):
12826         - it contains structural changes which are neither mentioned in
12827           the ChangeLog nor explained anywhere; for example the additional
12828           argument of EmitContext's and Iterator's .ctor's and the
12829           TypeContainer.DefineMembers() change.
12830         - structural changes like this should go in in seperate patches
12831           and not be hidden in a huge patch which just seems to affect
12832           warnings and errors.
12833           a big and hard to understand patch.
12834         - it breaks iterators and causes regressions, for instance in
12835           test-iter-03.cs.      
12836
12837 2005-06-30  Raja R Harinath  <rharinath@novell.com>
12838
12839         Fix #75412.
12840         * expression.cs (Indexers.map): Remove.
12841         (Indexers.Append): Filter out inaccessible setters and getters.
12842         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
12843
12844         Fix #75283.
12845         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
12846         Refactored from ...
12847         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
12848         (FieldExpr.Emit, PropertyExpr.Emit): Update.
12849         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
12850         * expression.cs (Invocation.EmitCall): Add CS0120 check.
12851
12852 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
12853
12854         Fix #75322
12855         * class.cs (FieldBase.GetInitializerExpression): One more field
12856         for backup.
12857
12858 2005-06-28  Miguel de Icaza  <miguel@novell.com>
12859
12860         * pending.cs: Do not define a proxy if the base method is virtual,
12861         it will be picked up by the runtime (bug 75270).
12862
12863 2005-06-08  Martin Baulig  <martin@ximian.com>
12864
12865         The big Iterators rewrite :-)
12866
12867         * iterators.cs: Rewrite this to use the anonymous methods framework.
12868
12869         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
12870         before the TypeContainers; see 2test-21.cs.
12871
12872         * class.cs
12873         (TypeContainer.DefineType): Don't create a new EmitContext if we
12874         already have one (this only happens if we're an Iterator).
12875         (TypeContainer.Define): Also call Define() on all our iterators.
12876         (Method.CreateEmitContext): Added support for iterators.
12877
12878         * anonymous.cs
12879         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
12880         (AnonymousContainer.CreateMethodHost): Moved here from
12881         AnonymousMethod and made abstract.
12882         (AnonymousContainer.CreateScopeType): New abstract method.
12883         (AnonymousContainer.IsIterator): New public property.
12884         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
12885         get the ScopeTypeBuilder rather than manually defining it here. 
12886         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
12887         iterators here.
12888
12889         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
12890         before RootContext.DefineTypes().
12891
12892         * codegen.cs (EmitContext.RemapToProxy): Removed.
12893         (EmitContext.CurrentAnonymousMethod): Changed type from
12894         AnonymousMethod -> AnonymousContainer.
12895         (EmitContext.ResolveTopBlock): Protect from being called twice.
12896         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
12897         (EmitContext.EmitThis): Removed the iterators hacks; use the
12898         anonymous methods framework for that.
12899
12900         * statement.cs
12901         (ToplevelBlock.Container): Make this a property, not a field.
12902         (ToplevelBlock.ReParent): New public method; move the
12903         ToplevelBlock into a new container.
12904         (Foreach.TemporaryVariable): Simplify.
12905
12906 2005-06-05  Martin Baulig  <martin@ximian.com>
12907
12908         * statement.cs (LocalInfo.CompilerGenerated): New flag.
12909         (Block.AddTemporaryVariable): New public method; creates a new
12910         `LocalInfo' for a temporary variable.
12911         (Block.EmitMeta): Create the LocalBuilders for all the temporary
12912         variables here.
12913         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
12914         non-iterator variables.
12915
12916 2005-06-05  Martin Baulig  <martin@ximian.com>
12917
12918         * statement.cs (Foreach.TemporaryVariable): Create the
12919         LocalBuilder in the Emit phase and not in Resolve since in some
12920         situations, we don't have an ILGenerator during Resolve; see
12921         2test-19.cs for an example.
12922
12923 2005-06-04  Martin Baulig  <martin@ximian.com>
12924
12925         **** Merged r45395 from GCS ****
12926
12927         The big Foreach rewrite - Part II.
12928
12929         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
12930         with `PropertyInfo ienumerator_getcurrent'.
12931
12932         * codegen.cs (VariableStorage): Removed.
12933
12934         * statement.cs
12935         (Foreach): Derive from Statement, not ExceptionStatement.
12936         (Foreach.CollectionForeach): New nested class.  Moved all the code
12937         dealing with collection foreach here.
12938         (Foreach.ForeachHelperMethods): Removed.
12939         (Foreach.TemporaryVariable): Implement IMemoryLocation.
12940
12941 2005-05-23  Martin Baulig  <martin@ximian.com>
12942
12943         * statement.cs (Try.DoResolve): Don't create a `finally' if we
12944         don't need to.  Fix #75014.
12945
12946 2005-05-20  Martin Baulig  <martin@ximian.com>
12947
12948         Merged r44808 from GMCS.
12949
12950         * class.cs (TypeContainer.CircularDepException): Removed.
12951         (TypeContainer.DefineType): Removed the `InTransit' stuff.
12952         (TypeContainer.CheckRecursiveDefinition): Check for circular class
12953         (CS0146) and interface (CS0529) dependencies here.
12954
12955 2005-06-21  Raja R Harinath  <rharinath@novell.com>
12956
12957         * expression.cs (Invocation.EmitCall): Fix initialization
12958         'this_call' to reflect current behaviour.  Fix indentation.
12959
12960         * convert.cs (FindMostEncompassedType): Add two trivial special
12961         cases (number_of_types == 0 || number_of_types == 1).
12962         (FindMostEncompasingType): Likewise.
12963
12964 2005-06-17  Raja R Harinath  <rharinath@novell.com>
12965
12966         Some cleanups preparing for the fix of #75283.
12967         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
12968         error testing.
12969         (EventExpr.InstanceResolve): Likewise.
12970         (EventExpr.DoResolve): Remove redundant checks.
12971
12972 2005-06-10  Duncan Mak  <duncan@novell.com>
12973
12974         * cs-tokenizer.cs (process_directives): New flag for controlling
12975         the processing of preprocessor directives.
12976         (x_token): After seeing a '#', return Token.NONE instead of going
12977         to handle_preprocessing_directive() when not processing
12978         directives. This avoids unnecessary processing during the token peek in
12979         is_punct().
12980
12981         This fixes #74939.
12982
12983         * cs-tokenizer.cs (handle_preprocessing_directive, xtoken): Use
12984         the existing error reporting methods instead of Report.Error.
12985
12986         * convert.cs (priv_fmt_expr): Remove. It's not needed anymore
12987         after Raja's rewrite.
12988
12989 2005-06-08  Miguel de Icaza  <miguel@novell.com>
12990
12991         * class.cs: Small fix.
12992
12993 2005-06-08  Raja R Harinath  <rharinath@novell.com>
12994
12995         Fix #75160.
12996         * class.cs (GetPartialBases): Fix return value check of
12997         part.GetClassBases.
12998
12999 2005-06-07  Raja R Harinath  <rharinath@novell.com>
13000
13001         Ensure that partial classes are registered in their enclosing
13002         namespace.  Initial part of fix of #75160.
13003         * tree.cs (Tree.RecordDecl): Add new namespace argument.
13004         Register declspace with namespace here, not in
13005         DeclSpace.RecordDecl.
13006         * cs-parser.jay: Pass namespace to RecordDecl.
13007         * class.cs (PartialContainer.Create): Likewise.
13008         (ClassPart.DefineType): New sanity-check.  Throws an exception if
13009         called.
13010         * decl.cs (Declspace.RecordDecl): Remove.
13011         * namespace.cs (NamespaceEntry.DefineName): Remove.
13012
13013 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
13014
13015         * rootcontext.cs: Reset TargetExt as well.
13016
13017 2005-06-03  Raja R Harinath  <rharinath@novell.com>
13018
13019         * ecore.cs (Expression.Resolve): Emit CS0654 error when
13020         -langversion:ISO-1.
13021
13022 2005-06-02  Raja R Harinath  <rharinath@novell.com>
13023
13024         Fix #75080, cs0119.cs.
13025         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
13026         of ...
13027         (Expression.Resolve): ... this.  Use it.  Remove bogus code
13028         allowing ExprClass.Type and ExprClass.Namespace for
13029         ResolveFlags.VariableOrValue.
13030         (Expression.Resolve) [1-argument variant]: Change default resolve
13031         flags based on language version.
13032         (Expression.Error_UnexpectedKind): Use a simple string array
13033         rather than an ArrayList.
13034         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
13035         not ExprClass.Type.
13036         (TypeOfVoid.DoResolve): Likewise.
13037         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
13038         flags argument -- it always has the same value.
13039
13040 2005-05-31  Raja R Harinath  <rharinath@novell.com>
13041
13042         Fix #75081.
13043         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
13044         Use it in the error message.
13045         * assign.cs, expression.cs, statement.cs: Update.
13046
13047 2005-05-30  Raja R Harinath  <rharinath@novell.com>
13048
13049         Fix #75088.
13050         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
13051         the "almostMatchedMember" case too.
13052         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
13053         that failed the accessibility checks to 'almost_match'.
13054
13055 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
13056
13057         * attribute.cs: Use internal MethodBuilder methods to set
13058         ExactSpelling and SetLastError on PInvoke methods, instead
13059         of passing them via charset.  Fixes #75060.
13060
13061 2005-05-27  Raja R Harinath  <rharinath@novell.com>
13062
13063         * parameter.cs (Parameter): Remove TODO comment.
13064         (Parameter.DefineParameter): Remove Location parameter.
13065         (Parameters.LabelParameters): Likewise.
13066         * class.cs (Constructor.Emit): Update to change.
13067         (MethodData.Emit): Likewise.
13068         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
13069         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
13070
13071 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
13072
13073         * parameter.cs,
13074           Removed Parameters.Location and added Parameter.Location instead.
13075           Removed Location parameter from Emit() and GetSignature().
13076         * anonymous.cs,
13077           class.cs,
13078           cs-parser.jay,
13079           delegate.cs,
13080           iterators.cs,
13081           statement.cs :
13082           Modified all related calls.
13083
13084 2005-05-26  Raja R Harinath  <rharinath@novell.com>
13085
13086         Improve user-defined conversion handling.
13087         * convert.cs (GetConversionOperators): Rewrite.  Return only the
13088         applicable operators.
13089         (AddConversionOperators): New.  Helper for GetConversionOperators.
13090         (FindMostEncompassedType, FindMostEncompassingType): Verify that
13091         there is only one most encompassed/encompassing type.
13092         (FindMostSpecificSource, FindMostSpecificTarget): Remove
13093         "applicable operator" handling.
13094         (UserConversion): Move cache here from GetConversionOperators.
13095         Directly cache the chosen operator, rather than the whole
13096         MethodGroup.
13097         (ExplicitNumericConversion): Fix buggy implementation of Decimal
13098         case.  Allow conversion of decimal to sbyte and byte too.
13099         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
13100         New static methods.  Used to avoid allocating EmptyExpressions in
13101         convert.cs.
13102
13103 2005-05-24  Duncan Mak  <duncan@novell.com>
13104
13105         * ecore.cs (CastFromDecimal): New class for casting a decimal to
13106         another class, used in Convert.ExplicitNumericConversion.
13107         (CastToDecimal): New class, similar to above, but casts to
13108         System.Decimal, used in Convert.ImplicitNumericConversion and also
13109         in explicit convesion from double/float to decimal.
13110
13111         * convert.cs (ImplicitNumericConversion): Handle implicit
13112         conversions to System.Decimal.
13113         (ExplicitNumericConversion): handle explicit conversions to
13114         System.Decimal.
13115
13116         This fixes #68711.
13117         
13118 2005-05-20  Miguel de Icaza  <miguel@novell.com>
13119
13120         * typemanager.cs (EnumToUnderlying): Do not throw if we do not
13121         know the type at this stage, just break through.   Fixes #75008 
13122
13123 2005-05-19  Martin Baulig  <martin@ximian.com>
13124
13125         * delegate.cs
13126         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
13127         to disable error reporting.
13128
13129         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
13130         here since we don't want to report an error; see the new test-336.cs.
13131
13132 2005-05-19  Raja R Harinath  <rharinath@novell.com>
13133
13134         * statement.cs (ToplevelBlock.GetParameterReference)
13135         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
13136         Move here from class Block.
13137         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
13138         * expression.cs (ParameterReference.DoResolveBase): Likewise.
13139
13140 2005-05-18  Martin Baulig  <martin@ximian.com>
13141
13142         Fix #74978.
13143
13144         * flowanalysis.cs
13145         (FlowBranching.Reachability): Add non-static public And() and Or()
13146         methods.
13147         (FlowBranchingSwitch): New class; do the `break_origins' thing
13148         like in FlowBranchingLoop.
13149         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
13150         reachability, not just locals and parameters.
13151         (FlowBranching.MergeChild): Remove some of the hacks for loop and
13152         switch; MergeBreakOrigins() now takes care of that.
13153
13154 2005-05-18  Martin Baulig  <martin@ximian.com>
13155
13156         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
13157         a loop and may leave it, reset the barrier; fixes #74974.
13158
13159 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
13160         
13161         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
13162         is back.
13163         
13164         * cs-parser.jay: Catch more lexical errors.
13165         
13166         * report.cs: Add one more Error method.
13167         
13168         * rootcontext.cs,
13169         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
13170
13171 2005-05-17  Martin Baulig  <martin@ximian.com>
13172
13173         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
13174         #70970. 
13175
13176 2005-05-16  Raja R Harinath  <rharinath@novell.com>
13177
13178         Fix test-382.cs.  Emit values of decimal constants.
13179         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
13180         Carved out of ...
13181         (TypeContainer.AddField): ... this.
13182         (TypeContainer.EmitFieldInitializers): Allow the list of fields
13183         with initializers to include 'Const's.
13184         (ClassPart.RegisterFieldForInitialization): Forward to
13185         PartialContainer.
13186         * const.cs (Const.Const): Pass initializer to base class.
13187         (Const.Define): In case of decimal constants, register them for
13188         initialization in a static constructor.
13189
13190 2005-05-14  Martin Baulig  <martin@ximian.com>
13191
13192         * statement.cs (Block.Resolve): Correctly handle unreachable code;
13193         do not call ResolveUnreachable() on unreachable statements in
13194         here, see the comment in the source code.
13195
13196 2005-05-13  Raja R Harinath  <rharinath@novell.com>
13197
13198         Fix #74934.
13199         * expression.cs (BinaryResolveOperator): If one of the operands of
13200         an equality comparison is 'null' and the other is a pointer type,
13201         convert the null to a NullPointer.
13202         * convert.cs (ImplicitReferenceConversion): If the expression is a
13203         NullLiteral and the target type is a pointer type, return a
13204         NullPointer instead.
13205         (ImplicitConversionStandard): Likewise.
13206
13207 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
13208         
13209         * cs-parser.jay: Set readonly context based on special constructs.
13210         
13211         * expression.cs (LocalVariableReference.DoResolveBase): Improved
13212         readonly variable error handling.
13213         
13214         * rootcontext.cs (EmitCode): Don't verify members when error
13215         occurred.
13216         
13217         * statement.cs (LocalInfo): Add reaodnly context information.
13218         (SetReadOnlyContext, GetReadOnlyContext): New methods.
13219
13220 2005-05-13  Raja R Harinath  <rharinath@novell.com>
13221
13222         * statement.cs (Block.Resolve): Revert change below.  Modify fix
13223         for #74041 to initialize 'resolved' to false only for explicit
13224         blocks.  Fixes #74873.
13225
13226 2005-05-12  Raja R Harinath  <harinath@gmail.com>
13227
13228         Fix #74920.
13229         * typemanager.cs (unmanaged_enclosing_types): New.
13230         (IsUnmanagedType): Avoid infloops by using
13231         'unmanaged_enclosing_types' to talk with recursive invocations.
13232
13233 2005-05-13  Martin Baulig  <martin@ximian.com>
13234
13235         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
13236         instance variable, not a local.  Fix #74873.
13237         (Block.ResolveUnreachable): Set it to true here.
13238
13239 2005-05-11  Duncan Mak  <duncan@novell.com>
13240
13241         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
13242         continuing to process for 'arg'.
13243         (handle_preprocessing_directive): Check the argument of the #endif
13244         directive and report error CS1025 if there are any trailing
13245         characters.
13246
13247         According to the C# spec, having even whitespace after the #endif
13248         directive is illegal; however, because we call arg.TrimEnd ()
13249         beforehand, we have the same behavior as csc, allowing whitespace
13250         after the directive.
13251
13252         Fixes #74892.
13253
13254 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
13255
13256         Fix #74863.
13257         
13258         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
13259         (Constructor.GetObsoleteAttribute): Implemented correctly.
13260
13261 2005-05-10  Martin Baulig  <martin@ximian.com>
13262
13263         * support.cs (ReflectionParameters.ParameterModifier): Use
13264         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
13265         and `ParameterAttributes.In'.  Fixes #74884.
13266
13267 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
13268
13269         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
13270         
13271         * expression.cs (Argument.GetParameterModifier): Turned to property.
13272         (Invocation.Error_InvalidArguments): Add more descriptive errors.
13273         
13274         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
13275         its C# equivalent.
13276         
13277 2005-05-09  Raja R Harinath  <rharinath@novell.com>
13278
13279         Fix #74852.
13280         * decl.cs (MemberCache.AddMethods): Register override methods,
13281         rather than non-override methods.
13282         * typemanager.cs (RegisterOverride): New.
13283         (IsOverride): Update.
13284
13285 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
13286
13287         Fix #73105.
13288         
13289         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
13290         recursive declaration.
13291         
13292         * statement.cs (Block.ResolveMeta): Report any error in resolving.
13293         
13294 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
13295
13296         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
13297         
13298         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
13299
13300 2005-05-05  Raja R Harinath  <rharinath@novell.com>
13301
13302         Fix #74797.
13303         * decl.cs (DeclSpace.FamilyAccessible): 
13304         Use TypeManager.IsNestedFamilyAccessible.
13305
13306         Fix reopened #64812.
13307         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
13308         internal'.
13309
13310 2005-05-04  Raja R Harinath  <rharinath@novell.com>
13311             Abin Thomas  <projectmonokochi@rediffmail.com>
13312             Anoob V E  <projectmonokochi@rediffmail.com>
13313             Harilal P R  <projectmonokochi@rediffmail.com>
13314
13315         Fix #64812.
13316         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
13317         allow access to all static members.
13318
13319 2005-05-04  Martin Baulig  <martin@ximian.com>
13320
13321         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
13322
13323 2005-05-04  Martin Baulig  <martin@ximian.com>
13324
13325         Fix #74655.
13326
13327         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
13328         section at the end; make things work if `default' is not the last
13329         section.        
13330
13331 2005-05-04  Martin Baulig  <martin@ximian.com>
13332
13333         Fix #70400.
13334
13335         * statement.cs (Switch): Replaced the `got_default' field with a
13336         `default_section' one.
13337         (Switch.CheckSwitch): Set `default_section' here.
13338         (Switch.Resolve): If we're a constant switch and the constant is
13339         not found, use the default section.
13340
13341 2005-05-03  Martin Baulig  <martin@ximian.com>
13342
13343         * expression.cs (ArrayAccess.EmitGetLength): New public method.
13344
13345         * statement.cs (Foreach.ArrayForeach): New nested class.
13346         (Foreach.TemporaryVariable): New nested class.
13347         (Foreach.EmitArrayForeach): Removed; this is now in the new
13348         ArrayForeach class.
13349
13350 2005-05-03  Raja R Harinath  <rharinath@novell.com>
13351
13352         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
13353         more conservative.
13354         (VerifyPendingMethods): Revert change below.
13355
13356         * typemanager.cs (IsOverride, RegisterNonOverride): New.
13357         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
13358         that used to trigger warning -28.  Remove warning -28.
13359         * expression.cs (Invocation.OverloadResolve): Use
13360         TypeManager.IsOverride to distinguish override methods.
13361
13362         Fix #74773.
13363         * pending.cs (VerifyPendingMethods): If a base type implements the
13364         requested interface, don't bother checking individual methods of
13365         the base type.  As a side-effect, this prevents the creation of
13366         unnecessary proxies.
13367
13368 2005-05-02  Martin Baulig  <martin@ximian.com>
13369
13370         Fix #70182.
13371
13372         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
13373         Also `And' the locals if the old vector is null.
13374         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
13375         null; in this case we basically reset all the variables.        
13376
13377 2005-05-02  Martin Baulig  <martin@ximian.com>
13378
13379         Fix #74529.
13380
13381         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
13382         Added `FlowBranching branching' argument; always `and' the
13383         variables instead of `or'ing them unless we're an infinite loop.
13384
13385         * statement.cs (While.Resolve): Create a new sibling unless we're
13386         infinite.       
13387
13388 2005-05-02  Martin Baulig  <martin@ximian.com>
13389
13390         Fix #70140.
13391
13392         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
13393         arguments; use it instead of creating a new TopLevelBlock.
13394         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
13395         our ConstructorInitializer.
13396
13397         * statement.cs
13398         (TopLevelBlock.TopLevelBranching): New public property.
13399         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
13400         and create our `TopLevelBranching'.
13401
13402         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
13403         anonymous method host, use `block.TopLevelBranching' rather than
13404         creating a new branching.
13405
13406 2005-04-20  Miguel de Icaza  <miguel@novell.com>
13407
13408         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
13409         a ScopeInfo, if any of the current children is a child of the new
13410         entry, move those children there.
13411
13412 2005-04-30  Martin Baulig  <martin@ximian.com>
13413
13414         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
13415         at the beginning of a SwitchSection.  Fix #73335.
13416
13417 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
13418
13419         Fix #74378
13420         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
13421         
13422         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
13423         (FieldExpr.DoResolve): Obsolete members are ignored for field
13424         initializers.
13425         
13426 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
13427
13428         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
13429         of arrays detection.
13430
13431         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
13432         verification.
13433         (Field.VerifyClsCompliance): Volatile fields are not compliant.
13434
13435         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
13436         arrays report.
13437
13438 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
13439
13440         * cs-parser.jay: Use the prefered version of -unsafe in error
13441         message.
13442
13443 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
13444
13445         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
13446         circumstances.
13447
13448 2005-04-20  John Luke  <john.luke@gmail.com>
13449
13450         * driver.cs: fix typo in error message, --outout to --output
13451
13452 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
13453
13454         * codegen.cs (InRefOutArgumentResolving): New field.
13455         
13456         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
13457         fields outside contructor.
13458         
13459         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
13460         
13461 2005-04-19  Miguel de Icaza  <miguel@novell.com>
13462
13463         * anonymous.cs (CaptureContext.EmitParameterInstance): The
13464         parameter code was not completed ever, so it was not as up-to-date
13465         as local variables.  Must finish it.
13466
13467         The bug fix was to compare the Toplevel of the block, not the
13468         current block.  Thanks for Ben for pointing this out. 
13469
13470 2005-04-19  Raja R Harinath  <rharinath@novell.com>
13471
13472         * decl.cs (AddMethods): Use the declaring type of the problem
13473         method to determine if we want to squash a warning.
13474
13475 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
13476
13477         * attribute.cs: Removed debug output.
13478
13479         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
13480         
13481         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
13482         Report.Stderr.
13483         
13484 2005-04-18  Raja R Harinath  <rharinath@novell.com>
13485
13486         Fix #74481.
13487         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
13488         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
13489         all null comparisons against reference types.
13490
13491 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
13492
13493         Fix# 74565
13494         * class.cs (TypeContainer.CircularDepException) New nested
13495         exception class.
13496         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
13497         (TypeContainer.DefineType): Removed error, reset InTransit before
13498         exit.
13499         (Class.DefineType): Throw exception when is in Transit.
13500         Catch exception and report error.
13501         (Struct.DefineType): Throw exception when is in Transit.
13502         Catch exception and report error.
13503         (Interface.DefineType): Throw exception when is in Transit.
13504         Catch exception and report error.
13505
13506         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
13507         handle nested exception handlers.
13508
13509         * flowanalysis.cs (InTryWithCatch): New method, search for try with
13510         a catch.
13511
13512         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
13513         InFinally and InCatch storage.
13514
13515         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
13516         (Catch.Resolve): Set and Restore ec.InCatch.
13517         (Try.Resolve): Set and Restore ec.InFinally.
13518         (Try.HasCatch): True when try has catch.
13519
13520 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
13521
13522         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
13523           for the same event member, so exclude such cases from warning 419.
13524           Fixed bug #74633.
13525
13526 2005-04-16  Miguel de Icaza  <miguel@novell.com>
13527
13528         * expression.cs (Binary.ResolveOperator): Apply patch from John
13529         Luke to fix bug 59864: operators &, | and ^ on enumerations
13530         require that the same enum type on both sides.
13531
13532         * driver.cs: Add warnings to old flag usage, this is to assist
13533         people who produce Makefiles and hope that the Makefiles will be
13534         used on Windows.
13535
13536         * class.cs (TypeContainer.EmitType): Moved the definition of the
13537         special $PRIVATE$ field from the resolve phase to the Emit phase.
13538         During resolve we do not know if we are a struct with
13539         HasExplicitLayout, we know this only after the attributes for the
13540         type are emitted.
13541
13542         Set the FieldOffset to zero on the dummy field that we create for
13543         the class.   Fixes 74590.
13544
13545 2005-04-16  Raja R Harinath  <rharinath@novell.com>
13546
13547         Fix #73834.
13548         * ecore.cs (PropertyExpr.resolved): New.
13549         (DoResolve): Use it to handle a case of double resolution here.
13550         Handle a case of identical-name-and-type-name.
13551         * expression.cs (ArrayCreation.CheckIndices): Avoid double
13552         resolution by storing the results of expression resolution back
13553         into the "probes" array.
13554
13555 2005-04-15  Raja R Harinath  <rharinath@novell.com>
13556
13557         Fix cs0208-7.cs and cs0208-8.cs.
13558         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
13559         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
13560         error reporting to point out the reason a struct is not unmanaged.
13561
13562 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
13563
13564         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
13565           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
13566
13567 2005-04-13  Raja R Harinath  <rharinath@novell.com>
13568
13569         Fix #74528.
13570         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
13571         IdenticalNameAndTypeName here.
13572         (EventExpr.InstanceResolve): Likewise.
13573
13574 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
13575
13576         C# 2.0 DefaultCharSetAttribute implementation
13577         
13578         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
13579         which allows us to set GlobalNamespace for every resolve.
13580         (Attribute.ResolveArguments): Cut from Resolve.
13581         (Attribute.GetCharSetValue): Returns CharSet named argument.
13582         (Attribute.DefinePInvokeMethod): Gets default charset from
13583         module settings.
13584         (GlobalAttribute.ResolveAsTypeStep): Override.
13585         (GlobalAttribute.ResolveArguments): Override.
13586         
13587         * class.cs (TypeAttr): Is protected.
13588         
13589         * codegen.cs (ModuleClass.DefaultCharSet): New member.
13590         (ModuleClass.DefaultCharSetType): New memeber.
13591         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
13592         
13593         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
13594         charset from module.
13595         
13596         * delegate.cs (TypeAttr): Override.
13597         (Delegate.DefineType): Use this TypeAttr.
13598         
13599         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
13600         at very early stage (before types are defined) to resolve model
13601         module attributes. It will probably not work with corlib but it
13602         should be ok.
13603         
13604         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
13605         charset from module.
13606         
13607         * typemanager.cs (default_charset_type): New type.
13608
13609 2005-04-13  Raja R Harinath  <rharinath@novell.com>
13610
13611         * decl.cs (MemberCache.AddMethods): Don't warn if
13612         System.Object.Finalize has buggy MethodAttributes.
13613
13614         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
13615         removed below.
13616
13617 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
13618
13619         * doc.cs : detect ambiguous reference to overloaded members.
13620           Fixed bug #71603. MS 1.1 csc does not detect it.
13621
13622 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
13623
13624         * doc.cs : delegates must not be referenced with parameters.
13625           Fixed bug #71605.
13626
13627 2005-04-12  Miguel de Icaza  <miguel@novell.com>
13628
13629         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
13630
13631 2005-04-10  Miguel de Icaza  <miguel@novell.com>
13632
13633         * driver.cs (MainDriver): Stop processing if the CLS stage found
13634         errors. 
13635
13636         (CompilerCallableEntryPoint.InvokeCompiler): Always
13637         reset after execution;   Take a TextWriter argument for the
13638         output.
13639
13640         * report.cs: Use the error stream instead of hardcoding stderr. 
13641
13642 2005-04-09  Miguel de Icaza  <miguel@novell.com>
13643
13644         * class.cs: Reduce code paths to test, too small of an
13645         optimization to make it worth the extra testing.  Always perform
13646         it. 
13647
13648 2005-04-08  Raja R Harinath  <rharinath@novell.com>
13649
13650         Fix #74510.
13651         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
13652         operators that had errors reported on them.
13653
13654 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
13655
13656         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
13657         argument types.
13658         (Attribute.Resolve): Add named argument type checking.
13659         
13660         * class.cs (FixedField.Define): Use IsPrimitiveType
13661         
13662         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
13663         
13664         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
13665         unsafe parameter types.
13666         
13667         * statement.cs (Using.ResolveExpression): Add better error description.
13668         
13669         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
13670         
13671 2005-04-08  Raja R Harinath  <rharinath@novell.com>
13672
13673         Fix #74484.
13674         * attribute.cs (Attribute.GetAttributeUsage): Resolve
13675         AttributeUsageAttribute in the emitcontext of the attribute class,
13676         not in the emitcontext of the attributable entity it was attached to.
13677         * cs-parser.jay: Use 'current_class', not 'current_container',
13678         when creating a GlobalAttribute.
13679
13680 2005-04-08  Alp Toker  <alp@atoker.com>
13681
13682         * pending.cs: The fix to #58413 failed to compile methods implementing
13683         interfaces with/without params modifiers and vice versa, even though
13684         params modifiers aren't part of the signature. Make the modifier check
13685         less strict as in csc.
13686
13687 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
13688             Anoob V E  <projectmonokochi@rediffmail.com>
13689             Harilal P R  <projectmonokochi@rediffmail.com>
13690
13691         Fix #58413.
13692         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
13693         modifiers of pending methods.
13694         (PendingImplementation.PendingImplementation): Initialize it.
13695         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
13696         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
13697         with ParameterData.  Add check for modifiers.
13698         * class.cs (MethodData.Define): Update to changes.
13699
13700 2005-04-07  Raja R Harinath  <rharinath@novell.com>
13701
13702         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
13703
13704 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
13705
13706         * class.cs (PropertyMethod.Define): Check private accessor in abstract
13707         property.
13708         
13709         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
13710         
13711         * rootcontext.cs,
13712         * typemanager.cs: Registered RequiredAttributeAttribute.
13713         
13714 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
13715
13716         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
13717         Warning CS0169 is back at level 3.
13718         (IMethodData.SetMemberIsUsed): New method.
13719         
13720         * decl.cs (IsUsed): New value; moved from FieldBase.Status
13721         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
13722         
13723         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
13724
13725         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
13726         contants.
13727         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
13728         is used.
13729         
13730         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
13731         is used.
13732         
13733         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
13734         to avoid the problems with nested types.
13735
13736 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
13737             Anoob V.E  <projectmonokochi@rediffmail.com>
13738             Harilal P.R  <projectmonokochi@rediffmail.com>
13739             Raja R Harinath  <rharinath@novell.com>
13740
13741         Fix #73820.
13742         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
13743         attribute.
13744         * typemanager (GetConstructor): Make public.
13745
13746 2005-04-05  John Luke  <john.luke@gmail.com>
13747             Raja R Harinath  <rharinath@novell.com>
13748
13749         Fix #62232.
13750         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
13751         struct too.  Return false quicker in a few cases.
13752         (VerifyUnManaged): Use it.
13753
13754 2005-04-05  Raja R Harinath  <rharinath@novell.com>
13755
13756         Fix #74041.
13757         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
13758         not 'unreachable_seen'.
13759
13760 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
13761
13762         * attribute.cs (Attribute.GetValue): Removed unused.
13763         
13764         * codegen.cs (CodeGen.TrimExt): Removed unused.
13765         
13766         * cs-parser.jay (output): Removed unused.
13767         
13768         * cs-tokenizer.cs (hex_digits): Removed unused.
13769         
13770         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
13771         
13772         * expression.cs (Indirection.LoadExprValue): Removed unused.
13773         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
13774         
13775         * iterators.cs (Iterator.param_types): Removed unused.
13776         
13777         * statement.cs (Goto.block): Removed unused.
13778         (ToplevelBlock.did): Removed unused.
13779         (Switch.ResolveConstantSwitch): Removed unused.
13780
13781 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
13782
13783         * rootcontext.cs: Allow mcs to bootstrap with the compilation
13784         resetting thingy.
13785
13786 2005-04-01  Raja R Harinath  <rharinath@novell.com>
13787
13788         Fix #74232 and cs0208-3.cs.
13789         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
13790         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
13791         unmanaged type.  Don't use FieldBuilders when 't' is a
13792         TypeBuilder.  Use ModFlags and MemberType fields.
13793         * class.cs (MemberBase.member_type): Rename from MemberType.
13794         (MemberBase.MemberType): New property.  Determines member_type on
13795         demand.
13796         (MemberBase.DoDefine): Don't initialize MemberType here.
13797         (FieldMember.Define): Likewise.
13798
13799 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
13800
13801         Fix #74241
13802         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
13803         Attributes are emitted there.
13804         
13805 2005-04-01  Raja R Harinath  <rharinath@novell.com>
13806
13807         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
13808         keyword in 'partial enum' too.
13809         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
13810         is not allowed).
13811         Report from Kamil Skalski <nazgul@omega.pl>.
13812
13813         Fix #74309.
13814         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
13815         have partial containers too.
13816
13817         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
13818         in block' checks to Block.CheckInvariantMeaningInBlock.
13819         * statement.cs (Block.GetKnownVariableInfo): Make private.
13820         (Block.IsVariableUsedInChildBlock): Remove.
13821         (Block.IsVariableUsedInBlock): Likewise.
13822         (Block.CheckInvariantMeaningInBlock): New.  Show location of
13823         conflicting declaration.
13824         (Block.AddVariable): Make error messages less long-winded and more
13825         specific.  Show location of conflicting declaration.
13826         * parameter.cs (Parameters.Location): New readonly property.
13827
13828 2005-03-31  Raja R Harinath  <rharinath@novell.com>
13829
13830         Clean up semantics of invoking ResolveMemberAccess.
13831         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
13832         can have an instance, ensure that we pass in a non-TypeExpression
13833         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
13834         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
13835         argument.  Update to changes and simplify.
13836         (FieldExpr.Emitinstance): Remove CS0120 check.
13837         (PropertyExpr.EmitInstance): Likewise.
13838         * expression.cs (Argument.Resolve): Likewise.
13839         (Invocation.DoResolve): Update to changes in semantics of
13840         InstanceExpression.
13841
13842 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
13843
13844         Fix #74241
13845         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
13846         customization.
13847         
13848         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
13849
13850 2005-03-31  Raja R Harinath  <rharinath@novell.com>
13851
13852         Fix difference in behaviour with commandline invocation.
13853         * driver.cs (Driver.Reset): New.
13854         (CompilerCallableEntryPoint): Call it.
13855
13856         * statement.cs (If.Resolve): Avoid spurious "uninitialized
13857         variable" warnings if the boolean expression failed to resolve.
13858
13859 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
13860
13861         * attribute.cs: Fix the union of several permissions when some of them
13862         are unrestricted (so the result isn't an unrestricted permission set).
13863         Fix #74036.
13864
13865 2005-03-30  Raja R Harinath  <rharinath@novell.com>
13866
13867         * ecore.cs (MemberExpr): New class.  Convert from interface
13868         IMemberExpr.
13869         (MemberExpr.ResolveMemberAccess): Refactor and move here from
13870         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
13871         error checks.
13872         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
13873         (MethodGroupExpr.IsExplicitImpl): Remove.
13874         (Expression.GetFieldFromEvent): Remove.
13875         (SimpleName.MemberStaticCheck): Remove.
13876         (SimpleName.DoSimpleNameResolve): Update to changes.
13877         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
13878         (MemberAccess.IdenticalNameAndTypeName): Remove.
13879         (MemberAccess.error176): Move to MemberExpr.
13880         (MemberAccess.DoResolve): Update to changes.
13881         (BaseAccess.DoResolve): Likewise.
13882
13883 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
13884
13885         C# 2.0 Conditional attribute class implementation
13886         
13887         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
13888         Analyzes class whether it has attribute which has ConditionalAttribute
13889         and its condition is not defined.
13890         
13891         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
13892         (Class.IsExcluded): New method. Search for at least one defined
13893         condition in ConditionalAttribute of attribute class.
13894
13895 2005-03-30  Raja R Harinath  <rharinath@novell.com>
13896
13897         * ecore.cs (PropertyExpr): Derive from Expression, not
13898         ExpressionStatement.
13899         (PropertyExpr.EmitStatement): Remove.
13900
13901 2005-03-29  Raja R Harinath  <rharinath@novell.com>
13902
13903         Fix #74060.
13904         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
13905         internal field "value__" of an enum be private.  The examples for
13906         "value__" that I found on MSDN all used FieldAttributes.Private.
13907
13908         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
13909         Don't mention IL method attribute names.
13910
13911         Fix #47991.  Remove a TODO.
13912         * statement.cs (Block.Toplevel): Make into a field.
13913         (Block.Parameters): Move into ToplevelBlock.
13914         (Block.known_variables): Rename from child_variable_names.
13915         (Block.Block): Remove variants that take Parameters.  Initialize
13916         'Toplevel' with the immediately surrounding toplevel block.
13917         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
13918         LocalInfo parameter.
13919         (Block.GetKnownVariableInfo): New.
13920         (Block.IsVariableNameUsedInChildBlock): Update.
13921         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
13922         the block, even though it may not be in scope.
13923         (Block.AddVariable): Remove Parameters parameter.  Use
13924         Toplevel.Parameters instead.
13925         (Block.AddConstant): Remove Parameters parameter.
13926         (Block.GetParameterReference): Update to use Toplevel.Parameters.
13927         (Block.IsParamaterReference): Likewise.
13928         (Block.IsLocalParameter): Likewise.  Simplify a lot.
13929         (ToplevelBlock.Parameters): New.  Moved from Block.
13930         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
13931         initialize Parameters to a non-null value.
13932         * cs-parser.jay: Update to changes.
13933         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
13934         simple names that mean different things in the same block.  Use
13935         Block.IsVariableNameUsedInBlock.
13936
13937 2005-03-28  Raja R Harinath  <rharinath@novell.com>
13938
13939         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
13940         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
13941         GetTypeHandle.  It is possible for a reflected type to derive from
13942         a TypeBuilder (e.g., int[] derives from the TypeBuilder
13943         System.Array during mscorlib compilation).
13944         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
13945         contain a method_hash, don't create one either.  Don't create a
13946         deep copy of the base cache's method_hash.
13947         (MemberCache.SetupCache): Rename back from DeepCopy.
13948         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
13949         already initialized.  If we see an override function, add its
13950         underlying base virtual function to the member_hash too.
13951
13952         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
13953
13954 2005-03-26  Raja R Harinath  <harinath@acm.org>
13955
13956         Fix #73038.
13957         * assign.cs (Assign.DoResolve): When the RHS of an assignment
13958         fails to resolve, ensure that the LHS is still resolved as an
13959         lvalue.
13960
13961 2005-03-25  Raja R Harinath  <harinath@acm.org>
13962
13963         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
13964         ec.ContainerType.
13965         (Enum.current_ec): Remove.
13966         (Enum.LookupEnumValue): Remove EmitContext argument.
13967         Just uses the one created during DefineType.
13968         (Enum.FindMembers): Update.
13969         * expression.cs (MemberAccess.DoResolve): Update.
13970
13971 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
13972
13973         * assign.cs (Assign.DoResolve): Check for CS1717 when
13974         source and target are same (uses Equals).
13975
13976         * expression.cs (LocalVariableReference, ParameterReference,
13977         This): Implemented Equals, GetHashCode.
13978
13979         * statement.cs (Block.GetParameterReference): Removed useless
13980         local variable.
13981
13982 2005-03-22  Raja R Harinath  <rharinath@novell.com>
13983
13984         Fix cs0128.cs
13985         * statement.cs (Block.AddVariable): Ensure that we skip implicit
13986         blocks before deciding whether the error is cs0136 or cs0128.
13987
13988         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
13989         (using_alias_directive, using_namespace_directive): Pass
13990         MemberName, not an expression to Namespace.UsingAlias and
13991         Namespace.Using.
13992         (MakeName): Use the MemberName of the namespace.
13993         * namespace.cs (Namespace.MemberName): New.
13994         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
13995         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
13996         Likewise.
13997         * decl.cs (MemberName.Name): Make readonly.
13998         (MemberName.FromDotted): New "constructor".
13999         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
14000         (MemberCore.Name): Compute from MemberName on demand.
14001         (MemberCore.SetMemberName): Provide a way to change the
14002         MemberName.
14003         (MemberCore.AddToContainer): Don't take a fullname parameter.
14004         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
14005         fully qualified name of the container to the member name.
14006         (TypeContainer.AddToTypeContainer): Use a fully qualified name
14007         only if the type is a member of the root container.
14008         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
14009         MemberName.Left rather than searching for an embedded ".".
14010         (PartialContainer.CreatePart): Update to changes in RootContext.
14011         (MemberBase.ShortName): Turn into a property.  Use
14012         MemberCore.SetMemberName.
14013         (MemberBase.ExplicitInterfaceName): Remove.
14014         (MemberBase.UpdateMemberName): Remove.
14015         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
14016         (PropertyBase.SetMemberName): New override.
14017         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
14018         (Tree.GetDecl): New.
14019         (Tree.AllDecls): Rename from Decls.
14020         * attribute.cs, enum.cs, report.cs: Update to changes.
14021         * driver.cs (MainDriver): Use MemberName.FromDotted on
14022         RootContext.MainClass.
14023
14024 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
14025
14026         * class.cs (FixedField.Define): Check for CS1664 and more sanity
14027         checks.
14028
14029         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
14030
14031 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
14032
14033         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
14034         property accessor modifiers.
14035
14036         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
14037         fixed buffer attribute (CS1716).
14038         (PropertyMethod.HasCustomAccessModifier): When property accessor
14039         has custom modifier.
14040
14041         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
14042         modifiers.
14043         (PropertyExpr.DoResolveLValue): Add CS0272.
14044
14045 2005-03-17  Miguel de Icaza  <miguel@novell.com>
14046
14047         * convert.cs: When converting to a pointer, use the proper Conv.U
14048         or Conv.I depending on the source data type.
14049
14050         * cs-tokenizer.cs: Make the size for large decimal constants,
14051         fixes #72957.
14052
14053 2005-03-17  Martin Baulig  <martin@ximian.com>
14054
14055         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
14056         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
14057
14058 2005-03-17  Martin Baulig  <martin@ximian.com>
14059
14060         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
14061         to bool so we can return an error condition.
14062         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
14063         returned an error.
14064
14065 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
14066
14067         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
14068         attributes.
14069
14070 2005-03-16  Raja R Harinath  <rharinath@novell.com>
14071
14072         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
14073         Refactor to avoid traversing the list of assemblies, and to avoid
14074         string concatenation.
14075         * typemanager.cs (guid_attr_type): Remove.
14076         (negative_hits, pointers, references): Remove hashes.
14077         (type_hash): New.
14078         (GetConstructedType): New.  Uses type_hash to handle constructed
14079         types (arrays, references, pointers).
14080         (GetReferenceType, GetPointerType): Use it.
14081         (GetNestedType): New.  Uses type_hash to handle nested types of
14082         reflected types.
14083         (LookupType, LookupTypeDirect): Remove.
14084         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
14085         'types' hash and LookupTypeReflection directly.
14086         (params_string, params_object): Use GetConstructedType.
14087         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
14088         top-level types.
14089         (Namespace.Lookup): Use cached_types.
14090         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
14091         provided by old TypeManager.LookupType.
14092         * rootcontext.cs (MakeFQN): Remove.
14093         * decl.cs (DeclSpace.MakeFQN): Likewise.
14094         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
14095         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
14096         TypeManager.GetConstructedType.
14097         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
14098
14099 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
14100
14101         * class.cs (MethodCore.CheckBase): Report CS1715 for properties and
14102         indexers.
14103
14104         * cs-parser.jay: Reports CS1527 for any namespace element.
14105
14106         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
14107         Added CS0407.
14108
14109         * expression.cs (ParameterReference.IsAssigned): Changed error to
14110         CS0269.
14111         (Error_WrongNumArguments): Moved CS0245 detection here.
14112
14113         * statement.cs (Return.Resolve): Add CS1622 report.
14114
14115 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
14116
14117         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
14118
14119 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
14120
14121         * attribute.cs expression.cs: Get rid of some allocations.
14122
14123 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
14124
14125         * doc.cs : just eliminate the latest change.
14126
14127 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14128
14129         * doc.cs : commented out the latest change. It breaks xml-030.cs
14130
14131 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14132
14133         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
14134           fail. So invoke CreateType() in FindDocumentedType().
14135
14136 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14137
14138         * cs-tokenizer.cs : added IsKeyword().
14139         * doc.cs : Detect keyword incorrectly used as identifier.
14140           Allow identifiers prefixed by @.
14141
14142 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
14143
14144         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
14145         It caused exception in namespace resolving (again!).
14146         
14147         * class.cs (Class.ctor): Removed exit.
14148         (PropertyMethod.ctor): ditto.
14149         
14150         * codegen.cs (Codegen.Reset): Reset static data.
14151         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
14152         
14153         * cs-tokenizer.cs (Cleanup): Removed.
14154         
14155         * driver.cs (GetSystemDir): Rewrote to one line command.
14156         It caused problem with unloaded dynamic modules.
14157         (UnixParseOption): Removed Exit.
14158         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
14159         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
14160         Now can be mcs used as library.
14161         
14162         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
14163         empty location.
14164         
14165         * location.cs (Reset): Reset static data.
14166         
14167         * namespace.cs (Reset): Reset static data.
14168         
14169         * report.cs (Report.Reset): Reset static data.
14170         
14171         * rootcontext.cs (RootContext.Reset): Reset static data.
14172         
14173         * tree.cs (RootTypes.ctor): Use Location.Null
14174         
14175         * typemanager.cs (TypeManager.Reset): Reset static data.
14176         (CoreLookupType): Removed Exit.
14177         (TypeHandle.Reset): Reset static data.
14178         
14179 2005-03-10  Raja R Harinath  <rharinath@novell.com>
14180
14181         Fix #73516.
14182         * typemanager.cs (ComputeNamespaces): Import namespaces from
14183         referenced modules too.
14184
14185 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14186
14187         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
14188         than '.'.
14189
14190 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14191
14192         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
14193         enclosing DeclSpace.  This ensures that a name-lookup populates
14194         more caches and there are fewer 'TypeExpression's.  Carve out
14195         nested type lookup into ...
14196         (LookupNestedTypeInHierarchy): ... this.
14197
14198 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14199
14200         Clean up a few partial-class semantics.  
14201         Fixes test-357.cs and cs1618-2.cs.
14202         * cs-parser.jay (struct_declaration): Use 'current_class' as
14203         parent of newly-created struct.  Remove call to Register ().
14204         Use 'pop_current_class' to complete handing the current struct.
14205         (interface_declaration): Likewise.
14206         (class_declaration): Likewise.
14207         (enum_declaration): Use 'current_class' as parent of newly created
14208         enum.
14209         (delegate_declaration): Likewise.
14210         (pop_current_class): New function.  This is used to handle closing
14211         up the 'current_class' and 'current_container', and pointing them
14212         to the enclosing class/container.
14213         (CSharpParser): Initialize 'current_class' too.
14214         * decl.cs (MemberCore): Add check for invariant: a partial
14215         container is not a parsed entity, and thus does not enclose any
14216         parsed members.
14217         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
14218         (DeclSpace.BaseTypeExpr): Use it.
14219         (DeclSpace.LookupType): Add check for invariant.
14220         * class.cs (TypeContainer): Add check for invariant: a nested
14221         class should have the same NamespaceEntry as its enclosing class.
14222         (TypeContainer.EmitFieldInitializers): Make virtual.
14223         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
14224         MemberCore.
14225         (TypeContainer.Register): Remove.
14226         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
14227         null.  Use TypeResolveEmitContext for resolving base types and
14228         interfaces.  Move initialization of Parts.TypeBuilder here from
14229         ...
14230         (TypeContainer.DefineNestedTypes): ... here.
14231         (PartialContainer): Take a Namespace not a NamespaceEntry.
14232         (PartialContainer.Create): Don't use Register.  Call the
14233         appropriate Add... function directly.
14234         (ClassPart): Take both the PartialContainer and the enclosing
14235         class as constructor arguments.
14236         (ClassPart.EmitFieldInitializers): Override.
14237         (ClassPart.PartFindNestedTypes): Remove.
14238         (FieldBase.GetInitializerExpression): Resolve the initializer
14239         expression in the emit context of the enclosing class.
14240         * tree.cs (RootTypes): Remove Register ().
14241         
14242 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
14243
14244         * cs-parser.jay: Removed CS0134.
14245         
14246         * driver.cs: Removed CS1901.
14247         
14248         * expression.cs (SizeOf.DoResolve): Don't report CS0233
14249         for predefined types.
14250
14251 2005-03-07  Duncan Mak  <duncan@novell.com>
14252
14253         * codegen.cs (Save):  Catch UnauthorizedAccessException as
14254         well. Fixes bug #73454.
14255
14256 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
14257
14258         * cs-tokenizer.cs (xtoken): Add CS1035.
14259         
14260         * class.cs (MethodData.Define): Add CS0683.
14261         (FieldMember.ctor): Add CS0681.
14262
14263 2005-03-07  Raja R Harinath  <rharinath@novell.com>
14264
14265         * ecore.cs (SimpleName.DoResolve): Rename from
14266         SimpleName.DoResolveAllowStatic.
14267         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
14268         Pass 'intermediate' flag to MemberStaticCheck.
14269         (SimpleName.MemberStaticCheck): Skip "static check" only in case
14270         of "intermediate" lookups via MemberAccess.
14271         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
14272         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
14273
14274 2005-03-07  Raja R Harinath  <rharinath@novell.com>
14275
14276         Fix #73394.
14277         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
14278         slipped in because of variable names that are identical to a
14279         builtin type's BCL equivalent ('string String;', 'int Int32;').
14280         (PropertyExpr.EmitInstance): Likewise.
14281
14282 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
14283
14284         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
14285         
14286         * report.cs (warning_ignore_table): Made public.
14287
14288 2005-03-04  Raja R Harinath  <rharinath@novell.com>
14289
14290         Fix #73282.
14291         * class.cs (MethodData.Emit): Pass 'container' to
14292         container.GetObsoleteAttribute instead of 'container.Parent'.
14293
14294 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
14295
14296         * cs-parser.jay: Add 1534 error test.
14297
14298         * iterators.cs (Yield.CheckContext): Add error 1629.
14299         (Iterator.ctor): Save unsafe modifier.
14300         (MoveNextMethod.DoEmit): Restore unsafe context.
14301
14302         * namespace.cs (UsingAlias): Better error message.
14303
14304 2005-03-03  Dan Winship  <danw@novell.com>
14305
14306         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
14307         the warning message [#73219]
14308
14309 2005-03-03  Raja R Harinath  <rharinath@novell.com>
14310
14311         Fix compile with MCS 1.0.0.0.
14312         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
14313         w_restore to not depend on string constant folding.
14314
14315 2005-03-03  Raja R Harinath  <rharinath@novell.com>
14316
14317         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
14318         CS0246 check to users who passed 'silent = false'.
14319         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
14320         check.
14321         (SimpleName.SimpleNameResolve): Update.
14322         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
14323         (MemberAccess.IdenticalNameAndTypeName): Update.
14324         * doc.cs (FindDocumentedTypeNonArray): Update.
14325
14326 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
14327
14328         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
14329         * parameters.cs (ComputeAndDefineParameters): Remove.
14330         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
14331         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
14332         Use GetParameterInfo.
14333
14334 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
14335
14336         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
14337
14338 2005-03-02  Raja R Harinath  <rharinath@novell.com>
14339
14340         Unify DeclSpace.LookupType and DeclSpace.FindType.
14341         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
14342         is in charge of defining nested types on demand.
14343         (DeclSpace.LookupType): Use it when the current_type is a
14344         TypeBuilder.  Use LookupTypeDirect for reflected types.
14345         (DeclSpace.FindType): Remove.
14346         (DeclSpace.LookupInterfaceOrClass): Likewise.
14347         (DeclSpace.DefineTypeAndParents): Likewise.
14348         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
14349         DeclSpace.LookupType.
14350         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
14351         * typemanager.cs (LookupType): Simplify.
14352         (AddUserType): Remove type from negative_hits.
14353         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
14354         * class.cs (TypeContainer.FindMembers): Move handling of nested
14355         types ...
14356         (TypeContainer.FindMembers_NestedTypes): ... here.
14357         (TypeContainer.FindNestedType): Implement override.
14358         (ClassPart.FindNestedType): Delegate to PartialContainer.
14359         (ClassPart.PartFindNestedType): Looks up the nested types of the
14360         part alone.
14361
14362 2005-03-02  Martin Baulig  <martin@ximian.com>
14363
14364         * class.cs (TypeContainer.DoDefineMembers): We also need a default
14365         static constructor in static classes.
14366
14367 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
14368
14369         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
14370         sizeParamIndex is not specified.
14371
14372 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
14373
14374         Fix #73117
14375         * report.cs (WarningMessage.IsEnabled): Missing null check.
14376
14377 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14378
14379         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
14380         in the fields and not in the properties.
14381
14382 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
14383
14384         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
14385         fields as well.
14386
14387 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14388
14389         * attribute.cs: Small refactoring (improved robustness).
14390         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
14391         (ValidateGuid): Removed.
14392         (Resolve): Removed referenced to above mentioned.
14393         (GetAttributeUsage): Made private and changed to work without
14394         class assistance.
14395         (GetIndexerAttributeValue): Don't crash.
14396         (GetConditionalAttributeValue): Ditto.
14397         (GetClsCompliantAttributeValue): Ditto.
14398         (ExtractSecurityPermissionSet): All attributes exceptions are
14399         error 648.
14400         (GetPropertyValue): New helper.
14401         (GetMethodImplOptions): New method.
14402         (DefinePInvokeMethod): Reuse common code. Implemented handling of
14403         some missing properties.
14404         
14405         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
14406         (Method.ApplyAttributeBuilder): Updated.
14407         
14408         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
14409         exception.
14410
14411 2005-02-28  Raja R Harinath  <rharinath@novell.com>
14412
14413         Fix #73052.
14414         * report.cs (Report.SymbolRelatedToPreviousError): Handle
14415         non-simple types (array, pointer, reference).
14416
14417 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14418
14419         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
14420
14421         * class.cs (MethodCore.IsDuplicateImplementation): Special error
14422         for operators.
14423         (Method.CheckBase): Catch wrong destructor here.
14424         (MethodData.Define): Add errors 550, 668.
14425
14426         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
14427
14428         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
14429
14430         * pending.cs (VerifyPendingMethods): Add error 551.
14431
14432         * typemanager.cs (CSharpName): Next error report helper.
14433
14434 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
14435
14436         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
14437         attributes. Removed useless attribute double check.
14438         It saves almost 2MBs for corlib.
14439
14440 2005-02-25  Raja R Harinath  <rharinath@novell.com>
14441
14442         Fix #72924.
14443         * statement.cs (ExpressionStatement.Resolve): Make robust to being
14444         called twice in case of error.
14445
14446 2005-02-23  Chris Toshok  <toshok@ximian.com>
14447
14448         Fix compiler portions of #72827.
14449         * statement.cs (Block.Emit): call Begin/EndScope on the
14450         EmitContext instead of the ILGenerator.
14451
14452         * codegen.cs (EmitContext.BeginScope): new method, call
14453         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
14454         we have one.)
14455         (EmitContext.BeginScope): same, but EndScope and CloseScope
14456
14457         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
14458         offset and call the superclass's OpenScope(int) with it.
14459         (SymbolWriter.CloseScope): get the current il
14460         offset and call superclass's CloseScope(int) with it.
14461
14462 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
14463
14464         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
14465         CS1677 for out and ref as well.
14466
14467         * class.cs (Method.Define): Add error CS1599 detection.
14468         
14469         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
14470         
14471         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
14472         
14473         * delegate.cs (Delegate.Define): Add error CS1599 detection.
14474         
14475         * support.cs.cs (ModifierDesc): New helper method.
14476
14477 2005-02-23  Raja R Harinath  <rharinath@novell.com>
14478             Abin Thomas  <projectmonokochi@rediffmail.com>
14479             Anoob V E  <projectmonokochi@rediffmail.com>
14480             Harilal P R  <projectmonokochi@rediffmail.com>
14481
14482         Fix #57851, #72718.
14483         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
14484         MemberLookup (used for error reporting) actually returns a result.
14485         Fix error report number (122, not 112).
14486
14487 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
14488             Anoob V E  <projectmonokochi@rediffmail.com>
14489             Harilal P R  <projectmonokochi@rediffmail.com>
14490
14491         Fix #71134.
14492         * pending.cs (PendingImplementation.GetAbstractMethods):
14493         Find NonPublic members too.
14494
14495 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
14496
14497         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
14498         Fixed error 217.
14499         
14500         * class.cs (MethodCore.CheckMethodAgainstBase):
14501         Add error 239 report.
14502
14503 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14504
14505         Fix #68955.
14506         * expression.cs (Invocation.IsApplicable): Make public.
14507         (Invocation.IsParamsMethodApplicable): Likewise.
14508         * delegate.cs (Delegate.VerifyApplicability): Don't use
14509         Invocation.VerifyArgumentCompat for parameter applicability
14510         testing.  Use Invocation.IsApplicable and
14511         Invocation.IsParamsMethodApplicable.
14512
14513 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
14514
14515         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
14516         
14517         * class.cs (Operator.Define): Add error 217 report.
14518         
14519 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14520
14521         * namespace.cs (UsingEntry.Resolve): Undo change below.
14522
14523 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14524
14525         Fix #72756.
14526         * ecore.cs (Expression.MemberLookupFailed): Add argument to
14527         disable the error message when the extended MemberLookup also
14528         fails.
14529         (Expression.MemberLookupFinal): Update.
14530         (SimpleName.DoSimpleNameResolve): Update.
14531         * expression.cs (MemberAccess.ResolveNamespaceOrType):
14532         Don't use MemberLookupFinal.
14533         (New.DoResolve): Update.
14534         (BaseAccess.CommonResolve): Update.
14535
14536 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14537
14538         Fix #72732.
14539         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
14540         occured previously, don't resolve again.
14541
14542 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
14543
14544         Fix #69949
14545         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
14546         argument. Call ResolveAttributeUsage for unresolved.
14547         when types doesn't match ctor arguments.
14548         
14549         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
14550         for nested attribute classes.
14551         (Class.attribute_usage): Removed.
14552         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
14553         for attribute class.
14554         
14555         * ecore.cs (IsAttribute): Removed.
14556         
14557         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
14558         
14559         * rootcontext.cs (RegisterAttribute): Removed, attributes are
14560         now normal types.
14561         (attribute_types): Removed.
14562         (EmitCode): Global attributes are emited as the latest.
14563
14564 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
14565
14566         * class.cs (EmitFieldInitializers): Don't emit field initializer
14567         for default values when optimilization is on.
14568         
14569         * constant.cs (Constant.IsDefaultValue): New property.
14570         
14571         * driver.cs: Add /optimize handling.
14572         
14573         * constant.cs,
14574         * ecore.cs,
14575         * literal.cs: Implement new IsDefaultValue property.
14576         
14577         * rootcontext.cs (Optimize): New field, holds /optimize option.
14578
14579 2005-02-18  Raja R Harinath  <rharinath@novell.com>
14580
14581         Fix crasher in re-opened #72347.
14582         * namespace.cs (Namespace.Lookup): Return null if
14583         DeclSpace.DefineType returns null.
14584
14585         Fix #72678.
14586         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
14587
14588 2005-02-18  Raja R Harinath  <rharinath@novell.com>
14589
14590         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
14591         now returns null if it cannot resolve to an lvalue.
14592         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
14593         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
14594         returned null.  Remove check for SimpleName.
14595         (EventExpr.DoResolveLValue): New.
14596         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
14597         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
14598         error from ...
14599         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
14600         avoid CS0131 error.
14601         (Unary.ResolveOperator): Move CS0211 check ...
14602         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
14603         CS0131 error.
14604         (Unary.DoResolveLValue): Simplify.
14605         (AddressOf.DoResolveLValue): New.
14606         (ArrayAccess.DoResolveLValue): New.
14607
14608 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
14609
14610         * attribute.cs (Attribute.Resolve): Add arguments casting for
14611         when types doesn't match ctor arguments.
14612
14613 2005-02-16  Raja R Harinath  <rharinath@novell.com>
14614
14615         Fix parts of #63202.
14616         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
14617         lookup of operator in base type.  Ensure that all checks happen
14618         when the operator resolves to an "op_..." method.
14619
14620 2005-02-15  Raja R Harinath  <rharinath@novell.com>
14621
14622         Fix #71992.
14623         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
14624         'ignore_cs0104' parameter.  Pass it to ...
14625         (NamespaceEntry.Lookup): ... this.
14626         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
14627         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
14628         (TypeLookupExpression.DoResolveAsTypeStep): Update.
14629         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
14630         Update.  Request that cs0104 errors be ignored.
14631         (ComposedCast.ResolveAsTypeStep): Update.
14632
14633 2005-02-14  Raja R Harinath  <rharinath@novell.com>
14634
14635         Fix #59209.
14636         * expression.cs (Invocation.BetterFunction): Remove support for
14637         comparing virtual functions and their overrides.
14638         (Invocation.IsOverride): New.
14639         (Invocation.OverloadResolve): Don't consider 'override' functions
14640         during candidate selection.  Store them in a lookaside list.
14641         If the selected method is a 'virtual' function, use the list to
14642         find any overrides that are closer to the LHS type.
14643
14644 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
14645
14646         * expression.cs (New.DoResolve): Add complex core type reduction.
14647         (New.Constantify): Converts complex core type syntax like 'new int ()'
14648         to simple constant.
14649         
14650 2005-02-14  Raja R Harinath  <rharinath@novell.com>
14651
14652         * decl.cs (EntryType.EntryType): New constructor to create an
14653         updated copy of a cache entry.
14654         (MemberCache.AddMethods): Use it.
14655         (MemberCache.ClearDeclaredOnly): Remove.
14656         (MemberCache.MemberCache): Update.
14657
14658 2005-02-11  Miguel de Icaza  <miguel@novell.com>
14659
14660         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
14661         variable.  This one is represents the actual low-level declaration
14662         of the method, as opposed to the semantic level `IsStatic'.   
14663
14664         An anonymous method which is hosted into a static method might be
14665         actually an instance method.  IsStatic would reflect the
14666         container, while MethodIsStatic represents the actual code
14667         generated.
14668
14669         * expression.cs (ParameterReference): Use the new MethodIsStatic
14670         instead of IsStatic.
14671
14672         * anonymous.cs (AnonymousMethod.Compatible): Pass the
14673         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
14674         set on the current EmitContext. 
14675
14676         * expression.cs (Cast): Overload DoResolveLValue so we can pass
14677         resolve our casted expression as an LValue.  This triggers the
14678         proper LValue processing that is later required by Assign.
14679
14680         This fixes 72347.
14681
14682         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
14683
14684 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
14685
14686         C# 2.0 Fixed buffer implementation
14687
14688         * anonymous.cs: Update after RegisterHelperClass renaming.
14689
14690         * attribute.cs (AttributeTester.fixed_buffer_cache):
14691         Cache of external fixed buffers.
14692         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
14693         implementation if field is fixed buffer else null.
14694
14695         * class.cs
14696         (TypeContainer.AddField): Accept FieldMember instead of Field.
14697         (FieldBase.IsFieldClsCompliant): Extracted code from
14698         VerifyClsCompliance descendant customization.
14699         (FixedField): New class handles fixed buffer fields.
14700         (FixedFieldExternal): Keeps information about imported fixed
14701         buffer.
14702         (IFixedField): Make access to internal or external fixed buffer
14703         same.
14704
14705         * cs-parser.jay: Add fixed buffer parsing.
14706
14707         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
14708         buffer.
14709
14710         * expression.cs (Indirection): Extended implementation to accept
14711         fixed buffer field.
14712         (PointerArithmetic.Emit): Get element from fixed buffer as well.
14713         (ElementAccess.MakePointerAccess): Get type as parameter.
14714         (DoResolve): Add fixed buffer field expression conversion.
14715         (DoResolveLValue): Ditto.
14716         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
14717         (ArrayPtr): Derives from FixedBufferPtr.
14718         (ArrayPtr.Emit): Add extra emit for array elements.
14719
14720         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
14721
14722         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
14723         for compiler generated types.
14724         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
14725
14726         * statement.cs (Fixed): Refactored to be easier add fixed buffer
14727         and consume less memory.
14728         (Fixed.Resolve): Add fixed buffer case.
14729
14730         * typemanager.cs (compiler_generated_attr_ctor,
14731         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
14732         (HasElementType): Add our own implementation to work on every
14733         runtime.
14734
14735 2005-02-11  Miguel de Icaza  <miguel@novell.com>
14736
14737         * anonymous.cs (CaptureContext): Track whether `this' has been
14738         referenced.   
14739
14740         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
14741         only captured `this' if it was implicitly done (instance
14742         methods/variables were used). 
14743
14744         * codegen.cs (EmitContext.CaptureThis): New method to flag that
14745         `this' must be captured.
14746
14747 2005-01-30  Miguel de Icaza  <miguel@novell.com>
14748  
14749         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
14750         is null it means that there has been no need to capture anything,
14751         so we just create a sibling.
14752
14753         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
14754
14755         Just a partial fix.  The other half is fairly elusive.
14756         
14757 2005-02-10  Raja R Harinath  <rharinath@novell.com>
14758
14759         Fix #52586, cs0121-4.cs.
14760         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
14761         and return a hashtable.
14762         (MemberCache.ClearDeclaredOnly): New.
14763         (MemberCache.MemberCache): Update to change.  Make a deep copy of
14764         the method_hash of a base type too.
14765         (MemberCache.AddMethods): Adapt to having a deep copy of the base
14766         type methods.  Overwrite entries with the same MethodHandle so
14767         that the ReflectedType is correct.  The process leaves in base
14768         virtual functions and their overrides as distinct entries.
14769         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
14770         matters since it was boxed in a ArrayList before.
14771         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
14772         modifier.
14773         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
14774         case of a virtual function and its override (choose the overload
14775         as better).
14776         (Invocation.OverloadResolve): Avoid 'override' members during
14777         'applicable_type' calculation.
14778
14779 2005-02-09  Raja R Harinath  <rharinath@novell.com>
14780
14781         Combine two near-redundant caches.
14782         * typemanager.cs (method_params): Rename from method_internal_params.
14783         (TypeManager.GetParameterData): New.  Replace
14784         Invocation.GetParameterData.
14785         (TypeManager.LookupParametersByBuilder): Remove.
14786         * expression.cs (Invocation.method_parameter_cache): Remove.
14787         (Invocation.GetParameterData): Remove.
14788         Update to changes.
14789         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
14790         Update to changes.
14791
14792 2005-02-08  Raja R Harinath  <rharinath@novell.com>
14793
14794         Fix #72015.
14795         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
14796         TypeManager.multicast_delegate_type is null, resolve it by looking
14797         up "System.MulticastDelegate".
14798         * rootcontext.cs (RootContext.ResolveCore): Simplify.
14799
14800 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
14801             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
14802             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
14803
14804         Fix cs0164.cs.
14805         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
14806         (LabeledStatement.AddReference): New.  Set 'referenced'.
14807         (Goto.Resolve): Use it.
14808
14809 2005-02-05  John Luke  <john.luke@gmail.com>
14810
14811         * driver.cs: remove duplicate -doc line in Usage ()
14812
14813 2005-02-04  Raja R Harinath  <rharinath@novell.com>
14814
14815         * location.cs (Location.AddFile): Fix CS2002 error report.
14816
14817 2005-02-02  Martin Baulig  <martin@ximian.com>
14818
14819         * delegate.cs (Delegate.DefineType): Report an internal error if
14820         TypeManager.multicast_delegate_type is null.  See bug #72015 for
14821         details.        
14822
14823 2005-02-02  Raja R Harinath  <rharinath@novell.com>
14824
14825         Fix a crasher in a variant of #31984.
14826         * const.cs (Constant.CheckBase): New override that defers the
14827         new-or-override check in case the base type hasn't been populated
14828         yet.
14829         (Constant.Define): Ensure the new-or-override check is performed.
14830
14831 2005-02-01  Duncan Mak  <duncan@ximian.com>
14832
14833         * const.cs (LookupConstantValue): Check that `ce' is not null
14834         before calling GetValue ().
14835
14836 2005-02-01  Raja R Harinath  <rharinath@novell.com>
14837
14838         Fix test-334.cs (#69519).
14839         * cs-parser.jay (using_alias_directive): Pass in an expression to
14840         NamespaceEntry.UsingAlias.
14841         (using_namespace_directive): Pass in an expression to
14842         NamespaceEntry.Using.
14843         (namespace_name): Don't flatten to a string.
14844         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
14845         (NamespaceEntry.AliasEntry.Resolve): Lookup using
14846         ResolveAsTypeStep.
14847         (NamespaceEntry.UsingEntry): Likewise.
14848         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
14849         changes.
14850         (NamespaceEntry.LookupForUsing): Remove.
14851         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
14852         names.
14853         (NamespaceEntry.Lookup): Remove support for dotted names.
14854
14855 2005-02-01  Raja R Harinath  <rharinath@novell.com>
14856
14857         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
14858         split into two.
14859         (NamespaceEntry.ImplicitParent): Compute on demand.
14860         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
14861         parallels the current.
14862         (NamespaceEntry.LookupForUsing): Use it.
14863         (NamespaceEntry.Lookup): If the current namespace-entry is
14864         implicit, don't search aliases and using tables.
14865
14866 2005-02-01  Raja R Harinath  <rharinath@novell.com>
14867
14868         Fix #31984.
14869         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
14870         BaseCache here.
14871         (TypeContainer.BaseCache): Compute on demand.
14872         (TypeContainer.FindMembers): Define constants and types if they're
14873         not already created.
14874         (FieldMember.Define): Move resetting of ec.InUnsafe before error
14875         check.
14876         * const.cs (Constant.Define): Make idempotent.
14877
14878 2005-01-29  Miguel de Icaza  <miguel@novell.com>
14879
14880         * pending.cs: Produce better code (no nops produced by using Ldarg
14881         + value).
14882         
14883         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
14884         i - 1' it should be arg + 1.
14885
14886         Fixes bug #71819.
14887
14888 2005-01-28  Raja R Harinath  <rharinath@novell.com>
14889
14890         * attribute.cs (Attribute.CheckAttributeType): Make private
14891         non-virtual.
14892         (Attribute.ResolveType): Make virtual.
14893         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
14894         handling of RootContext.Tree.Types.
14895
14896 2005-01-27  Raja R Harinath  <rharinath@novell.com>
14897
14898         Update attribute-handling to use the SimpleName/MemberAccess
14899         mechanisms.
14900         * cs-parser.jay (attribute): Pass in an expression to the
14901         constructors of Attribute and GlobalAttribute.
14902         * attribute.cs (Attribute): Take an expression for the name.
14903         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
14904         passed in attribute name expression.
14905         (Attribute.CheckAttributeType): Use it.
14906         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
14907         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
14908         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
14909         argument to prevent error messages if the lookup fails.
14910
14911 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
14912
14913         * expression.cs (Indirection): Implemented IVariable interface
14914         to support indirection in AddressOf operator.
14915         (PointerArithmetic.Emit): Add optimalization for case where
14916         result can be precomputed.
14917
14918 2005-01-26  Martin Baulig  <martin@ximian.com>
14919
14920         * class.cs (TypeContainer.AttributeTargets): Return the correct
14921         AttributeTargets depending on our `Kind' instead of throwing an
14922         exception; fixes #71632.
14923
14924 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
14925
14926         Fix #71257
14927         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
14928         constant members.
14929
14930 2005-01-25  Raja R Harinath  <rharinath@novell.com>
14931
14932         Fix #71602.
14933         * expression.cs (MemberAccess.DoResolve): Don't complain with
14934         cs0572 when the LHS of a member access has identical name and type
14935         name.
14936
14937 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
14938
14939         Fix #71651, #71675
14940         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
14941         CreatePermission.
14942         Create custom PermissionSet only for PermissionSetAttribute.
14943
14944 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
14945
14946         Fix #71649
14947         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
14948         delegates in static class.
14949
14950 2005-01-24  Martin Baulig  <martin@ximian.com>
14951
14952         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
14953         merging an implicit block, just use its reachability.
14954
14955         * statement.cs (Block.Resolve): Make the unreachable code check
14956         work wrt. implicit blocks; see test-337 from #63842.
14957
14958 2005-01-21  Alp Toker  <alp@atoker.com>
14959  
14960         * cs-parser.jay: destructor_declaration's container is PartialContainer
14961         not Class when partial types are used, so use Kind prop instead of
14962         'is'.
14963         
14964 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
14965
14966         * cs-parser.jay: Improve error reporting when an interface
14967         declares new types.
14968
14969 2005-01-20  Dick Porter  <dick@ximian.com>
14970
14971         * support.cs: SeekableStreamReader fix from Sandor Dobos
14972         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
14973         chars are read.  Fixes bug 70369.
14974
14975 2005-01-20  Raja R Harinath  <rharinath@novell.com>
14976
14977         * cs-parser.jay (catch_clause): Simplify current_block handling
14978         somewhat.
14979
14980 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
14981
14982         * convert.cs (ImplicitStandardConversionExists): Synchronize the
14983         code with ImplicitStandardConversion to handle the implicit
14984         conversion of method groups into valid delegate invocations. 
14985
14986         The problem is that in parameter handling we were using this code
14987         path.  Fixes bug #64698
14988
14989 2005-01-19  Raja R Harinath  <rharinath@novell.com>
14990
14991         * cs-parser.jay: Fix several infelicities.
14992         - Avoid assigning to the parser value stack.  Code like 
14993           '$3 = null' is unclean.  Synthesize a value for the code block
14994           instead. 
14995         - Avoid using oob_stack for storing location information.  Use ...
14996         (_mark_): ... this.  New (empty) rule.  Saves the current location
14997         in $$.
14998         (foreach_statement): Avoid using oob_stack for current_block
14999         handling.  Use technique used in for_statement and
15000         using_statement.  Synthesize a value for the code block to store
15001         additional intermediate information.
15002
15003 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
15004
15005         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
15006         of a different type is only allowed to private fields of a
15007         containing type, not on fields of a base class.
15008
15009         See test-174.cs and error cs0122-9.cs
15010
15011 2005-01-13  Raja R Harinath  <rharinath@novell.com>
15012
15013         Fix test-335.cs (bug #58126).
15014         * cs-parser.jay (argument): Split out non-expression parts of the
15015         rule into 'non_simple_argument'.
15016         (invocation_expression): Support parenthesized invocations with
15017         multiple arguments, and with single non-simple arguments.
15018
15019 2005-01-13  Raja R Harinath  <rharinath@novell.com>
15020
15021         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
15022         places.
15023
15024 2005-01-12  Raja R Harinath  <rharinath@novell.com>
15025
15026         Fix cs0038-1.cs, cs1640-6.cs.
15027         * ecore.cs (Expression.Resolve): Remove special-case for
15028         SimpleName in error-handling.
15029         (Expression.almostMatchedMembers): Relax access permission to
15030         protected.
15031         (Expression.MemberLookupFailed): Handle duplicates in
15032         almostMatchedMembers list.
15033         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
15034         * expression.cs (New.DoResolve): Report CS1540 for more cases.
15035         * typemanager.cs (GetFullNameSignature): Use the MethodBase
15036         overload if the passed in MemberInfo is a MethodBase.
15037
15038 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
15039
15040         Fix #70749
15041         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
15042         for non-CAS & merge permission sets properly.
15043
15044 2005-01-11  Raja R Harinath  <rharinath@novell.com>
15045
15046         Improve standard-compliance of simple name and member access 
15047         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
15048         * ecore.cs (FullNamedExpression): New abstract base class 
15049         for Namespaces and TypeExpressions.
15050         (ResolveFlags.SimpleName): Remove.
15051         (SimpleName): Remove support for dotted names.
15052         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
15053         DeclSpace.FindType and DeclSpace.LookupType.
15054         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
15055         (Expression.ExprClassName): Make member function.
15056         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
15057         a namespace.  Remove creation of dotted "SimpleName"s.
15058         (MemberAccess.DoResolve): Likewise.
15059         * decl.cs (DeclSpace.Cache): Make private.
15060         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
15061         (DeclSpace.FindType): Update.
15062         (DeclSpace.LookupType): Move here from RootContext.  Return a 
15063         FullNamedExpression.
15064         * namespace.cs (Namespace): Derive from FullNamedExpression
15065         so that it can be part of expression resolution.
15066         (Namespace.Lookup): Return an FullNamedExpression.
15067         (NamespaceEntry.LookupAlias): Lookup aliases only in current
15068         namespace.
15069         * rootcontext.cs (NamespaceLookup): Remove.
15070         (LookupType): Move to DeclSpace.
15071         * attribute.cs (CheckAttributeType): Update.
15072         * doc.cs (FindDocumentedType): Remove allowAlias argument.
15073         (FindDocumentedTypeNonArray): Likewise.
15074
15075 2005-01-11  Raja R Harinath  <rharinath@novell.com>
15076
15077         Fix cs0509.cs, cs1632.cs.
15078         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
15079         is the same as IsInterface.
15080         (TypeContainer.GetClassBases): Likewise.
15081         * statement.cs (LabeledStatement.ig): New field.
15082         (LabeledStatement.LabelTarget): Save ILGenerator which created the
15083         label.
15084         (LabeledStatement.DoEmit): Check that the label was created with
15085         the same ILGenerator.
15086
15087 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
15088
15089         Fix #71058
15090         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
15091         accessors to its properties.
15092
15093         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
15094         from accessors to property.
15095         
15096 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
15097
15098         Fix #70722
15099         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
15100         only for overrides.
15101         
15102 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
15103
15104         * attribute.cs: Check for null and empty strings.  
15105
15106         I have lost another battle to Paolo.
15107
15108 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
15109
15110         Fix #70942
15111         * class.cs (PropertyMethod): Set Parent field in ctors.
15112         (SetMethod.InternalParameters): Add unsafe switch hack.
15113         Override MarkForDuplicationCheck where it is appropriate.
15114
15115         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
15116         It says whether container allows members with the same name.
15117         Base default is no.
15118         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
15119         Removed is_method parameter.
15120
15121 2005-01-06  Duncan Mak  <duncan@ximian.com>
15122
15123         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
15124         because the previous change led to incorrect reporting of CS1032
15125         ("Cannot define/undefine preprocessor symbols after first token in
15126         file"). Instead of using `tokens_seen' as the only flag that
15127         triggers CS1040, introduce `comments_seen'. This new flag is used
15128         to signify having seen comments on the current line, so it is
15129         unset after a newline.
15130
15131 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
15132
15133         * doc.cs : When searching for a type, find nested type too.
15134           This fixes bug #71040.
15135
15136 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
15137
15138         * doc.cs :
15139           - Warn missing member comment on those classes which also does not
15140             have doc comments. Fixed bug #71041.
15141           - Don't warn missing doc comment on default constructor.
15142             Fixed bug #71042.
15143
15144 2005-01-06  Duncan Mak  <duncan@ximian.com>
15145
15146         * cs-tokenizer.cs (xtoken): After handling traditional C-style
15147         comments, set `tokens_seen' to true. This allows us to detect
15148         misplaced preprocessor directives (i.e. not at the beginning of
15149         the a line, nor after whitespaces). In that case, report error
15150         CS1040. This fixes bug #56460.
15151
15152         * cs-parser.jay (interface_member_declaration): Add checks for
15153         IsExplicitImpl, and report CS0541 error if an interface member is
15154         defined as an explicit interface declaration.
15155
15156 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
15157
15158         Fix #70817
15159         * class.cs (PropertyMethod): Set Parent field in ctors.
15160         (SetMethod.InternalParameters): Add unsafe switch hack.
15161         
15162         * decl.cs (MemberCore.Parent): Cannot be readonly.
15163
15164 2005-01-06  Raja R Harinath  <rharinath@novell.com>
15165
15166         * decl.cs (DeclSpace.ResolveType): Remove.
15167         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
15168         Merge in code from ...
15169         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
15170         * class.cs, enum.cs: Update to changes.
15171
15172 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
15173
15174         * anonymous.cs: Ensure that we init the scope of our parent if it
15175         has not been initialized yet.
15176
15177 2004-12-30  Duncan Mak  <duncan@ximian.com>
15178
15179         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
15180         if field.FieldBuilder is null. Fixes #70758.
15181
15182         * convert.cs: Fixed some typos and updated some of the comments.
15183         (ImplicitStandardConversionExists):
15184         (TryImplicitIntConversion): If `target_type' is an interface and
15185         the type of `ic' implements this interface, return true or a new
15186         BoxedCast instead of null. This fixes #70468.
15187
15188 2004-12-29  Duncan Mak  <duncan@ximian.com>
15189
15190         * expression.cs (Argument.Emit): Check that Expr is
15191         IMemoryLocation before casting to it, and report CS1510 otherwise.
15192
15193         This fixes #70402.
15194
15195 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
15196
15197         * statement.cs (Block.ThisVariable): remove the recursion here, to
15198         make the --profile more sane.
15199
15200 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
15201
15202         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
15203         assembly, by JB Evain.
15204
15205 2004-12-17  Raja R Harinath  <rharinath@novell.com>
15206
15207         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
15208           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
15209         "parent" refers to enclosing type/class.  "base" refers to superclass.
15210
15211 2004-12-17  Raja R Harinath  <rharinath@novell.com>
15212
15213         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
15214         Ensure that we only have GlobalAttributes.
15215         * attribute.cs (Attribute.Emit): Make non-virtual.
15216         (GlobalAttribute.Emit): Remove.
15217         (Attribute.Resolve): Make virtual.
15218         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
15219         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
15220         the argument. Don't create one.
15221         (Attribute.GetObsoleteAttribute): Likewise.
15222         (Attribute.GetClsCompliantAttributeValue): Likewise.
15223         * class.cs, decl.cs: Update to changes.
15224
15225 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
15226
15227         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
15228         
15229         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
15230         
15231         * statement.cs (Foreach.Resolve): Add error 186 report.
15232
15233 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
15234
15235         * expression.cs (Conditional.DoResolve): Add warning 429.
15236         
15237         * statement.cs (If.Resolve): Add warning 665.
15238
15239 2004-12-16  Raja R Harinath  <rharinath@novell.com>
15240
15241         New invariant: RootContext.Tree.Types.NamespaceEntry == null
15242         except when in the parser, and in GlobalAttribute.
15243         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
15244         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
15245         RootContext.Tree.Types.NamespaceEntry once work is done.
15246         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
15247         and resets RootContext.Tree.Types.NamespaceEntry.
15248
15249 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
15250
15251         * cs-parser.jay: Don't create a block for every variable.
15252
15253 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
15254
15255         * location.cs: Provide extra information.
15256
15257         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
15258         variables from the captured environment, it is the ldarg_0.
15259
15260 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
15261
15262         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
15263         find a conclusion.
15264         
15265         * class.cs: Changed warning level for 169 to avoid developer
15266         displeasure from warning flooding. It will be changed back when they
15267         fix most of current BCL warnings.
15268         
15269         * RootContext.cs: Pushed default WarningLevel to 3.
15270         
15271         * statement.cs: Removed unused variable.
15272
15273 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
15274
15275         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
15276         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
15277         Add error 502 report.
15278         (StaticClass.DefineType): Add error 441 report.
15279         (Class.AllowedModifiersProp): New virtual property as temporary
15280         extension to AllowedModifiers.
15281         (Class.DefineType): Add error 418 report. Moved ModFlags check here
15282         to share implementation with StaticClass and don't call virtual
15283         methods from ctor.
15284         
15285         * driver.cs (MainDriver): Add error 1558 test.
15286
15287         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
15288         report. Moved error 36 test here.
15289
15290         * statement.cs (Throw.Resolve): Add error 724 report.
15291
15292         * typemanager.cs: Add out_attribute_type core type.
15293         
15294 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
15295
15296         * class.cs (TypeContainer.VerifyClsCompliance): Add error
15297         3018 report.
15298         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
15299
15300         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
15301         3017 report.
15302         
15303         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
15304
15305         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
15306         Add error 3023 report.
15307         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
15308
15309         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
15310         implementation.
15311
15312 2004-12-12  John Luke  <john.luke@gmail.com>
15313
15314         * driver.cs (AddArgs): take -- into account when
15315         adding arguments, fixes bug 65710 
15316
15317 2004-12-12  Martin Baulig  <martin@ximian.com>
15318
15319         * expression.cs (Unary.TryReduceNegative): Added support for
15320         SByteConstant and ByteConstant.
15321         (Unary.Reduce): Check error values from TryReduceNegative().
15322
15323 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
15324
15325         * attributes.cs (Attribute.Resolve): Avoid multiple error report
15326         and report exception as error 182.
15327
15328 2004-12-10  Raja R Harinath  <rharinath@novell.com>
15329
15330         * driver.cs (Main): Fix message when there are warnings.
15331
15332 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
15333
15334         * delegate.cs: Fixed my fix from yesterday, sorry about that.
15335
15336 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
15337
15338         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
15339         Reduced number of warnings.
15340         
15341         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
15342
15343 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
15344
15345         * driver.cs: Removed message.
15346
15347         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
15348
15349 2004-12-08    <vargaz@freemail.hu>
15350
15351         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
15352
15353 2004-12-08  Martin Baulig  <martin@ximian.com>
15354
15355         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
15356         instead of a CS3002 for properties and indexer.
15357
15358 2004-12-08  Martin Baulig  <martin@ximian.com>
15359
15360         * decl.cs (MemberName.ToString): Make this work again.
15361
15362 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
15363
15364         * attribute.cs (Resolve): Add error 591 detection.
15365
15366         * class.cs (FieldMember.Define): Add error 1547 detection.
15367         (Indexer.Define): Add error 620 detection.
15368         (Operator.Define): Add error 590 detection.
15369
15370         * ecore.cs: Missing argument for error 79.
15371
15372         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
15373         detection.
15374
15375 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
15376
15377         Fix #70106
15378         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
15379         only.
15380
15381 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
15382
15383         * cs-parser.jay : handle doc comments on implicit/explicit operators.
15384           Some operator comments were suppressed.
15385         * doc.cs : Implicit/explicit operator name in doc comments are like
15386           "op_Explicit(type)~returnType", so added suffix handling.
15387
15388 2004-12-07  Martin Baulig  <martin@ximian.com>
15389
15390         * decl.cs
15391         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
15392         (MemberCore.GetClsCompliantAttributeValue): Likewise.
15393         (DeclSpace.ec): New protected field; store the EmitContext here.
15394         (DeclSpace.EmitContext): New public property; moved here from
15395         `TypeContainer'.
15396         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
15397         EmitContext.
15398
15399         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
15400         (Enum.Emit): Don't create a new EmitContext.
15401
15402         * delegate.cs (Delegate.DefineType): Always create the
15403         EmitContext.
15404
15405         * iterators.cs (Iterators.DefineIterator): Create a new
15406         EmitContext and store it in `ec'.
15407
15408 2004-08-24  Martin Baulig  <martin@ximian.com>
15409
15410         * typemanager.cs
15411         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
15412         this for accessibility checks.
15413         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
15414         IsNestedFamilyAccessible.
15415         (TypeManager.IsSubclassOf): New method, do what the name actually
15416         says.   
15417
15418 2004-12-06  Raja R Harinath  <rharinath@novell.com>
15419
15420         Fix crash on cs0657-17.cs.
15421         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
15422         Use RootContext.Tree.Types, not 'new RootTypes ()'.
15423         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
15424         the case where the NamespaceEntry gets overwritten.
15425
15426 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
15427
15428         Fixed #69195, #56821
15429         * ecore.cs (ResolveBoolean): Tiny refactoring.
15430
15431         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
15432         of right expression resolving when left is false constant and
15433         operator is LogicalAnd OR true constant and operator is LogicalOr.
15434
15435         * statement.cs (ResolveUnreachable): Always reports warning.
15436
15437 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
15438
15439         * class.cs: Distinguish between 1721 and 1722 (just a little help
15440         for the programmer).
15441
15442 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
15443
15444         * delegate.cs: Only allow this on new versions of the language. 
15445
15446 2004-12-02  Duncan Mak  <duncan@ximian.com>
15447
15448         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
15449         Expression class.
15450         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
15451         here as a static method. Take an additional bool out parameter
15452         `must_do_cs1540_check' for signaling to InstanceResolve.
15453         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
15454         member field from PropertyExpr class and made it an argument of
15455         the method instead.
15456         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
15457         check for MarshalByRefObject, and report CS0122 instead of CS1540.
15458         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
15459         and `remove_accessor' as well as InstanceResolve: report CS0122
15460         where applicable.
15461
15462         Fixes #70129.
15463
15464 2004-12-03  Raja R Harinath  <rharinath@novell.com>
15465
15466         Fix test-327.cs, test-328.cs, and put in early infrastructure
15467         for eventually fixing #52697.
15468         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
15469         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
15470         from other methods.
15471         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
15472         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
15473         (VerifyUsing, error246): Update.
15474         * rootcontext.cs (RootContext.NamespaceLookup): Just use
15475         'NamespaceEntry.LookupNamespaceOrType'.
15476
15477 2004-12-03  Martin Baulig  <martin@ximian.com>
15478
15479         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
15480         method as our child, call AnonymousMethod.Compatible() on it.
15481
15482 2004-12-03  Raja R Harinath  <rharinath@novell.com>
15483
15484         Disable XML documentation support in 'basic' profile.
15485         * decl.cs, class.cs [BOOTSTRAP_WITH_OLDLIB]: Don't import System.Xml.
15486         Redirect XmlElement to System.Object.
15487         * driver.cs, enum.cs, rootcontext.cs: Don't reference System.Xml.
15488         * doc.cs [BOOTSTRAP_WITH_OLDLIB]: Disable compile.
15489         * mcs.exe.sources: Add doc-bootstrap.cs.
15490         * doc-bootstrap.cs: New file.  Contains empty stub implementation
15491         of doc.cs.
15492
15493 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
15494
15495         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
15496           comments are allowed.
15497
15498 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
15499
15500         * delegate.cs: Add checks for subtypes in paramaters and return values
15501         in VerifyMethod () to add support for Covariance/Contravariance
15502         in delegates.
15503         
15504 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
15505
15506         * report.cs: Remove extra closing parenthesis.
15507
15508         * convert.cs (Error_CannotImplicitConversion): If the name of the
15509         types are the same, provide some extra information.
15510
15511         * class.cs (FieldBase): Use an unused bit field from the field to
15512         encode the `has_offset' property from the FieldMember.  This saves
15513         a couple of Ks on bootstrap compilation.
15514
15515         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
15516         method as our child, return the AnonymousMethod resolved
15517         expression.
15518
15519         * expression.cs (New.DoResolve): Allow return values from
15520         NewDelegate to also include AnonymousMethods.
15521
15522         Fixes #70150.
15523
15524 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
15525
15526         Fix bug #70102
15527         * attribute.cs (Resolve): Improved implementation of params
15528         attribute arguments.
15529
15530         * support.cs (ParameterData): Add HasParams to be faster.
15531
15532 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
15533
15534         all things are for /doc support:
15535
15536         * doc.cs: new file that supports XML documentation generation.
15537         * mcs.exe.sources: added doc.cs.
15538         * driver.cs:
15539           Handle /doc command line option.
15540           Report error 2006 instead of 5 for missing file name for /doc.
15541           Generate XML documentation when required, after type resolution.
15542         * cs-tokenizer.cs:
15543           Added support for picking up documentation (/// and /** ... */),
15544           including a new XmlCommentState enumeration.
15545         * cs-parser.jay:
15546           Added lines to fill Documentation element for field, constant,
15547           property, indexer, method, constructor, destructor, operator, event
15548           and class, struct, interface, delegate, enum.
15549           Added lines to warn incorrect comment.
15550         * rootcontext.cs :
15551           Added Documentation field (passed only when /doc was specified).
15552         * decl.cs:
15553           Added DocComment, DocCommentHeader, GenerateDocComment() and
15554           OnGenerateDocComment() and some supporting private members for
15555           /doc feature to MemberCore.
15556         * class.cs:
15557           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
15558         * delegate.cs:
15559           Added overriden DocCommentHeader.
15560         * enum.cs:
15561           Added overriden DocCommentHeader and GenerateDocComment().
15562
15563 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
15564
15565         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
15566         unwrapping the enumeration values, chain to
15567         DoConstantNumericPromotions again, so we can promote things to the
15568         fundamental types (takes care of enums that are bytes, sbytes).
15569
15570         Fixes bug #62054.
15571
15572 2004-12-01  Raja R Harinath  <rharinath@novell.com>
15573
15574         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
15575         Fix long-standing bug in type-lookup.  Use FindType instead of
15576         LookupType when ec.ResolvingTypeTree.
15577         (Attribute.ResolveType, Attribute.Resolve)
15578         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
15579         Update to changes.
15580         (Attributes.Search): Remove internal version.  Update.
15581         (Attributes.SearchMulti): Update.
15582         (Attributes.GetClsCompliantAttribute): Remove.
15583         (Attributes.GetIndexerNameAttribute): Remove.
15584         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
15585         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
15586         * class.cs (Indexer.Define): Likewise.
15587
15588 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
15589
15590         Fix bug #68790
15591         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
15592         MarshallByReference members access.
15593
15594         * expression.cs: Use CheckMarshallByRefAccess;
15595         Better error CS0197 message.
15596
15597         * report.cs: Print whole related error message.
15598
15599 2004-11-30  Raja R Harinath  <rharinath@novell.com>
15600
15601         * Makefile (mcs.exe) [PROFILE=default]: Keep a copy of mcs.exe in
15602         the current directory to help debugging.
15603
15604 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
15605
15606         * class (GetClassBases): Better error 60 report.
15607         (EventProperty): Disabled warning 67 detection.
15608
15609 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
15610
15611         Fix bug #60324
15612         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
15613
15614         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
15615         precise values.
15616
15617 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
15618
15619         Fix bug #49488
15620         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
15621
15622         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
15623
15624 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
15625
15626         * attribute.cs (Attribute.Resolve): Refine error reporting and
15627         report a cs0117 if the identifier does not exist, to distinguish
15628         from 0617 which is a miss-use of the actual identifier.
15629
15630         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
15631         between cs0070 and cs0079.
15632
15633         * class.cs (MemberBase.DoDefine): When reporting a wrong
15634         accessibility level, we use MethodCore to compare instead of
15635         Method (this was a regression in some refactoring effort).
15636
15637         So now we correctly report cs0056 again.
15638
15639         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
15640         testing the target_type (which was known to be object_type) and
15641         not the source type (which is anonymous_method).
15642
15643         Fixed reporting of error cs1660.
15644
15645         * expression.cs (UserCast.Source): Expose the underlying cast.
15646
15647         * statement.cs (Switch.SwitchGoverningType): Sort the list of
15648         allowed types to find a match to int32 first (most common).
15649
15650         In addition, it ignores any ImplicitUserConversions that did an
15651         internal implicit conversion (as the switch statement allows only
15652         one integral conversion to exist).
15653
15654         * class.cs (PartialContainer.Create): rename `name' to
15655         `member_name' for clarity.  Then replace the string calls with a
15656         call to MemberName.GetPartialName, as now using
15657         MemberName.ToString is an error (this is due to the side effects
15658         it had, that were fixed in the past).
15659
15660         This will restore the error reporting on a number of partial class
15661         errors that were missusing this (and getting an exception as a
15662         results, which is now just a plain textual warning, because
15663         yyparse debug output would crash otherwise).
15664
15665 2004-11-26  Raja R Harinath  <rharinath@novell.com>
15666
15667         * Makefile (PROGRAM_INSTALL_DIR): Remove.
15668
15669 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
15670
15671         * rootcontext.cs (LookupType): Make sure to cache lookups that
15672         don't give us a negative result. This saves about 5% of corlib
15673         compilation time.
15674
15675 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
15676
15677         * report.cs (AbstractMessage.Print): messages are sent to stderr
15678
15679         * class.cs (TypeContainer.GetClassBases): It is an error to have a
15680         non-interface in the list of interfaces (at this point, either
15681         parent was properly set, or a base class is being listed in the
15682         interfaces section).
15683
15684         This flags error 1722, and resolves the crash from bug 69259.
15685
15686 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
15687
15688         * statement.cs (Using.EmitExpressionFinally): make this work right
15689         for valuetypes. Fixes 69926.
15690
15691 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
15692
15693         * const.cs (Const.ChangeType): Cope with the "0 literal can be
15694         converted to an enum" here, before we try to change the underlying
15695         type.  This code exists, but it is a different code path than the
15696         one used while encoding constants.
15697
15698         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
15699         old bug: when converting from the null literal to a pointer,
15700         return an EmptyCast, not the NullLiteral.
15701
15702         This fixes #69921, the recent null_type changes probably made this
15703         bug more prominent.
15704
15705         (ImplicitReferenceConversionExists): In addition, resynchronized
15706         the code here, so it matches the same code in
15707         ImplicitReferenceConversionExists for the `from any class-type S
15708         to any interface-type T'.
15709         
15710
15711 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
15712
15713         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
15714
15715 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
15716
15717         * cs-parser.jay: Use verbosity accordingly. 
15718
15719 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
15720
15721         * expression.cs (Unary.ResolveOperator): Do not report warning;
15722         AddressOf reads from variable.
15723         
15724         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
15725
15726 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
15727
15728         Fix bug #69462
15729
15730         * attribute.cs (Attributable): Removed CheckTargets.
15731         (Attributes.Emit): Explicit attribute targets are tested here.
15732
15733         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
15734         not enabled for interfaces.
15735
15736         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
15737         (GetAssemblyName): Ouch next bug there.
15738
15739 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
15740
15741         * expression.cs: Error 275 added.
15742         
15743 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
15744
15745         Fix bug #69177 (Implemented decimal constant support)
15746
15747         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
15748         (BinaryFold): Add DecimalConstant.
15749
15750         * const.cs (Define): Decimal constant 
15751         (is not constant.
15752         (ChangeType): Add decimal type handling.
15753         (LookupConstantValue): Don't set value for decimal type but
15754         emit DecimalConstantAttribute. Needed for constant optimization.
15755
15756         * constant.cs (ToDecimal): New method.
15757         (ConvertToDecimal): New method.
15758         (IntConstant): Implemented ConvertToDecimal.
15759         (DecimalConstant.Emit): Emit optimized version for decimals in
15760         int range.
15761
15762         * expression.cs (ResolveOperator): Changed order of constant
15763         reduction to work correctly with native types which have
15764         overloaded operators.
15765         (ResolveMemberAccess): Extract constant value from attribute
15766         for decimal type.
15767
15768         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
15769
15770         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
15771         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
15772         (ChangeType): Decimal is special.
15773         (TypeToCoreType): Add decimal type.
15774
15775 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
15776
15777         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
15778         decimal types.
15779
15780 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
15781
15782         * class.cs (EventField.ApplyAttributeBuilder): Fix error
15783         test cs1667-5.cs.
15784
15785 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
15786
15787         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
15788
15789         * pending.cs (PendingImplementation): Grab only interfaces.
15790
15791 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
15792
15793         * statement.cs (ForeachHelperMethods): Add location member and
15794         error 202 detection.
15795
15796 2004-11-19  Raja R Harinath  <rharinath@novell.com>
15797
15798         * Makefile (EXTRA_DISTFILES): Remove mcs.exe.config.  It's
15799         automatically handled by executable.make.
15800         (PROGRAM): Make profile-specific.
15801
15802 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
15803
15804         * expression.cs (DoResolveBase): Fixed wrong warning for out
15805         variables.
15806
15807 2004-11-18  Martin Baulig  <martin@ximian.com>
15808
15809         Merged latest changes into gmcs.  Please keep this comment in
15810         here, it makes it easier for me to see what changed in MCS since
15811         the last time I merged.
15812
15813 2004-11-17  Raja R Harinath  <rharinath@novell.com>
15814
15815         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
15816         (TypeHandle.GetMemberCache): New.
15817         (TypeHandle.TypeHandle): Update.
15818         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
15819         (TypeManager.LookupParentInterfacesCache):
15820         Rename from LookupInterfaceCache.  Optimize slightly.
15821         (TypeManager.MemberLookup_FindMembers): Update.
15822         * decl.cs (MemberCache.MemberCache): Set Container to null in the
15823         multi-type variant.
15824         (AddCacheContents): Rename from AddHashtable.
15825         * class.cs (TypeContainer.parent_container): Remove.
15826         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
15827         (TypeContainer.DoDefineMembers): Don't initialize it.
15828         Update to name changes.
15829         
15830 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
15831
15832         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
15833         that factors the code to check access modifiers on override.  
15834
15835         (PropertyBase): Use the code here.
15836
15837         Patch from Lluis S'anchez, fixes bug #69361.
15838
15839 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
15840
15841         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
15842         routine that is used to report the use of a captured variable
15843         whose address has been taken.
15844
15845         There are two checks: one when variables are being captured and
15846         the other check is when the address of a variable is taken. 
15847         
15848         (because an anonymous methods might be resolved before *or* after
15849         the address has been taken) and 
15850
15851         * expression.cs (Conditional.DoResolve): Remove the special
15852         casing that Martin added to trueExpr and falseExpr being both
15853         NullLiteral.  We get the right behavior now just by introducing
15854         the null_type into the compiler. 
15855
15856         * convert.cs (ExplicitConversion): Change the code to use
15857         null_type instead of testing `expr is NullLiteral'.
15858         (ImplicitConversionStandard): use null_type too.
15859         (ImplicitReferenceConversionExists): use null_type too.
15860         (ImplicitReferenceConversion): use null_type too.
15861
15862         * literal.cs: The type of `NullLiteral' is now null_type instead
15863         of object_type. 
15864         (Resolve): Set the type here.
15865
15866         * typemanager.cs: Introduce null_type.
15867
15868 2004-11-17  Martin Baulig  <martin@ximian.com>
15869
15870         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
15871         direction, like FindMembers() does.  Fixes #69546, testcase is in
15872         test-315.cs.    
15873
15874 2004-11-16  Martin Baulig  <martin@ximian.com>
15875
15876         This is based on a patch from Marek Safar, see bug #69082.
15877         Fixes bugs #63705 and #67130.
15878
15879         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
15880         method; create a MemberCache for an interface type and cache the
15881         result.
15882
15883         * decl.cs (IMemberContainer.ParentContainer): Removed.
15884         (IMemberContainer.ParentCache): New property.
15885         (MemberCache.SetupCacheForInterface): Removed.
15886         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
15887         to create a cache for an interface's "parent".
15888
15889         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
15890         interfaces too.
15891
15892 2004-11-16  Martin Baulig  <martin@ximian.com>
15893
15894         Merged back from gmcs; these changes already went into gmcs a
15895         couple of weeks ago.
15896
15897         * typemanager.cs
15898         (TypeManager.AddUserType): Removed the `ifaces' argument.
15899         (TypeManager.RegisterBuilder): Take a `Type []' instead of a
15900         `TypeExpr []'.
15901         (TypeManager.AddUserInterface): Removed.
15902         (TypeManager.ExpandInterfaces): Return a `Type []' instead of a
15903         `TypeExpr []'.
15904         (TypeManager.GetInterfaces): Likewise.
15905         (TypeManager.GetExplicitInterfaces): Likewise.
15906
15907         * ecore.cs (TypeExpr.GetInterfaces): Removed.
15908
15909         * class.cs (TypeContainer.base_class_type): Replaced with `ptype'.
15910         (TypeContainer.base_inteface_types): Replaced with `ifaces'.
15911
15912 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
15913
15914         * statement.cs: Avoid adding bools to a hashtable.
15915
15916 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
15917
15918         * expression.cs (Invocation.OverloadResolve): Flag error if we are
15919         calling an unsafe method from a safe location.
15920
15921 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
15922
15923         Fix #69167
15924         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
15925
15926 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
15927
15928         * namespace.cs (VerifyUsing): use GetPartialName instead of
15929         ToString. 
15930
15931 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
15932
15933         * statement.cs (Return.Resolve): Fix regression in typo: if
15934         `in_exc', we have to request a NeedReturnLabel, this was a typo
15935         introduced in the anonymous method check-in.  Fixes #69131.
15936
15937         * Indexers were using the ShortName when defining themselves,
15938         causing a regression in the compiler bootstrap when applying the
15939         patch from 2004-11-02 (first part), now they use their full name
15940         and the bug is gone.
15941
15942 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
15943
15944         * driver.cs: Strip the path from the names of embedded resources. Fixes
15945         #68519.
15946
15947 2004-11-04  Raja R Harinath  <rharinath@novell.com>
15948
15949         Fix error message regression: cs0104-2.cs.
15950         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
15951         (AliasEntry.Resolve): Update.
15952         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
15953         'silent' flag.
15954         (RootContext.LookupType): Update.
15955
15956 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
15957
15958         * cs-parser.jay: Add support for handling accessor modifiers
15959         * class: Add support port accessor modifiers and error checking,
15960         define PropertyMethod.Define as virtual (not abstract anymore)
15961         * ecore.cs: Add checking for proeprties access with access modifiers
15962         * iterators.cs: Modify Accessor constructor call based in the modified
15963         constructor
15964 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
15965
15966         * expression.cs (StringConcat): Handle being called twice,
15967         as when we have a concat in a field init with more than two
15968         ctors in the class
15969
15970 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
15971
15972         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
15973         special case explicit implementations, we should always produce
15974         the .property or .event declaration.
15975         
15976         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
15977         since it will not return correct data if people use this
15978         unresolved in the presence of using statements (see test-313).
15979
15980         * class.cs (MethodData.Define): If we are an explicit interface
15981         implementation, set the method name to the full name of the
15982         interface plus the name of the method.  
15983
15984         Notice that using the method.MethodName.GetFullName() does not
15985         work, as it will only contain the name as declared on the source
15986         file (it can be a shorthand in the presence of using statements)
15987         and not the fully qualifed type name, for example:
15988
15989         using System;
15990
15991         class D : ICloneable {
15992                 object ICloneable.Clone ()  {
15993                 }
15994         }
15995
15996         Would produce a method called `ICloneable.Clone' instead of
15997         `System.ICloneable.Clone'.
15998
15999         * namespace.cs (Alias.Resolve): Use GetPartialName.
16000         
16001 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
16002
16003         * cs-parser.jay: Add error 1055 report.
16004
16005 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
16006
16007         * assign.cs (Assign.DoResolve): Only do the transform of
16008         assignment into a New if the types are compatible, if not, fall
16009         through and let the implicit code deal with the errors and with
16010         the necessary conversions. 
16011
16012 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
16013
16014         * cs-parser.jay: Add error 1031 report.
16015
16016         * cs-tokenizer.cs: Add location for error 1038.
16017
16018 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16019
16020         * cs-parser.jay: Add error 1016 report.
16021
16022 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16023
16024         * cs-parser.jay: Add errors 1575,1611 report.
16025
16026 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16027
16028         * cs-parser.jay: Add error 1001 report.
16029
16030 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16031
16032         Fix #68850
16033         * attribute.cs (GetMarshal): Add method argument for
16034         caller identification.
16035
16036         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
16037         agument for GetMarshal and RuntimeMissingSupport.
16038
16039 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16040
16041         * attribute.cs (ExtractSecurityPermissionSet): Removed
16042         TypeManager.code_access_permission_type.
16043
16044         * typemanager.cs: Removed TypeManager.code_access_permission_type.
16045
16046 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
16047
16048         * expression.cs (LocalVariableReference.DoResolveLValue): Check
16049         for obsolete use of a variable here.   Fixes regression on errors
16050         cs0619-25 and cs0619-26.
16051
16052 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
16053
16054         Fix #62358, implemented security attribute encoding.
16055
16056         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
16057         Tests permitted SecurityAction for assembly or other types.
16058         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
16059         data from SecurityPermissionAttribute to PermisionSet class.
16060
16061         * class.cs (ApplyAttributeBuilder): Added special handling
16062         for System.Security.Permissions.SecurityAttribute based types.
16063
16064         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
16065         special handling for System.Security.Permissions.SecurityAttribute
16066         based types.
16067
16068         * enum.cs (ApplyAttributeBuilder): Added special handling
16069         for System.Security.Permissions.SecurityAttribute based types.
16070
16071         * parameter.cs (ApplyAttributeBuilder): Added special handling
16072         for System.Security.Permissions.SecurityAttribute based types.
16073
16074         * rootcontext.cs: Next 2 core types.
16075
16076         * typemanager.cs (TypeManager.security_permission_attr_type):
16077         Built in type for the SecurityPermission Attribute.
16078         (code_access_permission_type): Build in type.
16079
16080 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
16081
16082         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
16083         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
16084         all of this information into
16085         EmitContext.EmitCapturedVariableInstance.
16086         
16087         * codegen.cs (EmitCapturedVariableInstance): move here the
16088         funcionality of emitting an ldarg.0 in the presence of a
16089         remapping.   This centralizes the instance emit code.
16090
16091         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
16092         then emit a load of this: it means that we have reached the
16093         topmost ScopeInfo: the one that contains the pointer to the
16094         instance of the class hosting the anonymous method.
16095
16096         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
16097         captures to the topmost CaptureContext.
16098
16099 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
16100
16101         * expression.cs (LocalVariableReference): Move the knowledge about
16102         the iterators into codegen's EmitCapturedVariableInstance.
16103
16104 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
16105
16106         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
16107         all code paths return a value from an anonymous method (it is the
16108         same as the 161 error, but for anonymous methods).
16109
16110 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
16111
16112         The introduction of anonymous methods in the compiler changed
16113         various ways of doing things in the compiler.  The most
16114         significant one is the hard split between the resolution phase
16115         and the emission phases of the compiler.
16116
16117         For instance, routines that referenced local variables no
16118         longer can safely create temporary variables during the
16119         resolution phase: they must do so from the emission phase,
16120         since the variable might have been "captured", hence access to
16121         it can not be done with the local-variable operations from the runtime.
16122         
16123         * statement.cs 
16124
16125         (Block.Flags): New flag `IsTopLevel' to indicate that this block
16126         is a toplevel block.
16127
16128         (ToplevelBlock): A new kind of Block, these are the blocks that
16129         are created by the parser for all toplevel method bodies.  These
16130         include methods, accessors and anonymous methods.
16131
16132         These contain some extra information not found in regular blocks:
16133         A pointer to an optional CaptureContext (for tracking captured
16134         local variables and parameters).  A pointer to the parent
16135         ToplevelBlock.
16136         
16137         (Return.Resolve): Catch missmatches when returning a value from an
16138         anonymous method (error 1662).
16139         Invoke NeedReturnLabel from the Resolve phase instead of the emit
16140         phase.
16141
16142         (Break.Resolve): ditto.
16143
16144         (SwitchLabel): instead of defining the labels during the
16145         resolution phase, we now turned the public ILLabel and ILLabelCode
16146         labels into methods called GetILLabelCode() and GetILLabel() that
16147         only define the label during the Emit phase.
16148
16149         (GotoCase): Track the SwitchLabel instead of the computed label
16150         (its contained therein).  Emit the code by using
16151         SwitchLabel.GetILLabelCode ().
16152
16153         (LocalInfo.Flags.Captured): A new flag has been introduce to track
16154         whether the Local has been captured or not.
16155
16156         (LocalInfo.IsCaptured): New property, used to tell whether the
16157         local has been captured.
16158         
16159         * anonymous.cs: Vastly updated to contain the anonymous method
16160         support.
16161
16162         The main classes here are: CaptureContext which tracks any
16163         captured information for a toplevel block and ScopeInfo used to
16164         track the activation frames for various local variables.   
16165
16166         Each toplevel block has an optional capture context associated
16167         with it.  When a method contains an anonymous method both the
16168         toplevel method and the anonymous method will create a capture
16169         context.   When variables or parameters are captured, they are
16170         recorded on the CaptureContext that owns them, for example:
16171
16172         void Demo () {
16173              int a;
16174              MyDelegate d = delegate {
16175                  a = 1;
16176              }
16177         }
16178
16179         Here `a' will be recorded as captured on the toplevel
16180         CapturedContext, the inner captured context will not have anything
16181         (it will only have data if local variables or parameters from it
16182         are captured in a nested anonymous method.
16183
16184         The ScopeInfo is used to track the activation frames for local
16185         variables, for example:
16186
16187         for (int i = 0; i < 10; i++)
16188                 for (int j = 0; j < 10; j++){
16189                    MyDelegate d = delegate {
16190                         call (i, j);
16191                    }
16192                 }
16193
16194         At runtime this captures a single captured variable `i', but it
16195         captures 10 different versions of the variable `j'.  The variable
16196         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
16197         recorded on a child.  
16198
16199         The toplevel ScopeInfo will also track information like the `this'
16200         pointer if instance variables were referenced (this is necessary
16201         as the anonymous method lives inside a nested class in the host
16202         type of the method). 
16203
16204         (AnonymousMethod): Expanded to track the Toplevel, implement
16205         `AnonymousMethod.Compatible' to tell whether an anonymous method
16206         can be converted to a target delegate type. 
16207
16208         The routine now also produces the anonymous method content
16209
16210         (AnonymousDelegate): A helper class that derives from
16211         DelegateCreation, this is used to generate the code necessary to
16212         produce the delegate for the anonymous method that was created. 
16213
16214         * assign.cs: API adjustments for new changes in
16215         Convert.ImplicitStandardConversionExists.
16216
16217         * class.cs: Adjustments to cope with the fact that now toplevel
16218         blocks are of type `ToplevelBlock'. 
16219
16220         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
16221         insteda of standard blocks.
16222
16223         Flag errors if params arguments are passed to anonymous methods.
16224
16225         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
16226         `CurrentAnonymousMethod' which points to the current Anonymous
16227         Method.  The variable points to the AnonymousMethod class that
16228         holds the code being compiled.  It is set in the new EmitContext
16229         created for the anonymous method.
16230
16231         (EmitContext.Phase): Introduce a variable and an enumeration to
16232         assist in enforcing some rules about when and where we are allowed
16233         to invoke certain methods (EmitContext.NeedsReturnLabel is the
16234         only one that enfonces this right now).
16235
16236         (EmitContext.HaveCaptureInfo): new helper method that returns
16237         whether we have a CapturedContext initialized.
16238
16239         (EmitContext.CaptureVariable): New method used to register that a
16240         LocalInfo must be flagged for capturing. 
16241
16242         (EmitContext.CapturedParameter): New method used to register that a
16243         parameters must be flagged for capturing. 
16244         
16245         (EmitContext.CapturedField): New method used to register that a
16246         field must be flagged for capturing. 
16247
16248         (EmitContext.HaveCapturedVariables,
16249         EmitContext.HaveCapturedFields): Return whether there are captured
16250         variables or fields. 
16251
16252         (EmitContext.EmitMethodHostInstance): This is used to emit the
16253         instance for the anonymous method.  The instance might be null
16254         (static methods), this (for anonymous methods that capture nothing
16255         and happen to live side-by-side with the current method body) or a
16256         more complicated expression if the method has a CaptureContext.
16257
16258         (EmitContext.EmitTopBlock): Routine that drives the emission of
16259         code: it will first resolve the top block, then emit any metadata
16260         and then emit the code.  The split is done so that we can extract
16261         any anonymous methods and flag any captured variables/parameters.
16262         
16263         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
16264         during this phase, the ILGenerator should not be used as labels
16265         and local variables declared here might not be accessible to any
16266         code that is part of an anonymous method.  
16267
16268         Exceptions to this include the temporary variables that are
16269         created by some statements internally for holding temporary
16270         variables. 
16271         
16272         (EmitContext.EmitMeta): New routine, in charge of emitting all the
16273         metadata for a cb
16274
16275         (EmitContext.TemporaryReturn): This method is typically called
16276         from the Emit phase, and its the only place where we allow the
16277         ReturnLabel to be defined other than the EmitMeta.  The reason is
16278         that otherwise we would have to duplicate a lot of logic in the
16279         Resolve phases of various methods that today is on the Emit
16280         phase. 
16281
16282         (EmitContext.NeedReturnLabel): This no longer creates the label,
16283         as the ILGenerator is not valid during the resolve phase.
16284
16285         (EmitContext.EmitThis): Extended the knowledge in this class to
16286         work in anonymous methods in addition to iterators. 
16287
16288         (EmitContext.EmitCapturedVariableInstance): This emits whatever
16289         code is necessary on the stack to access the instance to a local
16290         variable (the variable will be accessed as a field).
16291
16292         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
16293         EmitContext.EmitAddressOfParameter): Routines to support
16294         parameters (not completed at this point). 
16295         
16296         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
16297         will also remove the parameters.
16298
16299         * convert.cs (Convert): Define a `ConstantEC' which points to a
16300         null.  This is just to prefity some code that uses
16301         ImplicitStandardConversion code and do not have an EmitContext
16302         handy.
16303
16304         The idea is to flag explicitly that at that point in time, it is
16305         known that the conversion will not trigger the delegate checking
16306         code in implicit conversions (which requires a valid
16307         EmitContext). 
16308
16309         Everywhere: pass new EmitContext parameter since
16310         ImplicitStandardConversionExists now requires it to check for
16311         anonymous method conversions. 
16312
16313         (Convert.ImplicitStandardConversionExists): If the type of an
16314         expression is the anonymous_method_type, and the type is a
16315         delegate, we invoke the AnonymousMethod.Compatible method to check
16316         whether an implicit conversion is possible. 
16317
16318         (Convert.ImplicitConversionStandard): Only do implicit method
16319         group conversions if the language level is not ISO_1.
16320
16321         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
16322         MethodInfo for the Invoke method.  used by Delegate and
16323         AnonymousDelegate.
16324
16325         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
16326         method conversions if the target type is a delegate.
16327
16328         Removed extra debugging nops.
16329
16330         (LocalVariableReference): Turn the `local_info' into a public
16331         field. 
16332
16333         Add `prepared' field, the same hack used for FieldExprs to cope
16334         with composed assignments, as Local variables do not necessarily
16335         operate purely on the stack as they used to: they can be captured
16336         fields. 
16337
16338         Add `temp' for a temporary result, like fields.
16339
16340         Refactor DoResolve and DoResolveLValue into DoResolveBase.
16341
16342         It now copes with Local variables that are captured and emits the
16343         proper instance variable to load it from a field in the captured
16344         case. 
16345
16346         (ParameterReference.DoResolveBase): During the resolve phase,
16347         capture parameters if we are in an anonymous method.
16348
16349         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
16350         anonymous method, use the EmitContext helper routines to emit the
16351         parameter reference.
16352
16353         * iterators.cs: Set RemapToProxy to true/false during the
16354         EmitDispose class.
16355
16356         * parameters.cs (GetParameterByName): New helper method. 
16357
16358         * typemanager.cs (anonymous_method_type) a new type that
16359         represents an anonyous method.  This is always an internal type,
16360         used as a fencepost to test against the anonymous-methodness of an
16361         expression. 
16362         
16363 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
16364
16365         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
16366         561 report.
16367         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
16368
16369 2004-10-18  Martin Baulig  <martin@ximian.com>
16370
16371         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
16372         `Type' directly, but call ResolveType() on it.
16373         (Catch.Resolve): Likewise.
16374         (Foreach.Resolve): Likewise.
16375
16376 2004-10-18  Martin Baulig  <martin@ximian.com>
16377
16378         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
16379         `Type' directly, but call ResolveType() on it.
16380         (Probe.DoResolve): Likewise.
16381         (ArrayCreation.LookupType): Likewise.
16382         (TypeOf.DoResolve): Likewise.
16383         (SizeOf.DoResolve): Likewise.
16384
16385 2004-10-18  Martin Baulig  <martin@ximian.com>
16386
16387         * expression.cs (Invocation.BetterFunction): Put back
16388         TypeManager.TypeToCoreType().
16389
16390 2004-10-18  Raja R Harinath  <rharinath@novell.com>
16391
16392         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
16393         the ResolveType.
16394
16395 2004-10-18  Martin Baulig  <martin@ximian.com>
16396
16397         * parameter.cs (Parameter.Resolve):  Don't access the TypeExpr's
16398         `Type' directly, but call ResolveType() on it.
16399
16400 2004-10-18  Martin Baulig  <martin@ximian.com>
16401
16402         * class.cs (FieldMember.Define): Don't access the TypeExpr's
16403         `Type' directly, but call ResolveType() on it.
16404         (MemberBase.DoDefine): Likewise.
16405
16406         * expression.cs (New.DoResolve): Don't access the TypeExpr's
16407         `Type' directly, but call ResolveType() on it.
16408         (ComposedCast.DoResolveAsTypeStep): Likewise.
16409
16410         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
16411         `Type' directly, but call ResolveType() on it.
16412
16413 2004-10-17  John Luke  <john.luke@gmail.com>
16414
16415         * class.cs (Operator.GetSignatureForError): use CSharpName
16416
16417         * parameter.cs (Parameter.GetSignatureForError): Returns
16418         correct name even if was not defined.
16419
16420 2004-10-13  Raja R Harinath  <rharinath@novell.com>
16421
16422         Fix #65816.
16423         * class.cs (TypeContainer.EmitContext): New property.
16424         (DefineNestedTypes): Create an emitcontext for each part.
16425         (MethodCore.DoDefineParameters): Use container's emitcontext.
16426         Pass type array to InternalParameters.
16427         (MemberBase.DoDefine): Use container's emitcontext.
16428         (FieldMember.Define): Likewise.
16429         (Event.Define): Likewise.
16430         (SetMethod.GetParameterInfo): Change argument to EmitContext.
16431         Pass type array to InternalParameters.
16432         (SetIndexerMethod.GetParameterInfo): Likewise.
16433         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
16434         * delegate.cs (Define): Pass emitcontext to
16435         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
16436         array to InternalParameters.
16437         * expression.cs (ParameterReference.DoResolveBase): Pass
16438         emitcontext to GetParameterInfo.
16439         (ComposedCast.DoResolveAsTypeStep): Remove check on
16440         ec.ResolvingTypeTree.
16441         * parameter.cs (Parameter.Resolve): Change argument to
16442         EmitContext.  Use ResolveAsTypeTerminal.
16443         (Parameter.GetSignature): Change argument to EmitContext.
16444         (Parameters.ComputeSignature): Likewise.
16445         (Parameters.ComputeParameterTypes): Likewise.
16446         (Parameters.GetParameterInfo): Likewise.
16447         (Parameters.ComputeAndDefineParameterTypes): Likewise.
16448         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
16449         * support.cs (InternalParameters..ctor): Remove variant that takes
16450         a DeclSpace.
16451         * typemanager.cs (system_intptr_expr): New.
16452         (InitExpressionTypes): Initialize it.
16453
16454 2004-10-12  Chris Toshok  <toshok@ximian.com>
16455
16456         * cs-parser.jay: fix location for try_statement and catch_clause.
16457
16458 2004-10-11  Martin Baulig  <martin@ximian.com>
16459
16460         * report.cs: Don't make --fatal abort on warnings, we have
16461         -warnaserror for that.
16462
16463 2004-10-07  Raja R Harinath  <rharinath@novell.com>
16464
16465         More DeclSpace.ResolveType avoidance.
16466         * decl.cs (MemberCore.InUnsafe): New property.
16467         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
16468         with newly created EmitContext.
16469         (FieldMember.Define): Likewise.
16470         * delegate.cs (Delegate.Define): Likewise.
16471         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
16472         only if normal name-lookup fails.
16473         (TypeExpr.DoResolve): Enable error-checking.
16474         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
16475         (SizeOf.DoResolve): Likewise.
16476         (ComposedCast.DoResolveAsTypeStep): Likewise.
16477         (StackAlloc.DoResolve): Likewise.
16478         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
16479         (Block.Unsafe): New property.
16480         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
16481         (Unsafe): Set 'unsafe' flag of contained block.
16482         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
16483         (Fixed.Resolve): Likewise.
16484         (Catch.Resolve): Likewise.
16485         (Using.ResolveLocalVariableDecls): Likewise.
16486         (Foreach.Resolve): Likewise.
16487
16488 2004-10-05  John Luke <john.luke@gmail.com>
16489
16490         * cs-parser.jay: add location to error CS0175
16491
16492 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
16493
16494         * ecore.cs (Expression.Constantity): Add support for turning null
16495         into a constant.
16496
16497         * const.cs (Const.Define): Allow constants to be reference types
16498         as long as the value is Null.
16499
16500 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
16501
16502         * namespace.cs (NamespaceEntry.Using): No matter which warning
16503         level is set, check if this namespace name has already been added.
16504
16505 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
16506
16507         * expression.cs: reftype [!=]= null should always use br[true,false].
16508         # 67410
16509
16510 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
16511
16512         Fix #67108
16513         * attribute.cs: Enum conversion moved to 
16514         GetAttributeArgumentExpression to be applied to the all
16515         expressions.
16516
16517 2004-10-01  Raja R Harinath  <rharinath@novell.com>
16518
16519         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
16520         * class.c (TypeContainer.DefineType): Flag error if
16521         base types aren't accessible due to access permissions.
16522         * decl.cs (DeclSpace.ResolveType): Move logic to
16523         Expression.ResolveAsTypeTerminal.
16524         (DeclSpace.ResolveTypeExpr): Thin layer over
16525         Expression.ResolveAsTypeTerminal.
16526         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
16527         Refactor code into NestedAccess.  Use it.
16528         (DeclSpace.NestedAccess): New.
16529         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
16530         argument to silence errors.  Check access permissions.
16531         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
16532         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
16533         (Cast.DoResolve): Likewise.
16534         (New.DoResolve): Likewise.
16535         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
16536         (TypeOf.DoResolve): Likewise.
16537
16538         * expression.cs (Invocation.BetterConversion): Return the Type of
16539         the better conversion.  Implement section 14.4.2.3 more faithfully.
16540         (Invocation.BetterFunction): Make boolean.  Make correspondence to
16541         section 14.4.2.2 explicit.
16542         (Invocation.OverloadResolve): Update.
16543         (Invocation): Remove is_base field.
16544         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
16545         (Invocation.Emit): Likewise.
16546
16547 2004-09-27  Raja R Harinath  <rharinath@novell.com>
16548
16549         * README: Update to changes.
16550
16551 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
16552
16553         * cs-parser.jay: Reverted 642 warning fix.
16554
16555 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16556
16557         Fix bug #66615
16558         * decl.cs (FindMemberWithSameName): Indexer can have more than
16559         1 argument.
16560
16561 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16562
16563         * expression.cs (LocalVariableReference.DoResolveLValue):
16564         Do not report warning 219 for out values.
16565         (EmptyExpression.Null): New member to avoid extra allocations.
16566
16567 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16568
16569         * cs-parser.jay: Fix wrong warning 642 report.
16570
16571         * cs-tokenizer.cs (CheckNextToken): New helper;
16572         Inspect next character if is same as expected.
16573
16574 2004-09-23  Martin Baulig  <martin@ximian.com>
16575
16576         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
16577         (Convert.ImplicitReferenceConversionExists): Likewise.
16578
16579 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16580
16581         * class.cs (Operator.Define): Add error 448 and 559 report.
16582
16583 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
16584
16585         * class.cs (MemberBase.IsTypePermitted): New protected
16586         method for checking error CS0610.
16587
16588 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
16589
16590         * class.cs (TypeContainer.HasExplicitLayout): New property
16591         Returns whether container has StructLayout attribute set Explicit.
16592         (FieldMember): New abstract class for consts and fields.
16593         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
16594         (Field): Reuse FieldMember.
16595
16596         * const.cs (Const): Reuse FieldMember.
16597
16598         * rootcontext.cs: EmitConstants call moved to class.
16599
16600 2004-09-22  Martin Baulig  <martin@ximian.com>
16601
16602         Thanks to Peter Sestoft for this bug report.
16603
16604         * expression.cs (Conditional): If both the `trueExpr' and the
16605         `falseExpr' is a NullLiteral, return a NullLiteral.
16606
16607 2004-09-22  Martin Baulig  <martin@ximian.com>
16608
16609         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
16610         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
16611         for the "get_Current" call.
16612
16613 2004-09-22  Martin Baulig  <martin@ximian.com>
16614
16615         Marek and me just fixed one of our oldest bugs: #28562 :-)
16616
16617         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
16618
16619         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
16620         we're an EnumConstant, just return that.
16621         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
16622         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
16623         to get the value which'll actually be written into the attribute.
16624         However, we have to use GetValue() to access the attribute's value
16625         in the compiler.        
16626
16627 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
16628
16629         * constant.cs (Constant.IsNegative): New abstract property
16630         IsNegative.
16631
16632         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
16633         (StackAlloc.DoResolve): Reused IsNegative.
16634
16635 2004-09-21  Martin Baulig  <martin@ximian.com>
16636
16637         * codegen.cs (VariableStorage): Don't store the ILGenerator here;
16638         if we're used in an iterator, we may be called from different
16639         methods.
16640
16641         * statement.cs (Foreach.EmitFinally): Only emit an `Endfinally' if
16642         we actually have an exception block.
16643
16644 2004-09-20  John Luke <jluke@cfl.rr.com>
16645
16646         * class.cs, cs-parser.jay: Improve the error report for 1520:
16647         report the actual line where the error happens, not where the
16648         class was declared.
16649
16650         * assign.cs, delegate.cs, ecore.cs, expression.cs, statement.cs:
16651         Pass location information that was available elsewhere.
16652
16653 2004-09-19  Sebastien Pouliot  <sebastien@ximian.com>
16654
16655         * codegen.cs: Fix bug #56621. It is now possible to use MCS on the MS
16656         runtime to delay sign assemblies.
16657
16658 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
16659
16660         * cs-parser.jay: Do not report the stack trace, this is barely
16661         used nowadays.
16662
16663 2004-08-22  John Luke  <john.luke@gmail.com>
16664  
16665         * driver.cs : check that a resource id is not already used
16666         before adding it, report CS1508 if it is, bug #63637
16667
16668 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
16669
16670         * ecore.cs: Removed dead code.
16671
16672 2004-09-18  Marek Safar  <marek.safar@seznam.cz>
16673
16674         * class.cs: Do not report warning CS0067 on the interfaces.
16675
16676 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
16677
16678         * cs-parser.jay: Add error 504 report.
16679
16680 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
16681
16682         * rootcontext.cs: WarningLevel is 4 by default now.
16683
16684         * statement.cs (Fixed.Resolve): Do not null
16685         VariableInfo.
16686
16687 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
16688
16689         Fixed bug #55780
16690         * ecore.cs (PropertyExpr.FindAccessors): Do not perform
16691         deep search when property is not virtual.
16692         (PropertyExpr.ResolveAccessors): Make one call for both
16693         accessors.
16694
16695 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
16696
16697         Fixed bug #65766
16698         * statement.cs: Error 152 report constains also location.
16699
16700 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
16701
16702         Fixed bug #65766
16703         * const.cs: Explicitly set constant as static.
16704
16705 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
16706
16707         Fixed bug #64226
16708         * cs-parser.jay: Add error 1017 report.
16709
16710 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
16711
16712         Fixed bug #59980, #64224
16713         * expression.cs (Invocation.DoResolve): Fixed error CS0571 test.
16714
16715         * typemanager.cs (IsSpecialMethod): Simplified
16716
16717 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
16718
16719         * decl.cs (MemberCore.Emit): Resuscitated VerifyObsoleteAttribute
16720         condition with better params.
16721
16722 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
16723
16724         Fixed bug #65238
16725         * attribute.cs (Resolve): Property has to have both
16726         accessors.
16727
16728 2004-09-14  Martin Baulig  <martin@ximian.com>
16729
16730         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
16731
16732 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
16733
16734         Fixed bug #61902
16735         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
16736         called and is obsolete then this member suppress message
16737         when call is inside next [Obsolete] method or type.
16738
16739         * expression.cs: Use TestObsoleteMethodUsage member.
16740
16741 2004-09-14  Martin Baulig  <martin@ximian.com>
16742
16743         * cs-parser.jay: Sync a bit with the GMCS version.
16744
16745 2004-09-14  Martin Baulig  <martin@ximian.com>
16746
16747         * cs-parser.jay (CSharpParser): Don't derive from GenericsParser.
16748         (CSharpParser.yacc_verbose_flag): New public field.
16749
16750         * genericparser.cs: Removed.
16751
16752 2004-09-14  Raja R Harinath  <rharinath@novell.com>
16753
16754         * cs-parser.jay (event_declaration): Re-enable cs0071 error.
16755
16756 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
16757
16758         * class.cs (MethodCore.CheckBase): Fix bug #65757.
16759
16760 2004-09-10  Martin Baulig  <martin@ximian.com>
16761
16762         Backported my MemberName changes from GMCS into MCS.
16763
16764         - we are now using a special `MemberName' class instead of using
16765         strings; in GMCS, the `MemberName' also contains the type
16766         arguments.
16767
16768         - changed the grammar rules a bit:
16769           * the old `member_name' is now a `namespace_or_type_name':
16770             The rule is that we use `namespace_or_type_name' everywhere
16771             where we expect either a "member name" (GetEnumerator) or a
16772             "member name" with an explicit interface name
16773             (IEnumerable.GetEnumerator).
16774             In GMCS, the explicit interface name may include type arguments
16775             (IEnumerable<T>.GetEnumerator).
16776           * we use `member_name' instead of just `IDENTIFIER' for
16777             "member names":
16778             The rule is that we use `member_name' wherever a member may
16779             have type parameters in GMCS.       
16780
16781         * decl.cs (MemberName): New public class.
16782         (MemberCore.MemberName): New public readonly field.
16783         (MemberCore.ctor): Take a `MemberName' argument, not a string.
16784         (DeclSpace): Likewise.
16785
16786         * delegate.cs (Delegate.ctor): Take a MemberName, not a string.
16787         * enum.cs (Enum.ctor): Likewise.
16788
16789         * namespace.cs (AliasEntry.Alias): Changed type from Expression to
16790         MemberName.     
16791         (AliasEntry.ctor): Take a MemberName, not an Expression.
16792         (AliasEntry.UsingAlias): Likewise.
16793
16794         * class.cs (TypeContainer.ctor): Take a MemberName, not a string.
16795         (IMethodData.MemberName): Changed type from string to MemberName.
16796         (MemberBase.ExplicitInterfaceName): Likewise.
16797         (AbstractPropertyEventMethod.SetupName): Make this private.
16798         (AbstractPropertyEventMethod.ctor): Added `string prefix'
16799         argument; compute the member name here.
16800         (AbstractPropertyEventMethod.UpdateName): Recompute the name based
16801         on the `member.MemberName' and the `prefix'.
16802
16803         * cs-parser.jay (attribute_name): Use `namespace_or_type_name',
16804         not `type_name'.
16805         (struct_declaration): Use `member_name' instead of `IDENTIFIER';
16806         thus, we get a `MemberName' instead of a `string'.  These
16807         declarations may have type parameters in GMCS.
16808         (interface_method_declaration, delegate_declaration): Likewise.
16809         (class_declaration, interface_declaration): Likewise.
16810         (method_header): Use `namespace_or_type_name' instead of
16811         `member_name'.  We may be an explicit interface implementation.
16812         (property_declaration, event_declaration): Likewise.
16813         (member_name): This is now just an `IDENTIFIER', not a
16814         `namespace_or_type_name'.
16815         (type_name, interface_type): Removed.
16816         (namespace_or_type_name): Return a MemberName, not an Expression.
16817         (primary_expression): Use `member_name' instead of `IDENTIFIER';
16818         call GetTypeExpression() on the MemberName to get an expression.
16819         (IndexerDeclaration.interface_type): Changed type from string to
16820         MemberName.
16821         (MakeName): Operate on MemberName's instead of string's.
16822
16823 2004-09-13  Raja R Harinath  <rharinath@novell.com>
16824
16825         Fix bug #55770.
16826         * namespace.cs (AliasEntry.Resolve): Implement section 16.3.1.
16827         (NamespaceEntry.Lookup): Add new argument to flag if we want the
16828         lookup to avoid symbols introduced by 'using'.
16829         * rootcontext.cs (NamespaceLookup): Update.
16830
16831 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
16832
16833         * class.cs (TypeContainer.DoDefineMembers): Do not call
16834         DefineDefaultConstructor for static classes.
16835
16836 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
16837
16838         * attribute.cs (Attribute.Resolve): Add error 653 report.
16839
16840         * class.cs (Class.ApplyAttributeBuilder): Add error 641
16841         report.
16842         (Method.ApplyAttributeBuilder): Add error 685 report.
16843         (Operator.Define): Add error 564 report.
16844
16845         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
16846
16847         * expression.cs (Invocation.DoResolve): Add error
16848         245 and 250 report.
16849
16850         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
16851         error 674 report.
16852
16853 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16854
16855         * class.cs (ConstructorInitializer.Resolve):
16856         Wrong error number (515->516).
16857
16858 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16859
16860         * class.cs (Indexer.Define): Add error 631 report.
16861
16862 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16863
16864         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
16865
16866 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16867
16868         * expression.cs (Probe.DoResolve): Add error CS0241 report.
16869
16870 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
16871
16872         * cs-parser.jay: Added error CS0241 report.
16873
16874 2004-09-10  Raja R Harinath  <rharinath@novell.com>
16875
16876         * cs-parser.jay (fixed_statement): Introduce a scope for the
16877         declaration in the 'fixed' statement.
16878
16879 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
16880
16881         * cs-parser.jay: Added CS0230 error report.
16882
16883 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
16884
16885         * cs-parser.jay: Added errors CS0231 and CS0257 report.
16886
16887 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
16888
16889         * expression.cs (Argument.Resolve): Added error CS0192 and
16890         CS0199 report.
16891
16892 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
16893
16894         C# 2.0 #pragma warning feature
16895
16896         * cs-tokenizer.cs (PreProcessPragma): New method; 
16897         Handles #pragma directive.
16898
16899         * report.cs (WarningRegions): New class; Support
16900         class for #pragma warning directive. It tests whether
16901         warning is enabled for a given line.
16902
16903 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
16904
16905         * const.cs: Add more descriptive error report, tahnks to
16906         Sebastien. 
16907
16908 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
16909
16910         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
16911
16912 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
16913
16914         * expression.cs: Apply patch from Ben: Remove dead code from
16915         ArrayCreation, and remove the TurnintoConstant call in const.cs,
16916         as that code just threw an exception anwyays.
16917
16918         * const.cs: Remove the call to the turnintoconstant, for details
16919         see bug: #63144
16920         
16921         * literal.cs: The type of the null-literal is the null type;  So
16922         we use a placeholder type (literal.cs:System.Null, defined here)
16923         for it.
16924
16925         * expression.cs (Conditional.DoResolve): Remove some old code that
16926         is no longer needed, conversions have been fixed.
16927
16928         (ArrayCreationExpression.DoResolve): Return false if we fail to
16929         resolve the inner expression.
16930
16931 2004-09-07  Raja R Harinath  <rharinath@novell.com>
16932
16933         Fix test-290.cs.
16934         * cs-parser.jay (delegate_declaration): Record a delegate
16935         declaration as a type declaration.
16936         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
16937
16938 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
16939
16940         * parameter.cs: Do not crash if the type can not be resolved. 
16941
16942         * expression.cs: Report errors with unsafe pointers, fixes #64896
16943
16944 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
16945
16946         * expression.cs: Pointer arith always needs to do a conv.i
16947         if the operand is a long. fix 65320
16948
16949 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
16950
16951         Fixed cs0619-37.cs, cs0619-38.cs
16952
16953         * enum.cs (GetObsoleteAttribute): Removed.
16954
16955         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
16956         on Enum member is double staged. The first is tested member
16957         and then enum.
16958
16959 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
16960
16961         Fixed #56986, #63631, #65231
16962
16963         * class.cs: (TypeContainer.AddToMemberContainer): New method,
16964         adds member to name container.
16965         (TypeContainer.AddToTypeContainer): New method, adds type to
16966         name container.
16967         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
16968         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
16969         AddOperator): Simplified by reusing AddToMemberContainer.
16970         (TypeContainer.UserDefinedStaticConstructor): Changed to property
16971         instead of field.
16972         (Method.CheckForDuplications): Fixed implementation to test all
16973         possibilities.
16974         (MemberBase): Detection whether member is explicit interface
16975         implementation is now in constructor.
16976         (MemberBase.UpdateMemberName): Handles IndexerName.
16977         (Accessor): Changed to keep also location information.
16978         (AbstractPropertyEventMethod): Is derived from MemberCore.
16979         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
16980         will be emited or not.
16981         (PropertyBase.AreAccessorsDuplicateImplementation):
16982         Tests whether accessors are not in collision with some method.
16983         (Operator): Is derived from MethodCore to simplify common
16984         operations.
16985
16986         * decl.cs (Flags.TestMethodDuplication): Test for duplication
16987         must be performed.
16988         (DeclSpace.AddToContainer): Adds the member to defined_names
16989         table. It tests for duplications and enclosing name conflicts.
16990
16991         * enum.cs (EnumMember): Clean up to reuse the base structures
16992
16993 2004-09-03  Martin Baulig  <martin@ximian.com>
16994
16995         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
16996         into TypeContainer, to make partial classes work again.
16997
16998 2004-09-03  Martin Baulig  <martin@ximian.com>
16999
17000         * rootcontext.cs (RootContext.V2): Removed.
17001
17002 2004-03-23  Martin Baulig  <martin@ximian.com>
17003
17004         * expression.cs (Invocation.OverloadResolve): Added `bool
17005         may_fail' argument and use it instead of the Location.IsNull() hack.
17006
17007 2004-09-03  Martin Baulig  <martin@ximian.com>
17008
17009         Merged latest changes into gmcs.  Please keep this comment in
17010         here, it makes it easier for me to see what changed in MCS since
17011         the last time I merged.
17012
17013 2004-09-03  Raja R Harinath  <rharinath@novell.com>
17014
17015         Fix #61128.
17016         * expression.cs (BetterConversion): Don't allow either conversion 
17017         to be null.  Remove redundant implicit conversion test when 'q ==
17018         null' -- when this function is invoked, we already know that the
17019         implicit conversion exists.
17020         (BetterFunction): Assume that 'best' is non-null.  Remove
17021         redundant reimplementation of IsApplicable when 'best' is null.
17022         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
17023         number of arguments.
17024         (IsAncestralType): Extract from OverloadResolve.
17025         (OverloadResolve): Make robust to the MethodGroupExpr being
17026         unsorted.  Implement all the logic of Section 14.5.5.1, and
17027         support overloading of methods from multiple applicable types.
17028         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
17029
17030         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
17031         (RealError, Warning): Append type of report to related symbol.
17032
17033 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
17034
17035         * enum.cs: Fixed CLS-Compliance checks for enum members.
17036         Error tests cs3008-8.cs, cs3014-8.cs
17037
17038 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
17039
17040         Fixed bug #62342, #63102
17041         * class.cs: ImplementIndexer uses member.IsExplicitImpl
17042         like ImplementMethod.
17043
17044 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
17045
17046         * attribute.cs (Attribute.GetAttributeArgumentExpression):
17047         Fixed bug #65170.
17048
17049 2004-09-02  Martin Baulig  <martin@ximian.com>
17050
17051         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
17052         TypeManager.GetArgumentTypes() rather than calling GetParameters()
17053         on the MethodBase.
17054
17055 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
17056
17057         C# 2.0 Static classes implemented
17058
17059         * class.cs (TypeContainer): instance_constructors,
17060         initialized_fields, initialized_static_fields,
17061         default_constructor, base_inteface_types are protected to be
17062         accessible from StaticClass.
17063         (TypeContainer.DefineDefaultConstructor): New virtual method
17064         for custom default constructor generating
17065         (StaticClass): New class to handle "Static classes" feature.
17066
17067         * cs-parser.jay: Handle static keyword on class like instance
17068         of StaticClass.
17069
17070         * driver.cs: Added "/langversion" command line switch with two
17071         options (iso-1, default).
17072
17073 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
17074
17075         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
17076
17077 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
17078
17079         * delegate.cs: Style.
17080
17081 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
17082
17083         * delegate.cs: Add seperate instance expr field for miguel.
17084
17085 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
17086
17087         * PointerArithmetic (Resolve): make sure we are not doing
17088         pointer arith on void*. Also, make sure we are resolved
17089         by not setting eclass until resolve.
17090
17091         All callers: Make sure that PointerArithmetic gets resolved.
17092
17093 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
17094
17095         * ArrayCreation (LookupType): If the type does not resolve 
17096         to an array, give an error.
17097
17098 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
17099
17100         * statement.cs (Try.Resolve): Fixed bug #64222
17101
17102 2004-08-27  Martin Baulig  <martin@ximian.com>
17103
17104         * class.cs
17105         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
17106         crash here.     
17107
17108 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
17109
17110         * ecore.cs (Constantify): Get underlying type via
17111         System.Enum.GetUnderlyingType to avoid StackOverflow on the
17112         Windows in special cases.
17113
17114 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
17115
17116         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
17117         for obtaining also private methods.
17118         (GetRemoveMethod): Used GetRemoveMethod (true)
17119         for obtaining also private methods.
17120
17121 2004-08-24  Martin Baulig  <martin@ximian.com>
17122
17123         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
17124         MethodAttributes.HideBySig for operators.
17125
17126 2004-08-23  Martin Baulig  <martin@ximian.com>
17127
17128         Back to the old error reporting system :-)
17129
17130         * report.cs (Message): Removed.
17131         (Report.MessageData, ErrorData, WarningData): Removed.
17132         (Report.Error, Warning): Back to the old system.
17133
17134 2004-08-23  Martin Baulig  <martin@ximian.com>
17135
17136         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
17137
17138         * class.cs (TypeContainer.ParentContainer): New public virtual
17139         method; replaces the explicit interface implementation.
17140         (ClassPart.ParentContainer): Override.
17141
17142 2004-08-23  Martin Baulig  <martin@ximian.com>
17143
17144         * statement.cs (Switch): Added support for constant switches; see
17145         #59428 or test-285.cs.
17146
17147 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
17148
17149         Fixed bug #62740.
17150         * statement.cs (GetEnumeratorFilter): Removed useless
17151         logic because C# specs is strict. GetEnumerator must be
17152         public.
17153
17154 2004-08-22  Martin Baulig  <martin@ximian.com>
17155
17156         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
17157         a switch and may break, reset the barrier.  Fixes #59867.
17158
17159 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
17160
17161         CLS-Compliance speed up (~5% for corlib)
17162
17163         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
17164         New method. Tests container for CLS-Compliant names
17165
17166         * class.cs (TypeContainer.VerifyClsName): New method.
17167         Checks whether container name is CLS Compliant.
17168         (Constructor): Implements IMethodData.
17169
17170         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
17171         low-case table for CLS Compliance test.
17172         (MemberCache.VerifyClsParameterConflict): New method.
17173         Checks method parameters for CS3006 error.
17174
17175         * enum.cs (EnumMember): Is derived from MemberCore.
17176         (Enum.VerifyClsName): Optimized for better performance.
17177
17178 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
17179
17180         * report.cs: Renamed Error_T to Error and changed all
17181         references.
17182
17183 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
17184
17185         * class.cs (TypeContainer.IndexerArrayList): New inner class
17186         container for indexers.
17187         (TypeContainer.DefaultIndexerName): New constant for default
17188         indexer name. Replaced all "Item" with this constant.
17189         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
17190
17191         * typemanager.cs (TypeManager.default_member_ctor): Cache here
17192         DefaultMemberAttribute constructor.
17193
17194 2004-08-05  Martin Baulig  <martin@ximian.com>
17195
17196         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
17197         Fix bug #59429.
17198
17199 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
17200
17201         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
17202         multi platforms problem.
17203
17204         * compiler.csproj: Included shared files.
17205
17206 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17207
17208         Fix bug 60333, 55971 in the more general way
17209         * attribute.cs (Attribute.GetAttributeArgumentExpression):
17210         Added arg_type argument for constant conversion.
17211         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
17212
17213 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17214
17215         Fix bug #59760
17216         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
17217         OperatorArrayList, MethodCoreArrayList for typecontainer
17218         containers. Changed class member types to these new types.
17219         (MethodArrayList.DefineMembers): Added test for CS0659.
17220
17221 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
17222
17223         * cfold.cs: Synchronize the folding with the code in expression.cs
17224         Binary.DoNumericPromotions for uint operands.
17225
17226         * attribute.cs: Revert patch from Raja, it introduced a regression
17227         while building Blam-1.2.1 (hard to isolate a test case).
17228
17229 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17230
17231         Fix for #55382
17232         * class.cs:
17233         (TypeContainer.Define): Renamed to DefineContainerMembers because of
17234         name collision.
17235         (MethodCore.parent_method): New member. The method we're overriding
17236         if this is an override method.
17237         (MethodCore.CheckBase): Moved from Method class and made common.
17238         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
17239         private.
17240         (MethodCore.CheckForDuplications): New abstract method. For custom
17241         member duplication search in a container
17242         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
17243         method and its return type.
17244         (Event.conflict_symbol): New member. Symbol with same name in the
17245         parent class.
17246
17247         * decl.cs:
17248         (MemberCache.FindMemberWithSameName): New method. The method
17249         is looking for conflict with inherited symbols.
17250
17251 2004-08-04  Martin Baulig  <martin@ximian.com>
17252
17253         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
17254
17255         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
17256
17257 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17258
17259         * report.cs (Message): New enum for better error, warning reference in
17260         the code.
17261         (MessageData): New inner abstract class. It generally handles printing of
17262         error and warning messages.
17263         Removed unused Error, Warning, Message methods.
17264
17265 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17266
17267         Fix for cs0592-8.cs test
17268         * attribute.cs
17269         (Attributable.ValidAttributeTargets): Made public.
17270         (Attribute.ExplicitTarget): New member for explicit target value.
17271         (Attribute.CheckTargets): Now we translate explicit attribute
17272         target to Target here.
17273
17274 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
17275
17276         * ecore.cs (MethodGroupExpr): new IsBase property.
17277
17278         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
17279
17280         * delegate.cs (DelegateCreation): store a MethodGroupExpr
17281         rather than an instance expr.
17282
17283         (DelegateCreation.Emit): Use the method group rather than
17284         the instance expression. Also, if you have base.Foo as the
17285         method for a delegate, make sure to emit ldftn, not ldftnvirt.
17286
17287         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
17288
17289         (NewDelegate.DoResolve): Only check for the existance of Invoke
17290         if the method is going to be needed. Use MethodGroupExpr.
17291
17292         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
17293
17294         * expression.cs: For pointer arith., make sure to use
17295         the size of the type, not the size of the pointer to
17296         the type.
17297
17298 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17299
17300         Fix for #60722
17301         * class.cs (Class): Added error CS0502 test.
17302
17303 2004-08-03  John Luke  <jluke@cfl.rr.com>
17304             Raja R Harinath  <rharinath@novell.com>
17305
17306         Fix for #60997.
17307         * attribute.cs (Attribute.complained_before): New flag.
17308         (Attribute.ResolveType, Attribute.Resolve),
17309         (Attribute.DefinePInvokeMethod): Set it.
17310         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
17311         
17312 2004-08-03  Martin Baulig  <martin@ximian.com>
17313
17314         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
17315         use a user-defined operator; we still need to do numeric
17316         promotions in case one argument is a builtin type and the other
17317         one has an implicit conversion to that type.  Fixes #62322.
17318
17319 2004-08-02  Martin Baulig  <martin@ximian.com>
17320
17321         * statement.cs (LocalInfo.Flags): Added `IsThis'.
17322         (LocalInfo.IsThis): New public property.
17323         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
17324
17325 2004-08-01  Martin Baulig  <martin@ximian.com>
17326
17327         * class.cs (TypeContainer.GetClassBases): Don't set the default
17328         here since we may get called from GetPartialBases().
17329         (TypeContainer.DefineType): If GetClassBases() didn't return a
17330         parent, use the default one.
17331
17332 2004-07-30  Duncan Mak  <duncan@ximian.com>
17333
17334         * Makefile (mcs2.exe, mcs3.exe): add $(EXTRA_SOURCES).
17335
17336 2004-07-30  Martin Baulig  <martin@ximian.com>
17337
17338         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
17339
17340         * class.cs (SourceMethod): New public class, derive from the
17341         symbol writer's ISourceMethod.
17342         (Method): Use the new symbol writer API.
17343
17344         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
17345         as argument and use the new symbol writer.
17346
17347         * location.cs
17348         (SourceFile): Implement the symbol writer's ISourceFile.
17349         (Location.SymbolDocument): Removed.
17350         (Location.SourceFile): New public property.
17351
17352         * symbolwriter.cs: Use the new symbol writer API.
17353
17354 2004-07-30  Raja R Harinath  <rharinath@novell.com>
17355
17356         * Makefile (install-local): Remove.  Functionality moved to
17357         executable.make.
17358
17359 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
17360
17361         * Makefile: Install mcs.exe.config file together with mcs.exe.
17362         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
17363         correct runtime version.
17364         
17365 2004-07-25  Martin Baulig  <martin@ximian.com>
17366
17367         * class.cs
17368         (TypeContainer.RegisterOrder): Removed, this was unused.
17369         (TypeContainer, interface_order): Removed.
17370         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
17371         TypeContainer as argument since we can also be called with a
17372         `PartialContainer' for a partial class/struct/interface.
17373         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
17374         of checking whether we're an `Interface' - we could be a
17375         `PartialContainer'.
17376         (PartialContainer.Register): Override; call
17377         AddClass()/AddStruct()/AddInterface() on our parent.
17378
17379         * cs-parser.jay (interface_member_declaration): Add things to the
17380         `current_container', not the `current_class'.
17381
17382         * rootcontext.cs (RegisterOrder): The overloaded version which
17383         takes an `Interface' was unused, removed.
17384
17385         * typemanager.cs (TypeManager.LookupInterface): Return a
17386         `TypeContainer', not an `Interface'.
17387         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
17388         contain a `PartialContainer' for an interface, so check it's
17389         `Kind' to figure out what it is.
17390
17391 2004-07-25  Martin Baulig  <martin@ximian.com>
17392
17393         * class.cs (Class.DefaultTypeAttributes): New public constant.
17394         (Struct.DefaultTypeAttributes): Likewise.
17395         (Interface.DefaultTypeAttributes): Likewise.
17396         (PartialContainer.TypeAttr): Override this and add the
17397         DefaultTypeAttributes.
17398
17399 2004-07-25  Martin Baulig  <martin@ximian.com>
17400
17401         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
17402         we can just use the `Parent' field instead.
17403
17404 2004-07-25  Martin Baulig  <martin@ximian.com>
17405
17406         * class.cs (TypeContainer.Emit): Renamed to EmitType().
17407
17408 2004-07-25  Martin Baulig  <martin@ximian.com>
17409
17410         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
17411         our parts before defining any methods.
17412         (TypeContainer.VerifyImplements): Make this virtual.
17413         (ClassPart.VerifyImplements): Override and call VerifyImplements()
17414         on our PartialContainer.
17415
17416 2004-07-25  Martin Baulig  <martin@ximian.com>
17417
17418         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
17419
17420         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
17421         argument, we can just use the `Parent' field instead.
17422
17423         * class.cs
17424         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
17425         (MemberBase.DoDefine): Likewise.
17426
17427 2004-07-24  Martin Baulig  <martin@ximian.com>
17428
17429         * decl.cs (MemberCore.Parent): New public field.
17430         (DeclSpace.Parent): Moved to MemberCore.
17431
17432         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
17433         (MemberBase.ctor): Added TypeContainer argument, pass it to our
17434         parent's .ctor.
17435         (FieldBase, Field, Operator): Likewise.
17436         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
17437         (EventField, Event): Likewise.
17438
17439 2004-07-23  Martin Baulig  <martin@ximian.com>
17440
17441         * class.cs (PartialContainer): New public class.
17442         (ClassPart): New public class.
17443         (TypeContainer): Added support for partial classes.
17444         (TypeContainer.GetClassBases): Splitted some of the functionality
17445         out into GetNormalBases() and GetPartialBases().
17446
17447         * cs-tokenizer.cs (Token.PARTIAL): New token.
17448         (Tokenizer.consume_identifier): Added some hacks to recognize
17449         `partial', but only if it's immediately followed by `class',
17450         `struct' or `interface'.
17451
17452         * cs-parser.jay: Added support for partial clases.
17453
17454 2004-07-23  Martin Baulig  <martin@ximian.com>
17455
17456         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
17457         a `DeclSpace' and also made it readonly.
17458         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
17459         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
17460         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
17461
17462         * cs-parser.jay: Pass the `current_class', not the
17463         `current_container' (at the moment, this is still the same thing)
17464         to a new Method, Property, Event, Indexer or Constructor.
17465
17466 2004-07-23  Martin Baulig  <martin@ximian.com>
17467
17468         * cs-parser.jay (CSharpParser): Added a new `current_class' field
17469         and removed the `current_interface' one.
17470         (struct_declaration, class_declaration, interface_declaration):
17471         Set `current_class' to the newly created class/struct/interface;
17472         set their `Bases' and call Register() before parsing their body.
17473
17474 2004-07-23  Martin Baulig  <martin@ximian.com>
17475
17476         * class.cs (Kind): New public enum.
17477         (TypeContainer): Made this class abstract.
17478         (TypeContainer.Kind): New public readonly field.
17479         (TypeContainer.CheckDef): New public method; moved here from
17480         cs-parser.jay.
17481         (TypeContainer.Register): New public abstract method.
17482         (TypeContainer.GetPendingImplementations): New public abstract
17483         method.
17484         (TypeContainer.GetClassBases): Removed the `is_class' and
17485         `is_iface' parameters.
17486         (TypeContainer.DefineNestedTypes): Formerly known as
17487         DoDefineType().
17488         (ClassOrStruct): Made this class abstract.
17489
17490         * tree.cs (RootTypes): New public type. 
17491
17492 2004-07-20  Martin Baulig  <martin@ximian.com>
17493
17494         * tree.cs (Tree.RecordNamespace): Removed.
17495         (Tree.Namespaces): Removed.
17496
17497         * rootcontext.cs (RootContext.IsNamespace): Removed.
17498
17499         * cs-parser.jay (namespace_declaration): Just create a new
17500         NamespaceEntry here.
17501
17502 2004-07-20  Martin Baulig  <martin@ximian.com>
17503
17504         * statement.cs (ExceptionStatement): New abstract class.  This is
17505         now used as a base class for everyone who's using `finally'.
17506         (Using.ResolveLocalVariableDecls): Actually ResolveLValue() all
17507         our local variables before using them.
17508
17509         * flowanalysis.cs (FlowBranching.StealFinallyClauses): New public
17510         virtual method.  This is used by Yield.Resolve() to "steal" an
17511         outer block's `finally' clauses.
17512         (FlowBranchingException): The .ctor now takes an ExceptionStatement
17513         argument.
17514
17515         * codegen.cs (EmitContext.StartFlowBranching): Added overloaded
17516         version which takes an ExceptionStatement.  This version must be
17517         used to create exception branchings.
17518
17519         * iterator.cs
17520         (Yield.Resolve): "Steal" all `finally' clauses from containing blocks.
17521         (Iterator.EmitMoveNext): Added exception support; protect the
17522         block with a `fault' clause, properly handle 'finally' clauses.
17523         (Iterator.EmitDispose): Run all the `finally' clauses here.
17524
17525 2004-07-20  Martin Baulig  <martin@ximian.com>
17526
17527         * iterator.cs: This is the first of a set of changes in the
17528         iterator code.  Match the spec more closely: if we're an
17529         IEnumerable, then GetEnumerator() must be called.  The first time
17530         GetEnumerator() is called, it returns the current instance; all
17531         subsequent invocations (if any) must create a copy.
17532
17533 2004-07-19  Miguel de Icaza  <miguel@ximian.com>
17534
17535         * expression.cs: Resolve the constant expression before returning
17536         it. 
17537
17538 2004-07-19  Martin Baulig  <martin@ximian.com>
17539
17540         * iterators.cs (Iterator.MapVariable): Don't define fields twice.
17541         (Iterator.MoveNextMethod.DoEmit): Use `TypeManager.int32_type' as
17542         the return type of the new EmitContext.
17543
17544 2004-07-18  Martin Baulig  <martin@ximian.com>
17545
17546         * class.cs (Property.Define): Fix iterators.
17547
17548         * iterators.cs (Iterator.Define): Moved the
17549         `container.AddInterator (this)' call here from the .ctor; only do
17550         it if we resolved successfully.
17551
17552 2004-07-17  Miguel de Icaza  <miguel@ximian.com>
17553
17554         * cs-tokenizer.cs (handle_preprocessing_directive): Do not return
17555         `true' for preprocessing directives that we parse.  The return
17556         value indicates whether we should return to regular tokenizing or
17557         not, not whether it was parsed successfully.
17558
17559         In the past if we were in: #if false ... #line #endif, we would
17560         resume parsing after `#line'.  See bug 61604.
17561
17562         * typemanager.cs: Removed an old hack from Gonzalo to get corlib
17563         building: IsEnumType should return true only for enums, not for
17564         enums or System.Enum itself.  This fixes #61593.
17565
17566         Likely what happened is that corlib was wrong: mcs depended on
17567         this bug in some places.  The bug got fixed, we had to add the
17568         hack, which caused bug 61593.
17569
17570         * expression.cs (ArrayAccess.GetStoreOpCode): Remove an old hack
17571         that was a workaround for the older conditions.
17572
17573 2004-07-16  Ben Maurer  <bmaurer@ximian.com>
17574
17575         * assign.cs: IAssignMethod has a new interface, as documented
17576         inline. All assignment code now uses this new api.
17577
17578         * ecore.cs, expression.cs: All classes which implement
17579         IAssignMethod now use the new interface.
17580
17581         * expression.cs (Invocation): add a hack to EmitCall so that
17582         IndexerAccess can be the target of a compound assignment without
17583         evaluating its arguments twice.
17584
17585         * statement.cs: Handle changes in Invocation api.
17586
17587 2004-07-16  Martin Baulig  <martin@ximian.com>
17588
17589         * iterators.cs: Rewrote this.  We're now using one single Proxy
17590         class for both the IEnumerable and the IEnumerator interface and
17591         `Iterator' derives from Class so we can use the high-level API.
17592
17593         * class.cs (TypeContainer.AddIterator): New method.
17594         (TypeContainer.DoDefineType): New protected virtual method, which
17595         is called from DefineType().
17596         (TypeContainer.DoDefineMembers): Call DefineType() and
17597         DefineMembers() on all our iterators.
17598         (TypeContainer.Emit): Call Emit() on all our iterators.
17599         (TypeContainer.CloseType): Call CloseType() on all our iterators.
17600
17601         * codegen.cs (EmitContext.CurrentIterator): New public field.
17602
17603 2004-07-15  Martin Baulig  <martin@ximian.com>
17604
17605         * typemanager.cs
17606         (TypeManager.not_supported_exception_type): New type.   
17607
17608 2004-07-14  Martin Baulig  <martin@ximian.com>
17609
17610         * iterators.cs: Use real error numbers.
17611
17612 2004-07-14  Martin Baulig  <martin@ximian.com>
17613
17614         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
17615         requires this to be a System.Collection.IEnumerable and not a
17616         class implementing that interface.
17617         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
17618
17619 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
17620
17621         * class.cs: Fixed previous fix, it broke some error tests.
17622
17623 2004-07-12  Martin Baulig  <martin@ximian.com>
17624
17625         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
17626         Fixes #61293.
17627
17628 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
17629
17630         * assign.cs (LocalTemporary): Add new argument: is_address,If
17631         `is_address' is true, then the value that we store is the address
17632         to the real value, and not the value itself.
17633         
17634         * ecore.cs (PropertyExpr): use the new local temporary
17635         stuff to allow us to handle X.Y += z (where X is a struct)
17636
17637 2004-07-08  Martin Baulig  <martin@ximian.com>
17638
17639         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
17640         not always return, just like we're doing in Using.Resolve().
17641
17642 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
17643
17644         * cs-parser.jay (fixed_statement): flag this as Pinned.
17645
17646 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
17647
17648         * typemanager.cs (TypeManager): Removed MakePinned method, this
17649         mechanism is replaced with the .NET 2.x compatible mechanism of
17650         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
17651
17652         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
17653         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
17654         `IsFixed' property which has a different meaning.
17655
17656 2004-07-02  Raja R Harinath  <rharinath@novell.com>
17657
17658         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
17659         visible from inside a nested class, not just the names of the
17660         immediately enclosing class.
17661         Fix for bug #60730.
17662
17663 2004-06-24  Raja R Harinath  <rharinath@novell.com>
17664
17665         * expression.cs (BetterConversion): Remove buggy special-case
17666         handling of "implicit constant expression conversions".  At this
17667         point, we already know that the conversion is possible -- we're
17668         only checking to see which is better.
17669
17670 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
17671
17672         * cs-parser.jay: Added error CS0210 test.
17673
17674 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
17675
17676         * cs-parser.jay: Added error CS0134 test.
17677
17678 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
17679
17680         Fix bug #52507
17681         * cs-parser.jay: Added error CS0145 test.
17682
17683 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
17684
17685         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
17686
17687 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
17688         
17689         * expression.cs (StackAlloc.Resolve): The argument may not
17690         be a constant; deal with this case.
17691         
17692 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
17693
17694         * attribute.cs (IndexerName_GetIndexerName): Renamed to
17695         GetIndexerAttributeValue.
17696         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
17697
17698         * class.cs (Indexer.Define): Added error tests for CS0415,
17699         CS0609.
17700
17701 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
17702
17703         * attribute.cs (Attribute.Resolve): Keep field code in sync with
17704         property code.
17705
17706 2004-06-23  Martin Baulig  <martin@ximian.com>
17707
17708         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
17709         neither return nor throw, reset the barrier as well.  Fixes #60457.
17710
17711 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
17712
17713         * class.cs : EventAttributes is now set to None by default.
17714           This fixes bug #60459.
17715
17716 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
17717
17718         Fix bug #60219
17719         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
17720         Don't throw exception but return null (it's sufficient now).
17721
17722 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
17723
17724         * typemanager.cs (GetArgumentTypes): Faster implementation.
17725
17726 2004-06-18  Martin Baulig  <martin@ximian.com>
17727
17728         * attribute.cs (Attribute.Resolve): Check whether we're an
17729         EmptyCast which a Constant child.  Fixes #60333.
17730
17731 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
17732
17733         * statement.cs (EmitCollectionForeach): Account for the fact that
17734         not all valuetypes are in areas which we can take the address of.
17735         For these variables, we store to a temporary variable. Also, make
17736         sure that we dont emit a `callvirt' on a valuetype method.
17737
17738 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
17739
17740         * expression.cs (StackAlloc.DoReSolve): Added test for
17741         negative parameter (CS0247).
17742
17743 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
17744
17745         Fix bug #59792
17746         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
17747
17748 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
17749
17750         Fix bug #59781
17751         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
17752         ulong.
17753
17754 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
17755
17756         Fix bug #58254 & cs1555.cs, cs1556.cs
17757         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
17758
17759 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
17760
17761         * cs-parser.jay: Added error CS1669 test for indexers.
17762
17763 2004-06-11  Martin Baulig  <martin@ximian.com>
17764
17765         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
17766         call this twice: for params and varargs methods.
17767
17768 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17769
17770         * class.cs:
17771         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
17772
17773 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17774
17775         * attribute.cs (Attribute.GetValidTargets): Made public.
17776
17777         * class.cs: 
17778         (AbstractPropertyEventMethod): New class for better code sharing.
17779         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
17780         CS1667 report.
17781         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
17782
17783 2004-06-11  Raja R Harinath  <rharinath@novell.com>
17784
17785         Fix bug #59477.
17786         * ecore.cs (ResolveFlags): Add new 'Intermediate' flag to tell
17787         that the call to Resolve is part of a MemberAccess.
17788         (Expression.Resolve): Use it for SimpleName resolution.
17789         (SimpleName.SimpleNameResolve, SimpleName.DoResolveAllowStatic):
17790         Add 'intermediate' boolean argument.
17791         (SimpleName.DoSimpleNameResolve): Likewise.  Use it to disable an
17792         error message when the SimpleName can be resolved ambiguously
17793         between an expression and a type.
17794         * expression.cs (MemberAccess.IdenticalNameAndTypeName): Make
17795         public.
17796         (MemberAccess.Resolve): Pass 'Intermediate' flag to the Resolve()
17797         call on the left-side.
17798
17799 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17800
17801         * class.cs:
17802         (MethodCore.VerifyClsCompliance): Added test for error CS3000.
17803
17804 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17805
17806         * attribute.cs (Attribute.Emit): Fixed error CS0579 reporting.
17807
17808 2004-06-11  Martin Baulig  <martin@ximian.com>
17809
17810         * expression.cs (Invocation.EmitCall): Use OpCodes.Callvirt for
17811         varargs methods if applicable.
17812
17813 2004-06-11  Martin Baulig  <martin@ximian.com>
17814
17815         * expression.cs (Invocation.EmitCall): Don't use
17816         `method.CallingConvention == CallingConventions.VarArgs' since the
17817         method could also have `CallingConventions.HasThis'.
17818
17819 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17820
17821         * class.cs (Event.GetSignatureForError): Implemented.
17822         Fixed crash in error test cs3010.cs
17823
17824 2004-06-10  Miguel de Icaza  <miguel@ximian.com>
17825
17826         * cs-tokenizer.cs: Change the way we track __arglist to be
17827         consistent with the other keywords.
17828
17829 2004-06-09  Miguel de Icaza  <miguel@ximian.com>
17830
17831         * codegen.cs: FAQ avoider: turn 1577 into a warning for now until
17832         tomorrow.
17833
17834 2004-06-09  Sebastien Pouliot  <sebastien@ximian.com>
17835
17836         * codegen.cs: Check that all referenced assemblies have a strongname
17837         before strongnaming the compiled assembly. If not report error CS1577.
17838         Fix bug #56563. Patch by Jackson Harper.
17839         * typemanager.cs: Added a method to return all referenced assemblies.
17840         Fix bug #56563. Patch by Jackson Harper.
17841
17842 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
17843
17844         * class.cs:
17845         (Method.ApplyAttributeBuilder): Moved and added conditional
17846         attribute error tests (CS0577, CS0578, CS0243, CS0582, CS0629).
17847
17848         * delegate.cs:
17849         (DelegateCreation.ResolveMethodGroupExpr): Added error CS1618 test.
17850
17851 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
17852
17853         Fixed #59640
17854         * class.cs: (EventField.attribute_targets): Changed default target.
17855
17856 2004-06-08  Martin Baulig  <martin@ximian.com>
17857
17858         * expression.cs (Invocation.EmitCall): Enable varargs methods.
17859
17860 2004-06-08  Martin Baulig  <martin@ximian.com>
17861
17862         * rootcontext.cs (ResolveCore): Added "System.RuntimeArgumentHandle".
17863
17864 2004-06-07  Martin Baulig  <martin@ximian.com>
17865
17866         Added support for varargs methods.
17867
17868         * cs-tokenizer.cs (Token.ARGLIST): New token for the `__arglist'
17869         keyword.
17870
17871         * cs-parser.jay: Added support for `__arglist'.
17872
17873         * decl.cs (MemberCache.AddMethods): Don't ignore varargs methods.
17874
17875         * expression.cs (Argument.AType): Added `ArgList'.
17876         (Invocation): Added support for varargs methods.
17877         (ArglistAccess): New public class.
17878         (Arglist): New public class.
17879
17880         * parameter.cs (Parameter.Modifier): Added `ARGLIST'.
17881
17882         * statement.cs (Block.Flags): Added `HasVarargs'.  We set this on
17883         a method's top-level block if the method has varargs.
17884
17885         * support.cs (ReflectionParameters, InternalParameters): Added
17886         support for varargs methods.    
17887
17888 2004-06-07  Miguel de Icaza  <miguel@ximian.com>
17889
17890         * class.cs: Provide location in indexer error report.
17891
17892         * driver.cs: Use standard names.
17893
17894         * namespace.cs: Catch the use of using after a namespace has been
17895         declared also on using aliases.
17896
17897 2004-06-03  Raja R Harinath  <rharinath@novell.com>
17898
17899         Bug #50820.
17900         * typemanager.cs (closure_private_ok, closure_invocation_type)
17901         (closure_qualifier_type, closure_invocation_assembly)
17902         (FilterWithClosure): Move to ...
17903         (Closure): New internal nested class.
17904         (Closure.CheckValidFamilyAccess): Split out from Closure.Filter.
17905         (MemberLookup, RealMemberLookup): Add new almost_match parameter.
17906         * ecore.cs (almostMatchedMembers): New variable to help report CS1540.
17907         (MemberLookup, MemberLookupFailed): Use it.
17908         * expression.cs (New.DoResolve): Treat the lookup for the
17909         constructor as being qualified by the 'new'ed type.
17910         (Indexers.GetIndexersForTypeOrInterface): Update.
17911
17912 2004-06-03  Marek Safar  <marek.safar@seznam.cz>
17913
17914         * attribute.cs
17915         (GetConditionalAttributeValue): New method. Returns
17916         condition of ConditionalAttribute.
17917         (SearchMulti): New method.  Returns all attributes of type 't'.
17918         Use it when attribute is AllowMultiple = true.
17919         (IsConditionalMethodExcluded): New method.
17920
17921         * class.cs
17922         (Method.IsExcluded): Implemented. Returns true if method has conditional
17923         attribute and the conditions is not defined (method is excluded).
17924         (IMethodData): Extended interface for ConditionalAttribute support.
17925         (PropertyMethod.IsExcluded): Implemented.
17926
17927         * decl.cs
17928         (MemberCore.Flags): Excluded_Undetected, Excluded new caching flags.
17929
17930         * expression.cs
17931         (Invocation.IsMethodExcluded): Checks the ConditionalAttribute
17932         on the method.
17933
17934 2004-06-02 Ben Maurer  <bmaurer@users.sourceforge.net>
17935
17936         * expression.cs (ArrayCreationExpression): Make this just an
17937         `expression'. It can't be a statement, so the code here was
17938         dead.
17939
17940 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
17941
17942         Fixed #59072
17943         * typemanager.cs (GetFullNameSignature): New method for
17944         MethodBase types.
17945
17946 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
17947
17948         Fixed #56452
17949         * class.cs (MemberBase.GetSignatureForError): New virtual method.
17950         Use this method when MethodBuilder is null.
17951         (MethodData.DefineMethodBuilder): Encapsulated code to the new method.
17952         Added test for error CS0626 (MONO reports error for this situation).
17953         (IMethodData.GetSignatureForError): Extended interface.
17954
17955 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
17956
17957         * attribute.cs
17958         (AttributeTester.GetObsoleteAttribute): Returns instance of
17959         ObsoleteAttribute when type is obsolete.
17960
17961         * class.cs
17962         (TypeContainer.VerifyObsoleteAttribute): Override.
17963         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
17964         (MethodCode.VerifyObsoleteAttribute): Override.
17965         (MemberBase.VerifyObsoleteAttribute): Override.
17966
17967         * decl.cs
17968         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
17969         and report proper error.
17970
17971         *delegate.cs
17972         Delegate.VerifyObsoleteAttribute): Override.
17973
17974         * ecore.cs
17975         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
17976         and report proper error.
17977         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
17978
17979         * enum.cs
17980         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
17981         and enum member.
17982
17983         * expression.cs
17984         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
17985         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
17986         Added test for ObsoleteAttribute.
17987
17988         * statement.cs
17989         (Catch): Derived from Statement.
17990
17991 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
17992  
17993         Fixed bug #59071 & cs0160.cs
17994  
17995         * statement.cs (Try.Resolve): Check here whether order of catch
17996         clauses matches their dependencies.
17997
17998 2004-05-31  Miguel de Icaza  <miguel@ximian.com>
17999
18000         * Reverted patch to namespace.cs (Use lookuptypedirect).  This
18001         caused a regression: #59343.  Referencing nested classes from an
18002         assembly stopped working.
18003
18004 2004-05-31  Martin Baulig  <martin@ximian.com>
18005
18006         MCS is now frozen for beta 2.
18007
18008 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18009
18010         * convert.cs: add a trivial cache for overload operator resolution.
18011
18012 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18013
18014         * decl.cs: If possible, use lookuptypedirect here. We can only do
18015         this if there is no `.' after the namespace. Avoids using
18016         LookupType, which does lots of slow processing.
18017         (FindNestedType) New method, does what it says :-).
18018         * namespace.cs: use LookupTypeDirect.
18019         * rootcontext.cs: use membercache, if possible.
18020         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
18021
18022 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18023
18024         * expression.cs:
18025         According to the spec, 
18026
18027         In a member access of the form E.I, if E is a single identifier,
18028         and if the meaning of E as a simple-name (§7.5.2) is a constant,
18029         field, property, localvariable, or parameter with the same type as
18030         the meaning of E as a type-name (§3.8), then both possible
18031         meanings of E are permitted.
18032
18033         We did not check that E as a simple-name had the same type as E as
18034         a type name.
18035
18036         This trivial check gives us 5-7% on bootstrap time.
18037
18038 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18039
18040         * expression.cs (Invocation.OverloadResolve): Avoid the
18041         use of hashtables and boxing here by allocating on demand.
18042
18043 2004-05-30  Martin Baulig  <martin@ximian.com>
18044
18045         * rootcontext.cs (RootContext.LookupType): Don't cache things if
18046         we're doing a silent lookup.  Don't try to lookup nested types in
18047         TypeManager.object_type (thanks to Ben Maurer).
18048
18049 2004-05-30  Martin Baulig  <martin@ximian.com>
18050
18051         Committing a patch from Ben Maurer.
18052
18053         * rootcontext.cs (RootContext.LookupType): Cache negative results.
18054
18055 2004-05-29  Martin Baulig  <martin@ximian.com>
18056
18057         * class.cs (IMethodData.ShouldIgnore): New method.
18058
18059         * typemanager.cs (TypeManager.MethodFlags): Don't take a
18060         `Location' argument, we don't need it anywhere.  Use
18061         `IMethodData.ShouldIgnore ()' instead of
18062         `MethodData.GetMethodFlags ()'.
18063         (TypeManager.AddMethod): Removed.
18064         (TypeManager.AddMethod2): Renamed to AddMethod.
18065
18066 2004-05-29  Martin Baulig  <martin@ximian.com>
18067
18068         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
18069
18070         * convert.cs (Convert.ImplicitReferenceConversion): If we're
18071         converting from a class type S to an interface type and we already
18072         have an object on the stack, don't box it again.  Fixes #52578.
18073
18074 2004-05-29  Martin Baulig  <martin@ximian.com>
18075
18076         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
18077         Added support for `params' parameters.  Fixes #59267.
18078
18079 2004-05-29  Martin Baulig  <martin@ximian.com>
18080
18081         * literal.cs (NullPointer): Provide a private .ctor which sets
18082         `type' to TypeManager.object_type.  Fixes #59048.
18083
18084 2004-05-29  Martin Baulig  <martin@ximian.com>
18085
18086         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
18087         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
18088
18089         * ecore.cs (EventExpr.instance_expr): Make the field private.
18090
18091 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
18092
18093         Fixed bug #50080 & cs0214-2.cs
18094         * expression.cs (Cast.DoResolve): Check unsafe context here.
18095         
18096         * statement.cs (Resolve.DoResolve): Likewise.
18097
18098 2004-05-26  Martin Baulig  <martin@ximian.com>
18099
18100         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
18101
18102         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
18103         (RootContext.LookupType): Pass down the `silent' flag.
18104
18105 2004-05-25  Martin Baulig  <martin@ximian.com>
18106
18107         * expression.cs
18108         (MethodGroupExpr.IdenticalTypeName): New public property.
18109         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
18110         expression actually refers to a type.
18111
18112 2004-05-25  Martin Baulig  <martin@ximian.com>
18113
18114         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
18115         for #56176 and made it actually work.
18116
18117 2004-05-25  Martin Baulig  <martin@ximian.com>
18118
18119         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
18120         (FieldExpr, PropertyExpr): Override and implement
18121         CacheTemporaries.  Fixes #52279.
18122
18123 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
18124
18125         * location.cs: In the new compiler listing a file twice is a
18126         warning, not an error.
18127
18128 2004-05-24  Martin Baulig  <martin@ximian.com>
18129
18130         * enum.cs (Enum.DefineType): For the `BaseType' to be a
18131         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
18132
18133 2004-05-24  Martin Baulig  <martin@ximian.com>
18134
18135         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
18136         walking the `using' list.  Fixes #53921.
18137
18138 2004-05-24  Martin Baulig  <martin@ximian.com>
18139
18140         * const.cs (Const.LookupConstantValue): Added support for
18141         EmptyCast's; fixes #55251.
18142
18143 2004-05-24  Martin Baulig  <martin@ximian.com>
18144
18145         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
18146         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
18147         which does the CS0135 check.  The reason is that we first need to
18148         check whether the variable actually exists.
18149
18150 2004-05-24  Martin Baulig  <martin@ximian.com>
18151
18152         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
18153         than RootContext.LookupType() to find the explicit interface
18154         type.  Fixes #58584.
18155
18156 2004-05-24  Raja R Harinath  <rharinath@novell.com>
18157
18158         * Makefile: Simplify.  Use executable.make.
18159         * mcs.exe.sources: New file.  List of sources of mcs.exe.
18160
18161 2004-05-24  Anders Carlsson  <andersca@gnome.org>
18162
18163         * decl.cs:
18164         * enum.cs:
18165         Use the invariant culture when doing String.Compare for CLS case
18166         sensitivity.
18167         
18168 2004-05-23  Martin Baulig  <martin@ximian.com>
18169
18170         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
18171         don't have any dots.  Fixes #52622, added cs0246-8.cs.
18172
18173         * namespace.cs (NamespaceEntry.Lookup): Likewise.
18174         
18175 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
18176
18177         * class.cs (MemberBase.Define): Reuse MemberType member for 
18178         resolved type. Other methods can use it too.
18179
18180 2004-05-23  Martin Baulig  <martin@ximian.com>
18181
18182         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
18183         the variable also exists in the current block (otherwise, we need
18184         to report a CS0103).  Fixes #58670.
18185
18186 2004-05-23  Martin Baulig  <martin@ximian.com>
18187
18188         * flowanalysis.cs (Reachability.Reachable): Compute this
18189         on-the-fly rather than storing it as a field.
18190
18191 2004-05-23  Martin Baulig  <martin@ximian.com>
18192
18193         * flowanalysis.cs (Reachability.And): Manually compute the
18194         resulting `barrier' from the reachability.      
18195        
18196 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
18197
18198         Fix bug #57835
18199         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
18200         instance of ObsoleteAttribute when symbol is obsolete.
18201
18202         * class.cs
18203         (IMethodData): Extended interface for ObsoleteAttribute support.
18204
18205 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
18206
18207         * attribute.cs: Fix bug #55970
18208
18209 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
18210
18211         Fix bug #52705
18212         * attribute.cs
18213         (GetObsoleteAttribute): New method. Creates the instance of
18214         ObsoleteAttribute.
18215         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
18216         ObsoleteAttribute when member is obsolete.
18217         (AttributeTester.Report_ObsoleteMessage): Common method for
18218         Obsolete error/warning reporting.
18219
18220         * class.cs
18221         (TypeContainer.base_classs_type): New member for storing parent type.
18222
18223         * decl.cs
18224         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
18225         for this MemberCore.
18226
18227 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18228
18229         * attribute.cs, const.cs: Fix bug #58590
18230
18231 2004-05-21  Martin Baulig  <martin@ximian.com>
18232
18233         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
18234         out parameters if the end of the method is unreachable.  Fixes
18235         #58098. 
18236
18237 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18238
18239         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
18240         Hari was right, why extra method.
18241
18242 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18243
18244         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
18245
18246 2004-05-20  Martin Baulig  <martin@ximian.com>
18247
18248         Merged this back from gmcs to keep the differences to a minumum.
18249
18250         * attribute.cs (Attribute.CheckAttributeType): Take an EmitContext
18251         instead of a Declspace.
18252         (Attribute.ResolveType): Likewise.
18253         (Attributes.Search): Likewise.
18254         (Attributes.Contains): Likewise.
18255         (Attributes.GetClsCompliantAttribute): Likewise.
18256
18257         * class.cs (TypeContainer.VerifyMembers): Added EmitContext
18258         argument.
18259         (MethodData.ApplyAttributes): Take an EmitContext instead of a
18260         DeclSpace.
18261
18262 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
18263
18264         Fix bug #58688 (MCS does not report error when the same attribute
18265         is assigned twice)
18266
18267         * attribute.cs (Attribute.Emit): Distinction between null and default.
18268
18269 2004-05-19  Raja R Harinath  <rharinath@novell.com>
18270
18271         * cs-parser.jay (attribute): Create a GlobalAttribute for the case
18272         of a top-level attribute without an attribute target.
18273         * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
18274         Make non-static.
18275         (Attribute.Conditional_GetConditionName), 
18276         (Attribute.Obsolete_GetObsoleteMessage): Update.
18277         (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
18278         part of ScanForIndexerName.
18279         (Attribute.CanIgnoreInvalidAttribute): New function.
18280         (Attribute.ScanForIndexerName): Move to ...
18281         (Attributes.ScanForIndexerName): ... here.
18282         (Attributes.Attrs): Rename from now-misnamed AttributeSections.
18283         (Attributes.Search): New internal variant that can choose not to
18284         complain if types aren't resolved.  The original signature now
18285         complains.
18286         (Attributes.GetClsCompliantAttribute): Use internal variant, with
18287         complaints suppressed.
18288         (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
18289         only if it not useful.
18290         (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
18291         top-level for attributes that are shared between the assembly
18292         and a top-level class.
18293         * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
18294         * class.cs: Update to reflect changes.
18295         (DefineIndexers): Fuse loops.
18296         * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
18297         a couple more variants of attribute names.
18298
18299 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
18300
18301         Fix bug #52585 (Implemented explicit attribute declaration)
18302
18303         * attribute.cs:
18304         (Attributable.ValidAttributeTargets): New abstract method. It gets
18305         list of valid attribute targets for explicit target declaration.
18306         (Attribute.Target): It holds target itself.
18307         (AttributeSection): Removed.
18308         (Attribute.CheckTargets): New method. It checks whether attribute
18309         target is valid for the current element.
18310
18311         * class.cs:
18312         (EventProperty): New class. For events that are declared like
18313         property (with add and remove accessors).
18314         (EventField): New class. For events that are declared like field.
18315         class.cs
18316
18317         * cs-parser.jay: Implemented explicit attribute target declaration.
18318
18319         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
18320         Override ValidAttributeTargets.
18321
18322         * parameter.cs:
18323         (ReturnParameter): Class for applying custom attributes on 
18324         the return type.
18325         (ParameterAtribute): New class. Class for applying custom
18326         attributes on the parameter type.
18327
18328 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
18329
18330         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
18331         definitions. 
18332
18333         (Method): Allow UNSAFE here.
18334
18335         * modifiers.cs: Support unsafe reporting.
18336
18337 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
18338
18339         * decl.cs: Fix bug #58478.
18340
18341 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18342
18343         * statement.cs: When checking for unreachable code on an EmptyStatement,
18344         set the location. Fixes bug #58488.
18345
18346 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
18347
18348         * driver.cs: Add -pkg handling.
18349
18350         From Gonzalo: UseShelLExecute=false
18351
18352 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
18353
18354         * attribute.cs:
18355         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
18356         for attribute.
18357         (Attribute.IsClsCompliaceRequired): Moved to base for better
18358         accesibility.
18359         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
18360         when attribute is AttributeUsageAttribute.
18361         (Attribute.GetValidTargets): Simplified.
18362         (Attribute.GetAttributeUsage): New method returns AttributeUsage
18363         attribute for this type.
18364         (Attribute.ApplyAttributes): Method renamed to Emit and make
18365         non-static.
18366         (GlobalAttributeSection): New class for special handling of global
18367         attributes (assembly, module).
18368         (AttributeSection.Emit): New method.
18369
18370         * class.cs: Implemented Attributable abstract methods.
18371         (MethodCore.LabelParameters): Moved to Parameter class.
18372         (Accessor): Is back simple class.
18373         (PropertyMethod): Implemented Attributable abstract class.
18374         (DelegateMethod): Implemented Attributable abstract class.
18375         (Event): New constructor for disctintion between normal Event
18376         and Event with accessors.
18377
18378         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
18379
18380         * codegen.cs, const.cs, decl.cs, delegate.cs:
18381         (CommonAssemblyModulClass): Implemented Attributable abstract class
18382         and simplified.
18383
18384         * enum.cs: Implement IAttributeSupport interface.
18385         (EnumMember): New class for emum members. Implemented Attributable
18386         abstract class
18387
18388         * parameter.cs:
18389         (ParameterBase): Is abstract.
18390         (ReturnParameter): New class for easier [return:] attribute handling.
18391
18392         * typemanager.cs: Removed builder_to_attr.
18393
18394 2004-05-11  Raja R Harinath  <rharinath@novell.com>
18395
18396         Fix bug #57151.
18397         * attribute.cs (Attribute.GetPositionalValue): New function.
18398         * class.cs (TypeContainer.VerifyMembers): New function.
18399         (TypeContainer.Emit): Use it.
18400         (ClassOrStruct): New base class for Class and Struct.
18401         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
18402         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
18403         class.
18404         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
18405         then each non-static field should have a FieldOffset attribute.
18406         Otherwise, none of the fields should have a FieldOffset attribute.
18407         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
18408         and FieldOffset attributes.
18409         * typemanager.cs (TypeManager.struct_layout_attribute_type)
18410         (TypeManager.field_offset_attribute_type): New core types.
18411         (TypeManager.InitCoreTypes): Initialize them.
18412
18413 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
18414
18415         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
18416         Return correct type.
18417         From bug #58270.
18418
18419 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
18420
18421         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
18422         be implicitly converted to ulong.
18423         
18424         * expression.cs: The logic for allowing operator &, | and ^ worked
18425         was wrong, it worked before because we did not report an error in
18426         an else branch.  Fixes 57895.
18427
18428         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
18429         allow volatile fields to be reference types.
18430
18431 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
18432
18433         * driver.cs: Add support for /debug-
18434
18435 2004-05-07  Raja R Harinath  <rharinath@novell.com>
18436
18437         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
18438         Add a 'complain' parameter to silence errors.
18439         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
18440         silently overlooked type-resolutions.
18441         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
18442         to reflect changes.
18443         (Attributes.Search): New function.
18444         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
18445         (Attributes.GetAttributeFullName): Remove hack.
18446         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
18447         Update to reflect changes.
18448         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
18449         Use Attributes.Search instead of nested loops.
18450
18451 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
18452
18453         * decl.cs:
18454         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
18455         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
18456         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
18457
18458         * report.cs: (Report.Warning): Renamed to Warning_T because of
18459         parameter collision.
18460
18461 2004-05-05  Raja R Harinath  <rharinath@novell.com>
18462
18463         * expression.cs (MemberAccess.ResolveMemberAccess):
18464         Exit with non-zero status after Report.Error.
18465         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
18466         Likewise.
18467         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
18468
18469 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
18470
18471         * support.cs: Don't hang when the file is empty.
18472
18473 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
18474
18475         * support.cs: In SeekableStreamReader, compute the preamble size of the
18476           underlying stream. Position changes should take into account that initial
18477           count of bytes.
18478
18479 2004-05-03  Todd Berman  <tberman@sevenl.net>
18480
18481         * driver.cs: remove unused GetSysVersion function.
18482
18483 2004-05-03  Todd Berman  <tberman@sevenl.net>
18484
18485         * driver.cs: Remove the hack from saturday, as well as the hack
18486         from jackson (LoadAssemblyFromGac), also adds the CWD to the
18487         link_paths to get that bit proper.
18488
18489 2004-05-01  Todd Berman  <tberman@sevenl.net>
18490
18491         * driver.cs: Try a LoadFrom before a Load, this checks the current
18492         path. This is currently a bug in mono that is be fixed, however, this
18493         provides a workaround for now. This will be removed when the bug
18494         is fixed.
18495
18496 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
18497
18498         * CryptoConvert.cs: Updated to latest version. Fix issue with 
18499         incomplete key pairs (#57941).
18500
18501 2004-05-01  Todd Berman  <tberman@sevenl.net>
18502
18503         * driver.cs: Remove '.' from path_chars, now System.* loads properly
18504         from the GAC
18505
18506 2004-04-30  Jackson Harper  <jackson@ximian.com>
18507
18508         * codegen.cs: Open keys readonly.
18509         
18510 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18511
18512         * typemanager.cs: don't report cyclic struct layout when a struct
18513         contains 2 or more fields of the same type. Failed for Pango.AttrShape
18514         which has 2 Pango.Rectangle fields.
18515
18516 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
18517
18518         * expression.cs: Handle IntPtr comparisons with IL code
18519         rather than a method call.
18520
18521 2004-04-29  Martin Baulig  <martin@ximian.com>
18522
18523         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
18524         the list of PropertyInfo's in class hierarchy and find the
18525         accessor.  Fixes #56013.
18526
18527 2004-04-29  Martin Baulig  <martin@ximian.com>
18528
18529         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
18530
18531 2004-04-29  Martin Baulig  <martin@ximian.com>
18532
18533         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
18534
18535         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
18536
18537 2004-04-29  Martin Baulig  <martin@ximian.com>
18538
18539         * class.cs (ConstructorInitializer.Resolve): Check whether the
18540         parent .ctor is accessible.  Fixes #52146.
18541
18542 2004-04-29  Martin Baulig  <martin@ximian.com>
18543
18544         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
18545
18546         * statement.cs (Using.EmitLocalVariableDecls): Use
18547         TypeManager.idisposable_type, not typeof (IDisposable).
18548         (Foreach.EmitCollectionForeach): Added support for valuetypes.
18549
18550 2004-04-29  Martin Baulig  <martin@ximian.com>
18551
18552         * class.cs (Event.Define): Don't emit the field and don't set
18553         RTSpecialName and SpecialName for events on interfaces.  Fixes
18554         #57703. 
18555
18556 2004-04-29  Raja R Harinath  <rharinath@novell.com>
18557
18558         Refactor Attribute.ApplyAttributes.
18559         * attribute.cs (Attributable): New base class for objects that can
18560         have Attributes applied on them.
18561         (Attribute): Make AttributeUsage fields public.
18562         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
18563         (Attribute.IsInternalCall): New property.
18564         (Attribute.UsageAttr): Convert to a public read-only property.
18565         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
18566         (Attribute.ResolveType, Attribute.Resolve)
18567         (Attribute.ScanForIndexerName): Update to reflect changes.
18568         (Attribute.CheckAttributeTarget): Re-format.
18569         (Attribute.ApplyAttributes): Refactor, to various
18570         Attributable.ApplyAttributeBuilder methods.
18571         * decl.cs (MemberCore): Make Attributable.
18572         * class.cs (Accessor): Make Attributable.
18573         (MethodData.ApplyAttributes): Use proper attribute types, not
18574         attribute names.
18575         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
18576         (TypeContainer.ApplyAttributeBuilder)
18577         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
18578         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
18579         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
18580         (Operator.ApplyAttributeBuilder): New factored-out methods.
18581         * const.cs (Const.ApplyAttributeBuilder): Likewise.
18582         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
18583         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
18584         * parameter.cs (ParameterBase): New Attributable base class
18585         that can also represent Return types.
18586         (Parameter): Update to the changes.
18587
18588 2004-04-29  Jackson Harper  <jackson@ximian.com>
18589
18590         * driver.cs: Prefer the corlib system version when looking for
18591         assemblies in the GAC. This is still a hack, but its a better hack
18592         now.
18593         
18594 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
18595
18596         * decl.cs, enum.cs: Improved error 3005 reporting.
18597   
18598         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
18599         (related_symbols): New private member for list of symbols
18600         related to reported error/warning.
18601         
18602         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
18603
18604 2004-04-29  Martin Baulig  <martin@ximian.com>
18605
18606         * ecore.cs (Expression.Constantify): If we're an enum and
18607         TypeManager.TypeToCoreType() doesn't give us another type, use
18608         t.UnderlyingSystemType.  Fixes #56178.  
18609
18610 2004-04-29  Martin Baulig  <martin@ximian.com>
18611
18612         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
18613         interfaces and for each interface, only add members directly
18614         declared in that interface.  Fixes #53255.
18615
18616 2004-04-28  Martin Baulig  <martin@ximian.com>
18617
18618         * expression.cs (ConditionalLogicalOperator): Use a temporary
18619         variable for `left' to avoid that we evaluate it more than once;
18620         bug #52588.
18621
18622 2004-04-28  Martin Baulig  <martin@ximian.com>
18623
18624         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
18625         `void[]' (CS1547).
18626
18627 2004-04-28  Martin Baulig  <martin@ximian.com>
18628
18629         * statement.cs (LocalInfo.Resolve): Check whether the type is not
18630         void (CS1547).
18631
18632         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
18633         whether the type is not void (CS1547).
18634
18635 2004-04-28  Martin Baulig  <martin@ximian.com>
18636
18637         * expression.cs (Unary.DoResolveLValue): Override this and report
18638         CS0131 for anything but Operator.Indirection.
18639
18640 2004-04-28  Martin Baulig  <martin@ximian.com>
18641
18642         Committing a patch from Ben Maurer; see bug #50820.
18643
18644         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
18645         check for classes.
18646
18647         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
18648         classes.        
18649
18650 2004-04-28  Martin Baulig  <martin@ximian.com>
18651
18652         Committing a patch from Ben Maurer; see bug #50820.
18653
18654         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
18655         check for classes.
18656
18657         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
18658         classes.        
18659
18660 2004-04-28  Martin Baulig  <martin@ximian.com>
18661
18662         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
18663         (Block.AddLabel): Call DoLookupLabel() to only search in the
18664         current block.
18665
18666 2004-04-28  Martin Baulig  <martin@ximian.com>
18667
18668         * cfold.cs (ConstantFold.BinaryFold): Added special support for
18669         comparing StringConstants and NullLiterals in Equality and Inequality.
18670
18671 2004-04-28  Jackson Harper  <jackson@ximian.com>
18672
18673         * driver.cs: Attempt to load referenced assemblies from the
18674         GAC. This is the quick and dirty version of this method that
18675         doesnt take into account versions and just takes the first
18676         canidate found. Will be good enough for now as we will not have more
18677         then one version installed into the GAC until I update this method.
18678
18679 2004-04-28  Martin Baulig  <martin@ximian.com>
18680
18681         * typemanager.cs (TypeManager.CheckStructCycles): New public
18682         static method to check for cycles in the struct layout.
18683
18684         * rootcontext.cs (RootContext.PopulateTypes): Call
18685         TypeManager.CheckStructCycles() for each TypeContainer.
18686         [Note: We only need to visit each type once.]
18687
18688 2004-04-28  Martin Baulig  <martin@ximian.com>
18689
18690         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
18691
18692         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
18693         success and added `out object value'.  Use a `bool resolved' field
18694         to check whether we've already been called rather than
18695         `ConstantValue != null' since this breaks for NullLiterals.
18696
18697 2004-04-28  Raja R Harinath  <rharinath@novell.com>
18698
18699         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
18700         setting of this flag, since the 'set' method may be non-public.
18701
18702 2004-04-28  Raja R Harinath  <rharinath@novell.com>
18703
18704         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
18705         check on current_vector.Block.
18706
18707 2004-04-27  Martin Baulig  <martin@ximian.com>
18708
18709         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
18710         a field initializer.  Fixes #56459.
18711
18712 2004-04-27  Martin Baulig  <martin@ximian.com>
18713
18714         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
18715         we're not attempting to use an indexer.  Fixes #52154.
18716
18717 2004-04-27  Martin Baulig  <martin@ximian.com>
18718
18719         * statement.cs (Return): Don't create a return label if we don't
18720         need it; reverts my change from January 20th.  Thanks to Ben
18721         Maurer for this.
18722
18723 2004-04-27  Martin Baulig  <martin@ximian.com>
18724
18725         According to the spec, `goto' can only leave a nested scope, but
18726         never enter it.
18727
18728         * statement.cs (Block.LookupLabel): Only lookup in the current
18729         block, don't recurse into parent or child blocks.
18730         (Block.AddLabel): Check in parent and child blocks, report
18731         CS0140/CS0158 if we find a duplicate.
18732         (Block): Removed this indexer for label lookups.
18733         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
18734         this already does the error reporting for us.
18735
18736         * flowanalysis.cs
18737         (FlowBranching.UsageVector.Block): New public variable; may be null.
18738         (FlowBranching.CreateSibling): Added `Block' argument.
18739         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
18740         label for the target of a `goto' and check whether we're not
18741         leaving a `finally'.
18742
18743 2004-04-27  Martin Baulig  <martin@ximian.com>
18744
18745         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
18746         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
18747         just for returns).
18748
18749 2004-04-27  Martin Baulig  <martin@ximian.com>
18750
18751         * statement.cs (Block.AddLabel): Also check for implicit blocks
18752         and added a CS0158 check.
18753
18754 2004-04-27  Martin Baulig  <martin@ximian.com>
18755
18756         * flowanalysis.cs (FlowBranchingLoop): New class.
18757         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
18758         UsageVector's instead of an ArrayList.
18759         (FlowBranching.Label): Likewise.
18760         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
18761         (FlowBranching.AddBreakVector): New method.
18762
18763 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
18764
18765         * attribute.cs: Small regression fix: only convert the type if we
18766         the type is different, fixes System.Drawing build.
18767
18768 2004-04-27  Martin Baulig  <martin@ximian.com>
18769
18770         * attribute.cs (Attribute.Resolve): If we have a constant value
18771         for a named field or property, implicity convert it to the correct
18772         type.
18773
18774 2004-04-27  Raja R Harinath  <rharinath@novell.com>
18775
18776         * statement.cs (Block.Block): Implicit blocks share
18777         'child_variable_names' fields with parent blocks.
18778         (Block.AddChildVariableNames): Remove.
18779         (Block.AddVariable): Mark variable as "used by a child block" in
18780         every surrounding block.
18781         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
18782         been used in a child block, complain about violation of "Invariant
18783         meaning in blocks" rule.
18784         * cs-parser.jay (declare_local_variables): Don't use
18785         AddChildVariableNames.
18786         (foreach_statement): Don't create an implicit block: 'foreach'
18787         introduces a scope.
18788
18789 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
18790
18791         * convert.cs (ImplicitNumericConversion): 0 is also positive when
18792         converting from 0L to ulong.  Fixes 57522.
18793
18794 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
18795
18796         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
18797         derived class hides via 'new' keyword field from base class (test-242.cs).
18798         TODO: Handle this in the more general way.
18799         
18800         * class.cs (CheckBase): Ditto.
18801
18802 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
18803
18804         * decl.cs (caching_flags): New member for storing cached values
18805         as bit flags.
18806         (MemberCore.Flags): New enum where bit flags for caching_flags
18807         are defined.
18808         (MemberCore.cls_compliance): Moved to caching_flags.
18809         (DeclSpace.Created): Moved to caching_flags.
18810
18811         * class.cs: Use caching_flags instead of DeclSpace.Created
18812         
18813 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
18814
18815         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
18816         if we are only a derived class, not a nested class.
18817
18818         * typemanager.cs: Same as above, but do this at the MemberLookup
18819         level (used by field and methods, properties are handled in
18820         PropertyExpr).   Allow for the qualified access if we are a nested
18821         method. 
18822
18823 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
18824
18825         * class.cs: Refactoring.
18826         (IMethodData): New inteface; Holds links to parent members
18827         to avoid member duplication (reduced memory allocation).
18828         (Method): Implemented IMethodData interface.
18829         (PropertyBase): New inner classes for get/set methods.
18830         (PropertyBase.PropertyMethod): Implemented IMethodData interface
18831         (Event): New inner classes for add/remove methods.
18832         (Event.DelegateMethod): Implemented IMethodData interface.
18833
18834         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
18835         EmitContext (related to class.cs refactoring).
18836
18837 2004-04-21  Raja R Harinath  <rharinath@novell.com>
18838
18839         * delegate.cs (Delegate.VerifyApplicability): If the number of
18840         arguments are the same as the number of parameters, first try to
18841         verify applicability ignoring  any 'params' modifier on the last
18842         parameter.
18843         Fixes #56442.
18844
18845 2004-04-16  Raja R Harinath  <rharinath@novell.com>
18846
18847         * class.cs (TypeContainer.AddIndexer): Use
18848         'ExplicitInterfaceName' to determine if interface name was
18849         explicitly specified.  'InterfaceType' is not initialized at this time.
18850         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
18851         Indexers array is already in the required order.  Initialize
18852         'IndexerName' only if there are normal indexers.
18853         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
18854         (TypeContainer.Emit): Emit DefaultMember attribute only if
18855         IndexerName is initialized.
18856         Fixes #56300.
18857
18858 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
18859
18860         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
18861         Fixes #57007
18862
18863 2004-04-15  Raja R Harinath  <rharinath@novell.com>
18864
18865         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
18866         attributes.
18867         Fix for #56456.
18868
18869         * attribute.cs (Attribute.Resolve): Check for duplicate named
18870         attributes.
18871         Fix for #56463.
18872
18873 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
18874
18875         * iterators.cs (MarkYield): track whether we are in an exception,
18876         and generate code accordingly.  Use a temporary value to store the
18877         result for our state.
18878
18879         I had ignored a bit the interaction of try/catch with iterators
18880         since their behavior was not entirely obvious, but now it is
18881         possible to verify that our behavior is the same as MS .NET 2.0
18882
18883         Fixes 54814
18884
18885 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
18886
18887         * iterators.cs: Avoid creating temporaries if there is no work to
18888         do. 
18889
18890         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
18891         Enumerations, use TypeManager.EnumToUnderlying and call
18892         recursively. 
18893
18894         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
18895         bug #57013
18896
18897         (This.Emit): Use EmitContext.EmitThis to emit our
18898         instance variable.
18899
18900         (This.EmitAssign): Ditto.
18901
18902         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
18903         codepaths, we will move all the functionality into
18904         Mono.CSharp.This 
18905
18906         (FieldExpr.EmitAssign): Ditto.
18907
18908         This fixes several hidden bugs that I uncovered while doing a code
18909         review of this today.
18910
18911         * codegen.cs (EmitThis): reworked so the semantics are more clear
18912         and also support value types "this" instances.
18913
18914         * iterators.cs: Changed so that for iterators in value types, we
18915         do not pass the value type as a parameter.  
18916
18917         Initialization of the enumerator helpers is now done in the caller
18918         instead of passing the parameters to the constructors and having
18919         the constructor set the fields.
18920
18921         The fields have now `assembly' visibility instead of private.
18922
18923 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
18924
18925         * expression.cs (Argument.Resolve): Check if fields passed as ref
18926         or out are contained in a MarshalByRefObject.
18927
18928         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
18929         another compiler type.
18930
18931 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
18932
18933         * class.cs (Indexer.Define): use the new name checking method.
18934         Also, return false on an error.
18935         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
18936         (is_identifier_[start/part]_character): make static.
18937
18938 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
18939
18940         * expression.cs (Binary.ResolveOperator): Do no append strings
18941         twice: since we can be invoked more than once (array evaluation)
18942         on the same concatenation, take care of this here.  Based on a fix
18943         from Ben (bug #56454)
18944
18945 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
18946
18947         * codegen.cs: Fix another case where CS1548 must be reported (when 
18948         delay-sign isn't specified and no private is available #56564). Fix
18949         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
18950         error when MCS is used on the MS runtime and we need to delay-sign 
18951         (which seems unsupported by AssemblyBuilder - see #56621).
18952
18953 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
18954
18955         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
18956         (TypeManager.ComputeNamespaces): Faster implementation for
18957         Microsoft runtime.
18958
18959         * compiler.csproj: Updated AssemblyName to mcs.
18960
18961 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
18962
18963         * rootcontext.cs: Add new types to the boot resolution.
18964
18965         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
18966         MulticastDelegate is not allowed.
18967
18968         * typemanager.cs: Add new types to lookup: System.TypedReference
18969         and ArgIterator.
18970
18971         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
18972         check for TypedReference or ArgIterator, they are not allowed. 
18973
18974         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
18975         makes us properly catch 1510 in some conditions (see bug 56016 for
18976         details). 
18977
18978 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
18979
18980         * CryptoConvert.cs: update from corlib version
18981         with endian fixes.
18982
18983 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
18984
18985         * class.cs (Indexer.Define): Check indexername declaration
18986
18987 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
18988
18989         * attribute.cs (IsClsCompliant): Fixed problem with handling
18990         all three states (compliant, not-compliant, undetected).
18991
18992 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
18993
18994         * attribute.cs (Attribute): Location is now public.
18995         (Resolve): Store resolved arguments (pos_values) in attribute class.
18996         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
18997         (GetClsCompliantAttributeValue): New method that gets
18998         CLSCompliantAttribute value.
18999         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
19000         if exists else null.
19001         (AttributeTester): New class for CLS-Compliant verification routines.
19002
19003         * class.cs (Emit): Add CLS-Compliant verification.
19004         (Method.GetSignatureForError): Implemented.
19005         (Constructor.GetSignatureForError): Implemented
19006         (Constructor.HasCompliantArgs): Returns if constructor has
19007         CLS-Compliant arguments.
19008         (Constructor.Emit): Override.
19009         (Construcor.IsIdentifierClsCompliant): New method; For constructors
19010         is needed to test only parameters.
19011         (FieldBase.GetSignatureForError): Implemented.
19012         (TypeContainer): New member for storing base interfaces.
19013         (TypeContainer.FindMembers): Search in base interfaces too.
19014
19015         * codegen.cs (GetClsComplianceAttribute): New method that gets
19016         assembly or module CLSCompliantAttribute value.
19017         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
19018         for assembly.
19019         (ModuleClass.Emit): Add error 3012 test.
19020
19021         * const.cs (Emit): Override and call base for CLS-Compliant tests.
19022
19023         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
19024         state for all decl types.
19025         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
19026         if CLS-Compliant tests are required.
19027         (IsClsCompliaceRequired): New method. Analyze whether code
19028         must be CLS-Compliant.
19029         (IsExposedFromAssembly): New method. Returns true when MemberCore
19030         is exposed from assembly.
19031         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
19032         value or gets cached value.
19033         (HasClsCompliantAttribute): New method. Returns true if MemberCore
19034         is explicitly marked with CLSCompliantAttribute.
19035         (IsIdentifierClsCompliant): New abstract method. This method is
19036         used to testing error 3005.
19037         (IsIdentifierAndParamClsCompliant): New method. Common helper method
19038         for identifier and parameters CLS-Compliant testing.
19039         (VerifyClsCompliance): New method. The main virtual method for
19040         CLS-Compliant verifications.
19041         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
19042         null. I don't know why is null (too many public members !).
19043         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
19044         and get value of first CLSCompliantAttribute that found.
19045
19046         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
19047         (VerifyClsCompliance): Override and add extra tests.
19048
19049         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
19050         clscheck- disable CLS-Compliant verification event if assembly is has
19051         CLSCompliantAttribute(true).
19052
19053         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
19054         ApllyAttribute is now called in emit section as in the other cases.
19055         Possible future Emit integration.
19056         (IsIdentifierClsCompliant): New override.
19057         (VerifyClsCompliance): New override.
19058         (GetEnumeratorName): Returns full enum name.
19059
19060         * parameter.cs (GetSignatureForError): Implemented.
19061
19062         * report.cs (WarningData): New struct for Warning message information.
19063         (LocationOfPreviousError): New method.
19064         (Warning): New method. Reports warning based on the warning table.
19065         (Error_T): New method. Reports error based on the error table.
19066
19067         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
19068         verifications are done here.
19069
19070         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
19071
19072         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
19073         CLSCompliantAttribute.
19074         (all_imported_types): New member holds all imported types from other
19075         assemblies.
19076         (LoadAllImportedTypes): New method fills static table with exported types
19077         from all referenced assemblies.
19078         (Modules): New property returns all assembly modules.
19079
19080 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
19081
19082         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
19083         throwing a parser error.
19084
19085         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
19086         which removes the hardcoded get_/set_ prefixes for properties, as
19087         IL allows for the properties to be named something else.  
19088
19089         Bug #56013
19090
19091         * expression.cs: Do not override operand before we know if it is
19092         non-null.  Fix 56207
19093
19094 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19095
19096         * typemanager.cs: support for pinned variables.
19097
19098 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19099
19100         * decl.cs, typemanager.cs: Avoid using an arraylist
19101         as a buffer if there is only one result set.
19102
19103 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19104
19105         * expression.cs: Make sure you cant call a static method
19106         with an instance expression, bug #56174.
19107
19108 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
19109
19110         * class.cs (IsDuplicateImplementation): Improve error reporting to
19111         flag 663 (method only differs in parameter modifier).
19112
19113         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
19114         in preprocessor directives.
19115
19116         * location.cs (LookupFile): Allow for the empty path.
19117
19118         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
19119         better approach for some of that patch, but its failing with the
19120         CharSet enumeration.  For now try/catch will do.
19121
19122         * typemanager.cs: Do not crash if a struct does not have fields.
19123         Fixes 56150.
19124
19125 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19126
19127         * expression.cs: cs0213, cant fix a fixed expression.
19128         fixes 50231.
19129
19130 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19131
19132         * cs-parser.jay: detect invalid embeded statements gracefully.
19133         bug #51113.
19134
19135 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19136
19137         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
19138         As a regex:
19139         s/
19140         the invocation type may not be a subclass of the tye of the item/
19141         The type of the item must be a subclass of the invocation item.
19142         /g
19143
19144         Fixes bug #50820.
19145
19146 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
19147
19148         * attribute.cs: Added methods to get a string and a bool from an
19149         attribute. Required to information from AssemblyKeyFileAttribute,
19150         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
19151         * codegen.cs: Modified AssemblyName creation to include support for
19152         strongnames. Catch additional exceptions to report them as CS1548.
19153         * compiler.csproj: Updated include CryptoConvert.cs.
19154         * compiler.csproj.user: Removed file - user specific configuration.
19155         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
19156         Mono.Security assembly. The original class is maintained and tested in
19157         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
19158         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
19159         like CSC 8.0 (C# v2) supports.
19160         * Makefile: Added CryptoConvert.cs to mcs sources.
19161         * rootcontext.cs: Added new options for strongnames.
19162
19163 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
19164
19165         * driver.cs: For --expect-error, report error code `2'
19166         if the program compiled with no errors, error code `1' if
19167         it compiled with an error other than the one expected.
19168
19169 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
19170
19171         * compiler.csproj: Updated for Visual Studio .NET 2003.
19172         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
19173         * compiler.sln: Updated for Visual Studio .NET 2003.
19174
19175 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
19176
19177         * expression.cs: Fix bug #47234. We basically need to apply the
19178         rule that we prefer the conversion of null to a reference type
19179         when faced with a conversion to 'object' (csc behaviour).
19180
19181 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19182
19183         * statement.cs: Shorter form for foreach, eliminates
19184         a local variable. r=Martin.
19185
19186 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19187
19188         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
19189         checks if we can use brtrue/brfalse to test for 0.
19190         * expression.cs: use the above in the test for using brtrue/brfalse.
19191         cleanup code a bit.
19192
19193 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19194
19195         * expression.cs: Rewrite string concat stuff. Benefits:
19196
19197         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
19198         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
19199         rather than a concat chain.
19200
19201         * typemanager.cs: Add lookups for more concat overloads.
19202
19203 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19204
19205         * expression.cs: Emit shorter il code for array init.
19206
19207         newarr
19208         dup
19209         // set 1
19210
19211         // set 2
19212
19213         newarr
19214         stloc.x
19215
19216         ldloc.x
19217         // set 1
19218
19219         ldloc.x
19220         // set 2
19221
19222 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
19223
19224         * statement.cs: Before, two switch blocks would be merged if the
19225         total size of the blocks (end_item - begin_item + 1) was less than
19226         two times the combined sizes of the blocks.
19227
19228         Now, it will only merge if after the merge at least half of the
19229         slots are filled.
19230
19231         fixes 55885.
19232
19233 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
19234
19235         * class.cs : csc build fix for GetMethods(). See bug #52503.
19236
19237 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
19238
19239         * expression.cs: Make sure fp comparisons work with NaN.
19240         This fixes bug #54303. Mig approved this patch a long
19241         time ago, but we were not able to test b/c the runtime
19242         had a related bug.
19243
19244 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
19245
19246         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
19247
19248 2004-03-19  Martin Baulig  <martin@ximian.com>
19249
19250         * class.cs (MemberCore.IsDuplicateImplementation): Report the
19251         error here and not in our caller.
19252
19253 2004-03-19  Martin Baulig  <martin@ximian.com>
19254
19255         * interface.cs: Completely killed this file.
19256         (Interface): We're now a TypeContainer and live in class.cs.
19257
19258         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
19259         argument; we're now also called for interfaces.
19260         (TypeContainer.DefineMembers): Allow this method being called
19261         multiple times.
19262         (TypeContainer.GetMethods): New public method; formerly known as
19263         Interface.GetMethod().  This is used by PendingImplementation.
19264         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
19265         it's now private and non-static.
19266         (Interface): Moved this here; it's now implemented similar to
19267         Class and Struct.
19268         (Method, Property, Event, Indexer): Added `bool is_interface'
19269         argument to their .ctor's.
19270         (MemberBase.IsInterface): New public field.
19271
19272         * cs-parser.jay: Create normal Method, Property, Event, Indexer
19273         instances instead of InterfaceMethod, InterfaceProperty, etc.
19274         (opt_interface_base): Removed; we now use `opt_class_base' instead.
19275         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
19276
19277 2004-03-19  Martin Baulig  <martin@ximian.com>
19278
19279         * class.cs (MethodCore.IsDuplicateImplementation): New private
19280         method which does the CS0111 checking.
19281         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
19282         Use IsDuplicateImplementation().
19283
19284 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
19285
19286         * decl.cs (FindMemberToOverride): New method to find the correct
19287         method or property to override in the base class.
19288         * class.cs
19289             - Make Method/Property use the above method to find the
19290               version in the base class.
19291             - Remove the InheritableMemberSignatureCompare as it is now
19292               dead code.
19293
19294         This patch makes large code bases much faster to compile, as it is
19295         O(n) rather than O(n^2) to do this validation.
19296
19297         Also, it fixes bug 52458 which is that nested classes are not
19298         taken into account when finding the base class member.
19299
19300         Reviewed/Approved by Martin.
19301
19302 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
19303
19304         * interface.cs: In all interface classes removed redundant
19305         member initialization.
19306
19307 2004-03-16  Martin Baulig  <martin@ximian.com>
19308
19309         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
19310
19311 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
19312
19313         * decl.cs (DefineTypeAndParents): New helper method to define a
19314         type's containers before the type itself is defined;  This is a
19315         bug exposed by the recent changes to Windows.Forms when an
19316         implemented interface was defined inside a class that had not been
19317         built yet.   
19318
19319         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
19320
19321         (Check): Loop correctly to report errors modifiers
19322         (UNSAFE was not in the loop, since it was the same as TOP).
19323
19324         * interface.cs: Every interface member now takes a ModFlags,
19325         instead of a "is_new" bool, which we set on the base MemberCore. 
19326
19327         Every place where we called "UnsafeOk" in the interface, now we
19328         call the proper member (InterfaceMethod.UnsafeOK) instead to get
19329         the unsafe settings from the member declaration instead of the
19330         container interface. 
19331
19332         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
19333
19334         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
19335         `set_indexer_name' to the pending bits (one per type).
19336
19337         We fixed a bug today that was picking the wrong method to
19338         override, since for properties the existing InterfaceMethod code
19339         basically ignored the method name.  Now we make sure that the
19340         method name is one of the valid indexer names.
19341
19342 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
19343  
19344         * support.cs (SeekableStreamReader): Keep track of stream byte
19345         positions and don't mix them with character offsets to the buffer.
19346
19347         Patch from Gustavo Giráldez
19348
19349 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
19350
19351         * interface.cs (InterfaceSetGetBase): Removed double member
19352         initialization, base class does it as well.
19353
19354 2004-03-13  Martin Baulig  <martin@ximian.com>
19355
19356         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
19357         when compiling corlib.
19358
19359 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
19360
19361         * convert.cs (ExplicitConversion): We were reporting an error on
19362         certain conversions (object_type source to a value type, when the
19363         expression was `null') before we had a chance to pass it through
19364         the user defined conversions.
19365
19366         * driver.cs: Replace / and \ in resource specifications to dots.
19367         Fixes 50752
19368
19369         * class.cs: Add check for duplicate operators.  Fixes 52477
19370
19371 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
19372
19373         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
19374         that are in the middle of the statements, not only at the end.
19375         Fixes #54987
19376
19377         * class.cs (TypeContainer.AddField): No longer set the
19378         `HaveStaticConstructor' flag, now we call it
19379         `UserDefineStaticConstructor' to diferentiate the slightly
19380         semantic difference.
19381
19382         The situation is that we were not adding BeforeFieldInit (from
19383         Modifiers.TypeAttr) to classes that could have it.
19384         BeforeFieldInit should be set to classes that have no static
19385         constructor. 
19386
19387         See:
19388
19389         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
19390
19391         And most importantly Zoltan's comment:
19392
19393         http://bugzilla.ximian.com/show_bug.cgi?id=44229
19394
19395         "I think beforefieldinit means 'it's ok to initialize the type sometime 
19396          before its static fields are used', i.e. initialization does not need
19397          to be triggered by the first access to the type. Setting this flag
19398          helps the JIT to compile better code, since it can run the static
19399          constructor at JIT time, and does not need to generate code to call it
19400          (possibly lots of times) at runtime. Unfortunately, mcs does not set
19401          this flag for lots of classes like String. 
19402          
19403          csc sets this flag if the type does not have an explicit static 
19404          constructor. The reasoning seems to be that if there are only static
19405          initalizers for a type, and no static constructor, then the programmer
19406          does not care when this initialization happens, so beforefieldinit
19407          can be used.
19408          
19409          This bug prevents the AOT compiler from being usable, since it 
19410          generates so many calls to mono_runtime_class_init that the AOT code
19411          is much slower than the JITted code. The JITted code is faster, 
19412          because it does not generate these calls if the vtable is type is
19413          already initialized, which is true in the majority of cases. But the
19414          AOT compiler can't do this."
19415
19416 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
19417
19418         * class.cs (MethodData.Emit): Refactor the code so symbolic
19419         information is generated for destructors;  For some reasons we
19420         were taking a code path that did not generate symbolic information
19421         before. 
19422
19423 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
19424
19425         * class.cs: Create a Constructor.CheckBase method that
19426         takes care of all validation type code. The method
19427         contains some code that was moved from Define.
19428
19429         It also includes new code that checks for duplicate ctors.
19430         This fixes bug #55148.
19431
19432 2004-03-09  Joshua Tauberer <tauberer@for.net>
19433
19434         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
19435         a { ... }-style array creation invokes EmitStaticInitializers
19436         which is not good for reference-type arrays.  String, decimal
19437         and now null constants (NullCast) are not counted toward
19438         static initializers.
19439
19440 2004-03-05  Martin Baulig  <martin@ximian.com>
19441
19442         * location.cs (SourceFile.HasLineDirective): New public field;
19443         specifies whether the file contains or is referenced by a "#line"
19444         directive.
19445         (Location.DefineSymbolDocuments): Ignore source files which
19446         either contain or are referenced by a "#line" directive.        
19447
19448 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
19449
19450         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
19451         direct access to our parent, so check the method inline there.
19452
19453 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
19454
19455         * expression.cs (Invocation.EmitCall): Miguel's last commit
19456         caused a regression. If you had:
19457
19458             T t = null;
19459             t.Foo ();
19460
19461         In Foo the implict this would be null.
19462
19463 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
19464
19465         * expression.cs (Invocation.EmitCall): If the method is not
19466         virtual, do not emit a CallVirt to it, use Call.
19467
19468         * typemanager.cs (GetFullNameSignature): Improve the method to
19469         cope with ".ctor" and replace it with the type name.
19470
19471         * class.cs (ConstructorInitializer.Resolve): Now the method takes
19472         as an argument the ConstructorBuilder where it is being defined,
19473         to catch the recursive constructor invocations.
19474
19475 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
19476
19477         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
19478         routines to check if a type is an enumerable/enumerator allow
19479         classes that implement the IEnumerable or IEnumerator interfaces.
19480
19481         * class.cs (Property, Operator): Implement IIteratorContainer, and
19482         implement SetYields.
19483
19484         (Property.Define): Do the block swapping for get_methods in the
19485         context of iterators.   We need to check if Properties also
19486         include indexers or not.
19487
19488         (Operator): Assign the Block before invoking the
19489         OperatorMethod.Define, so we can trigger the Iterator code
19490         replacement. 
19491
19492         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
19493         Property and Operator classes are not created when we parse the
19494         declarator but until we have the block completed, so we use a
19495         singleton SimpleIteratorContainer.Simple to flag whether the
19496         SetYields has been invoked.
19497
19498         We propagate this setting then to the Property or the Operator to
19499         allow the `yield' to function.
19500
19501 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
19502
19503         * codegen.cs: Implemented attribute support for modules.
19504         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
19505         Assembly/Module functionality.
19506
19507         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
19508         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
19509         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
19510
19511 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
19512
19513         * interface.cs (FindMembers): The operation is performed on all base
19514         interfaces and not only on the first. It is required for future CLS Compliance patch.
19515
19516 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
19517
19518         * statement.cs, codegen.cs:
19519         This patch deals with patterns such as:
19520
19521         public class List : IEnumerable {
19522
19523                 public MyEnumerator GetEnumerator () {
19524                         return new MyEnumerator(this);
19525                 }
19526
19527                 IEnumerator IEnumerable.GetEnumerator () {
19528                         ...
19529                 }
19530                 
19531                 public struct MyEnumerator : IEnumerator {
19532                         ...
19533                 }
19534         }
19535
19536         Before, there were a few things we did wrong:
19537         1) we would emit callvirt on a struct, which is illegal
19538         2) we emited ldarg when we needed to emit ldarga
19539         3) we would mistakenly call the interface methods on an enumerator
19540         type that derived from IEnumerator and was in another assembly. For example:
19541
19542         public class MyEnumerator : IEnumerator
19543
19544         Would have the interface methods called, even if there were public impls of the
19545         method. In a struct, this lead to invalid IL code.
19546
19547 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
19548
19549         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
19550           renamed to Emit.
19551
19552         * delegate.cs (Define): Fixed crash when delegate type is undefined.
19553
19554 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
19555
19556         * cs-parser.jay: Fix small regression: we were not testing V2
19557         compiler features correctly.
19558
19559         * interface.cs: If the emit context is null, then create one
19560
19561 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
19562
19563         * decl.cs (GetSignatureForError): New virtual method to get full name
19564           for error messages.
19565
19566         * attribute.cs (IAttributeSupport): New interface for attribute setting.
19567           Now it is possible to rewrite ApplyAttributes method to be less if/else.
19568
19569         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
19570           Duplicated members and code in these classes has been removed.
19571           Better encapsulation in these classes.
19572
19573 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
19574
19575         * assign.cs (Assign.DoResolve): When dealing with compound
19576         assignments, there is a new rule in ECMA C# 2.4 (might have been
19577         there before, but it is documented here) that states that in:
19578
19579         a op= b;
19580
19581         If b is of type int, and the `op' is a shift-operator, then the
19582         above is evaluated as:
19583
19584         a = (int) a op b 
19585
19586         * expression.cs (Binary.ResolveOperator): Instead of testing for
19587         int/uint/long/ulong, try to implicitly convert to any of those
19588         types and use that in pointer arithmetic.
19589
19590         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
19591         method to print information for from the type, not from the
19592         null-method we were given.
19593
19594 2004-02-01  Duncan Mak  <duncan@ximian.com>
19595
19596         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
19597         parsing for cmd, fixes bug #53694.
19598
19599 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
19600
19601         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
19602         in the member name duplication tests. Property and operator name duplication
19603         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
19604
19605 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
19606
19607         * interface.cs (PopulateMethod): Fixed crash when interface method
19608         returns not existing type (error test cs0246-3.cs).
19609
19610 2004-02-02  Ravi Pratap M <ravi@ximian.com>
19611
19612         * cs-parser.jay (interface_accessors): Re-write actions to also
19613         store attributes attached to get and set methods. Fix spelling
19614         while at it.
19615
19616         (inteface_property_declaration): Modify accordingly.
19617
19618         (InterfaceAccessorInfo): New helper class to store information to pass
19619         around between rules that use interface_accessors.
19620
19621         * interface.cs (Emit): Apply attributes on the get and set
19622         accessors of properties and indexers too.
19623
19624         * attribute.cs (ApplyAttributes): Modify accordingly to use the
19625         right MethodBuilder when applying attributes to the get and set accessors.
19626
19627 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
19628
19629         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
19630
19631 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
19632
19633         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
19634
19635 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
19636
19637         * cs-parser.jay: Remove YIELD token, instead use the new grammar
19638         changes that treat `yield' specially when present before `break'
19639         or `return' tokens.
19640
19641         * cs-tokenizer.cs: yield is no longer a keyword.
19642
19643 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
19644
19645         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
19646         setting for default constructors.
19647         For default constructors are almost every time set wrong Modifier. The
19648         generated IL code has been alright. But inside mcs this values was
19649         wrong and this was reason why several of my CLS Compliance tests
19650         failed.
19651
19652 2004-01-22  Martin Baulig  <martin@ximian.com>
19653
19654         * cs-parser.jay (namespace_or_type_name): Return an Expression,
19655         not a QualifiedIdentifier.  This is what `type_name_expression'
19656         was previously doing.
19657         (type_name_expression): Removed; the code is now in
19658         `namespace_or_type_name'.
19659         (qualified_identifier): Removed, use `namespace_or_type_name'
19660         instead.
19661         (QualifiedIdentifier): Removed this class.      
19662
19663 2004-01-22  Martin Baulig  <martin@ximian.com>
19664
19665         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
19666         not a string as alias name.
19667
19668 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
19669
19670         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
19671         #52730 bug, and instead compute correctly the need to use a
19672         temporary variable when requesting an address based on the
19673         static/instace modified of the field and the constructor.
19674  
19675 2004-01-21  Martin Baulig  <martin@ximian.com>
19676
19677         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
19678         class and namespace before looking up aliases.  Fixes #52517.
19679
19680 2004-01-21  Martin Baulig  <martin@ximian.com>
19681
19682         * flowanalysis.cs (UsageVector.Merge): Allow variables being
19683         assinged in a 'try'; fixes exception4.cs.
19684
19685 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19686         * class.cs : Implemented parameter-less constructor for TypeContainer
19687
19688         * decl.cs: Attributes are now stored here. New property OptAttributes
19689
19690         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
19691
19692         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
19693
19694 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19695
19696         * typemanager.cs (CSharpSignature): Now reports also inner class name.
19697           (CSharpSignature): New method for indexer and property signature.
19698
19699 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19700
19701         * pending.cs (IsVirtualFilter): Faster implementation.
19702
19703 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19704
19705         * typemanager.cs: Avoid inclusion of same assembly more than once.
19706
19707 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19708
19709         * cs-parser.jay: Fixed problem where the last assembly attribute
19710           has been applied also to following declaration (class, struct, etc.)
19711           
19712 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19713
19714         * class.cs: Added error CS0538, CS0539 reporting.
19715         Fixed crash on Microsoft runtime when field type is void.
19716
19717         * cs-parser.jay: Added error CS0537 reporting.
19718
19719         * pending.cs: Added error CS0535 reporting.
19720         Improved error report for errors CS0536, CS0534.
19721
19722 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
19723
19724         Merge a few bits from the Anonymous Method MCS tree.
19725
19726         * statement.cs (ToplevelBlock): New class for toplevel methods,
19727         will hold anonymous methods, lifted variables.
19728
19729         * cs-parser.jay: Create toplevel blocks for delegates and for
19730         regular blocks of code. 
19731
19732 2004-01-20  Martin Baulig  <martin@ximian.com>
19733
19734         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
19735         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
19736         and `NeedExplicitReturn'; added `IsLastStatement'.
19737         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
19738         have a `ReturnLabel' or we're not unreachable.
19739
19740         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
19741         child's reachability; don't just override ours with it.  Fixes
19742         #58058 (lluis's example).
19743         (FlowBranching): Added public InTryOrCatch(), InCatch(),
19744         InFinally(), InLoop(), InSwitch() and
19745         BreakCrossesTryCatchBoundary() methods.
19746
19747         * statement.cs (Return): Do all error checking in Resolve().
19748         Unless we are the last statement in a top-level block, always
19749         create a return label and jump to it.
19750         (Break, Continue): Do all error checking in Resolve(); also make
19751         sure we aren't leaving a `finally'.
19752         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
19753         statement in a top-level block.
19754         (Block.Flags): Added `IsDestructor'.
19755         (Block.IsDestructor): New public property.
19756
19757 2004-01-20  Martin Baulig  <martin@ximian.com>
19758
19759         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
19760
19761 2004-01-20  Martin Baulig  <martin@ximian.com>
19762
19763         * statement.cs (Statement.ResolveUnreachable): New public method.
19764         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
19765         (Block.Resolve): Resolve unreachable statements.
19766
19767 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
19768
19769         * expression.cs: We need to fix the case where we do
19770         not have a temp variable here.
19771
19772         * assign.cs: Only expression compound assignments need
19773         temporary variables.
19774
19775 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
19776
19777         * flowanalysis.cs: Reduce memory allocation in a few ways:
19778           - A block with no variables should not allocate a bit
19779             vector for itself.
19780           - A method with no out parameters does not need any tracking
19781             for assignment of the parameters, so we need not allocate
19782             any data for it.
19783           - The arrays:
19784                 public readonly Type[] VariableTypes;
19785                 public readonly string[] VariableNames;
19786             Are redundant. The data is already stored in the variable
19787             map, so we need not allocate another array for it.
19788           - We need to add alot of checks for if (params | locals) == null
19789             due to the first two changes.
19790
19791 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
19792
19793         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
19794         implement IMemoryLocation, we store a copy on a local variable and
19795         take the address of it.  Patch from Benjamin Jemlich
19796
19797         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
19798         to use a special "type_name_expression" rule which reduces the
19799         number of "QualifiedIdentifier" classes created, and instead
19800         directly creates MemberAccess expressions.
19801
19802 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
19803
19804         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
19805         that fixes #52853.  Null literal assignment to ValueType
19806
19807         * class.cs (MethodData.Emit): Instead of checking the name of the
19808         method to determine if its a destructor, create a new derived
19809         class from Method called Destructor, and test for that.  
19810
19811         * cs-parser.jay: Create a Destructor object instead of a Method.  
19812
19813         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
19814
19815         Fixes: 52933
19816
19817 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
19818
19819         * expression.cs (Binary.ResolveOperator): Perform an implicit
19820         conversion from MethodGroups to their delegate types on the
19821         Addition operation.
19822
19823         * delegate.cs: Introduce a new class DelegateCreation that is the
19824         base class for `NewDelegate' and `ImplicitDelegateCreation',
19825         factor some code in here.
19826
19827         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
19828         conversion from MethodGroups to compatible delegate types. 
19829
19830         * ecore.cs (Expression.Resolve): Do not flag error 654
19831         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
19832         we allow conversions from MethodGroups to delegate types now.
19833
19834         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
19835         assignments in v2 either.
19836
19837 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
19838
19839         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
19840         static read-only fields in ctors.
19841
19842         Applied patch from Benjamin Jemlich 
19843
19844         * expression.cs (UnaryMutator): Avoid leaking local variables. 
19845
19846 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
19847
19848         * cs-tokenizer.cs (IsCastToken): Allow the various native types
19849         here to return true, as they can be used like this:
19850
19851                 (XXX) int.MEMBER ()
19852
19853         Fixed 49836 and all the other dups
19854
19855 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
19856
19857         * driver.cs: Implement /win32res and /win32icon.
19858
19859 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
19860
19861         * cs-parser.jay: Add a rule to improve error handling for the
19862         common mistake of placing modifiers after the type.
19863
19864 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
19865
19866         * cs-parser.jay (interface_event_declaration): Catch
19867         initialization of events on interfaces, and report cs0068
19868
19869         * cs-parser.jay (interface_event_declaration): Catch
19870         initialization of events. 
19871
19872         * ecore.cs: Better report missing constructors.
19873
19874         * expression.cs (Binary.ResolveOperator): My previous bug fix had
19875         the error reporting done in the wrong place.  Fix.
19876
19877         * expression.cs (Binary.ResolveOperator): Catch the 
19878         operator + (E x, E y) error earlier, and later allow for implicit
19879         conversions in operator +/- (E e, U x) from U to the underlying
19880         type of E.
19881
19882         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
19883         52596, if the container class is abstract, the default constructor
19884         is protected otherwise its public (before, we were always public).
19885
19886         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
19887         fixed statement.
19888
19889         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
19890         Jemlich that fixes bug #52597, MCS was generating invalid code for
19891         idisposable structs.   Thanks to Ben for following up with this
19892         bug as well.
19893
19894 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
19895
19896         * driver.cs: Allow assemblies without code to be generated, fixes
19897         52230.
19898
19899 2004-01-07  Nick Drochak <ndrochak@gol.com>
19900
19901         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
19902
19903 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
19904
19905         * cs-parser.jay: Add rules to improve error reporting if fields or
19906         methods are declared at the namespace level (error 116)
19907
19908         * Add rules to catch event add/remove
19909
19910 2004-01-04  David Sheldon <dave-mono@earth.li>
19911
19912   * expression.cs: Added matching ")" to error message for 
19913   CS0077
19914
19915 2004-01-03 Todd Berman <tberman@gentoo.org>
19916
19917         * ecore.cs, attribute.cs:
19918         Applying fix from #52429.
19919
19920 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
19921
19922         * ecore.cs, expression.cs, statement.cs:
19923         Total rewrite of how we handle branching. We
19924         now handle complex boolean expressions with fewer
19925         jumps. As well if (x == 0) no longer emits a ceq.
19926
19927         if (x is Foo) is much faster now, because we generate
19928         better code.
19929
19930         Overall, we get a pretty big improvement on our benchmark
19931         tests. The code we generate is smaller and more readable.
19932
19933         I did a full two-stage bootstrap. The patch was reviewed
19934         by Martin and Miguel.
19935
19936 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
19937
19938         * cs-parser.jay: Make primary_expression not take a QI.
19939         we dont need this because the member_access rule covers
19940         us here. So we replace the rule with just IDENTIFIER.
19941
19942         This has two good effects. First, we remove a s/r conflict.
19943         Second, we allocate many fewer QualifiedIdentifier objects.
19944
19945 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
19946
19947         * attribute.cs: Handle MarshalAs attributes as pseudo, and
19948         set the correct information via SRE. This prevents
19949         hanging on the MS runtime. Fixes #29374.
19950
19951 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
19952
19953         * convert.cs: correctly handle conversions to value types
19954         from Enum and ValueType as unboxing conversions.
19955
19956         Fixes bug #52569. Patch by Benjamin Jemlich.
19957
19958 2004-01-02  Ravi Pratap  <ravi@ximian.com>
19959
19960         * expression.cs (BetterConversion): Prefer int -> uint
19961         over int -> ulong (csc's behaviour). This fixed bug #52046.
19962
19963 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
19964
19965         * decl.cs (MemberCache.FindMembers): now returns a
19966         MemberInfo [].
19967
19968         * typemanager.cs: In general, go with with ^^.
19969         (CopyNewMethods): take an IList.
19970         (RealMemberLookup): Only allocate an arraylist
19971         if we copy from two sets of methods.
19972
19973         This change basically does two things:
19974         1) Fewer array lists allocated due to CopyNewMethods.
19975         2) the explicit cast in MemberList costed ALOT.
19976
19977 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
19978
19979         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
19980         a hashtable to avoid needless string allocations when an identifier is
19981         used more than once (the common case).
19982
19983 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
19984
19985         * pending.cs: MS's TypeBuilder.GetInterfaces ()
19986         is broken, it will not return anything. So, we
19987         have to use the information we have in mcs to
19988         do the task.
19989
19990         * typemanager.cs: Add a cache for GetInterfaces,
19991         since this will now be used more often (due to ^^)
19992
19993         (GetExplicitInterfaces) New method that gets the
19994         declared, not effective, interfaces on a type
19995         builder (eg, if you have interface IFoo, interface
19996         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
19997         { IBar }.
19998
19999         This patch makes MCS able to bootstrap itself on
20000         Windows again.
20001
20002 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
20003
20004         * expression.cs: Remove the Nop's that Miguel put
20005         in by mistake.
20006
20007 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
20008
20009         * report.cs, codegen.cs: Give the real stack trace to
20010         the error when an exception is thrown.
20011
20012 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
20013
20014         * decl.cs: only allocate hashtables for ifaces if 
20015         it is an iface!
20016
20017 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
20018
20019         * expression.cs: fix the error from cs0121-2.cs
20020         (a parent interface has two child interfaces that
20021         have a function with the same name and 0 params
20022         and the function is called through the parent).
20023
20024 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
20025
20026         * class.cs, rootcontext.cs, typmanager.cs: do not
20027         leak pointers.
20028
20029 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
20030
20031         * codegen.cs: remove stack for the ec flow branching.
20032         It is already a linked list, so no need.
20033
20034 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
20035
20036         * Makefile: Allow custom profiler here.
20037
20038 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
20039
20040         * typemanager.cs (LookupType):
20041           - Use a static char [], because split takes
20042             a param array for args, so it was allocating
20043             every time.
20044           - Do not store true in a hashtable, it boxes.
20045
20046 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
20047
20048         * flowanalysis.cs: bytify common enums.
20049
20050 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20051
20052         * modifiers.cs: Add a new set of flags for the
20053         flags allowed on explicit interface impls.
20054         * cs-parser.jay: catch the use of modifiers in
20055         interfaces correctly.
20056         * class.cs: catch private void IFoo.Blah ().
20057
20058         All related to bug #50572.
20059
20060 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20061
20062         * decl.cs: Rewrite the consistant accessability checking.
20063         Accessability is not linear, it must be implemented in
20064         a tableish way. Fixes #49704.
20065
20066 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20067
20068         * expression.cs: Handle negation in a checked context.
20069         We must use subtraction from zero. Fixes #38674.
20070
20071 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
20072
20073         * class.cs: Ignore static void main in DLLs.
20074         * rootcontext.cs: Handle the target type here,
20075         since we are have to access it from class.cs
20076         * driver.cs: account for the above.
20077
20078 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
20079
20080         * report.cs: Give line numbers and files if available.
20081
20082 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
20083
20084         * driver.cs: Implement /addmodule.
20085
20086         * typemanager.cs:  Change 'modules' field so it now contains Modules not
20087         ModuleBuilders.
20088
20089 2003-12-20  Martin Baulig  <martin@ximian.com>
20090
20091         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
20092         (FieldBase.IsAssigned): Removed this field.
20093         (FieldBase.SetAssigned): New public method.
20094         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
20095
20096 2003-12-20  Martin Baulig  <martin@ximian.com>
20097
20098         * expression.cs (LocalVariableReference.DoResolve): Don't set
20099         `vi.Used' if we're called from DoResolveLValue().
20100
20101         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
20102         returns the usage vector it just merged into the current one -
20103         pass this one to UsageWarning().
20104         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
20105         of the `EmitContext', don't call this recursively on our children.
20106
20107 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
20108
20109         * driver.cs: Implement /target:module.
20110
20111 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
20112
20113         * support.cs (CharArrayHashtable): New helper class.
20114
20115         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
20116         char arrays, not strings, so we can avoid creating a string in
20117         consume_identifier if the identifier is a keyword.
20118
20119 2003-12-16  Martin Baulig  <martin@ximian.com>
20120
20121         * statement.cs (LocalInfo.Assigned): Removed this property.
20122         (LocalInfo.Flags): Removed `Assigned'.
20123         (LocalInfo.IsAssigned): New public method; takes the EmitContext
20124         and uses flow analysis.
20125         (Block.UsageWarning): Made this method private.
20126         (Block.Resolve): Call UsageWarning() if appropriate.
20127
20128         * expression.cs (LocalVariableReference.DoResolve): Always set
20129         LocalInfo.Used here.
20130
20131 2003-12-13  Martin Baulig  <martin@ximian.com>
20132
20133         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
20134         any value here; we're now using flow analysis to figure out
20135         whether a statement/block returns a value.
20136
20137 2003-12-13  Martin Baulig  <martin@ximian.com>
20138
20139         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
20140         working again.
20141         (FlowBranching.MergeFinally): Don't call
20142         `branching.CheckOutParameters()' here, this is called in
20143         MergeTopBlock().
20144         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
20145         when adding the `finally' vector.       
20146
20147 2003-12-13  Martin Baulig  <martin@ximian.com>
20148
20149         * flowanalysis.cs
20150         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
20151         actually work and also fix #48962.
20152
20153 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
20154
20155         * decl.cs: Do not check System.Object for nested types,
20156         since we know it does not have any. Big bang for buck:
20157
20158         BEFORE:
20159            Run 1:   8.35 seconds
20160            Run 2:   8.32 seconds
20161            corlib:  17.99 seconds
20162         AFTER:
20163            Run 1:   8.17 seconds
20164            Run 2:   8.17 seconds
20165            corlib:  17.39 seconds
20166
20167 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
20168
20169         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
20170         time we are returning 0 members, so we save alot here.
20171
20172 2003-12-11  Martin Baulig  <martin@ximian.com>
20173
20174         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
20175         `MergeChild()', also just take the `FlowBranching' as argument;
20176         call Merge() on it and return the result.
20177         (FlowBranching.Merge): We don't need to do anything if we just
20178         have one sibling.
20179
20180 2003-12-11  Martin Baulig  <martin@ximian.com>
20181
20182         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
20183         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
20184         Maurer for this idea.
20185
20186 2003-12-11  Martin Baulig  <martin@ximian.com>
20187
20188         * flowanalysis.cs (MergeResult): This class is now gone; we now
20189         use the `UsageVector' for this.  The reason for this is that if a
20190         branching just has one sibling, we don't need to "merge" them at
20191         all - that's the next step to do.
20192         (FlowBranching.Merge): We now return a `UsageVector' instead of a
20193         `MergeResult'.
20194
20195 2003-12-11  Martin Baulig  <martin@ximian.com>
20196
20197         Reworked flow analyis and made it more precise and bug-free.  The
20198         most important change is that we're now using a special `Reachability'
20199         class instead of having "magic" meanings of `FlowReturns'.  I'll
20200         do some more cleanups and optimizations and also add some more
20201         documentation this week.
20202
20203         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
20204         largely reworked this class.
20205         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
20206         the new `Reachability' class instead of having "magic" values here.
20207         (FlowBranching): We're now using an instance of `Reachability'
20208         instead of having separate `Returns', `Breaks' etc. fields.
20209
20210         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
20211         based on flow analysis; ignore the return value of block.Emit ().
20212
20213 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
20214
20215         * driver.cs typemanager.cs: Find the mono extensions to corlib even
20216         if they are private.
20217
20218 2003-12-09  Martin Baulig  <martin@ximian.com>
20219
20220         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
20221         call them directly on the UsageVector.
20222
20223 2003-12-09  Martin Baulig  <martin@ximian.com>
20224
20225         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
20226         Changed return type from `FlowReturns' to `Reachability'.
20227
20228 2003-12-09  Martin Baulig  <martin@ximian.com>
20229
20230         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
20231         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
20232         `Reachable' fields with a single `Reachability' one.
20233
20234 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20235
20236         * class.cs (FindMembers): Remove foreach's.
20237
20238         Bootstrap times:
20239
20240         BEFORE
20241                 Run 1:   8.74 seconds
20242                 Run 2:   8.71 seconds
20243
20244         AFTER
20245                 Run 1:   8.64 seconds
20246                 Run 2:   8.58 seconds
20247
20248
20249 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20250
20251         * cs-parser.jay:
20252         * gen-treedump.cs:
20253         * statement.cs:
20254         This patch does a few things:
20255                 1. EmptyStatement is now a singleton, so it is never reallocated.
20256                 2. All blah is EmptyStatement constructs have been changed to
20257                    blah == EmptyStatement.Value, which is much faster and valid
20258                    now that EmptyStatement is a singleton.
20259                 3. When resolving a block, rather than allocating a new array for
20260                    the non-empty statements, empty statements are replaced with
20261                    EmptyStatement.Value
20262                 4. Some recursive functions have been made non-recursive.
20263         Mainly the performance impact is from (3), however (1) and (2) are needed for
20264         this to work. (4) does not make a big difference in normal situations, however
20265         it makes the profile look saner.
20266
20267         Bootstrap times:
20268
20269         BEFORE
20270         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
20271         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
20272         Total memory allocated: 56397 KB
20273
20274         AFTER
20275         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
20276         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
20277         Total memory allocated: 55666 KB
20278
20279 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20280
20281         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
20282         than the hashtable in a hashtable version
20283
20284         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
20285         we always end up concating a string. This results in a huge perf
20286         loss, because many strings have to be tracked by the GC. In this
20287         patch, we first use a hashtable that works with two keys, so that
20288         the strings do not need to be concat'ed.
20289
20290         Bootstrap times:
20291         BEFORE
20292                 Run 1:   8.74 seconds
20293                 Run 2:   8.71 seconds
20294
20295         AFTER
20296                 Run 1:   8.65 seconds
20297                 Run 2:   8.56 seconds
20298
20299 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20300
20301         * Makefile: Add a new target `do-time' that does a quick and simple
20302         profile, leaving easy to parse output.
20303
20304 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
20305
20306         * codegen.cs (Init): Create the dynamic assembly with 
20307         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
20308
20309 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
20310
20311         * support.cs: Make the PtrHashtable use only one
20312         instance of its comparer.
20313
20314 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
20315
20316         * typemanager.cs: Fix lookup of GetNamespaces.
20317
20318 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
20319
20320         * expression.cs: Removed redundant line.
20321
20322         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
20323         ArrayLists, use for loops with bounds.  
20324
20325         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
20326         arraylist.
20327
20328         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
20329         arraylists, use for loop with bounds.
20330
20331         The above three changes give us a 0.071 second performance
20332         improvement out of 3.294 seconds down to 3.223.  On my machine
20333         the above changes reduced the memory usage by 1,387 KB during
20334         compiler bootstrap.
20335
20336         * cs-parser.jay (QualifiedIdentifier): New class used to represent
20337         QualifiedIdentifiers.  Before we created a new string through
20338         concatenation, and mostly later on, the result would be
20339         manipulated by DecomposeQI through string manipulation.
20340
20341         This reduced the compiler memory usage for bootstrapping from
20342         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
20343         compile times in 0.05 seconds.
20344
20345 2003-11-28  Dick Porter  <dick@ximian.com>
20346
20347         * support.cs: Do string compares with the Invariant culture.
20348
20349         * rootcontext.cs: 
20350         * gen-treedump.cs: 
20351         * expression.cs: 
20352         * driver.cs: 
20353         * decl.cs: 
20354         * codegen.cs: 
20355         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
20356         the comparison is done with the Invariant culture.
20357
20358 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
20359
20360         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
20361         GetEnumerator method.
20362
20363         (ProbeCollectionType): Iterate starting at the most specific type
20364         upwards looking for a GetEnumerator
20365
20366         * expression.cs: Shift count can be up to 31 for int/uint and 63
20367         for long/ulong.
20368
20369 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
20370
20371         * statement.cs (Block.LookupLabel): Also look for the label on the
20372         children blocks.  Use a hash table to keep track of visited
20373         nodes. 
20374
20375         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
20376         we actually did transform the other operand, otherwise fall back
20377         to the common codepath that casts to long.
20378
20379         * cs-tokenizer.cs: Use the same code pattern as the int case.
20380         Maybe I should do the parsing myself, and avoid depending on the
20381         Parse routines to get this done.
20382
20383 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
20384
20385         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
20386         which fixes bug 51347.  This time test it.
20387
20388         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
20389         attributes for example can not tell the difference between these.
20390         The difference was only a syntax feature of the language. 
20391
20392         * attribute.cs: Apply attributes to delegates.
20393
20394         * delegate.cs: Call the apply attributes method.
20395
20396 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
20397
20398         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
20399         comparing 0 vs Byte.MinValue, not the value
20400
20401         (ImplicitConversionRequired): When reporting a conversion error,
20402         use error 31 to print out the constant error instead of the
20403         simpler 29.
20404
20405         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
20406         which fixes bug 51347.
20407
20408 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
20409
20410         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
20411         which fixes the -warnaserror command line option.
20412
20413 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
20414
20415         * cfold.cs (DoNumericPromotions): During constant folding of
20416         additions on UIntConstant, special case intconstants with
20417         IntConstants like we do on the expression binary operator. 
20418
20419 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
20420
20421         * convert.cs (ImplicitReferenceConversion): We were missing a case
20422         (System.Enum are not value types or class types, so we need to
20423         classify them separatedly).
20424
20425         * driver.cs: We do not support error 2007.
20426
20427 2003-11-12 Jackson Harper <jackson@ximian.com>
20428
20429         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
20430         system directory. Also use the full file name so users can
20431         libraries names mscorlib-o-tron.dll in a non system dir.
20432
20433 2003-11-10  Martin Baulig  <martin@ximian.com>
20434
20435         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
20436         (TypeManager.InitCoreTypes): Initialize them here, but instead of
20437         calling `ResolveType()' on them, directly assign their `Type'.
20438
20439 2003-11-08  Martin Baulig  <martin@ximian.com>
20440
20441         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
20442         return value and the `out parent' parameter.
20443         (TypeContainer.DefineType): Moved the CS0644 check into
20444         GetClassBases().  Don't pass the interface types to the
20445         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
20446         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
20447
20448         * ecore.cs (TypeExpr.IsAttribute): New property.
20449         (TypeExpr.GetInterfaces): New method.
20450
20451         * interface.cs (Interface.GetInterfaceTypeByName): Return a
20452         TypeExpr instead of a Type.
20453         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
20454         (Interface.DefineType): Don't pass the interface types to the
20455         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
20456         them later and then call `TypeBulider.AddInterfaceImplementation()'.
20457
20458         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
20459         instead of a `Type[]'.
20460         (TypeManager.RegisterBuilder): Likewise.
20461         (TypeManager.AddUserInterface): Likewise.
20462         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
20463         `Type[]' and also return a `TypeExpr[]'.
20464         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
20465
20466 2003-11-08  Martin Baulig  <martin@ximian.com>
20467
20468         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
20469         Expression.     
20470
20471 2003-11-08  Martin Baulig  <martin@ximian.com>
20472
20473         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
20474         TypeManager.ResolveExpressionTypes().
20475
20476         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
20477         instead of an Expression.
20478         (TypeExpr): This is now an abstract base class for `TypeExpression'.
20479         (TypeExpression): New public class; formerly known as `TypeExpr'.
20480
20481         * expression.cs (ComposedCast): Derive from TypeExpr.
20482
20483         * typemanager.cs (TypeManager.system_*_expr): These are now
20484         TypExpr's instead of Expression's.
20485         (TypeManager.ResolveExpressionTypes): New public static function;
20486         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
20487         of them.        
20488
20489 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
20490
20491         * expression.cs (New.DoResolve): Do not dereference value that
20492         might be a null return.
20493
20494         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
20495         sure that the constant value has the right type.  Fixes an
20496         unreported bug, similar to 50425.
20497
20498         * const.cs (Const.LookupConstantValue): Call
20499         ImplicitStandardConversionExists before doing a conversion to
20500         avoid havng the TypeManager.ChangeType do conversions.
20501
20502         Reduced the number of casts used
20503
20504         (Const.ChangeType): New routine to enable reuse of the constant
20505         type changing code from statement.
20506
20507         * typemanager.cs (ChangeType): Move common initialization to
20508         static global variables.
20509
20510         Fixes #50425.
20511
20512         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
20513         every value type to go through, even if it was void.  Fix that. 
20514
20515         * cs-tokenizer.cs: Use is_identifier_start_character on the start
20516         character of the define, and the is_identifier_part_character for
20517         the rest of the string.
20518
20519 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
20520
20521         * expression.cs (UnaryMutator.EmitCode): When I updated
20522         LocalVariableReference.DoResolve, I overdid it, and dropped an
20523         optimization done on local variable references.
20524
20525 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
20526
20527         * ecore.cs: Convert the return from Ldlen into an int.
20528
20529 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
20530
20531         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
20532         the accessibility, this is a special case for toplevel non-public
20533         classes (internal for instance).
20534
20535 2003-10-20  Nick Drochak <ndrochak@gol.com>
20536
20537         * ecore.cs: Fix typo and build.  Needed another right paren.
20538
20539 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
20540
20541         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
20542         `internal' case regular and protected, but not allowing protected
20543         to be evaluated later.  Bug 49840
20544
20545 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
20546
20547         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
20548         to kb.Nlast, and not the kb.nFirst to isolate the switch
20549         statement.
20550
20551         Extract the underlying type, so enumerations of long/ulong are
20552         treated like long/ulong.
20553
20554 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
20555
20556         * expression.cs (New): Overload the meaning of RequestedType to
20557         track the possible creation of the NewDelegate type, since
20558         DoResolve is invoked more than once for new constructors on field
20559         initialization.
20560
20561         See bugs: #48800 and #37014
20562
20563         * cs-parser.jay (declare_local_constants): Take an arraylist
20564         instead of a single constant.
20565
20566         (local_constant_declaration): It should take a
20567         constant_declarators, not a constant_declarator.  Fixes 49487
20568
20569         * convert.cs: Fix error report.
20570
20571 2003-10-13 Jackson Harper <jackson@ximian.com>
20572
20573         * typemanager.cs (TypeToCoreType): Add float and double this fixes
20574         bug #49611
20575
20576 2003-10-09  Martin Baulig  <martin@ximian.com>
20577
20578         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
20579         to the .ctor.
20580         (MethodCore.DoDefineParameters): Removed the TypeContainer
20581         argument; use the DeclSpace which was passed to the .ctor instead.
20582         (MethodCore.CheckParameter): Take a DeclSpace instead of a
20583         TypeContainer; we only need a DeclSpace here.
20584
20585 2003-10-09  Martin Baulig  <martin@ximian.com>
20586
20587         * class.cs (MethodData): Added additional `DeclSpace ds' argument
20588         to the .ctor.
20589         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
20590         EmitContext's .ctor.    
20591
20592 2003-10-09  Martin Baulig  <martin@ximian.com>
20593
20594         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
20595         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
20596         AsAccessible(), moved them as well.
20597
20598         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
20599
20600 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
20601
20602         * cs-parser.jay : Renamed yyName to yyNames related to jay.
20603
20604 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
20605
20606         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
20607         generation for >=, as spotted by Paolo, bug 48679.  
20608         Patch from David Waite.
20609
20610         * cs-tokenizer.cs: Add handling for #pragma.
20611
20612         * cs-parser.jay: Allow for both yield and yield return in the
20613         syntax.  The anti-cobolization of C# fight will go on!
20614
20615         * class.cs (TypeBuilder.DefineType): Catch error condition here
20616         (Parent.DefineType erroring out and returning null).
20617
20618         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
20619         coping with enumerations variables, we were mistakenly processing
20620         them as a regular value type instead of built-in types.  Fixes the
20621         bug #48063
20622
20623         * typemanager.cs (IsBuiltinOrEnum): New method.
20624
20625 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
20626
20627         * cs-parser.jay: Upgrade: yield now needs the return clause.
20628
20629 2003-09-19  Martin Baulig  <martin@ximian.com>
20630
20631         * decl.cs (MemberCache.SetupCacheForInterface): Take a
20632         `MemberCache parent' argument.  Normally, an interface doesn't
20633         have a parent type except System.Object, but we use this in gmcs
20634         for generic type parameters.
20635
20636 2003-09-18  Martin Baulig  <martin@ximian.com>
20637
20638         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
20639         on `type.IsInterface'; don't check whether the type has a parent
20640         to determine whether it's an interface.
20641
20642 2003-09-15  Martin Baulig  <martin@ximian.com>
20643
20644         * class.cs (TypeContainer.DefineType): Added an error flag to
20645         avoid reporting duplicate CS0146's ("class definition is
20646         circular.").
20647
20648         * driver.cs (Driver.MainDriver): Abort if
20649         RootContext.ResolveTree() reported any errors.
20650
20651 2003-09-07  Martin Baulig  <martin@ximian.com>
20652
20653         * report.cs (Error, Warning): Added overloaded versions which take
20654         a `params object[] args' and call String.Format().
20655
20656 2003-09-07  Martin Baulig  <martin@ximian.com>
20657
20658         * decl.cs (DeclSpace..ctor): Don't call
20659         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
20660         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
20661         (DeclSpace.RecordDecl): New method.
20662
20663         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
20664
20665 2003-09-02  Ravi Pratap  <ravi@ximian.com>
20666
20667         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
20668         value attributes to be applied to ParameterBuilders.
20669
20670         * class.cs (MethodCore.LabelParameters): Make static and more
20671         generic so that it can be used from other places - like interface
20672         methods, for instance.
20673
20674         * interface.cs (Interface.Emit): Call LabelParameters before
20675         emitting attributes on the InterfaceMethod.
20676
20677 2003-08-26  Martin Baulig  <martin@ximian.com>
20678
20679         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
20680         resolving aliases; fixes #47927.
20681
20682 2003-08-26  Martin Baulig  <martin@ximian.com>
20683
20684         * statement.cs (Using.DoResolve): This is internally emitting a
20685         try/finally clause, so we need to set ec.NeedExplicitReturn if we
20686         do not always return.  Fixes #47681.
20687
20688 2003-08-26  Martin Baulig  <martin@ximian.com>
20689
20690         * decl.cs (MemberCore): Moved WarningNotHiding(),
20691         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
20692         into MemberBase.
20693         (AdditionResult): Make this nested in DeclSpace.
20694         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
20695         argument; call NamespaceEntry.Define() unless we're nested in a
20696         class or struct.
20697
20698         * namespace.cs (Namespace.DefineName): New public function.  This
20699         is called from DeclSpace's .ctor to add 
20700         (Namespace.Lookup): Include DeclSpaces in the lookup.
20701
20702         * class.cs (Operator): Derive from MemberBase, not MemberCore.
20703
20704         * const.cs (Const): Derive from MemberBase, not MemberCore.     
20705
20706 2003-08-25  Martin Baulig  <martin@ximian.com>
20707
20708         * convert.cs (Convert.ExplicitReferenceConversion): When
20709         converting from an interface type to a class, unbox if the target
20710         type is a struct type.  Fixes #47822.
20711
20712 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20713
20714         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
20715         #47854.
20716
20717 2003-08-22  Martin Baulig  <martin@ximian.com>
20718
20719         * class.cs (TypeManager.DefineType): When defining a nested type,
20720         call DefineType() on our parent; fixes #47801.
20721
20722 2003-08-22  Martin Baulig  <martin@ximian.com>
20723
20724         * class.cs (MethodData.Define): While checking if a method is an
20725         interface implementation, improve the test a bit more to fix #47654.
20726
20727 2003-08-22  Martin Baulig  <martin@ximian.com>
20728
20729         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
20730         correctly; fixes #47722.
20731
20732 2003-08-22  Martin Baulig  <martin@ximian.com>
20733
20734         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
20735         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
20736
20737         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
20738
20739 2003-08-22  Martin Baulig  <martin@ximian.com>
20740
20741         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
20742         can only be assigned in static constructors.  Fixes #47161.
20743
20744 2003-08-22  Martin Baulig  <martin@ximian.com>
20745
20746         Rewrote and improved the flow analysis code.
20747
20748         * flowbranching.cs (FlowBranching): Make this class abstract.
20749         (FlowBranching.CreateBranching): New static function to create a
20750         new flow branching.
20751         (FlowBranchingBlock, FlowBranchingException): New classes.
20752         (FlowBranching.UsageVector.Type): New public readonly field.
20753         (FlowBranching.UsageVector.Breaks): Removed the setter.
20754         (FlowBranching.UsageVector.Returns): Removed the setter.
20755         (FlowBranching.UsageVector): Added Break(), Return(),
20756         NeverReachable() and Throw() methods to modify the reachability.
20757         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
20758         done by FlowBranching.Merge().
20759         (FlowBranching.UsageVector.MergeChild): New method; merges the
20760         merge result into the current vector.
20761         (FlowBranching.Merge): New abstract method to merge a branching.
20762
20763 2003-08-12  Martin Baulig  <martin@ximian.com>
20764
20765         * expression.cs (Indirection.CacheTemporaries): Create the
20766         LocalTemporary with the pointer type, not its element type.
20767
20768 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
20769
20770         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
20771         token was a keyword or not.
20772
20773         Add `error' options where an IDENTIFIER was expected;  Provide
20774         CheckToken and CheckIdentifierToken convenience error reporting
20775         functions. 
20776
20777         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
20778
20779         * decl.cs: Rename `NamespaceEntry Namespace' public field into
20780         NameSpaceEntry NameSpaceEntry.
20781
20782         (LookupInterfaceOrClass): Avoid creating a full qualified name
20783         from namespace and name: avoid doing lookups when we know the
20784         namespace is non-existant.   Use new Tree.LookupByNamespace which
20785         looks up DeclSpaces based on their namespace, name pair.
20786
20787         * driver.cs: Provide a new `parser verbose' to display the
20788         exception thrown during parsing.  This is turned off by default
20789         now, so the output of a failure from mcs is more graceful.
20790
20791         * namespace.cs: Track all the namespaces defined in a hashtable
20792         for quick lookup.
20793
20794         (IsNamespace): New method
20795
20796 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
20797
20798         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
20799         we know that we need to concatenate (full typename can never be
20800         null). 
20801
20802         * class.cs: ditto.
20803
20804         * statement.cs: Use a bitfield;  Do not initialize to null things
20805         which are done by the constructor by default.
20806
20807         * cs-parser.jay: bug fix, parameter was 4, not 3.
20808
20809         * expression.cs: Just use the property;
20810
20811         * statement.cs: No need for GetVariableInfo method.
20812
20813 2003-08-08  Martin Baulig  <martin@ximian.com>
20814
20815         * flowanalysis.cs (FlowReturns): This is now nested in the
20816         `FlowBranching' class.
20817         (MyBitVector): Moved this here from statement.cs.
20818         (FlowBranching.SiblingType): New enum type.
20819         (FlowBranching.CreateSibling): Added `SiblingType' argument.
20820
20821 2003-08-07  Martin Baulig  <martin@ximian.com>
20822
20823         * flowanalysis.cs (FlowBranchingType): This is now nested in the
20824         `FlowBranching' class and called `BranchingType'.
20825
20826 2003-08-07  Martin Baulig  <martin@ximian.com>
20827
20828         * flowanalysis.cs: Moved all the control flow analysis code into
20829         its own file.
20830
20831 2003-08-07  Martin Baulig  <martin@ximian.com>
20832
20833         * assign.cs (Assign.DoResolve): `target' must either be an
20834         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
20835         #37319.
20836
20837 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
20838
20839         * expression.cs (BinaryMethod): This kind of expression is created by the
20840         Binary class if it determines that the operator has to be handled
20841         by a method.
20842
20843         (BinaryDelegate): This kind of expression is created if we are
20844         dealing with a + or - operator on delegates.
20845
20846         (Binary): remove method, argumetns, and DelegateOperator: when
20847         dealing with methods, 
20848
20849         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
20850
20851         * statement.cs (Block): use bitfields for the three extra booleans
20852         we had in use.   Remove unused topblock parameter.
20853
20854         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
20855
20856         * assign.cs: Drop extra unneeded tests.
20857
20858 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
20859
20860         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
20861
20862         * statement.cs (Foreach): Use VariableStorage instead of
20863         LocalBuilders.   
20864
20865         * codegen.cs (VariableStorage): New class used by clients that
20866         require a variable stored: locals or fields for variables that
20867         need to live across yield.
20868
20869         Maybe provide a convenience api for EmitThis+EmitLoad?
20870
20871         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
20872         these bad boys.
20873
20874 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
20875
20876         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
20877         RemapParameterLValue): New methods that are used to turn a
20878         precomputed FieldInfo into an expression like this:
20879
20880                 instance.FieldInfo
20881
20882         The idea is to use this instead of making LocalVariableReference
20883         have more than one meaning.
20884
20885         * cs-parser.jay: Add error production to BASE.
20886
20887         * ecore.cs: Deal with TypeManager.GetField returning null, which
20888         is now a valid return value.
20889
20890         (FieldExprNoAddress): New expression for Fields whose address can
20891         not be taken.
20892
20893         * expression.cs (LocalVariableReference): During the resolve
20894         phases, create new expressions if we are in a remapping context.
20895         Remove code that dealt with remapping here.
20896
20897         (ParameterReference): same.
20898
20899         (ProxyInstance): New expression, like the `This' expression, but
20900         it is born fully resolved.  We know what we are doing, so remove
20901         the errors that are targeted to user-provided uses of `this'.
20902
20903         * statement.cs (Foreach): our variable is now stored as an
20904         Expression;  During resolution, follow the protocol, dont just
20905         assume it will return this.
20906
20907 2003-08-06  Martin Baulig  <martin@ximian.com>
20908
20909         * support.cs (SeekableStreamReader.cs): New public class.
20910
20911         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
20912         SeekableStreamReader instead of the normal StreamReader.
20913
20914 2003-08-04  Martin Baulig  <martin@ximian.com>
20915
20916         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
20917         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
20918         deambiguate casts and delegate invocations.
20919         (parenthesized_expression): Use the new tokens to ensure this is
20920         not a cast of method invocation.
20921
20922         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
20923         when reading a `)' and Deambiguate_CloseParens () was previously
20924         called.
20925
20926         * expression.cs (ParenthesizedExpression): New class.  This is
20927         just used for the CS0075 test.
20928         (Binary.DoResolve): Check for CS0075.   
20929
20930 2003-07-29  Ravi Pratap  <ravi@ximian.com>
20931
20932         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
20933         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
20934         reference comparison.
20935
20936         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
20937         examine the ReturnType for equality - this is necessary in the
20938         cases of implicit and explicit operators whose signature also
20939         includes the return type.
20940
20941 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
20942
20943         * namespace.cs: Cache the result of the namespace computation,
20944         instead of computing it every time.
20945
20946 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
20947
20948         * decl.cs: Use a global arraylist that we reuse over invocations
20949         to avoid excesive memory consumption.  Reduces memory usage on an
20950         mcs compile by one meg (45 average).
20951
20952         * typemanager.cs (LookupTypeReflection): In .NET pointers are
20953         private, work around that.
20954
20955 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
20956
20957         * literal.cs (IntLiteral): Define Zero and One static literals. 
20958
20959         * cs-parser.jay (integer_literal): use static literals to reduce
20960         memory usage for the most used literals (0, 1 and -1).  211kb
20961         reduced in memory usage.
20962
20963         Replace all calls to `new ArrayList' with `new
20964         ArrayList(4)' which is a good average number for most allocations,
20965         and also requires only 16 bytes of memory for its buffer by
20966         default. 
20967
20968         This reduced MCS memory usage in seven megabytes for the RSS after
20969         bootstrapping.
20970
20971 2003-07-28  Ravi Pratap  <ravi@ximian.com>
20972
20973         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
20974         handle params methods the correct way by forming only one
20975         applicable set with params and normal methods in them. Earlier we
20976         were looking at params methods only if we found no normal methods
20977         which was not the correct thing to do.
20978
20979         (Invocation.BetterFunction): Take separate arguments indicating
20980         when candidate and the best method are params methods in their
20981         expanded form.
20982
20983         This fixes bugs #43367 and #46199.
20984
20985         * attribute.cs: Documentation updates.
20986
20987         (CheckAttribute): Rename to CheckAttributeTarget.
20988         (GetValidPlaces): Rename to GetValidTargets.
20989
20990         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
20991         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
20992
20993         Fixes bug #44468.
20994
20995 2003-07-28  Martin Baulig  <martin@ximian.com>
20996
20997         * class.cs (TypeContainer.DefineMembers): Use the base type's full
20998         name when looking up the base class of a nested class.  Fixes #46977.
20999
21000 2003-07-26  Martin Baulig  <martin@ximian.com>
21001
21002         * expression.cs (Indexers.Indexer): New nested struct; contains
21003         getter, setter and the indexer's type.
21004         (Indexers.Properties): This is now an ArrayList of
21005         Indexers.Indexer's.
21006         (IndexerAccess.DoResolveLValue): Correctly set the type if the
21007         indexer doesn't have any getters.
21008
21009         * assign.cs (Assign.DoResolve): Also do the implicit conversions
21010         for embedded property and indexer assignments.
21011
21012 2003-07-26  Martin Baulig  <martin@ximian.com>
21013
21014         * cs-tokenizer.cs (Tokenizer.xtoken): Report a CS1040 if a
21015         preprocessor directive is not the first non-whitespace character
21016         on a line.
21017
21018 2003-07-26  Martin Baulig  <martin@ximian.com>
21019
21020         * namespace.cs (NamespaceEntry.Lookup): New method; rewrote the
21021         namespace parsing, follow the spec more closely.
21022
21023         * rootcontext.cs (RootContext.NamespaceLookup): Use the new
21024         NamespaceEntry.Lookup().
21025
21026 2003-07-25  Martin Baulig  <martin@ximian.com>
21027
21028         * MethodCore.cs (OverridesSomething): New public field; it's set
21029         from TypeContainer.DefineMembers if this method overrides
21030         something (which doesn't need to be a method).  Fix #39462.
21031
21032 2003-07-25  Ravi Pratap  <ravi@ximian.com>
21033
21034         * typemanager.cs (GetMembers): Ensure that the list of members is
21035         reversed. This keeps things in sync.
21036
21037         * attribute.cs (Attribute.CheckAttribute): Break as soon as we
21038         find an AttributeUsage attribute.
21039
21040         * expression.cs (Invocation.OverloadResolve): Perform the check
21041         which disallows Invoke to be directly called on a Delegate.
21042
21043         (Error_InvokeOnDelegate): Report error cs1533.
21044
21045 2003-07-25  Martin Baulig  <martin@ximian.com>
21046
21047         * expression.cs (Indexers.GetIndexersForType): Only look in the
21048         interface hierarchy if the requested type is already an
21049         interface.  Fixes #46788 while keeping #46502 fixed.
21050
21051 2003-07-25  Martin Baulig  <martin@ximian.com>
21052
21053         * class.cs (TypeContainer.DefineMembers): Check whether all
21054         readonly fields have been assigned and report warning CS0649 if
21055         not.
21056
21057         * statement.cs (LocalInfo.IsFixed): Always return true if this is
21058         a valuetype.
21059
21060 2003-07-24  Ravi Pratap  <ravi@ximian.com>
21061
21062         * decl.cs (MemberCache.AddMethods): Reverse the order of the array
21063         returned from GetMethods to make things consistent with the
21064         assumptions MCS makes about ordering of methods.
21065
21066         This should comprehensively fix bug #45127 and it does :-)
21067
21068         * ecore.cs (MethodGroupExpr.DeclaringType): Correct bug - the
21069         ordering is actually reverse.
21070
21071         * Clean up some debug messages I left lying around.
21072
21073         * interface.cs (Populate*): Get rid of code which emits attributes
21074         since the stage in which we emit attributes is the 'Emit' stage,
21075         not the define stage.
21076
21077         (Emit): Move attribute emission for interface members here.
21078
21079 2003-07-22  Ravi Pratap  <ravi@ximian.com>
21080
21081         * expression.cs (Invocation.OverloadResolve): Follow the spec more
21082         closely: we eliminate methods in base types when we have an
21083         applicable method in a top-level type.
21084
21085         Please see section 14.5.5.1 for an exact description of what goes
21086         on. 
21087
21088         This fixes bug #45127 and a host of other related to corlib compilation.
21089
21090         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
21091         array is the method corresponding to the top-level type (this is
21092         because of the changes made to icall.c) so we change this
21093         accordingly.
21094
21095         (MethodGroupExpr.Name): This too.
21096
21097         * typemanager.cs (GetElementType): New method which does the right
21098         thing when compiling corlib. 
21099
21100         * everywhere: Make use of the above in the relevant places.
21101
21102 2003-07-22  Martin Baulig  <martin@ximian.com>
21103
21104         * cs-parser.jay (invocation_expression): Moved
21105         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
21106         `cast_expression', but create a InvocationOrCast which later
21107         resolves to either an Invocation or a Cast.
21108
21109         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
21110         method; call this before EmitStatement() to make sure that this
21111         expression can be used as a statement.
21112
21113         * expression.cs (InvocationOrCast): New class; resolves to either
21114         an Invocation or a Cast.
21115
21116         * statement.cs (StatementExpression): Call ResolveStatement() on
21117         the ExpressionStatement before emitting it.
21118
21119 2003-07-21  Martin Baulig  <martin@ximian.com>
21120
21121         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
21122         `ref' and `out' attributes match; fixes #46220.
21123         (MemberAccess.ResolveMemberAccess): You can't reference a type
21124         through an expression; fixes #33180.
21125         (Indexers.GetIndexersForType): Don't return the indexers from
21126         interfaces the class implements; fixes #46502.
21127
21128 2003-07-21  Martin Baulig  <martin@ximian.com>
21129
21130         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
21131         CS0661 checks; fixes bug #30442.
21132
21133 2003-07-21  Martin Baulig  <martin@ximian.com>
21134
21135         * decl.cs (AdditionResult): Added `Error'.
21136
21137         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
21138
21139         * typemanager.cs (TypeManager.ChangeType): Catch exceptions;
21140         makes cs0031.cs actually work.
21141
21142 2003-07-20  Martin Baulig  <martin@ximian.com>
21143
21144         * namespace.cs: Fixed that bug which caused a crash when compiling
21145         the debugger's GUI.
21146
21147 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
21148
21149         * typemanager.cs (LookupTypeReflection): Never expose types which
21150         are NotPublic, NestedPrivate, NestedAssembly, or
21151         NestedFamANDAssem.  We used to return these, and later do a check
21152         that would report a meaningful error, but the problem is that we
21153         would not get the real match, if there was a name override.
21154
21155 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
21156
21157         * namespace.cs (Namespace, Name): Do not compute the namespace
21158         name dynamically, compute it in the constructor.  This reduced
21159         memory usage by 1697 KB.
21160
21161         * driver.cs: Use --pause to pause at the end.
21162
21163 2003-07-17  Peter Williams  <peter@newton.cx>
21164
21165         * Makefile: Change the name of the test target so that it doesn't
21166         conflict with the recursive test target.
21167
21168 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
21169
21170         * expression.cs (LocalVariableReference.Emit, EmitAssign,
21171         AddressOf): Do not use EmitThis, that was wrong, use the actual
21172         this pointer.
21173
21174 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
21175
21176         * class.cs (MethodData.Define): While checking if a method is an
21177         interface implementation, improve the test: If we are not public
21178         (use new test here: use the computed MethodAttributes directly,
21179         instead of the parsed modifier flags) check if the `implementing'
21180         method comes from an interface or not.
21181
21182         * pending.cs (VerifyPendingMethods): Slightly better error
21183         message.
21184
21185         * makefile: add test target that does the mcs bootstrap.
21186
21187 2003-07-16  Ravi Pratap  <ravi@ximian.com>
21188
21189         * interface.cs (Define): Do nothing here since there are no
21190         members to populate etc. Move the attribute emission out of here
21191         since this was just totally the wrong place to put it. Attribute
21192         application happens during the 'Emit' phase, not in the 'Define'
21193         phase.
21194
21195         (Emit): Add this method and move the attribute emission here
21196
21197         * rootcontext.cs (EmitCode): Call the Emit method on interface
21198         types too.
21199
21200 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
21201
21202         * expression.cs (OverloadResolve): Report error only if Location
21203         is not 'Null' which means that there was a probe going on.
21204
21205 2003-07-14  Martin Baulig  <martin@ximian.com>
21206
21207         * expression.cs (ConditionalLogicalOperator): New public class to
21208         implement user defined conditional logical operators.
21209         This is section 14.11.2 in the spec and bug #40505.
21210
21211 2003-07-14  Martin Baulig  <martin@ximian.com>
21212
21213         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
21214
21215 2003-07-14  Martin Baulig  <martin@ximian.com>
21216
21217         * codegen.cs (EmitContext.InFixedInitializer): New public field.
21218
21219         * ecore.cs (IVariable.VerifyFixed): New interface method.
21220
21221         * expression.cs (Unary.ResolveOperator): When resolving the `&'
21222         operator, check whether the variable is actually fixed.  Fixes bug
21223         #36055.  Set a variable definitely assigned when taking its
21224         address as required by the spec.
21225
21226         * statement.cs (LocalInfo.IsFixed): New field.
21227         (LocalInfo.MakePinned): Set `IsFixed' to true.
21228
21229 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
21230
21231         * attribute.cs (Attribute.Resolve): While doing a Member lookup
21232         for .ctors, ensure that we only ask for members declared in the
21233         attribute type (BindingFlags.DeclaredOnly).
21234
21235         Fixes bug #43632.
21236
21237         * expression.cs (Error_WrongNumArguments): Report error 1501
21238         correctly the way CSC does.
21239
21240 2003-07-13  Martin Baulig  <martin@ximian.com>
21241
21242         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
21243         lookup on the fully qualified name, to make things like "X.X" work
21244         where "X.X" is a fully qualified type name, but we also have a
21245         namespace "X" in the using list.  Fixes #41975.
21246
21247 2003-07-13  Martin Baulig  <martin@ximian.com>
21248
21249         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
21250         function. If we're a CompoundAssign, we need to create an embedded
21251         CompoundAssign, not an embedded Assign.
21252         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
21253         Fixes #45854.
21254
21255 2003-07-13  Martin Baulig  <martin@ximian.com>
21256
21257         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
21258         work to fix bug #46088.
21259
21260 2003-07-13  Ravi Pratap <ravi@ximian.com>
21261
21262         * class.cs (Operator.Emit): Do not emit attributes here - it is
21263         taken care of by the Method class that we delegate too. This takes
21264         care of bug #45876.
21265
21266 2003-07-10  Martin Baulig  <martin@ximian.com>
21267
21268         * expression.cs (TypeOfVoid): New class.
21269         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
21270
21271 2003-07-10  Martin Baulig  <martin@ximian.com>
21272
21273         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
21274         bug #35957.
21275
21276 2003-07-10  Martin Baulig  <martin@ximian.com>
21277
21278         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
21279         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
21280
21281         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
21282
21283         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
21284
21285 2003-07-10  Martin Baulig  <martin@ximian.com>
21286
21287         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
21288         of decimal.  Fixes #42850.
21289
21290         NOTE: I also fixed the created byte blob, but this doesn't work on
21291         the MS runtime and csc never produces any byte blobs for decimal
21292         arrays.
21293
21294 2003-07-10  Martin Baulig  <martin@ximian.com>
21295
21296         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
21297         structs; fixes #32068.
21298         (Block.AddChildVariableNames): Fixed #44302.
21299
21300 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21301
21302         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
21303
21304 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21305
21306         * attribute.cs: And this test is onger needed.
21307
21308 2003-07-08  Martin Baulig  <martin@ximian.com>
21309
21310         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
21311         inaccessible types.  Fixes #36313.
21312
21313         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
21314
21315         * namespace.cs (NamespaceEntry): Create implicit entries for all
21316         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
21317         implicit entries for N1.N2 and N1.
21318
21319 2003-07-08  Martin Baulig  <martin@ximian.com>
21320
21321         Rewrote the handling of namespaces to fix a lot of the issues
21322         wrt. `using' aliases etc.
21323
21324         * namespace.cs (Namespace): Splitted this class into a
21325         per-assembly `Namespace' and a per-file `NamespaceEntry'.
21326
21327         * typemanager.cs (TypeManager.IsNamespace): Removed.
21328         (TypeManager.ComputeNamespaces): Only compute namespaces from
21329         loaded assemblies here, not the namespaces from the assembly we're
21330         currently compiling.
21331
21332 2003-07-08  Martin Baulig  <martin@ximian.com>
21333
21334         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
21335
21336 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21337
21338         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
21339         already fixed it.  
21340
21341         I thought about the memory savings here, but LookupTypeReflection
21342         is used under already very constrained scenarios.  Compiling
21343         corlib or mcs only exposes one hit, so it would not really reduce
21344         any memory consumption.
21345
21346 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21347
21348         * typemanager.cs: fixes bug #45889 by only adding public types from
21349         other assemblies to the list of known types.
21350
21351 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21352
21353         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
21354         on the type we resolved.
21355
21356 2003-07-05  Martin Baulig  <martin@ximian.com>
21357
21358         * pending.cs (PendingImplementation.ParentImplements): Don't
21359         create the proxy if the parent is abstract.
21360
21361         * class.cs (TypeContainer.DefineIndexers): Process explicit
21362         interface implementations first.  Fixes #37714.
21363
21364 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
21365
21366         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
21367         defined recursively;  but since we modify the input parameters
21368         (left is set to `this' temporarily), we reset this value if the
21369         left_is_explicit is false, which gives the original semantics to
21370         the code.  
21371
21372         * literal.cs (NullPointer): new class used to represent a null
21373         literal in a pointer context.
21374
21375         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
21376         type is a pointer, use a NullPointer object instead of a
21377         NullLiteral.   Closes 43687
21378
21379         (ExplicitConversion): Convert pointer values using
21380         the conv opcode to the proper type.
21381
21382         * ecore.cs (New): change ValueTypeVariable property into a method,
21383         that returns whether the valuetype is suitable for being used.
21384
21385         * expression.cs (Binary.DoNumericPromotions): Only return if we
21386         the int constant was a valid uint, and we can return both left and
21387         right as uints.  If not, we continue processing, to trigger the
21388         type conversion.  This fixes 39018.
21389
21390         * statement.cs (Block.EmitMeta): During constant resolution, set
21391         the CurrentBlock property on the emitcontext, so that we resolve
21392         constants propertly.
21393
21394 2003-07-02  Martin Baulig  <martin@ximian.com>
21395
21396         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
21397         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
21398
21399         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
21400         than emitting it here.
21401
21402         * statement.cs: Fixed some more flow analysis bugs.
21403
21404 2003-07-02  Martin Baulig  <martin@ximian.com>
21405
21406         * class.cs (MethodData.Define): When implementing interface
21407         methods, set Final unless we're Virtual.
21408
21409         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
21410         check work for interface methods.
21411
21412 2003-07-01  Martin Baulig  <martin@ximian.com>
21413
21414         * ecore.cs (EmitContext.This): Replaced this property with a
21415         GetThis() method which takes a Location argument.  This ensures
21416         that we get the correct error location for a CS0188.
21417
21418 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
21419
21420         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
21421         ImplicitStandardConversion.
21422
21423         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
21424
21425 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
21426
21427         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
21428         optimization.
21429
21430 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
21431
21432         * class.cs (Constructor.Define): Turn off initlocals for unsafe
21433         constructors.
21434
21435         (MethodData.Define): Turn off initlocals for unsafe methods.
21436
21437 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
21438
21439         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
21440         complete;  Fixes #37521.
21441
21442         * delegate.cs: Use Modifiers.TypeAttr to compute the
21443         TypeAttributes, instead of rolling our own.  This makes the flags
21444         correct for the delegates.
21445
21446 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
21447
21448         * class.cs (Constructor.Define): Set the private flag for static
21449         constructors as well.
21450
21451         * cs-parser.jay (statement_expression): Set the return value to
21452         null, to avoid a crash when we catch an error.
21453
21454 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
21455
21456         * cs-parser.jay: Applied patch from Jackson that adds support for
21457         extern and unsafe modifiers to destructor declarations.
21458
21459         * expression.cs: Report error 21 if the user is trying to index a
21460         System.Array.
21461
21462         * driver.cs: Add an error message, suggested by the bug report.
21463
21464         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
21465         if we do not have a ": this ()" constructor initializer.  Fixes 45149
21466
21467 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
21468
21469         * namespace.cs: Add some information to reduce FAQs.
21470
21471 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
21472
21473         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
21474         underlying enumeration types.  Fixes #43915.
21475
21476         * expression.cs: Treat ushort/short as legal values to be used in
21477         bitwise operations.
21478
21479 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
21480
21481         * delegate.cs: transfer custom attributes for paramenters from
21482         the delegate declaration to Invoke and BeginInvoke.
21483
21484 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
21485
21486         * attribute.cs: handle custom marshalers and emit marshal info
21487         for fields, too.
21488
21489 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
21490
21491         * makefile.gnu: Added anonymous.cs to the compiler sources.
21492
21493 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
21494
21495         * iterators.cs: Change the name of the proxy class to include two
21496         underscores.
21497
21498         * cs-parser.jay: Update grammar to include anonymous methods.
21499
21500         * anonymous.cs: new file.
21501
21502 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
21503
21504         * class.cs (Field.Define): Add missing test for pointers and
21505         safety. 
21506
21507 2003-05-27  Ravi Pratap  <ravi@ximian.com>
21508
21509         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
21510         we use the stobj opcode.
21511
21512         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
21513         since it wasn't the correct fix. 
21514
21515         It still is puzzling that we are required to use stobj for IntPtr
21516         which seems to be a ValueType.
21517
21518 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
21519
21520         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
21521         during regular simple name resolution.   Now, the trick is that
21522         instead of returning for processing the simplename, we do a
21523         TypeManager.LookupType (ie, a rooted lookup as opposed to a
21524         contextual lookup type).   If a match is found, return that, if
21525         not, return for further composition.
21526
21527         This fixes long-standing 30485.
21528
21529         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
21530         using the address to initialize an object, do an Stobj instead of
21531         using the regular Stelem.
21532
21533         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
21534         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
21535         Because if we are a BaseIndexerAccess that value will be true.
21536         Fixes 43643.
21537
21538         * statement.cs (GotoCase.Resolve): Return after reporting an
21539         error, do not attempt to continue. 
21540
21541         * expression.cs (PointerArithmetic.Emit): If our operand is a
21542         long, convert our constants to match the operand before
21543         multiplying.  Convert to I type before adding.   Fixes 43670.
21544
21545 2003-05-14  Ravi Pratap  <ravi@ximian.com>
21546
21547         * enum.cs (ImplicitConversionExists) : Rename to
21548         ImplicitEnumConversionExists to remove ambiguity. 
21549
21550         * ecore.cs (NullCast): New type of cast expression class which
21551         basically is very similar to EmptyCast with the difference being
21552         it still is a constant since it is used only to cast a null to
21553         something else
21554         (eg. (string) null)
21555
21556         * convert.cs (ImplicitReferenceConversion): When casting a null
21557         literal, we return a NullCast.
21558
21559         * literal.cs (NullLiteralTyped): Remove - I don't see why this
21560         should be around anymore.
21561
21562         The renaming (reported was slightly wrong). Corrections:
21563
21564         ConvertImplicitStandard -> ImplicitConversionStandard
21565         ConvertExplicitStandard -> ExplicitConversionStandard
21566
21567         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
21568         before passing them in !
21569
21570         * convert.cs (ImplicitConversionStandard): When comparing for
21571         equal expr and target types, ensure that expr is not a
21572         NullLiteral.
21573
21574         In general, we must not be checking (expr_type ==
21575         target_type) in the top level conversion methods
21576         (ImplicitConversion, ExplicitConversion etc). This checking is
21577         done in the methods that they delegate to.
21578
21579 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
21580
21581         * convert.cs: Move Error_CannotConvertType,
21582         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
21583         ImplicitNumericConversion, ImplicitConversionExists,
21584         ImplicitUserConversionExists, StandardConversionExists,
21585         FindMostEncompassedType, FindMostSpecificSource,
21586         FindMostSpecificTarget, ImplicitUserConversion,
21587         ExplicitUserConversion, GetConversionOperators,
21588         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
21589         TryImplicitIntConversion, Error_CannotConvertImplicit,
21590         ConvertImplicitRequired, ConvertNumericExplicit,
21591         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
21592         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
21593         its own file.
21594
21595         Perform the following renames:
21596
21597         StandardConversionExists -> ImplicitStandardConversionExists
21598         ConvertImplicit -> ImplicitConversion
21599         ConvertImplicitStandard -> ImplicitStandardConversion
21600         TryImplicitIntConversion -> ImplicitIntConversion
21601         ConvertImplicitRequired -> ImplicitConversionRequired
21602         ConvertNumericExplicit -> ExplicitNumericConversion
21603         ConvertReferenceExplicit -> ExplicitReferenceConversion
21604         ConvertExplicit -> ExplicitConversion
21605         ConvertExplicitStandard -> ExplicitStandardConversion
21606
21607 2003-05-19  Martin Baulig  <martin@ximian.com>
21608
21609         * statement.cs (TypeInfo.StructInfo): Made this type protected.
21610         (TypeInfo): Added support for structs having structs as fields.
21611
21612         * ecore.cs (FieldExpr): Implement IVariable.
21613         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
21614         VariableInfo for the field.
21615
21616 2003-05-18  Martin Baulig  <martin@ximian.com>
21617
21618         * expression.cs (This.DoResolve): Report a CS0027 if we're
21619         emitting a field initializer.
21620
21621 2003-05-18  Martin Baulig  <martin@ximian.com>
21622
21623         * expression.cs (This.ResolveBase): New public function.
21624         (This.DoResolve): Check for CS0188.
21625
21626         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
21627         This.Resolve().
21628
21629         * ecore.cs (MethodGroupExpr.DoResolve): Set the
21630         `instance_expression' to null if we don't have any non-static
21631         methods.
21632
21633 2003-05-18  Martin Baulig  <martin@ximian.com>
21634
21635         Reworked the way how local variables and parameters are handled by
21636         the flow analysis code.
21637
21638         * statement.cs (TypeInfo, VariableMap): New public classes.
21639         (VariableInfo): New public class.  This is now responsible for
21640         checking whether a variable has been assigned.  It is used for
21641         parameters and local variables.
21642         (Block.EmitMeta): Take the InternalParameters as argument; compute
21643         the layout of the flow vectors here.
21644         (Block.LocalMap, Block.ParameterMap): New public properties.
21645         (FlowBranching): The .ctor doesn't get the InternalParameters
21646         anymore since Block.EmitMeta() now computes the layout of the flow
21647         vector.
21648         (MyStructInfo): This class is now known as `StructInfo' and nested
21649         in `TypeInfo'; we don't access this directly anymore.
21650
21651         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
21652         property and removed IsAssigned(), IsFieldAssigned(),
21653         SetAssigned() and SetFieldAssigned(); we now call them on the
21654         VariableInfo so we don't need to duplicate this code everywhere.
21655
21656         * expression.cs (ParameterReference): Added `Block block' argument
21657         to the .ctor.
21658         (LocalVariableReference, ParameterReference, This): The new
21659         VariableInfo class is now responsible for all the definite
21660         assignment stuff.
21661
21662         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
21663         IsParameterAssigned, SetParameterAssigned): Removed.
21664
21665 2003-05-18  Martin Baulig  <martin@ximian.com>
21666
21667         * typemanager.cs (InitCoreTypes): Try calling
21668         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
21669         the 3-args-version.  Corlib now also needs our `void_type'.
21670         (GetMethod): Added overloaded version which takes an optional
21671         `bool report_errors' to allow lookups of optional methods.
21672
21673 2003-05-12  Martin Baulig  <martin@ximian.com>
21674
21675         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
21676         only used for locals and not for parameters.
21677
21678 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
21679
21680         * support.cs (InternalParameters.ParameterType): Return the
21681         ExternalType of the parameter.
21682
21683         * parameter.cs (Parameter.ExternalType): drop the two arguments,
21684         they were unused.
21685
21686 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
21687
21688         * class.cs (MethodData.Define): Do not set the `newslot' on
21689         interface members, if they are also flagged as "override".
21690
21691         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
21692         better code for ++i and i++.  This only works for static fields
21693         and local variables.
21694
21695         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
21696         want to pull the DeclSpace out of the builder_to_declspace instead
21697         of the TypeBuilder (like in TypeContainer.FindMembers).
21698
21699         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
21700         instead of LookupTypeContainer.  Fixes the crash on .NET for
21701         looking up interface members.
21702
21703         * const.cs: Create our own emit context during the Definition
21704         stage, so that constants are evaluated in the proper context, when
21705         a recursive definition happens.
21706
21707 2003-05-11  Martin Baulig  <martin@ximian.com>
21708
21709         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
21710         new block for a switch section.
21711         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
21712         the adding/lookup in the switch block.  Fixes #39828.
21713
21714 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
21715
21716         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
21717         functionality: I needed to convert the data after I had performed
21718         the add/sub operation into the operands type size.
21719
21720         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
21721         pass the type for the box operation, otherwise the resulting
21722         object would have been of type object.
21723
21724         (BoxedCast): Add constructor to specify the type to box as.
21725
21726 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
21727
21728         * iterators.cs: I was reusing the `count' variable inadvertently,
21729         take steps to not allow this to happen.
21730
21731 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
21732
21733         * attribute.cs (Attribute.Resolve): Params attributes are encoded
21734         by creating an array at the point where the params starts and
21735         putting all those arguments there, then adjusting the size of the
21736         array.
21737
21738 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
21739
21740         * expression.cs (New.AddressOf): Implement interface
21741         IMemoryLocation.  This is used when the `new' operator is used in
21742         the context of an invocation to a method on a value type.
21743
21744         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
21745         example. 
21746
21747         * namespace.cs: Also check the using aliases here.
21748
21749         * driver.cs: Move the test for using validity after the types have
21750         been entered, so we do a single pass that also includes the using
21751         aliases. 
21752
21753         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
21754         in the regular case.   CreateSiblingForFinally is doing extra
21755         error checking.
21756
21757         * attribute.cs (GetAttributeArgumentExpression): Store the result
21758         on an out value, and use the return value to indicate failure
21759         instead of using null (which is a valid return for Constant.GetValue).
21760
21761         * statement.cs: Perform the analysis flow for the increment
21762         portion after the statement, because this will be the real flow of
21763         execution.  Fixes #42385
21764
21765         * codegen.cs (EmitContext.EmitArgument,
21766         EmitContext.EmitStoreArgument): New helper functions when the
21767         RemapToProxy flag is set.
21768
21769         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
21770         function.
21771
21772         Add support for remapping parameters. 
21773
21774         * iterators.cs: Propagate parameter values;  Store parameter
21775         values in the proxy classes.
21776
21777 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
21778
21779         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
21780         need a proxy reference;  I do not know what I was thinking
21781
21782         * cs-parser.jay (constructor_initializer): catch another error,
21783         and display nice message.
21784
21785         (field_declaration): catch void field declaration
21786         to flag a better error. 
21787
21788         * class.cs (MemberBase.CheckBase): Report an error instead of a
21789         warning if a new protected member is declared in a struct. 
21790         (Field.Define): catch the error of readonly/volatile.
21791
21792         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
21793
21794         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
21795         volatile variable is taken
21796
21797 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
21798
21799         * statement.cs (Fixed.Resolve): Report an error if we are not in
21800         an unsafe context.
21801
21802 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
21803
21804         * typemanager.cs: reuse the code that handles type clashes for
21805         delegates and enumerations.
21806
21807         * class.cs (Report28): Always report.
21808
21809         * expression.cs (EncodeAsAttribute): Allow nulls here.
21810
21811 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
21812
21813         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
21814         the functionality for testing whether an expression is valid for
21815         an attribute here.  Also handle the case of arrays of elements
21816         being stored. 
21817
21818         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
21819         encoding a linear array into an array of objects that are suitable
21820         to be passed to an CustomAttributeBuilder.
21821
21822         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
21823
21824         * ecore.cs: (FieldExpr): Handle field remapping here.
21825
21826         * iteratators.cs: Pass the instance variable (if the method is an
21827         instance method) to the constructors, so we can access the field
21828         variables on the class.
21829
21830         TODO: Test this with structs.  I think the THIS variable on
21831         structs might have to be a pointer, and not a refenrece
21832
21833 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
21834
21835         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
21836         local variables to fields in a proxy class.
21837
21838         * iterators.cs (PopulateProxy): Rename our internal fields to
21839         <XXX>.  
21840         Create a <THIS> field if we are an instance method, so we can
21841         reference our parent container variables.
21842         (MapVariable): Called back from the EmitContext code to enter a
21843         new variable to field mapping into the proxy class (we just create
21844         a FieldBuilder).
21845
21846         * expression.cs
21847         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
21848         for using the remapped locals to fields.
21849
21850         I placed the code here, because that gives the same semantics to
21851         local variables, and only changes the Emit code.
21852
21853         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
21854         statements inside iterators.
21855         (VariableInfo): Add a FieldBuilder for the cases when we are
21856         remapping local variables to fields in a proxy class
21857
21858         * ecore.cs (SimpleNameResolve): Avoid testing two times for
21859         current_block != null.
21860
21861         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
21862         not cope with strings, as it has been moved to the
21863         TableSwitchEmit.  Fixed bug in switch generation.
21864
21865         * expression.cs (New.DoResolve): Provide more context for the user
21866         when reporting an error.
21867
21868         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
21869         pointers. 
21870
21871         * expression.cs (MemberAccess.DoResolve): When we get a type back,
21872         check the permissions for it.  Note than in a type-resolution
21873         context the check was already present in DeclSpace.ResolveType,
21874         but was missing from the MemberAccess.
21875
21876         (ArrayCreation.CheckIndices): warn if the user has
21877         more nested levels of expressions, but there are no more
21878         dimensions specified.  Avoids crash on bug 41906.
21879
21880 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
21881
21882         * statement.cs (Block): replace Implicit bool, for a generic
21883         flags.   
21884         New flag: `Unchecked'.  This is used during the EmitMeta phase
21885         (which is out-of-line with the regular Resolve/Emit process for a
21886         statement, as this is done ahead of time, but still gets a chance
21887         to call constant resolve).
21888
21889         (Block.Flags): new enum for adding a new flag.
21890
21891         (Block.EmitMeta): track the state of unchecked.
21892
21893         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
21894         to enable constant resolution to work there as well.
21895
21896 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
21897
21898         * typemanager.cs (ienumerable_type): Also look up
21899         System.Collections.IEnumerable. 
21900
21901 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
21902
21903         TODO: Test more than one conditional per method.
21904
21905         * class.cs (Indexer.Define): Report the location where the user is
21906         referencing the unsupported feature.
21907
21908         (MethodData): Overload the use of `conditionals' to
21909         minimize the creation of needless ArrayLists.   This saves roughly
21910         212kb on my machine.
21911
21912         (Method): Implement the new IIteratorContainer interface.
21913         (Method.SetYields): Implement the method by setting the ModFlags
21914         to contain METHOD_YIELDS.
21915
21916         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
21917         which just got set to null.
21918
21919         * iterators.cs: New file.
21920
21921         (Yield, YieldBreak): New statements.
21922
21923         * statement.cs (Return.Resolve): Flag an error if we are used in
21924         an iterator method.
21925
21926         * codegen.cs (InIterator): New flag set if the code is being
21927         compiled in an iterator method.
21928
21929         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
21930         internal modifier, and we just use it to avoid adding extra
21931         fields, as this is seldom used.  
21932
21933         * cs-parser.jay: Add yield_statement (yield and yield break).
21934
21935         * driver.cs: New flag -v2 to turn on version 2 features. 
21936
21937         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
21938         hashtable when v2 is enabled.
21939
21940 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
21941
21942         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
21943         there is already a namespace defined with this name.
21944
21945         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
21946         people upgraded their corlibs.
21947
21948         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
21949         always use fully qualified types, no need to use the compiler
21950         front end.
21951
21952         (TypeManager.IsNamespace): Use binarysearch.
21953
21954         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
21955         AddDelegate): I did not quite use the new IsValid API properly: I
21956         have to pass the short-name and the fullname.  I was passing only
21957         the basename instead of the fullname sometimes. 
21958
21959         (TypeContainer.DefineType): call NamespaceClash.
21960
21961         * interface.cs (Interface.DefineType): use NamespaceClash before
21962         defining the type.
21963
21964         * delegate.cs (Delegate.DefineType): use NamespaceClash before
21965         defining the type.
21966
21967         * enum.cs: (Enum.DefineType): use NamespaceClash before
21968         defining the type.
21969
21970         * typemanager.cs (: 3-line patch that gives us some tasty 11%
21971         speed increase.  First, use the negative_hits cache when we get a
21972         negative.  Second, add the type with its full original name
21973         instead of the new . and + encoded name (reflection uses + to
21974         separate type from a nested type).  Use LookupTypeReflection
21975         directly which bypasses the type->name hashtable (that we already
21976         know does not contain the type.
21977
21978         * decl.cs (DeclSpace.ResolveTypeExpr): track the
21979         location/container type. 
21980
21981         * driver.cs: When passing utf8, use directly the UTF8Encoding.
21982
21983 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
21984
21985         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
21986
21987         * delegate.cs (NewDelegate.Resolve): Test whether an instance
21988         method is being referenced in the method group from a static
21989         context, and report error 120 if so.
21990
21991         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
21992         Error118. 
21993
21994         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
21995         is created, we create the A namespace).
21996
21997         * cs-parser.jay: A namespace also introduces a DeclarationFound.
21998         Fixes #41591
21999
22000 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
22001
22002         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
22003         invocation to ModuleBuilder.GetType with the same values will
22004         return a new type instance, so we need to cache its return
22005         values. 
22006
22007         * expression.cs (Binary.ResolveOperator): Only allow the compare
22008         operators on enums if they are of the same type.
22009
22010         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
22011         types of ValueType on their own case.  Before we were giving them
22012         the same treatment as objects.
22013
22014         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
22015         fullname.  Short name is used to compare against container name.
22016         Fullname is used to check against defined namespace names.
22017
22018         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
22019         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
22020
22021         (Method.CheckBase): Call parent.
22022         (MemberBase.CheckBase): Check for protected members on sealed
22023         classes.
22024         (PropertyBase.CheckBase): Call parent.
22025         (Field.Define): Call parent.
22026
22027         * report.cs: Negative error codes are now mapped to 8000 - code,
22028         so that the display is render more nicely.
22029
22030         * typemanager.cs: Do not use try/catch, instead report a regular
22031         error. 
22032
22033         (GetPointerType, GetReferenceType): These methods provide
22034         mechanisms to obtain the T* and T& from a T.  We had the code
22035         previously scattered around the code base, and it also used
22036         TypeManager.LookupType that would go through plenty of caches.
22037         This one goes directly to the type source.
22038
22039         In some places we did the Type.GetType followed by
22040         ModuleBuilder.GetType, but not in others, so this unifies the
22041         processing as well.
22042
22043         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
22044         statements now that we have namespace information.
22045
22046         * typemanager.cs (IsNamespace): New method, returns whether the
22047         string presented is a namespace or not.
22048
22049         (ComputeNamespaces): New public entry point, computes the list of
22050         available namespaces, using the GetNamespaces API call in Mono, or
22051         the slower version in MS.NET.   
22052
22053         Now before we start the semantic analysis phase, we have a
22054         complete list of namespaces including everything that the user has
22055         provided.
22056
22057         Deleted old code to cache namespaces in .nsc files.
22058
22059 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
22060
22061         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
22062         class/struct location definition Location for the implicit
22063         constructor location.
22064
22065         (Operator.Define): Use the location of the operator for the
22066         implicit Method definition.
22067
22068         (Constructor.Emit): use the constructor location for the implicit
22069         base initializer constructor.
22070
22071         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
22072         and the Expression class now contains two new methods:
22073
22074         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
22075         isolate type lookup from the rest of the resolution process.
22076
22077         Since we use Expressions to hold type definitions due to the way
22078         we parse the input we have historically overloaded Resolve to
22079         perform the Type lookups if a special flag is passed.  Now this is
22080         eliminated and two methods take their place. 
22081
22082         The differences in the two methods between xStep and xTerminal is
22083         that xStep is involved in our current lookup system that uses
22084         SimpleNames to compose a name, while xTerminal is used just to
22085         catch the case where the simplename lookup failed.
22086
22087 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
22088
22089         * expression.cs (ResolveMemberAccess): Remove redundant code.
22090         TypeExpr expressions are always born fully resolved.
22091
22092         * interface.cs (PopulateMethod): Do not lookup the types twice.
22093         We were doing it once during SemanticAnalysis and once during
22094         PopulateMethod.
22095
22096         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
22097         in local variable type definitions, were being returned as a
22098         SimpleName (we decomposed everything into a string), that is
22099         because primary_expression was being used instead of a type in the
22100         grammar (reduce/reduce conflicts).
22101
22102         The part that was wrong is that we converted the expression into a
22103         string (an oversimplification in one hand, compounded with primary
22104         expressions doing string concatenation).
22105
22106         So things like:
22107
22108         A.B.C [] x;
22109
22110         Would return "A.B.C[]" as a SimpleName.  This stopped things like
22111         using clauses from working on this particular context.  And a type
22112         was being matched directly against "A.B.C[]".
22113
22114         We now use the correct approach, and allow for ComposedCast to be
22115         part of the unary expression.  So the "A.B.C []" become a composed
22116         cast of "A.B.C" (as a nested group of MemberAccess with a
22117         SimpleName at the end) plus the rank composition "[]". 
22118
22119         Also fixes 35567
22120
22121 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
22122
22123         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
22124         for the access level checking.
22125
22126         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
22127         `TypeContainer container', because I kept getting confused when I
22128         was debugging this code.
22129
22130         * expression.cs (Indexers): Instead of tracking getters/setters,
22131         we now track them in parallel.  We create one arraylist less, but
22132         most importantly it is possible now for the LValue code to find a
22133         matching get for a set.
22134
22135         (IndexerAccess.DoResolveLValue): Update the code.
22136         GetIndexersForType has been modified already to extract all the
22137         indexers from a type.  The code assumed it did not.
22138
22139         Also make the code set the correct return type for the indexer.
22140         This was fixed a long time ago for properties, but was missing for
22141         indexers.  It used to be void_type.
22142
22143         (Binary.Emit): Test first for doubles instead of
22144         floats, as they are more common.
22145
22146         (Binary.EmitBranchable): Use the .un version of the branch opcodes
22147         when dealing with floats and the <=, >= operators.  This fixes bug
22148         #39314 
22149
22150         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
22151         to load the array value by emitting a load on the foreach variable
22152         type.  This was incorrect.  
22153
22154         We now emit the code to load an element using the the array
22155         variable type, and then we emit the conversion operator.
22156
22157         Fixed #40176
22158
22159 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
22160
22161         * attribute.cs: Avoid allocation of ArrayLists in the common case.
22162
22163 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
22164
22165         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
22166         test for protection before we test for signatures. 
22167
22168         (MethodSignature.ToString): implement.
22169
22170         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
22171         to the case where we reduced into a LongConstant.
22172
22173         * decl.cs (CheckAccessLevel): If the type is an array, we can not
22174         depend on whether the information is acurrate, because the
22175         Microsoft runtime will always claim that the array type is public,
22176         regardless of the real state.
22177
22178         If the type is a pointer, another problem happens: the type is
22179         reported as non-public in Microsoft.  
22180
22181         In both cases we have to call CheckAccessLevel recursively with
22182         the underlying type as the argument to be tested.
22183
22184 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
22185
22186         * assign.cs (Assign.Emit): If we are dealing with a compound
22187         assignment expression, we should use the code path that stores the
22188         intermediate result in a temporary value.  This fixes #40903.
22189
22190         *expression.cs (Indirection.ToString): Provide ToString method for
22191         debugging. 
22192
22193 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
22194
22195         * class.cs: Null out fields holding references to Block objects so
22196         they can be garbage collected.
22197
22198         * expression.cs (OverloadResolve): Remove unused local.
22199
22200 2003-04-07  Martin Baulig  <martin@ximian.com>
22201
22202         * codegen.cs (EmitContext.CurrentFile): New public field.
22203         (EmitContext.Mark): Use the CurrentFile to check whether the
22204         location is in the correct file.
22205         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
22206
22207 2003-04-07  Martin Baulig  <martin@ximian.com>
22208
22209         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
22210
22211         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
22212         location.  [FIXME: The location argument which gets passed to this
22213         method is sometimes wrong!]
22214
22215 2003-04-07  Nick Drochak <ndrochak@gol.com>
22216
22217         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
22218
22219 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
22220
22221         * expression.cs (Indirection.EmitAssign): We were using the
22222         temporary, but returning immediately instead of continuing the
22223         EmitAssing flow.
22224
22225 2003-04-06  Martin Baulig  <martin@ximian.com>
22226
22227         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
22228         if it's a nested child, but also deriving from the outer class.
22229         See test 190.cs.
22230
22231         * typemanager.cs (IsNestedChildOf): Make this work if it's a
22232         nested child, but also deriving from the outer class.  See
22233         test-190.cs.
22234         (FilterWithClosure): We may access private members of the outer
22235         class if we're a nested child and deriving from the outer class.
22236         (RealMemberLookup): Only set `closure_private_ok' if the
22237         `original_bf' contained BindingFlags.NonPublic.
22238
22239 2003-04-05  Martin Baulig  <martin@ximian.com>
22240
22241         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #40670.
22242
22243 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
22244
22245         * class.cs (Event.Define): Do not allow abstract events to have
22246         initializers. 
22247
22248 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
22249
22250         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
22251         block in event declarations.
22252
22253         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
22254         value type, get its address.
22255
22256         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
22257         leaving a class on the stack instead of a boolean value (int
22258         0/1).  Change the code so we compare against null, and then the
22259         result against zero.
22260
22261         * class.cs (TypeContainer.GetClassBases): We were checking for the
22262         parent class being sealed too late.
22263
22264         * expression.cs (Binary.Emit): For <= and >= when dealing with
22265         floating point values, use cgt.un and clt.un instead of cgt and
22266         clt alone.
22267
22268 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
22269
22270         * statement.cs: Apply the same optimization as MS: skip the 
22271         GetEnumerator returning an IEnumerator, and use the one returning a 
22272         CharEnumerator instead. This allows us to avoid the try-finally block 
22273         and the boxing.
22274
22275 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
22276
22277         * cs-parser.jay: Attributes cannot be applied to
22278                          namespaces. Fixes #40473
22279
22280 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22281
22282         * class.cs:
22283         (Add*): check if the name is valid using the full name for constants,
22284         fields, properties and events.
22285
22286 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
22287
22288         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
22289         char constants to be part of the enumeration.
22290
22291         * expression.cs (Conditional.DoResolve): Add support for operator
22292         true. Implements the missing functionality from 14.12
22293
22294         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
22295         operator true/false as required by the spec.
22296
22297         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
22298         implicit conversion to boolean.
22299
22300         * statement.cs (Statement.ResolveBoolean): A boolean expression is
22301         also one where the type implements `operator true'. 
22302
22303         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
22304         get an expression that will invoke operator true based on an
22305         expression.  
22306
22307         (GetConversionOperators): Removed the hack that called op_True
22308         here.  
22309
22310         (Expression.ResolveBoolean): Move this from Statement.
22311
22312 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
22313
22314         * ecore.cs (FieldExpr): do not allow initialization of initonly
22315         fields on derived classes
22316
22317 2003-03-13  Martin Baulig  <martin@ximian.com>
22318
22319         * statement.cs (Block.Emit): Call ig.BeginScope() and
22320         ig.EndScope() when compiling with debugging info; call
22321         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
22322
22323 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
22324
22325         * expression.cs (Indexers): Do not construct immediately, allow
22326         for new members to be appended as we go.  Fixes 38143
22327
22328 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22329
22330         * expression.cs: save/restore context when resolving an unchecked
22331         expression.
22332
22333 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
22334
22335         * cfold.cs: Catch division by zero in modulus operator during
22336         constant folding.
22337
22338 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
22339
22340         * interface.cs (Interface.DefineMembers): Avoid defining members
22341         twice. 
22342
22343 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
22344
22345         * driver.cs: handle the +/- options for -noconfig
22346
22347         * statement.cs (Unckeched.Resolve): Also track the state of
22348         unchecked in the Resolve phase.
22349
22350 2003-02-27  Martin Baulig  <martin@ximian.com>
22351
22352         * ecore.cs (Expression.MemberLookup): Don't create a
22353         MethodGroupExpr for something which is not a method.  Fixes #38291.
22354
22355 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
22356
22357         * class.cs (MemberBase.CheckParameters): Also check that the type
22358         is unmanaged if it is a pointer.
22359
22360         * expression.cs (SizeOf.Resolve): Add location information.
22361
22362         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
22363         a managed type is declared.
22364
22365         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
22366         parameter modifiers as well.  Fixes bug 38606
22367
22368         * class.cs: Very sad.  Am backing out the speed up changes
22369         introduced by the ArrayList -> Array in the TypeContainer, as they
22370         were not actually that much faster, and introduced a bug (no error
22371         reports on duplicated methods).
22372
22373         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
22374         source first, this will guarantee that we have a valid expression
22375         before calling in lower levels functions that will require a
22376         resolved object.  Then use this original_source in the
22377         target.ResolveLValue instead of the original source that was
22378         passed to us.
22379
22380         Another change.  Use target.Resolve instead of LValueResolve.
22381         Although we are resolving for LValues, we will let the Assign code
22382         take care of that (it will be called again from Resolve).  This
22383         basically allows code like this:
22384
22385         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
22386         class Y { void A (X x) { x [0] += o; }
22387
22388         The problem was that the indexer was trying to resolve for
22389         set_Item (idx, object o) and never finding one.  The real set_Item
22390         was set_Item (idx, X).  By delaying the process we get the right
22391         semantics. 
22392
22393         Fixes bug 36505
22394
22395 2003-02-23  Martin Baulig  <martin@ximian.com>
22396
22397         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
22398         while calling DoEmit ().
22399
22400         * codegen.cs (EmitContext.Mark): Don't mark locations in other
22401         source files; if you use the #line directive inside a method, the
22402         compiler stops emitting line numbers for the debugger until it
22403         reaches the end of the method or another #line directive which
22404         restores the original file.
22405
22406 2003-02-23  Martin Baulig  <martin@ximian.com>
22407
22408         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
22409
22410 2003-02-23  Martin Baulig  <martin@ximian.com>
22411
22412         * statement.cs (Block.AddChildVariableNames): We need to call this
22413         recursively, not just for our immediate children.
22414
22415 2003-02-23  Martin Baulig  <martin@ximian.com>
22416
22417         * class.cs (Event.Define): Always make the field private, like csc does.
22418
22419         * typemanager.cs (TypeManager.RealMemberLookup): Make events
22420         actually work, fixes bug #37521.
22421
22422 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
22423
22424         * delegate.cs: When creating the various temporary "Parameters"
22425         classes, make sure that we call the ComputeAndDefineParameterTypes
22426         on those new parameters (just like we do with the formal ones), to
22427         allow them to be resolved in the context of the DeclSpace.
22428
22429         This fixes the bug that Dick observed in Bugzilla #38530.
22430
22431 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
22432
22433         * expression.cs (ResolveMemberAccess): When resolving a constant,
22434         do not attempt to pull a constant if the value was not able to
22435         generate a valid constant.
22436
22437         * const.cs (LookupConstantValue): Do not report more errors than required.
22438
22439 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22440
22441         * expression.cs: fixes bug #38328.
22442
22443 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
22444
22445         * class.cs: Changed all the various members that can be part of a
22446         class from being an ArrayList to be an Array of the right type.
22447         During the DefineType type_list, interface_list, delegate_list and
22448         enum_list are turned into types, interfaces, delegates and enums
22449         arrays.  
22450
22451         And during the member population, indexer_list, event_list,
22452         constant_list, field_list, instance_constructor_list, method_list,
22453         operator_list and property_list are turned into their real arrays.
22454
22455         Although we could probably perform this operation earlier, for
22456         good error reporting we need to keep the lists and remove the
22457         lists for longer than required.
22458
22459         This optimization was triggered by Paolo profiling the compiler
22460         speed on the output of `gen-sample-program.pl' perl script. 
22461
22462         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
22463         not crash in methods like MemberLookupFailed that use this field.  
22464
22465         This problem arises when the compiler fails to resolve a type
22466         during interface type definition for example.
22467
22468 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
22469
22470         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
22471         inherit from System.Object, so we have to stop at null, not only
22472         when reaching System.Object.
22473
22474 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
22475
22476         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
22477         DeclaredOnly because the parent indexer might have had a different
22478         name, but did not loop until the top of the hierarchy was reached.
22479
22480         The problem this one fixes is 35492: when a class implemented an
22481         indexer from an interface, we were getting the interface method
22482         (which was abstract) and we were flagging an error (can not invoke
22483         abstract method).
22484
22485         This also keeps bug 33089 functioning, and test-148 functioning.
22486
22487         * typemanager.cs (IsSpecialMethod): The correct way of figuring
22488         out if a method is special is to see if it is declared in a
22489         property or event, or whether it is one of the predefined operator
22490         names.   This should fix correctly #36804.
22491
22492 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
22493
22494         The goal here is to remove the dependency on EmptyCast.Peel ().
22495         Killing it completely.
22496
22497         The problem is that currently in a number of places where
22498         constants are expected, we have to "probe" for an EmptyCast, and
22499         Peel, which is not the correct thing to do, as this will be
22500         repetitive and will likely lead to errors. 
22501
22502         The idea is to remove any EmptyCasts that are used in casts that
22503         can be reduced to constants, so we only have to cope with
22504         constants. 
22505
22506         This bug hunt was triggered by Bug 37363 and the desire to remove
22507         the duplicate pattern where we were "peeling" emptycasts to check
22508         whether they were constants.  Now constants will always be
22509         constants.
22510
22511         * ecore.cs: Use an enumconstant here instead of wrapping with
22512         EmptyCast.  
22513
22514         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
22515         throwing me off.  By handling this we can get rid of a few hacks.
22516
22517         * statement.cs (Switch): Removed Peel() code.
22518
22519 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
22520
22521         * class.cs: Location information for error 508
22522
22523         * expression.cs (New.DoResolve): Add a guard against double
22524         resolution of an expression.  
22525
22526         The New DoResolve might be called twice when initializing field
22527         expressions (see EmitFieldInitializers, the call to
22528         GetInitializerExpression will perform a resolve on the expression,
22529         and later the assign will trigger another resolution
22530
22531         This leads to bugs (#37014)
22532
22533         * delegate.cs: The signature for EndInvoke should contain any ref
22534         or out parameters as well.  We were not doing this in the past. 
22535
22536         * class.cs (Field.Define): Do not overwrite the type definition
22537         inside the `volatile' group.  Turns out that volatile enumerations
22538         were changing the type here to perform a validity test, which
22539         broke conversions. 
22540
22541 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
22542
22543         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
22544         and structs, we do not want to load the instance variable
22545
22546         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
22547         enum_type has to be handled like an object reference (implicit
22548         conversions exists from this to object), but the regular IsClass
22549         and IsValueType tests will never return true for this one.
22550
22551         Also we use TypeManager.IsValueType instead of type.IsValueType,
22552         just for consistency with the rest of the code (this is only
22553         needed if we ever use the construct exposed by test-180.cs inside
22554         corlib, which we dont today).
22555
22556 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
22557
22558         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
22559         just InternalCall.
22560
22561 2003-02-09  Martin Baulig  <martin@ximian.com>
22562
22563         * namespace.cs (Namespace..ctor): Added SourceFile argument.
22564         (Namespace.DefineNamespaces): New static public method; this is
22565         called when we're compiling with debugging to add all namespaces
22566         to the symbol file.
22567
22568         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
22569         pass it to the Namespace's .ctor.
22570
22571         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
22572         and MethodBase arguments; pass the namespace ID to the symwriter;
22573         pass the MethodBase instead of the token to the symwriter.
22574         (SymbolWriter.DefineNamespace): New method to add a namespace to
22575         the symbol file.
22576
22577 2003-02-09  Martin Baulig  <martin@ximian.com>
22578
22579         * symbolwriter.cs: New file.  This is a wrapper around
22580         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
22581         methods here in near future.
22582
22583 2003-02-09  Martin Baulig  <martin@ximian.com>
22584
22585         * codegen.cs (EmitContext.Mark): Just pass the arguments to
22586         ILGenerator.MarkSequencePoint() which are actually used by the
22587         symbol writer.
22588
22589 2003-02-09  Martin Baulig  <martin@ximian.com>
22590
22591         * location.cs (SourceFile): New public sealed class.  This
22592         contains the name and an index which is used in the location's token.
22593         (Location): Reserve an appropriate number of bits in the token for
22594         the source file instead of walking over that list, this gives us a
22595         really huge performance improvement when compiling with debugging.
22596
22597         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
22598         `SourceFile' argument instead of a string.
22599         (Driver.ProcessFile): Add all the files via Location.AddFile(),
22600         but don't parse/tokenize here, we need to generate the list of all
22601         source files before we do that.
22602         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
22603         the files.
22604
22605         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
22606         instead of a string.
22607
22608         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
22609         of a string.
22610
22611 2003-02-09  Martin Baulig  <martin@ximian.com>
22612
22613         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
22614         filename on `#line default'.
22615
22616 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
22617
22618         * statement.cs: don't clear the pinned var when the fixed statement
22619         returns from the method (fixes bug#37752).
22620
22621 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
22622
22623         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
22624         to IsValueType.
22625
22626 2003-02-07  Martin Baulig  <martin@ximian.com>
22627
22628         * driver.cs: Removed the `--debug-args' command line argument.
22629
22630         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
22631         automatically by the AsssemblyBuilder.
22632         (CodeGen.InitializeSymbolWriter): We don't need to call any
22633         initialization function on the symbol writer anymore.  This method
22634         doesn't take any arguments.
22635
22636 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
22637
22638         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
22639         from referenced assemblies as well.
22640
22641 2003-02-02  Martin Baulig  <martin@ximian.com>
22642
22643         * class.cs (MethodData.Emit): Generate debugging info for external methods.
22644
22645 2003-02-02  Martin Baulig  <martin@ximian.com>
22646
22647         * class.cs (Constructor.Emit): Open the symbol writer before
22648         emitting the constructor initializer.
22649         (ConstructorInitializer.Emit): Call ec.Mark() to allow
22650         single-stepping through constructor initializers.
22651
22652 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
22653
22654         * class.cs: Handle error 549: do not allow virtual methods in
22655         sealed classes. 
22656
22657 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
22658
22659         * decl.cs: Check access levels when resolving types
22660
22661 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
22662
22663         * statement.cs: Add parameters and locals set in catch blocks that might 
22664         return to set vector
22665
22666 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
22667
22668         * class.cs (Operator): Set the SpecialName flags for operators.
22669
22670         * expression.cs (Invocation.DoResolve): Only block calls to
22671         accessors and operators on SpecialName methods.
22672
22673         (Cast.TryReduce): Handle conversions from char constants.
22674
22675
22676 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
22677
22678         * statement.cs: small memory and time optimization in FlowBranching.
22679
22680 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
22681
22682         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
22683         problem that the last fix but in the other sid (Set).
22684
22685         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
22686         access when there is no indexer in the hierarchy.
22687
22688 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
22689
22690         * class.cs: Combine some if statements.
22691
22692 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22693
22694         * driver.cs: fixed bug #37187.
22695
22696 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
22697
22698         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
22699         any indexer, it's needed to build a list with all the indexers in the
22700         hierarchy (AllGetters), else we have problems. Fixes #35653.
22701
22702 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
22703
22704         * class.cs (MethodData.Define): It is wrong for an interface
22705         implementation to be static in both cases: explicit and implicit.
22706         We were only handling this in one case.
22707
22708         Improve the if situation there to not have negations.
22709
22710         * class.cs (Field.Define): Turns out that we do not need to check
22711         the unsafe bit on field definition, only on usage.  Remove the test.
22712
22713 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22714
22715         * driver.cs: use assembly.Location instead of Codebase (the latest
22716         patch made mcs fail when using MS assemblies).
22717
22718 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
22719
22720         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
22721         get the path to *corlib.dll.
22722
22723 2003-01-21  Nick Drochak <ndrochak@gol.com>
22724
22725         * cs-tokenizer.cs:
22726         * pending.cs:
22727         * typemanager.cs: Remove compiler warnings
22728
22729 2003-01-20  Duncan Mak  <duncan@ximian.com>
22730
22731         * AssemblyInfo.cs: Bump the version number to 0.19.
22732
22733 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22734
22735         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
22736
22737 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
22738
22739         * class.cs (Constructor::Emit): Emit debugging info for constructors.
22740
22741 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
22742
22743         * cs-parser.jay: Small fix: we were not comparing the constructor
22744         name correctly.   Thanks to Zoltan for the initial pointer.
22745
22746 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
22747
22748         * cs-tokenizer.cs: Set file name when specified with #line
22749
22750 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
22751
22752         * cs-parser.jay: Only perform the constructor checks here if we
22753         are named like the class;  This will help provider a better
22754         error.  The constructor path is taken when a type definition is
22755         not found, but most likely the user forgot to add the type, so
22756         report that rather than the constructor error.
22757
22758 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
22759
22760         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
22761         allocations.
22762
22763 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
22764
22765         * cs-parser.jay: Add cleanup call.
22766
22767 2003-01-13  Duncan Mak  <duncan@ximian.com>
22768
22769         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
22770         consistent with other methods.
22771
22772 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
22773
22774         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
22775
22776 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
22777
22778         * attribute.cs: only set GuidAttr to true when we have a
22779         GuidAttribute.
22780
22781 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22782
22783         * ecore.cs:
22784         * expression.cs:
22785         * typemanager.cs: fixes to allow mcs compile corlib with the new
22786         Type.IsSubclassOf fix.
22787
22788 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
22789
22790         * expression.cs (LocalVariableReference.DoResolve): Classify a
22791         constant as a value, not as a variable.   Also, set the type for
22792         the variable.
22793
22794         * cs-parser.jay (fixed_statement): take a type instead of a
22795         pointer_type, so we can produce a better error message later.
22796
22797         * statement.cs (Fixed.Resolve): Flag types that are not pointers
22798         as an error.  
22799
22800         (For.DoEmit): Make inifinite loops have a
22801         non-conditional branch back.
22802
22803         (Fixed.DoEmit): First populate the pinned variables, then emit the
22804         statement, then clear the variables.  Before I was emitting the
22805         code once for each fixed piece.
22806
22807
22808 2003-01-08  Martin Baulig  <martin@ximian.com>
22809
22810         * statement.cs (FlowBranching.MergeChild): A break in a
22811         SWITCH_SECTION does not leave a loop.  Fixes #36155.
22812
22813 2003-01-08  Martin Baulig  <martin@ximian.com>
22814
22815         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
22816         lives in the same number space than `param_map'.  Fixes #36154.
22817
22818 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
22819
22820         * cs-parser.jay (constructor_declaration): Set the
22821         Constructor.ModFlags before probing for it.  This makes the
22822         compiler report 514, 515 and 132 (the code was there, but got
22823         broken). 
22824
22825         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
22826         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
22827         (GotoCase.Resolve): Set `Returns' to ALWAYS.
22828
22829 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
22830
22831         * enum.cs: create the enum static fields using the enum type.
22832
22833 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
22834
22835         * class.cs: don't try to create the ParamBuilder for the return
22836         type if it's not needed (and handle it breaking for the ms runtime
22837         anyway).
22838
22839 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
22840
22841         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
22842
22843 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
22844
22845         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
22846         the command.   This showed up while compiling the JANET source
22847         code, which used \r as its only newline separator.
22848
22849 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
22850
22851         * class.cs (Method.Define): If we are an operator (because it
22852         reuses our code), then set the SpecialName and HideBySig.  #36128
22853
22854 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
22855
22856         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
22857         exception, report error 120 `object reference required'.
22858
22859         * driver.cs: Add --pause option, used during to measure the size
22860         of the process as it goes with --timestamp.
22861
22862         * expression.cs (Invocation.DoResolve): Do not allow methods with
22863         SpecialName to be invoked.
22864
22865 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
22866
22867         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
22868         number before adding it.
22869
22870 2002-12-21  Ravi Pratap  <ravi@ximian.com>
22871
22872         * ecore.cs (StandardImplicitConversion): When in an unsafe
22873         context, we allow conversion between void * to any other pointer
22874         type. This fixes bug #35973.
22875
22876 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
22877
22878         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
22879         is not thrown when extensionless outputs are used 
22880
22881 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22882
22883         * rootcontext.cs: fixed compilation of corlib.
22884
22885 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
22886
22887         * attribute.cs (Attributes.Contains): Add new method.
22888
22889         * class.cs (MethodCore.LabelParameters): if the parameter is an
22890         `out' parameter, check that no attribute `[In]' has been passed.
22891
22892         * enum.cs: Handle the `value__' name in an enumeration.
22893
22894 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
22895
22896         * decl.cs: Added special case to allow overrides on "protected
22897         internal" methods
22898
22899 2002-12-18  Ravi Pratap  <ravi@ximian.com>
22900
22901         * attribute.cs (Attributes.AddAttributeSection): Rename to this
22902         since it makes much more sense.
22903
22904         (Attributes.ctor): Don't require a Location parameter.
22905
22906         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
22907
22908         * attribute.cs (ApplyAttributes): Remove extra Location parameters
22909         since we already have that information per attribute.
22910
22911         * everywhere : make appropriate changes.
22912
22913         * class.cs (LabelParameters): Write the code which actually
22914         applies attributes to the return type. We can't do this on the MS
22915         .NET runtime so we flag a warning in the case an exception is
22916         thrown.
22917
22918 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
22919
22920         * const.cs: Handle implicit null conversions here too.
22921
22922 2002-12-17  Ravi Pratap  <ravi@ximian.com>
22923
22924         * class.cs (MethodCore.LabelParameters): Remove the extra
22925         Type [] parameter since it is completely unnecessary. Instead
22926         pass in the method's attributes so that we can extract
22927         the "return" attribute.
22928
22929 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
22930
22931         * cs-parser.jay (parse): Use Report.Error to flag errors instead
22932         of ignoring it and letting the compile continue.
22933
22934         * typemanager.cs (ChangeType): use an extra argument to return an
22935         error condition instead of throwing an exception.
22936
22937 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
22938
22939         * expression.cs (Unary.TryReduce): mimic the code for the regular
22940         code path.  Perform an implicit cast in the cases where we can
22941         implicitly convert to one of the integral types, and then reduce
22942         based on that constant.   This fixes bug #35483.
22943
22944 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22945
22946         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
22947
22948 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22949
22950         * namespace.cs: fixed bug #35489.
22951
22952 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
22953
22954         * class.cs: Remove some dead code.
22955
22956         * cs-parser.jay: Estimate the number of methods needed
22957         (RootContext.MethodCount);
22958
22959         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
22960         numbers instead of StringBuilders.
22961
22962         * support.cs (PtrHashtable): Add constructor with initial size;
22963         We can now reduce reallocations of the method table.
22964
22965 2002-12-10  Ravi Pratap  <ravi@ximian.com>
22966
22967         * attribute.cs (ApplyAttributes): Keep track of the emitted
22968         attributes on a per-target basis. This fixes bug #35413.
22969
22970 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
22971
22972         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
22973         default to the Windows 1252 encoding.
22974
22975         (UnixParseOption): Support version, thanks to Alp for the missing
22976         pointer. 
22977
22978         * AssemblyInfo.cs: Add nice assembly information.
22979
22980         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
22981         (bug 35169).
22982
22983         * cs-parser.jay: Allow a trailing comma before the close bracked
22984         in the attribute_section production.
22985
22986         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
22987         address of the instance was being taken, I will take this out,
22988         because we take the address of the object immediately here.
22989
22990 2002-12-09  Ravi Pratap  <ravi@ximian.com>
22991
22992         * typemanager.cs (AreMultipleAllowed): Take care of the most
22993         obvious case where attribute type is not in the current assembly -
22994         stupid me ;-)
22995
22996 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
22997
22998         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
22999         definitions, instead of doing that afterwards.  
23000
23001         Also we use a nice little hack, depending on the constructor, we
23002         know if we are a "composed" name or a simple name.  Hence, we
23003         avoid the IndexOf test, and we avoid 
23004
23005         * codegen.cs: Add code to assist in a bug reporter to track down
23006         the source of a compiler crash. 
23007
23008 2002-12-07  Ravi Pratap  <ravi@ximian.com>
23009
23010         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
23011         types have been emitted for a given element and flag an error
23012         if something which does not have AllowMultiple set is used more
23013         than once.
23014
23015         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
23016         attribute types and their corresponding AllowMultiple properties
23017
23018         (AreMultipleAllowed): Check the property for a given type.
23019
23020         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
23021         property in the case we have a TypeContainer.
23022
23023         (Attributes.AddAttribute): Detect duplicates and just skip on
23024         adding them. This trivial fix catches a pretty gross error in our
23025         attribute emission - global attributes were being emitted twice!
23026
23027         Bugzilla bug #33187 is now fixed.
23028
23029 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
23030
23031         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
23032         instead of pp_and).
23033
23034         * expression.cs (Binary.ResolveOperator): I can only use the
23035         Concat (string, string, string) and Concat (string, string,
23036         string, string) if the child is actually a concatenation of
23037         strings. 
23038
23039 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
23040
23041         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
23042         context where we need a 2-character lookahead.
23043
23044         * pending.cs (PendingImplementation): Rework so we can keep track
23045         of interface types all the time, and flag those which were
23046         implemented by parents as optional.
23047
23048 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
23049
23050         * expression.cs (Binary.ResolveOperator): Use
23051         String.Concat(string,string,string) or
23052         String.Concat(string,string,string,string) when possible. 
23053
23054         * typemanager: More helper methods.
23055
23056
23057 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
23058
23059         * pending.cs: remove the bogus return from GetMissingInterfaces()
23060         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
23061
23062 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23063
23064         * namespace.cs: avoid duplicated 'using xxx' being added to
23065         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
23066         when we get more than one 'using' statement for the same namespace.
23067         Report a CS0105 warning for it.
23068
23069 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
23070
23071         * cs-tokenizer.cs (consume_identifier): use read directly, instead
23072         of calling getChar/putback, uses internal knowledge of it.    
23073
23074         (xtoken): Reorder tokenizer so most common patterns are checked
23075         first.  This reduces the compilation time in another 5% (from 8.11s
23076         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
23077
23078         The parsing time is 22% of the compilation in mcs, and from that
23079         64% is spent on the tokenization process.  
23080
23081         I tried using a binary search for keywords, but this is slower
23082         than the hashtable.  Another option would be to do a couple of
23083         things:
23084
23085                 * Not use a StringBuilder, instead use an array of chars,
23086                   with a set value.  Notice that this way we could catch
23087                   the 645 error without having to do it *afterwards*.
23088
23089                 * We could write a hand-parser to avoid the hashtable
23090                   compares altogether.
23091
23092         The identifier consumption process takes 37% of the tokenization
23093         time.  Another 15% is spent on is_number.  56% of the time spent
23094         on is_number is spent on Int64.Parse:
23095
23096                 * We could probably choose based on the string length to
23097                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
23098                   computations. 
23099
23100         Another 3% is spend on wrapping `xtoken' in the `token' function.
23101
23102         Handle 0xa0 as whitespace (#34752)
23103
23104 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
23105
23106         * typemanager.cs (IsCLRType): New routine to tell whether a type
23107         is one of the builtin types.  
23108
23109         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
23110         typecode in more places instead of doing pointer comparissions.
23111         We could leverage some knowledge about the way the typecodes are
23112         laid out.
23113
23114         New code to cache namespaces in assemblies, it is currently not
23115         invoked, to be used soon.
23116
23117         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
23118
23119         * expression.cs (Binary.ResolveOperator): specially handle
23120         strings, and do not perform user-defined operator overloading for
23121         built-in types.
23122
23123 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
23124
23125         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
23126         internalcall as it is a pretty simple operation;  Avoid whenever
23127         possible to call Char.IsLetter.
23128
23129         (consume_identifier): Cut by half the number of
23130         hashtable calls by merging the is_keyword and GetKeyword behavior.
23131
23132         Do not short-circuit, because if we do, we
23133         report errors (ie, #if false && true would produce an invalid
23134         directive error);
23135
23136
23137 2002-11-24  Martin Baulig  <martin@ximian.com>
23138
23139         * expression.cs (Cast.TryReduce): If we're in checked syntax,
23140         check constant ranges and report a CS0221.  Fixes #33186.
23141
23142 2002-11-24  Martin Baulig  <martin@ximian.com>
23143
23144         * cs-parser.jay: Make this work for uninitialized variable
23145         declarations in the `for' initializer.  Fixes #32416.
23146
23147 2002-11-24  Martin Baulig  <martin@ximian.com>
23148
23149         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
23150         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
23151
23152 2002-11-24  Martin Baulig  <martin@ximian.com>
23153
23154         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
23155         argument; if true, we also check for user-defined conversions.
23156         This is only needed if both arguments are of a user-defined type.
23157         Fixes #30443, added test-175.cs.
23158         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
23159
23160         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
23161
23162 2002-11-24  Martin Baulig  <martin@ximian.com>
23163
23164         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
23165         function to get the store opcode.
23166         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
23167         only emit the Ldelema if the store opcode is Stobj.  You must run
23168         both test-34 and test-167 to test this.  Fixes #34529.
23169
23170 2002-11-23  Martin Baulig  <martin@ximian.com>
23171
23172         * ecore.cs (Expression.MemberLookup): Added additional
23173         `qualifier_type' argument which is used when we're being called
23174         from MemberAccess.DoResolve() and null if we're called from a
23175         SimpleName lookup.
23176         (Expression.MemberLookupFailed): New method to report errors; this
23177         does the CS1540 check and reports the correct error message.
23178
23179         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
23180         argument for the CS1540 check and redone the way how we're dealing
23181         with private members.  See the comment in the source code for details.
23182         (FilterWithClosure): Reverted this back to revision 1.197; renamed
23183         `closure_start_type' to `closure_qualifier_type' and check whether
23184         it's not null.  It was not this filter being broken, it was just
23185         being called with the wrong arguments.
23186
23187         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
23188         and pass it the correct `qualifier_type'; this also does the error
23189         handling for us.
23190
23191 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
23192
23193         * expression.cs (Invocation.EmitParams): If the we are dealing
23194         with a non-built-in value type, load its address as well.
23195
23196         (ArrayCreation): Use a a pretty constant instead
23197         of the hardcoded value 2.   Use 6 instead of 2 for the number of
23198         static initializers.  
23199
23200         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
23201         because they are not really value types, just glorified integers. 
23202
23203         * driver.cs: Do not append .exe, the CSC compiler does not do it.
23204
23205         * ecore.cs: Remove redundant code for enumerations, make them use
23206         the same code path as everything else, fixes the casting issue
23207         with enumerations in Windows.Forms.
23208
23209         * attribute.cs: Do only cast to string if it is a string, the
23210         validation happens later.
23211
23212         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
23213         people upgrade their corlibs.
23214
23215         * ecore.cs: Oops, enumerations were not following the entire code path
23216
23217 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
23218
23219         * typemanager.cs (FilterWithClosure): Commented out the test for
23220         1540 in typemanager.cs, as it has problems when accessing
23221         protected methods from a parent class (see test-174.cs). 
23222
23223         * attribute.cs (Attribute.ValidateGuid): new method.
23224         (Attribute.Resolve): Use above.
23225
23226 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
23227
23228         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
23229
23230         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
23231         handling for enumerations, as we only needed the TypeContainer
23232         functionality to begin with (this is required for the fix below to
23233         work for enums that reference constants in a container class for
23234         example). 
23235
23236         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
23237
23238         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
23239         a valid TypeBuilder to perform lookups on.o
23240
23241         * class.cs (InheritableMemberSignatureCompare): Use true in the
23242         call to GetGetMethod and GetSetMethod, because we are comparing
23243         the signature, and we need to get the methods *even* if they are
23244         private. 
23245
23246         (PropertyBase.CheckBase): ditto.
23247
23248         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
23249         GotoCase.Resolve): Use Peel on EmpytCasts.
23250
23251         * ecore.cs (EmptyCast): drop child, add Peel method.
23252
23253 2002-11-17  Martin Baulig  <martin@ximian.com>
23254
23255         * ecore.cs (EmptyCast.Child): New public property.
23256
23257         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
23258         label resolved to an EmptyCast.  Fixes #34162.
23259         (GotoCase.Resolve): Likewise.
23260         (Block.EmitMeta): Likewise.
23261
23262 2002-11-17  Martin Baulig  <martin@ximian.com>
23263
23264         * expression.cs (Invocation.BetterConversion): Prefer int over
23265         uint; short over ushort; long over ulong for integer literals.
23266         Use ImplicitConversionExists instead of StandardConversionExists
23267         since we also need to check for user-defined implicit conversions.
23268         Fixes #34165.  Added test-173.cs.
23269
23270 2002-11-16  Martin Baulig  <martin@ximian.com>
23271
23272         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
23273         with the `true' and `false' literals.  Fixes #33151.
23274
23275 2002-11-16  Martin Baulig  <martin@ximian.com>
23276
23277         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
23278         October 22nd; don't do the cs1540 check for static members.
23279
23280         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
23281         now using our own filter here and doing the cs1540 check again.
23282
23283 2002-11-16  Martin Baulig  <martin@ximian.com>
23284
23285         * support.cs (InternalParameters): Don't crash if we don't have
23286         any fixed parameters.  Fixes #33532.
23287
23288 2002-11-16  Martin Baulig  <martin@ximian.com>
23289
23290         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
23291         when looking up static methods to make this work on Windows.
23292         Fixes #33773.
23293
23294 2002-11-16  Martin Baulig  <martin@ximian.com>
23295
23296         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
23297         a setter rather than using PropertyInfo.CanWrite.
23298
23299 2002-11-15  Nick Drochak  <ndrochak@gol.com>
23300
23301         * class.cs: Allow acces to block member by subclasses. Fixes build
23302         breaker.
23303
23304 2002-11-14  Martin Baulig  <martin@ximian.com>
23305
23306         * class.cs (Constructor.Emit): Added the extern/block check.
23307         Fixes bug #33678.
23308
23309 2002-11-14  Martin Baulig  <martin@ximian.com>
23310
23311         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
23312         iteration while looking for indexers, this is needed because the
23313         indexer may have a different name in our base classes.  Fixed the
23314         error reporting (no indexers at all, not get accessor, no
23315         overloaded match).  Fixes bug #33089.
23316         (IndexerAccess.DoResolveLValue): Likewise.
23317
23318 2002-11-14  Martin Baulig  <martin@ximian.com>
23319
23320         * class.cs (PropertyBase.CheckBase): Make this work for multiple
23321         indexers.  Fixes the first part of bug #33089.
23322         (MethodSignature.InheritableMemberSignatureCompare): Added support
23323         for properties.
23324
23325 2002-11-13  Ravi Pratap  <ravi@ximian.com>
23326
23327         * attribute.cs (Attribute.Resolve): Catch the
23328         NullReferenceException and report it since it isn't supposed to
23329         happen. 
23330
23331 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
23332
23333         * expression.cs (Binary.EmitBranchable): Also handle the cases for
23334         LogicalOr and LogicalAnd that can benefit from recursively
23335         handling EmitBranchable.  The code now should be nice for Paolo.
23336
23337 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
23338
23339         * typemanager.cs (LookupType): Added a negative-hit hashtable for
23340         the Type lookups, as we perform quite a number of lookups on
23341         non-Types.  This can be removed once we can deterministically tell
23342         whether we have a type or a namespace in advance.
23343
23344         But this might require special hacks from our corlib.
23345
23346         * TODO: updated.
23347
23348         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
23349         and double which avoids a conversion from an integer to a double.
23350
23351         * expression.cs: tiny optimization, avoid calling IsConstant,
23352         because it effectively performs the lookup twice.
23353
23354 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
23355
23356         But a bogus return here to keep the semantics of the old code
23357         until the Mono runtime is fixed.
23358
23359         * pending.cs (GetMissingInterfaces): New method used to remove all
23360         the interfaces that are already implemented by our parent
23361         classes from the list of pending methods. 
23362
23363         * interface.cs: Add checks for calls after ResolveTypeExpr.
23364
23365 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
23366
23367         * class.cs (Class.Emit): Report warning 67: event not used if the
23368         warning level is beyond 3.
23369
23370         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
23371         being a NullLiteral.
23372
23373         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
23374         specifiers. 
23375
23376         * class.cs (TypeContainer.GetClassBases): Cover a missing code
23377         path that might fail if a type can not be resolved.
23378
23379         * expression.cs (Binary.Emit): Emit unsigned versions of the
23380         operators. 
23381
23382         * driver.cs: use error 5.
23383
23384 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
23385
23386         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
23387
23388 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
23389
23390         * cs-parser.jay (switch_section): A beautiful patch from Martin
23391         Baulig that fixed 33094.
23392
23393 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
23394
23395         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
23396         Check whether the base is abstract and report an error if so.
23397
23398         * expression.cs (IndexerAccess.DoResolveLValue,
23399         IndexerAccess.DoResolve): ditto. 
23400
23401         (Invocation.DoResolve): ditto.
23402
23403         (Invocation.FullMethodDesc): Improve the report string.
23404
23405         * statement.cs (Block): Eliminate IsVariableDefined as it is
23406         basically just a wrapper for GetVariableInfo.
23407
23408         * ecore.cs (SimpleName): Use new 
23409
23410         * support.cs (ReflectionParamter.ParameterType): We unwrap the
23411         type, as we return the actual parameter ref/unref state on a
23412         different call.
23413
23414 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
23415
23416         * support.cs: Return proper flags REF/OUT fixing the previous
23417         commit.  
23418
23419         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
23420         not used to mean `ref' but `ref or out' in ParameterReference
23421
23422         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
23423         full type signature instead of calling TypeManger.CSharpName
23424         ourselves. 
23425
23426         * support.cs (InternalParameters.ParameterDesc): Do not compare
23427         directly to the modflags, because REF/OUT will actually be bitsets
23428         if set. 
23429
23430         * delegate.cs (VerifyMethod): Check also the modifiers.
23431
23432         * cs-tokenizer.cs: Fix bug where floating point values with an
23433         exponent where a sign was missing was ignored.
23434
23435         * driver.cs: Allow multiple assemblies to be specified in a single
23436         /r: argument
23437
23438 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
23439
23440         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
23441         because identifiers after a parenthesis would end up in this kind
23442         of production, and we needed to desamiguate it for having casts
23443         like:
23444
23445                 (UserDefinedType *) xxx
23446
23447 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
23448
23449         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
23450         we should set on the Bindingflags.NonPublic, but not turn on
23451         private_ok.  private_ok controls whether a Private member is
23452         returned (this is chekced on the filter routine), while the
23453         BindingFlags.NonPublic just controls whether private/protected
23454         will be allowed.   This fixes the problem part of the problem of
23455         private properties being allowed to be used in derived classes.
23456
23457         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
23458         so we can call the children DoResolveLValue method (this will
23459         properly signal errors on lvalue assignments to base properties)
23460
23461         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
23462         getter are null, and we have a property info, we know that this
23463         happened because the lookup failed, so we report an error 122 for
23464         protection level violation.
23465
23466         We also silently return if setter and getter are null in the
23467         resolve functions, this condition only happens if we have flagged
23468         the error before.  This is the other half of the problem. 
23469
23470         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
23471         not have accessibility information, that is why we were returning
23472         true in the filter function in typemanager.cs.
23473
23474         To properly report 122 (property is inaccessible because of its
23475         protection level) correctly, we report this error in ResolveAccess
23476         by failing if both the setter and the getter are lacking (ie, the
23477         lookup failed). 
23478
23479         DoResolve and DoLResolve have been modified to check for both
23480         setter/getter being null and returning silently, the reason being
23481         that I did not want to put the knowledge about this error in upper
23482         layers, like:
23483
23484         int old = Report.Errors;
23485         x = new PropertyExpr (...);
23486         if (old != Report.Errors)
23487                 return null;
23488         else
23489                 return x;
23490
23491         So the property expr is returned, but it is invalid, so the error
23492         will be flagged during the resolve process. 
23493
23494         * class.cs: Remove InheritablePropertySignatureCompare from the
23495         class, as we no longer depend on the property signature to compute
23496         whether it is possible to implement a method or not.
23497
23498         The reason is that calling PropertyInfo.GetGetMethod will return
23499         null (in .NET, in Mono it works, and we should change this), in
23500         cases where the Get Method does not exist in that particular
23501         class.
23502
23503         So this code:
23504
23505         class X { public virtual int A { get { return 1; } } }
23506         class Y : X { }
23507         class Z : Y { public override int A { get { return 2; } } }
23508
23509         Would fail in Z because the parent (Y) would not have the property
23510         defined.  So we avoid this completely now (because the alternative
23511         fix was ugly and slow), and we now depend exclusively on the
23512         method names.
23513
23514         (PropertyBase.CheckBase): Use a method-base mechanism to find our
23515         reference method, instead of using the property.
23516
23517         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
23518         routines are gone now.
23519
23520         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
23521         names, they were incorrectly named.
23522
23523         * cs-tokenizer.cs: Return are more gentle token on failure. 
23524
23525         * pending.cs (PendingImplementation.InterfaceMethod): This routine
23526         had an out-of-sync index variable, which caused it to remove from
23527         the list of pending methods the wrong method sometimes.
23528
23529 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
23530
23531         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
23532         CanWrite, because those refer to this particular instance of the
23533         property, and do not take into account the fact that we can
23534         override single members of a property.
23535
23536         Constructor requires an EmitContext.  The resolution process does
23537         not happen here, but we need to compute the accessors before,
23538         because the resolution does not always happen for properties.
23539
23540         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
23541         subclass, before we did not update this flag, but we did update
23542         bindingflags. 
23543
23544         (GetAccessors): Drop this routine, as it did not work in the
23545         presence of partially overwritten set/get methods. 
23546
23547         Notice that this broke the cs1540 detection, but that will require
23548         more thinking. 
23549
23550 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23551
23552         * class.cs:
23553         * codegen.cs:
23554         * driver.cs: issue a warning instead of an error if we don't support
23555         debugging for the platform. Also ignore a couple of errors that may
23556         arise when trying to write the symbols. Undo my previous patch.
23557
23558 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23559
23560         * driver.cs: ignore /debug switch except for Unix platforms.
23561
23562 2002-10-23  Nick Drochak  <ndrochak@gol.com>
23563
23564         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
23565
23566 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
23567
23568         * driver.cs: Do not make mcs-debug conditional, so we do not break
23569         builds that use it.
23570
23571         * statement.cs (UsageVector.MergeChildren): I would like Martin to
23572         review this patch.  But basically after all the children variables
23573         have been merged, the value of "Breaks" was not being set to
23574         new_breaks for Switch blocks.  I think that it should be set after
23575         it has executed.  Currently I set this to the value of new_breaks,
23576         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
23577         conservative, but I do not understand this code very well.
23578
23579         I did not break anything in the build, so that is good ;-)
23580
23581         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
23582
23583 2002-10-20  Mark Crichton  <crichton@gimp.org>
23584
23585         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
23586
23587 2002-10-20  Nick Drochak  <ndrochak@gol.com>
23588
23589         * cfold.cs: Fixed compile blocker.
23590
23591 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
23592
23593         * driver.cs: I was chekcing the key, not the file.
23594
23595 2002-10-19  Ravi Pratap  <ravi@ximian.com>
23596
23597         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
23598         message that we were generating - we just need to silently return
23599         a null.
23600
23601 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
23602
23603         * class.cs (Event.Define): Change my previous commit, as this
23604         breaks the debugger.  This is a temporary hack, as it seems like
23605         the compiler is generating events incorrectly to begin with.
23606
23607         * expression.cs (Binary.ResolveOperator): Added support for 
23608         "U operator - (E x, E y)"
23609
23610         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
23611         y)".
23612
23613         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
23614         init-only variables, but this path did not take into account that
23615         there might be also instance readonly variables.  Correct this
23616         problem. 
23617
23618         This fixes bug 32253
23619
23620         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
23621         delegates as well.
23622
23623         * driver.cs: Change the extension for modules to `netmodule'
23624
23625         * cs-parser.jay: Improved slightly the location tracking for
23626         the debugger symbols.
23627
23628         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
23629         modifiers that were specified instead of the hardcoded value
23630         (FamAndAssem).  This was basically ignoring the static modifier,
23631         and others.  Fixes 32429.
23632
23633         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
23634         fixed a bug in the process (32476)
23635
23636         * expression.cs (ArrayAccess.EmitAssign): Patch from
23637         hwang_rob@yahoo.ca that fixes bug 31834.3
23638
23639 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
23640
23641         * driver.cs: Make the module extension .netmodule.
23642
23643 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
23644
23645         * driver.cs: Report an error if the resource file is not found
23646         instead of crashing.
23647
23648         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
23649         false, like Emit does.
23650
23651 2002-10-16  Nick Drochak  <ndrochak@gol.com>
23652
23653         * typemanager.cs: Remove unused private member.  Also reported mcs
23654         bug to report this as a warning like csc.
23655
23656 2002-10-15  Martin Baulig  <martin@gnome.org>
23657
23658         * statement.cs (Statement.Emit): Made this a virtual method; emits
23659         the line number info and calls DoEmit().
23660         (Statement.DoEmit): New protected abstract method, formerly knows
23661         as Statement.Emit().
23662
23663         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
23664
23665 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
23666
23667         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
23668         have fixed a remaining problem: not every AddXXXX was adding a
23669         fully qualified name.  
23670
23671         Now everyone registers a fully qualified name in the DeclSpace as
23672         being defined instead of the partial name.  
23673
23674         Downsides: we are slower than we need to be due to the excess
23675         copies and the names being registered this way.  
23676
23677         The reason for this is that we currently depend (on the corlib
23678         bootstrap for instance) that types are fully qualified, because
23679         we dump all the types in the namespace, and we should really have
23680         types inserted into the proper namespace, so we can only store the
23681         basenames in the defined_names array.
23682
23683 2002-10-10  Martin Baulig  <martin@gnome.org>
23684
23685         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
23686         from bug #31834, see the bug report for a testcase which is
23687         miscompiled.
23688
23689 2002-10-10  Martin Baulig  <martin@gnome.org>
23690
23691         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
23692         flow analysis code for this.
23693
23694         * statement.cs (Do, While, For): Tell the flow analysis code about
23695         infinite loops.
23696         (FlowBranching.UsageVector): Added support for infinite loops.
23697         (Block.Resolve): Moved the dead code elimination here and use flow
23698         analysis to do it.
23699
23700 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
23701
23702         * class.cs (Field.Define): Catch cycles on struct type
23703         definitions. 
23704
23705         * typemanager.cs (IsUnmanagedtype): Do not recursively check
23706         fields if the fields are static.  We only need to check instance
23707         fields. 
23708
23709         * expression.cs (As.DoResolve): Test for reference type.
23710
23711         * statement.cs (Using.ResolveExpression): Use
23712         ConvertImplicitRequired, not ConvertImplicit which reports an
23713         error on failture
23714         (Using.ResolveLocalVariableDecls): ditto.
23715
23716         * expression.cs (Binary.ResolveOperator): Report errors in a few
23717         places where we had to.
23718
23719         * typemanager.cs (IsUnmanagedtype): Finish implementation.
23720
23721 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
23722
23723         * expression.cs: Use StoreFromPtr instead of extracting the type
23724         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
23725
23726         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
23727         an enumeration value to a System.Enum, but System.Enum is not a
23728         value type, but an class type, so we need to box.
23729
23730         (Expression.ConvertExplicit): One codepath could return
23731         errors but not flag them.  Fix this.  Fixes #31853
23732
23733         * parameter.cs (Resolve): Do not allow void as a parameter type.
23734
23735 2002-10-06  Martin Baulig  <martin@gnome.org>
23736
23737         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
23738         if it's a class type and not a struct.  Fixes #31815.
23739
23740 2002-10-06  Martin Baulig  <martin@gnome.org>
23741
23742         * statement.cs: Reworked the flow analysis code a bit to make it
23743         usable for dead code elimination.
23744
23745 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23746
23747         * cs-parser.jay: allow empty source files. Fixes bug #31781.
23748
23749 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
23750
23751         * expression.cs (ComposedCast.DoResolveType): A quick workaround
23752         to fix the test 165, will investigate deeper.
23753
23754 2002-10-04  Martin Baulig  <martin@gnome.org>
23755
23756         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
23757         finally blocks actually work.
23758         (Try.Resolve): We don't need to create a sibling for `finally' if
23759         there is no finally block.
23760
23761 2002-10-04  Martin Baulig  <martin@gnome.org>
23762
23763         * class.cs (Constructor.Define): The default accessibility for a
23764         non-default constructor is private, not public.
23765
23766 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
23767
23768         * class.cs (Constructor): Make AllowedModifiers public, add
23769         EXTERN.
23770
23771         * cs-parser.jay: Perform the modifiers test here, as the
23772         constructor for the Constructor class usually receives a zero
23773         because of the way we create it (first we create, later we
23774         customize, and we were never checking the modifiers).
23775
23776         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
23777         is a version of LookupTypeReflection that includes the type-name
23778         cache.  This can be used as a fast path for functions that know
23779         the fully qualified name and are only calling into *.GetType() to
23780         obtain a composed type.
23781
23782         This is also used by TypeManager.LookupType during its type
23783         composition.
23784
23785         (LookupType): We now also track the real type name, as sometimes
23786         we can get a quey for the real type name from things like
23787         ComposedCast.  This fixes bug 31422.
23788
23789         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
23790         complete type fullname, it does not have to go through the type
23791         resolution system to obtain the composed version of the type (for
23792         obtaining arrays or pointers).
23793
23794         (Conditional.Emit): Use the EmitBoolExpression to
23795         generate nicer code, as requested by Paolo.
23796
23797         (ArrayCreation.CheckIndices): Use the patch from
23798         hwang_rob@yahoo.ca to validate the array initializers. 
23799
23800 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
23801
23802         * class.cs (ConstructorInitializer.Emit): simplify code by using
23803         Invocation.EmitCall, and at the same time, fix the bugs in calling
23804         parent constructors that took variable arguments. 
23805
23806         * ecore.cs (Expression.ConvertNumericExplicit,
23807         Expression.ImplicitNumericConversion): Remove the code that
23808         manually wrapped decimal (InternalTypeConstructor call is now gone
23809         as well).
23810
23811         * expression.cs (Cast.TryReduce): Also handle decimal types when
23812         trying to perform a constant fold on the type.
23813
23814         * typemanager.cs (IsUnmanagedtype): Partially implemented.
23815
23816         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
23817         that only turned off an error report, and did nothing else. 
23818
23819 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
23820
23821         * driver.cs: Handle and ignore /fullpaths
23822
23823 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
23824
23825         * expression.cs (Binary.ResolveOperator): Catch the case where
23826         DoNumericPromotions returns true, 
23827
23828         (Binary.DoNumericPromotions): Simplify the code, and the tests.
23829
23830 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
23831
23832         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
23833         report error 70.
23834
23835 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
23836
23837         * ecore.cs (ConvertNumericExplicit): It is not enough that the
23838         conversion exists, but it is also required that the conversion be
23839         performed.  This manifested in "(Type64Enum) 2".  
23840
23841         * class.cs (TypeManager.AddMethod): The fix is not to change
23842         AddEnum, because that one was using a fully qualified name (every
23843         DeclSpace derivative does), but to change the AddMethod routine
23844         that was using an un-namespaced name.  This now correctly reports
23845         the duplicated name.
23846
23847         Revert patch until I can properly fix it.  The issue
23848         is that we have a shared Type space across all namespaces
23849         currently, which is wrong.
23850
23851         Options include making the Namespace a DeclSpace, and merge
23852         current_namespace/current_container in the parser.
23853
23854 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
23855
23856         * cs-parser.jay: Improve error reporting when we get a different
23857         kind of expression in local_variable_type and
23858         local_variable_pointer_type. 
23859
23860         Propagate this to avoid missleading errors being reported.
23861
23862         * ecore.cs (ImplicitReferenceConversion): treat
23863         TypeManager.value_type as a target just like object_type.   As
23864         code like this:
23865
23866         ValueType v = 1;
23867
23868         Is valid, and needs to result in the int 1 being boxed before it
23869         is assigned to the value type v.
23870
23871         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
23872         to validate the enumeration name.
23873
23874         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
23875         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
23876         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
23877
23878         * ecore.cs (TryImplicitIntConversion): When doing an
23879         implicit-enumeration-conversion, check if the type is 64-bits and
23880         perform a conversion before passing to EnumConstant.
23881
23882 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
23883
23884         * decl.cs (Error_AmbiguousTypeReference); New routine used to
23885         report ambiguous type references.  Unlike the MS version, we
23886         report what the ambiguity is.   Innovation at work ;-)
23887
23888         (DeclSpace.FindType): Require a location argument to
23889         display when we display an ambiguous error.
23890
23891         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
23892
23893         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
23894
23895         * expression.cs (EmitDynamicInitializers): Apply patch from
23896         hwang_rob@yahoo.ca that fixes the order in which we emit our
23897         initializers. 
23898
23899 2002-09-21  Martin Baulig  <martin@gnome.org>
23900
23901         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
23902         delegate takes no arguments.
23903
23904 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
23905
23906         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
23907         from integers.
23908
23909         * expression.cs: Extract the underlying type.
23910
23911         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
23912
23913         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
23914
23915 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
23916
23917         * class.cs (TypeContainer.DefineType): We can not use the nice
23918         PackingSize with the size set to 1 DefineType method, because it
23919         will not allow us to define the interfaces that the struct
23920         implements.
23921
23922         This completes the fixing of bug 27287
23923
23924         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
23925         means also structs.  This fixes part of the problem. 
23926         (Expresion.ImplicitReferenceConversionExists): ditto.
23927
23928         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
23929         error if there were no errors reported during the type lookup
23930         process, to avoid duplicates or redundant errors.  Without this
23931         you would get an ambiguous errors plus a type not found.  We have
23932         beaten the user enough with the first error.  
23933
23934         (DeclSparce.FindType): Emit a warning if we have an ambiguous
23935         reference. 
23936
23937         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
23938         during the resolution process, stop the lookup, this avoids
23939         repeated error reports (same error twice).
23940
23941         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
23942
23943         * typemanager.cs (LookupType): Redo the type lookup code to match
23944         the needs of System.Reflection.  
23945
23946         The issue is that System.Reflection requires references to nested
23947         types to begin with a "+" sign instead of a dot.  So toplevel
23948         types look like: "NameSpace.TopLevelClass", and nested ones look
23949         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
23950         levels. 
23951
23952 2002-09-19  Martin Baulig  <martin@gnome.org>
23953
23954         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
23955         says that a method always returns or always throws an exception,
23956         don't report the CS0161.
23957
23958         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
23959         set `Returns = new_returns'.
23960
23961 2002-09-19  Martin Baulig  <martin@gnome.org>
23962
23963         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
23964         to an enum constant, check for a CS0176.
23965
23966 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
23967
23968         * class.cs (TypeContainer.CheckPairedOperators): Now we check
23969         for operators that must be in pairs and report errors.
23970
23971         * ecore.cs (SimpleName.DoResolveType): During the initial type
23972         resolution process, when we define types recursively, we must
23973         check first for types in our current scope before we perform
23974         lookups in the enclosing scopes.
23975
23976         * expression.cs (MakeByteBlob): Handle Decimal blobs.
23977
23978         (Invocation.VerifyArgumentsCompat): Call
23979         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
23980         I thought we were supposed to always call this, but there are a
23981         few places in the code where we dont do it.
23982
23983 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
23984
23985         * driver.cs: Add support in -linkres and -resource to specify the
23986         name of the identifier.
23987
23988 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
23989
23990         * ecore.cs (StandardConversionExists): Sync with the conversion
23991         code: allow anything-* to void* conversions.
23992
23993         (FindMostSpecificSource): Use an Expression argument
23994         instead of a Type, because we might be handed over a Literal which
23995         gets a few more implicit conversions that plain types do not.  So
23996         this information was being lost.
23997
23998         Also, we drop the temporary type-holder expression when not
23999         required.
24000
24001 2002-09-17  Martin Baulig  <martin@gnome.org>
24002
24003         * class.cs (PropertyBase.CheckBase): Don't check the base class if
24004         this is an explicit interface implementation.
24005
24006 2002-09-17  Martin Baulig  <martin@gnome.org>
24007
24008         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
24009         different `IndexerName' attributes.
24010
24011         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
24012         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
24013         virtual CommonResolve().
24014
24015 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
24016
24017         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
24018         and convert that to the UnderlyingType.
24019
24020         * statement.cs (Foreach.Resolve): Indexers are just like variables
24021         or PropertyAccesses.
24022
24023         * cs-tokenizer.cs (consume_string): Track line numbers and columns
24024         inside quoted strings, we were not doing this before.
24025
24026 2002-09-16  Martin Baulig  <martin@gnome.org>
24027
24028         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
24029         resolve it.  This is needed for the definite assignment check of the
24030         instance expression, fixes bug #29846.
24031         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
24032
24033 2002-09-16  Nick Drochak  <ndrochak@gol.com>
24034
24035         * parameter.cs: Fix compile error.  Cannot reference static member
24036         from an instance object.  Is this an mcs bug?
24037
24038 2002-09-14  Martin Baulig  <martin@gnome.org>
24039
24040         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
24041         multiple times.  Fixes bug #30295, added test-166.cs.
24042
24043 2002-09-14  Martin Baulig  <martin@gnome.org>
24044
24045         * statement.cs (Block.Emit): Don't emit unreachable code.
24046         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
24047         `break' statements.
24048         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
24049
24050 2002-09-14  Martin Baulig  <martin@gnome.org>
24051
24052         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
24053         is set.
24054
24055 2002-09-14  Martin Baulig  <martin@gnome.org>
24056
24057         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
24058         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
24059         be false on the ms runtime.
24060
24061 2002-09-13  Martin Baulig  <martin@gnome.org>
24062
24063         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
24064         the CS0038 error message.
24065
24066 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
24067
24068         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
24069         constant inside, return it.
24070
24071 2002-09-12  Martin Baulig  <martin@gnome.org>
24072
24073         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
24074         implicit conversion can be done between enum types.
24075
24076         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
24077         check whether an implicit conversion to the current enum's UnderlyingType
24078         exists and report an error if not.
24079
24080         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
24081         without debugging support.
24082
24083         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
24084         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
24085
24086 2002-09-12  Martin Baulig  <martin@gnome.org>
24087
24088         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
24089
24090         * ecore.cs (IMemberExpr.DeclaringType): New property.
24091         (SimpleName.SimpleNameResolve): Check whether we're accessing a
24092         nonstatic member of an outer type (CS0038).
24093
24094 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
24095
24096         * driver.cs: Activate the using-error detector at warning level
24097         4 (at least for MS-compatible APIs).
24098
24099         * namespace.cs (VerifyUsing): Small buglett fix.
24100
24101         * pending.cs (PendingImplementation): pass the container pointer. 
24102
24103         * interface.cs (GetMethods): Allow for recursive definition.  Long
24104         term, I would like to move every type to support recursive
24105         definitions, not the current ordering mechanism that we have right
24106         now.
24107
24108         The situation is this: Attributes are handled before interfaces,
24109         so we can apply attributes to interfaces.  But some attributes
24110         implement interfaces, we will now handle the simple cases
24111         (recursive definitions will just get an error).  
24112
24113         * parameter.cs: Only invalidate types at the end if we fail to
24114         lookup all types.  
24115
24116 2002-09-09  Martin Baulig  <martin@gnome.org>
24117
24118         * ecore.cs (PropertyExpr.Emit): Also check for
24119         TypeManager.system_int_array_get_length so this'll also work when
24120         compiling corlib.  Fixes #30003.
24121
24122 2002-09-09  Martin Baulig  <martin@gnome.org>
24123
24124         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
24125         and throw an exception if we can't get the type's size.  Fixed #30040,
24126         added test-165.cs.
24127
24128 2002-09-09  Martin Baulig  <martin@gnome.org>
24129
24130         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
24131
24132         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
24133         context.  Fixes bug #30027.
24134
24135         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
24136         virtual functions.  Fixes bug #30043, added test-164.cs.
24137
24138 2002-09-08  Ravi Pratap  <ravi@ximian.com>
24139
24140         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
24141
24142 2002-09-08  Nick Drochak  <ndrochak@gol.com>
24143
24144         * driver.cs: Use an object to get the windows codepage since it's not a
24145         static property.
24146
24147 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
24148
24149         * statement.cs (For.Emit): for infinite loops (test == null)
24150         return whether there is a break inside, not always "true".
24151
24152         * namespace.cs (UsingEntry): New struct to hold the name of the
24153         using definition, the location where it is defined, and whether it
24154         has been used in a successful type lookup.
24155
24156         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
24157         strings.
24158
24159         * decl.cs: ditto.
24160
24161 2002-09-06  Ravi Pratap  <ravi@ximian.com>
24162
24163         * attribute.cs : Fix incorrect code which relied on catching
24164         a NullReferenceException to detect a null being passed in
24165         where an object was expected.
24166
24167 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
24168
24169         * statement.cs (Try): flag the catch variable as assigned
24170
24171         * expression.cs (Cast): Simplified by using ResolveType instead of
24172         manually resolving.
24173
24174         * statement.cs (Catch): Fix bug by using ResolveType.
24175
24176 2002-09-06  Ravi Pratap  <ravi@ximian.com>
24177
24178         * expression.cs (BetterConversion): Special case for when we have
24179         a NullLiteral as the argument and we have to choose between string
24180         and object types - we choose string the way csc does.
24181
24182         * attribute.cs (Attribute.Resolve): Catch the
24183         NullReferenceException and report error #182 since the Mono
24184         runtime no more has the bug and having this exception raised means
24185         we tried to select a constructor which takes an object and is
24186         passed a null.
24187
24188 2002-09-05  Ravi Pratap  <ravi@ximian.com>
24189
24190         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
24191         message (1502, 1503) when we can't locate a method after overload
24192         resolution. This is much more informative and closes the bug
24193         Miguel reported.
24194
24195         * interface.cs (PopulateMethod): Return if there are no argument
24196         types. Fixes a NullReferenceException bug.
24197
24198         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
24199         expressions too. Previously we were checking only in one place for
24200         positional arguments leaving out named arguments.
24201
24202         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
24203         type to the enum type is not allowed. Remove code corresponding to
24204         that.
24205
24206         (ConvertNumericExplicit): Allow explicit conversions from
24207         the underlying type to enum type. This precisely follows the spec
24208         and closes a bug filed by Gonzalo.
24209
24210 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24211
24212         * compiler.csproj:
24213         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
24214
24215 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
24216
24217         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
24218         it was important that we stored the right value after the
24219         reduction in `converted'.
24220
24221 2002-09-04  Martin Baulig  <martin@gnome.org>
24222
24223         * location.cs (Location.SymbolDocument): Use full pathnames for the
24224         source files.
24225
24226 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
24227
24228         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
24229         of the expression resolve mechanism, because that will catch the
24230         SimpleName error failures.
24231
24232         (Conditional): If we can not resolve the
24233         expression, return, do not crash.
24234
24235 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24236
24237         * cs-tokenizer.cs:
24238         (location): display token name instead of its number.
24239
24240 2002-08-28  Martin Baulig  <martin@gnome.org>
24241
24242         * expression.cs (Binary.ResolveOperator): Don't silently return
24243         but return an error if an operator cannot be applied between two
24244         enum types.
24245
24246 2002-08-28  Martin Baulig  <martin@gnome.org>
24247
24248         * class.cs (Constructor.Define): Set the permission attributes
24249         correctly instead of making all constructors public.
24250
24251 2002-08-28  Martin Baulig  <martin@gnome.org>
24252
24253         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
24254         for private members before reporting a CS0103; if we find anything,
24255         it's a CS0122.
24256
24257 2002-08-28  Martin Baulig  <martin@gnome.org>
24258
24259         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
24260         to check whether `closure_start_type == closure_invocation_type',
24261         we also need to check whether `m.DeclaringType == closure_invocation_type'
24262         before bypassing the permission checks.  We might be accessing
24263         protected/private members from the base class.
24264         (TypeManager.RealMemberLookup): Only set private_ok if private
24265         members were requested via BindingFlags.NonPublic.
24266
24267         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
24268
24269         * expression.cs (MemberAccess.ResolveMemberAccess): Set
24270         MethodGroupExpr.IsExplicitImpl if appropriate.
24271         (Invocation.DoResolve): Don't report the CS0120 for explicit
24272         interface implementations.
24273
24274 2002-08-27  Martin Baulig  <martin@gnome.org>
24275
24276         * expression.cs (Invocation.DoResolve): If this is a static
24277         method and we don't have an InstanceExpression, we must report
24278         a CS0120.
24279
24280 2002-08-25  Martin Baulig  <martin@gnome.org>
24281
24282         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
24283         `==' between a valuetype and an object.
24284
24285 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
24286
24287         * ecore.cs (TypeExpr): Provide a ToString method.
24288
24289 2002-08-24  Martin Baulig  <martin@gnome.org>
24290
24291         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
24292         now called proggie.dbg and it's a binary file.
24293
24294 2002-08-23  Martin Baulig  <martin@gnome.org>
24295
24296         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
24297
24298 2002-08-23  Martin Baulig  <martin@gnome.org>
24299
24300         * struct.cs (MyStructInfo.ctor): Make this work with empty
24301         structs; it's not allowed to use foreach() on null.
24302
24303 2002-08-23  Martin Baulig  <martin@gnome.org>
24304
24305         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
24306         writer the full pathname of the generated assembly.
24307
24308 2002-08-23  Martin Baulig  <martin@gnome.org>
24309
24310         * statements.cs (FlowBranching.UsageVector.MergeChildren):
24311         A `finally' block never returns or breaks; improved handling of
24312         unreachable code.
24313
24314 2002-08-23  Martin Baulig  <martin@gnome.org>
24315
24316         * statement.cs (Throw.Resolve): Allow `throw null'.
24317
24318 2002-08-23  Martin Baulig  <martin@gnome.org>
24319
24320         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
24321         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
24322         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
24323         MemberLookup would return a wrong event if this is an explicit
24324         interface implementation and the class has an event with the same
24325         name.
24326
24327 2002-08-23  Martin Baulig  <martin@gnome.org>
24328
24329         * statement.cs (Block.AddChildVariableNames): New public method.
24330         (Block.AddChildVariableName): Likewise.
24331         (Block.IsVariableNameUsedInChildBlock): Likewise.
24332         (Block.AddVariable): Check whether a variable name has already
24333         been used in a child block.
24334
24335         * cs-parser.jay (declare_local_variables): Mark all variable names
24336         from the current block as being used in a child block in the
24337         implicit block.
24338
24339 2002-08-23  Martin Baulig  <martin@gnome.org>
24340
24341         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
24342         find the symbol writer.
24343
24344         * driver.cs: csc also allows the arguments to /define being
24345         separated by commas, not only by semicolons.
24346
24347 2002-08-23  Martin Baulig  <martin@gnome.org>
24348
24349         * interface.cs (Interface.GetMembers): Added static check for events.
24350
24351 2002-08-15  Martin Baulig  <martin@gnome.org>
24352
24353         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
24354         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
24355
24356         * ecore.cs (Expression.MemberLookup): Added documentation and explained
24357         why the MethodData.EmitDestructor() change was necessary.
24358
24359 2002-08-20  Martin Baulig  <martin@gnome.org>
24360
24361         * class.cs (TypeContainer.FindMembers): Added static check for events.
24362
24363         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
24364
24365         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
24366         use Type.GetEvents(), not Type.FindMembers().
24367
24368 2002-08-20  Martin Baulig  <martin@gnome.org>
24369
24370         * decl.cs (MemberCache): Added a special method cache which will
24371         be used for method-only searched.  This ensures that a method
24372         search will return a MethodInfo with the correct ReflectedType for
24373         inherited methods.      
24374
24375 2002-08-20  Martin Baulig  <martin@gnome.org>
24376
24377         * decl.cs (DeclSpace.FindMembers): Made this public.
24378
24379 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24380
24381         * delegate.cs: fixed build on windows.
24382         [FIXME:  Filed as bug #29150: MCS must report these errors.]
24383
24384 2002-08-19  Ravi Pratap  <ravi@ximian.com>
24385
24386         * ecore.cs (StandardConversionExists): Return a false
24387         if we are trying to convert the void type to anything else
24388         since that is not allowed.
24389
24390         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
24391         we flag error 70 in the event an event is trying to be accessed
24392         directly from outside the declaring type.
24393
24394 2002-08-20  Martin Baulig  <martin@gnome.org>
24395
24396         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
24397         MemberCache from typemanager.cs to decl.cs.
24398
24399 2002-08-19  Martin Baulig  <martin@gnome.org>
24400
24401         * class.cs (TypeContainer): Implement IMemberContainer.
24402         (TypeContainer.DefineMembers): Create the MemberCache.
24403         (TypeContainer.FindMembers): Do better BindingFlags checking; only
24404         return public members if BindingFlags.Public was given, check
24405         whether members are static.
24406
24407 2002-08-16  Martin Baulig  <martin@gnome.org>
24408
24409         * decl.cs (DeclSpace.Define): Splitted this in Define and
24410         DefineMembers.  DefineMembers is called first and initializes the
24411         MemberCache.
24412
24413         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
24414         DefineMembers() on all our DeclSpaces.
24415
24416         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
24417         but call DefineMembers() on all nested interfaces.  We call their
24418         Define() in our new Define() function.
24419
24420         * interface.cs (Interface): Implement IMemberContainer.
24421         (Interface.Define): Moved all code except the attribute stuf to
24422         DefineMembers().
24423         (Interface.DefineMembers): Initialize the member cache.
24424
24425         * typemanager.cs (IMemberFinder): Removed this interface, we don't
24426         need this anymore since we can use MemberCache.FindMembers directly.
24427
24428 2002-08-19  Martin Baulig  <martin@gnome.org>
24429
24430         * typemanager.cs (MemberCache): When creating the cache for an
24431         interface type, add all inherited members.
24432         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
24433         to `out bool used_cache' and documented it.
24434         (TypeManager.MemberLookup): If we already used the cache in the first
24435         iteration, we don't need to do the interfaces check.
24436
24437 2002-08-19  Martin Baulig  <martin@gnome.org>
24438
24439         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
24440         here from IMemberFinder and don't implement this interface anymore.
24441         (DeclSpace.MemberCache): Moved here from IMemberFinder.
24442
24443         * typemanager.cs (IMemberFinder): This interface is now only used by
24444         classes which actually support the member cache.
24445         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
24446         since we only put DeclSpaces into this Hashtable.
24447         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
24448         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
24449
24450 2002-08-16  Martin Baulig  <martin@gnome.org>
24451
24452         * typemanager.cs (ICachingMemberFinder): Removed.
24453         (IMemberFinder.MemberCache): New property.
24454         (TypeManager.FindMembers): Merged this with RealFindMembers().
24455         This function will never be called from TypeManager.MemberLookup()
24456         so we can't use the cache here, just the IMemberFinder.
24457         (TypeManager.MemberLookup_FindMembers): Check whether the
24458         IMemberFinder has a MemberCache and call the cache's FindMembers
24459         function.
24460         (MemberCache): Rewrote larger parts of this yet another time and
24461         cleaned it up a bit.
24462
24463 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
24464
24465         * driver.cs (LoadArgs): Support quoting.
24466
24467         (Usage): Show the CSC-like command line arguments.
24468
24469         Improved a few error messages.
24470
24471 2002-08-15  Martin Baulig  <martin@gnome.org>
24472
24473         * typemanager.cs (IMemberContainer.Type): New property.
24474         (IMemberContainer.IsInterface): New property.
24475
24476         The following changes are conditional to BROKEN_RUNTIME, which is
24477         defined at the top of the file.
24478
24479         * typemanager.cs (MemberCache.MemberCache): Don't add the base
24480         class'es members, but add all members from TypeHandle.ObjectType
24481         if we're an interface.
24482         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
24483         is the current type.
24484         (MemberCache.CacheEntry.Container): Removed this field.
24485         (TypeHandle.GetMembers): Include inherited members.
24486
24487 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24488
24489         * typemanager.cs: fixed compilation and added a comment on a field that
24490         is never used.
24491
24492 2002-08-15  Martin Baulig  <martin@gnome.org>
24493
24494         * class.cs (ConstructorInitializer.Resolve): In the
24495         Expression.MemberLookup call, use the queried_type as
24496         invocation_type.
24497
24498         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
24499         declared' attribute, it's always true.
24500         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
24501         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
24502         temporary wrapper for FindMembers which tells MemberLookup whether
24503         members from the base classes are included in the return value.
24504         This will go away soon.
24505         (TypeManager.MemberLookup): Use this temporary hack here; once the
24506         new MemberCache is completed, we don't need to do the DeclaredOnly
24507         looping here anymore since the MemberCache will take care of this.
24508         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
24509         (MemberCache): When creating the MemberCache for a class, get
24510         members from the current class and all its base classes.
24511         (MemberCache.CacheEntry.Container): New field.  This is a
24512         temporary hack until the Mono runtime is fixed to distinguish
24513         between ReflectedType and DeclaringType.  It allows us to use MCS
24514         with both the MS runtime and the unfixed Mono runtime without
24515         problems and without accecting performance.
24516         (MemberCache.SearchMembers): The DeclaredOnly looping from
24517         TypeManager.MemberLookup is now done here.      
24518
24519 2002-08-14  Martin Baulig  <martin@gnome.org>
24520
24521         * statement.cs (MyStructInfo.MyStructInfo): Don't call
24522         Type.GetFields on dynamic types but get the fields from the
24523         corresponding TypeContainer.
24524         (MyStructInfo.GetStructInfo): Added check for enum types.
24525
24526         * typemanager.cs (MemberList.IsSynchronized): Implemented.
24527         (MemberList.SyncRoot): Implemented.
24528         (TypeManager.FilterWithClosure): No need to check permissions if
24529         closure_start_type == closure_invocation_type, don't crash if
24530         closure_invocation_type is null.
24531
24532 2002-08-13  Martin Baulig  <martin@gnome.org>
24533
24534         Rewrote TypeContainer.FindMembers to use a member cache.  This
24535         gives us a speed increase of about 35% for the self-hosting MCS
24536         build and of about 15-20% for the class libs (both on GNU/Linux).
24537
24538         * report.cs (Timer): New class to get enhanced profiling.  This
24539         whole class is "TIMER" conditional since it remarkably slows down
24540         compilation speed.
24541
24542         * class.cs (MemberList): New class.  This is an IList wrapper
24543         which we're now using instead of passing MemberInfo[]'s around to
24544         avoid copying this array unnecessarily.
24545         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
24546         (ICachingMemberFinder, IMemberContainer): New interface.
24547         (TypeManager.FilterWithClosure): If `criteria' is null, the name
24548         has already been checked, otherwise use it for the name comparision.
24549         (TypeManager.FindMembers): Renamed to RealMemberFinder and
24550         provided wrapper which tries to use ICachingMemberFinder.FindMembers
24551         if possible.  Returns a MemberList, not a MemberInfo [].
24552         (TypeHandle): New class, implements IMemberContainer.  We create
24553         one instance of this class per type, it contains a MemberCache
24554         which is used to do the member lookups.
24555         (MemberCache): New class.  Each instance of this class contains
24556         all members of a type and a name-based hash table.
24557         (MemberCache.FindMembers): This is our new member lookup
24558         function.  First, it looks up all members of the requested name in
24559         the hash table.  Then, it walks this list and sorts out all
24560         applicable members and returns them.
24561
24562 2002-08-13  Martin Baulig  <martin@gnome.org>
24563
24564         In addition to a nice code cleanup, this gives us a performance
24565         increase of about 1.4% on GNU/Linux - not much, but it's already
24566         half a second for the self-hosting MCS compilation.
24567
24568         * typemanager.cs (IMemberFinder): New interface.  It is used by
24569         TypeManager.FindMembers to call FindMembers on a TypeContainer,
24570         Enum, Delegate or Interface.
24571         (TypeManager.finder_to_member_finder): New PtrHashtable.
24572         (TypeManager.finder_to_container): Removed.
24573         (TypeManager.finder_to_delegate): Removed.
24574         (TypeManager.finder_to_interface): Removed.
24575         (TypeManager.finder_to_enum): Removed.
24576
24577         * interface.cs (Interface): Implement IMemberFinder.
24578
24579         * delegate.cs (Delegate): Implement IMemberFinder.
24580
24581         * enum.cs (Enum): Implement IMemberFinder.
24582
24583         * class.cs (TypeContainer): Implement IMemberFinder.
24584
24585 2002-08-12  Martin Baulig  <martin@gnome.org>
24586
24587         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
24588
24589 2002-08-12  Martin Baulig  <martin@gnome.org>
24590
24591         * ecore.cs (ITypeExpression): New interface for expressions which
24592         resolve to a type.
24593         (TypeExpression): Renamed to TypeLookupExpression.
24594         (Expression.DoResolve): If we're doing a types-only lookup, the
24595         expression must implement the ITypeExpression interface and we
24596         call DoResolveType() on it.
24597         (SimpleName): Implement the new ITypeExpression interface.
24598         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
24599         hack, the situation that we're only looking up types can't happen
24600         anymore when this method is called.  Moved the type lookup code to
24601         DoResolveType() and call it.
24602         (SimpleName.DoResolveType): This ITypeExpression interface method
24603         is now doing the types-only lookup.
24604         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
24605         (ResolveFlags): Added MaskExprClass.
24606
24607         * expression.cs (MemberAccess): Implement the ITypeExpression
24608         interface.
24609         (MemberAccess.DoResolve): Added support for a types-only lookup
24610         when we're called via ITypeExpression.DoResolveType().
24611         (ComposedCast): Implement the ITypeExpression interface.
24612
24613         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
24614         Expression.Resolve() with ResolveFlags.Type instead.
24615
24616 2002-08-12  Martin Baulig  <martin@gnome.org>
24617
24618         * interface.cs (Interface.Define): Apply attributes.
24619
24620         * attribute.cs (Attribute.ApplyAttributes): Added support for
24621         interface attributes.
24622
24623 2002-08-11  Martin Baulig  <martin@gnome.org>
24624
24625         * statement.cs (Block.Emit): Only check the "this" variable if we
24626         do not always throw an exception.
24627
24628         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
24629         whether the property has a set accessor.
24630
24631 2002-08-11  Martin Baulig  <martin@gnome.org>
24632
24633         Added control flow analysis support for structs.
24634
24635         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
24636         with control flow analysis turned off.
24637         (IVariable): New interface.
24638         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
24639         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
24640         (FieldExpr.DoResolve): Resolve the instance expression with flow
24641         analysis turned off and do the definite assignment check after the
24642         resolving when we know what the expression will resolve to.
24643
24644         * expression.cs (LocalVariableReference, ParameterReference):
24645         Implement the new IVariable interface, only call the flow analysis
24646         code if ec.DoFlowAnalysis is true.
24647         (This): Added constructor which takes a Block argument.  Implement
24648         the new IVariable interface.
24649         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
24650         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
24651         This does the definite assignment checks for struct members.
24652
24653         * class.cs (Constructor.Emit): If this is a non-static `struct'
24654         constructor which doesn't have any initializer, call
24655         Block.AddThisVariable() to tell the flow analysis code that all
24656         struct elements must be initialized before control returns from
24657         the constructor.
24658
24659         * statement.cs (MyStructInfo): New public class.
24660         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
24661         argument to this indexer.  If non-zero, check an individual struct
24662         member, not the whole struct.
24663         (FlowBranching.CheckOutParameters): Check struct members.
24664         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
24665         overloaded versions of these methods which take an additional
24666         `int field_idx' argument to check struct members.
24667         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
24668         overloaded versions of these methods which take an additional
24669         `string field_name' argument to check struct member.s
24670         (VariableInfo): Implement the IVariable interface.
24671         (VariableInfo.StructInfo): New public property.  Returns the
24672         MyStructInfo instance of the variable if it's a struct or null.
24673         (Block.AddThisVariable): New public method.  This is called from
24674         Constructor.Emit() for non-static `struct' constructor which do
24675         not have any initializer.  It creates a special variable for the
24676         "this" instance variable which will be checked by the flow
24677         analysis code to ensure that all of the struct's fields are
24678         initialized before control returns from the constructor.
24679         (UsageVector): Added support for struct members.  If a
24680         variable/parameter is a struct with N members, we reserve a slot
24681         in the usage vector for each member.  A struct is considered fully
24682         initialized if either the struct itself (slot 0) or all its
24683         members are initialized.
24684
24685 2002-08-08  Martin Baulig  <martin@gnome.org>
24686
24687         * driver.cs (Driver.MainDriver): Only report an error CS5001
24688         if there were no compilation errors.
24689
24690         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
24691         `UnsafeContext' property to determine whether the parent is in
24692         unsafe context rather than checking the parent's ModFlags:
24693         classes nested in an unsafe class are unsafe as well.
24694
24695 2002-08-08  Martin Baulig  <martin@gnome.org>
24696
24697         * statement.cs (UsageVector.MergeChildren): Distinguish between
24698         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
24699         we return.  Added test17() and test18() to test-154.cs.
24700
24701 2002-08-08  Martin Baulig  <martin@gnome.org>
24702
24703         * typemanager.cs (TypeManager.FilterWithClosure): If we have
24704         Family access, make sure the invoking type isn't a subclass of the
24705         queried type (that'd be a CS1540).
24706
24707         * ecore.cs (Expression.MemberLookup): Added overloaded version of
24708         this method which takes an additional `Type invocation_type'.
24709
24710         * expression.cs (BaseAccess.DoResolve): Use the base type as
24711         invocation and query type.
24712         (MemberAccess.DoResolve): If the lookup failed and we're about to
24713         report a CS0122, try a lookup with the ec.ContainerType - if this
24714         succeeds, we must report a CS1540.
24715
24716 2002-08-08  Martin Baulig  <martin@gnome.org>
24717
24718         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
24719         (MethodGroupExpr): Implement the IMemberExpr interface.
24720
24721         * expression (MemberAccess.ResolveMemberAccess): No need to have
24722         any special code for MethodGroupExprs anymore, they're now
24723         IMemberExprs.   
24724
24725 2002-08-08  Martin Baulig  <martin@gnome.org>
24726
24727         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
24728         Family, FamANDAssem and FamORAssem permissions.
24729         (TypeManager.IsSubclassOrNestedChildOf): New public method.
24730
24731 2002-08-08  Martin Baulig  <martin@gnome.org>
24732
24733         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
24734         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
24735         or loop block.
24736
24737 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
24738
24739         * driver.cs: implemented /resource option to embed managed resources.
24740
24741 2002-08-07  Martin Baulig  <martin@gnome.org>
24742
24743         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
24744         (FieldBase.HasFieldInitializer): New public property.
24745         (FieldBase.GetInitializerExpression): New public method.  Resolves and
24746         returns the field initializer and makes sure it is only resolved once.
24747         (TypeContainer.EmitFieldInitializers): Call
24748         FieldBase.GetInitializerExpression to get the initializer, this ensures
24749         that it isn't resolved multiple times.
24750
24751         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
24752         the resolving process (SimpleName/MemberLookup) that we're currently
24753         emitting a field initializer (which must not access any instance members,
24754         this is an error CS0236).
24755
24756         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
24757         argument, if the `IsFieldInitializer' flag is set, we must report and
24758         error CS0236 and not an error CS0120.   
24759
24760 2002-08-07  Martin Baulig  <martin@gnome.org>
24761
24762         * ecore.cs (IMemberExpr): New public interface.
24763         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
24764         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
24765         if the expression is an IMemberExpr.
24766
24767         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
24768         to be null, implicitly default to `this' if we're non-static in
24769         this case.  Simplified the code a lot by using the new IMemberExpr
24770         interface.  Also fixed bug #28176 here.
24771
24772 2002-08-06  Martin Baulig  <martin@gnome.org>
24773
24774         * cs-parser.jay (SimpleLookup): Removed.  We need to create
24775         ParameterReferences during semantic analysis so that we can do a
24776         type-only search when resolving Cast, TypeOf and SizeOf.
24777         (block): Pass the `current_local_parameters' to the Block's
24778         constructor.
24779
24780         * class.cs (ConstructorInitializer): Added `Parameters parameters'
24781         argument to the constructor.
24782         (ConstructorInitializer.Resolve): Create a temporary implicit
24783         block with the parameters.
24784
24785         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
24786         references here if we aren't doing a type-only search.
24787
24788         * statement.cs (Block): Added constructor which takes a
24789         `Parameters parameters' argument.
24790         (Block.Parameters): New public property.
24791
24792         * support.cs (InternalParameters.Parameters): Renamed `parameters'
24793         to `Parameters' and made it public readonly.
24794
24795 2002-08-06  Martin Baulig  <martin@gnome.org>
24796
24797         * ecore.cs (Expression.Warning): Made this public as well.
24798
24799         * report.cs (Report.Debug): Print the contents of collections.
24800
24801 2002-08-06  Martin Baulig  <martin@gnome.org>
24802
24803         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
24804         used to tell Resolve() which kinds of expressions it may return.
24805         (Expression.Resolve): Added overloaded version of this method which
24806         takes a `ResolveFlags flags' argument.  This can be used to tell
24807         Resolve() which kinds of expressions it may return.  Reports a
24808         CS0118 on error.
24809         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
24810         ResolveFlags.SimpleName.
24811         (Expression.Error118): Added overloaded version of this method which
24812         takes a `ResolveFlags flags' argument.  It uses the flags to determine
24813         which kinds of expressions are allowed.
24814
24815         * expression.cs (Argument.ResolveMethodGroup): New public method.
24816         Resolves an argument, but allows a MethodGroup to be returned.
24817         This is used when invoking a delegate.
24818
24819         * TODO: Updated a bit.
24820
24821 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24822
24823         Fixed compilation with csc.
24824
24825         * ecore.cs: Expression.Error made public. Is this correct? Should
24826         Warning be made public too?
24827
24828         * expression.cs: use ea.Location instead of ea.loc.
24829         [FIXME:  Filed as bug #28607: MCS must report these errors.]
24830
24831 2002-08-06  Martin Baulig  <martin@gnome.org>
24832
24833         * ecore.cs (Expression.loc): Moved the location here instead of
24834         duplicating it in all derived classes.
24835         (Expression.Location): New public property.
24836         (Expression.Error, Expression.Warning): Made them non-static and
24837         removed the location argument.
24838         (Expression.Warning): Added overloaded version which takes an
24839         `int level' argument.
24840         (Expression.Error118): Make this non-static and removed the
24841         expression and location arguments.
24842         (TypeExpr): Added location argument to the constructor.
24843
24844         * expression.cs (StaticCallExpr): Added location argument to
24845         the constructor.
24846         (Indirection, PointerArithmetic): Likewise.
24847         (CheckedExpr, UnCheckedExpr): Likewise.
24848         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
24849         (StringPtr): Likewise.
24850
24851
24852 2002-08-05  Martin Baulig  <martin@gnome.org>
24853
24854         * expression.cs (BaseAccess.DoResolve): Actually report errors.
24855
24856         * assign.cs (Assign.DoResolve): Check whether the source
24857         expression is a value or variable.
24858
24859         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
24860         while resolving the corresponding blocks.
24861
24862         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
24863         an error, don't silently return null.
24864
24865         * statement.cs (Block.AddVariable): Do the error reporting here
24866         and distinguish between CS0128 and CS0136.
24867         (Block.DoResolve): Report all unused labels (warning CS0164).
24868         (LabeledStatement): Pass the location to the constructor.
24869         (LabeledStatement.HasBeenReferenced): New property.
24870         (LabeledStatement.Resolve): Set it to true here.
24871
24872         * statement.cs (Return.Emit): Return success even after reporting
24873         a type mismatch error (CS0126 or CS0127), this is what csc does and
24874         it avoids confusing the users with any consecutive errors.
24875
24876 2002-08-05  Martin Baulig  <martin@gnome.org>
24877
24878         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
24879
24880         * const.cs (Const.LookupConstantValue): Catch circular definitions.
24881
24882         * expression.cs (MemberAccess.DoResolve): Silently return if an
24883         error has already been reported.
24884
24885         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
24886         error has already been reported.
24887
24888 2002-08-05  Martin Baulig  <martin@gnome.org>
24889
24890         * statement.cs (UsageVector): Only initialize the `parameters'
24891         vector if we actually have any "out" parameters.
24892
24893 2002-08-05  Martin Baulig  <martin@gnome.org>
24894
24895         * expression.cs (Binary.ResolveOperator): When combining delegates,
24896         they must have the same type.
24897
24898 2002-08-05  Martin Baulig  <martin@gnome.org>
24899
24900         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
24901         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
24902         work with the ms runtime and we also don't need it: if we're a
24903         PropertyBuilder and not in the `indexer_arguments' hash, then we
24904         are a property and not an indexer.
24905
24906         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
24907         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
24908         since the latter one doesn't work with the ms runtime.
24909
24910 2002-08-03  Martin Baulig  <martin@gnome.org>
24911
24912         Fixed bugs #27998 and #22735.
24913
24914         * class.cs (Method.IsOperator): New public field.
24915         (Method.CheckBase): Report CS0111 if there's already a method
24916         with the same parameters in the current class.  Report CS0508 when
24917         attempting to change the return type of an inherited method.
24918         (MethodData.Emit): Report CS0179 if a method doesn't have a body
24919         and it's not marked abstract or extern.
24920         (PropertyBase): New abstract base class for Property and Indexer.
24921         (PropertyBase.CheckBase): Moved here from Property and made it work
24922         for indexers.
24923         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
24924         the same so we can reuse it there.
24925         (Property, Indexer): Derive from PropertyBase.
24926         (MethodSignature.inheritable_property_signature_filter): New delegate
24927         to find properties and indexers.
24928
24929         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
24930         argument and improved error reporting.
24931
24932         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
24933         EmptyReadOnlyParameters and made it a property.
24934
24935         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
24936         version of this method which takes a `PropertyInfo indexer'.
24937         (TypeManager.RegisterIndexer): New method.
24938
24939         * class.cs: Added myself as author of this file :-)
24940
24941 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24942
24943         * class.cs: fixed compilation on windoze.
24944
24945 2002-08-03  Martin Baulig  <martin@gnome.org>
24946
24947         * interface.cs (Interface.GetInterfaceBases): Check whether all
24948         base interfaces are at least as accessible than the current one.
24949
24950         * class.cs (TypeContainer.GetClassBases): Check whether base types
24951         are at least as accessible than the current type.
24952         (TypeContainer.AsAccessible): Implemented and made non-static.
24953         (MemberBase.CheckParameters): Report errors if the accessibility
24954         checks fail.
24955
24956         * delegate.cs (Delegate.Delegate): The default visibility is
24957         internal for top-level types and private for nested types.
24958         (Delegate.Define): Report errors if the accessibility checks fail.
24959
24960         * enum.cs (Enum.Enum): The default visibility is internal for
24961         top-level types and private for nested types.
24962         (Enum.DefineType): Compute the correct visibility.
24963
24964         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
24965         function which takes a `bool is_toplevel' instead of a TypeContainer.
24966
24967         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
24968         builtin type.
24969
24970 2002-08-02  Martin Baulig  <martin@gnome.org>
24971
24972         * expression.cs (LocalVariableReferenc): Added constructor which
24973         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
24974         (LocalVariableReference.IsReadOnly): New property.
24975         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
24976         variable is readonly, use our own readonly flag to do this; you can
24977         use the new constructor to get a writable reference to a read-only
24978         variable.
24979
24980         * cs-parser.jay (foreach_statement, using_statement): Get a writable
24981         reference to the local variable.
24982
24983 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
24984
24985         * rootcontext.cs (ResolveCore): Also include System.Exception
24986
24987         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
24988         we reach an EmptyStatement.
24989
24990         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
24991         is also fine.
24992
24993         * expression.cs (Binary.ResolveOperator): Check error result in
24994         two places.
24995
24996         use brtrue/brfalse directly and avoid compares to null.
24997
24998 2002-08-02  Martin Baulig  <martin@gnome.org>
24999
25000         * class.cs (TypeContainer.Define): Define all nested interfaces here.
25001         Fixes bug #28407, added test-155.cs.
25002
25003 2002-08-01  Martin Baulig  <martin@gnome.org>
25004
25005         * class.cs (Event.EmitDefaultMethod): Make this work with static
25006         events.  Fixes #28311, added verify-3.cs.
25007
25008 2002-08-01  Martin Baulig  <martin@gnome.org>
25009
25010         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
25011         `is_disposable' fields.
25012         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
25013         `hm.is_disposable' if we're using the collection pattern.
25014         (Foreach.EmitCollectionForeach): Use the correct type for the
25015         enumerator's local variable, only emit the try/finally block if
25016         necessary (fixes #27713).
25017
25018 2002-08-01  Martin Baulig  <martin@gnome.org>
25019
25020         * ecore.cs (Expression.report118): Renamed to Error118 and made
25021         it public static.
25022
25023         * statement.cs (Throw.Resolve): Check whether the expression is of
25024         the correct type (CS0118) and whether the type derives from
25025         System.Exception (CS0155).
25026         (Catch.Resolve): New method.  Do the type lookup here and check
25027         whether it derives from System.Exception (CS0155).
25028         (Catch.CatchType, Catch.IsGeneral): New public properties.
25029
25030         * typemanager.cs (TypeManager.exception_type): Added.
25031
25032 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
25033
25034         * driver.cs: Updated About function.
25035
25036 2002-07-31  Martin Baulig  <martin@gnome.org>
25037
25038         Implemented Control Flow Analysis.
25039
25040         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
25041         (EmitContext.CurrentBranching): Added.
25042         (EmitContext.StartFlowBranching): Added.
25043         (EmitContext.EndFlowBranching): Added.
25044         (EmitContext.KillFlowBranching): Added.
25045         (EmitContext.IsVariableAssigned): Added.
25046         (EmitContext.SetVariableAssigned): Added.
25047         (EmitContext.IsParameterAssigned): Added.
25048         (EmitContext.SetParameterAssigned): Added.
25049         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
25050         Added control flow analysis stuff here.
25051
25052         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
25053         resolve the expression as lvalue.
25054         (LocalVariableReference.DoResolve): Check whether the variable has
25055         already been assigned.
25056         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
25057         the parameter as assigned here.
25058         (ParameterReference.DoResolve): Check whether the parameter has already
25059         been assigned.
25060         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
25061         expression as lvalue.
25062
25063         * statement.cs (FlowBranching): New class for the flow analysis code.
25064         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
25065         (LabeledStatement.IsDefined): New public property.
25066         (LabeledStatement.AddUsageVector): New public method to tell flow
25067         analyis that the label may be reached via a forward jump.
25068         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
25069         flow analysis.
25070         (VariableInfo.Number): New public field.  This is used by flow analysis
25071         to number all locals of a block.
25072         (Block.CountVariables): New public property.  This is the number of
25073         local variables in this block (including the locals from all parent
25074         blocks).
25075         (Block.EmitMeta): Number all the variables.
25076
25077         * statement.cs: Added flow analysis support to all classes.
25078
25079 2002-07-31  Martin Baulig  <martin@gnome.org>
25080
25081         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
25082         To get debugging messages, compile mcs with /define:MCS_DEBUG and
25083         then use this argument.
25084
25085         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
25086
25087         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
25088         use this to specify /define options.
25089
25090 2002-07-29  Martin Baulig  <martin@gnome.org>
25091
25092         * statement.cs (Fixed): Moved all code that does variable lookups
25093         and resolvings from Emit to Resolve.
25094
25095         * statement.cs (For): Moved all code that does variable lookups
25096         and resolvings from Emit to Resolve.
25097
25098         * statement.cs (Using): Moved all code that does variable lookups
25099         and resolvings from Emit to Resolve.
25100
25101 2002-07-29  Martin Baulig  <martin@gnome.org>
25102
25103         * attribute.cs (Attribute.Resolve): Explicitly catch a
25104         System.NullReferenceException when creating the
25105         CustromAttributeBuilder and report a different warning message.
25106
25107 2002-07-29  Martin Baulig  <martin@gnome.org>
25108
25109         * support.cs (ParameterData.ParameterName): Added method to
25110         get the name of a parameter.
25111
25112         * typemanager.cs (TypeManager.IsValueType): New public method.
25113
25114 2002-07-29  Martin Baulig  <martin@gnome.org>
25115
25116         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
25117         is a flag which specifies that it's either ref or out.
25118         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
25119         the out parameter to `out Parameter.Modifier mod', also set the
25120         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
25121
25122         * support.cs (InternalParameters.ParameterModifier): Distinguish
25123         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
25124         Parameter.Modifier.ISBYREF flag if it's either ref or out.
25125
25126         * expression.cs (Argument.GetParameterModifier): Distinguish
25127         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
25128         Parameter.Modifier.ISBYREF flag if it's either ref or out.
25129
25130 2002-07-29  Martin Baulig  <martin@gnome.org>
25131
25132         * expression.cs (ParameterReference.ParameterReference): Added
25133         `Location loc' argument to the constructor.
25134
25135         * cs-parser.jay: Pass location to ParameterReference.
25136
25137 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
25138
25139         * statement.cs (Try): Initialize the location.
25140
25141         * cs-parser.jay: pass location to Try.
25142
25143         * expression.cs (Unary.Reduce): Change the prototype to return
25144         whether a constant fold could be performed or not.  The result is
25145         returned in an out parameters.  In the case of Indirection and
25146         AddressOf, we want to perform the full tests.
25147
25148 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
25149
25150         * statement.cs (Statement.Emit): Flag dead code.
25151
25152 2002-07-27  Andrew Birkett  <andy@nobugs.org>
25153
25154         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
25155
25156 2002-07-27  Martin Baulig  <martin@gnome.org>
25157
25158         * class.cs (MethodData.Define): Put back call to
25159         TypeManager.AddMethod(), accidentally commented this out.
25160
25161         * report.cs (Debug): New public method to print debugging information,
25162         this is `[Conditional ("DEBUG")]'.
25163
25164 2002-07-26  Martin Baulig  <martin@gnome.org>
25165
25166         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
25167         (switch_statement): Push the current_block to the switch_stack and
25168         pop it again when we're done with the switch.
25169         (switch_section): The new block is a child of the current_block.
25170         Fixes bug #24007, added test-152.cs.
25171
25172 2002-07-27  Martin Baulig  <martin@gnome.org>
25173
25174         * expression.cs (Invocation.EmitArguments): When calling a varargs
25175         function with only its fixed arguments, we need to pass an empty
25176         array.
25177
25178 2002-07-27  Martin Baulig  <martin@gnome.org>
25179
25180         Mono 0.13 has been released.
25181
25182 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
25183
25184         * driver.cs: Rename --resource to --linkres, because that is what
25185         we do currently, we dont support --resource yet.
25186
25187         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
25188
25189 2002-07-25  Martin Baulig  <martin@gnome.org>
25190
25191         * class.cs (MethodData): New public class.  This is a `method builder'
25192         class for a method or one accessor of a Property/Indexer/Event.
25193         (MethodData.GetMethodFlags): Moved here from MemberBase.
25194         (MethodData.ApplyAttributes): Likewise.
25195         (MethodData.ApplyObsoleteAttribute): Likewise.
25196         (MethodData.ApplyConditionalAttribute): Likewise.
25197         (MethodData.ApplyDllImportAttribute): Likewise.
25198         (MethodData.CheckAbstractAndExternal): Likewise.
25199         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
25200         (MethodData.Emit): Formerly known as Method.Emit().
25201         (MemberBase): Moved everything which was specific to a single
25202         accessor/method to MethodData.
25203         (Method): Create a new MethodData and call Define() and Emit() on it.
25204         (Property, Indexer, Event): Create a new MethodData objects for each
25205         accessor and call Define() and Emit() on them.
25206
25207 2002-07-25  Martin Baulig  <martin@gnome.org>
25208
25209         Made MethodCore derive from MemberBase to reuse the code from there.
25210         MemberBase now also checks for attributes.
25211
25212         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
25213         (MemberBase.GetMethodFlags): Moved here from class Method and marked
25214         as virtual.
25215         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
25216         `CallingConventions cc' and `Attributes opt_attrs' arguments.
25217         (MemberBase.ApplyAttributes): New virtual method; applies the
25218         attributes to a method or accessor.
25219         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
25220         (MemberBase.ApplyConditionalAttribute): Likewise.
25221         (MemberBase.ApplyDllImportAttribute): Likewise.
25222         (MemberBase.CheckAbstractAndExternal): Likewise.
25223         (MethodCore.ParameterTypes): This is now a property instead of a
25224         method, it's initialized from DoDefineParameters().
25225         (MethodCore.ParameterInfo): Removed the set accessor.
25226         (MethodCore.DoDefineParameters): New protected virtual method to
25227         initialize ParameterTypes and ParameterInfo.
25228         (Method.GetReturnType): We can now simply return the MemberType.
25229         (Method.GetMethodFlags): Override the MemberBase version and add
25230         the conditional flags.
25231         (Method.CheckBase): Moved some code from Define() here, call
25232         DoDefineParameters() here.
25233         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
25234         here to avoid some larger code duplication.
25235         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
25236         ensure that abstract and external accessors don't declare a body.
25237
25238         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
25239         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
25240         lookup in the attribute's parent classes, so we need to abort as soon
25241         as we found the first match.
25242         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
25243         the attribute has no arguments.
25244
25245         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
25246         of a Method.
25247
25248 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25249
25250         * cs-parser.jay: reverted previous patch.
25251
25252 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25253
25254         * cs-parser.jay: fixed bug #22119.
25255
25256 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25257
25258         * attribute.cs: fixed compilation. The error was:
25259         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
25260         be assigned to before control leaves the current method."
25261         [FIXME:  Filed as bug #28186: MCS must report this error.]
25262
25263 2002-07-25  Martin Baulig  <martin@gnome.org>
25264
25265         * attribute.cs (Attribute.Conditional_GetConditionName): New static
25266         method to pull the condition name ouf of a Conditional attribute.
25267         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
25268         the obsolete message and error flag out of an Obsolete attribute.
25269
25270         * class.cs (Method.GetMethodFlags): New public method to get the
25271         TypeManager.MethodFlags for this method.
25272         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
25273         private methods.
25274         (Method.Define): Get and apply the Obsolete and Conditional attributes;
25275         if we're overriding a virtual function, set the new private variable
25276         `parent_method'; call the new TypeManager.AddMethod().
25277
25278         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
25279         the MethodBuilder and the Method in a PtrHashtable.
25280         (TypeManager.builder_to_method): Added for this purpose.
25281         (TypeManager.MethodFlags): Added IsObsoleteError.
25282         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
25283         Obsolete and Conditional arguments in MethodBuilders.  If we discover
25284         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
25285         the message from the attribute.
25286
25287 2002-07-24  Martin Baulig  <martin@gnome.org>
25288
25289         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
25290         preprocessor directives, ensure that the argument to #define/#undef is
25291         exactly one identifier and that it's actually an identifier.
25292
25293         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
25294         did not work ....
25295
25296 2002-07-24  Martin Baulig  <martin@gnome.org>
25297
25298         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
25299         initialize it to TypeManager.object_type in the constructor.
25300         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
25301         of the `hm.get_current' method if we're using the collection pattern.
25302         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
25303         for the explicit conversion to make it work when we're using the collection
25304         pattern and the `Current' property has a different return type than `object'.
25305         Fixes #27713.
25306
25307 2002-07-24  Martin Baulig  <martin@gnome.org>
25308
25309         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
25310         does not match, but don't report any errors.  This method is called in
25311         order for all methods in a MethodGroupExpr until a matching method is
25312         found, so we don't want to bail out if the first method doesn't match.
25313         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
25314         matches, report the 123.  Fixes #28070.
25315
25316 2002-07-24  Martin Baulig  <martin@gnome.org>
25317
25318         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
25319         TypeManager.TypeToCoreType() to the top of the method so the
25320         following equality checks will work.  Fixes #28107.
25321
25322 2002-07-24  Martin Baulig  <martin@gnome.org>
25323
25324         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
25325         operand is of type uint, and the other operand is of type sbyte,
25326         short or int, the operands are converted to type long." -
25327         Actually do what this comment already told us.  Fixes bug #28106,
25328         added test-150.cs.
25329
25330 2002-07-24  Martin Baulig  <martin@gnome.org>
25331
25332         * class.cs (MethodBase): New abstract class.  This is now a base
25333         class for Property, Indexer and Event to avoid some code duplication
25334         in their Define() and DefineMethods() methods.
25335         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
25336         generic methods for Define() and DefineMethods().
25337         (FieldBase): Derive from MemberBase, not MemberCore.
25338         (Property): Derive from MemberBase, not MemberCore.
25339         (Property.DefineMethod): Moved all the code from this method to the
25340         new MethodBase.DefineAccessor(), just call it with appropriate
25341         argumetnts.
25342         (Property.Define): Call the new Property.DoDefine(), this does some
25343         sanity checks and we don't need to duplicate the code everywhere.
25344         (Event): Derive from MemberBase, not MemberCore.
25345         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
25346         accessors, this will also make them work with interface events.
25347         (Indexer): Derive from MemberBase, not MemberCore.
25348         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
25349         (Indexer.Define): Use the new MethodBase functions.
25350
25351         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
25352         argument to the constructor.
25353         (Interface.FindMembers): Added support for interface events.
25354         (Interface.PopluateEvent): Implemented.
25355
25356         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
25357
25358 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
25359
25360         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
25361         but this is required to check for a method name being the same as
25362         the containing class.  
25363
25364         Handle this now.
25365
25366 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25367
25368         * interface.cs: initialize variable.
25369
25370 2002-07-23  Martin Baulig  <martin@gnome.org>
25371
25372         Implemented the IndexerName attribute in interfaces.
25373
25374         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
25375         name if this is an explicit interface implementation.
25376         (Indexer.InterfaceIndexerName): New public variable.  If we're
25377         implementing an interface indexer, this is the IndexerName in that
25378         interface.  Otherwise, it's the IndexerName.
25379         (Indexer.DefineMethod): If we're implementing interface indexer,
25380         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
25381         and Pending.ImplementIndexer methods.
25382         (Indexer.Define): Also define the PropertyBuilder if we're
25383         implementing an interface indexer and this is neither an explicit
25384         interface implementation nor do the IndexerName match the one in
25385         the interface.
25386
25387         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
25388         If a method is defined here, then we always need to create a proxy
25389         for it.  This is used when implementing interface indexers.
25390         (Pending.IsInterfaceIndexer): New public method.
25391         (Pending.ImplementIndexer): New public method.
25392         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
25393         This is used when implementing interface indexers to define a proxy
25394         if necessary.
25395         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
25396         define a proxy if necessary.
25397
25398         * interface.cs (Interface.IndexerName): New public variable.
25399         (Interface.PopulateIndexer): Set the IndexerName.
25400         (Interface.DefineIndexers): New private method.  Populate all the
25401         indexers and make sure their IndexerNames match.
25402
25403         * typemanager.cs (IndexerPropertyName): Added support for interface
25404         indexers.
25405
25406 2002-07-22  Martin Baulig  <martin@gnome.org>
25407
25408         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
25409         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
25410         ret if HasReturnLabel.
25411         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
25412         variables.
25413
25414         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
25415         and set the ec.LoopBeginTryCatchLevel.
25416         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
25417         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
25418         the current ec.TryCatchLevel, the branch goes out of an exception
25419         block.  In this case, we need to use Leave and not Br.
25420
25421 2002-07-22  Martin Baulig  <martin@gnome.org>
25422
25423         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
25424         block unless the block does not always return or it is contained in
25425         another try { ... } catch { ... } block.  Fixes bug #26506.
25426         Added verify-1.cs to the test suite.
25427
25428 2002-07-22  Martin Baulig  <martin@gnome.org>
25429
25430         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
25431         then we do not always return.  Fixes bug #24985.
25432
25433 2002-07-22  Martin Baulig  <martin@gnome.org>
25434
25435         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
25436         lookup on a per-class level; ie. walk up the class hierarchy until we
25437         found at least one applicable method, then choose the best among them.
25438         Fixes bug #24463 and test-29.cs.
25439
25440 2002-07-22  Martin Baulig  <martin@gnome.org>
25441
25442         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
25443         return types of the methods.  The return type is not part of the
25444         signature and we must not check it to make the `new' modifier work.
25445         Fixes bug #27999, also added test-147.cs.
25446         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
25447
25448         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
25449         on the method's return type.
25450
25451 2002-07-21  Martin Baulig  <martin@gnome.org>
25452
25453         * assign.cs: Make this work if the rightmost source is a constant and
25454         we need to do an implicit type conversion.  Also adding a few more tests
25455         to test-38.cs which should have caught this.
25456
25457         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
25458         target in the makefile for this.  The makefile.gnu is primarily intended
25459         for end-users who don't want to debug the compiler.
25460
25461 2002-07-21  Martin Baulig  <martin@gnome.org>
25462
25463         * assign.cs: Improved the Assign class so it can now handle embedded
25464         assignments (X = Y = Z = something).  As a side-effect this'll now also
25465         consume less local variables.  test-38.cs now passes with MCS, added
25466         a few new test cases to that test.
25467
25468 2002-07-20  Martin Baulig  <martin@gnome.org>
25469
25470         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
25471         instructions.  Fixes bug #27977, also added test-146.cs.
25472
25473 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25474
25475         * cs-tokenizer.cs: fixed getHex ().
25476
25477 2002-07-19  Martin Baulig  <martin@gnome.org>
25478
25479         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
25480         not Type.GetType() to lookup the array type.  This is needed when
25481         we're constructing an array of a user-defined type.
25482         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
25483         single-dimensional arrays, but also for single-dimensial arrays of
25484         type decimal.
25485
25486 2002-07-19  Martin Baulig  <martin@gnome.org>
25487
25488         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
25489         this function is called, it's not allowed to share LocalBuilders
25490         among ILGenerators.
25491
25492 2002-07-19  Martin Baulig  <martin@gnome.org>
25493
25494         * expression.cs (Argument.Resolve): Report an error 118 when trying
25495         to pass a type as argument.
25496
25497 2002-07-18  Martin Baulig  <martin@gnome.org>
25498
25499         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
25500         Conv_R_Un for the signed `long' type.
25501
25502 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
25503
25504         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
25505         `expr' for the temporary result, as that will fail if we do
25506         multiple resolves on the same expression.
25507
25508 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
25509
25510         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
25511         ec.TypeContainer for looking up aliases. 
25512
25513         * class.cs (TypeContainer): Remove LookupAlias from here.
25514
25515         * decl.cs (DeclSpace); Move here.
25516
25517 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
25518
25519         * class.cs (FindMembers): Only call filter if the constructor
25520         bulider is not null.
25521
25522         Also handle delegates in `NestedTypes' now.  Now we will perform
25523         type lookups using the standard resolution process.  This also
25524         fixes a bug.
25525
25526         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
25527         This uses Expressions (the limited kind that can be parsed by the
25528         tree) instead of strings.
25529
25530         * expression.cs (ComposedCast.ToString): Implement, used to flag
25531         errors since now we have to render expressions.
25532
25533         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
25534         FormArrayType. 
25535
25536         * ecore.cs (SimpleName.ToString): ditto.
25537
25538         * cs-parser.jay: Instead of using strings to assemble types, use
25539         Expressions to assemble the type (using SimpleName, ComposedCast,
25540         MemberAccess).  This should fix the type lookups in declarations,
25541         because we were using a different code path for this.
25542
25543         * statement.cs (Block.Resolve): Continue processing statements
25544         even when there is an error.
25545
25546 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
25547
25548         * class.cs (Event.Define): Also remove the `remove' method from
25549         the list of pending items.
25550
25551         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
25552         generate more compact code. 
25553
25554 2002-07-17  Martin Baulig  <martin@gnome.org>
25555
25556         * const.cs (Const.LookupConstantValue): Add support for constant
25557         `unchecked' and `checked' expressions.
25558         Also adding test case test-140.cs for this.
25559
25560 2002-07-17  Martin Baulig  <martin@gnome.org>
25561
25562         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
25563         check whether mi.ReturnType implements the IEnumerator interface; the
25564         `==' and the IsAssignableFrom() will fail in this situation.
25565
25566 2002-07-16  Ravi Pratap  <ravi@ximian.com>
25567
25568         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
25569         here too.
25570
25571 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25572
25573         * expression.cs: fixed bug #27811.
25574
25575 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
25576
25577         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
25578         Molaro: when we are a ref, the value already contains a pointer
25579         value, do not take the address of it.
25580
25581 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
25582         * removed mb-parser.jay and mb-tokenizer.cs
25583
25584 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
25585
25586         * expression.cs: check against the building corlib void type.
25587
25588 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
25589
25590         * ecore.cs: fix for valuetype static readonly fields: when 
25591         initializing them, we need their address, not the address of a copy.
25592
25593 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
25594
25595         * typemanager.cs: register also enum_type in corlib.
25596
25597 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
25598
25599         * class.cs: allow calling this (but not base) initializers in structs.
25600
25601 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
25602
25603         * ecore.cs: make sure we compare against the building base types
25604         in GetTypeSize ().
25605
25606 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
25607
25608         * typemanager.cs: fix TypeToCoreType() to handle void and object
25609         (corlib gets no more typerefs after this change).
25610
25611 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
25612
25613         * expression.cs (ArrayCreation.EmitArrayArguments): use
25614         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
25615
25616         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
25617         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
25618         array indexes, the runtime actually forbids them.
25619
25620         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
25621         for array arguments here.
25622
25623         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
25624         instead of the default for ValueTypes.
25625
25626         (New.DoEmit): Use IsValueType instead of
25627         IsSubclassOf (value_type)
25628         (New.DoResolve): ditto.
25629         (Invocation.EmitCall): ditto.
25630
25631         * assign.cs (Assign): ditto.
25632
25633         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
25634         Statements *are* currently doing part of their resolution during
25635         Emit.  
25636
25637         Expressions do always resolve during resolve, but statements are
25638         only required to propagate resolution to their children.
25639
25640 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
25641
25642         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
25643
25644         (LoadAssembly): Do not add the dll if it is already specified
25645
25646         (MainDriver): Add the System directory to the link path at the end,
25647         after all the other -L arguments. 
25648
25649         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
25650         wrong opcode for loading bytes and bools (ldelem.i1 instead of
25651         ldelem.u1) and using the opposite for sbytes.
25652
25653         This fixes Digger, and we can finally run it.
25654
25655         * driver.cs (UnixParseOption): Move the option parsing here.  
25656         (CSCParseOption): Implement CSC-like parsing of options.
25657
25658         We now support both modes of operation, the old Unix way, and the
25659         new CSC-like way.  This should help those who wanted to make cross
25660         platform makefiles.
25661
25662         The only thing broken is that /r:, /reference: and /lib: are not
25663         implemented, because I want to make those have the same semantics
25664         as the CSC compiler has, and kill once and for all the confussion
25665         around this.   Will be doing this tomorrow.
25666
25667         * statement.cs (Unsafe.Resolve): The state is checked during
25668         resolve, not emit, so we have to set the flags for IsUnsfe here.
25669
25670 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
25671
25672         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
25673         not catch the Error_ObjectRefRequired in SimpleName (as it is
25674         possible to have a class/instance variable name that later gets
25675         deambiguated), we have to check this here.      
25676
25677 2002-07-10  Ravi Pratap  <ravi@ximian.com>
25678
25679         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
25680         make static and put into Expression.
25681
25682         (Event.Define): Register the private field of the event with the 
25683         TypeManager so that GetFieldFromEvent can get at it.
25684
25685         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
25686         keep track of the private field associated with an event which
25687         has no accessors.
25688
25689         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
25690         private field.
25691
25692         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
25693
25694 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
25695
25696         * expression.cs (Binary.EmitBranchable): this routine emits the
25697         Binary expression in a branchable context.  This basically means:
25698         we need to branch somewhere, not just get the value on the stack.
25699
25700         This works together with Statement.EmitBoolExpression.
25701
25702         * statement.cs (Statement.EmitBoolExpression): Use
25703         EmitBranchable. 
25704
25705 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
25706
25707         * statement.cs (For): Reduce the number of jumps in loops.
25708
25709         (For): Implement loop inversion for the For statement.
25710
25711         (Break): We can be breaking out of a Try/Catch controlled section
25712         (foreach might have an implicit try/catch clause), so we need to
25713         use Leave instead of Br.
25714
25715         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
25716         now).  If the instace expression supports IMemoryLocation, we use
25717         the AddressOf method from the IMemoryLocation to extract the
25718         address instead of emitting the instance.
25719
25720         This showed up with `This', as we were emitting the instance
25721         always (Emit) instead of the Address of This.  Particularly
25722         interesting when This is a value type, as we dont want the Emit
25723         effect (which was to load the object).
25724
25725 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
25726
25727         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
25728
25729         * statement.cs (Checked): Set the CheckedState during the resolve
25730         process too, as the ConvCast operations track the checked state on
25731         the resolve process, and not emit.
25732
25733         * cs-parser.jay (namespace_member_declaration): Flag that we have
25734         found a declaration when we do.  This is used to flag error 1529
25735
25736         * driver.cs: Report ok when we display the help only.
25737
25738 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
25739
25740         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
25741
25742 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
25743
25744         * cs-tokenizer.cs (define): We also have to track locally the
25745         defines.  AllDefines is just used for the Conditional Attribute,
25746         but we also need the local defines for the current source code. 
25747
25748 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
25749
25750         * statement.cs (While, For, Do): These loops can exit through a
25751         Break statement, use this information to tell whether the
25752         statement is the last piece of code.
25753
25754         (Break): Flag that we break.
25755
25756         * codegen.cs (EmitContexts): New `Breaks' state variable.
25757
25758 2002-07-03  Martin Baulig  <martin@gnome.org>
25759
25760         * class.cs (TypeContainer.MethodModifiersValid): Allow override
25761         modifiers in method declarations in structs.  Otherwise, you won't
25762         be able to override things like Object.Equals().
25763
25764 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
25765
25766         * class.cs (Method, Property, Indexer): Do not allow the public
25767         modifier to be used in explicit interface implementations.
25768
25769         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
25770         override modifiers in method declarations in structs
25771
25772 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
25773
25774         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
25775         integer or real overflow, report an error
25776
25777 2002-07-02  Martin Baulig  <martin@gnome.org>
25778
25779         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
25780         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
25781         to tell the runtime about our newly created System.Object and
25782         System.ValueType types.
25783
25784 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
25785
25786         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
25787         struct instead of Ldarg/Starg.
25788
25789 2002-07-02  Martin Baulig  <martin@gnome.org>
25790
25791         * expression.cs (Indirection.Indirection): Call
25792         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
25793
25794 2002-07-02  Martin Baulig  <martin@gnome.org>
25795
25796         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
25797         ValueType, call TypeManager.TypeToCoreType() on it.
25798         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
25799         the OpCodes.Newarr argument.
25800
25801 2002-07-02  Martin Baulig  <martin@gnome.org>
25802
25803         * expression.cs (Invocation.EmitCall): When compiling corlib,
25804         replace all calls to the system's System.Array type to calls to
25805         the newly created one.
25806
25807         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
25808         System.Array methods.
25809         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
25810         from the system's System.Array type which must be replaced.
25811
25812 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
25813
25814         * typemanager.cs: load unverifiable_code_ctor so we can build
25815         corlib using the correct type. Avoid using GetTypeCode() with
25816         TypeBuilders.
25817         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
25818         TypeManager.object_type to allow building corlib.
25819
25820 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
25821
25822         * ecore.cs: handle System.Enum separately in LoadFromPtr().
25823
25824 2002-07-01  Martin Baulig  <martin@gnome.org>
25825
25826         * class.cs: Make the last change actually work, we need to check
25827         whether `ifaces != null' to avoid a crash.
25828
25829 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
25830
25831         * class.cs: when we build structs without fields that implement
25832         interfaces, we need to add the interfaces separately, since there is
25833         no API to both set the size and add the interfaces at type creation
25834         time.
25835
25836 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
25837
25838         * expression.cs: the dimension arguments to the array constructors
25839         need to be converted if they are a long.
25840
25841 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
25842
25843         * class.cs: don't emit ldarg.0 if there is no parent constructor
25844         (fixes showstopper for corlib).
25845
25846 2002-06-29  Martin Baulig  <martin@gnome.org>
25847
25848         MCS now compiles corlib on GNU/Linux :-)
25849
25850         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
25851         ie. check for MethodImplOptions.InternalCall.
25852
25853         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
25854         and TypeManager.attribute_type are null, so we must explicitly check
25855         whether parent is not null to find out whether it's an attribute type.
25856         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
25857         and SetBuilder, not only if the property is neither abstract nor external.
25858         This is necessary to set the MethodImplOptions on the accessor methods.
25859         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
25860         SetBuilder, see Property.Emit().
25861
25862         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
25863         populate "System.Object", "System.ValueType" and "System.Attribute" since
25864         they've already been populated from BootCorlib_PopulateCoreTypes().
25865
25866 2002-06-29  Martin Baulig  <martin@gnome.org>
25867
25868         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
25869         is the NullLiteral, we also need to make sure that target_type is not
25870         an enum type.   
25871
25872 2002-06-29  Martin Baulig  <martin@gnome.org>
25873
25874         * rootcontext.cs (RootContext.ResolveCore): We must initialize
25875         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
25876         before calling BootstrapCorlib_ResolveDelegate ().
25877
25878 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25879
25880         * statement.cs: fixed build-breaker. All tests passed ok.
25881
25882 2002-06-27  Martin Baulig  <martin@gnome.org>
25883
25884         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
25885         for System.Decimal when compiling corlib.
25886
25887 2002-06-27  Martin Baulig  <martin@gnome.org>
25888
25889         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
25890         switch blocks which contain nothing but a default clause.
25891
25892 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
25893
25894        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
25895
25896 2002-06-27  Martin Baulig  <martin@gnome.org>
25897
25898         * ecore.cs (PropertyExpr.PropertyExpr): Call
25899         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
25900
25901         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
25902         is already a TypeBuilder.
25903
25904 2002-06-27  Martin Baulig  <martin@gnome.org>
25905
25906         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
25907         `target_type == TypeManager.array_type', not IsAssignableFrom() in
25908         the "from an array-type to System.Array" case.  This makes it work
25909         when compiling corlib.
25910
25911 2002-06-27  Martin Baulig  <martin@gnome.org>
25912
25913         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
25914         non-static PropertyExpr, set its InstanceExpression.  This makes
25915         the `ICollection.Count' property work in System/Array.cs.
25916
25917 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
25918
25919         * driver.cs: Made error handling more consistent.  Errors now
25920         tracked by Report class, so many methods which used to return int
25921         now return void.  Main() now prints success/failure and 
25922         errors/warnings message.
25923
25924         Renamed '--probe' compiler argument to '--expect-error'.  Removed
25925         the magic number return values (123 and 124).  Now, if the
25926         expected error occurs, the compiler exits with success (exit value
25927         0).  If the compilation completes without seeing that particular
25928         error, the compiler exits with failure (exit value 1).  The
25929         makefile in mcs/errors has been changed to handle the new behaviour.
25930
25931         * report.cs: Made 'expected error' number a property and renamed
25932         it from 'Probe' to 'ExpectedError'.
25933
25934         * genericparser.cs: Removed error handling support, since it is
25935         now all done by Report class.
25936
25937         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
25938         class, so parse() no longer returns an int.
25939
25940         * namespace.cs: Use Report.Error instead of GenericParser.error
25941
25942 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
25943
25944         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
25945         TypeContainer.AddOperator): At the front of the list put the
25946         explicit implementations, so they get resolved/defined first. 
25947
25948 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
25949
25950         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
25951         interface type is implemented by this TypeContainer.  Used during
25952         explicit interface implementation.
25953
25954         (Property.Define, Indexer.Define, Method.Define): Validate that
25955         the given interface in the explicit implementation is one of the
25956         base classes for the containing type.
25957
25958         Also if we are explicitly implementing an interface, but there is
25959         no match in the pending implementation table, report an error.
25960
25961         (Property.Define): Only define the property if we are
25962         not explicitly implementing a property from an interface.  Use the
25963         correct name also for those properties (the same CSC uses,
25964         although that is really not needed).
25965
25966         (Property.Emit): Do not emit attributes for explicitly implemented
25967         properties, as there is no TypeBuilder.
25968
25969         (Indexer.Emit): ditto.
25970
25971         Hiding then means that we do not really *implement* a pending
25972         implementation, which makes code fail.
25973
25974 2002-06-22  Martin Baulig  <martin@gnome.org>
25975
25976         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
25977         the return value of Object.GetType().  [FIXME: we need to do this whenever
25978         we get a type back from the reflection library].
25979
25980 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
25981
25982         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
25983
25984 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
25985
25986         * attribute.cs: Return null if we can not look up the type.
25987
25988         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
25989         the interface types found.
25990
25991         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
25992         interface types found.
25993
25994         * typemanager.cs (GetInterfaces): Make this routine returns alll
25995         the interfaces and work around the lame differences between
25996         System.Type and System.Reflection.Emit.TypeBuilder in the results
25997         result for GetInterfaces.
25998
25999         (ExpandInterfaces): Given an array of interface types, expand and
26000         eliminate repeated ocurrences of an interface.  This expands in
26001         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
26002         be IA, IB, IC.
26003
26004 2002-06-21  Martin Baulig  <martin@gnome.org>
26005
26006         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
26007         on System.Enum.
26008
26009 2002-06-21  Martin Baulig  <martin@gnome.org>
26010
26011         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
26012         and called with one of the core types, return the corresponding typebuilder for
26013         that type.
26014
26015         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
26016         element type.
26017
26018 2002-06-21  Martin Baulig  <martin@gnome.org>
26019
26020         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
26021         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
26022         (Expression.ConvertReferenceExplicit): Likewise.
26023
26024         * expression.cs (ElementAccess.DoResolve): Likewise.
26025         (ElementAccess.DoResolveLValue): Likewise.
26026
26027 2002-06-10  Martin Baulig  <martin@gnome.org>
26028
26029         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
26030         add the "value" parameter to the parameter list.
26031
26032         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
26033         to our caller.
26034
26035 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
26036
26037         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
26038         the argument to an int, uint, long or ulong, per the spec.  Also
26039         catch negative constants in array creation.
26040
26041 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
26042
26043         * class.cs: do not allow the same interface to appear twice in
26044         the definition list.
26045
26046 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
26047
26048         * ecore.cs: don't use ldlen with System.Array.
26049
26050 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
26051
26052         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
26053
26054 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
26055
26056         * modifiers.cs: produce correct field attributes for protected
26057         internal. Easy fix so miguel can work on ther harder stuff:-)
26058
26059 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
26060
26061         * pending.cs: New file.  Move the code from class.cs here.
26062         Support clearning the pending flag for all methods (when not doing
26063         explicit interface implementation).
26064
26065 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
26066
26067         * rootcontext.cs: added a couple more types needed to bootstrap.
26068
26069 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
26070
26071         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
26072         constructor in the type, instead of any constructor in the type
26073         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
26074         a bug in the Mono runtime when applying the params attribute). 
26075
26076 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
26077         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
26078
26079 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
26080
26081         * expression.cs (Unary.ResolveOperator): Use TypeManager
26082         to resolve the type.
26083
26084 2002-06-13  Ravi Pratap  <ravi@ximian.com>
26085
26086         * cs-parser.jay (enum_member_declaration): Pass in the attributes
26087         attached.
26088
26089         * enum.cs (AddEnumMember): Add support to store the attributes associated 
26090         with each member too.
26091
26092         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
26093         field builders too - this takes care of the enum member case.
26094
26095 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
26096
26097         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
26098         address-of operator on both value types and pointers.
26099
26100 2002-06-10  Martin Baulig  <martin@gnome.org>
26101
26102         * interface.cs (Interface.PopulateIndexer): Add the indexer's
26103         PropertyBuilder to the `property_builders' list.
26104
26105         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
26106         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
26107         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
26108         find any indexers which are inherited from an interface.
26109
26110 2002-06-09  Martin Baulig  <martin@gnome.org>
26111
26112         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
26113         the same type as the constant if necessary.  There's also a test-130.cs
26114         for this.
26115
26116         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
26117
26118         * typemanager.cs (TypeManager.ChangeType): Previously known as
26119         Enum.ChangeEnumType().
26120
26121 2002-06-09  Martin Baulig  <martin@gnome.org>
26122
26123         * expression.cs (Cast.TryReduce): Added support for consts.
26124
26125 2002-06-08  Ravi Pratap  <ravi@ximian.com>
26126
26127         * class.cs (Accessor): Hold attributes information so we can pass
26128         it along.
26129
26130         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
26131         Modify to pass in attributes attached to the methods.
26132
26133         (add_accessor_declaration, remove_accessor_declaration): Ditto.
26134
26135         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
26136         to handle the Accessor kind :-)
26137
26138         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
26139
26140 2002-06-08  Martin Baulig  <martin@gnome.org>
26141
26142         * expression.cs (Unary.TryReduceNegative): Added support for
26143         ULongConstants.
26144
26145 2002-06-08  Martin Baulig  <martin@gnome.org>
26146
26147         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
26148         name can't be found in the `defined_names' - the caller will do a
26149         MemberLookup in this case and thus find methods in System.Enum
26150         such as Enum.IsDefined().
26151
26152 2002-06-08  Martin Baulig  <martin@gnome.org>
26153
26154         * enum.cs (Enum.ChangeEnumType): This is a custom version of
26155         Convert.ChangeType() which works with TypeBuilder created types.
26156         (Enum.LookupEnumValue, Enum.Define): Use it here.
26157
26158         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
26159         `TypeBuilder.BaseType != null' check.
26160         (TypeContainer.FindMembers): Only lookup parent members if we
26161         actually have a parent.
26162         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
26163         (ConstructorInitializer.Resolve): Likewise.
26164
26165         * interface.cs (Interface.FindMembers): Added
26166         `TypeBuilder.BaseType != null' check.
26167
26168         * rootcontext.cs (RootContext.ResolveCore): Added
26169         "System.Runtime.CompilerServices.IndexerNameAttribute" to
26170         classes_second_stage.
26171
26172         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
26173         debug_type and trace_type when compiling with --nostdlib.       
26174
26175 2002-06-07  Martin Baulig  <martin@gnome.org>
26176
26177         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
26178         (AddField): Set it to true when adding a non-static field.
26179         (DefineType): Use `have_nonstatic_fields' to find out whether we
26180         have non-static fields, not `Fields != null'.
26181
26182 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
26183
26184         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
26185         dereferencing a null on the static-field code path)
26186
26187 2002-05-30  Martin Baulig  <martin@gnome.org>
26188
26189         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
26190         to take command line arguments.  Use reflection to call the new
26191         custom `Initialize' function on the symbol writer and pass it the
26192         command line arguments.
26193
26194         * driver.cs (--debug-args): New command line argument to pass command
26195         line arguments to the symbol writer.
26196
26197 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
26198
26199         * assign.cs (DoResolve): Forgot to do the implicit conversion to
26200         the target type for indexers and properties.  Thanks to Joe for
26201         catching this.
26202
26203 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
26204
26205         * typemanager.cs (MethodFlags): returns the method flags
26206         (Obsolete/ShouldIgnore) that control warning emission and whether
26207         the invocation should be made, or ignored. 
26208
26209         * expression.cs (Invocation.Emit): Remove previous hack, we should
26210         not do this on matching a base type, we should do this based on an attribute
26211
26212         Only emit calls to System.Diagnostics.Debug and
26213         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
26214         on the command line.
26215
26216         * rootcontext.cs: Global settings for tracing and debugging.
26217
26218         * cs-tokenizer.cs (define): New utility function to track
26219         defines.   Set the global settings for TRACE and DEBUG if found.
26220
26221 2002-05-25  Ravi Pratap  <ravi@ximian.com>
26222
26223         * interface.cs (Populate*): Pass in the TypeContainer as well as
26224         the DeclSpace as parameters so that we can create EmitContexts and
26225         then use that to apply attributes etc.
26226
26227         (PopulateMethod, PopulateEvent, PopulateProperty)
26228         (PopulateIndexer): Apply attributes everywhere.
26229
26230         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
26231         etc.
26232
26233         (ApplyAttributes): Update accordingly.
26234
26235         We now apply interface attributes for all members too.
26236
26237 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
26238
26239         * class.cs (Indexer.Define); Correctly check if we are explicit
26240         implementation (instead of checking the Name for a ".", we
26241         directly look up if the InterfaceType was specified).
26242
26243         Delay the creation of the PropertyBuilder.
26244
26245         Only create the PropertyBuilder if we are not an explicit
26246         interface implementation.   This means that explicit interface
26247         implementation members do not participate in regular function
26248         lookups, and hence fixes another major ambiguity problem in
26249         overload resolution (that was the visible effect).
26250
26251         (DefineMethod): Return whether we are doing an interface
26252         implementation. 
26253
26254         * typemanager.cs: Temporary hack until we get attributes in
26255         interfaces (Ravi is working on that) and we get IndexerName
26256         support in interfaces.
26257
26258         * interface.cs: Register the indexers as properties.
26259
26260         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
26261         warning, I have verified that this is a bug in the .NET runtime
26262         (JavaScript suffers of the same problem).
26263
26264         * typemanager.cs (MemberLookup): When looking up members for
26265         interfaces, the parent of an interface is the implicit
26266         System.Object (so we succeed in searches of Object methods in an
26267         interface method invocation.  Example:  IEnumerable x;  x.ToString
26268         ()) 
26269
26270 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
26271
26272         * class.cs (Event): Events should also register if they do
26273         implement the methods that an interface requires.
26274
26275         * typemanager.cs (MemberLookup); use the new GetInterfaces
26276         method. 
26277
26278         (GetInterfaces): The code used to lookup interfaces for a type is
26279         used in more than one place, factor it here. 
26280
26281         * driver.cs: Track the errors at the bottom of the file, we kept
26282         on going.
26283
26284         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
26285         instance if the method we are calling is static!
26286
26287 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
26288
26289         * attribute.cs (ApplyAttributes): Make this function filter out
26290         the IndexerName attribute (as that attribute in reality is never
26291         applied) and return the string constant for the IndexerName
26292         attribute. 
26293
26294         * class.cs (TypeContainer.Emit): Validate that all the indexers
26295         have the same IndexerName attribute, and if so, set the
26296         DefaultName attribute on the class. 
26297
26298         * typemanager.cs: The return value might contain other stuff (not
26299         only methods).  For instance, consider a method with an "Item"
26300         property and an Item method.
26301
26302         * class.cs: If there is a problem with the parameter types,
26303         return. 
26304
26305 2002-05-24  Ravi Pratap  <ravi@ximian.com>
26306
26307         * ecore.cs (ImplicitConversionExists): Wrapper function which also
26308         looks at user defined conversion after making a call to 
26309         StandardConversionExists - we need this for overload resolution.
26310
26311         * expression.cs : Update accordingly the various method calls.
26312
26313         This fixes 2 bugs filed against implicit user defined conversions 
26314
26315 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
26316
26317         * statement.cs: Track the result of the assignment.
26318
26319 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
26320
26321         * expression.cs (MemberAccess): Improved error reporting for
26322         inaccessible members.
26323
26324 2002-05-22  Martin Baulig  <martin@gnome.org>
26325
26326         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
26327         itself with debugging support.
26328
26329 2002-05-22  Martin Baulig  <martin@gnome.org>
26330
26331         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
26332         Removed, this isn't needed anymore.
26333
26334 2002-05-20  Martin Baulig  <martin@gnome.org>
26335
26336         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
26337         be underlying type for an enum.
26338
26339 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
26340
26341         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
26342         that splits out the loading of just the core types.
26343
26344         * rootcontext.cs (ResolveCore): Split the struct resolution in
26345         two, so we can load the enumeration underlying types before any
26346         enums are used.
26347
26348         * expression.cs (Is): Bandaid until we fix properly Switch (see
26349         bug #24985 for details).
26350
26351         * typemanager.cs (ImplementsInterface): The hashtable will contain
26352         a null if there are no interfaces implemented.
26353
26354 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
26355
26356         * cs-parser.jay (indexer_declarator): It is fine to have array
26357         parameters
26358
26359 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
26360
26361         * typemanager.cs: (RegisterBuilder): New function used to register
26362         TypeBuilders that implement interfaces.  Since
26363         TypeBuilder.GetInterfaces (as usual) does not work with lame
26364         Reflection.Emit. 
26365         (AddUserType): register interfaces.
26366
26367         (ImplementsInterface): Use the builder_to_ifaces hash if we are
26368         dealing with TypeBuilder.  Also, arrays are showing up as
26369         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
26370         methods can not be invoked on them!
26371
26372         * ecore.cs (ExplicitReferenceConversionExists): Made public.
26373         (ImplicitReferenceConversionExists): Split out from
26374         StandardConversionExists. 
26375
26376         * expression.cs (As): We were only implementing one of the three
26377         cases for the as operator.  We now implement them all.
26378         (Is): Implement the various other cases for Is as well.
26379
26380         * typemanager.cs (CACHE): New define used to control if we want or
26381         not the FindMembers cache.  Seems to have a negative impact on
26382         performance currently
26383
26384         (MemberLookup): Nested types have full acess to
26385         enclosing type members
26386
26387         Remove code that coped with instance/static returns for events, we
26388         now catch this in RealFindMembers.
26389
26390         (RealFindMembers): only perform static lookup if the instance
26391         lookup did not return a type or an event.  
26392
26393 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
26394
26395         * assign.cs (CompoundAssign): We pass more semantic information
26396         now to Compound Assignments than we did before: now we have all
26397         the information at hand, and now we resolve the target *before* we
26398         do the expression expansion, which allows the "CacheValue" method
26399         to have the effect we intended (before, a [x] += 1 would generate
26400         two differen ArrayAccess expressions from the ElementAccess,
26401         during the resolution process).
26402
26403         (CompoundAssign.DoResolve): Resolve target and original_source here.
26404
26405 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
26406
26407         * expression.cs (ArrayAccess): dropped debugging information. 
26408
26409         * typemanager.cs: Small bug fix: I was always returning i_members,
26410         instead of one of i_members or s_members (depending on which had
26411         the content).
26412
26413         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
26414         method is invoked before any code generation takes place, and it
26415         is a mechanism to inform that the expression will be invoked more
26416         than once, and that the method should use temporary values to
26417         avoid having side effects
26418
26419         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
26420
26421         * ecore.cs (Expression.CacheTemporaries): Provide empty default
26422         implementation.
26423
26424         * expression.cs (Indirection, ArrayAccess): Add support for
26425         CacheTemporaries in these two bad boys. 
26426
26427         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
26428         ldobj or ldind_ref.  
26429         (StoreFromPtr): Handle stobj as well.
26430
26431         * expression.cs (UnaryMutator): Share more code.
26432
26433         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
26434         down: I was not tracking the Filter function as well, which
26435         was affecting the results of the cache.
26436
26437 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
26438
26439         * attribute.cs: Remove the hack to handle the CharSet property on
26440         StructLayouts. 
26441
26442 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
26443
26444         * attribute.cs (DoResolve): More uglyness, we now only try to
26445         resolve the attribute partially, to extract the CharSet
26446         information (only if we are a StructLayout attribute).  Otherwise 
26447
26448         (GetExtraTypeInfo): Add some code to conditionally kill in the
26449         future this.   I am more and more convinced that the .NET
26450         framework has special code to handle the attribute setting on
26451         certain elements.
26452
26453         * expression.cs (IsParamsMethodApplicable): Revert my previous
26454         foreach change here, it was wrong.
26455
26456 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
26457
26458         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
26459         (pp_expr): do not abort on unknown input, just return.
26460         (eval): abort if there are pending chars.
26461
26462         * attribute.cs (Attribute.Resolve): Positional parameters are
26463         optional.  Deal with that case.
26464
26465         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
26466         the Ansi/Unicode/Auto information for the type.
26467
26468         (TypeContainer.DefineType): instantiate the EmitContext here, as
26469         we will be using it during the type definition (to resolve
26470         attributes) and during the emit phase.
26471
26472         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
26473         to pull type information out of the attributes
26474
26475         (Attribute.Resolve): track the constructor builder, and allow for
26476         multiple invocations (structs and classes will use this).
26477
26478         * ecore.cs (MemberLookupFinal): new version with all the
26479         parameters customizable.
26480
26481         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
26482         constructors.  Return if the result value is null (as the error
26483         would have been flagged already by MemberLookupFinal)
26484
26485         Do not allow instances of abstract classes or interfaces to be
26486         created.
26487
26488         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
26489         We have to compare the assembly property here when dealing with
26490         FamANDAssem and Assembly access modifiers, because we might be
26491         creating an assembly from *modules* (that means that we are not
26492         getting TypeBuilders for types defined in other modules that are
26493         part of this assembly).
26494
26495         (Method.Emit): If the method is marked abstract and has a body,
26496         emit an error. 
26497
26498         (TypeContainer.DefineMembers): If both the defined member and the
26499         parent name match are methods, then do not emit any warnings: let
26500         the Method.Define routine take care of flagging warnings.  But if
26501         there is a mismatch (method overrides something else, or method is
26502         overriwritten by something, then emit warning).
26503
26504         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
26505         set to null, this means `do not check for the return type on the
26506         signature'. 
26507
26508         (Method.Define): set the return type for the method signature to
26509         null, so that we get methods with the same name and parameters and
26510         different return types.  This is used to flag warning 114 (you are
26511         hiding a method, and you probably want to use the new/override
26512         keywords instead).
26513
26514         * typemanager.cs (MemberLookup): Implemented proper access
26515         control, closing a long standing set of bug reports.  The problem
26516         was that the Framework only has two bits: Public and NonPublic,
26517         and NonPublic includes private and protected methods, but we need
26518         to enforce the FamANDAssem, FamOrAssem and Family. 
26519
26520 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
26521
26522         * statement.cs (GotoCase): Return true: Ammounts to giving up
26523         knowledge on whether we return or not, and letting the other case
26524         be responsible for it.
26525
26526 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
26527
26528         * driver.cs: Do not load directories for each file processed, only
26529         do it if there is a pattern.
26530
26531         * ecore.cs: Report readonly assigns here as well, as we might have
26532         been resolved only by MemberAccess.
26533
26534         (SimpleName.SimpleNameResolve): Also be useful for LValue
26535         resolution.   We need this to propagate assign to local readonly variables
26536
26537         * typemanager.cs: Use a ptrhashtable for the criteria, because we
26538         do not want to reuse potential criteria memory.
26539
26540         * class.cs (MyEventBuilder): Set reflected_type;
26541
26542         * ecore.cs (Constantify): Added support for constifying bools.
26543
26544         (RootContext.LookupType): Added a cache for values looked up in
26545         the declaration space.
26546
26547         * typemanager.cs (FindMembers): Now is a front-end to
26548         RealFindMembers, and provides a two-level hashtable-based cache to
26549         the request.  
26550
26551         15% performance improvement: from 22.5 to 19.2 seconds.
26552
26553         * expression.cs (IsParamsMethodApplicable): use foreach.
26554         (Invocation.DoResolve): ditto.
26555         (New.DoResolve): ditto.
26556         (ArrayCreation.DoResolve): ditto.
26557
26558         * ecore.cs (FindMostEncompassingType): use foreach.
26559
26560         * delegate.cs (NewDelegate.DoResolve): Use foreach
26561
26562         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
26563         (RemoveMethods): use foreach.
26564
26565         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
26566         nested foreach statements instead of for, and also break out of
26567         the inner loop once a match is found.
26568
26569         (Invocation.OverloadResolve): Use foreach, simplify the code. 
26570
26571 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
26572
26573         * cfold.cs (BinaryFold): During an enumeration evaluation context,
26574         we actually unwrap the expression to allow for extra information
26575         to be extracted. 
26576
26577         * expression.cs: Use Shr_Un on unsigned operations. 
26578
26579 2002-05-08  Ravi Pratap  <ravi@ximian.com>
26580
26581         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
26582         applicable operators was not being considered correctly. This closes
26583         the bug Miguel reported.
26584
26585 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
26586
26587         * attribute.cs: check that the type derives from System.Attribute
26588         and report the correct error in that case (moved the duplicate code to
26589         its own method, too).
26590
26591 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
26592
26593         * attribute.cs: lookup attribute type name as the spec says: first the
26594         bare attribute name and then name + "Attribute" (nant compiles with
26595         mcs after this fix).
26596
26597 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
26598
26599         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
26600         Because of the way we parse things, we should try to see if a
26601         UIntConstant can fit in an integer.
26602
26603 2002-05-07  Ravi Pratap  <ravi@ximian.com>
26604
26605         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
26606         when we are in an explicit context.
26607
26608         (ConvertReferenceExplicit): When converting from Iface type S to Class
26609         T make sure the rules are implemented as an OR.
26610
26611         * parameter.cs (ParameterType): Make it a property for now although the
26612         purpose really isn't anything immediate.
26613
26614         * expression.cs (Is*Applicable): Do better checking on the parameter type
26615         of a ref/out parameter. The ones from the system assemblies are already 
26616         marked with the correct type so we don't need to do any correction.
26617
26618         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
26619         the object type is standard too so include that.
26620
26621 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
26622
26623         * ecore.cs (StandardConversionExists): Augment with missing code:
26624         deal with IntConstant, LongConstants and Enumerations.
26625
26626         * assign.cs: Report the error, instead of failing silently
26627
26628         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
26629         typecontainer that they are declared, because the
26630         typecontainer/namespace will have the list of using clauses that
26631         need to be applied.
26632
26633         Assembly Attributes were escaping the normal registration
26634         mechanism. 
26635
26636         (EmitCode): Apply attributes within an EmitContext that represents
26637         the container they were declared on.
26638
26639         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
26640
26641 2002-05-06  Ravi Pratap  <ravi@ximian.com>
26642
26643         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
26644         Revamp completely - make much cleaner as we now operate only
26645         on a set of Types.
26646
26647         (FindMostSpecificSource, FindMostSpecificTarget): New methods
26648         to implement the logic detailed in the spec more correctly.
26649
26650         (UserDefinedConversion): Update accordingly.
26651
26652 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
26653
26654         * statement.cs: Return flow analysis information up.
26655
26656         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
26657         and the default.
26658
26659         (token): Do not consume an extra character before calling
26660         decimal_digits.
26661
26662 2002-05-06  Piers Haken <piersh@friskit.com>
26663
26664         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
26665
26666 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
26667
26668         * class.cs (Constructor.Emit): Set the IsStatic flag in the
26669         EmitContext during the instance constructor initializer
26670         resolution, to stop access to instance variables.
26671
26672         This is mandated by the spec, last paragraph of the `constructor
26673         initializers' section. 
26674
26675 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
26676
26677         * cs-parser.jay, class.cs (Accessor): new class used to represent
26678         an accessor (get or set).  In the past we used `null' to represent
26679         a missing accessor.  But this is ambiguous because there was no
26680         way to tell in abstract indexers/properties if one of them was
26681         specified.
26682
26683         Now there is a way of addressing that.
26684
26685         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
26686         instead of FindMembers.
26687
26688         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
26689         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
26690
26691         * attribute.cs: Treat indexers and properties as the same in terms
26692         of applying attributes
26693
26694         * ecore.cs (FindMostEncompassedType): Use statically initialized
26695         EmptyExpressions()s like we do elsewhere to avoid creating useless
26696         objects (and we take this out of the tight loop).
26697
26698         (GetConversionOperators): Move the code to extract the actual
26699         operators to a separate routine to clean things up.
26700
26701 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
26702
26703         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
26704         events are always registered FieldBuilders.
26705
26706         * class.cs (FieldBase): New class shared by Fields 
26707
26708         * delegate.cs: If we are a toplevel delegate, use our full name.
26709         If we are a nested delegate, then only use our tail name.
26710
26711 2002-05-02  Ravi Pratap  <ravi@ximian.com>
26712
26713         * expression.cs (IsApplicable): Ensure that we add the "&" to
26714         ref/out types before comparing it with the type of the argument.
26715
26716         (IsParamsMethodApplicable): Ditto.
26717
26718         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
26719         silly me ;-)
26720
26721         * delegate.cs : Handle the case when we have more than one applicable
26722         method. Flag an error only when we finish checking all.
26723
26724 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
26725
26726         * expression.cs: Add support for boolean static initializers.
26727
26728 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
26729
26730         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
26731
26732         * parameter.cs (ComputeParameterTypes,
26733         ComputeAndDefineParameterTypes): Better error handling: now we
26734         clear the `types' cache if we fail during any of the type lookups.
26735         We also return the status code correctly to our caller
26736
26737         * delegate.cs: If we fail to define a delegate, abort the extra
26738         steps. 
26739
26740         * expression.cs (Binary.ResolveOperator): for
26741         operator==(object,object) and operator !=(object, object) we also
26742         have to verify that there is an implicit conversion from one to
26743         the other.
26744
26745         (ArrayAccess.DoResolve): Array Access can operate on
26746         non-variables. 
26747
26748 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
26749
26750         * assign.cs (CompoundAssign): A new class used as a "flag" that
26751         the assignment actually is happening as part of a compound
26752         assignment operator.
26753
26754         During compound assignment, a few new rules exist to enable things
26755         like:
26756
26757         byte b |= 1 + 2
26758
26759         From the spec:
26760
26761         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
26762         to the type of x) if y is implicitly convertible to the type of x,
26763         and the operator is a builtin operator and the return type of the
26764         operator is explicitly convertible to the type of x. 
26765
26766         * rootcontext.cs: Reset warning level to 2.  4 catches various
26767         "interesting" features in mcs, we must clean this up at some
26768         point, but currently am trying to kill other bugs ;-)
26769
26770         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
26771         in container classes as well.  
26772
26773         * expression.cs (Binary.ResolveOperator): Handle string case
26774         before anything else (as operator overloading does emit an error
26775         before doing anything else).
26776
26777         This code could go away when we move to a table driven model, but
26778         i could not come up with a good plan last night.
26779
26780 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
26781
26782         * typemanager.cs (CSharpName): reimplementation using regex.
26783         * class.cs: added null check for fields in Emit
26784         * rootcontext.cs: set warninglevel to 4
26785
26786 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
26787
26788         * typemanager.cs (CSharpName): reimplemented with Lupus
26789         suggestion.
26790
26791 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
26792
26793         * statement.cs (If): correclty implement Resolve, because we were
26794         not catching sem errors in there.  The same process is needed
26795         everywhere else. 
26796         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
26797
26798
26799         (Statement.Warning_DeadCodeFound): Factorize code.
26800         (While): Report dead code here too.
26801
26802         (Statement): Added Resolve virtual method to allow
26803         for resolution split from the emit code.
26804
26805 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
26806
26807         * statement.cs (EmitBoolExpression): No longer try to resolve the
26808         expression here.    
26809         (MakeBoolean): New utility function that resolve, implicitly
26810         converts to boolean and tags the expression. 
26811
26812
26813         (If, Do): Implement dead code elimination.
26814         (While): Implement loop inversion
26815
26816         (Do, While, For, If): Resolve the expression prior to calling our
26817         code generation.
26818
26819 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
26820
26821         * class.cs:
26822           - added method Report28 (warning: program has more than one entry point)
26823           - added method IsEntryPoint, implements paragraph 10.1 of the spec
26824           - modified method Method.Define, the part at the end of the method
26825
26826         * rootcontext.cs: added static public Location EntryPointLocation;
26827           
26828         * ../errors/cs0028.cs : Add test case for the above warning.              
26829
26830         * typemanager.cs:
26831           - modified method CSharpName to allow arrays of primitive type to
26832             be printed nicely (e.g. instead of System.Int32[][] it now prints
26833             int[][])
26834           - added method CSharpSignature: returns the signature of a method
26835             in string format to be used in reporting errors, warnings, etc.
26836
26837         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
26838         with String.Empty.
26839
26840 2002-04-26  Ravi Pratap  <ravi@ximian.com>
26841
26842         * delegate.cs (Define): Fix extremely silly bug where I was
26843         setting the type of the 'object' parameter of the BeginInvoke
26844         method to System.IAsyncResult instead of System.Object ;-)
26845
26846 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
26847
26848         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
26849         here. 
26850
26851         (Constructor.Emit): return if we fail to initialize the
26852         constructor.  Another door closed!  
26853
26854         * expression.cs (New.DoResolve): Improve error message (from -6 to
26855         1501).  Use DeclaredOnly lookup to find the exact constructor.
26856
26857         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
26858         loop.  This is useful.
26859
26860         * cs-parser.jay: Adjust the default parameters so that destructors
26861         have the proper signature.
26862
26863 2002-04-26  Martin Baulig  <martin@gnome.org>
26864
26865         * driver.cs (LoadAssembly): If `assembly' contains any characters
26866         which are only valid in path names and not in assembly names
26867         (currently slash, backslash and point), use Assembly.LoadFrom ()
26868         instead of Assembly.Load () on the `assembly' (before iteration
26869         over the link_paths).
26870
26871 2002-04-26  Martin Baulig  <martin@gnome.org>
26872
26873         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
26874
26875 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
26876
26877         * class.cs (Property): use the new typemanager.MemberLookup
26878
26879         (TypeContainer.MemberLookup): Implement using the
26880         TypeManager.MemberLookup now. 
26881
26882         * typemanager.cs: Make MemberLookup a function of the TypeManager,
26883         and return MemberInfos, so that these can be used without an
26884         EmitContext (what we had before).
26885
26886 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
26887
26888         * expression.cs: Fix the case where the argument to params if the
26889         type of the params.  I omitted handling this before.   Fixed
26890
26891 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
26892
26893         * driver.cs: Call BootCorlib_PopulateCoreType
26894
26895         * class.cs (Property.CheckBase): Check for properties only, not
26896         for all members. 
26897
26898         * interface.cs: Temporary hack: try/catch around the
26899         CustomAttributeBuilder, because I am getting an exception that I
26900         do not understand.
26901
26902         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
26903         types whose definitions are required to be there (attributes are
26904         defined before standard types).
26905
26906         Compute definitions as we boot the various types, as they are used
26907         immediately (value_type class will need object_type, but if we do
26908         not initialize object_type, we will pass a null, which will let
26909         the runtime pick the System.Object from the existing corlib, which
26910         is not what we want).
26911
26912 2002-04-22  Patrik Torstensson <totte@labs2.com>
26913
26914         * cs-tokenizer.cs: fixed a number of trim() issues.
26915
26916 2002-04-22  Ravi Pratap  <ravi@ximian.com>
26917
26918         * expression.cs (Argument.Type): Ensure that we return the correct
26919         type when we have out or ref parameters [in which case we 
26920         append a "&"].
26921
26922 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
26923
26924         * class.cs (Property, Indexer): Allow extern modifier in there. 
26925
26926         * typemanager.cs (InitBaseTypes): Initializes object_type and
26927         value_type, since those will be used early on during the bootstrap
26928         process to compile corlib.
26929
26930         (InitCoreTypes): Move code from here to InitBaseTypes.
26931
26932 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
26933
26934         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
26935         single-dimension arrays as using the ldlen opcode.  
26936
26937         Daniel Lewis discovered this optimization.  
26938
26939         * typemanager.cs: Add signature for System.Array::get_Length
26940
26941 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26942
26943         * statement.cs: report the error when the foreach does not apply to an
26944         array nor a collection.
26945
26946 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
26947
26948         * expression.cs: Add implicit conversions to the operator ~.
26949
26950         * constant.cs (DecimalConstant.Emit): Emit decimal value.
26951
26952         * typemanager.cs: Locate the decimal constructor.
26953
26954 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26955
26956         * attribute.cs: use the new property of TypeOf.
26957         * expression.cs: added 'get' property around typearg.
26958
26959         These changes fix a build breaker reported by NickD. Is this the
26960         correct way to fix?  If not, please, revert my changes and make it
26961         work :-).
26962
26963 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
26964
26965         * attribute.cs: Add support for typeof in attribute invocations.
26966         I am not sure that this is right though.
26967
26968 2002-04-14  Duncan Mak  <duncan@ximian.com>
26969
26970         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
26971         Binary.Operator.Division case.
26972
26973 2002-04-13  Ravi Pratap  <ravi@ximian.com>
26974
26975         * class.cs (DefineType): Ensure that we do a proper check on
26976         attribute types and also register it with the TypeManager.
26977
26978         (TypeContainer.Targets): The default for attribute types is
26979         AttributeTargets.All.
26980
26981         * attribute.cs (ApplyAttributes): Registering the attribute type
26982         is done elsewhere, not when we discover we have a Usage attribute.
26983
26984 2002-04-12  Ravi Pratap  <ravi@ximian.com>
26985
26986         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
26987         and get rid of is_delegate parameter.
26988
26989         * everywhere : update.
26990
26991 2002-04-12  Ravi Pratap  <ravi@ximian.com>
26992
26993         * cs-parser.jay (compilation_unit): Revamp completely to use
26994         some new ideas that I got from Rhys' grammar to solve the problems
26995         with assembly level attributes.
26996
26997         (outer_declaration): New grammar production.
26998
26999         (attribute_sections): Add.
27000
27001         (opt_attributes): Base on attribute_sections
27002
27003         (namespace_declaration): Allow opt_attributes to tackle the case
27004         when we have assembly level attributes - we are clever in this
27005         regard now ;-)
27006
27007         * attribute.cs (ApplyAttributes): Do not worry about assembly 
27008         attributes in the non-global context.
27009
27010         * rootcontext.cs (AddGlobalAttributes): Go back to using this
27011         instead of SetGlobalAttributes.
27012
27013         * class.cs, rootcontext.cs : Ensure we define and generate 
27014         attribute types before anything else.
27015
27016         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
27017         and flag the new error -20 for the case when the attribute type
27018         does not have valid targets specified. csc does not catch this.
27019
27020         * ../errors/errors.txt : update for error # -20
27021
27022 2002-04-11  Ravi Pratap  <ravi@ximian.com>
27023
27024         * support.cs (InternalParameters.ParameterModifier): Do some null
27025         checking and return sane values.
27026
27027         * class.cs (Method.Define): If we are a PInvoke method, ensure
27028         that we are static and extern. Report error # 601
27029
27030         * ../errors/cs0601.cs : Add test case for the above error.
27031
27032 2002-04-07  Ravi Pratap  <ravi@ximian.com>
27033
27034         * rootcontext.cs (attribute_types): We need to keep type of
27035         all attribute types separately and emit code for them first.
27036
27037         (RegisterAttribute) : Implement.
27038
27039         * class.cs (DefineType): Check if the current Type is a custom
27040         attribute type and register it accordingly.
27041
27042         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
27043         adding the first attribute twice and rename to
27044
27045         (SetGlobalAttributes): this.
27046
27047         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
27048         lookups.
27049
27050         * attribute.cs (ApplyAttributes): Take an additional argument telling us
27051         if we are processing global arguments. Hmm, I am unsure of this.
27052
27053 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
27054
27055         * expression.cs: added static array of strings to avoid calling
27056         Enum.ToString () for Operator in Binary. Significant recover of
27057         performance.
27058
27059 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
27060
27061         * class.cs (FindMembers): Allow the Builders of the various
27062         members to be null.  If they are skip them.  This only happens
27063         during the PInvoke declaration.
27064
27065 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
27066
27067         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
27068         failure, so we do not keep going afterwards.
27069
27070         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
27071         wanted to pass `false' as the `is_delegate' argument.  If this is
27072         the case, why not use delegate_type == null to mean `is_delegate =
27073         false' and anything else as is_delegate = true.
27074
27075 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
27076
27077         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
27078         code for the section, not the beginning of the tests.
27079
27080 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
27081
27082         * cfold.cs: Handle operator + (Enum x, Underlying x) 
27083
27084         * expression.cs (Binary): same.  Warn about errors where we have
27085         Enum/Enum in operator + as well.
27086
27087 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
27088
27089         * statement.cs:
27090                 - added support for switch(bool)
27091                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
27092                 - add TableSwitchEmit() to handle table-based switch statements
27093
27094 2002-04-05  Ravi Pratap  <ravi@ximian.com>
27095
27096         * expression.cs (Invocation.OverloadResolve): Factor out code which
27097         does parameter compatibility checking with arguments so that we can 
27098         re-use the code even from Delegate.VerifyApplicability
27099
27100         (VerifyArgumentsCompat): Move above code here.
27101
27102         * delegate.cs (VerifyApplicability): Get rid of duplicate code
27103         and instead make a call to the above method.
27104
27105 2002-03-31  Ravi Pratap  <ravi@ximian.com>
27106
27107         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
27108         We use it to keep track of classes which are attribute types.
27109
27110 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
27111
27112         * delegate.cs (Delegate.Define): Correctly define the types in the
27113         presence of fixed and array parameters.
27114
27115         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
27116         doing FindMembers.
27117
27118         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
27119         include NonPublic after the first iteration.
27120
27121         * class.cs (Indexer.CheckBase): Only check if both parents are
27122         non-null. 
27123
27124         * cs-parser.jay (accessor_body): If empty, set to null.
27125
27126         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
27127         same code path here to resolve constants names that we did have in
27128         MemberAccess.DoResolve.  There is too much code duplicated here.
27129
27130 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
27131
27132         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
27133
27134         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
27135         to MakeUnionSet.
27136
27137         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
27138         tokens, numbers and strings.
27139
27140         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
27141         parenthesis.
27142
27143         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
27144         asyncronous parameters and the regular parameters.  
27145
27146         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
27147         specify the target directory.
27148
27149         * expression.cs: (This.DoResolve): Simplify
27150         (As.Emit): Optimize, do not generate IsInst if the expression is
27151         always of the given type.
27152
27153         (Is.DoResolve): Bug fix, we were reporting both always/never for
27154         the is expression.
27155
27156         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
27157         creating too many unnecessary arrays.
27158
27159 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
27160
27161         * class.cs (EmitFieldInitializer): Use Assign expression to assign
27162         fields instead of rolling our own initializer.   Takes care of all
27163         implicit conversions, and drops unnecessary static checks/argument.
27164
27165 2002-03-31  Dick Porter  <dick@ximian.com>
27166
27167         * driver.cs: use the GetDirectories() return values properly, and
27168         use "/" as path separator.
27169
27170 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
27171
27172         * expression.cs (Unary): Optimize - - expr into expr.
27173         (Binary): Optimize a + (-b) into a -b.
27174
27175         * codegen.cs (CodeGen): Made all methods static.
27176
27177 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
27178
27179         * rootcontext.cs: 
27180
27181         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
27182         TypeBuilder property.
27183
27184         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
27185         instead. 
27186
27187         * tree.cs: Removed the various RecordXXXX, and replaced with a
27188         single RecordDecl.  Removed all the accessor methods, and just
27189         left a single access point Type 
27190
27191         * enum.cs: Rename DefineEnum to DefineType.
27192
27193         * decl.cs: New abstract method `DefineType' used to unify the
27194         Defines for Enumerations, Interfaces, TypeContainers and
27195         Delegates.
27196
27197         (FindType): Moved LookupInterfaceOrClass here.  Moved the
27198         LookupBaseClasses method that used to live in class.cs and
27199         interface.cs here, and renamed to FindType.
27200
27201         * delegate.cs: Implement DefineType.  Take advantage of the
27202         refactored pattern for locating the parent builder without taking
27203         the parent_builder argument (which we know does not work if we are
27204         nested, and triggering a toplevel definition).
27205
27206 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27207
27208         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
27209         accessibility of a member has changed during override and report
27210         an error if so.
27211
27212         * class.cs (Method.Define, Property.Define): Only complain on
27213         overrides if the method is private, any other accessibility is
27214         fine (and since we just checked the permission is the same, we are
27215         good to go).
27216
27217         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
27218         and elif are processed always.  The other pre-processing
27219         directives are only processed if we are "taking" the path
27220
27221 2002-03-29  Martin Baulig  <martin@gnome.org>
27222
27223         * class.cs (Method.Emit): Only emit symbolic debugging info if the
27224         current location is not Null.
27225
27226         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
27227         a separate method so we can profile it.
27228
27229         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
27230         `span.Seconds' are just seconds, but no minutes or hours.
27231         (MainDriver): Profile the CodeGen.SaveSymbols calls.
27232
27233 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27234
27235         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
27236         Remove the gratuitous set of Final:
27237
27238                                 // If an interface implementation, then we can set Final.
27239                                 if (((flags & MethodAttributes.Abstract) == 0) &&
27240                                     implementing.DeclaringType.IsInterface)
27241                                         flags |= MethodAttributes.Final;
27242
27243         I do not know what I was smoking when I used that.
27244
27245
27246         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
27247         step into fixing the name resolution issues for delegates and
27248         unifying the toplevel name resolution.
27249
27250 2002-03-28  Martin Baulig  <martin@gnome.org>
27251
27252         * class.cs (Method.Emit): If we have a symbol writer, call its
27253         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
27254         tell it about the current method.
27255
27256         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
27257         writer that we're going to emit the first byte of IL code for a new
27258         statement (a new source line).
27259         (EmitContext.EmitTopBlock): If we have a symbol writer, call
27260         EmitContext.Mark() before emitting any code.
27261
27262         * location.cs (SymbolDocument): Return null when we're Null.
27263
27264         * statement.cs (Statement): Moved the `Location loc' variable here.
27265         (Statement.EmitBoolExpression): If we have a symbol writer, call
27266         ec.Mark() before emitting any code to tell it that we're at the
27267         beginning of a new statement.
27268         (StatementExpression): Added `Location' argument to the constructor.
27269         (Block): Added public readonly variable `StartLocation' and public
27270         variable `EndLocation'.  The latter is to be set using SetEndLocation().
27271         (Block): Added constructor which takes a start and end location.
27272         (Block.SetEndLocation): New method. This sets the end location.
27273         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
27274         local variables we create.
27275         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
27276         each statement and do also mark the begin and end of the block.
27277
27278         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
27279         tell it the current lexer.Location, use Location.Null for the end of the
27280         block.
27281         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
27282         current block, set its end location using SetEndLocation().
27283         (statement_expression): StatementExpression constructor now takes the
27284         lexer.Location as additional argument.
27285         (for_statement, declare_local_variables): Likewise.
27286         (declare_local_variables): When creating a new implicit block, use the
27287         new Block constructor and pass it the lexer.Location.
27288
27289 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27290
27291         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
27292         members also on the parent interfaces recursively.
27293
27294 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
27295
27296         * report.cs: Use new formats, since Gonzalo finished the missing
27297         bits. 
27298
27299         * expression.cs (Binary.ResolveOperator): added missing operator|
27300         operator& and operator^ for bool/bool.
27301
27302         * cs-parser.jay: CheckDef now takes a Location argument that is
27303         used to report errors more precisly (instead of reporting the end
27304         of a definition, we try to track something which is a lot closer
27305         to the source of the problem).
27306
27307         * cs-tokenizer.cs: Track global token use, so we can properly flag
27308         the use of #define/#undef after the first token has been seen.
27309
27310         Also, rename the reportXXXX to Error_DescriptiveName
27311
27312         * decl.cs (DeclSpace.IsTopLevel): Move property here from
27313         TypeContainer, so that Enum and Interface can use this too.
27314
27315         * class.cs (TypeContainer.LookupInterfaceOrClass,
27316         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
27317         `builder' argument.  Typically this was used to pass the parent
27318         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
27319         the definition).  
27320
27321         The problem is that a nested class could trigger the definition of
27322         a toplevel class, and the builder would be obviously wrong in that
27323         case. 
27324
27325         So we drop this argument, and we compute dynamically the
27326         TypeBuilder/ModuleBuilder (the correct information was available
27327         to us anyways from DeclSpace.Parent)
27328
27329         * interface.cs (Interface.DefineInterface): Drop builder
27330         parameter cleanup like class.cs
27331
27332         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
27333         like class.cs
27334
27335         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
27336         values. 
27337
27338         (Try.Emit): Propagate the returns value from the statement.
27339
27340         (Return.Emit): Even if we are leavning 
27341
27342         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
27343
27344         * modifiers.cs: Fix the computation of MethodAttributes flags.
27345
27346 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
27347
27348         * driver.cs: allow compilation of files that start with '/'.
27349         Add a default case when checking the argument of --target.
27350
27351 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
27352
27353         * interface.cs: Implement the same search algorithm for types in
27354         the interface code.
27355
27356         * delegate.cs: Do not allow multiple definition.
27357
27358         * Recovered ChangeLog that got accidentally amputated
27359
27360         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
27361
27362         * rootcontext.cs: Load manually enum to allow core classes to
27363         contain enumerations.
27364
27365         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
27366         Update to new static methods in TypeManager.
27367
27368         * typemanager.cs (GetMethod, GetConstructor): Use our
27369         implementation of FindMembers to find the members, since during
27370         corlib compilation, the types are TypeBuilders and GetMethod and
27371         GetConstructor do not work.
27372
27373         Make all methods in TypeManager static.
27374
27375         (InitCodeHelpers): Split the functionality from
27376         the InitCodeTypes function.
27377
27378         * driver.cs: Call InitCodeHelpers after we have populated the
27379         types. 
27380
27381         * cs-parser.jay (delegate_declaration): we did not used to compute
27382         the delegate name correctly for void delegates.
27383
27384 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
27385
27386         * rootcontext.cs (RootContext): Init the interface_resolve_order
27387         and type_container_resolve_order always.
27388
27389         (ResolveCore, BootstrapCorlib_ResolveClass,
27390         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
27391         compiler when compiling with --nostdlib
27392
27393         * class.cs (TypeContainer.DefineType): Check that our parent is
27394         not null.  This test is most important when we are bootstraping
27395         the core types.
27396
27397         * codegen.cs: Split out the symbol writing code.
27398
27399 2002-03-25  Martin Baulig  <martin@gnome.org>
27400
27401         * driver.cs (-g): Made -g an alias for --debug.
27402
27403 2002-03-24  Martin Baulig  <martin@gnome.org>
27404
27405         * codegen.cs (SymbolWriter): New public variable. Returns the
27406         current symbol writer.
27407         (CodeGen): Added `bool want_debugging_support' argument to the
27408          constructor. If true, tell the ModuleBuild that we want debugging
27409         support and ask it for the ISymbolWriter.
27410         (Save): If we have a symbol writer, call it's Close() method after
27411         saving the assembly.
27412
27413         * driver.c (--debug): New command line argument to create a
27414         debugger information file.
27415
27416         * location.cs (SymbolDocument): New public property. Returns an
27417         ISymbolDocumentWriter object for the current source file or null
27418         if we don't have a symbol writer.
27419
27420 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
27421
27422         * driver.cs (LoadAssembly): Correctly return when all the paths
27423         have been tried and not before.
27424
27425         * statement.cs (Switch.Emit): return the actual coverage for this
27426         statement (returns/not-returns)
27427
27428         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
27429         switch of the statement if we are the last switch section.  That
27430         kills two problems: try/catch problems (we used to emit an empty
27431         nop at the end) and switch statements where all branches would
27432         return. 
27433
27434 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
27435
27436         * driver.cs: Add default assemblies (the equivalent to the
27437         Microsoft CSC.RSP file)
27438
27439         * cs-tokenizer.cs: When updating `cols and setting it to zero,
27440         also update tokens_seen and set it to false.
27441
27442         * driver.cs: Implement --recurse for Mike.
27443
27444         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
27445         correctly splitting out the paths.
27446
27447 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
27448
27449         * interface.cs (Interface.PopulateProperty): Instead of using
27450         `parent' as the declaration space for the set parameters, use
27451         `this' 
27452
27453         * support.cs (InternalParameters): InternalParameters constructor
27454         takes a DeclSpace instead of a TypeContainer.
27455
27456         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
27457         types are being initialized, load the address of it before calling
27458         the function.  
27459
27460         (New): Provide a mechanism to disable the generation of local
27461         value type temporaries when the caller will be providing us with
27462         an address to store it.
27463
27464         (ArrayCreation.EmitDynamicInitializers): Use it.
27465
27466 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
27467
27468         * expression.cs (Invocation.EmitArguments): Only probe for array
27469         property if there is more than one argument.  Sorry about that.
27470
27471         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
27472         empty param arrays.
27473
27474         * class.cs (Method.LabelParameters): Fix incorrect code path that
27475         prevented the `ParamArrayAttribute' from being applied to the
27476         params attribute.
27477
27478 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
27479
27480         * support.cs (ReflectionParameters): Correctly compute whether the
27481         last argument is a params array.  Fixes the problem with
27482         string.Split ('a')
27483
27484         * typemanager.cs: Make the assemblies array always be non-null
27485         (empty, but non-null)
27486
27487         * tree.cs (RecordDecl): New function that abstracts the recording
27488         of names.  This reports error 101, and provides a pointer to the
27489         previous declaration.  Fixes a crash in the compiler.
27490
27491         * cs-parser.jay (constructor_declaration): Update to new grammar,
27492         and provide a constructor_body that can be empty.
27493
27494 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
27495
27496         * driver.cs: Add support for --resources.
27497
27498         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
27499         Make all types for the various array helper methods be integer.
27500
27501         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
27502         CheckState to ConvCast.
27503
27504         (ConvCast): Now it takes a `checked' state argument, to avoid
27505         depending on the emit context for the conversion, and just using
27506         the resolve time setting.
27507
27508         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
27509         instead of Invocation.EmitArguments.  We do not emit the original
27510         arguments, instead we emit those which have been converted to
27511         unsigned int expressions.
27512
27513         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
27514
27515         * codegen.cs: ditto.
27516
27517         * expression.cs (LocalVariableReference): Drop the use of the
27518         Store function that depended on the variable index.
27519
27520         * statement.cs (VariableInfo): Drop the `Idx' property from this
27521         class, as this is not taking into account the indexes for
27522         temporaries tat we generate during the execution, getting the
27523         indexes wrong.
27524
27525         * class.cs: First emit class initializers, then call the parent
27526         constructor. 
27527
27528         * expression.cs (Binary): Fix opcode emision.
27529         (UnaryMutator.EmitCode): Support checked code generation
27530
27531         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
27532         matches for events for both the Static and Instance scans,
27533         pointing to the same element.   Fix that.
27534
27535 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
27536
27537         * rootcontext.cs (ResolveTree): Always set the
27538         interface_resolve_order, because nested interfaces will be calling
27539         into us.
27540
27541         * class.cs (GetInterfaceOrClass): Track the same resolution
27542         process used by TypeManager.LookupType.  This fixes the nested
27543         type lookups in class declarations (separate path from
27544         LookupType). 
27545
27546         (TypeContainer.DefineType): Also define nested interfaces.
27547         (TypeContainer.RegisterOrder): New public function used to
27548         register the order in which child interfaces need to be closed.
27549
27550         Nested interfaces need to be closed after their parents have been
27551         created. 
27552
27553         * interface.cs (InterfaceAttr): Put all the logic for computing
27554         the interface attribute here. 
27555
27556         (DefineInterface): Register our interface order with the
27557         RootContext or with the TypeContainer depending on the case.
27558
27559 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
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-13  Ravi Pratap  <ravi@ximian.com>
27569
27570         * ecore.cs (StandardConversionExists): Modify to take an Expression
27571         as the first parameter. Ensure we do null -> reference type conversion
27572         checking.
27573
27574         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
27575         temporary Expression objects.
27576
27577 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
27578
27579         * interface.cs: workaround bug in method overloading resolution
27580         (there is already a bugzilla bug for it).
27581
27582 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
27583
27584         We could also solve this problem by having a separate path for
27585         performing type lookups, instead of DoResolve, we could have a
27586         ResolveType entry point, and only participating pieces of the
27587         production (simplename, deref, array) would implement this. 
27588
27589         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
27590         signal SimpleName to only resolve type names and not attempt to
27591         resolve anything else.
27592
27593         * expression.cs (Cast): Set the flag.
27594
27595         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
27596
27597         * class.cs: Only report 108 if there is no `new' modifier.
27598
27599         * cs-parser.jay: rework foreach statement to work with the new
27600         changes to the policy on SimpleNames.
27601
27602         * report.cs: support Stacktrace on warnings as well.
27603
27604         * makefile: drop --unsafe and /unsafe from the compile.
27605
27606 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
27607
27608         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
27609         lookups here, instead of doing that at parse time.  This means
27610         that our grammar will not introduce `LocalVariableReferences' as
27611         expressions at this point.  That solves the problem of code like
27612         this:
27613
27614         class X {
27615            static void Main ()
27616            { int X = 1;
27617             { X x = null }}}
27618
27619         This is only half the fix.  The full fix requires parameters to
27620         also be handled in this way.
27621
27622         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
27623         makes the use more obvious of the DeclSpace.  The
27624         ec.TypeContainer.TypeBuilder is now only used to pull the
27625         TypeBuilder for it.
27626
27627         My theory is that I can get rid of the TypeBuilder completely from
27628         the EmitContext, and have typecasts where it is used (from
27629         DeclSpace to where it matters).  
27630
27631         The only pending problem is that the code that implements Aliases
27632         is on TypeContainer, and probably should go in DeclSpace.
27633
27634         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
27635         lookups here, instead of doing that at parse time.  This means
27636         that our grammar will not introduce `LocalVariableReferences' as
27637         expressions at this point.  That solves the problem of code like
27638         this:
27639
27640         class X {
27641            static void Main ()
27642            { int X = 1;
27643             { X x = null }}}
27644
27645         This is only half the fix.  The full fix requires parameters to
27646         also be handled in this way.
27647
27648         * class.cs (Property.DefineMethod): When implementing an interface
27649         method, set newslot, when implementing an abstract method, do not
27650         set the flag (before we tried never setting it, or always setting
27651         it, which is the difference).
27652         (Indexer.DefineMethod): same.
27653         (Method.DefineMethod): same.
27654
27655         * ecore.cs: Only set the status used flag if we get back a Field.
27656
27657         * attribute.cs: Temporary hack, so Paolo can keep working.
27658
27659 2002-03-08  Ravi Pratap  <ravi@ximian.com>
27660
27661         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
27662         the unmanaged type in the case we have a MarshalAs attribute.
27663
27664         (Resolve): Handle the case when we are parsing the special MarshalAs
27665         attribute [we need to store the unmanaged type to use later]
27666
27667         * typemanager.cs (marshal_as_attr_type): Built in type for the 
27668         MarshalAs Attribute.
27669
27670         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
27671         on parameters and accordingly set the marshalling info.
27672
27673 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
27674
27675         * class.cs: Optimizing slightly by removing redundant code after
27676         we switched to the `NoTypes' return value.
27677         (Property.DefineMethod): use NoTypes here too.
27678
27679         This fixes the bug I introduced in my last batch of changes.
27680
27681 2002-03-05  Ravi Pratap  <ravi@ximian.com>
27682
27683         * tree.cs (RecordEnum): Add. We now keep track of enums too.
27684
27685         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
27686         Enums since those are types too. 
27687
27688         * cs-parser.jay (enum_declaration): Record enums as we parse them.
27689
27690         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
27691         thanks to a call during the lookup process.
27692
27693 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
27694
27695         * statement.cs (Foreach): Lots of work to accomodate a particular
27696         kind of foreach statement that I had not kept in mind.  It is
27697         possible to have foreachs on classes that provide a GetEnumerator
27698         method that return objects that implement the "pattern" for using
27699         a foreach, there is no need to support GetEnumerator
27700         specifically. 
27701
27702         This is needed to compile nant.
27703
27704         * decl.cs: Only report 114 if the member is not `Finalize' and if
27705         the warning level is at least 2.
27706
27707         * class.cs: Moved the compare function from Method to
27708         MethodSignature. 
27709
27710         (MethodSignature.InheritableMemberSignatureCompare): Add new
27711         filter function that is used to extract inheritable methods from a
27712         class. 
27713
27714         (Method.Define): Use the new `inheritable_method_signature_filter'
27715         delegate
27716
27717         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
27718         command. 
27719
27720 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
27721
27722         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
27723
27724         * cs-parser.jay: Add opt_semicolon to the interface declaration.
27725
27726         * expression.cs: Pass location information to
27727         ConvertImplicitStandard. 
27728
27729         * class.cs: Added debugging code to track return values from
27730         interfaces. 
27731
27732 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
27733
27734         * expression.cs (Is.DoResolve): If either side of the `is' is an
27735         interface, do not flag the warning.
27736
27737         * ecore.cs (ImplicitReferenceConversion): We need a separate test
27738         for interfaces
27739
27740         * report.cs: Allow for --fatal to be used with --probe.
27741
27742         * typemanager.cs (NoTypes): Move the definition for the empty Type
27743         array here. 
27744
27745         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
27746         properties. 
27747         (TypeContainer.DefineProxy): New function used to proxy to parent
27748         implementations when implementing interfaces.
27749         (TypeContainer.ParentImplements): used to lookup if our parent
27750         implements a public function that is required by an interface.
27751         (TypeContainer.VerifyPendingMethods): Hook this up.
27752
27753         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
27754         `modules' and `assemblies' arraylists into arrays.  We only grow
27755         these are the very early start up of the program, so this improves
27756         the speedof LookupType (nicely measured).
27757
27758         * expression.cs (MakeByteBlob): Replaced unsafe code with
27759         BitConverter, as suggested by Paolo.
27760
27761         * cfold.cs (ConstantFold.Binary): Special case: perform constant
27762         folding of string concatenation, but if either side is a string,
27763         and the other is not, then return null, and let the runtime use
27764         the concatenation on the string plus the object (using
27765         `Object.ToString'). 
27766
27767 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
27768
27769         Constant Folding has been implemented now.
27770
27771         * expression.cs (Unary.Reduce): Do not throw an exception, catch
27772         the error instead on types that are not supported in one's
27773         complement. 
27774
27775         * constant.cs (Constant and all children): New set of functions to
27776         perform implict and explicit conversions.
27777
27778         * ecore.cs (EnumConstant): Implement the new functions to perform
27779         conversion by proxying to the child expression.
27780
27781         * codegen.cs: (ConstantCheckState): Constant evaluation has its
27782         own separate setting that can not be turned off from the command
27783         line using --unchecked or --checked and is only controlled using
27784         the checked/unchecked statements and expressions.  This setting is
27785         used by the constant folder to flag errors.
27786
27787         * expression.cs (CheckedExpr, UncheckedExpr): Set the
27788         ConstantCheckState as well.   
27789
27790         During Resolve, they also have to flag the state, because the
27791         constant folder runs completely in the Resolve phase.
27792
27793         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
27794         well.
27795
27796 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
27797
27798         * cfold.cs: New file, this file contains the constant folder.
27799
27800         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
27801         argument to track whether we are using the resulting address to
27802         load or store a value and provide better error messages. 
27803
27804         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
27805         new AddressOf arguments.
27806
27807         * statement.cs (Foreach.EmitCollectionForeach): Update
27808
27809         * expression.cs (Argument.Emit): Call AddressOf with proper
27810         arguments to track usage.
27811
27812         (New.DoEmit): Call AddressOf with new arguments.
27813
27814         (Unary.Emit): Adjust AddressOf call.
27815
27816 2002-03-01  Ravi Pratap  <ravi@ximian.com>
27817
27818         * cs-parser.jay (member_access): Change the case for pre-defined types
27819         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
27820         this suggestion.
27821
27822         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
27823         a method body.
27824
27825         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
27826         essentially like methods and apply attributes like MethodImplOptions to them too.
27827
27828         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
27829         not being null.
27830
27831         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
27832         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
27833         is the DeclSpace.
27834
27835         * Update code everywhere accordingly.
27836
27837         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
27838
27839         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
27840
27841 2002-02-28  Ravi Pratap  <ravi@ximian.com>
27842
27843         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
27844         try performing lookups against those instead of jumping straight into using
27845         the 'using' clauses.
27846
27847         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
27848
27849         (LookupType): Perform lookups in implicit parents too.
27850
27851         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
27852         sequence as RootContext.LookupType. 
27853
27854         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
27855         the various cases of namespace lookups into this method.
27856
27857 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
27858
27859         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
27860         in positional arguments)
27861
27862         * class.cs (Operator): Update the AllowedModifiers to contain
27863         extern. 
27864
27865         * cs-parser.jay: Update operator declaration to allow for the
27866         operator body to be empty.
27867
27868         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
27869         values. 
27870
27871 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
27872
27873         * class.cs (Method.Emit): Label parameters.
27874
27875         * driver.cs: Return 1 or 0 as the program exit code.
27876
27877 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
27878
27879         * expression.cs: Special case the `null' object when trying to
27880         auto-compute the type, as anything can be explicitly converted to
27881         that. 
27882
27883         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
27884         spotting this Paolo.
27885
27886         (Expression.ImplicitNumericConversion): Perform comparissions of
27887         the type using the underlying type in the case of an enumeration
27888         rather than using the enumeration type for the compare.
27889
27890         Cope with the underlying == type case, which is not possible to
27891         catch before. 
27892
27893         (Expression.ConvertNumericExplicit): Perform comparissions of
27894         the type using the underlying type in the case of an enumeration
27895         rather than using the enumeration type for the compare.
27896
27897         * driver.cs: If the user does not supply an extension, assume .exe
27898
27899         * cs-parser.jay (if_statement): Rewrote so that we can track the
27900         location for the if statement.
27901
27902         * expression.cs (Binary.ConstantFold): Only concat strings when
27903         the operation is "+", not everything ;-)
27904
27905         * statement.cs (Statement.EmitBoolExpression): Take a location
27906         argument. 
27907         (If, While, Do): Track location.
27908
27909         * expression.cs (Binary.ResolveOperator): In the object + string
27910         case, I was missing a call to ConvertImplicit
27911
27912 2002-02-25  Ravi Pratap  <ravi@ximian.com>
27913
27914         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
27915         Location arguments. Ensure we use RootContext.LookupType to do our work
27916         and not try to do a direct Type.GetType and ModuleBuilder.GetType
27917
27918         * interface.cs (PopulateMethod): Handle the type of the parameter being
27919         null gracefully.
27920
27921         * expression.cs (Invocation.BetterFunction): Handle the case when we 
27922         have a params method with no fixed arguments and a call is made with no
27923         arguments.
27924
27925 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
27926
27927         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
27928         the verbatim-string-literal
27929
27930         * support.cs (InternalParameters.ParameterModifier): handle null
27931         fixed parameters.
27932         (InternalParameters.ParameterType): ditto.
27933
27934         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
27935         duplicating the name of the variable parameter.
27936         (GetParameterByName): Fix bug where we were not looking up array
27937         paramters if they were the only present (thanks Paolo!).
27938         (GetParameterInfo): We only have an empty set of types if both
27939         fixed and array are set to null.
27940         (GetParameterInfo-idx): Handle FixedParameter == null
27941
27942         * cs-parser.jay: Handle the case where there is no catch
27943         statements (missing null test).
27944
27945 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
27946
27947         * driver.cs (MainDriver): Be conservative on our command line
27948         handling.
27949
27950         Catch DirectoryNotFoundException when calling GetFiles.
27951
27952         (SplitPathAndPattern): Used to split the input specification into
27953         a path and a pattern that we can feed to Directory.GetFiles.
27954
27955 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
27956
27957         * statement.cs (Fixed): Implement the last case of the Fixed
27958         statement (string handling).
27959
27960         * expression.cs (StringPtr): New class used to return a char * to
27961         a string;  Used by the Fixed statement.
27962
27963         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
27964
27965         * expression.cs (Binary.ResolveOperator): Remove redundant
27966         MemberLookup pn parent type.
27967         Optimize union call, we do not need a union if the types are the same.
27968         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
27969         type.
27970
27971         Specialize the use of MemberLookup everywhere, instead of using
27972         the default settings. 
27973
27974         (StackAlloc): Implement stackalloc keyword.
27975
27976         * cs-parser.jay: Add rule to parse stackalloc.
27977
27978         * driver.cs: Handle /h, /help, /?
27979
27980         * expression.cs (MakeByteBlob): Removed the hacks we had in place
27981         before we supported unsafe code.
27982
27983         * makefile: add --unsafe to the self compilation of mcs.
27984
27985 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
27986
27987         * expression.cs (PointerArithmetic): New class that is used to
27988         perform pointer arithmetic.
27989         (Binary.Resolve): Handle pointer arithmetic
27990         Handle pointer comparission.
27991         (ArrayPtr): Utility expression class that is used to take the
27992         address of an array.
27993
27994         (ElementAccess): Implement array access for pointers
27995
27996         * statement.cs (Fixed): Implement fixed statement for arrays, we
27997         are missing one more case before we are done.
27998
27999         * expression.cs (Indirection): Implement EmitAssign and set the
28000         ExprClass to Variable.  This allows pointer dereferences to be
28001         treated as variables, and to have values assigned to them.
28002
28003         * ecore.cs (Expression.StoreFromPtr): New utility function to
28004         store values dereferencing.
28005
28006 2002-02-20  Ravi Pratap  <ravi@ximian.com>
28007
28008         * expression.cs (Binary.ResolveOperator): Ensure that we are
28009         not trying to operate on a void type - this fixes the reported
28010         bug.
28011
28012         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
28013         the parent implementation is sealed.
28014
28015         * ../errors/cs0239.cs : Add.
28016
28017         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
28018
28019         * typemanager.cs (unverifiable_code_type): Corresponds to 
28020         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
28021         which have unsafe code in them.
28022
28023         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
28024         unsafe context.
28025
28026 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
28027
28028         * cs-tokenizer.cs: Add support for @"litreal strings"
28029
28030         Make tokenizer accept pre-processor directives
28031         on any column (remove the old C-like limitation). 
28032
28033         * rootcontext.cs (EmitCode): Emit any global attributes.
28034         (AddGlobalAttributes): Used to keep track of assembly attributes. 
28035
28036         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
28037
28038         * cs-parser.jay: Add support for global attributes.  
28039
28040 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
28041
28042         * expression.cs (Indirection): New helper class.  Unary will
28043         create Indirection classes to be able to implement the
28044         IMemoryLocation interface on it.
28045
28046 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
28047
28048         * cs-parser.jay (fixed_statement): reference the right statement.
28049
28050         * statement.cs (Fixed.Emit): Finish implementing the fixed
28051         statement for the &x case.
28052
28053 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
28054
28055         * class.cs (Property.Define, Method.Define): Remove newslot when
28056         `implementing'.  
28057
28058         * modifiers.cs: My use of NewSlot when `Abstract' was set was
28059         wrong.  NewSlot should only be used if the `new' keyword is present.
28060
28061         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
28062         locating our system dir.  Sorry about this.
28063
28064 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
28065
28066         * driver.cs (GetSystemDir): Compute correctly the location of our
28067         system assemblies.  I was using the compiler directory instead of
28068         the library directory.
28069
28070 2002-02-13  Ravi Pratap  <ravi@ximian.com>
28071
28072         * expression.cs (BetterFunction): Put back in what Miguel commented out
28073         since it is the correct fix. The problem is elsewhere ;-)
28074
28075         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
28076         parameters of the parms method are themselves compatible or not !
28077
28078         (StandardConversionExists): Fix very dangerous bug where we were forgetting
28079         to check that a class implements an interface before saying that an implicit
28080         conversion was allowed. Use ImplementsInterface to do the checking.
28081
28082 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
28083
28084         * class.cs (Method.Define): Track whether we are an explicit
28085         implementation or not.  And only call DefineMethodOverride if we
28086         are an explicit implementation.
28087
28088         (Property.DefineMethod): Ditto.
28089
28090 2002-02-11  Ravi Pratap  <ravi@ximian.com>
28091
28092         * expression.cs (BetterFunction): Catch hideous bug which was
28093          preventing us from detecting ambiguous calls due to implicit casts i.e
28094         cs0121.
28095
28096 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
28097
28098         * support.cs (Pair): Remove un-needed method.  I figured why I was
28099         getting the error in cs-parser.jay, the variable in a foreach loop
28100         is readonly, and the compiler does not really treat this as a variable.
28101
28102         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
28103         instead of EQUALS in grammar.  
28104
28105         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
28106
28107         * expression.cs (Unary.DoResolve): Check whether the argument is
28108         managed or not.
28109
28110 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
28111
28112         * support.cs: Api for Pair to set a value.  Despite the fact that
28113         the variables are public the MS C# compiler refuses to compile
28114         code that accesses the field if the variable is part of a foreach
28115         statement. 
28116
28117         * statement.cs (Fixed): Begin implementation of the fixed
28118         statement.
28119
28120         (Block.AddVariable): Return the VariableInfo on success and null
28121         on failure instead of true/false. 
28122
28123         * cs-parser.jay (foreach): Catch errors on variables already
28124         defined (we were ignoring this value before) and properly unwind
28125         the block hierarchy
28126
28127         (fixed_statement): grammar for the fixed statement.
28128
28129 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
28130
28131         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
28132         pointer types to be incretemented.
28133
28134         (SizeOf): Implement.
28135
28136         * cs-parser.jay (pointer_member_access): Implement
28137         expr->IDENTIFIER production.
28138
28139         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
28140         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
28141         on safe contexts.
28142
28143         (Unary): Implement indirection.
28144
28145         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
28146         use in non-unsafe context).
28147
28148         (SimpleName.DoResolve): Check for pointers in field access on safe
28149         contexts. 
28150
28151         (Expression.LoadFromPtr): Factor the load-indirect code in this
28152         function.  This was duplicated in UnboxCast and ParameterReference
28153
28154 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
28155
28156         * expression.cs (ComposedCast): report an error if a pointer cast
28157         is used in a safe region.
28158
28159         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
28160         pointer type casts in unsafe context.
28161
28162         * codegen.cs (EmitContext): Set up IsUnsafe.
28163
28164         * cs-parser.jay (non_expression_type): Add productions for pointer
28165         casts. 
28166
28167         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
28168         code.  We should not use force into static mode if the method is
28169         not virtual.  Fixes bug in MIS
28170
28171         * statement.cs (Do.Emit, While.Emit, For.Emit,
28172         Statement.EmitBoolExpression): Add support to Do and While to
28173         propagate infinite loop as `I do return' semantics.
28174
28175         Improve the For case to also test for boolean constants.
28176
28177         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
28178         to the list of attributes we can add.
28179
28180         Remove `EmitContext' argument.
28181
28182         * class.cs (Method.Define): Apply parameter attributes.
28183         (Constructor.Define): Apply parameter attributes.
28184         (MethodCore.LabelParameters): Move here the core of labeling
28185         parameters. 
28186
28187         * support.cs (ReflectionParameters.ParameterModifier,
28188         InternalParameters.ParameterModifier): Use IsByRef on the type and
28189         only return the OUT bit for these parameters instead of in/out/ref
28190         flags.
28191
28192         This is because I miss-understood things.  The ParameterInfo.IsIn
28193         and IsOut represent whether the parameter has the [In] and [Out]
28194         attributes set.  
28195
28196 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
28197
28198         * ecore.cs (FieldExpr.Emit): Release temporaries.
28199
28200         * assign.cs (LocalTemporary.Release): new function.
28201
28202         * codegen.cs (EmitContext.GetTemporaryStorage,
28203         EmitContext.FreeTemporaryStorage): Rework the way we deal with
28204         temporary storage.  Now we can "put back" localbuilders when we
28205         are done with them
28206
28207 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
28208
28209         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
28210         need to make a copy of the variable to generate verifiable code.
28211
28212 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
28213
28214         * driver.cs: Compute dynamically the system directory.
28215
28216         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
28217         Slower, but more generally useful.  Used by the abstract
28218         registering implementation. 
28219
28220         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
28221         the rules for the special rule on Type/instances.  First check if
28222         we have the same name, and if so, try that special static path
28223         rather than the instance path.
28224
28225 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
28226
28227         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
28228         for, while and if.
28229
28230         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
28231         Enum, ValueType, Delegate or Array for non-corlib compiles.
28232
28233         * cs-tokenizer.cs: Catch long identifiers (645)
28234
28235         * typemanager.cs (IndexerPropetyName): Ravi never tested this
28236         piece of code.
28237
28238         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
28239         fix, we were returning too early, so we were not registering
28240         pending methods from abstract classes.
28241
28242         Do not register pending methods if the class is abstract.
28243
28244         * expression.cs (Conditional.DoResolve): Report circular implicit
28245         conversions when we neecd to compute it for conditional
28246         expressions. 
28247
28248         (Is.DoResolve): If the expression is always of the provided type,
28249         flag warning 183.  If the expression can not ever be of the
28250         provided type flag warning 184.
28251
28252         * class.cs: Catch 169 as well.
28253
28254         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
28255         read. 
28256
28257 2002-01-18  Nick Drochak  <ndrochak@gol.com>
28258
28259         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
28260
28261 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
28262
28263         * interface.cs: (PopulateMethod): Check for pointers being defined
28264         only if the unsafe context is active.
28265         (PopulateProperty): ditto.
28266         (PopulateIndexer): ditto.
28267
28268         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
28269         specified.  If pointers are present, make sure that they are
28270         present in an unsafe context.
28271         (Constructor, Constructor.Define): ditto.
28272         (Field, Field.Define): ditto.
28273         (Property, Property.Define): ditto.
28274         (Event, Event.Define): ditto.
28275
28276         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
28277         hashtable if there are classes or structs defined.
28278
28279         * expression.cs (LocalVariableReference.DoResolve): Simplify this
28280         code, as the constant resolution moved.
28281
28282         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
28283         the metadata, so we can flag error 133. 
28284
28285         * decl.cs (MemberCore.UnsafeOK): New function to test that a
28286         pointer is being declared in an unsafe context.
28287
28288 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
28289
28290         * modifiers.cs (Modifiers.Check): Require a Location argument.
28291         Report error 227 for Unsafe use.
28292
28293         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
28294
28295         * statement.cs (For.Emit): If the test is null, then report that
28296         we do `return', as we wont reach anything afterwards.
28297
28298         (Switch.SwitchGoverningType): Track the expression that matched
28299         the conversion.
28300
28301         * driver.cs: Allow negative numbers as an error code to flag.
28302
28303         * cs-parser.jay: Handle 1551.
28304
28305         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
28306
28307 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
28308
28309         * cs-parser.jay: Report 1518 (type declaration can only contain
28310         class, struct, interface, enum or delegate)
28311
28312         (switch_label): Report 1523 (keywords `case' or `default' must
28313         preced code)
28314
28315         (opt_switch_sections): Report 1522 (empty switch)
28316
28317         * driver.cs: Report 1515 (response file specified multiple times)
28318         Report 1516 (Source file specified multiple times).
28319
28320         * expression.cs (Argument.Resolve): Signal 1510
28321
28322         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
28323         access not allowed in static code)
28324
28325 2002-01-11  Ravi Pratap  <ravi@ximian.com>
28326
28327         * typemanager.cs (IsPointerType): Utility method which we are going
28328         to need a lot.
28329
28330         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
28331         the object type, so we take care of that.
28332
28333         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
28334
28335         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
28336         added to non-params parameters :-)
28337
28338         * typemanager.cs (CSharpName): Include 'void' type too. 
28339
28340         (void_ptr_type): Include in the set of core types.
28341
28342         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
28343         duplicating code.
28344
28345         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
28346         an unsafe context.
28347
28348         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
28349         completely forgotten about it.
28350
28351 2002-01-10  Ravi Pratap  <ravi@ximian.com>
28352
28353         * cs-parser.jay (pointer_type): Add. This begins our implementation
28354         of parsing rules for unsafe code.
28355
28356         (unsafe_statement): Implement.
28357
28358         (embedded_statement): Modify to include the above.
28359
28360         * statement.cs (Unsafe): Implement new class for unsafe blocks.
28361
28362         * codegen.cs (EmitContext.InUnsafe): Add. This determines
28363         if the current context is an unsafe one.
28364
28365         * cs-parser.jay (local_variable_pointer_type): Since local variable types
28366         are handled differently, we need separate rules for them.
28367
28368         (local_variable_declaration): Update to use local_variable_pointer_type
28369         to allow variable declarations of unmanaged pointer types.
28370
28371         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
28372         in unsafe contexts.
28373
28374         * ../errors/cs0214.cs : Add.
28375
28376 2002-01-16  Nick Drochak  <ndrochak@gol.com>
28377
28378         * makefile: remove 'response' file when cleaning.
28379
28380 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
28381
28382         * cs-parser.jay: Report 1524.
28383
28384 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
28385
28386         * typemanager.cs (RegisterMethod): drop checking if we have
28387         registered this from here
28388
28389 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
28390
28391         * class.cs (Method.EmitDestructor): Implement calling our base
28392         destructor. 
28393
28394         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
28395         value of InFinally.
28396
28397         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
28398         this routine and will wrap the call in a try/catch block.  Deal
28399         with the case.
28400
28401 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
28402
28403         * ecore.cs (Expression.MemberLookup): instead of taking a
28404         parameter `same_type' that was used to tell whether we could
28405         access private members we compute our containing type from the
28406         EmitContext.
28407
28408         (FieldExpr): Added partial support for volatile fields.  This does
28409         not work for volatile fields exposed from assemblies, as I can not
28410         figure out how to extract the modreq from it.
28411
28412         Updated all the source files to use this.
28413
28414         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
28415         because it is referenced by MemberLookup very often. 
28416
28417 2002-01-09  Ravi Pratap  <ravi@ximian.com>
28418
28419         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
28420         TypeBuilder.GetCustomAttributes to retrieve what we need.
28421
28422         Get rid of redundant default_member_attr_type as this is the same as
28423         default_member_type which already exists.
28424
28425         * interface.cs, attribute.cs : Update accordingly.
28426
28427 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
28428
28429         * typemanager.cs: Enable IndexerPropertyName again.  It does not
28430         work for TYpeBuilders though.  Ravi, can you please fix this?
28431
28432         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
28433
28434         * expression.cs (Argument.Emit): Handle the case of ref objects
28435         being passed to ref functions;  
28436
28437         (ParameterReference.EmitLoad): Loads the content of the pointer
28438         without dereferencing.
28439
28440 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
28441
28442         * cs-tokenizer.cs: Implemented the pre-processing expressions.
28443
28444 2002-01-08  Ravi Pratap  <ravi@ximian.com>
28445
28446         * class.cs (Indexer.DefineMethod): Incorporate the interface
28447         type in the name of the method if we are doing explicit interface
28448         implementation.
28449
28450         * expression.cs (ConversionExists): Remove as it is completely obsolete.
28451
28452         (BetterConversion): Fix extremely trivial bug where we were referring to
28453         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
28454         again !
28455
28456         * ../errors/bug16.cs : Add although we have fixed it.
28457
28458 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
28459
28460         * expression.cs (BaseIndexer): Begin implementation.
28461
28462         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
28463
28464         * cs-parser.jay (indexer_declarator): Use qualified_identifier
28465         production directly to remove a shift/reduce, and implement
28466         explicit interface implementation.
28467
28468         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
28469         after a floating point suffix.
28470
28471         * expression.cs (DoNumericPromotions): Improved the conversion for
28472         uint/uint.  If we have a constant, we avoid doing a typecast to a
28473         larger type.
28474
28475         * class.cs (Indexer): Implement explicit interface implementation
28476         for indexers.
28477
28478 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
28479
28480         * class.cs: make the default instance constructor public and hidebysig.
28481
28482 2001-01-03  Ravi Pratap  <ravi@ximian.com>
28483
28484         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
28485         so we can call it from elsewhere.
28486
28487         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
28488         we emit it internally if the class has a defined indexer; otherwise the user
28489         emits it by decorating the class definition with the DefaultMemberAttribute.
28490
28491         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
28492         attribute is not used on a type which defines an indexer.
28493
28494         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
28495         character when we skip whitespace.
28496
28497         * ../errors/cs0646.cs : Add.
28498
28499 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
28500
28501         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
28502         again. 
28503
28504         * makefile: Add practical target `mcs3.exe' which builds the third
28505         generation compiler. 
28506
28507         * expression.cs (New): Fix structures constructor calling.
28508
28509         * class.cs (Property, Method, Indexer): Emit Final flag on the
28510         method if we are an interface implementation and we are not
28511         abstract. 
28512
28513         * ecore.cs (PropertyExpr): New public field `IsBase', tells
28514         whether this property is referencing a `base' method.
28515
28516         * expression.cs (Invocation.EmitCall): take an extra argument:
28517         is_base, this is used to determine whether the `call' or
28518         `callvirt' opcode should be used.
28519
28520
28521         * delegate.cs: update EmitCall.
28522
28523         * class.cs (Method.Define): Set NewSlot for the cases where we are
28524         not implementing an interface method.
28525
28526         (Property.Define): ditto.
28527
28528 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
28529
28530         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
28531         'r'.  Allows mcs to parse itself fully.
28532
28533 2002-01-02  Ravi Pratap  <ravi@ximian.com>
28534
28535         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
28536         of the number of initializers that require the InitializeArray method.
28537
28538         (CheckIndices): Store the Expression in all cases - not the plain value. Also
28539         update the above field where necessary.
28540
28541         (MakeByteBlob): Update accordingly.
28542
28543         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
28544         greater than 2.
28545
28546         (EmitDynamicInitializers): Update in accordance with the new optimization.
28547
28548         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
28549         same OpCode applies.
28550
28551         * cs-parser.jay : Fix some glaring errors I introduced.
28552
28553 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
28554
28555         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
28556         so that we can check for name clashes there too.
28557
28558         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
28559         for interface indexers.
28560
28561         * interfaces.cs (Define): Emit the default member attribute.
28562
28563         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
28564         variable was being referred to while setting the value ;-)
28565
28566 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
28567
28568         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
28569         byte-by-byte information when we know the data is zero.
28570
28571         Make the block always a multiple of 4, because
28572         DefineInitializedData has a bug.
28573
28574         * assign.cs: Fix, we should assign from the temporary, not from
28575         the source. 
28576
28577         * expression.cs (MakeByteBlob): Fix my incorrect code.
28578
28579 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
28580
28581         * typemanager.cs (EnumToUnderlying): This function is used to get
28582         the underlying type from an enumeration, because it does not
28583         always work. 
28584
28585         * constant.cs: Use the I4_S form for values between -128 and 127.
28586
28587         * statement.cs (Block.LookupLabel): Looks up a label.
28588         (Block): Drop support for labeled blocks.
28589
28590         (LabeledStatement): New kind of statement that represents a label
28591         only.
28592
28593         (Goto): Finally implement this bad boy.
28594
28595         * cs-parser.jay: Update to reflect new mechanism to implement
28596         labels.
28597
28598 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
28599
28600         * codegen.cs (EmitContext.This): a codegen property that keeps the
28601         a single instance of this instead of creating many different this
28602         instances. 
28603
28604         * delegate.cs (Delegate.DoResolve): Update to use the property;
28605
28606         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
28607
28608         * expression.cs (BaseAccess.DoResolve): Ditto.
28609
28610 2001-12-29  Ravi Pratap  <ravi@ximian.com>
28611
28612         * typemanager.cs (methodimpl_attr_type): Add to hold the type
28613         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
28614
28615         (InitCoreTypes): Update accordingly.
28616
28617         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
28618         so we can quickly store the state.
28619
28620         (ApplyAttributes): Set the correct implementation flags
28621         for InternalCall methods.
28622
28623 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
28624
28625         * expression.cs (EmitCall): if a method is not virtual, then do
28626         not use callvirt on it.
28627
28628         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
28629         user defined stuff) requires the use of stobj, which takes an
28630         address on the stack instead of an array and an index.  So emit
28631         the Ldelema operation for it.
28632
28633         (EmitStoreOpcode): Use stobj for valuetypes.
28634
28635         (UnaryMutator.EmitCode): Use the right 1 value depending on
28636         whether we are dealing with int64/uint64, float or doubles.
28637
28638         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
28639         constructors that I implemented last night.
28640
28641         (Constructor.IsDefault): Fix to work properly for static
28642         constructors.
28643
28644         * cs-parser.jay (CheckDef): report method signature errors.
28645         Update error number 103 to be 132.
28646
28647         * decl.cs: New AdditionResult enumeration value: MethodExists.
28648         Although we do this check for methods later on in the semantic
28649         analysis, catching repeated default constructors is so easy that
28650         we catch these here. 
28651
28652         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
28653         promotions code.
28654
28655         (ParameterReference.EmitAssign, Emit): handle
28656         bools as bytes.
28657
28658         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
28659         (ArrayAccess.EmitStoreOpcode): ditto.
28660
28661         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
28662
28663         * expression.cs (MakeByteBlob): Complete all the missing types
28664         (uint, short, ushort, byte, sbyte)
28665
28666         * class.cs: Only init instance field initializers on instance
28667         constructors. 
28668
28669         Rename `constructors' to instance_constructors. 
28670
28671         (TypeContainer.AddConstructor): Only add constructors to the list
28672         if it is not static.
28673
28674         Make sure that we handle default_static_constructor independently
28675         everywhere where we handle instance_constructors
28676
28677 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
28678
28679         * class.cs: Do not lookup or create a base initializer for a
28680         static constructor.
28681
28682         (ConstructorInitializer.Resolve): use the proper type to lookup
28683         for constructors.
28684
28685         * cs-parser.jay: Report error 1585 (modifiers between type and name).
28686
28687         * enum.cs, interface.cs: Remove CloseType, this is taken care by
28688         in DeclSpace. 
28689
28690         * decl.cs: CloseType is now an virtual method, the default
28691         implementation just closes this type.
28692
28693 2001-12-28  Ravi Pratap  <ravi@ximian.com>
28694
28695         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
28696         to PreserveSig by default. Also emit HideBySig on such methods.
28697
28698         Basically, set the defaults to standard values.
28699
28700         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
28701         argument, if candidate is better, it can't be worse than the best !
28702
28703         (Invocation): Re-write bits to differentiate between methods being
28704         applicable in their expanded form and their normal form - for params
28705         methods of course.
28706
28707         Get rid of use_standard everywhere as only standard conversions are allowed
28708         in overload resolution. 
28709
28710         More spec conformance.
28711
28712 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
28713
28714         * driver.cs: Add --timestamp, to see where the compiler spends
28715         most of its time.
28716
28717         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
28718         `this' in static code.
28719
28720         (SimpleName.DoResolve): Implement in terms of a helper function
28721         that allows static-references to be passed upstream to
28722         MemberAccess.
28723
28724         (Expression.ResolveWithSimpleName): Resolve specially simple
28725         names when called by MemberAccess to implement the special
28726         semantics. 
28727
28728         (Expression.ImplicitReferenceConversion): Handle conversions from
28729         Null to reference types before others, as Null's type is
28730         System.Object. 
28731
28732         * expression.cs (Invocation.EmitCall): Handle the special case of
28733         calling methods declared on a reference type from a ValueType
28734         (Base classes System.Object and System.Enum)
28735
28736         (MemberAccess.Resolve): Only perform lookups on Enumerations if
28737         the left hand side is a TypeExpr, not on every enumeration. 
28738
28739         (Binary.Resolve): If types are reference types, then do a cast to
28740         object on operators != and == of both arguments.
28741
28742         * typemanager.cs (FindMembers): Extract instance and static
28743         members if requested.
28744
28745         * interface.cs (PopulateProperty): Use void_type instead of null
28746         as the return type for the setter method.
28747
28748         (PopulateIndexer): ditto.
28749
28750 2001-12-27  Ravi Pratap  <ravi@ximian.com>
28751
28752         * support.cs (ReflectionParameters): Fix minor bug where we
28753         were examining the wrong parameter for the ParamArray attribute.
28754
28755         Cope with requests for the type of the parameter at position
28756         greater than the params parameter's. We now return the element
28757         type of the params array as that makes more sense.
28758
28759         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
28760         accordingly as we no longer have to extract the element type
28761         ourselves.
28762
28763         (Invocation.OverloadResolve): Update.
28764
28765 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
28766
28767         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
28768         against IEnumerator, test whether the return value is a descendant
28769         of the IEnumerator interface.
28770
28771         * class.cs (Indexer.Define): Use an auxiliary method to implement
28772         the other bits of the method definition.  Begin support for
28773         explicit interface implementation.
28774
28775         (Property.DefineMethod): Use TypeManager.void_type instead of null
28776         for an empty return value.
28777
28778 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
28779
28780         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
28781         dealing with a FieldExpr which is composed of a FieldBuilder, in
28782         the code path we did extract the constant, but we should have
28783         obtained the underlying value to be able to cast it (otherwise we
28784         end up in an infinite loop, this is what Ravi was running into).
28785
28786         (ArrayCreation.UpdateIndices): Arrays might be empty.
28787
28788         (MemberAccess.ResolveMemberAccess): Add support for section
28789         14.5.4.1 that deals with the special case of E.I when E is a type
28790         and something else, that I can be a reference to a static member.
28791
28792         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
28793         handle a particular array type to create byte blobs, it is just
28794         something we dont generate byteblobs for.
28795
28796         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
28797         arguments. 
28798
28799         * location.cs (Push): remove the key from the hashtable that we
28800         are about to add.   This happens for empty files.
28801
28802         * driver.cs: Dispose files after we have parsed them.
28803
28804         (tokenize): new function that only runs the tokenizer on its
28805         input, for speed testing.
28806
28807 2001-12-26  Ravi Pratap  <ravi@ximian.com>
28808
28809         * class.cs (Event.Define): Define the private field only if there
28810         are no accessors defined.
28811
28812         * expression.cs (ResolveMemberAccess): If there is no associated
28813         field with the event, that means we have an event defined with its
28814         own accessors and we should flag error cs0070 since transforming
28815         ourselves into a field is not valid in that case.
28816
28817         * ecore.cs (SimpleName.DoResolve): Same as above.
28818
28819         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
28820         and charset to sane values.
28821
28822 2001-12-25  Ravi Pratap  <ravi@ximian.com>
28823
28824         * assign.cs (DoResolve): Perform check on events only if they 
28825         are being accessed outside the declaring type.
28826
28827         * cs-parser.jay (event_declarations): Update rules to correctly
28828         set the type of the implicit parameter etc.
28829
28830         (add_accessor, remove_accessor): Set current local parameters.
28831
28832         * expression.cs (Binary): For delegate addition and subtraction,
28833         cast the return value from the method into the appropriate delegate
28834         type.
28835
28836 2001-12-24  Ravi Pratap  <ravi@ximian.com>
28837
28838         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
28839         of these as the workaround is unnecessary.
28840
28841         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
28842         delegate data - none of that is needed at all.
28843
28844         Re-write bits to extract the instance expression and the delegate method
28845         correctly.
28846
28847         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
28848         on delegates too.
28849
28850         * attribute.cs (ApplyAttributes): New method to take care of common tasks
28851         of attaching attributes instead of duplicating code everywhere.
28852
28853         * everywhere : Update code to do attribute emission using the above method.
28854
28855 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
28856
28857         * expression.cs (IsParamsMethodApplicable): if there are not
28858         parameters, return immediately.
28859
28860         * ecore.cs: The 0 literal can be implicity converted to an enum
28861         type. 
28862
28863         (SimpleName.DoResolve): First lookup the type, then lookup the
28864         members. 
28865
28866         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
28867         want to get its address.  If the InstanceExpression is not
28868         addressable, store the result in a temporary variable, then get
28869         the address of it.
28870
28871         * codegen.cs: Only display 219 errors on warning level or above. 
28872
28873         * expression.cs (ArrayAccess): Make it implement the
28874         IMemoryLocation interface.
28875
28876         (Binary.DoResolve): handle the operator == (object a, object b)
28877         and operator != (object a, object b) without incurring into a
28878         BoxedCast (because 5 != o should never be performed).
28879
28880         Handle binary enumerator operators.
28881
28882         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
28883         value type, otherwise use Ldelem_ref.
28884
28885         Use precomputed names;
28886
28887         (AddressOf): Implement address of
28888
28889         * cs-parser.jay (labeled_statement): Fix recursive block
28890         addition by reworking the production.
28891
28892         * expression.cs (New.DoEmit): New has a special case:
28893                 
28894                  If we are dealing with a ValueType, we have a few
28895                  situations to deal with:
28896                 
28897                     * The target of New is a ValueType variable, that is
28898                       easy, we just pass this as the variable reference
28899                 
28900                     * The target of New is being passed as an argument,
28901                       to a boxing operation or a function that takes a
28902                       ValueType.
28903                 
28904                       In this case, we need to create a temporary variable
28905                       that is the argument of New.
28906
28907
28908 2001-12-23  Ravi Pratap  <ravi@ximian.com>
28909
28910         * rootcontext.cs (LookupType): Check that current_type is not null before
28911         going about looking at nested types.
28912
28913         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
28914         not implement the IAssignMethod interface any more.
28915
28916         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
28917         where we tranform them into FieldExprs if they are being resolved from within
28918         the declaring type.
28919
28920         * ecore.cs (SimpleName.DoResolve): Do the same here.
28921
28922         * assign.cs (DoResolve, Emit): Clean up code considerably. 
28923
28924         * ../errors/bug10.cs : Add.
28925
28926         * ../errors/cs0070.cs : Add.
28927
28928         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
28929
28930         * assign.cs : Get rid of EventIsLocal everywhere.
28931
28932 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
28933
28934         * ecore.cs (ConvertIntLiteral): finished the implementation.
28935
28936         * statement.cs (SwitchLabel): Convert the value we are using as a
28937         key before looking up the table.
28938
28939 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
28940
28941         * codegen.cs (EmitTopBlock): Require a Location argument now.
28942
28943         * cs-parser.jay (constructor_declarator): We need to setup
28944         current_local_parameters before we parse the
28945         opt_constructor_initializer, to allow the variables to be bound
28946         to the constructor arguments.
28947
28948         * rootcontext.cs (LookupType): First lookup nested classes in our
28949         class and our parents before we go looking outside our class.
28950
28951         * expression.cs (ConstantFold): Extract/debox the values at the
28952         beginnning. 
28953
28954         * rootcontext.cs (EmitCode): Resolve the constants first before we
28955         resolve the types.  This is not really needed, but it helps debugging.
28956
28957         * statement.cs: report location.
28958
28959         * cs-parser.jay: pass location to throw statement.
28960
28961         * driver.cs: Small bug fix.
28962
28963         * report.cs: Updated format to be 4-zero filled digits.
28964
28965 2001-12-22  Ravi Pratap  <ravi@ximian.com>
28966
28967         * expression.cs (CheckIndices): Fix minor bug where the wrong
28968         variable was being referred to ;-)
28969
28970         (DoEmit): Do not call EmitStaticInitializers when the 
28971         underlying type is System.Object.
28972
28973 2001-12-21  Ravi Pratap  <ravi@ximian.com>
28974
28975         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
28976         and do the usual workaround for SRE.
28977
28978         * class.cs (MyEventBuilder.EventType): New member to get at the type
28979         of the event, quickly.
28980
28981         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
28982
28983         * assign.cs (Assign.DoResolve): Handle the case when the target
28984         is an EventExpr and perform the necessary checks.
28985
28986         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
28987         interface.
28988
28989         (SimpleName.MemberStaticCheck): Include check for EventExpr.
28990
28991         (EventExpr): Set the type in the constructor itself since we 
28992         are meant to be born fully resolved.
28993
28994         (EventExpr.Define): Revert code I wrote earlier.
28995                 
28996         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
28997         instance expression is null. The instance expression is a This in that case
28998         or a null, depending on whether it is a static method or not.
28999
29000         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
29001         refers to more than one method.
29002
29003         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
29004         and accordingly flag errors.
29005
29006 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
29007
29008         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
29009
29010 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
29011
29012         * location.cs (ToString): Provide useful rutine.
29013
29014 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
29015
29016         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
29017         objects, return the actual integral boxed.
29018
29019         * statement.cs (SwitchLabel): define an ILLabel for each
29020         SwitchLabel. 
29021
29022         (Switch.CheckSwitch): If the value is a Literal, extract
29023         the underlying literal.
29024
29025         Also in the unused hashtable we had, add the SwitchLabel so we can
29026         quickly look this value up.
29027
29028         * constant.cs: Implement a bunch of new constants.  Rewrite
29029         Literal based on this.  Made changes everywhere to adapt to this.
29030
29031         * expression.cs (Expression.MakeByteBlob): Optimize routine by
29032         dereferencing array only once, and also copes with enumrations.
29033
29034         bytes are two bytes wide, not one.
29035
29036         (Cast): Perform constant conversions.
29037
29038         * ecore.cs (TryImplicitIntConversion): Return literals instead of
29039         wrappers to the literals here.
29040
29041         * expression.cs (DoNumericPromotions): long literals can converted
29042         to ulong implicity (this is taken care of elsewhere, but I was
29043         missing this spot).
29044
29045         * ecore.cs (Expression.Literalize): Make the return type Literal,
29046         to improve type checking.
29047
29048         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
29049
29050 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
29051
29052         * literal.cs: Revert code from ravi that checked the bounds.  The
29053         bounds are sane by the definition of the type itself. 
29054
29055         * typemanager.cs: Fix implementation of ImplementsInterface.  We
29056         need to actually look up in our parent hierarchy for interfaces
29057         implemented. 
29058
29059         * const.cs: Use the underlying type for enumerations
29060
29061         * delegate.cs: Compute the basename for the delegate creation,
29062         that should fix the delegate test case, and restore the correct
29063         Type Lookup semantics in rootcontext
29064
29065         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
29066         referencing a nested type with the Reflection API is using the "+"
29067         sign. 
29068
29069         * cs-parser.jay: Do not require EOF token at the end.
29070
29071 2001-12-20  Ravi Pratap  <ravi@ximian.com>
29072
29073         * rootcontext.cs (LookupType): Concatenate type names with
29074         a '.' instead of a '+' The test suite passes again.
29075
29076         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
29077         field of the enumeration.
29078
29079         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
29080         the case when the member is an EventExpr.
29081
29082         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
29083         static has an associated instance expression.
29084
29085         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
29086
29087         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
29088
29089         * class.cs (Event.Define): Register event and perform appropriate checks
29090         for error #111.
29091
29092         We define the Add and Remove methods even if the use provides none because
29093         in that case, we provide default implementations ourselves.
29094
29095         Define a private field of the type of the event. This is done by the CSC compiler
29096         and we should be doing it too ;-)
29097
29098         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
29099         More methods we use in code we generate.
29100
29101         (multicast_delegate_type, delegate_type): Two separate types since the distinction
29102         is important.
29103
29104         (InitCoreTypes): Update accordingly for the above.
29105
29106         * class.cs (Event.Emit): Generate code for default accessors that we provide
29107
29108         (EmitDefaultMethod): Do the job in the above.
29109
29110         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
29111         appropriate place.
29112
29113 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
29114
29115         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
29116         builders even if we were missing one.
29117
29118         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
29119         pass the Basename as our class name instead of the Name.  The
29120         basename will be correctly composed for us.
29121
29122         * parameter.cs (Paramters): Now takes a Location argument.
29123
29124         * decl.cs (DeclSpace.LookupType): Removed convenience function and
29125         make all the code call directly LookupType in RootContext and take
29126         this chance to pass the Location information everywhere.
29127
29128         * Everywhere: pass Location information.
29129
29130 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
29131
29132         * class.cs (Constructor.Define): Updated way of detecting the
29133         length of the parameters.
29134
29135         (TypeContainer.DefineType): Use basename as the type name for
29136         nested types.
29137
29138         (TypeContainer.Define): Do not recursively define types here, as
29139         definition is taken care in order by the RootContext.
29140
29141         * tree.cs: Keep track of namespaces in a per-file basis.
29142
29143         * parameter.cs (Parameter.ComputeSignature): Update to use
29144         DeclSpace. 
29145
29146         (Parameters.GetSignature): ditto.
29147
29148         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
29149         instead of a TypeContainer.
29150
29151         (Interface.SemanticAnalysis): Use `this' instead of our parent to
29152         resolve names.  Because we need to be resolve in our context, not
29153         our parents.
29154
29155         * driver.cs: Implement response files.
29156
29157         * class.cs (TypeContainer.DefineType): If we are defined, do not
29158         redefine ourselves.
29159
29160         (Event.Emit): Emit the code for add/remove handlers.
29161         (Event.Define): Save the MethodBuilders for add/remove.
29162
29163         * typemanager.cs: Use pair here too.
29164
29165         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
29166         DictionaryEntry requires the first argument to be non-null.  
29167
29168         (enum_declaration): Compute full name for registering the
29169         enumeration.
29170
29171         (delegate_declaration): Instead of using
29172         formal_parameter_list, use opt_formal_parameter_list as the list
29173         can be empty.
29174
29175         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
29176         (EventParsing): New property that controls whether `add' and
29177         `remove' are returned as tokens or identifiers (for events);
29178
29179 2001-12-19  Ravi Pratap  <ravi@ximian.com>
29180
29181         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
29182         use MyEventBuilder only and let it wrap the real builder for us.
29183
29184         (MyEventBuilder): Revamp constructor etc.
29185
29186         Implement all operations that we perform on EventBuilder in precisely the same
29187         way here too.
29188
29189         (FindMembers): Update to use the EventBuilder member.
29190
29191         (Event.Emit): Update accordingly.
29192
29193 2001-12-18  Ravi Pratap  <ravi@ximian.com>
29194
29195         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
29196         by calling the appropriate methods.
29197
29198         (GetCustomAttributes): Make stubs as they cannot possibly do anything
29199         useful.
29200
29201         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
29202
29203 2001-12-17  Ravi Pratap  <ravi@ximian.com>
29204
29205         * delegate.cs (Delegate.Populate): Check that the return type
29206         and various parameters types are indeed accessible.
29207
29208         * class.cs (Constructor.Define): Same here.
29209
29210         (Field.Define): Ditto.
29211
29212         (Event.Define): Ditto.
29213
29214         (Operator.Define): Check that the underlying Method defined itself
29215         correctly - so it's MethodBuilder should not be null.
29216
29217         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
29218         expression happens to be null.
29219
29220         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
29221         members but as of now we don't seem to be able to do anything really useful with it.
29222
29223         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
29224         not the EventBuilder.
29225
29226 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
29227
29228         * cs-tokenizer.cs: Add support for defines.
29229         Add support for #if, #elif, #else, #endif
29230
29231         (eval_var): evaluates a variable.
29232         (eval): stubbed for evaluating functions.
29233
29234         * cs-parser.jay: Pass the defines information
29235
29236         * driver.cs: Add --define command line option.
29237
29238         * decl.cs: Move MemberCore here.
29239
29240         Make it the base class for DeclSpace.  This allows us to catch and
29241         report 108 and 109 for everything now.
29242
29243         * class.cs (TypeContainer.Define): Extract all the members
29244         before populating and emit the warning 108 (new keyword required
29245         to override) instead of having each member implement this.
29246
29247         (MemberCore.Define): New abstract method, we will be using this in
29248         the warning reporting engine in Populate.
29249
29250         (Operator.Define): Adjust to new MemberCore protocol. 
29251
29252         * const.cs (Const): This does not derive from Expression, it is a
29253         temporary object we use to create fields, it is a MemberCore. 
29254
29255         * class.cs (Method.Define): Allow the entry point to be in a
29256         specific class.
29257
29258         * driver.cs: Rewrite the argument handler to clean it up a bit.
29259
29260         * rootcontext.cs: Made it just an auxiliary namespace feature by
29261         making everything static.
29262
29263         * driver.cs: Adapt code to use RootContext type name instead of
29264         instance variable.
29265
29266         * delegate.cs: Remove RootContext argument.
29267
29268         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
29269         argument. 
29270
29271         * class.cs (Event.Define): The lookup can fail.
29272
29273         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
29274
29275         * expression.cs: Resolve the this instance before invoking the code.
29276
29277 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
29278
29279         * cs-parser.jay: Add a production in element_access that allows
29280         the thing to become a "type" reference.  This way we can parse
29281         things like "(string [])" as a type.
29282
29283         Note that this still does not handle the more complex rules of
29284         casts. 
29285
29286
29287         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
29288
29289         * ecore.cs: (CopyNewMethods): new utility function used to
29290         assemble the list of methods from running FindMembers.
29291
29292         (MemberLookup): Rework FindMembers so that 
29293
29294 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
29295
29296         * class.cs (TypeContainer): Remove Delegates who fail to be
29297         defined.
29298
29299         * delegate.cs (Populate): Verify that we dont get null return
29300         values.   TODO: Check for AsAccessible.
29301
29302         * cs-parser.jay: Use basename to emit error 574 (destructor should
29303         have the same name as container class), not the full name.
29304
29305         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
29306         possible representation.  
29307
29308         Also implements integer type suffixes U and L.
29309
29310 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
29311
29312         * expression.cs (ArrayCreation.DoResolve): We need to do the
29313         argument resolution *always*.
29314
29315         * decl.cs: Make this hold the namespace.  Hold the root context as
29316         well.
29317         (LookupType): Move here.
29318
29319         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
29320
29321         * location.cs (Row, Name): Fixed the code, it was always returning
29322         references to the first file.
29323
29324         * interface.cs: Register properties defined through interfaces.
29325
29326         * driver.cs: Add support for globbing on the command line
29327
29328         * class.cs (Field): Make it derive from MemberCore as well.
29329         (Event): ditto.
29330
29331 2001-12-15  Ravi Pratap  <ravi@ximian.com>
29332
29333         * class.cs (Event::Define): Check that the type of the event is a delegate
29334         type else flag error #66.
29335
29336         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
29337         same.
29338
29339         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
29340         values of EntryPoint, CharSet etc etc.
29341
29342         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
29343
29344         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
29345         be null and we should ignore this. I am not sure if this is really clean. Apparently,
29346         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
29347         which needs this to do its work.
29348
29349         * ../errors/cs0066.cs : Add.
29350
29351 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
29352
29353         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
29354         helper functions.
29355
29356         * class.cs: (MethodSignature.MethodSignature): Removed hack that
29357         clears out the parameters field.
29358         (MemberSignatureCompare): Cleanup
29359
29360         (MemberCore): New base class used to share code between MethodCore
29361         and Property.
29362
29363         (RegisterRequiredImplementations) BindingFlags.Public requires
29364         either BindingFlags.Instace or Static.  Use instance here.
29365
29366         (Property): Refactored code to cope better with the full spec.
29367
29368         * parameter.cs (GetParameterInfo): Return an empty array instead
29369         of null on error.
29370
29371         * class.cs (Property): Abstract or extern properties have no bodies.
29372
29373         * parameter.cs (GetParameterInfo): return a zero-sized array.
29374
29375         * class.cs (TypeContainer.MethodModifiersValid): Move all the
29376         method modifier validation to the typecontainer so we can reuse
29377         this on properties.
29378
29379         (MethodCore.ParameterTypes): return an empty sized array of types.
29380
29381         (Property.Define): Test property modifier validity.
29382
29383         Add tests for sealed/override too.
29384
29385         (Method.Emit): abstract or extern methods have no bodies.
29386
29387 2001-12-14  Ravi Pratap  <ravi@ximian.com>
29388
29389         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
29390         thing.
29391
29392         (Method::Define, ::Emit): Modify accordingly.
29393
29394         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
29395
29396         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
29397
29398         * makefile: Pass in /unsafe.
29399
29400 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
29401
29402         * class.cs (MakeKey): Kill routine.
29403
29404         * class.cs (TypeContainer.Define): Correctly define explicit
29405         method implementations (they require the full interface name plus
29406         the method name).
29407
29408         * typemanager.cs: Deply the PtrHashtable here and stop using the
29409         lame keys.  Things work so much better.
29410
29411         This of course broke everyone who depended on `RegisterMethod' to
29412         do the `test for existance' test.  This has to be done elsewhere.
29413
29414         * support.cs (PtrHashtable): A hashtable that avoid comparing with
29415         the object stupid Equals method (because, that like fails all over
29416         the place).  We still do not use it.
29417
29418         * class.cs (TypeContainer.SetRequiredInterface,
29419         TypeContainer.RequireMethods): Killed these two routines and moved
29420         all the functionality to RegisterRequiredImplementations.
29421
29422         (TypeContainer.RegisterRequiredImplementations): This routine now
29423         registers all the implementations required in an array for the
29424         interfaces and abstract methods.  We use an array of structures
29425         which can be computed ahead of time to reduce memory usage and we
29426         also assume that lookups are cheap as most classes will not
29427         implement too many interfaces.
29428
29429         We also avoid creating too many MethodSignatures.
29430
29431         (TypeContainer.IsInterfaceMethod): Update and optionally does not
29432         clear the "pending" bit if we find that there are problems with
29433         the declaration.
29434
29435         (TypeContainer.VerifyPendingMethods): Update to report errors of
29436         methods that look like implementations but are not.
29437
29438         (TypeContainer.Define): Add support for explicit interface method
29439         implementation. 
29440
29441 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
29442
29443         * typemanager.cs: Keep track of the parameters here instead of
29444         being a feature of the TypeContainer.
29445
29446         * class.cs: Drop the registration of parameters here, as
29447         InterfaceMethods are also interface declarations.
29448
29449         * delegate.cs: Register methods with the TypeManager not only with
29450         the TypeContainer.  This code was buggy.
29451
29452         * interface.cs: Full registation here.
29453
29454 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
29455
29456         * expression.cs: Remove reducer for binary expressions, it can not
29457         be done this way.
29458
29459         * const.cs: Put here the code that used to go into constant.cs
29460
29461         * constant.cs: Put here the code for constants, this is a new base
29462         class for Literals.
29463
29464         * literal.cs: Make Literal derive from Constant.
29465
29466 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
29467
29468         * statement.cs (Return.Emit): Report error 157 if the user
29469         attempts to return from a finally block.
29470
29471         (Return.Emit): Instead of emitting a return, jump to the end of
29472         the function.
29473
29474         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
29475         LocalBuilder to store the result of the function.  ReturnLabel is
29476         the target where we jump.
29477
29478
29479 2001-12-09  Radek Doulik  <rodo@ximian.com>
29480
29481         * cs-parser.jay: remember alias in current namespace
29482
29483         * ecore.cs (SimpleName::DoResolve): use aliases for types or
29484         namespaces
29485
29486         * class.cs (LookupAlias): lookup alias in my_namespace
29487
29488         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
29489         aliases hashtable
29490         (LookupAlias): lookup alias in this and if needed in parent
29491         namespaces
29492
29493 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
29494
29495         * support.cs: 
29496
29497         * rootcontext.cs: (ModuleBuilder) Made static, first step into
29498         making things static.  I need this to avoid passing the
29499         TypeContainer when calling ParameterType.
29500
29501         * support.cs (InternalParameters.ParameterType): Remove ugly hack
29502         that did string manipulation to compute the type and then call
29503         GetType.  Use Parameter.ParameterType instead.
29504
29505         * cs-tokenizer.cs: Consume the suffix for floating values.
29506
29507         * expression.cs (ParameterReference): figure out whether this is a
29508         reference parameter or not.  Kill an extra variable by computing
29509         the arg_idx during emission.
29510
29511         * parameter.cs (Parameters.GetParameterInfo): New overloaded
29512         function that returns whether a parameter is an out/ref value or not.
29513
29514         (Parameter.ParameterType): The type of the parameter (base,
29515         without ref/out applied).
29516
29517         (Parameter.Resolve): Perform resolution here.
29518         (Parameter.ExternalType): The full type (with ref/out applied).
29519
29520         * statement.cs (Using.Emit, Using.EmitExpression): Implement
29521         support for expressions on the using statement.
29522
29523 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
29524
29525         * statement.cs (Using.EmitLocalVariableDecls): Split the
29526         localvariable handling of the using statement.
29527
29528         (Block.EmitMeta): Keep track of variable count across blocks.  We
29529         were reusing slots on separate branches of blocks.
29530
29531         (Try.Emit): Emit the general code block, we were not emitting it. 
29532
29533         Check the type of the declaration to be an IDisposable or
29534         something that can be implicity converted to it. 
29535
29536         Emit conversions if required.
29537
29538         * ecore.cs (EmptyExpression): New utility class.
29539         (Expression.ImplicitConversionExists): New utility function.
29540
29541 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
29542
29543         * statement.cs (Using): Implement.
29544
29545         * expression.cs (LocalVariableReference): Support read only variables.
29546
29547         * statement.cs: Remove the explicit emit for the Leave opcode.
29548         (VariableInfo): Add a readonly field.
29549
29550 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
29551
29552         * ecore.cs (ConvCast): new class used to encapsulate the various
29553         explicit integer conversions that works in both checked and
29554         unchecked contexts.
29555
29556         (Expression.ConvertNumericExplicit): Use new ConvCast class to
29557         properly generate the overflow opcodes.
29558
29559 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
29560
29561         * statement.cs: The correct type for the EmptyExpression is the
29562         element_type, not the variable type.  Ravi pointed this out.
29563
29564 2001-12-04  Ravi Pratap  <ravi@ximian.com>
29565
29566         * class.cs (Method::Define): Handle PInvoke methods specially
29567         by using DefinePInvokeMethod instead of the usual one.
29568
29569         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
29570         above to do the task of extracting information and defining the method.
29571
29572 2001-12-04  Ravi Pratap  <ravi@ximian.com>
29573
29574         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
29575         of the condition for string type.
29576
29577         (Emit): Move that here. 
29578
29579         (ArrayCreation::CheckIndices): Keep string literals in their expression
29580         form.
29581
29582         (EmitDynamicInitializers): Handle strings appropriately.
29583
29584 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
29585
29586         * codegen.cs (EmitContext): Replace multiple variables with a
29587         single pointer to the current Switch statement.
29588
29589         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
29590         EmitContext.
29591
29592 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
29593
29594         * statement.cs 
29595
29596         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
29597         default'.
29598
29599         (Foreach.Emit): Foreach on arrays was not setting
29600         up the loop variables (for break/continue).
29601
29602         (GotoCase): Semi-implented.
29603
29604 2001-12-03  Ravi Pratap  <ravi@ximian.com>
29605
29606         * attribute.cs (CheckAttribute): Handle system attributes by using
29607         Attribute.GetAttributes to examine information we need.
29608
29609         (GetValidPlaces): Same here.
29610
29611         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
29612
29613         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
29614
29615         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
29616
29617         (Method::Define): Set appropriate flags if we have a DllImport attribute.
29618
29619         (Method::Emit): Handle the case when we are a PInvoke method.
29620
29621 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
29622
29623         * expression.cs: Use ResolveWithSimpleName on compound names.
29624
29625 2001-12-02  Ravi Pratap  <ravi@ximian.com>
29626
29627         * constant.cs (EmitConstant): Make sure we resolve the associated expression
29628         before trying to reduce it.
29629
29630         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
29631
29632         * constant.cs (LookupConstantValue): Implement.
29633
29634         (EmitConstant): Use the above in emitting the constant.
29635
29636         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
29637         that are user-defined by doing a LookupConstantValue on them.
29638
29639         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
29640         too, like above.
29641
29642 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
29643
29644         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
29645
29646         (BaseAccess.DoResolve): Implement.
29647
29648         (MemberAccess.DoResolve): Split this routine into a
29649         ResolveMemberAccess routine that can be used independently
29650
29651 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
29652
29653         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
29654         As that share bits of the implementation.  Is returns a boolean,
29655         while As returns the Type that is being probed.
29656
29657 2001-12-01  Ravi Pratap  <ravi@ximian.com>
29658
29659         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
29660         instead of a Literal - much easier.
29661
29662         (EnumInTransit): Remove - utterly useless :-)
29663
29664         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
29665
29666         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
29667
29668         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
29669         chain when we have no associated expression.
29670
29671 2001-11-30  Ravi Pratap  <ravi@ximian.com>
29672
29673         * constant.cs (Define): Use Location while reporting the errror.
29674
29675         Also emit a warning when 'new' is used and there is no inherited
29676         member to hide.
29677
29678         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
29679         populated.
29680
29681         (LookupEnumValue): Implement to lookup an enum member's value and define it
29682         if necessary.
29683
29684         (Populate): Re-write accordingly to use the above routine.
29685
29686 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
29687
29688         * expression.cs (This): Fix prototype for DoResolveLValue to
29689         override the base class DoResolveLValue.
29690
29691         * cs-parser.cs: Report errors cs574 and cs575 (destructor
29692         declarations) 
29693
29694         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
29695         (we need to load the address of the field here).  This fixes
29696         test-22. 
29697
29698         (FieldExpr.DoResolveLValue): Call the DoResolve
29699         function to initialize the Instance expression.
29700
29701         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
29702         correctly the GetEnumerator operation on a value type.
29703
29704         * cs-parser.jay: Add more simple parsing error catches.
29705
29706         * statement.cs (Switch): Add support for string switches.
29707         Handle null specially.
29708
29709         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
29710
29711 2001-11-28  Ravi Pratap  <ravi@ximian.com>
29712
29713         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
29714
29715         (declare_local_constant): New helper function.
29716
29717         * statement.cs (AddConstant): Keep a separate record of constants
29718
29719         (IsConstant): Implement to determine if a variable is a constant.
29720
29721         (GetConstantExpression): Implement.
29722
29723         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
29724
29725         * statement.cs (IsVariableDefined): Re-write.
29726
29727 2001-11-27  Ravi Pratap  <ravi@ximian.com>
29728
29729         * class.cs (TypeContainer::FindMembers): Look for constants
29730         in the case when we are looking for MemberTypes.Field
29731
29732         * expression.cs (MemberAccess::DoResolve): Check that in the
29733         case we are a FieldExpr and a Literal, we are not being accessed
29734         by an instance reference.
29735
29736         * cs-parser.jay (local_constant_declaration): Implement.
29737
29738         (declaration_statement): Implement for constant declarations.
29739
29740 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
29741
29742         * statement.cs (Switch): Catch double defaults.
29743
29744         (Switch): More work on the switch() statement
29745         implementation.  It works for integral values now, need to finish
29746         string support.
29747
29748
29749 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
29750
29751         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
29752         integer literals into other integer literals.  To be used by
29753         switch. 
29754
29755 2001-11-24  Ravi Pratap  <ravi@ximian.com>
29756
29757         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
29758         some memory.
29759
29760         (EmitDynamicInitializers): Cope with the above since we extract data
29761         directly from ArrayData now.
29762
29763         (ExpectInitializers): Keep track of whether initializers are mandatory
29764         or not.
29765
29766         (Bounds): Make it a hashtable to prevent the same dimension being 
29767         recorded for every element in that dimension.
29768
29769         (EmitDynamicInitializers): Fix bug which prevented the Set array method
29770         from being found.
29771
29772         Also fix bug which was causing the indices to be emitted in the reverse
29773         order.
29774
29775 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
29776
29777         * expression.cs (ArrayCreation): Implement the bits that Ravi left
29778         unfinished.  They do not work, because the underlying code is
29779         sloppy.
29780
29781 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
29782
29783         * cs-parser.jay: Remove bogus fixme.
29784
29785         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
29786         on Switch statement.
29787
29788 2001-11-23  Ravi Pratap  <ravi@ximian.com>
29789
29790         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
29791         the same. 
29792
29793         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
29794         parameter. Apparently, any expression is allowed. 
29795
29796         (ValidateInitializers): Update accordingly.
29797
29798         (CheckIndices): Fix some tricky bugs thanks to recursion.
29799
29800         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
29801         I was being completely brain-dead.
29802
29803         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
29804         and re-write acordingly.
29805
29806         (DelegateInvocation): Re-write accordingly.
29807
29808         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
29809
29810         (MakeByteBlob): Handle types more correctly.
29811
29812         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
29813         initialization from expressions but it is incomplete because I am a complete
29814         Dodo :-|
29815
29816 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
29817
29818         * statement.cs (If.Emit): Fix a bug that generated incorrect code
29819         on If.  Basically, we have to return `true' (ie, we do return to
29820         our caller) only if both branches of the if return.
29821
29822         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
29823         short-circuit operators, handle them as short circuit operators. 
29824
29825         (Cast.DoResolve): Resolve type.
29826         (Cast.Cast): Take an expression as the target type.
29827
29828         * cs-parser.jay (cast_expression): Remove old hack that only
29829         allowed a limited set of types to be handled.  Now we take a
29830         unary_expression and we resolve to a type during semantic
29831         analysis.
29832
29833         Use the grammar productions from Rhys to handle casts (this is
29834         not complete like Rhys syntax yet, we fail to handle that corner
29835         case that C# has regarding (-x), but we will get there.
29836
29837 2001-11-22  Ravi Pratap  <ravi@ximian.com>
29838
29839         * class.cs (EmitFieldInitializer): Take care of the case when we have a
29840         field which is an array type.
29841
29842         * cs-parser.jay (declare_local_variables): Support array initialization too.
29843
29844         * typemanager.cs (MakeKey): Implement.
29845
29846         (everywhere): Use the above appropriately.
29847
29848         * cs-parser.jay (for_statement): Update for array initialization while
29849         declaring variables.
29850
29851         * ecore.cs : The error message was correct, it's the variable's names that
29852         were misleading ;-) Make the code more readable.
29853
29854         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
29855         the correct type etc.
29856
29857         (ConvertExplicit): Handle Enum types by examining the underlying type.
29858
29859 2001-11-21  Ravi Pratap  <ravi@ximian.com>
29860
29861         * parameter.cs (GetCallingConvention): Always return
29862         CallingConventions.Standard for now.
29863
29864 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
29865
29866         * expression.cs (Binary.ResolveOperator): Update the values of `l'
29867         and `r' after calling DoNumericPromotions.
29868
29869         * ecore.cs: Fix error message (the types were in the wrong order).
29870
29871         * statement.cs (Foreach.ProbeCollectionType): Need to pass
29872         BindingFlags.Instance as well 
29873
29874         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
29875         implicit int literal conversion in an empty cast so that we
29876         propagate the right type upstream.
29877
29878         (UnboxCast): new class used to unbox value types.
29879         (Expression.ConvertExplicit): Add explicit type conversions done
29880         by unboxing.
29881
29882         (Expression.ImplicitNumericConversion): Oops, forgot to test for
29883         the target type before applying the implicit LongLiterals to ULong
29884         literal cast.
29885
29886 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
29887
29888         * cs-parser.jay (for_statement): Reworked the way For works: now
29889         we declare manually any variables that are introduced in
29890         for_initializer to solve the problem of having out-of-band code
29891         emition (that is what got for broken).
29892
29893         (declaration_statement): Perform the actual variable declaration
29894         that used to be done in local_variable_declaration here.
29895
29896         (local_variable_declaration): Do not declare anything, just pass
29897         the information on a DictionaryEntry
29898
29899 2001-11-20  Ravi Pratap  <ravi@ximian.com>
29900
29901         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
29902         re-write of the logic to now make it recursive.
29903
29904         (UpdateIndices): Re-write accordingly.
29905
29906         Store element data in a separate ArrayData list in the above methods.
29907
29908         (MakeByteBlob): Implement to dump the array data into a byte array.
29909
29910 2001-11-19  Ravi Pratap  <ravi@ximian.com>
29911
29912         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
29913         into CheckIndices.
29914
29915         * constant.cs (Define): Implement.
29916
29917         (EmitConstant): Re-write fully.
29918
29919         Pass in location info.
29920
29921         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
29922         respectively.
29923
29924         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
29925         DictionaryEntry since we need location info too.
29926
29927         (constant_declaration): Update accordingly.
29928
29929         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
29930         code into another method : UpdateIndices.
29931
29932 2001-11-18  Ravi Pratap  <ravi@ximian.com>
29933
29934         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
29935         some type checking etc.
29936
29937 2001-11-17  Ravi Pratap  <ravi@ximian.com>
29938
29939         * expression.cs (ArrayCreation::ValidateInitializers): Implement
29940         bits to provide dimension info if the user skips doing that.
29941
29942         Update second constructor to store the rank correctly.
29943
29944 2001-11-16  Ravi Pratap  <ravi@ximian.com>
29945
29946         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
29947         and try to implement.
29948
29949         * ../errors/cs0150.cs : Add.
29950
29951         * ../errors/cs0178.cs : Add.
29952
29953 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
29954
29955         * statement.cs: Implement foreach on multi-dimensional arrays. 
29956
29957         * parameter.cs (Parameters.GetParameterByName): Also lookup the
29958         name of the params argument.
29959
29960         * expression.cs: Use EmitStoreOpcode to get the right opcode while
29961         initializing the array.
29962
29963         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
29964         we can use this elsewhere.
29965
29966         * statement.cs: Finish implementation of foreach for single
29967         dimension arrays.
29968
29969         * cs-parser.jay: Use an out-of-band stack to pass information
29970         around, I wonder why I need this.
29971
29972         foreach_block: Make the new foreach_block the current_block.
29973
29974         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
29975         function used to return a static Parameters structure.  Used for
29976         empty parameters, as those are created very frequently.
29977
29978         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
29979
29980 2001-11-15  Ravi Pratap  <ravi@ximian.com>
29981
29982         * interface.cs : Default modifier is private, not public. The
29983         make verify test passes again.
29984
29985 2001-11-15  Ravi Pratap  <ravi@ximian.com>
29986
29987         * support.cs (ReflectionParameters): Fix logic to determine
29988         whether the last parameter is a params one. Test 9 passes again.
29989
29990         * delegate.cs (Populate): Register the builders we define with
29991         RegisterParameterForBuilder. Test 19 passes again.
29992
29993         * cs-parser.jay (property_declaration): Reference $6 instead
29994         of $$ to get at the location.
29995
29996         (indexer_declaration): Similar stuff.
29997
29998         (attribute): Ditto.
29999
30000         * class.cs (Property): Register parameters for the Get and Set methods
30001         if they exist. Test 23 passes again.
30002
30003         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
30004         call to EmitArguments as we are sure there aren't any params arguments. 
30005         Test 32 passes again.
30006
30007         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
30008         IndexOutOfRangeException. 
30009
30010         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
30011         Test 33 now passes again.
30012
30013 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
30014
30015         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
30016         broke a bunch of things.  Will have to come up with a better way
30017         of tracking locations.
30018
30019         * statement.cs: Implemented foreach for single dimension arrays.
30020
30021 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
30022
30023         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
30024         an error.  This removes the lookup from the critical path.
30025
30026         * cs-parser.jay: Removed use of temporary_loc, which is completely
30027         broken. 
30028
30029 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
30030
30031         * support.cs (ReflectionParameters.ParameterModifier): Report
30032         whether the argument is a PARAMS argument or not.
30033
30034         * class.cs: Set the attribute `ParamArrayAttribute' on the
30035         parameter argument.
30036
30037         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
30038         and cons_param_array_attribute (ConstructorInfo for
30039         ParamArrayAttribute)., 
30040
30041         * codegen.cs: Emit the return using the `Return' statement, that
30042         way we can report the error correctly for missing return values. 
30043
30044         * class.cs (Method.Emit): Clean up.
30045
30046         * expression.cs (Argument.Resolve): Take another argument: the
30047         location where this argument is used.  Notice that this is not
30048         part of the "Argument" class as to reduce the size of the
30049         structure (we know the approximate location anyways).
30050
30051         Test if the argument is a variable-reference, if not, then
30052         complain with a 206.
30053
30054         (Argument.Emit): Emit addresses of variables.
30055
30056         (Argument.FullDesc): Simplify.
30057
30058         (Invocation.DoResolve): Update for Argument.Resolve.
30059
30060         (ElementAccess.DoResolve): ditto.
30061
30062         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
30063         method should be virtual, as this method is always virtual.
30064
30065         (NewDelegate.DoResolve): Update for Argument.Resolve.
30066
30067         * class.cs (ConstructorInitializer.DoResolve): ditto.
30068
30069         * attribute.cs (Attribute.Resolve): ditto.
30070
30071 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
30072
30073         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
30074
30075         * expression.cs (ParameterReference): Drop IStackStorage and implement
30076         IAssignMethod instead. 
30077
30078         (LocalVariableReference): ditto.
30079
30080         * ecore.cs (FieldExpr): Drop IStackStorage and implement
30081         IAssignMethod instead. 
30082
30083 2001-11-13  Miguel de Icaza <miguel@ximian.com>
30084
30085         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
30086         enumerations that are used in heavily used structures derive from
30087         byte in a laughable and pathetic attempt to reduce memory usage.
30088         This is the kind of pre-optimzations that you should not do at
30089         home without adult supervision.
30090
30091         * expression.cs (UnaryMutator): New class, used to handle ++ and
30092         -- separatedly from the other unary operators.  Cleans up the
30093         code, and kills the ExpressionStatement dependency in Unary.
30094
30095         (Unary): Removed `method' and `Arguments' from this class, making
30096         it smaller, and moving it all to SimpleCall, so I can reuse this
30097         code in other locations and avoid creating a lot of transient data
30098         strucutres when not required.
30099
30100         * cs-parser.jay: Adjust for new changes.
30101
30102 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
30103
30104         * enum.cs (Enum.Populate): If there is a failure during
30105         definition, return
30106
30107         * cs-parser.jay (opt_enum_base): we used to catch type errors
30108         here, but this is really incorrect.  The type error should be
30109         catched during semantic analysis.
30110
30111 2001-12-11  Ravi Pratap  <ravi@ximian.com>
30112
30113         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
30114         current_local_parameters as expected since I, in my stupidity, had forgotten
30115         to do this :-)
30116
30117         * attribute.cs (GetValidPlaces): Fix stupid bug.
30118
30119         * class.cs (Method::Emit): Perform check on applicability of attributes.
30120
30121         (Constructor::Emit): Ditto.
30122
30123         (Field::Emit): Ditto.
30124
30125         (Field.Location): Store location information.
30126
30127         (Property, Event, Indexer, Operator): Ditto.
30128
30129         * cs-parser.jay (field_declaration): Pass in location for each field.
30130
30131         * ../errors/cs0592.cs : Add.
30132
30133 2001-11-12  Ravi Pratap  <ravi@ximian.com>
30134
30135         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
30136
30137         (InitCoreTypes): Update accordingly.
30138
30139         (RegisterAttrType, LookupAttr): Implement.
30140
30141         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
30142         info about the same.
30143
30144         (Resolve): Update to populate the above as necessary.
30145
30146         (Error592): Helper.
30147
30148         (GetValidPlaces): Helper to the above.
30149
30150         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
30151
30152         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
30153
30154 2001-11-12  Ravi Pratap  <ravi@ximian.com>
30155
30156         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
30157
30158         * ../errors/cs0617.cs : Add.
30159
30160 2001-11-11  Ravi Pratap  <ravi@ximian.com>
30161
30162         * enum.cs (Emit): Rename to Populate to be more consistent with what
30163         we expect it to do and when exactly it is called.
30164
30165         * class.cs, rootcontext.cs : Update accordingly.
30166
30167         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
30168         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
30169
30170         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
30171
30172         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
30173         of a fieldinfo using the above, when dealing with a FieldBuilder.
30174
30175 2001-11-10  Ravi Pratap  <ravi@ximian.com>
30176
30177         * ../errors/cs0031.cs : Add.
30178
30179         * ../errors/cs1008.cs : Add.
30180
30181         * ../errrors/cs0543.cs : Add.
30182
30183         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
30184         enum type.
30185
30186         (FindMembers): Implement.
30187
30188         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
30189         enums and delegates too.
30190
30191         (enum_types): Rename to builder_to_enum.
30192
30193         (delegate_types): Rename to builder_to_delegate.
30194
30195         * delegate.cs (FindMembers): Implement.
30196
30197 2001-11-09  Ravi Pratap  <ravi@ximian.com>
30198
30199         * typemanager.cs (IsEnumType): Implement.
30200
30201         * enum.cs (Emit): Re-write parts to account for the underlying type
30202         better and perform checking etc.
30203
30204         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
30205         of the underlying type.
30206
30207         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
30208         value
30209
30210         * enum.cs (error31): Helper to report error #31.
30211
30212         * cs-parser.jay (enum_declaration): Store location of each member too.
30213
30214         * enum.cs (member_to_location): New hashtable. 
30215
30216         (AddEnumMember): Update location hashtable.
30217
30218         (Emit): Use the location of each member while reporting errors.
30219
30220 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
30221
30222         * cs-parser.jay: A for_initializer if is a
30223         local_variable_declaration really ammount to have an implicit
30224         block with the variable declaration and no initializer for for.
30225
30226         * statement.cs (For.Emit): Cope with null initializers.
30227
30228         This fixes the infinite loop on for initializers.
30229
30230 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
30231
30232         * enum.cs: More cleanup.
30233
30234         * ecore.cs: Remove dead code.
30235
30236         * class.cs (Property.Emit): More simplification.
30237         (Event.Emit): ditto.
30238
30239         Reworked to have less levels of indentation.
30240
30241 2001-11-08  Ravi Pratap  <ravi@ximian.com>
30242
30243         * class.cs (Property): Emit attributes.
30244
30245         (Field): Ditto.
30246
30247         (Event): Ditto.
30248
30249         (Indexer): Ditto.
30250
30251         (Operator): Ditto.
30252
30253         * enum.cs (Emit): Ditto.
30254
30255         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
30256         Enums too.
30257
30258         * class.cs (Field, Event, etc.): Move attribute generation into the
30259         Emit method everywhere.
30260
30261         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
30262         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
30263         as we had no way of defining nested enums !
30264
30265         * rootcontext.cs : Adjust code accordingly.
30266
30267         * typemanager.cs (AddEnumType): To keep track of enum types separately.
30268
30269 2001-11-07  Ravi Pratap  <ravi@ximian.com>
30270
30271         * expression.cs (EvalConstantExpression): Move into ecore.cs
30272
30273         * enum.cs (Enum): Rename some members and make them public and readonly
30274         according to our convention.
30275
30276         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
30277         nothing else.
30278
30279         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
30280
30281         (Enum::Emit): Write a simple version for now which doesn't try to compute
30282         expressions. I shall modify this to be more robust in just a while.
30283
30284         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
30285
30286         (TypeContainer::CloseType): Create the Enum types too.
30287
30288         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
30289
30290         * expression.cs (EvalConstantExpression): Get rid of completely.
30291
30292         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
30293         user-defined values and other cases.
30294
30295         (IsValidEnumLiteral): Helper function.
30296
30297         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
30298         out there in the case we had a literal FieldExpr.
30299
30300         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
30301
30302         (Literalize): Revamp a bit to take two arguments.
30303
30304         (EnumLiteral): New class which derives from Literal to wrap enum literals.
30305
30306 2001-11-06  Ravi Pratap  <ravi@ximian.com>
30307
30308         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
30309
30310         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
30311
30312         (Resolve): Use the above to ensure we have proper initializers.
30313
30314 2001-11-05  Ravi Pratap  <ravi@ximian.com>
30315
30316         * expression.cs (Expression::EvalConstantExpression): New method to 
30317         evaluate constant expressions.
30318
30319         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
30320
30321 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
30322
30323         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
30324         in an array.
30325
30326         (Binary.ResolveOperator): Handle operator != (object a, object b)
30327         and operator == (object a, object b);
30328
30329         (Binary.DoNumericPromotions): Indicate whether the numeric
30330         promotion was possible.
30331
30332         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
30333         Implement.  
30334
30335         Made the ArrayAccess implement interface IAssignMethod instead of
30336         IStackStore as the order in which arguments are passed reflects
30337         this.
30338
30339         * assign.cs: Instead of using expr.ExprClass to select the way of
30340         assinging, probe for the IStackStore/IAssignMethod interfaces.
30341
30342         * typemanager.cs: Load InitializeArray definition.
30343
30344         * rootcontext.cs (RootContext.MakeStaticData): Used to define
30345         static data that can be used to initialize arrays. 
30346
30347 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
30348
30349         * expression.cs: Handle operator== and operator!= for booleans.
30350
30351         (Conditioal.Reduce): Implement reducer for the ?: operator.
30352
30353         (Conditional.Resolve): Implement dead code elimination.
30354
30355         (Binary.Resolve): Catch string literals and return a new
30356         concatenated string.
30357
30358         (Unary.Reduce): Implement reduction of unary expressions.
30359
30360         * ecore.cs: Split out the expression core handling here.
30361
30362         (Expression.Reduce): New method used to perform constant folding
30363         and CSE.  This is needed to support constant-expressions. 
30364
30365         * statement.cs (Statement.EmitBoolExpression): Pass true and false
30366         targets, and optimize for !x.
30367
30368 2001-11-04  Ravi Pratap  <ravi@ximian.com>
30369
30370         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
30371         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
30372         set custom atttributes.
30373
30374         * literal.cs (Literal::GetValue): New abstract method to return the actual
30375         value of the literal, cast as an object.
30376
30377         (*Literal): Implement GetValue method.
30378
30379         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
30380         expressions to the arraylist but objects of type Argument.
30381
30382         * class.cs (TypeContainer::Emit): Emit our attributes too.
30383
30384         (Method::Emit, Constructor::Emit): Ditto.
30385
30386         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
30387         to be ignoring earlier.
30388
30389 2001-11-03  Ravi Pratap  <ravi@ximian.com>
30390
30391         * attribute.cs (AttributeSection::Define): Implement to do the business
30392         of constructing a CustomAttributeBuilder.
30393
30394         (Attribute): New trivial class. Increases readability of code.  
30395
30396         * cs-parser.jay : Update accordingly.
30397
30398         (positional_argument_list, named_argument_list, named_argument): New rules
30399
30400         (attribute_arguments): Use the above so that we are more correct.
30401
30402 2001-11-02  Ravi Pratap  <ravi@ximian.com>
30403
30404         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
30405         to perform all checks for a method with a params parameter.
30406
30407         (Invocation::OverloadResolve): Update to use the above method and therefore
30408         cope correctly with params method invocations.
30409
30410         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
30411         params too.
30412
30413         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
30414         constructors in our parent too because we can't afford to miss out on 
30415         protected ones ;-)
30416
30417         * attribute.cs (AttributeSection): New name for the class Attribute
30418
30419         Other trivial changes to improve readability.
30420
30421         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
30422         use the new class names.
30423
30424 2001-11-01  Ravi Pratap  <ravi@ximian.com>
30425
30426         * class.cs (Method::Define): Complete definition for params types too
30427
30428         (Indexer::Define): Ditto.
30429
30430         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
30431         Cope everywhere with a request for info about the array parameter.
30432
30433 2001-11-01  Ravi Pratap  <ravi@ximian.com>
30434
30435         * tree.cs (RecordNamespace): Fix up to check for the correct key.
30436
30437         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
30438         local_variable_type to extract the string corresponding to the type.
30439
30440         (local_variable_type): Fixup the action to use the new helper method.
30441
30442         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
30443         go.
30444
30445         * expression.cs : Clean out code which uses the above.
30446
30447 2001-10-31  Ravi Pratap  <ravi@ximian.com>
30448
30449         * typemanager.cs (RegisterMethod): Check if we already have an existing key
30450         and bale out if necessary by returning a false.
30451
30452         (RegisterProperty): Ditto.
30453
30454         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
30455         and print out appropriate error messages.
30456
30457         * interface.cs (everywhere): Ditto.
30458
30459         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
30460         location to constructor.
30461
30462         * class.cs (Property, Event, Indexer): Update accordingly.
30463
30464         * ../errors/cs111.cs : Added.
30465
30466         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
30467         of a method, as laid down by the spec.
30468
30469         (Invocation::OverloadResolve): Use the above method.
30470
30471 2001-10-31  Ravi Pratap  <ravi@ximian.com>
30472
30473         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
30474         now take a TypeContainer and a Parameters object.
30475
30476         (ParameterData): Modify return type of ParameterModifier method to be 
30477         Parameter.Modifier and not a string.
30478
30479         (ReflectionParameters, InternalParameters): Update accordingly.
30480
30481         * expression.cs (Argument::GetParameterModifier): Same here.
30482
30483         * support.cs (InternalParameters::ParameterType): Find a better way of determining
30484         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
30485         symbol in it at all so maybe this is only for now.
30486
30487 2001-10-30  Ravi Pratap  <ravi@ximian.com>
30488
30489         * support.cs (InternalParameters): Constructor now takes an extra argument 
30490         which is the actual Parameters class.
30491
30492         (ParameterDesc): Update to provide info on ref/out modifiers.
30493
30494         * class.cs (everywhere): Update call to InternalParameters to pass in
30495         the second argument too.
30496
30497         * support.cs (ParameterData): Add ParameterModifier, which is a method 
30498         to return the modifier info [ref/out etc]
30499
30500         (InternalParameters, ReflectionParameters): Implement the above.
30501
30502         * expression.cs (Argument::ParameterModifier): Similar function to return
30503         info about the argument's modifiers.
30504
30505         (Invocation::OverloadResolve): Update to take into account matching modifiers 
30506         too.
30507
30508         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
30509         a new SetFormalParameters object which we pass to InternalParameters.
30510
30511 2001-10-30  Ravi Pratap  <ravi@ximian.com>
30512
30513         * expression.cs (NewArray): Merge into the ArrayCreation class.
30514
30515 2001-10-29  Ravi Pratap  <ravi@ximian.com>
30516
30517         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
30518         NewUserdefinedArray into one as there wasn't much of a use in having
30519         two separate ones.
30520
30521         * expression.cs (Argument): Change field's name to ArgType from Type.
30522
30523         (Type): New readonly property which returns the proper type, taking into 
30524         account ref/out modifiers.
30525
30526         (everywhere): Adjust code accordingly for the above.
30527
30528         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
30529         whether we are emitting for a ref or out parameter.
30530
30531         * expression.cs (Argument::Emit): Use the above field to set the state.
30532
30533         (LocalVariableReference::Emit): Update to honour the flag and emit the
30534         right stuff.
30535
30536         * parameter.cs (Attributes): Set the correct flags for ref parameters.
30537
30538         * expression.cs (Argument::FullDesc): New function to provide a full desc.
30539
30540         * support.cs (ParameterData): Add method ParameterDesc to the interface.
30541
30542         (ReflectionParameters, InternalParameters): Implement the above method.
30543
30544         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
30545         reporting errors.
30546
30547         (Invocation::FullMethodDesc): Ditto. 
30548
30549 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
30550
30551         * cs-parser.jay: Add extra production for the second form of array
30552         creation. 
30553
30554         * expression.cs (ArrayCreation): Update to reflect the above
30555         change. 
30556
30557         * Small changes to prepare for Array initialization.
30558
30559 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
30560
30561         * typemanager.cs (ImplementsInterface): interface might be null;
30562         Deal with this problem;
30563
30564         Also, we do store negative hits on the cache (null values), so use
30565         this instead of calling t.GetInterfaces on the type everytime.
30566
30567 2001-10-28  Ravi Pratap  <ravi@ximian.com>
30568
30569         * typemanager.cs (IsBuiltinType): New method to help determine the same.
30570
30571         * expression.cs (New::DoResolve): Get rid of array creation code and instead
30572         split functionality out into different classes.
30573
30574         (New::FormArrayType): Move into NewBuiltinArray.
30575
30576         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
30577         quite useless.
30578
30579         (NewBuiltinArray): New class to handle creation of built-in arrays.
30580
30581         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
30582         account creation of one-dimensional arrays.
30583
30584         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
30585
30586         (NewUserdefinedArray::DoResolve): Implement.
30587
30588         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
30589
30590         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
30591         we maintain inside the TypeManager. This is necessary to perform lookups on the
30592         module builder.
30593
30594         (LookupType): Update to perform GetType on the module builders too.     
30595
30596         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
30597
30598         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
30599
30600 2001-10-23  Ravi Pratap  <ravi@ximian.com>
30601
30602         * expression.cs (New::DoResolve): Implement guts of array creation.
30603
30604         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
30605
30606 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
30607
30608         * expression.cs: Fix bug I introduced lsat night that broke
30609         Delegates. 
30610
30611         (Expression.Resolve): Report a 246 error (can not resolve name)
30612         if we find a SimpleName in the stream.
30613
30614         (Expression.ResolveLValue): Ditto.
30615
30616         (Expression.ResolveWithSimpleName): This function is a variant of
30617         ResolveName, this one allows SimpleNames to be returned without a
30618         warning.  The only consumer of SimpleNames is MemberAccess
30619
30620 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
30621
30622         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
30623         might arrive here.  I have my doubts that this is correct.
30624
30625         * statement.cs (Lock): Implement lock statement.
30626
30627         * cs-parser.jay: Small fixes to support `lock' and `using'
30628
30629         * cs-tokenizer.cs: Remove extra space
30630
30631         * driver.cs: New flag --checked, allows to turn on integer math
30632         checking. 
30633
30634         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
30635         Threading.Monitor.Exit 
30636
30637 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
30638
30639         * expression.cs (IndexerAccess::DoResolveLValue): Set the
30640         Expression Class to be IndexerAccess.
30641
30642         Notice that Indexer::DoResolve sets the eclass to Value.
30643
30644 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
30645
30646         * class.cs (TypeContainer::Emit): Emit code for indexers.
30647
30648         * assign.cs (IAssignMethod): New interface implemented by Indexers
30649         and Properties for handling assignment.
30650
30651         (Assign::Emit): Simplify and reuse code. 
30652
30653         * expression.cs (IndexerAccess, PropertyExpr): Implement
30654         IAssignMethod, clean up old code. 
30655
30656 2001-10-22  Ravi Pratap  <ravi@ximian.com>
30657
30658         * typemanager.cs (ImplementsInterface): New method to determine if a type
30659         implements a given interface. Provides a nice cache too.
30660
30661         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
30662         method.
30663
30664         (ConvertReferenceExplicit): Ditto.
30665
30666         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
30667         various methods, with correct names etc.
30668
30669         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
30670         Operator.UnaryNegation.
30671
30672         * cs-parser.jay (operator_declarator): Be a little clever in the case where
30673         we have a unary plus or minus operator.
30674
30675         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
30676         UnaryMinus.
30677
30678         * everywhere : update accordingly.
30679
30680         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
30681         respectively.
30682
30683         * class.cs (Method::Define): For the case where we are implementing a method
30684         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
30685         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
30686
30687 2001-10-21  Ravi Pratap  <ravi@ximian.com>
30688
30689         * interface.cs (FindMembers): Implement to work around S.R.E
30690         lameness.
30691
30692         * typemanager.cs (IsInterfaceType): Implement.
30693
30694         (FindMembers): Update to handle interface types too.
30695
30696         * expression.cs (ImplicitReferenceConversion): Re-write bits which
30697         use IsAssignableFrom as that is not correct - it doesn't work.
30698
30699         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
30700         and accordingly override EmitStatement.
30701
30702         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
30703         using the correct logic :-)
30704
30705 2001-10-19  Ravi Pratap  <ravi@ximian.com>
30706
30707         * ../errors/cs-11.cs : Add to demonstrate error -11 
30708
30709 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
30710
30711         * assign.cs (Assign::Resolve): Resolve right hand side first, and
30712         then pass this as a hint to ResolveLValue.
30713
30714         * expression.cs (FieldExpr): Add Location information
30715
30716         (FieldExpr::LValueResolve): Report assignment to readonly
30717         variable. 
30718
30719         (Expression::ExprClassFromMemberInfo): Pass location information.
30720
30721         (Expression::ResolveLValue): Add new method that resolves an
30722         LValue. 
30723
30724         (Expression::DoResolveLValue): Default invocation calls
30725         DoResolve. 
30726
30727         (Indexers): New class used to keep track of indexers in a given
30728         Type. 
30729
30730         (IStackStore): Renamed from LValue, as it did not really describe
30731         what this did.  Also ResolveLValue is gone from this interface and
30732         now is part of Expression.
30733
30734         (ElementAccess): Depending on the element access type
30735
30736         * typemanager.cs: Add `indexer_name_type' as a Core type
30737         (System.Runtime.CompilerServices.IndexerNameAttribute)
30738
30739         * statement.cs (Goto): Take a location.
30740
30741 2001-10-18  Ravi Pratap  <ravi@ximian.com>
30742
30743         * delegate.cs (Delegate::VerifyDelegate): New method to verify
30744         if two delegates are compatible.
30745
30746         (NewDelegate::DoResolve): Update to take care of the case when
30747         we instantiate a delegate from another delegate.
30748
30749         * typemanager.cs (FindMembers): Don't even try to look up members
30750         of Delegate types for now.
30751
30752 2001-10-18  Ravi Pratap  <ravi@ximian.com>
30753
30754         * delegate.cs (NewDelegate): New class to take care of delegate
30755         instantiation.
30756
30757         * expression.cs (New): Split the delegate related code out into 
30758         the NewDelegate class.
30759
30760         * delegate.cs (DelegateInvocation): New class to handle delegate 
30761         invocation.
30762
30763         * expression.cs (Invocation): Split out delegate related code into
30764         the DelegateInvocation class.
30765
30766 2001-10-17  Ravi Pratap  <ravi@ximian.com>
30767
30768         * expression.cs (New::DoResolve): Implement delegate creation fully
30769         and according to the spec.
30770
30771         (New::DoEmit): Update to handle delegates differently.
30772
30773         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
30774         because of which we were printing out arguments in reverse order !
30775
30776         * delegate.cs (VerifyMethod): Implement to check if the given method
30777         matches the delegate.
30778
30779         (FullDelegateDesc): Implement.
30780
30781         (VerifyApplicability): Implement.
30782
30783         * expression.cs (Invocation::DoResolve): Update to accordingly handle
30784         delegate invocations too.
30785
30786         (Invocation::Emit): Ditto.
30787
30788         * ../errors/cs1593.cs : Added.
30789
30790         * ../errors/cs1594.cs : Added.
30791
30792         * delegate.cs (InstanceExpression, TargetMethod): New properties.
30793
30794 2001-10-16  Ravi Pratap  <ravi@ximian.com>
30795
30796         * typemanager.cs (intptr_type): Core type for System.IntPtr
30797
30798         (InitCoreTypes): Update for the same.
30799
30800         (iasyncresult_type, asynccallback_type): Ditto.
30801
30802         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
30803         correct.
30804
30805         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
30806         too.
30807
30808         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
30809         the builders for the 4 members of a delegate type :-)
30810
30811         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
30812         type.
30813
30814         * expression.cs (New::DoResolve): Implement guts for delegate creation.
30815
30816         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
30817
30818 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
30819
30820         * statement.cs (Break::Emit): Implement.   
30821         (Continue::Emit): Implement.
30822
30823         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
30824         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
30825         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
30826         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
30827         end loop
30828
30829         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
30830         properties that track the label for the current loop (begin of the
30831         loop and end of the loop).
30832
30833 2001-10-15  Ravi Pratap  <ravi@ximian.com>
30834
30835         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
30836         use of emitting anything at all.
30837
30838         * class.cs, rootcontext.cs : Get rid of calls to the same.
30839
30840         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
30841
30842         (Populate): Define the constructor correctly and set the implementation
30843         attributes.
30844
30845         * typemanager.cs (delegate_types): New hashtable to hold delegates that
30846         have been defined.
30847
30848         (AddDelegateType): Implement.
30849
30850         (IsDelegateType): Implement helper method.
30851
30852         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
30853
30854         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
30855         and accordingly handle it.
30856
30857         * delegate.cs (Populate): Take TypeContainer argument.
30858         Implement bits to define the Invoke method. However, I still haven't figured out
30859         how to take care of the native int bit :-(
30860
30861         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
30862         Qualify the name of the delegate, not its return type !
30863
30864         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
30865         conversion.
30866
30867         (StandardConversionExists): Checking for array types turns out to be recursive.
30868
30869         (ConvertReferenceExplicit): Implement array conversion.
30870
30871         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
30872
30873 2001-10-12  Ravi Pratap  <ravi@ximian.com>
30874
30875         * cs-parser.jay (delegate_declaration): Store the fully qualified
30876         name as it is a type declaration.
30877
30878         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
30879         readonly.
30880
30881         (DefineDelegate): Renamed from Define. Does the same thing essentially,
30882         as TypeContainer::DefineType.
30883
30884         (Populate): Method in which all the definition of the various methods (Invoke)
30885         etc is done.
30886
30887         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
30888         see.
30889
30890         (CloseDelegate): Finally creates the delegate.
30891
30892         * class.cs (TypeContainer::DefineType): Update to define delegates.
30893         (Populate, Emit and CloseType): Do the same thing here too.
30894
30895         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
30896         delegates in all these operations.
30897
30898 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
30899
30900         * expression.cs: LocalTemporary: a new expression used to
30901         reference a temporary that has been created.
30902
30903         * assign.cs: Handle PropertyAccess back here, so that we can
30904         provide the proper semantic access to properties.
30905
30906         * expression.cs (Expression::ConvertReferenceExplicit): Implement
30907         a few more explicit conversions. 
30908
30909         * modifiers.cs: `NEW' modifier maps to HideBySig.
30910
30911         * expression.cs (PropertyExpr): Make this into an
30912         ExpressionStatement, and support the EmitStatement code path. 
30913
30914         Perform get/set error checking, clean up the interface.
30915
30916         * assign.cs: recognize PropertyExprs as targets, and if so, turn
30917         them into toplevel access objects.
30918
30919 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
30920
30921         * expression.cs: PropertyExpr::PropertyExpr: use work around the
30922         SRE.
30923
30924         * typemanager.cs: Keep track here of our PropertyBuilders again to
30925         work around lameness in SRE.
30926
30927 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
30928
30929         * expression.cs (LValue::LValueResolve): New method in the
30930         interface, used to perform a second resolution pass for LValues. 
30931
30932         (This::DoResolve): Catch the use of this in static methods.
30933
30934         (This::LValueResolve): Implement.
30935
30936         (This::Store): Remove warning, assigning to `this' in structures
30937         is 
30938
30939         (Invocation::Emit): Deal with invocation of
30940         methods on value types.  We need to pass the address to structure
30941         methods rather than the object itself.  (The equivalent code to
30942         emit "this" for structures leaves the entire structure on the
30943         stack instead of a pointer to it). 
30944
30945         (ParameterReference::DoResolve): Compute the real index for the
30946         argument based on whether the method takes or not a `this' pointer
30947         (ie, the method is static).
30948
30949         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
30950         value types returned from functions when we need to invoke a
30951         method on the sturcture.
30952
30953
30954 2001-10-11  Ravi Pratap  <ravi@ximian.com>
30955
30956         * class.cs (TypeContainer::DefineType): Method to actually do the business of
30957         defining the type in the Modulebuilder or Typebuilder. This is to take
30958         care of nested types which need to be defined on the TypeBuilder using
30959         DefineNestedMethod.
30960
30961         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
30962         methods in RootContext, only ported to be part of TypeContainer.
30963
30964         (TypeContainer::GetInterfaceOrClass): Ditto.
30965
30966         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
30967
30968         * interface.cs (Interface::DefineInterface): New method. Does exactly
30969         what RootContext.CreateInterface did earlier, only it takes care of nested types 
30970         too.
30971
30972         (Interface::GetInterfaces): Move from RootContext here and port.
30973
30974         (Interface::GetInterfaceByName): Same here.
30975
30976         * rootcontext.cs (ResolveTree): Re-write.
30977
30978         (PopulateTypes): Re-write.
30979
30980         * class.cs (TypeContainer::Populate): Populate nested types too.
30981         (TypeContainer::Emit): Emit nested members too.
30982
30983         * typemanager.cs (AddUserType): Do not make use of the FullName property,
30984         instead just use the name argument passed in as it is already fully
30985         qualified.
30986
30987         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
30988         to TypeContainer mapping to see if a type is user-defined.
30989
30990         * class.cs (TypeContainer::CloseType): Implement. 
30991
30992         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
30993         the default constructor.
30994
30995         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
30996         twice.
30997
30998         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
30999
31000         * interface.cs (CloseType): Create the type here.
31001
31002         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
31003         the hierarchy.
31004
31005         Remove all the methods which are now in TypeContainer.
31006
31007 2001-10-10  Ravi Pratap  <ravi@ximian.com>
31008
31009         * delegate.cs (Define): Re-write bits to define the delegate
31010         correctly.
31011
31012 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
31013
31014         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
31015
31016         * expression.cs (ImplicitReferenceConversion): handle null as well
31017         as a source to convert to any reference type.
31018
31019         * statement.cs (Return): Perform any implicit conversions to
31020         expected return type.  
31021
31022         Validate use of return statement.  
31023
31024         * codegen.cs (EmitContext): Pass the expected return type here.
31025
31026         * class.cs (Method, Constructor, Property): Pass expected return
31027         type to EmitContext.
31028
31029 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
31030
31031         * expression.cs: Make DoResolve take an EmitContext instead of a
31032         TypeContainer.
31033
31034         Replaced `l' and `location' for `loc', for consistency.
31035
31036         (Error, Warning): Remove unneeded Tc argument.
31037
31038         * assign.cs, literal.cs, constant.cs: Update to new calling
31039         convention. 
31040
31041         * codegen.cs: EmitContext now contains a flag indicating whether
31042         code is being generated in a static method or not.
31043
31044         * cs-parser.jay: DecomposeQI, new function that replaces the old
31045         QualifiedIdentifier.  Now we always decompose the assembled
31046         strings from qualified_identifier productions into a group of
31047         memberaccesses.
31048
31049 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
31050
31051         * rootcontext.cs: Deal with field-less struct types correctly now
31052         by passing the size option to Define Type.
31053
31054         * class.cs: Removed hack that created one static field. 
31055
31056 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
31057
31058         * statement.cs: Moved most of the code generation here. 
31059
31060 2001-10-09  Ravi Pratap  <ravi@ximian.com>
31061
31062         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
31063         seem very right.
31064
31065         (ElementAccess): Remove useless bits for now - keep checks as the spec
31066         says.
31067
31068 2001-10-08  Ravi Pratap  <ravi@ximian.com>
31069
31070         * expression.cs (ElementAccess::DoResolve): Remove my crap code
31071         and start performing checks according to the spec.
31072
31073 2001-10-07  Ravi Pratap  <ravi@ximian.com>
31074
31075         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
31076         rank_specifiers instead.
31077
31078         (rank_specifiers): Change the order in which the rank specifiers are stored
31079
31080         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
31081
31082         * expression.cs (ElementAccess): Implement the LValue interface too.
31083
31084 2001-10-06  Ravi Pratap  <ravi@ximian.com>
31085
31086         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
31087         except that user defined conversions are not included.
31088
31089         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
31090         perform the conversion of the return type, if necessary.
31091
31092         (New::DoResolve): Check whether we are creating an array or an object
31093         and accordingly do the needful.
31094
31095         (New::Emit): Same here.
31096
31097         (New::DoResolve): Implement guts of array creation.
31098
31099         (New::FormLookupType): Helper function.
31100
31101 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
31102
31103         * codegen.cs: Removed most of the code generation here, and move the
31104         corresponding code generation bits to the statement classes. 
31105
31106         Added support for try/catch/finalize and throw.
31107
31108         * cs-parser.jay: Added support for try/catch/finalize.
31109
31110         * class.cs: Catch static methods having the flags override,
31111         virtual or abstract.
31112
31113         * expression.cs (UserCast): This user cast was not really doing
31114         what it was supposed to do.  Which is to be born in fully resolved
31115         state.  Parts of the resolution were being performed at Emit time! 
31116
31117         Fixed this code.
31118
31119 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
31120
31121         * expression.cs: Implicity convert the result from UserCast.
31122
31123 2001-10-05  Ravi Pratap  <ravi@ximian.com>
31124
31125         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
31126         prevented it from working correctly. 
31127
31128         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
31129         merely ConvertImplicit.
31130
31131 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
31132
31133         * typemanager.cs: Make the LookupTypeContainer function static,
31134         and not per-instance.  
31135
31136         * class.cs: Make static FindMembers (the one that takes a Type
31137         argument). 
31138
31139         * codegen.cs: Add EmitForeach here.
31140
31141         * cs-parser.jay: Make foreach a toplevel object instead of the
31142         inline expansion, as we need to perform semantic analysis on it. 
31143
31144 2001-10-05  Ravi Pratap  <ravi@ximian.com>
31145
31146         * expression.cs (Expression::ImplicitUserConversion): Rename to
31147         UserDefinedConversion.
31148
31149         (Expression::UserDefinedConversion): Take an extra argument specifying 
31150         whether we look for explicit user conversions too.
31151
31152         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
31153
31154         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
31155
31156         (ExplicitUserConversion): Make it a call to UserDefinedConversion
31157         with the appropriate arguments.
31158
31159         * cs-parser.jay (cast_expression): Record location too.
31160
31161         * expression.cs (Cast): Record location info.
31162
31163         (Expression::ConvertExplicit): Take location argument.
31164
31165         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
31166         to determine if we are doing explicit conversions.
31167
31168         (UserCast::Emit): Update accordingly.
31169
31170         (Expression::ConvertExplicit): Report an error if everything fails.
31171
31172         * ../errors/cs0030.cs : Add.
31173
31174 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
31175
31176         * modifiers.cs: If the ABSTRACT keyword is present, also set the
31177         virtual and newslot bits. 
31178
31179         * class.cs (TypeContainer::RegisterRequiredImplementations):
31180         Record methods we need.
31181
31182         (TypeContainer::MakeKey): Helper function to make keys for
31183         MethodBases, since the Methodbase key is useless.
31184
31185         (TypeContainer::Populate): Call RegisterRequiredImplementations
31186         before defining the methods.   
31187
31188         Create a mapping for method_builders_to_methods ahead of time
31189         instead of inside a tight loop.
31190
31191         (::RequireMethods):  Accept an object as the data to set into the
31192         hashtable so we can report interface vs abstract method mismatch.
31193
31194 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
31195
31196         * report.cs: Make all of it static.
31197
31198         * rootcontext.cs: Drop object_type and value_type computations, as
31199         we have those in the TypeManager anyways.
31200
31201         Drop report instance variable too, now it is a global.
31202
31203         * driver.cs: Use try/catch on command line handling.
31204
31205         Add --probe option to debug the error reporting system with a test
31206         suite. 
31207
31208         * report.cs: Add support for exiting program when a probe
31209         condition is reached.
31210
31211 2001-10-03  Ravi Pratap  <ravi@ximian.com>
31212
31213         * expression.cs (Binary::DoNumericPromotions): Fix the case when
31214         we do a forcible conversion regardless of type, to check if 
31215         ForceConversion returns a null.
31216
31217         (Binary::error19): Use location to report error.
31218
31219         (Unary::error23): Use location here too.
31220
31221         * ../errors/cs0019.cs : Check in.
31222
31223         * ../errors/cs0023.cs : Check in.
31224
31225         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
31226         case of a non-null MethodInfo object with a length of 0 !
31227
31228         (Binary::ResolveOperator): Flag error if overload resolution fails to find
31229         an applicable member - according to the spec :-)
31230         Also fix logic to find members in base types.
31231
31232         (Unary::ResolveOperator): Same here.
31233
31234         (Unary::report23): Change name to error23 and make first argument a TypeContainer
31235         as I was getting thoroughly confused between this and error19 :-)
31236
31237         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
31238         (::FindMostEncompassedType): Implement.
31239         (::FindMostEncompassingType): Implement.
31240         (::StandardConversionExists): Implement.
31241
31242         (UserImplicitCast): Re-vamp. We now need info about most specific
31243         source and target types so that we can do the necessary conversions.
31244
31245         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
31246         mathematical union with no duplicates.
31247
31248 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
31249
31250         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
31251         in order from base classes to child classes, so that we can in
31252         child classes look up in our parent for method names and
31253         attributes (required for handling abstract, virtual, new, override
31254         constructs: we need to instrospect our base class, and if we dont
31255         populate the classes in order, the introspection might be
31256         incorrect.  For example, a method could query its parent before
31257         the parent has any methods and would determine that the parent has
31258         no abstract methods (while it could have had them)).
31259
31260         (RootContext::CreateType): Record the order in which we define the
31261         classes.
31262
31263 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
31264
31265         * class.cs (TypeContainer::Populate): Also method definitions can
31266         fail now, keep track of this.
31267
31268         (TypeContainer::FindMembers): Implement support for
31269         DeclaredOnly/noDeclaredOnly flag.
31270
31271         (Constructor::Emit) Return the ConstructorBuilder.
31272
31273         (Method::Emit) Return the MethodBuilder. 
31274         Check for abstract or virtual methods to be public.
31275
31276         * rootcontext.cs (RootContext::CreateType): Register all the
31277         abstract methods required for the class to be complete and the
31278         interface methods that must be implemented. 
31279
31280         * cs-parser.jay: Report error 501 (method requires body if it is
31281         not marked abstract or extern).
31282
31283         * expression.cs (TypeOf::Emit): Implement.
31284
31285         * typemanager.cs: runtime_handle_type, new global type.
31286
31287         * class.cs (Property::Emit): Generate code for properties.
31288
31289 2001-10-02  Ravi Pratap  <ravi@ximian.com>
31290
31291         * expression.cs (Unary::ResolveOperator): Find operators on base type
31292         too - we now conform exactly to the spec.
31293
31294         (Binary::ResolveOperator): Same here.
31295
31296         * class.cs (Operator::Define): Fix minor quirk in the tests.
31297
31298         * ../errors/cs0215.cs : Added.
31299
31300         * ../errors/cs0556.cs : Added.
31301
31302         * ../errors/cs0555.cs : Added.
31303
31304 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
31305
31306         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
31307         single integer which is really efficient
31308
31309 2001-10-01  Ravi Pratap  <ravi@ximian.com>
31310
31311         *  expression.cs (Expression::ImplicitUserConversion): Use location
31312         even in the case when we are examining True operators.
31313  
31314         * class.cs (Operator::Define): Perform extensive checks to conform
31315         with the rules for operator overloading in the spec.
31316
31317         * expression.cs (Expression::ImplicitReferenceConversion): Implement
31318         some of the other conversions mentioned in the spec.
31319
31320         * typemanager.cs (array_type): New static member for the System.Array built-in
31321         type.
31322
31323         (cloneable_interface): For System.ICloneable interface.
31324
31325         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
31326         we start resolving the tree and populating types.
31327
31328         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
31329  
31330 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
31331
31332         * expression.cs (Expression::ExprClassFromMemberInfo,
31333         Expression::Literalize): Create literal expressions from
31334         FieldInfos which are literals.
31335
31336         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
31337         type casts, because they were wrong.  The test suite in tests
31338         caught these ones.
31339
31340         (ImplicitNumericConversion): ushort to ulong requires a widening
31341         cast. 
31342
31343         Int32 constant to long requires widening cast as well.
31344
31345         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
31346         for integers because the type on the stack is not i4.
31347
31348 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
31349
31350         * expression.cs (report118): require location argument. 
31351
31352         * parameter.cs: Do not dereference potential null value.
31353
31354         * class.cs: Catch methods that lack the `new' keyword when
31355         overriding a name.  Report warnings when `new' is used without
31356         anything being there to override.
31357
31358         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
31359
31360         * class.cs: Only add constructor to hashtable if it is non-null
31361         (as now constructors can fail on define).
31362
31363         (TypeManager, Class, Struct): Take location arguments.
31364
31365         Catch field instance initialization in structs as errors.
31366
31367         accepting_filter: a new filter for FindMembers that is static so
31368         that we dont create an instance per invocation.
31369
31370         (Constructor::Define): Catch errors where a struct constructor is
31371         parameterless 
31372
31373         * cs-parser.jay: Pass location information for various new
31374         constructs. 
31375
31376         * delegate.cs (Delegate): take a location argument.
31377
31378         * driver.cs: Do not call EmitCode if there were problesm in the
31379         Definition of the types, as many Builders wont be there. 
31380
31381         * decl.cs (Decl::Decl): Require a location argument.
31382
31383         * cs-tokenizer.cs: Handle properly hex constants that can not fit
31384         into integers, and find the most appropiate integer for it.
31385
31386         * literal.cs: Implement ULongLiteral.
31387
31388         * rootcontext.cs: Provide better information about the location of
31389         failure when CreateType fails.
31390
31391 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
31392
31393         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
31394         as well.
31395
31396         * expression.cs (Binary::CheckShiftArguments): Add missing type
31397         computation.
31398         (Binary::ResolveOperator): Add type to the logical and and logical
31399         or, Bitwise And/Or and Exclusive Or code paths, it was missing
31400         before.
31401
31402         (Binary::DoNumericPromotions): In the case where either argument
31403         is ulong (and most signed types combined with ulong cause an
31404         error) perform implicit integer constant conversions as well.
31405
31406 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
31407
31408         * expression.cs (UserImplicitCast): Method should always be
31409         non-null. 
31410         (Invocation::BetterConversion): Simplified test for IntLiteral.
31411
31412         (Expression::ImplicitNumericConversion): Split this routine out.
31413         Put the code that performs implicit constant integer conversions
31414         here. 
31415
31416         (Expression::Resolve): Become a wrapper around DoResolve so we can
31417         check eclass and type being set after resolve.
31418
31419         (Invocation::Badness): Remove this dead function
31420
31421         (Binary::ResolveOperator): Do not compute the expensive argumnets
31422         unless we have a union for it.
31423
31424         (Probe::Emit): Is needs to do an isinst and then
31425         compare against null.
31426
31427         (::CanConvert): Added Location argument.  If the Location argument
31428         is null (Location.Null), then we do not report errors.  This is
31429         used by the `probe' mechanism of the Explicit conversion.  We do
31430         not want to generate an error for something that the user
31431         explicitly requested to be casted.  But the pipeline for an
31432         explicit cast first tests for potential implicit casts.
31433
31434         So for now, if the Location is null, it means `Probe only' to
31435         avoid adding another argument.   Might have to revise this
31436         strategy later.
31437
31438         (ClassCast): New class used to type cast objects into arbitrary
31439         classes (used in Explicit Reference Conversions).
31440
31441         Implement `as' as well.
31442
31443         Reverted all the patches from Ravi below: they were broken:
31444
31445                 * The use of `level' as a mechanism to stop recursive
31446                   invocations is wrong.  That was there just to catch the
31447                   bug with a strack trace but not as a way of addressing
31448                   the problem.
31449
31450                   To fix the problem we have to *understand* what is going
31451                   on and the interactions and come up with a plan, not
31452                   just get things going.
31453
31454                 * The use of the type conversion cache that I proposed
31455                   last night had an open topic: How does this work across
31456                   protection domains.  A user defined conversion might not
31457                   be public in the location where we are applying the
31458                   conversion, a different conversion might be selected
31459                   (ie, private A->B (better) but public B->A (worse),
31460                   inside A, A->B applies, but outside it, B->A will
31461                   apply).
31462
31463                 * On top of that (ie, even if the above is solved),
31464                   conversions in a cache need to be abstract.  Ie, `To
31465                   convert from an Int to a Short use an OpcodeCast', not
31466                   `To convert from an Int to a Short use the OpcodeCast on
31467                   the variable 5' (which is what this patch was doing).
31468
31469 2001-09-28  Ravi Pratap  <ravi@ximian.com>
31470
31471         * expression.cs (Invocation::ConversionExists): Re-write to use
31472         the conversion cache
31473
31474         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
31475         cache all conversions done, not just user-defined ones.
31476
31477         (Invocation::BetterConversion): The real culprit. Use ConversionExists
31478         to determine if a conversion exists instead of acutually trying to 
31479         perform the conversion. It's faster too.
31480
31481         (Expression::ConvertExplicit): Modify to use ConversionExists to check
31482         and only then attempt the implicit conversion.
31483
31484 2001-09-28  Ravi Pratap  <ravi@ximian.com>
31485
31486         * expression.cs (ConvertImplicit): Use a cache for conversions
31487         already found. Check level of recursion and bail out if necessary.
31488
31489 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
31490
31491         * typemanager.cs (string_concat_string_string, string_concat_object_object):
31492         Export standard methods that we expect for string operations.
31493
31494         * statement.cs (Block::UsageWarning): Track usage of variables and
31495         report the errors for not used variables.
31496
31497         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
31498         operator. 
31499
31500 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
31501
31502         * codegen.cs: remove unnneded code 
31503
31504         * expression.cs: Removed BuiltinTypeAccess class
31505
31506         Fix the order in which implicit conversions are
31507         done.  
31508
31509         The previous fixed dropped support for boxed conversions (adding a
31510         test to the test suite now)
31511
31512         (UserImplicitCast::CanConvert): Remove test for source being null,
31513         that code is broken.  We should not feed a null to begin with, if
31514         we do, then we should track the bug where the problem originates
31515         and not try to cover it up here.
31516
31517         Return a resolved expression of type UserImplicitCast on success
31518         rather than true/false.  Ravi: this is what I was talking about,
31519         the pattern is to use a static method as a "constructor" for
31520         objects. 
31521
31522         Also, do not create arguments until the very last minute,
31523         otherwise we always create the arguments even for lookups that
31524         will never be performed. 
31525
31526         (UserImplicitCast::Resolve): Eliminate, objects of type
31527         UserImplicitCast are born in a fully resolved state. 
31528
31529         * typemanager.cs (InitCoreTypes): Init also value_type
31530         (System.ValueType). 
31531
31532         * expression.cs (Cast::Resolve): First resolve the child expression.
31533
31534         (LValue): Add new method AddressOf to be used by
31535         the `&' operator.  
31536
31537         Change the argument of Store to take an EmitContext instead of an
31538         ILGenerator, because things like FieldExpr need to be able to call
31539         their children expression to generate the instance code. 
31540
31541         (Expression::Error, Expression::Warning): Sugar functions for
31542         reporting errors.
31543
31544         (Expression::MemberLookup): Accept a TypeContainer instead of a
31545         Report as the first argument.
31546
31547         (Expression::ResolvePrimary): Killed.  I still want to improve
31548         this as currently the code is just not right.
31549
31550         (Expression::ResolveMemberAccess): Simplify, but it is still
31551         wrong. 
31552
31553         (Unary::Resolve): Catch errors in AddressOf operators.
31554
31555         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
31556         index to a byte for the short-version, or the compiler will choose
31557         the wrong Emit call, which generates the wrong data.
31558
31559         (ParameterReference::Emit, ::Store): same.
31560
31561         (FieldExpr::AddressOf): Implement.
31562
31563         * typemanager.cs: TypeManager: made public variable instead of
31564         property.
31565
31566         * driver.cs: document --fatal.
31567
31568         * report.cs (ErrorMessage, WarningMessage): new names for the old
31569         Error and Warning classes.
31570
31571         * cs-parser.jay (member_access): Turn built-in access to types
31572         into a normal simplename
31573
31574 2001-09-27  Ravi Pratap  <ravi@ximian.com>
31575
31576         * expression.cs (Invocation::BetterConversion): Fix to cope
31577         with q being null, since this was introducing a bug.
31578
31579         * expression.cs (ConvertImplicit): Do built-in conversions first.
31580
31581 2001-09-27  Ravi Pratap  <ravi@ximian.com>
31582
31583         * expression.cs (UserImplicitCast::Resolve): Fix bug.
31584
31585 2001-09-27  Ravi Pratap  <ravi@ximian.com>
31586
31587         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
31588         I had introduced long ago (what's new ?).
31589
31590         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
31591         the work of all the checking. 
31592         (ConvertImplicit): Call CanConvert and only then create object if necessary.
31593         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
31594
31595         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
31596         that is the right way. 
31597
31598         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
31599         overloading resolution. Use everywhere instead of cutting and pasting code.
31600
31601         (Binary::ResolveOperator): Use MakeUnionSet.
31602
31603         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
31604         we have to convert to bool types. Not complete yet.
31605
31606 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
31607
31608         * typemanager.cs (TypeManager::CSharpName): support ushort.
31609
31610         * expression.cs (Expression::TryImplicitIntConversion): Attempts
31611         to provide an expression that performsn an implicit constant int
31612         conversion (section 6.1.6).
31613         (Expression::ConvertImplicitRequired): Reworked to include
31614         implicit constant expression conversions.
31615
31616         (Expression::ConvertNumericExplicit): Finished.
31617
31618         (Invocation::Emit): If InstanceExpression is null, then it means
31619         that we perform a call on this.
31620
31621 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
31622
31623         * expression.cs (Unary::Emit): Remove some dead code.
31624         (Probe): Implement Resolve and Emit for `is'.
31625         (Expression::ConvertImplicitRequired): Attempt to do constant
31626         expression conversions here.  Maybe should be moved to
31627         ConvertImplicit, but I am not sure.
31628         (Expression::ImplicitLongConstantConversionPossible,
31629         Expression::ImplicitIntConstantConversionPossible): New functions
31630         that tell whether is it possible to apply an implicit constant
31631         expression conversion.
31632
31633         (ConvertNumericExplicit): Started work on explicit numeric
31634         conversions.
31635
31636         * cs-parser.jay: Update operator constants.
31637
31638         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
31639         (Parameters::GetSignature): Hook up VerifyArgs here.
31640         (Parameters::VerifyArgs): Verifies that no two arguments have the
31641         same name. 
31642
31643         * class.cs (Operator): Update the operator names to reflect the
31644         ones that the spec expects (as we are just stringizing the
31645         operator names).
31646
31647         * expression.cs (Unary::ResolveOperator): Fix bug: Use
31648         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
31649         previous usage did only work for our methods.
31650         (Expression::ConvertImplicit): Handle decimal implicit numeric
31651         conversions as well.
31652         (Expression::InternalTypeConstructor): Used to invoke constructors
31653         on internal types for default promotions.
31654
31655         (Unary::Emit): Implement special handling for the pre/post
31656         increment/decrement for overloaded operators, as they need to have
31657         the same semantics as the other operators.
31658
31659         (Binary::ResolveOperator): ditto.
31660         (Invocation::ConversionExists): ditto.
31661         (UserImplicitCast::Resolve): ditto.
31662
31663 2001-09-26  Ravi Pratap  <ravi@ximian.com>
31664
31665         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
31666         operator, return after emitting body. Regression tests pass again !
31667
31668         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
31669         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
31670         (Invocation::OverloadResolve): Ditto.
31671         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
31672
31673         * everywhere : update calls to the above methods accordingly.
31674
31675 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
31676
31677         * assign.cs (Assign): Make it inherit from ExpressionStatement.
31678
31679         * expression.cs (ExpressionStatement): New base class used for
31680         expressions that can appear in statements, so that we can provide
31681         an alternate path to generate expression that do not leave a value
31682         on the stack.
31683
31684         (Expression::Emit, and all the derivatives): We no longer return
31685         whether a value is left on the stack or not.  Every expression
31686         after being emitted leaves a single value on the stack.
31687
31688         * codegen.cs (EmitContext::EmitStatementExpression): Use the
31689         facilties of ExpressionStatement if possible.
31690
31691         * cs-parser.jay: Update statement_expression.
31692
31693 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
31694
31695         * driver.cs: Change the wording of message
31696
31697 2001-09-25  Ravi Pratap  <ravi@ximian.com>
31698
31699         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
31700         the type of the expression to the return type of the method if
31701         we have an overloaded operator match ! The regression tests pass again !
31702         (Unary::ResolveOperator): Ditto.
31703
31704         * expression.cs (Invocation::ConversionExists): Correct the member lookup
31705         to find "op_Implicit", not "implicit" ;-)
31706         (UserImplicitCast): New class to take care of user-defined implicit conversions.
31707         (ConvertImplicit, ForceConversion): Take TypeContainer argument
31708
31709         * everywhere : Correct calls to the above accordingly.
31710
31711         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
31712         (ConvertImplicit): Do user-defined conversion if it exists.
31713
31714 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
31715
31716         * assign.cs: track location.
31717         (Resolve): Use implicit conversions on assignment.
31718
31719         * literal.cs: Oops.  Not good, Emit of short access values should
31720         pass (Bytes) or the wrong argument will be selected.
31721
31722         * expression.cs (Unary::Emit): Emit code for -expr.
31723
31724         (Unary::ResolveOperator): Handle `Substract' for non-constants
31725         (substract from zero from the non-constants).
31726         Deal with Doubles as well. 
31727
31728         (Expression::ConvertImplicitRequired): New routine that reports an
31729         error if no implicit conversion exists. 
31730
31731         (Invocation::OverloadResolve): Store the converted implicit
31732         expressions if we make them
31733
31734 2001-09-24  Ravi Pratap  <ravi@ximian.com>
31735
31736         * class.cs (ConstructorInitializer): Take a Location argument.
31737         (ConstructorBaseInitializer): Same here.
31738         (ConstructorThisInitializer): Same here.
31739
31740         * cs-parser.jay : Update all calls accordingly.
31741
31742         * expression.cs (Unary, Binary, New): Take location argument.
31743         Update accordingly everywhere.
31744
31745         * cs-parser.jay : Update all calls to the above to take a location
31746         argument.
31747
31748         * class.cs : Ditto.
31749
31750 2001-09-24  Ravi Pratap  <ravi@ximian.com>
31751
31752         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
31753         (Invocation::BetterConversion): Same here
31754         (Invocation::ConversionExists): Ditto.
31755
31756         (Invocation::ConversionExists): Implement.
31757
31758 2001-09-22  Ravi Pratap  <ravi@ximian.com>
31759
31760         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
31761         Also take an additional TypeContainer argument.
31762
31763         * All over : Pass in TypeContainer as argument to OverloadResolve.
31764
31765         * typemanager.cs (CSharpName): Update to check for the string type and return
31766         that too.
31767
31768         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
31769         a given method.
31770
31771 2001-09-21  Ravi Pratap  <ravi@ximian.com>
31772
31773         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
31774         (Invocation::BetterFunction): Implement.
31775         (Invocation::BetterConversion): Implement.
31776         (Invocation::ConversionExists): Skeleton, no implementation yet.
31777
31778         Okay, things work fine !
31779
31780 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
31781
31782         * typemanager.cs: declare and load enum_type, delegate_type and
31783         void_type. 
31784
31785         * expression.cs (Expression::Emit): Now emit returns a value that
31786         tells whether a value is left on the stack or not.  This strategy
31787         might be reveted tomorrow with a mechanism that would address
31788         multiple assignments.
31789         (Expression::report118): Utility routine to report mismatches on
31790         the ExprClass.
31791
31792         (Unary::Report23): Report impossible type/operator combination
31793         utility function.
31794
31795         (Unary::IsIncrementableNumber): Whether the type can be
31796         incremented or decremented with add.
31797         (Unary::ResolveOperator): Also allow enumerations to be bitwise
31798         complemented. 
31799         (Unary::ResolveOperator): Implement ++, !, ~,
31800
31801         (Invocation::Emit): Deal with new Emit convetion.
31802
31803         * All Expression derivatives: Updated their Emit method to return
31804         whether they leave values on the stack or not.
31805
31806         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
31807         stack for expressions that are statements. 
31808
31809 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
31810
31811         * expression.cs (LValue): New interface.  Must be implemented by
31812         LValue objects.
31813         (LocalVariableReference, ParameterReference, FieldExpr): Implement
31814         LValue interface.
31815
31816         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
31817         interface for generating code, simplifies the code.
31818
31819 2001-09-20  Ravi Pratap  <ravi@ximian.com>
31820
31821         * expression.cs (everywhere): Comment out return statements in ::Resolve
31822         methods to avoid the warnings.
31823
31824 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
31825
31826         * driver.cs (parse): Report error 2001 if we can not open the
31827         source file.
31828
31829         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
31830         not resolve it.
31831
31832         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
31833         object. 
31834
31835         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
31836         otherwise nested blocks end up with the same index.
31837
31838         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
31839
31840         * expression.cs:  Instead of having FIXMEs in the Resolve
31841         functions, throw exceptions so it is obvious that we are facing a
31842         bug. 
31843
31844         * cs-parser.jay (invocation_expression): Pass Location information.
31845
31846         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
31847         Use a basename for those routines because .NET does not like paths
31848         on them. 
31849
31850         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
31851         already defined.
31852
31853 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
31854
31855         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
31856         are loading the correct data types (throws an exception if not).
31857         (TypeManager::InitCoreTypes): Use CoreLookupType
31858
31859         * expression.cs (Unary::ResolveOperator): return the child
31860         expression for expressions which are just +expr.
31861         (Unary::ResolveOperator): Return negative literals for -LITERAL
31862         expressions (otherwise they are Unary {Literal}).
31863         (Invocation::Badness): Take into account `Implicit constant
31864         expression conversions'.
31865
31866         * literal.cs (LongLiteral): Implement long literal class.
31867         (IntLiteral): export the `Value' of the intliteral. 
31868
31869 2001-09-19  Ravi Pratap  <ravi@ximian.com>
31870
31871         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
31872
31873         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
31874         instead of 'Operator'
31875
31876         * expression.cs (Binary::ResolveOperator): Update accordingly.
31877         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
31878         and 'Minus'
31879
31880         * cs-parser.jay (unary_expression): Update to use the new names.
31881
31882         * gen-treedump.cs (GetUnary): Same here.
31883
31884         * expression.cs (Unary::Resolve): Implement.
31885         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
31886         operators are found instead of making noise ;-)
31887         (Unary::ResolveOperator): New method to do precisely the same thing which
31888         Binary::ResolveOperator does for Binary expressions.
31889         (Unary.method, .Arguments): Add.
31890         (Unary::OperName): Implement.   
31891         (Unary::ForceConversion): Copy and Paste !
31892
31893         * class.cs (Operator::Define): Fix a small bug for the case when we have 
31894         a unary operator.
31895
31896         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
31897         for the inbuilt operators. Only overloading works for now ;-)
31898
31899 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
31900
31901         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
31902         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
31903
31904         * expression.cs (This::Emit): Implement. 
31905         (This::Resolve): Implement.
31906         (TypeOf:Resolve): Implement.
31907         (Expression::ResolveSimpleName): Add an implicit this to instance
31908         field references. 
31909         (MemberAccess::Resolve): Deal with Parameters and Fields. 
31910         Bind instance variable to Field expressions.
31911         (FieldExpr::Instance): New field used to track the expression that
31912         represents the object instance.
31913         (FieldExpr::Resolve): Track potential errors from MemberLookup not
31914         binding 
31915         (FieldExpr::Emit): Implement.
31916
31917         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
31918         the last instruction contains a return opcode to avoid generating
31919         the last `ret' instruction (this generates correct code, and it is
31920         nice to pass the peverify output).
31921
31922         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
31923         initializer for static and instance variables.
31924         (Constructor::Emit): Allow initializer to be null in the case of
31925         static constructors.  Only emit initializer for instance
31926         constructors. 
31927
31928         (TypeContainer::FindMembers): Return a null array if there are no
31929         matches.
31930
31931         Also fix the code for the MemberTypes.Method branch, as it was not
31932         scanning that for operators (or tried to access null variables before).
31933
31934         * assign.cs (Assign::Emit): Handle instance and static fields. 
31935
31936         * TODO: Updated.
31937
31938         * driver.cs: Stop compilation if there are parse errors.
31939
31940         * cs-parser.jay (constructor_declaration): Provide default base
31941         initializer for non-static constructors.
31942         (constructor_declarator): Do not provide a default base
31943         initializers if none was specified.
31944         Catch the fact that constructors should not have parameters.
31945
31946         * class.cs: Do not emit parent class initializers for static
31947         constructors, that should be flagged as an error.
31948
31949 2001-09-18  Ravi Pratap  <ravi@ximian.com>
31950
31951         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
31952         Move back code into TypeContainer::Populate.
31953
31954 2001-09-18  Ravi Pratap  <ravi@ximian.com>
31955
31956         * class.cs (TypeContainer::AddConstructor): Fix the check to
31957         compare against Name, not Basename. 
31958         (Operator::OpType): Change Plus and Minus to Add and Subtract.
31959
31960         * cs-parser.jay : Update accordingly.
31961
31962         * class.cs (TypeContainer::FindMembers): For the case where we are searching
31963         for methods, don't forget to look into the operators too.
31964         (RegisterMethodBuilder): Helper method to take care of this for
31965         methods, constructors and operators.
31966         (Operator::Define): Completely revamp.
31967         (Operator.OperatorMethod, MethodName): New fields.
31968         (TypeContainer::Populate): Move the registering of builders into
31969         RegisterMethodBuilder.
31970         (Operator::Emit): Re-write.
31971
31972         * expression.cs (Binary::Emit): Comment out code path to emit method
31973         invocation stuff for the case when we have a user defined operator. I am
31974         just not able to get it right !
31975
31976 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
31977
31978         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
31979         argument. 
31980
31981         (Expression::MemberLookup): Provide a version that allows to
31982         specify the MemberTypes and BindingFlags. 
31983
31984         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
31985         so it was not fetching variable information from outer blocks.
31986
31987         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
31988         Beforefieldinit as it was buggy.
31989
31990         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
31991         that Ravi put here.  
31992
31993         * class.cs (Constructor::Emit): Only emit if block is not null.
31994         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
31995         deal with this by semantically definining it as if the user had
31996         done it.
31997
31998         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
31999         constructors as we now "emit" them at a higher level.
32000
32001         (TypeContainer::DefineDefaultConstructor): Used to define the
32002         default constructors if none was provided.
32003
32004         (ConstructorInitializer): Add methods Resolve and Emit. 
32005
32006         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
32007
32008 2001-09-17  Ravi Pratap  <ravi@ximian.com>
32009
32010         * class.cs (TypeContainer::EmitDefaultConstructor): Register
32011         the default constructor builder with our hashtable for methodbuilders
32012         to methodcores.
32013
32014         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
32015         and argument_count is 0 in which case we have a match.
32016         (Binary::ResolveOperator): More null checking and miscellaneous coding
32017         style cleanup.
32018
32019 2001-09-17  Ravi Pratap  <ravi@ximian.com>
32020
32021         * rootcontext.cs (IsNameSpace): Compare against null.
32022
32023         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
32024
32025         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
32026         and Unary::Operator.
32027
32028         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
32029         accordingly.
32030
32031         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
32032         we have overloaded operators.
32033         (Binary::ResolveOperator): Implement the part which does the operator overload
32034         resolution.
32035
32036         * class.cs (Operator::Emit): Implement.
32037         (TypeContainer::Emit): Emit the operators we have too.
32038
32039         * expression.cs (Binary::Emit): Update to emit the appropriate code for
32040         the case when we have a user-defined operator.
32041
32042 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
32043
32044         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
32045
32046 2001-09-16  Ravi Pratap  <ravi@ximian.com>
32047
32048         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
32049         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
32050         (Constructor::Emit): Implement.
32051         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
32052         if we have no work to do. 
32053         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
32054         Emit method.
32055
32056         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
32057         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
32058
32059         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
32060         of parent.parent.
32061
32062 2001-09-15  Ravi Pratap  <ravi@ximian.com>
32063
32064         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
32065         in the source.
32066         (Tree::RecordNamespace): Method to do what the name says ;-)
32067         (Tree::Namespaces): Property to get at the namespaces hashtable.
32068
32069         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
32070         keep track.
32071
32072         * rootcontext.cs (IsNamespace): Fixed it :-)
32073
32074 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
32075
32076         * class.cs (TypeContainer::FindMembers): Add support for
32077         constructors. 
32078         (MethodCore): New class that encapsulates both the shared aspects
32079         of a Constructor and a Method.  
32080         (Method, Constructor): Factored pieces into MethodCore.
32081
32082         * driver.cs: Added --fatal which makes errors throw exceptions.
32083         Load System assembly as well as part of the standard library.
32084
32085         * report.cs: Allow throwing exceptions on errors for debugging.
32086
32087         * modifiers.cs: Do not use `parent', instead use the real type
32088         container to evaluate permission settings.
32089
32090         * class.cs: Put Ravi's patch back in.  He is right, and we will
32091         have to cope with the
32092
32093 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32094
32095         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
32096         FamORAssem, not FamANDAssem.
32097
32098 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
32099
32100         * driver.cs: Added --parse option that only parses its input files
32101         and terminates.
32102
32103         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
32104         incorrect.  IsTopLevel is not used to tell whether an object is
32105         root_types or not (that can be achieved by testing this ==
32106         root_types).  But to see if this is a top-level *class* (not
32107         necessarly our "toplevel" container). 
32108
32109 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32110
32111         * enum.cs (Enum::Define): Modify to call the Lookup method on the
32112         parent instead of a direct call to GetType.
32113
32114 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32115
32116         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
32117         Modifiers.TypeAttr. This should just be a call to that method.
32118
32119         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
32120         object so that we can determine if we are top-level or not.
32121
32122         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
32123         TypeContainer too.
32124
32125         * enum.cs (Enum::Define): Ditto.
32126
32127         * modifiers.cs (FieldAttr): Re-write.
32128
32129         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
32130         (TypeContainer::HaveStaticConstructor): New property to provide access
32131         to precisely that info.
32132
32133         * modifiers.cs (MethodAttr): Re-write.
32134         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
32135
32136         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
32137         of top-level types as claimed.
32138
32139 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
32140
32141         * expression.cs (MemberLookup): Fruitless attempt to lookup
32142         constructors.  Maybe I need to emit default constructors?  That
32143         might be it (currently .NET emits this for me automatically).
32144         (Invocation::OverloadResolve): Cope with Arguments == null.
32145         (Invocation::EmitArguments): new function, shared by the new
32146         constructor and us.
32147         (Invocation::Emit): Handle static and instance methods.  Emit
32148         proper call instruction for virtual or non-virtual invocations.
32149         (New::Emit): Implement.
32150         (New::Resolve): Implement.
32151         (MemberAccess:Resolve): Implement.
32152         (MethodGroupExpr::InstanceExpression): used conforming to the spec
32153         to track instances.
32154         (FieldExpr::Resolve): Set type.
32155
32156         * support.cs: Handle empty arguments.
32157                 
32158         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
32159         SimpleLookup): Auxiliary routines to help parse a qualifier
32160         identifier.  
32161
32162         Update qualifier_identifier rule.
32163
32164         * codegen.cs: Removed debugging messages.
32165
32166         * class.cs: Make this a global thing, this acts just as a "key" to
32167         objects that we might have around.
32168
32169         (Populate): Only initialize method_builders_to_methods once.
32170
32171         * expression.cs (PropertyExpr): Initialize type from the
32172         PropertyType. 
32173
32174         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
32175         Resolve pattern.  Attempt to implicitly convert value to boolean.
32176         Emit code.
32177
32178         * expression.cs: Set the type for the int32/int32 argument case.
32179         (Binary::ResolveOperator): Set the return type to boolean for
32180         comparission operators
32181
32182         * typemanager.cs: Remove debugging print code.
32183
32184         (Invocation::Resolve): resolve type.
32185
32186         * class.cs: Allocate a MemberInfo of the correct size, as the code
32187         elsewhere depends on the test to reflect the correct contents.
32188
32189         (Method::) Keep track of parameters, due to System.Reflection holes
32190
32191         (TypeContainer::Populate): Keep track of MethodBuilders to Method
32192         mapping here.
32193
32194         (TypeContainer::FindMembers): Use ArrayList and then copy an array
32195         of the exact size and return that.
32196
32197         (Class::LookupMethodByBuilder): New function that maps
32198         MethodBuilders to its methods.  Required to locate the information
32199         on methods because System.Reflection bit us again.
32200
32201         * support.cs: New file, contains an interface ParameterData and
32202         two implementations: ReflectionParameters and InternalParameters
32203         used to access Parameter information.  We will need to grow this
32204         as required.
32205
32206         * expression.cs (Invocation::GetParameterData): implement a cache
32207         and a wrapper around the ParameterData creation for methods. 
32208         (Invocation::OverloadResolve): Use new code.
32209
32210 2001-09-13  Ravi Pratap  <ravi@ximian.com>
32211
32212         * class.cs (TypeContainer::EmitField): Remove and move into 
32213         (Field::Define): here and modify accordingly.
32214         (Field.FieldBuilder): New member.
32215         (TypeContainer::Populate): Update accordingly.
32216         (TypeContainer::FindMembers): Implement.
32217
32218 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
32219
32220         * statement.cs: (VariableInfo::VariableType): New field to be
32221         initialized with the full type once it is resolved. 
32222
32223 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
32224
32225         * parameter.cs (GetParameterInfo): Use a type cache to compute
32226         things only once, and to reuse this information
32227
32228         * expression.cs (LocalVariableReference::Emit): Implement.
32229         (OpcodeCast::Emit): fix.
32230
32231         (ParameterReference::Resolve): Implement.
32232         (ParameterReference::Emit): Implement.
32233
32234         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
32235         that are expressions need to stay as Expressions.
32236
32237         * typemanager.cs (CSharpName): Returns the C# name of a type if
32238         possible. 
32239
32240         * expression.cs (Expression::ConvertImplicit): New function that
32241         implements implicit type conversions.
32242
32243         (Expression::ImplicitReferenceConversion): Implements implicit
32244         reference conversions.
32245
32246         (EmptyCast): New type for transparent casts.
32247
32248         (OpcodeCast): New type for casts of types that are performed with
32249         a sequence of bytecodes.
32250
32251         (BoxedCast): New type used for casting value types into reference
32252         types.  Emits a box opcode.
32253
32254         (Binary::DoNumericPromotions): Implements numeric promotions of
32255         and computation of the Binary::Type.
32256
32257         (Binary::EmitBranchable): Optimization.
32258
32259         (Binary::Emit): Implement code emission for expressions.
32260
32261         * typemanager.cs (TypeManager): Added two new core types: sbyte
32262         and byte.
32263
32264 2001-09-12  Ravi Pratap  <ravi@ximian.com>
32265
32266         * class.cs (TypeContainer::FindMembers): Method which does exactly
32267         what Type.FindMembers does, only we don't have to use reflection. No
32268         implementation yet.
32269
32270         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
32271         typecontainer objects as we need to get at them.
32272         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
32273
32274         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
32275         typecontainer object.
32276
32277         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
32278         of just a Report object.
32279
32280 2001-09-11  Ravi Pratap  <ravi@ximian.com>
32281
32282         * class.cs (Event::Define): Go back to using the prefixes "add_" and
32283         "remove_"
32284         (TypeContainer::Populate): Now define the delegates of the type too.
32285         (TypeContainer.Delegates): Property to access the list of delegates defined
32286         in the type.
32287
32288         * delegates.cs (Delegate::Define): Implement partially.
32289
32290         * modifiers.cs (TypeAttr): Handle more flags.
32291
32292 2001-09-11  Ravi Pratap  <ravi@ximian.com>
32293
32294         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
32295         and not <=
32296         (Operator::Define): Re-write logic to get types by using the LookupType method
32297         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
32298         (Indexer::Define): Ditto.
32299         (Event::Define): Ditto.
32300         (Property::Define): Ditto.
32301
32302 2001-09-10  Ravi Pratap  <ravi@ximian.com>
32303
32304         * class.cs (TypeContainer::Populate): Now define operators too. 
32305         (TypeContainer.Operators): New property to access the list of operators
32306         in a type.
32307         (Operator.OperatorMethodBuilder): New member to hold the method builder
32308         for the operator we are defining.
32309         (Operator::Define): Implement.
32310
32311 2001-09-10  Ravi Pratap  <ravi@ximian.com>
32312
32313         * class.cs (Event::Define): Make the prefixes of the accessor methods
32314         addOn_ and removeOn_ 
32315
32316         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
32317         of the location being passed in too. Ideally, this should go later since all
32318         error reporting should be done through the Report object.
32319
32320         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
32321         (Populate): Iterate thru the indexers we have and define them too.
32322         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
32323         for the get and set accessors.
32324         (Indexer::Define): Implement.
32325
32326 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
32327
32328         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
32329         my previous implementation, did not work.
32330
32331         * typemanager.cs: Add a couple of missing types (the longs).
32332
32333         * literal.cs: Use TypeManager.bool_type instead of getting it.
32334
32335         * expression.cs (EventExpr): New kind of expressions.
32336         (Expressio::ExprClassFromMemberInfo): finish
32337
32338 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
32339
32340         * assign.cs: Emit stores to static fields differently.
32341
32342 2001-09-08  Ravi Pratap  <ravi@ximian.com>
32343
32344         * Merge in changes and adjust code to tackle conflicts. Backed out my
32345         code in Assign::Resolve ;-) 
32346
32347 2001-09-08  Ravi Pratap  <ravi@ximian.com>
32348
32349         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
32350         instead Report.Error and also pass in the location.
32351         (CSharpParser::Lexer): New readonly property to return the reference
32352         to the Tokenizer object.
32353         (declare_local_variables): Use Report.Error with location instead of plain 
32354         old error.
32355         (CheckDef): Ditto.
32356
32357         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
32358         (Operator.CheckBinaryOperator): Ditto.
32359
32360         * cs-parser.jay (operator_declarator): Update accordingly.
32361
32362         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
32363         (CheckBinaryOperator): Same here.
32364
32365         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
32366         on the name without any prefixes of namespace names etc. This is because we
32367         already might have something already fully qualified like 
32368         'System.Console.WriteLine'
32369
32370         * assign.cs (Resolve): Begin implementation. Stuck ;-)
32371
32372 2001-09-07  Ravi Pratap  <ravi@ximian.com>
32373
32374         * cs-tokenizer.cs (location): Return a string which also contains
32375         the file name.
32376
32377         * expression.cs (ElementAccess): New class for expressions of the
32378         type 'element access.'
32379         (BaseAccess): New class for expressions of the type 'base access.'
32380         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
32381         respectively.
32382
32383         * cs-parser.jay (element_access): Implement action.
32384         (base_access): Implement actions.
32385         (checked_expression, unchecked_expression): Implement.
32386
32387         * cs-parser.jay (local_variable_type): Correct and implement.
32388         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
32389
32390         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
32391
32392         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
32393         name and the specifiers.
32394
32395         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
32396
32397         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
32398         making them all public ;-)
32399
32400         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
32401         class anyways.
32402
32403 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
32404
32405         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
32406         PropertyExprs.
32407         (FieldExpr, PropertyExprs): New resolved expressions.
32408         (SimpleName::MemberStaticCheck): Perform static checks for access
32409         to non-static fields on static methods. Maybe this should be
32410         generalized for MemberAccesses. 
32411         (SimpleName::ResolveSimpleName): More work on simple name
32412         resolution. 
32413
32414         * cs-parser.jay (primary_expression/qualified_identifier): track
32415         the parameter index.
32416
32417         * codegen.cs (CodeGen::Save): Catch save exception, report error.
32418         (EmitContext::EmitBoolExpression): Chain to expression generation
32419         instead of temporary hack.
32420         (::EmitStatementExpression): Put generic expression code generation.
32421
32422         * assign.cs (Assign::Emit): Implement variable assignments to
32423         local variables, parameters and fields.
32424
32425 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
32426
32427         * statement.cs (Block::GetVariableInfo): New method, returns the
32428         VariableInfo for a variable name in a block.
32429         (Block::GetVariableType): Implement in terms of GetVariableInfo
32430
32431         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
32432         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
32433
32434 2001-09-06  Ravi Pratap  <ravi@ximian.com>
32435
32436         * cs-parser.jay (operator_declaration): Continue on my quest : update
32437         to take attributes argument.
32438         (event_declaration): Ditto.
32439         (enum_declaration): Ditto.
32440         (indexer_declaration): Ditto.
32441
32442         * class.cs (Operator::Operator): Update constructor accordingly.
32443         (Event::Event): Ditto.
32444
32445         * delegate.cs (Delegate::Delegate): Same here.
32446
32447         * enum.cs (Enum::Enum): Same here.
32448
32449 2001-09-05  Ravi Pratap  <ravi@ximian.com>
32450
32451         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
32452
32453         * ../tests/cs0658.cs : New file to demonstrate error 0658.
32454
32455         * attribute.cs (Attributes): New class to encapsulate all attributes which were
32456         being passed around as an arraylist.
32457         (Attributes::AddAttribute): Method to add attribute sections.
32458
32459         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
32460         (struct_declaration): Update accordingly.
32461         (constant_declaration): Update.
32462         (field_declaration): Update.
32463         (method_header): Update.
32464         (fixed_parameter): Update.
32465         (parameter_array): Ditto.
32466         (property_declaration): Ditto.
32467         (destructor_declaration): Ditto.
32468
32469         * class.cs (Struct::Struct): Update constructors accordingly.
32470         (Class::Class): Ditto.
32471         (Field::Field): Ditto.
32472         (Method::Method): Ditto.
32473         (Property::Property): Ditto.
32474         (TypeContainer::OptAttribute): update property's return type.
32475
32476         * interface.cs (Interface.opt_attributes): New member.
32477         (Interface::Interface): Update to take the extra Attributes argument.
32478
32479         * parameter.cs (Parameter::Parameter): Ditto.
32480
32481         * constant.cs (Constant::Constant): Ditto.
32482
32483         * interface.cs (InterfaceMemberBase): New OptAttributes field.
32484         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
32485         the attributes as a parameter.
32486         (InterfaceProperty): Update constructor call.
32487         (InterfaceEvent): Ditto.
32488         (InterfaceMethod): Ditto.
32489         (InterfaceIndexer): Ditto.
32490
32491         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
32492         pass the attributes too.
32493         (interface_event_declaration): Ditto.
32494         (interface_property_declaration): Ditto.
32495         (interface_method_declaration): Ditto.
32496         (interface_declaration): Ditto.
32497
32498 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
32499
32500         * class.cs (Method::Define): Track the "static Main" definition to
32501         create an entry point. 
32502
32503         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
32504         EntryPoint if we find it. 
32505
32506         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
32507         (EmitContext::ig): Make this variable public.
32508
32509         * driver.cs: Make the default output file be the first file name
32510         with the .exe extension.  
32511
32512         Detect empty compilations
32513
32514         Handle various kinds of output targets.  Handle --target and
32515         rename -t to --dumper.
32516
32517         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
32518         methods inherited from Expression return now an Expression.  This
32519         will is used during the tree rewriting as we resolve them during
32520         semantic analysis.
32521
32522         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
32523         the spec.  Missing entirely is the information about
32524         accessability of elements of it.
32525
32526         (Expression::ExprClassFromMemberInfo): New constructor for
32527         Expressions that creates a fully initialized Expression based on
32528         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
32529         a Type.
32530
32531         (Invocation::Resolve): Begin implementing resolution of invocations.
32532
32533         * literal.cs (StringLiteral):  Implement Emit.
32534
32535 2001-09-05  Ravi Pratap  <ravi@ximian.com>
32536
32537         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
32538         member.
32539
32540 2001-09-04  Ravi Pratap  <ravi@ximian.com>
32541
32542         * cs-parser.jay (attribute_arguments): Implement actions.
32543         (attribute): Fix bug in production. Implement action.
32544         (attribute_list): Implement.
32545         (attribute_target): Implement.
32546         (attribute_target_specifier, opt_target_specifier): Implement
32547         (CheckAttributeTarget): New method to check if the attribute target
32548         is valid.
32549         (attribute_section): Implement.
32550         (opt_attributes): Implement.
32551
32552         * attribute.cs : New file to handle attributes.
32553         (Attribute): Class to hold attribute info.
32554
32555         * cs-parser.jay (opt_attribute_target_specifier): Remove production
32556         (attribute_section): Modify production to use 2 different rules to 
32557         achieve the same thing. 1 s/r conflict down !
32558         Clean out commented, useless, non-reducing dimension_separator rules.
32559
32560         * class.cs (TypeContainer.attributes): New member to hold list
32561         of attributes for a type.
32562         (Struct::Struct): Modify to take one more argument, the attribute list.
32563         (Class::Class): Ditto.
32564         (Field::Field): Ditto.
32565         (Method::Method): Ditto.
32566         (Property::Property): Ditto.
32567
32568         * cs-parser.jay (struct_declaration): Update constructor call to
32569         pass in the attributes too.
32570         (class_declaration): Ditto.
32571         (constant_declaration): Ditto.
32572         (field_declaration): Ditto.
32573         (method_header): Ditto.
32574         (fixed_parameter): Ditto.
32575         (parameter_array): Ditto.
32576         (property_declaration): Ditto.
32577
32578         * constant.cs (Constant::Constant): Update constructor similarly.
32579         Use System.Collections.
32580
32581         * parameter.cs (Parameter::Parameter): Update as above.
32582
32583 2001-09-02  Ravi Pratap  <ravi@ximian.com>
32584
32585         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
32586         (TypeContainer.delegates): New member to hold list of delegates.
32587
32588         * cs-parser.jay (delegate_declaration): Implement the action correctly 
32589         this time as I seem to be on crack ;-)
32590
32591 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
32592
32593         * rootcontext.cs (RootContext::IsNamespace): new function, used to
32594         tell whether an identifier represents a namespace.
32595
32596         * expression.cs (NamespaceExpr): A namespace expression, used only
32597         temporarly during expression resolution.
32598         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
32599         utility functions to resolve names on expressions.
32600
32601 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
32602
32603         * codegen.cs: Add hook for StatementExpressions. 
32604
32605         * class.cs: Fix inverted test for static flag in methods.
32606
32607 2001-09-02  Ravi Pratap  <ravi@ximian.com>
32608
32609         * class.cs (Operator::CheckUnaryOperator): Correct error number used
32610         to make it coincide with MS' number.
32611         (Operator::CheckBinaryOperator): Ditto.
32612
32613         * ../errors/errors.txt : Remove error numbers added earlier.
32614
32615         * ../errors/cs1019.cs : Test case for error # 1019
32616
32617         * ../errros/cs1020.cs : Test case for error # 1020
32618
32619         * cs-parser.jay : Clean out commented cruft.
32620         (dimension_separators, dimension_separator): Comment out. Ostensibly not
32621         used anywhere - non-reducing rule.
32622         (namespace_declarations): Non-reducing rule - comment out.
32623
32624         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
32625         with TypeContainer::AddEnum.
32626
32627         * delegate.cs : New file for delegate handling classes.
32628         (Delegate): Class for declaring delegates.
32629
32630         * makefile : Update.
32631
32632         * cs-parser.jay (delegate_declaration): Implement.
32633
32634 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
32635
32636         * class.cs (Event::Define): Implement.
32637         (Event.EventBuilder): New member.
32638
32639         * class.cs (TypeContainer::Populate): Update to define all enums and events
32640         we have.
32641         (Events): New property for the events arraylist we hold. Shouldn't we move to using
32642         readonly fields for all these cases ?
32643
32644 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
32645
32646         * class.cs (Property): Revamp to use the convention of making fields readonly.
32647         Accordingly modify code elsewhere.
32648
32649         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
32650         the Define method of the Property class.
32651
32652         * class.cs : Clean up applied patch and update references to variables etc. Fix 
32653         trivial bug.
32654         (TypeContainer::Populate): Update to define all the properties we have. Also
32655         define all enumerations.
32656
32657         * enum.cs (Define): Implement.
32658
32659 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
32660
32661         * cs-parser.jay (overloadable_operator): The semantic value is an
32662         enum of the Operator class.
32663         (operator_declarator): Implement actions.
32664         (operator_declaration): Implement.
32665
32666         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
32667         validity of definitions.
32668         (Operator::CheckBinaryOperator): Static method to check for binary operators
32669         (TypeContainer::AddOperator): New method to add an operator to a type.
32670
32671         * cs-parser.jay (indexer_declaration): Added line to actually call the
32672         AddIndexer method so it gets added ;-)
32673
32674         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
32675         already taken care of by the MS compiler ?  
32676
32677 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
32678
32679         * class.cs (Operator): New class for operator declarations.
32680         (Operator::OpType): Enum for the various operators.
32681
32682 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
32683
32684         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
32685         ostensibly handle this in semantic analysis.
32686
32687         * cs-parser.jay (general_catch_clause): Comment out
32688         (specific_catch_clauses, specific_catch_clause): Ditto.
32689         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
32690         (catch_args, opt_catch_args): New productions.
32691         (catch_clause): Rewrite to use the new productions above
32692         (catch_clauses): Modify accordingly.
32693         (opt_catch_clauses): New production to use in try_statement
32694         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
32695         and re-write the code in the actions to extract the specific and
32696         general catch clauses by being a little smart ;-)
32697
32698         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
32699         Hooray, try and catch statements parse fine !
32700
32701 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
32702
32703         * statement.cs (Block::GetVariableType): Fix logic to extract the type
32704         string from the hashtable of variables.
32705
32706         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
32707         I end up making that mistake ;-)
32708         (catch_clauses): Fixed gross error which made Key and Value of the 
32709         DictionaryEntry the same : $1 !!
32710
32711 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
32712
32713         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
32714
32715         * cs-parser.jay (event_declaration): Correct to remove the semicolon
32716         when the add and remove accessors are specified. 
32717
32718 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
32719
32720         * cs-parser.jay (IndexerDeclaration): New helper class to hold
32721         information about indexer_declarator.
32722         (indexer_declarator): Implement actions.
32723         (parsing_indexer): New local boolean used to keep track of whether
32724         we are parsing indexers or properties. This is necessary because 
32725         implicit_parameters come into picture even for the get accessor in the 
32726         case of an indexer.
32727         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
32728
32729         * class.cs (Indexer): New class for indexer declarations.
32730         (TypeContainer::AddIndexer): New method to add an indexer to a type.
32731         (TypeContainer::indexers): New member to hold list of indexers for the
32732         type.
32733
32734 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
32735
32736         * cs-parser.jay (add_accessor_declaration): Implement action.
32737         (remove_accessor_declaration): Implement action.
32738         (event_accessors_declaration): Implement
32739         (variable_declarators): swap statements for first rule - trivial.
32740
32741         * class.cs (Event): New class to hold information about event
32742         declarations.
32743         (TypeContainer::AddEvent): New method to add an event to a type
32744         (TypeContainer::events): New member to hold list of events.
32745
32746         * cs-parser.jay (event_declaration): Implement actions.
32747
32748 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
32749
32750         * cs-parser.jay (dim_separators): Implement. Make it a string
32751         concatenating all the commas together, just as they appear.
32752         (opt_dim_separators): Modify accordingly
32753         (rank_specifiers): Update accordingly. Basically do the same
32754         thing - instead, collect the brackets here.
32755         (opt_rank_sepcifiers): Modify accordingly.
32756         (array_type): Modify to actually return the complete type string
32757         instead of ignoring the rank_specifiers.
32758         (expression_list): Implement to collect the expressions
32759         (variable_initializer): Implement. We make it a list of expressions
32760         essentially so that we can handle the array_initializer case neatly too.
32761         (variable_initializer_list): Implement.
32762         (array_initializer): Make it a list of variable_initializers
32763         (opt_array_initializer): Modify accordingly.
32764
32765         * expression.cs (New::NType): Add enumeration to help us
32766         keep track of whether we have an object/delegate creation
32767         or an array creation.
32768         (New:NewType, New::Rank, New::Indices, New::Initializers): New
32769         members to hold data about array creation.
32770         (New:New): Modify to update NewType
32771         (New:New): New Overloaded contructor for the array creation
32772         case.
32773
32774         * cs-parser.jay (array_creation_expression): Implement to call
32775         the overloaded New constructor.
32776
32777 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
32778
32779         * class.cs (TypeContainer::Constructors): Return member
32780         constructors instead of returning null.
32781
32782 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
32783
32784         * typemanager.cs (InitCoreTypes): Initialize the various core
32785         types after we have populated the type manager with the user
32786         defined types (this distinction will be important later while
32787         compiling corlib.dll)
32788
32789         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
32790         on Expression Classification.  Now all expressions have a method
32791         `Resolve' and a method `Emit'.
32792
32793         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
32794         generation from working.     Also add some temporary debugging
32795         code. 
32796
32797 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
32798
32799         * codegen.cs: Lots of code generation pieces.  This is only the
32800         beginning, will continue tomorrow with more touches of polish.  We
32801         handle the fundamentals of if, while, do, for, return.  Others are
32802         trickier and I need to start working on invocations soon.
32803
32804         * gen-treedump.cs: Bug fix, use s.Increment here instead of
32805         s.InitStatement. 
32806
32807         * codegen.cs (EmitContext): New struct, used during code
32808         emission to keep a context.   Most of the code generation will be
32809         here. 
32810
32811         * cs-parser.jay: Add embedded blocks to the list of statements of
32812         this block.  So code generation proceeds in a top down fashion.
32813
32814 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
32815
32816         * statement.cs: Add support for multiple child blocks.
32817
32818 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
32819
32820         * codegen.cs (EmitCode): New function, will emit the code for a
32821         Block of code given a TypeContainer and its ILGenerator. 
32822
32823         * statement.cs (Block): Standard public readonly optimization.
32824         (Block::Block constructors): Link children. 
32825         (Block::Child): Child Linker.
32826         (Block::EmitVariables): Emits IL variable declarations.
32827
32828         * class.cs: Drop support for MethodGroups here, delay until
32829         Semantic Analysis.
32830         (Method::): Applied the same simplification that I did before, and
32831         move from Properties to public readonly fields.
32832         (Method::ParameterTypes): Returns the parameter types for the
32833         function, and implements a cache that will be useful later when I
32834         do error checking and the semantic analysis on the methods is
32835         performed.
32836         (Constructor::GetCallingConvention): Renamed from CallingConvetion
32837         and made a method, optional argument tells whether this is a class
32838         or a structure to apply the `has-this' bit.
32839         (Method::GetCallingConvention): Implement, returns the calling
32840         convention. 
32841         (Method::Define): Defines the type, a second pass is performed
32842         later to populate the methods.
32843
32844         (Constructor::ParameterTypes): implement a cache similar to the
32845         one on Method::ParameterTypes, useful later when we do semantic
32846         analysis. 
32847
32848         (TypeContainer::EmitMethod):  New method.  Emits methods.
32849
32850         * expression.cs: Removed MethodGroup class from here.
32851
32852         * parameter.cs (Parameters::GetCallingConvention): new method.
32853
32854 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
32855
32856         * class.cs (TypeContainer::Populate): Drop RootContext from the
32857         argument. 
32858
32859         (Constructor::CallingConvention): Returns the calling convention.
32860         (Constructor::ParameterTypes): Returns the constructor parameter
32861         types. 
32862
32863         (TypeContainer::AddConstructor): Keep track of default constructor
32864         and the default static constructor.
32865
32866         (Constructor::) Another class that starts using `public readonly'
32867         instead of properties. 
32868
32869         (Constructor::IsDefault): Whether this is a default constructor. 
32870
32871         (Field::) use readonly public fields instead of properties also.
32872
32873         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
32874         track of static constructors;  If none is used, turn on
32875         BeforeFieldInit in the TypeAttributes. 
32876
32877         * cs-parser.jay (opt_argument_list): now the return can be null
32878         for the cases where there are no arguments. 
32879
32880         (constructor_declarator): If there is no implicit `base' or
32881         `this', then invoke the default parent constructor. 
32882
32883         * modifiers.cs (MethodAttr): New static function maps a set of
32884         modifiers flags into a MethodAttributes enum
32885         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
32886         MethodAttr, TypeAttr to represent the various mappings where the
32887         modifiers are used.
32888         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
32889
32890 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
32891
32892         * parameter.cs (GetParameterInfo): Fix bug where there would be no
32893         method arguments.
32894
32895         * interface.cs (PopulateIndexer): Implemented the code generator
32896         for interface indexers.
32897
32898 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
32899
32900         * interface.cs (InterfaceMemberBase): Now we track the new status
32901         here.  
32902
32903         (PopulateProperty): Implement property population.  Woohoo!  Got
32904         Methods and Properties going today. 
32905
32906         Removed all the properties for interfaces, and replaced them with
32907         `public readonly' fields. 
32908
32909 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
32910
32911         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
32912         initialize their hashtables/arraylists only when they are needed
32913         instead of doing this always.
32914
32915         * parameter.cs: Handle refs and out parameters.
32916
32917         * cs-parser.jay: Use an ArrayList to construct the arguments
32918         instead of the ParameterCollection, and then cast that to a
32919         Parameter[] array.
32920
32921         * parameter.cs: Drop the use of ParameterCollection and use
32922         instead arrays of Parameters.
32923
32924         (GetParameterInfo): Use the Type, not the Name when resolving
32925         types. 
32926
32927 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
32928
32929         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
32930         and instead use public readonly fields.
32931
32932         * class.cs: Put back walking code for type containers.
32933
32934 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
32935
32936         * class.cs (MakeConstant): Code to define constants.
32937
32938         * rootcontext.cs (LookupType): New function.  Used to locate types 
32939
32940
32941 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
32942
32943         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
32944         this System.Reflection code is.  Kudos to Microsoft
32945
32946         * typemanager.cs: Implement a type cache and avoid loading all
32947         types at boot time.  Wrap in LookupType the internals.  This made
32948         the compiler so much faster.  Wow.  I rule!
32949
32950         * driver.cs: Make sure we always load mscorlib first (for
32951         debugging purposes, nothing really important).
32952
32953         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
32954         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
32955
32956         * rootcontext.cs: Lookup types on their namespace;  Lookup types
32957         on namespaces that have been imported using the `using' keyword.
32958
32959         * class.cs (TypeContainer::TypeAttr): Virtualize.
32960         (Class::TypeAttr): Return attributes suitable for this bad boy.
32961         (Struct::TypeAttr): ditto.
32962         Handle nested classes.
32963         (TypeContainer::) Remove all the type visiting code, it is now
32964         replaced with the rootcontext.cs code
32965
32966         * rootcontext.cs (GetClassBases): Added support for structs. 
32967
32968 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
32969
32970         * interface.cs, statement.cs, class.cs, parameter.cs,
32971         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
32972         Drop use of TypeRefs, and use strings instead.
32973
32974 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
32975
32976         * rootcontext.cs: 
32977
32978         * class.cs (Struct::Struct): set the SEALED flags after
32979         checking the modifiers.
32980         (TypeContainer::TypeAttr): new property, returns the
32981         TypeAttributes for a class.  
32982
32983         * cs-parser.jay (type_list): Oops, list production was creating a
32984         new list of base types.
32985
32986         * rootcontext.cs (StdLib): New property.
32987         (GetInterfaceTypeByName): returns an interface by type name, and
32988         encapsulates error handling here.
32989         (GetInterfaces): simplified.
32990         (ResolveTree): Encapsulated all the tree resolution here.
32991         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
32992         types. 
32993
32994         * driver.cs: Add support for --nostdlib, to avoid loading the
32995         default assemblies.
32996         (Main): Do not put tree resolution here. 
32997
32998         * rootcontext.cs: Beginning of the class resolution.
32999
33000 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
33001
33002         * rootcontext.cs: Provide better error reporting. 
33003
33004         * cs-parser.jay (interface_base): set our $$ to be interfaces.
33005
33006         * rootcontext.cs (CreateInterface): Handle the case where there
33007         are no parent interfaces.
33008
33009         (CloseTypes): Routine to flush types at the end.
33010         (CreateInterface): Track types.
33011         (GetInterfaces): Returns an array of Types from the list of
33012         defined interfaces.
33013
33014         * typemanager.c (AddUserType): Mechanism to track user types (puts
33015         the type on the global type hash, and allows us to close it at the
33016         end). 
33017
33018 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
33019
33020         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
33021         RecordInterface instead.
33022
33023         * cs-parser.jay: Updated to reflect changes above.
33024
33025         * decl.cs (Definition): Keep track of the TypeBuilder type that
33026         represents this type here.  Not sure we will use it in the long
33027         run, but wont hurt for now.
33028
33029         * driver.cs: Smaller changes to accomodate the new code.
33030
33031         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
33032         when done. 
33033
33034         * rootcontext.cs (CreateInterface):  New method, used to create
33035         the System.TypeBuilder type for interfaces.
33036         (ResolveInterfaces): new entry point to resolve the interface
33037         hierarchy. 
33038         (CodeGen): Property, used to keep track of the code generator.
33039
33040 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
33041
33042         * cs-parser.jay: Add a second production for delegate_declaration
33043         with `VOID'.
33044
33045         (enum_body): Put an opt_comma here instead of putting it on
33046         enum_body or enum_member_declarations so we can handle trailing
33047         commas on enumeration members.  Gets rid of a shift/reduce.
33048
33049         (type_list): Need a COMMA in the middle.
33050
33051         (indexer_declaration): Tell tokenizer to recognize get/set
33052
33053         * Remove old targets.
33054
33055         * Re-add the parser target.
33056
33057 2001-07-13  Simon Cozens <simon@simon-cozens.org>
33058
33059         * cs-parser.jay: Add precendence rules for a number of operators
33060         ot reduce the number of shift/reduce conflicts in the grammar.
33061
33062 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
33063
33064         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
33065         and put it here.
33066
33067         Get rid of old crufty code.
33068
33069         * rootcontext.cs: Use this to keep track of the parsed
33070         representation and the defined types available to the program. 
33071
33072         * gen-treedump.cs: adjust for new convention.
33073
33074         * type.cs: Split out the type manager, and the assembly builder
33075         from here. 
33076
33077         * typemanager.cs: the type manager will live here now.
33078
33079         * cil-codegen.cs: And the code generator here. 
33080
33081 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
33082
33083         * makefile: Fixed up for easy making.
33084
33085 2001-07-13  Simon Cozens <simon@simon-cozens.org>
33086
33087         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
33088         the 
33089
33090         (unary_expression): Expand pre_increment_expression and
33091         post_decrement_expression to reduce a shift/reduce.
33092
33093 2001-07-11  Simon Cozens
33094
33095         * cs-tokenizer.cs: Hex numbers should begin with a 0.
33096
33097         Improve allow_keyword_as_indent name.
33098
33099 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
33100
33101         * Adjustments for Beta2. 
33102
33103 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
33104
33105         * decl.cs: Added `Define' abstract method.
33106         (InTransit): new property, used to catch recursive definitions. 
33107
33108         * interface.cs: Implement `Define'. 
33109
33110         * modifiers.cs: Map Modifiers.constants to
33111         System.Reflection.TypeAttribute flags.
33112
33113         * class.cs: Keep track of types and user-defined types.
33114         (BuilderInit): New method for creating an assembly
33115         (ResolveType): New function to launch the resolution process, only
33116         used by interfaces for now.
33117
33118         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
33119         that are inserted into the name space. 
33120
33121 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
33122
33123         * ARGH.  I have screwed up my tree so many times due to the use of
33124         rsync rather than using CVS.  Going to fix this at once. 
33125
33126         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
33127         load types.
33128
33129 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
33130
33131         * Experiment successful: Use System.Type rather that our own
33132         version of Type.  
33133
33134 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
33135
33136         * cs-parser.jay: Removed nsAliases from here.
33137
33138         Use new namespaces, handle `using XXX;' 
33139
33140         * namespace.cs: Reimplemented namespace handling, use a recursive
33141         definition of the class.  Now we can keep track of using clauses
33142         and catch invalid using clauses.
33143
33144 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
33145
33146         * gen-treedump.cs: Adapted for all the renaming.
33147
33148         * expression.cs (Expression): this class now has a Type property
33149         which returns an expression Type.
33150
33151         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
33152         `Type', as this has a different meaning now in the base
33153
33154 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
33155
33156         * interface.cs, class.cs: Removed from all the sources the
33157         references to signature computation, as we can not do method
33158         signature computation during the parsing time, as we are not
33159         trying to solve at that point distinguishing:
33160
33161         class X {
33162                 void a (Blah x) {}
33163                 void a (NS.Blah x) {}
33164         }
33165
33166         Which depending on the context might be valid or not, as we do not
33167         know if Blah is the same thing as NS.Blah at that point.
33168
33169         * Redid everything so the code uses TypeRefs now instead of
33170         Types.  TypeRefs are just temporary type placeholders, that need
33171         to be resolved.  They initially have a pointer to a string and the
33172         current scope in which they are used.  This is used later by the
33173         compiler to resolve the reference to an actual Type. 
33174
33175         * DeclSpace is no longer a CIR.Type, and neither are
33176         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
33177         are all DeclSpaces, but no Types. 
33178
33179         * type.cs (TypeRefManager): This implements the TypeRef manager,
33180         which keeps track of all the types that need to be resolved after
33181         the parsing has finished. 
33182
33183 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
33184
33185         * ARGH.  We are going to have to store `foreach' as a class rather
33186         than resolving it, as we need to verify error 1579 after name
33187         resolution.   *OR* we could keep a flag that says `This request to
33188         IEnumerator comes from a foreach statement' which we can then use
33189         to generate the error.
33190
33191 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
33192
33193         * class.cs (TypeContainer.AddMethod): we now add methods to the
33194         MethodGroup instead of the method hashtable.  
33195
33196         * expression.cs: Add MethodGroup abstraction, which gets us one
33197         step closer to the specification in the way we handle method
33198         declarations.  
33199
33200         * cs-parser.jay (primary_expression): qualified_identifier now
33201         tried to match up an identifier to a local variable reference or
33202         to a parameter reference.
33203
33204         current_local_parameters is now a parser global variable that
33205         points to the current parameters for the block, used during name
33206         lookup.
33207
33208         (property_declaration): Now creates an implicit `value' argument to
33209         the set accessor.
33210
33211 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
33212
33213         * parameter.cs: Do not use `param' arguments as part of the
33214         signature, per the spec.
33215
33216 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
33217
33218         * decl.cs: Base class for classes, structs and interfaces.  This
33219         is the "Declaration Space" 
33220
33221         * cs-parser.jay: Use CheckDef for checking declaration errors
33222         instead of having one on each function.
33223
33224         * class.cs: Factor out some code for handling error handling in
33225         accordance to the "Declarations" section in the "Basic Concepts"
33226         chapter in the ECMA C# spec.
33227
33228         * interface.cs: Make all interface member classes derive from
33229         InterfaceMemberBase.
33230
33231 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
33232
33233         * Many things: all interfaces are parsed and generated in
33234         gen-treedump.  Support for member variables, constructors,
33235         destructors, properties, constants is there.
33236
33237         Beginning of the IL backend, but very little done, just there for
33238         testing purposes. 
33239
33240 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
33241
33242         * cs-parser.jay: Fix labeled statement.
33243
33244         * cs-tokenizer.cs (escape): Escape " and ' always.
33245         ref_line, ref_name: keep track of the line/filename as instructed
33246         by #line by the compiler.
33247         Parse #line.
33248
33249 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
33250
33251         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
33252         to match the values in System.CodeDOM.
33253
33254         Divid renamed to Divide.
33255
33256         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
33257         statements. 
33258         (Statements.set): remove.
33259
33260         * System.CodeDOM/CodeCatchClause.cs: always have a valid
33261         statements. 
33262
33263         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
33264         falseStatements always have valid values. 
33265
33266         * cs-parser.jay: Use System.CodeDOM now.
33267